public inbox for git-commits@fedoraproject.org
help / color / mirror / Atom feed
* [rpms/perl-Storable] rawhide: 3.41 bump (rhbz#2485665)
@ 2026-06-08 11:23 Jitka Plesnikova
0 siblings, 0 replies; only message in thread
From: Jitka Plesnikova @ 2026-06-08 11:23 UTC (permalink / raw)
To: git-commits
A new commit has been pushed.
Repo : rpms/perl-Storable
Branch : rawhide
Commit : 52be1d515dc595ae3dda9152ffa2ae6cfeb875ed
Author : Jitka Plesnikova <jplesnik@redhat.com>
Date : 2026-06-08T13:23:12+02:00
Stats : +9/-14505 in 5 file(s)
URL : https://src.fedoraproject.org/rpms/perl-Storable/c/52be1d515dc595ae3dda9152ffa2ae6cfeb875ed?branch=rawhide
Log:
3.41 bump (rhbz#2485665)
---
diff --git a/.gitignore b/.gitignore
index dd78fa3..ea501cd 100644
--- a/.gitignore
+++ b/.gitignore
@@ -7,3 +7,4 @@
/Storable-3.11_repackaged.tar.gz
/Storable-3.15.tar.gz
/Storable-3.25.tar.gz
+/Storable-3.41.tar.gz
diff --git a/Storable-3.25-Upgrade-to-3.32.patch b/Storable-3.25-Upgrade-to-3.32.patch
deleted file mode 100644
index e67bc46..0000000
--- a/Storable-3.25-Upgrade-to-3.32.patch
+++ /dev/null
@@ -1,538 +0,0 @@
-From 93b4cf22054a0e3f9f5d4ae8eaec85e8ca28944c Mon Sep 17 00:00:00 2001
-From: Jitka Plesnikova <jplesnik@redhat.com>
-Date: Mon, 12 Jun 2023 16:00:23 +0200
-Subject: [PATCH] Upgrade to 3.32
-
----
- ChangeLog | 29 ++++++++++++++
- Makefile.PL | 2 +-
- Storable.pm | 30 ++++++++------
- Storable.xs | 111 ++++++++++++++++++++++++++++++++++++++++++----------
- t/blessed.t | 53 ++++++++++++++++++++++++-
- t/boolean.t | 84 +++++++++++++++++++++++++++++++++++++++
- t/malice.t | 6 +--
- 7 files changed, 278 insertions(+), 37 deletions(-)
- create mode 100644 t/boolean.t
-
-diff --git a/ChangeLog b/ChangeLog
-index b1f4790..6619543 100644
---- a/ChangeLog
-+++ b/ChangeLog
-@@ -1,3 +1,32 @@
-+2023-05-26 21:36:00 demerphq
-+ version 3.32
-+ * Update security advisory to be more clear
-+
-+2023-02-26 00:31:32 demerphq
-+ version 3.31
-+ * Fixup for ppport fix in 3.30
-+
-+2023-02-22 09:56:27 leont
-+ version 3.30
-+ * Use ppport for all modules in dist.
-+
-+2023-01-04 17:33:24 iabyn
-+ version 3.29
-+ * Store code fixes identified from refcounted stack patch
-+
-+2022-11-08 10:12:46 tony
-+ version 3.28
-+ * Store hook error reporting improvements
-+ * Store hook handles regex objects properly.
-+
-+2022-06-20 20:32:29 toddr
-+ version 3.27
-+ * Use cBOOL instead of !! in xs code
-+
-+2022-04-18 17:36:00 toddr
-+ version 3.26
-+ * Conform to ppport.h 3.68 recommendations
-+
- 2021-08-30 07:46:52 nwclark
- version 3.25
- * No changes from previous version
-diff --git a/Makefile.PL b/Makefile.PL
-index e03e141..b705654 100644
---- a/Makefile.PL
-+++ b/Makefile.PL
-@@ -29,7 +29,7 @@ WriteMakefile(
- 'ExtUtils::MakeMaker' => '6.31',
- },
- TEST_REQUIRES => {
-- 'Test::More' => '0.41',
-+ 'Test::More' => '0.82',
- },
- )
- : () ),
-diff --git a/Storable.pm b/Storable.pm
-index 8e6ab25..d531f2b 100644
---- a/Storable.pm
-+++ b/Storable.pm
-@@ -28,7 +28,7 @@ our @EXPORT_OK = qw(
- our ($canonical, $forgive_me);
-
- BEGIN {
-- our $VERSION = '3.25';
-+ our $VERSION = '3.32';
- }
-
- our $recursion_limit;
-@@ -1197,11 +1197,16 @@ compartment:
-
- =head1 SECURITY WARNING
-
--B<Do not accept Storable documents from untrusted sources!>
-+B<Do not accept Storable documents from untrusted sources!> There is
-+B<no> way to configure Storable so that it can be used safely to process
-+untrusted data. While there I<are> various options that can be used to
-+mitigate specific security issues these options do I<not> comprise a
-+complete safety net for the user, and processing untrusted data may
-+result in segmentation faults, remote code execution, or privilege
-+escalation. The following lists some known features which represent
-+security issues that should be considered by users of this module.
-
--Some features of Storable can lead to security vulnerabilities if you
--accept Storable documents from untrusted sources with the default
--flags. Most obviously, the optional (off by default) CODE reference
-+Most obviously, the optional (off by default) CODE reference
- serialization feature allows transfer of code to the deserializing
- process. Furthermore, any serialized object will cause Storable to
- helpfully load the module corresponding to the class of the object in
-@@ -1224,12 +1229,15 @@ With the default setting of C<$Storable::flags> = 6, creating or destroying
- random objects, even renamed objects can be controlled by an attacker.
- See CVE-2015-1592 and its metasploit module.
-
--If your application requires accepting data from untrusted sources,
--you are best off with a less powerful and more-likely safe
--serialization format and implementation. If your data is sufficiently
--simple, L<Cpanel::JSON::XS>, L<Data::MessagePack> or L<Sereal> are the best
--choices and offer maximum interoperability, but note that Sereal is
--L<unsafe by default|Sereal::Decoder/ROBUSTNESS>.
-+If your application requires accepting data from untrusted sources, you
-+are best off with a less powerful and more-likely safe serialization
-+format and implementation. If your data is sufficiently simple,
-+L<Cpanel::JSON::XS> or L<Data::MessagePack> are fine alternatives. For
-+more complex data structures containing various Perl specific data types
-+like regular expressions or aliased data L<Sereal> is the best
-+alternative and offers maximum interoperability. Note that Sereal is
-+L<unsafe by default|Sereal::Decoder/ROBUSTNESS>, but you can configure
-+the encoder and decoder to mitigate any security issues.
-
- =head1 WARNING
-
-diff --git a/Storable.xs b/Storable.xs
-index 6944b76..a558dd7 100644
---- a/Storable.xs
-+++ b/Storable.xs
-@@ -16,18 +16,13 @@
- #include <perl.h>
- #include <XSUB.h>
-
--#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
-+#define NEED_sv_2pv_flags
-+#define NEED_load_module
-+#define NEED_vload_module
-+#define NEED_newCONSTSUB
-+#define NEED_newSVpvn_flags
-+#define NEED_newRV_noinc
- #include "ppport.h" /* handle old perls */
--#endif
-
- #ifdef DEBUGGING
- #define DEBUGME /* Debug mode, turns assertions on as well */
-@@ -176,7 +171,9 @@
- #define SX_SVUNDEF_ELEM C(31) /* array element set to &PL_sv_undef */
- #define SX_REGEXP C(32) /* Regexp */
- #define SX_LOBJECT C(33) /* Large object: string, array or hash (size >2G) */
--#define SX_LAST C(34) /* invalid. marker only */
-+#define SX_BOOLEAN_TRUE C(34) /* Boolean true */
-+#define SX_BOOLEAN_FALSE C(35) /* Boolean false */
-+#define SX_LAST C(36) /* invalid. marker only */
-
- /*
- * Those are only used to retrieve "old" pre-0.6 binary images.
-@@ -975,7 +972,7 @@ static const char byteorderstr_56[] = {BYTEORDER_BYTES_56, 0};
- #endif
-
- #define STORABLE_BIN_MAJOR 2 /* Binary major "version" */
--#define STORABLE_BIN_MINOR 11 /* Binary minor "version" */
-+#define STORABLE_BIN_MINOR 12 /* Binary minor "version" */
-
- #if !defined (SvVOK)
- /*
-@@ -1454,6 +1451,8 @@ static const sv_retrieve_t sv_old_retrieve[] = {
- (sv_retrieve_t)retrieve_other, /* SX_SVUNDEF_ELEM not supported */
- (sv_retrieve_t)retrieve_other, /* SX_REGEXP */
- (sv_retrieve_t)retrieve_other, /* SX_LOBJECT not supported */
-+ (sv_retrieve_t)retrieve_other, /* SX_BOOLEAN_TRUE not supported */
-+ (sv_retrieve_t)retrieve_other, /* SX_BOOLEAN_FALSE not supported */
- (sv_retrieve_t)retrieve_other, /* SX_LAST */
- };
-
-@@ -1477,6 +1476,8 @@ static SV *retrieve_weakoverloaded(pTHX_ stcxt_t *cxt, const char *cname);
- static SV *retrieve_vstring(pTHX_ stcxt_t *cxt, const char *cname);
- static SV *retrieve_lvstring(pTHX_ stcxt_t *cxt, const char *cname);
- static SV *retrieve_svundef_elem(pTHX_ stcxt_t *cxt, const char *cname);
-+static SV *retrieve_boolean_true(pTHX_ stcxt_t *cxt, const char *cname);
-+static SV *retrieve_boolean_false(pTHX_ stcxt_t *cxt, const char *cname);
-
- static const sv_retrieve_t sv_retrieve[] = {
- 0, /* SX_OBJECT -- entry unused dynamically */
-@@ -1513,6 +1514,8 @@ static const sv_retrieve_t sv_retrieve[] = {
- (sv_retrieve_t)retrieve_svundef_elem,/* SX_SVUNDEF_ELEM */
- (sv_retrieve_t)retrieve_regexp, /* SX_REGEXP */
- (sv_retrieve_t)retrieve_lobject, /* SX_LOBJECT */
-+ (sv_retrieve_t)retrieve_boolean_true, /* SX_BOOLEAN_TRUE */
-+ (sv_retrieve_t)retrieve_boolean_false, /* SX_BOOLEAN_FALSE */
- (sv_retrieve_t)retrieve_other, /* SX_LAST */
- };
-
-@@ -2187,7 +2190,7 @@ static AV *array_call(pTHX_
- XPUSHs(sv_2mortal(newSViv(cloning))); /* Cloning flag */
- PUTBACK;
-
-- count = call_sv(hook, G_ARRAY); /* Go back to Perl code */
-+ count = call_sv(hook, G_LIST); /* Go back to Perl code */
-
- SPAGAIN;
-
-@@ -2454,6 +2457,16 @@ static int store_scalar(pTHX_ stcxt_t *cxt, SV *sv)
- pv = SvPV(sv, len); /* We know it's SvPOK */
- goto string; /* Share code below */
- }
-+#ifdef SvIsBOOL
-+ } else if (SvIsBOOL(sv)) {
-+ TRACEME(("mortal boolean"));
-+ if (SvTRUE_nomg_NN(sv)) {
-+ PUTMARK(SX_BOOLEAN_TRUE);
-+ }
-+ else {
-+ PUTMARK(SX_BOOLEAN_FALSE);
-+ }
-+#endif
- } else if (flags & SVf_POK) {
- /* public string - go direct to string read. */
- goto string_readlen;
-@@ -3250,6 +3263,7 @@ static int store_code(pTHX_ stcxt_t *cxt, CV *cv)
- CROAK(("Unexpected return value from B::Deparse::coderef2text\n"));
-
- text = POPs;
-+ PUTBACK;
- len = SvCUR(text);
- reallen = strlen(SvPV_nolen(text));
-
-@@ -3318,7 +3332,7 @@ static int get_regexp(pTHX_ stcxt_t *cxt, SV* sv, SV **re, SV **flags) {
- XPUSHs(rv);
- PUTBACK;
- /* optimize to call the XS directly later */
-- count = call_sv((SV*)cv, G_ARRAY);
-+ count = call_sv((SV*)cv, G_LIST);
- SPAGAIN;
- if (count < 2)
- CROAK(("re::regexp_pattern returned only %d results", (int)count));
-@@ -3567,7 +3581,10 @@ static int store_hook(
- int need_large_oids = 0;
- #endif
-
-- TRACEME(("store_hook, classname \"%s\", tagged #%d", HvNAME_get(pkg), (int)cxt->tagnum));
-+ classname = HvNAME_get(pkg);
-+ len = strlen(classname);
-+
-+ TRACEME(("store_hook, classname \"%s\", tagged #%d", classname, (int)cxt->tagnum));
-
- /*
- * Determine object type on 2 bits.
-@@ -3576,6 +3593,7 @@ static int store_hook(
- switch (type) {
- case svis_REF:
- case svis_SCALAR:
-+ case svis_REGEXP:
- obj_type = SHT_SCALAR;
- break;
- case svis_ARRAY:
-@@ -3615,13 +3633,20 @@ static int store_hook(
- }
- break;
- default:
-- CROAK(("Unexpected object type (%d) in store_hook()", type));
-+ {
-+ /* pkg_can() always returns a ref to a CV on success */
-+ CV *cv = (CV*)SvRV(hook);
-+ const GV * const gv = CvGV(cv);
-+ const char *gvname = GvNAME(gv);
-+ const HV * const stash = GvSTASH(gv);
-+ const char *hvname = stash ? HvNAME(stash) : NULL;
-+
-+ CROAK(("Unexpected object type (%s) of class '%s' in store_hook() calling %s::%s",
-+ sv_reftype(sv, FALSE), classname, hvname, gvname));
-+ }
- }
- flags = SHF_NEED_RECURSE | obj_type;
-
-- classname = HvNAME_get(pkg);
-- len = strlen(classname);
--
- /*
- * To call the hook, we need to fake a call like:
- *
-@@ -5882,6 +5907,50 @@ static SV *retrieve_integer(pTHX_ stcxt_t *cxt, const char *cname)
- return sv;
- }
-
-+/*
-+ * retrieve_boolean_true
-+ *
-+ * Retrieve boolean true copy.
-+ */
-+static SV *retrieve_boolean_true(pTHX_ stcxt_t *cxt, const char *cname)
-+{
-+ SV *sv;
-+ HV *stash;
-+
-+ TRACEME(("retrieve_boolean_true (#%d)", (int)cxt->tagnum));
-+
-+ sv = newSVsv(&PL_sv_yes);
-+ stash = cname ? gv_stashpv(cname, GV_ADD) : 0;
-+ SEEN_NN(sv, stash, 0); /* Associate this new scalar with tag "tagnum" */
-+
-+ TRACEME(("boolean true"));
-+ TRACEME(("ok (retrieve_boolean_true at 0x%" UVxf ")", PTR2UV(sv)));
-+
-+ return sv;
-+}
-+
-+/*
-+ * retrieve_boolean_false
-+ *
-+ * Retrieve boolean false copy.
-+ */
-+static SV *retrieve_boolean_false(pTHX_ stcxt_t *cxt, const char *cname)
-+{
-+ SV *sv;
-+ HV *stash;
-+
-+ TRACEME(("retrieve_boolean_false (#%d)", (int)cxt->tagnum));
-+
-+ sv = newSVsv(&PL_sv_no);
-+ stash = cname ? gv_stashpv(cname, GV_ADD) : 0;
-+ SEEN_NN(sv, stash, 0); /* Associate this new scalar with tag "tagnum" */
-+
-+ TRACEME(("boolean false"));
-+ TRACEME(("ok (retrieve_boolean_false at 0x%" UVxf ")", PTR2UV(sv)));
-+
-+ return sv;
-+}
-+
- /*
- * retrieve_lobject
- *
-@@ -7774,7 +7843,7 @@ CODE:
- assert(cxt);
- result = cxt->entry && (cxt->optype & ix) ? TRUE : FALSE;
- } else {
-- result = !!last_op_in_netorder(aTHX);
-+ result = cBOOL(last_op_in_netorder(aTHX));
- }
- ST(0) = boolSV(result);
-
-diff --git a/t/blessed.t b/t/blessed.t
-index d9a77b3..dea569b 100644
---- a/t/blessed.t
-+++ b/t/blessed.t
-@@ -44,7 +44,7 @@ use Storable qw(freeze thaw store retrieve fd_retrieve);
- 'long VSTRING' => \(my $lvstring = eval "v" . 0 x 300),
- LVALUE => \(my $substr = substr((my $str = "foo"), 0, 3)));
-
--my $test = 13;
-+my $test = 18;
- my $tests = $test + 41 + (2 * 6 * keys %::immortals) + (3 * keys %::weird_refs);
- plan(tests => $tests);
-
-@@ -414,3 +414,54 @@ is(ref $t, 'STRESS_THE_STACK');
-
- unlink("store$$");
- }
-+
-+{
-+ # trying to freeze a glob via STORABLE_freeze
-+ {
-+ package GlobHookedBase;
-+
-+ sub STORABLE_freeze {
-+ return \1;
-+ }
-+
-+ package GlobHooked;
-+ our @ISA = "GlobHookedBase";
-+ }
-+ use Symbol ();
-+ my $glob = bless Symbol::gensym(), "GlobHooked";
-+ eval {
-+ my $data = freeze($glob);
-+ };
-+ my $msg = $@;
-+ like($msg, qr/Unexpected object type \(GLOB\) of class 'GlobHooked' in store_hook\(\) calling GlobHookedBase::STORABLE_freeze/,
-+ "check we get the verbose message");
-+}
-+
-+SKIP:
-+{
-+ $] < 5.012
-+ and skip "Can't assign regexps directly before 5.12", 4;
-+ my $hook_called;
-+ # store regexp via hook
-+ {
-+ package RegexpHooked;
-+ sub STORABLE_freeze {
-+ ++$hook_called;
-+ "$_[0]";
-+ }
-+ sub STORABLE_thaw {
-+ my ($obj, $cloning, $serialized) = @_;
-+ ++$hook_called;
-+ $$obj = ${ qr/$serialized/ };
-+ }
-+ }
-+
-+ my $obj = bless qr/abc/, "RegexpHooked";
-+ my $data = freeze($obj);
-+ ok($data, "froze regexp blessed into hooked class");
-+ ok($hook_called, "and the hook was actually called");
-+ $hook_called = 0;
-+ my $obj_thawed = thaw($data);
-+ ok($hook_called, "hook called for thaw");
-+ like("abc", $obj_thawed, "check the regexp");
-+}
-diff --git a/t/boolean.t b/t/boolean.t
-new file mode 100644
-index 0000000..9ba19c0
---- /dev/null
-+++ b/t/boolean.t
-@@ -0,0 +1,84 @@
-+use strict;
-+use warnings;
-+
-+my $true_ref;
-+my $false_ref;
-+BEGIN {
-+ $true_ref = \!!1;
-+ $false_ref = \!!0;
-+}
-+
-+BEGIN {
-+ unshift @INC, 't';
-+ unshift @INC, 't/compat' if $] < 5.006002;
-+ require Config;
-+ if ($ENV{PERL_CORE} and $Config::Config{'extensions'} !~ /\bStorable\b/) {
-+ print "1..0 # Skip: Storable was not built\n";
-+ exit 0;
-+ }
-+}
-+
-+use Test::More tests => 12;
-+use Storable qw(thaw freeze);
-+
-+use constant CORE_BOOLS => defined &builtin::is_bool;
-+
-+{
-+ my $x = $true_ref;
-+ my $y = ${thaw freeze \$x};
-+ is($y, $x);
-+ eval {
-+ $$y = 2;
-+ };
-+ isnt $@, '',
-+ 'immortal true maintained as immortal';
-+}
-+
-+{
-+ my $x = $false_ref;
-+ my $y = ${thaw freeze \$x};
-+ is($y, $x);
-+ eval {
-+ $$y = 2;
-+ };
-+ isnt $@, '',
-+ 'immortal false maintained as immortal';
-+}
-+
-+{
-+ my $true = $$true_ref;
-+ my $x = \$true;
-+ my $y = ${thaw freeze \$x};
-+ is($$y, $$x);
-+ is($$y, '1');
-+ SKIP: {
-+ skip "perl $] does not support tracking boolean values", 1
-+ unless CORE_BOOLS;
-+ BEGIN { CORE_BOOLS and warnings->unimport('experimental::builtin') }
-+ ok builtin::is_bool($$y);
-+ }
-+ eval {
-+ $$y = 2;
-+ };
-+ is $@, '',
-+ 'mortal true maintained as mortal';
-+}
-+
-+{
-+ my $false = $$false_ref;
-+ my $x = \$false;
-+ my $y = ${thaw freeze \$x};
-+ is($$y, $$x);
-+ is($$y, '');
-+ SKIP: {
-+ skip "perl $] does not support tracking boolean values", 1
-+ unless CORE_BOOLS;
-+ BEGIN { CORE_BOOLS and warnings->unimport('experimental::builtin') }
-+ ok builtin::is_bool($$y);
-+ }
-+ eval {
-+ $$y = 2;
-+ };
-+ is $@, '',
-+ 'mortal true maintained as mortal';
-+}
-diff --git a/t/malice.t b/t/malice.t
-index 8adae95..7b92d3d 100644
---- a/t/malice.t
-+++ b/t/malice.t
-@@ -32,7 +32,7 @@ our $file_magic_str = 'pst0';
- our $other_magic = 7 + length $byteorder;
- our $network_magic = 2;
- our $major = 2;
--our $minor = 11;
-+our $minor = 12;
- our $minor_write = $] >= 5.019 ? 11 : $] > 5.008 ? 9 : $] > 5.005_50 ? 8 : 4;
-
- use Test::More;
-@@ -206,7 +206,7 @@ sub test_things {
- $where = $file_magic + $network_magic;
- }
-
-- # Just the header and a tag 255. As 33 is currently the highest tag, this
-+ # Just the header and a tag 255. As 34 is currently the highest tag, this
- # is "unexpected"
- $copy = substr ($contents, 0, $where) . chr 255;
-
-@@ -226,7 +226,7 @@ sub test_things {
- # local $Storable::DEBUGME = 1;
- # This is the delayed croak
- test_corrupt ($copy, $sub,
-- "/^Storable binary image v$header->{major}.$minor6 contains data of type 255. This Storable is v$header->{major}.$minor and can only handle data types up to 33/",
-+ "/^Storable binary image v$header->{major}.$minor6 contains data of type 255. This Storable is v$header->{major}.$minor and can only handle data types up to 35/",
- "bogus tag, minor plus 4");
- # And check again that this croak is not delayed:
- {
---
-2.40.1
-
diff --git a/Storable-3.32-Upgrade-to-3.37.patch b/Storable-3.32-Upgrade-to-3.37.patch
deleted file mode 100644
index e96f2f8..0000000
--- a/Storable-3.32-Upgrade-to-3.37.patch
+++ /dev/null
@@ -1,13958 +0,0 @@
-From 0d65f98dc75661b3629cd4660f5c1b8565f6b1a2 Mon Sep 17 00:00:00 2001
-From: Jitka Plesnikova <jplesnik@redhat.com>
-Date: Wed, 30 Apr 2025 18:37:30 +0200
-Subject: [PATCH] Upgrade to 3.37
-
----
- ChangeLog | 1810 ++++++++++++++++----------------
- MANIFEST | 65 --
- MANIFEST.SKIP | 58 +
- META.json | 58 -
- META.yml | 30 -
- Makefile.PL | 95 +-
- README | 2 +-
- Storable.xs | 1388 ++++++++++++------------
- hints/hpux.pl | 4 +-
- hints/linux.pl | 2 +-
- Storable.pm => lib/Storable.pm | 334 +++---
- stacksize | 6 +-
- t/CVE-2015-1592.t | 5 +-
- t/HAS_ATTACH.pm | 10 -
- t/HAS_HOOK.pm | 9 -
- t/HAS_OVERLOAD.pm | 14 -
- t/attach.t | 55 +-
- t/attach_errors.t | 381 ++++---
- t/attach_singleton.t | 39 +-
- t/blessed.t | 172 +--
- t/boolean.t | 106 +-
- t/canonical.t | 101 +-
- t/circular_hook.t | 37 +-
- t/code.t | 173 ++-
- t/compat01.t | 18 +-
- t/compat06.t | 105 +-
- t/croak.t | 30 +-
- t/dclone.t | 47 +-
- t/destroy.t | 15 +-
- t/downgrade.t | 277 +++--
- t/file_magic.t | 478 +++++----
- t/flags.t | 126 +--
- t/forgive.t | 25 +-
- t/freeze.t | 83 +-
- t/huge.t | 44 +-
- t/hugeids.t | 301 +++---
- t/integer.t | 233 ++--
- t/interwork56.t | 42 +-
- t/just_plain_nasty.t | 56 +-
- t/leaks.t | 29 +-
- t/lib/HAS_HOOK.pm | 14 +
- t/lib/HAS_OVERLOAD.pm | 18 +
- t/lib/STDump.pm | 138 +++
- t/lib/STTestLib.pm | 39 +
- t/lock.t | 24 +-
- t/make_56_interwork.pl | 26 +-
- t/make_downgrade.pl | 25 +-
- t/make_overload.pl | 3 +-
- t/malice.t | 372 +++----
- t/overload.t | 65 +-
- t/recurse.t | 39 +-
- t/regexp.t | 28 +-
- t/restrict.t | 120 +--
- t/retrieve.t | 22 +-
- t/robust.t | 5 +-
- t/sig_die.t | 11 +-
- t/st-dump.pl | 136 ---
- t/store.t | 77 +-
- t/testlib.pl | 38 -
- t/threads.t | 15 +-
- t/tied.t | 150 ++-
- t/tied_hook.t | 190 ++--
- t/tied_items.t | 25 +-
- t/tied_reify.t | 8 +-
- t/tied_store.t | 23 +-
- t/utf8.t | 27 +-
- t/utf8hash.t | 178 ++--
- t/weak.t | 180 ++--
- 68 files changed, 4295 insertions(+), 4564 deletions(-)
- delete mode 100644 MANIFEST
- create mode 100644 MANIFEST.SKIP
- delete mode 100644 META.json
- delete mode 100644 META.yml
- rename Storable.pm => lib/Storable.pm (86%)
- delete mode 100644 t/HAS_ATTACH.pm
- delete mode 100644 t/HAS_HOOK.pm
- delete mode 100644 t/HAS_OVERLOAD.pm
- create mode 100644 t/lib/HAS_HOOK.pm
- create mode 100644 t/lib/HAS_OVERLOAD.pm
- create mode 100644 t/lib/STDump.pm
- create mode 100644 t/lib/STTestLib.pm
- mode change 100644 => 100755 t/make_56_interwork.pl
- mode change 100644 => 100755 t/make_downgrade.pl
- mode change 100644 => 100755 t/make_overload.pl
- delete mode 100644 t/st-dump.pl
- delete mode 100644 t/testlib.pl
-
-diff --git a/ChangeLog b/ChangeLog
-index 6619543..e743526 100644
---- a/ChangeLog
-+++ b/ChangeLog
-@@ -1,1124 +1,1182 @@
--2023-05-26 21:36:00 demerphq
-- version 3.32
-- * Update security advisory to be more clear
--
--2023-02-26 00:31:32 demerphq
-- version 3.31
-- * Fixup for ppport fix in 3.30
--
--2023-02-22 09:56:27 leont
-- version 3.30
-- * Use ppport for all modules in dist.
--
--2023-01-04 17:33:24 iabyn
-- version 3.29
-- * Store code fixes identified from refcounted stack patch
--
--2022-11-08 10:12:46 tony
-- version 3.28
-- * Store hook error reporting improvements
-- * Store hook handles regex objects properly.
--
--2022-06-20 20:32:29 toddr
-- version 3.27
-- * Use cBOOL instead of !! in xs code
--
--2022-04-18 17:36:00 toddr
-- version 3.26
-- * Conform to ppport.h 3.68 recommendations
--
--2021-08-30 07:46:52 nwclark
-- version 3.25
-- * No changes from previous version
--
--2021-08-25 08:05:16 nwclark
-- version 3.24_50
-- * Remove code and tests only present to support perls before 5.6.1
-- Storable implicitly needs >= v5.6.1.
-- * Use SvPVCLEAR from ppport.h
-- * Remove XS code "commented" out with #if 0
-- * Refactor store_lhash() to remove some code duplication
-- * Avoid calling hv_iterval() twice for each hash entry
-- * Fix a bug in the recursion depth check in store_lhash()
--
--unreleased
-- version 3.24
-- * Fix a (possible) typo in Sntohl
--
--unreleased
-- version 3.23
-- * Fix typos
-- * avoid stderr noise in t/canonical.t
--
--2020-07-31 19:36:37 atoomic
-- version 3.22
-- * use PERL_COMPARE macros
--
--2020-04-23 13:33:05 ilmari
-- version 3.21
-- * fix repeated-word typos
-- * fix t/huge.t PERL_TEST_MEMORY diagnostic messages
--
--2020-01-27 10:27:00 TonyC
-- version 3.20
-- * fix a format string and arguments for some debugging text
-- * linkify references to alternatives to Storable
--
--2020-01-27 11:01:00 TonyC
-- version 3.19
-- * add casts to match some I32 parameters to "%d" formats (#17339)
-- * fix dependencies in Makefile.PL -> META (#17422)
-- * make use of note() optional, this requires a newer version of
-- Test::More and there's a circular dependency between later
-- versions of Test::More and Storable (#17422)
--
--2019-11-19 07:59:39 TonyC
-- version 3.18
-- * update bug tracker to point at github (#17298)
-- * disallow vstring magic strings over 2GB-1 (#17306)
-- * mark some ASCII dependent tests as ASCII platform only
--
--2019-08-08 11:48:00 TonyC
-- version 3.17
-- * correct a data type to ensure the check for too large results from
-- STORABLE_freeze() are detected correctly (detected by Coverity)
-- * removed remains of stack size detection from the build process.
-- * moved CAN_FLOCK detection into XS to simplify the build process.
--
--2019-06-11 10:43:00 TonyC
-- version 3.16
-- * (perl #134179) fix self-referencing structures that include regexps
-- * bless regexps to preserve bless qr//, "Foo"
--
--2019-04-23 16:00:00 xsawyerx
-- version 3.15
-- * Fix leaking.
--
--unreleased
-- version 3.14
-- * (perl #133708) don't build-time probe for stack limits at all
--
--unreleased
-- version 3.12
-- * (perl #133411) don't probe for stack limits with -Dusecrosscompile
--
--2018-04-27 20:40:00 xsawyerx
-- version 3.11
-- * Fix Strawberry Perl build failures.
--
--2018-04-21 22:00:00 xsawyerx
-- Version 3.10
-- * Fix binary artifacts from distribution.
--
--2018-04-21 16:49:00 xsawyerx
-- Version 3.09
-- * Fix "provides" in metadata (META.yml/META.json) to use the Storable
-- template instead of a small other file (which also didn't exist).
--
--2018-04-21 11:23:00 xsawyerx
-- Version 3.08
-- * (perl #132849) try to disable core files when deliberatly segfaulting.
-- * (perl #127743) don't probe Storable limits so much.
-- * (perl #132893) don't probe for Storable recursion limits on old Win32.
-- * (perl #132870) workaround VC2017 compiler bug.
-- * (perl #127743) re-work for debugging builds with MSVC.
-- * (perl #133039) dont build a Storable.so/.dll with a static perl build.
--
--2018-02-07 15:08:00 tonyc
-- Version 3.06
--
-- * support large object ids. The code in theory supported arrays
-- with more than 2**32 elements, but references to the elements
-- emitted at the end of the array with be retrieved as references to
-- the wrong elements.
-- * 32-bit object ids over 2**31-1 weren't correctly handled.
-- * hook object id generation now supports 64-bit ids where needed
-- * writing 64-bit lengths in network order now works
-- * reading 64-bit lengths in network order now reads the components
-- in the correct order.
-- * retrieving large object tags are now only handled on 64-bit
-- platforms, large object tags should only be emitted for objects
-- that are too large for the 32-bit address space, so it was only
-- wasted code.
-- * reading 32-bit lengths for LSCALAR and LUTF8STR as unsigned
-- (perl #131990)
-- * reading flagged large object hashes didn't read the flags
-- * treat the 32-bit size of hook data as unsigned, values over 2GB
-- were treated as large (close to 2**64) parameters to NEWSV().
-- (perl #131999)
-- * added support for hook data over 4GB in size
-- * zero length data receievd from STORABLE_freeze() no longer
-- results in an invalid SV being passed to STORABLE_thaw/_attach()
-- (perl #118551)
-- * where practical, padding is now cleared when emitting a long
-- double (perl #131136)
-- * cache the value of $Storable::DEBUGME (since cperl enabled
-- Storable TRACEME builds for all -DDEBUGGING builds)
-- * no longer discard exceptions thrown by
-- STORABLE_freeze/_thaw/attach() (perl #25933)
-- * fix dependencies used to build Storable.pm from __Storable__.pm
-- * add experimental support for freezing/thawing regular
-- expressions (perl #50608)
-- * re-work recursion limiting to store the limit in a perl variable
-- instead of baked into Storable.$so. This allows static Storable
-- builds to work, and avoids the kind of circular reference on
-- Storable.$so.
--
--2017-07-24 13:57:13 rurban
-- Version 3.05_13
--
-- * mingw fix: use safe defaults, not segfaulting defaults.
-- mingw fails on the stacksize binary search, leaving it empty.
--
--Wed Apr 19 09:11:07 2017 +0200 Reini Urban <rurban@cpan.org>
-- Version 3.05_12
--
-- * enhance stack reserve from 8 to 16
-- * fix LD_LIBRARY_PATH usage for CORE
-- * fixed some coverity warnings and leaks
-- * added a release make target
--
--Wed Mar 29 21:04:28 2017 +0200 Reini Urban <rurban@cpan.org>
-- Version 3.05_11
--
-- * croak on sizes read > I32_MAX
-- * simplify last_op_in_netorder
-- * protect from empty retrieve_vstring
-- * protect store_other error buf, potential static
-- buffer overflow.
--
--Tue Mar 14 09:52:20 2017 +0100 Reini Urban <rurban@cpan.org>
-- Version 3.05_10
--
-- * CORE-only improvements to stacksize
--
--Thu Mar 9 19:20:19 2017 +0100 Reini Urban <rurban@cpan.org>
-- Version 3.05_09
--
-- * compute the stacksizes, improve cleanup within croak
-- from stack exhaustion.
-- * added stack_depth and stack_depth_hash getters.
--
--Wed Mar 8 21:03:43 CET 2017 Reini Urban <rurban@cpan.org>
-- Version 3.05_08
--
-- * finetune the max stack limit, for C++, DEBUGGING and 32bit.
-- * fix t/blessed.t for cperl5.22
--
--Sun Mar 5 13:36:47 2017 +0100 Reini Urban <rurban@cpan.org>
-- Version 3.05_07
--
-- * Fixed a podchecker issue
--
--Sun Mar 5 11:42:04 2017 +0100 Reini Urban <rurban@cpan.org>
-- Version 3.05_06
--
-- * Fixed wrong recursion depth error with large arrays containing
-- another array.
-- L<[cperl #257]|https://github.com/perl11/cperl/issues/257>
--
--Thu Feb 2 12:40:44 2017 +0100 Reini Urban <rurban@cpanel.net>
-- Version 3.05_05
--
-- * Add leak tests for [cpan #97316], [perl #121928]
-- * Limit the max recursion depth to 1200 on 32bit systems.
-- We have no max_depth option yet, as in JSON::XS.
--
--Thu Feb 2 11:59:21 2017 +0100 Reini Urban <rurban@cpanel.net>
-- Version 3.05_04
--
-- * Fix retrieve_tied_array which fails since 5.16
-- [cpan #84705]
-- * Improve t/blessed.t in the creation of sv_yes/sv_no
-- with threaded perls.
--
--Tue Jan 31 02:55:30 2017 +0100 Reini Urban <rurban@cpanel.net>
-- Version 3.05_03
--
-- * Tune t/recurse.t stack-overflow limit more.
--
--Mon Jan 30 19:50:29 2017 +0100 Reini Urban <rurban@cpanel.net>
-- Version 3.05_02
--
-- * Tune t/recurse.t stack-overflow limit. Small 64bit systems overflow
-- even with depth 3000, where 32bit are ok.
--
--Mon Jan 30 15:13:38 2017 +0100 Reini Urban <rurban@cpanel.net>
-- Version 3.05_01
-+Release history for Storable
-
-- * Protect against stack overflows with nested arrays and hashes
-- [cpan #97526]. This imposes a new limit to your nested structures,
-- but JSON::XS has a limit of 512. We use a max_depth of 3000 for the
-- typical stack limit of 8k.
-+ - reorganize files to match modern standards
-+ - use strict in library
-+ - use strict and warnings in tests
-+ - normaize whitespace in code
-+ - other minor cleanups
-
-+3.33 - 2024-07-11 00:41:35
-
--Sun Jan 29 11:36:43 2017 +0100 Reini Urban <rurban@cpanel.net>
-- Version 3.05
-+ - add some test names to t/utf8.t
-
-- * Protect against classname len overflow on the stack
-- and 2x on the heap with retrieve_bless and retrieve_hook.
-- A serious security issue with malcrafted storable files or buffers,
-- but p5p accepts no CVE on Storable attacks. See RT #130635
-- (reported by JD).
-- * Fix NULL ptr SEGVs with retrieve_code and retrieve_other.
-- See RT #130098 (reported and fixed by JD)
-- * Fix wrong huge LOBJECT support, broken since 3.00c.
-- Repro with `export PERL_TEST_MEMORY=8`
-- * Fix the few remaining 2-arg open calls.
-- * Portability and backport fixes back to 5.6.2
-+3.32 - 2023-05-26 21:36:00 demerphq
-
--Sat Jan 7 09:01:29 2017 +0100 Reini Urban <rurban@cpanel.net>
-- Version 3.04c
-+ - Update security advisory to be more clear
-
-- * fix printf types and warnings, esp. for 32bit use64bitint
-- * Change sv_setpvn(…, "…", …) to sv_setpvs(…, "…")
-+3.31 - 2023-02-26 00:31:32 demerphq
-
--Tue Jul 26 11:49:33 2016 +1000 Tony Cook <tony@develop-help.com>
-- Version 3.03c
-+ - Fixup for ppport fix in 3.30
-
-- * remove . from @INC when loading optional modules
-+3.30 - 2023-02-22 09:56:27 leont
-
--Sun Nov 20 18:06:45 2016 +0100 Reini Urban <rurban@cpanel.net>
-- Version 3.02c
-+ - Use ppport for all modules in dist.
-
-- * Fix -Wc++11-compat warnings, fix -Wchar-subscripts
-+3.29 - 2023-01-04 17:33:24 iabyn
-
--Fri Sep 16 01:32:59 2016 +0200 Reini Urban <rurban@cpanel.net>
-- Version 3.01c
-+ - Store code fixes identified from refcounted stack patch
-
-- * Added warn_security("Movable-Type CVE-2015-1592 Storable metasploit attack")
-- when detecting the third destructive metasploit vector,
-- thawing bless \"mt-config.cgi", "CGITempFile".
-+3.28 - 2022-11-08 10:12:46 tony
-
--Thu Mar 31 17:10:27 2016 +0200 Reini Urban <rurban@cpanel.net>
-- Version 3.00c
-+ - Store hook error reporting improvements
-
-- * Added support for u64 strings, arrays and hashes >2G
-- via a new LOBJECT tag. This is for 32bit systems and lengths
-- between 2GB and 4GB (I32-U32), and 64bit (>I32).
-- * Bumped STORABLE_BIN_MINOR and STORABLE_BIN_WRITE_MINOR from 10 to 11
-- * fix parallel tests, use unique filenames.
-- * fixed 2 instances of 2arg open,
-- * added optional flag arguments to skip tie and bless on retrieve/thaw,
-- * added SECURITY WARNING and Large data support to docs
-- * compute CAN_FLOCK at compile-time
-- * reformat everything consistently
-- * enable DEBUGME tracing and asserts with -DDEBUGGING
-- * fix all 64 bit compiler warnings
-- * added some abstraction methods to avoid code duplication
-+ - Store hook handles regex objects properly.
-
--?????? p5p <perl5-porters@perl.org>
-- Version 2.65
-+3.27 - 2022-06-20 20:32:29 toddr
-
-- * Replace multiple 'use vars' by 'our'
-- * remove Config dependency
-+ - Use cBOOL instead of !! in xs code
-
--Wed Jul 2 16:25:25 IST 2014 Abhijit Menon-Sen <ams@toroid.org>
-- Version 2.51
-+3.26 - 2022-04-18 17:36:00 toddr
-
-- * [perl #121928] Fix memory leak for dclone inside freeze hook
-- (Alex Solovey)
-- * Do not call DESTROY for empty objects
-- (Vladimir Timofeev)
-- * Other bugfixes
-+ - Conform to ppport.h 3.68 recommendations
-
--Sat Jul 13 18:34:27 IST 2013 Abhijit Menon-Sen <ams@toroid.org>
-- Version 2.45
-+3.25 - 2021-08-30 07:46:52 nwclark
-
-- * [perl #118829] Memory leaks in STORABLE_attach
-- (Vladimir Timofeev)
-- * [perl #118139] Don't SEGV during global destruction
-- (Nicholas Clark, report/test from Reini Urban)
-- * Added security warnings section (Steffen Mueller)
-- * Update INSTALLDIRS to favour installation in 'site'
-- (James E Keenan)
-+ - No changes from previous version
-
--Tue 11 Sep 06:51:11 IST 2012 Abhijit Menon-Sen <ams@toroid.org>
-- Version 2.39
-+3.24_50 - 2021-08-25 08:05:16 nwclark
-
-- Various bugfixes, including compatibility fixes for older
-- versions of Perl and vstring handling.
-+ - Remove code and tests only present to support perls before 5.6.1
-+ Storable implicitly needs >= v5.6.1.
-
--Sun 3 Jul 09:10:11 IST 2011 Abhijit Menon-Sen <ams@toroid.org>
-- Version 2.29
-+ - Use SvPVCLEAR from ppport.h
-
-- Various bugfixes, notably including preventing nfreeze from
-- incorrectly stringifying integers.
-+ - Remove XS code "commented" out with #if 0
-
--Fri 3 Dec 14:12:32 GMT 2010 David Leadbeater <dgl@dgl.cx>
-- Version 2.25
-+ - Refactor store_lhash() to remove some code duplication
-
-- Support for serializing coderefs containing UTF-8.
-+ - Avoid calling hv_iterval() twice for each hash entry
-
--Fri Nov 12 10:52:19 IST 2010 Abhijit Menon-Sen <ams@toroid.org>
-+ - Fix a bug in the recursion depth check in store_lhash()
-
-- Version 2.24
-+3.24 - unreleased
-
-- Performance improvement for overloaded classes from Benjamin
-- Holzman.
-+ - Fix a (possible) typo in Sntohl
-
--Fri Nov 12 10:36:22 IST 2010 Abhijit Menon-Sen <ams@toroid.org>
-+3.23 - unreleased
-
-- Version 2.23
-+ - Fix typos
-
-- Release the latest version from the Perl repository.
-+ - avoid stderr noise in t/canonical.t
-
--Thu Aug 6 10:55:50 IST 2009 Abhijit Menon-Sen <ams@toroid.org>
-+3.22 - 2020-07-31 19:36:37 atoomic
-
-- Version 2.21
-+ - use PERL_COMPARE macros
-
-- Includes hints/hpux.pl that was inadvertently left out of 2.20.
-+3.21 - 2020-04-23 13:33:05 ilmari
-
--Mon May 18 09:38:20 IST 2009 Abhijit Menon-Sen <ams@toroid.org>
-+ - fix repeated-word typos
-
-- Version 2.20
-+ - fix t/huge.t PERL_TEST_MEMORY diagnostic messages
-
-- Fix bug handling blessed references to overloaded objects, plus
-- other miscellaneous fixes.
-+3.20 - 2020-01-27 10:27:00 TonyC
-
-- (Version 2.19 was released with 5.8.9.)
-+ - fix a format string and arguments for some debugging text
-
--Thu Nov 22 13:24:18 IST 2007 Abhijit Menon-Sen <ams@toroid.org>
-+ - linkify references to alternatives to Storable
-
-- Version 2.18
-+3.19 - 2020-01-27 11:01:00 TonyC
-
-- Compile fixes for older Perls. (No functional changes.)
-+ - add casts to match some I32 parameters to "%d" formats (#17339)
-
--Sat Nov 17 02:12:12 IST 2007 Abhijit Menon-Sen <ams@toroid.org>
-+ - fix dependencies in Makefile.PL -> META (#17422)
-
-- Version 2.17
-+ - make use of note() optional, this requires a newer version of
-+ Test::More and there's a circular dependency between later
-+ versions of Test::More and Storable (#17422)
-
-- Various broken tests fixed. (No functional changes.)
-+3.18 - 2019-11-19 07:59:39 TonyC
-
--Sat Mar 31 06:11:06 IST 2007 Abhijit Menon-Sen <ams@toroid.org>
-+ - update bug tracker to point at github (#17298)
-
-- Version 2.16
-+ - disallow vstring magic strings over 2GB-1 (#17306)
-
-- 1. Fixes to Storable::dclone, read_magic, retrieve_lscalar
-- 2. Storable 0.1 compatibility
-- 3. Miscellaneous compile/leak/test/portability fixes
-+ - mark some ASCII dependent tests as ASCII platform only
-
--Mon May 23 22:48:49 IST 2005 Abhijit Menon-Sen <ams@wiw.org>
-+3.17 - 2019-08-08 11:48:00 TonyC
-
-- Version 2.15
-+ - correct a data type to ensure the check for too large results from
-+ STORABLE_freeze() are detected correctly (detected by Coverity)
-
-- Minor changes to address a couple of compile problems.
-+ - removed remains of stack size detection from the build process.
-
--Mon Apr 25 07:29:14 IST 2005 Abhijit Menon-Sen <ams@wiw.org>
-+ - moved CAN_FLOCK detection into XS to simplify the build process.
-
-- Version 2.14
-+3.16 - 2019-06-11 10:43:00 TonyC
-
-- 1. Store weak references
-- 2. Add STORABLE_attach hook.
-+ - (perl #134179) fix self-referencing structures that include regexps
-
--Thu Jun 17 12:26:43 BST 2004 Nicholas Clark <nick@ccl4.org>
-+ - bless regexps to preserve bless qr//, "Foo"
-
-- Version 2.13
-+3.15 - 2019-04-23 16:00:00 xsawyerx
-
-- 1. Don't change the type of top level overloaded references to RV -
-- they are perfectly correct as PVMG
-- 2. Storable needs to cope with incoming frozen data that happens to be
-- utf8 encoded.
-+ - Fix leaking.
-
--Wed Mar 17 15:40:29 GMT 2004 Nicholas Clark <nick@ccl4.org>
-+3.14 - unreleased
-
-- Version 2.12
-+ - (perl #133708) don't build-time probe for stack limits at all
-
-- 1. Add regression tests for the auto-require of STORABLE_thaw
-- 2. Add auto-require of modules to restore overloading (and tests)
-- 3. Change to no context (should give speedup with ithreads)
-+3.12 - unreleased
-
--Sat Mar 13 20:11:03 GMT 2004 Nicholas Clark <nick@ccl4.org>
--
-- Version 2.11
-+ - (perl #133411) don't probe for stack limits with -Dusecrosscompile
-
-- 1. Storing restricted hashes in canonical order would SEGV. Fixed.
-- 2. It was impossible to retrieve references to PL_sv_no and
-- PL_sv_undef from STORABLE_thaw hooks.
-- 3. restrict.t was failing on 5.8.0, due to 5.8.0's unique
-- implementation of restricted hashes using PL_sv_undef
-- 4. These changes allow a space optimisation for restricted hashes.
-+3.11 - 2018-04-27 20:40:00 xsawyerx
-
--Sat Jan 24 16:22:32 IST 2004 Abhijit Menon-Sen <ams@wiw.org>
-+ - Fix Strawberry Perl build failures.
-
-- Version 2.10
-+3.10 - 2018-04-21 22:00:00 xsawyerx
-
-- 1. Thread safety: Storable::CLONE/init_perlinterp() now create
-- a new Perl context for each new ithread.
-- (From Stas Bekman and Jan Dubois.)
-- 2. Fix a tag count mismatch with $Storable::Deparse that caused
-- all back-references after a stored sub to be off-by-N (where
-- N was the number of code references in between).
-- (From Sam Vilain.)
-- 3. Prevent CODE references from turning into SCALAR references.
-- (From Slaven Rezic.)
-+ - Fix binary artifacts from distribution.
-
--Sat Jan 3 18:49:18 GMT 2004 Nicholas Clark <nick@ccl4.org>
-+3.09 - 2018-04-21 16:49:00 xsawyerx
-
-- Version 2.09
-+ - Fix "provides" in metadata (META.yml/META.json) to use the Storable
-+ template instead of a small other file (which also didn't exist).
-
-- Fix minor problems with the CPAN release
-- 1: Make Storable.xs work on 5.8.2 and later (already in the core)
-- 2: Ship the linux hints file
-- 3: Ship Test::More for the benefit of Perls pre 5.6.2
-- 4: Correct Makefile.PL to only install in core for 5.8.0 and later
-+3.08 - 2018-04-21 11:23:00 xsawyerx
-
--Sat Sep 6 01:08:20 IST 2003 Abhijit Menon-Sen <ams@wiw.org>
-+ - (perl #132849) try to disable core files when deliberatly segfaulting.
-
-- Version 2.08
-+ - (perl #127743) don't probe Storable limits so much.
-
-- This release works around a 5.8.0 bug which caused hashes to not
-- be marked as having key flags even though an HEK had HEK_WASUTF8
-- set. (Note that the only reasonable solution is to silently drop
-- the flag from the affected key.)
-+ - (perl #132893) don't probe for Storable recursion limits on old Win32.
-
-- Users of RT 3 who were seeing assertion failures should upgrade.
-- (Perl 5.8.1 will have the bug fixed.)
-+ - (perl #132870) workaround VC2017 compiler bug.
-
--Mon May 5 10:24:16 IST 2003 Abhijit Menon-Sen <ams@wiw.org>
-+ - (perl #127743) re-work for debugging builds with MSVC.
-
-- Version 2.07
-+ - (perl #133039) dont build a Storable.so/.dll with a static perl build.
-
-- Minor bugfixes (self-tied objects are now correctly stored, as
-- are the results of additions larger than INT_MAX).
-+3.06 - 2018-02-07 15:08:00 tonyc
-
--Mon Oct 7 21:56:38 BST 2002 Nicholas Clark <nick@ccl4.org>
-+ - support large object ids. The code in theory supported arrays
-+ with more than 2**32 elements, but references to the elements
-+ emitted at the end of the array with be retrieved as references to
-+ the wrong elements.
-
-- Version 2.06
-+ - 32-bit object ids over 2**31-1 weren't correctly handled.
-
-- Remove qr// from t/downgrade.t so that it will run on 5.004
-- Mention $File::Spec::VERSION a second time in t/forgive.t so that it
-- runs without warnings in 5.004 (this may be a 5.00405 bug I'm working
-- round)
-- Fix t/integer.t initialisation to actually generate 64 bits of 9c
-- Fix comparison tests to use eval to get around 64 bit IV conversion
-- issues on 5.6.x, following my t/integer.t ^ precedence bug found by
-- Rafael Garcia-Suarez
-- Alter t/malice.t to work with Test/More.pm in t/, and skip individual
-- subtests that use $Config{ptrsize}, so that the rest of the test can
-- now be run with 5.004
-- Change t/malice.t and the error message in check_magic in Storable.xs
-- from "Pointer integer size" to "Pointer size"
-- Remove prerequisite of Test::More from Makefile.PL
-- Ship Test::Builder, Test::Simple and Test::More in t
--
--Thu Oct 3 08:57:22 IST 2002 Abhijit Menon-Sen <ams@wiw.org>
--
-- Version 2.05
--
-- Adds support for CODE references from Slaven Rezic
-- <slaven.rezic@berlin.de>.
--
--Fri Jun 7 23:55:41 BST 2002 Nicholas Clark
--
-- Version 2.04
--
-- Bug fix from Radu Greab <radu@netsoft.ro> (plus regression test)
-- to fix a recently introduced bug detected by Dave Rolsky.
-- Bug was that for a non threaded build, the class information was
-- being lost at freeze time on the first object with a STORABLE_freeze
-- hook. Consequentially the object was not blessed at all when thawed.
-- (The presence (or lack) of STORABLE_thaw was irrelevant; this was
-- a store-time data lost bug, caused by failure to initialize internal
-- context)
-- The bug was introduced as development perl change 16442 (on
-- 2002/05/07), so has been present since 2.00.
-- Patches to introduce more regression tests to reduce the chance of
-- a reoccurrence of this sort of goof are always welcome.
--
--Thu May 30 20:31:08 BST 2002 Nicholas Clark <nick@ccl4.org>
--
-- Version 2.03 Header changes on 5.6.x on Unix where IV is long long
--
-- 5.6.x introduced the ability to have IVs as long long. However,
-- Configure still defined BYTEORDER based on the size of a long.
-- Storable uses the BYTEORDER value as part of the header, but
-- doesn't explicitly store sizeof(IV) anywhere in the header.
-- Hence on 5.6.x built with IV as long long on a platform that
-- uses Configure (ie most things except VMS and Windows) headers
-- are identical for the different IV sizes, despite the files
-- containing some fields based on sizeof(IV)
--
-- 5.8.0 is consistent; all platforms have BYTEORDER in config.h
-- based on sizeof(IV) rather than sizeof(long). This means that
-- the value of BYTEORDER will change from (say) 4321 to 87654321
-- between 5.6.1 and 5.8.0 built with the same options to Configure
-- on the same machine. This means that the Storable header will
-- differ, and the two versions will wrongly thing that they are
-- incompatible.
--
-- For the benefit of long term consistency, Storable now
-- implements the 5.8.0 BYTEORDER policy on 5.6.x. This means that
-- 2.03 onwards default to be incompatible with 2.02 and earlier
-- (ie the large 1.0.x installed base) on the same 5.6.x perl.
--
-- To allow interworking, a new variable
-- $Storable::interwork_56_64bit is introduced. It defaults to
-- false. Set it to true to read and write old format files. Don't
-- use it unless you have existing stored data written with 5.6.x
-- that you couldn't otherwise read, or you need to interwork with
-- a machine running older Storable on a 5.6.x with long long IVs
-- (i.e., you probably don't need to use it).
--
--Sat May 25 22:38:39 BST 2002 Nicholas Clark <nick@ccl4.org>
--
-- Version 2.02
--
-- Rewrite Storable.xs so that the file header structure for write_magic
-- is built at compile time, and check_magic attempts to the header in
-- blocks rather than byte per byte. These changes make the compiled
-- extension 2.25% smaller, but are not significant enough to give a
-- noticeable speed up.
--
--Thu May 23 22:50:41 BST 2002 Nicholas Clark <nick@ccl4.org>
--
-- Version 2.01
--
-- - New regression tests integer.t
-- - Add code to safely store large unsigned integers.
-- - Change code not to attempt to store large integers (ie > 32 bits)
-- in network order as 32 bits.
--
-- *Never* underestimate the value of a pathological test suite carefully
-- crafted with maximum malice before writing a line of real code. It
-- prevents crafty bugs from stowing away in your released code.
-- It's much less embarrassing to find them before you ship.
-- (Well, never underestimate it if you ever want to work for me)
--
--Fri May 17 22:48:59 BST 2002 Nicholas Clark <nick@ccl4.org>
--
-- Version 2.0, binary format 2.5 (but writes format 2.4 on pre 5.7.3)
--
-- The perl5 porters have decided to make sure that Storable still
-- builds on pre-5.8 perls, and make the 5.8 version available on CPAN.
-- The VERSION is now 2.0, and it passes all tests on 5.005_03, 5.6.1
-- and 5.6.1 with threads. On 5.6.0 t/downgrade.t fails tests 34 and 37,
-- due to a bug in 5.6.0 - upgrade to 5.6.1.
--
-- Jarkko and I have collated the list of changes the perl5 porters have
-- from the perl5 Changes file:
--
-- - data features of upcoming perl 5.8.0 are supported: Unicode hash
-- keys (Unicode hash values have been supported since Storable 1.0.1)
-- and "restricted hashes" (readonly hashes and hash entries)
-- - a newer version of perl can now be used to serialize data which is
-- not supported in earlier perls: Storable will attempt to do the
-- right thing for as long as possible, croaking only when safe data
-- conversion simply isn't possible. Alternatively earlier perls can
-- opt to have a lossy downgrade data instead of croaking
-- - when built with perls pre 5.7.3 this Storable writes out files
-- with binary format 2.4, the same format as Storable 1.0.8 onwards.
-- This should mean that this Storable will inter-operate seamlessly
-- with any Storable 1.0.8 or newer on perls pre 5.7.3
-- - dclone() now works with empty string scalar objects
-- - retrieving of large hashes is now more efficient
-- - more routines autosplit out of the main module, so Storable should
-- load slightly more quickly
-- - better documentation
-- - the internal context objects are now freed explicitly, rather than
-- relying on thread or process exit
-- - bugs fixed in debugging trace code affecting builds made with 64 bit
-- IVs
-- - code tidy-ups to allow clean compiles with more warning options
-- turned on avoid problems with $@ getting corrupted on 5.005_03 if
-- Carp wasn't already loaded
-- - added &show_file_magic, so you can add to /etc/magic and teach
-- Unix's file command about Storable files
--
-- We plan to keep Storable on CPAN in sync with the Perl core, so
-- if you encounter bugs or other problems building or using Storable,
-- please let us know at perl5-porters@perl.org
-- Patches welcome!
--
--Sat Dec 1 14:37:54 MET 2001 Raphael Manfredi <Raphael_Manfredi@pobox.com>
--
-- This is the LAST maintenance release of the Storable module.
-- Indeed, Storable is now part of perl 5.8, and will be maintained
-- as part of Perl. The CPAN module will remain available there
-- for people running pre-5.8 perls.
--
-- Avoid requiring Fcntl upfront, useful to embedded runtimes.
-- Use an eval {} for testing, instead of making Storable.pm
-- simply fail its compilation in the BEGIN block.
--
-- store_fd() will now correctly autoflush file if needed.
-+ - hook object id generation now supports 64-bit ids where needed
-
--Tue Aug 28 23:53:20 MEST 2001 Raphael Manfredi <Raphael_Manfredi@pobox.com>
-+ - writing 64-bit lengths in network order now works
-
-- Fixed truncation race with lock_retrieve() in lock_store().
-- The file has to be truncated only once the exclusive lock is held.
-+ - reading 64-bit lengths in network order now reads the components
-+ in the correct order.
-
-- Removed spurious debugging messages in .xs file.
-+ - retrieving large object tags are now only handled on 64-bit
-+ platforms, large object tags should only be emitted for objects
-+ that are too large for the 32-bit address space, so it was only
-+ wasted code.
-
--Sun Jul 1 13:27:32 MEST 2001 Raphael Manfredi <Raphael_Manfredi@pobox.com>
-+ - reading 32-bit lengths for LSCALAR and LUTF8STR as unsigned
-+ (perl #131990)
-
-- Systematically use "=over 4" for POD linters.
-- Apparently, POD linters are much stricter than would
-- otherwise be needed, but that's OK.
-+ - reading flagged large object hashes didn't read the flags
-
-- Fixed memory corruption on croaks during thaw(). Thanks
-- to Claudio Garcia for reproducing this bug and providing the
-- code to exercise it. Added test cases for this bug, adapted
-- from Claudio's code.
-+ - treat the 32-bit size of hook data as unsigned, values over 2GB
-+ were treated as large (close to 2**64) parameters to NEWSV().
-+ (perl #131999)
-
-- Made code compile cleanly with -Wall (from Jarkko Hietaniemi).
-+ - added support for hook data over 4GB in size
-
-- Changed tagnum and classnum from I32 to IV in context. Also
-- from Jarkko.
-+ - zero length data receievd from STORABLE_freeze() no longer
-+ results in an invalid SV being passed to STORABLE_thaw/_attach()
-+ (perl #118551)
-
--Thu Mar 15 01:22:32 MET 2001 Raphael Manfredi <Raphael_Manfredi@pobox.com>
-+ - where practical, padding is now cleared when emitting a long
-+ double (perl #131136)
-
-- Last version was wrongly compiling with assertions on, due
-- to an edit glitch. That did not cause any problem (apart from
-- a slight performance loss) excepted on Win* platforms, where the
-- assertion code does not compile.
-+ - cache the value of $Storable::DEBUGME (since cperl enabled
-+ Storable TRACEME builds for all -DDEBUGGING builds)
-
--Sat Feb 17 13:37:37 MET 2001 Raphael Manfredi <Raphael_Manfredi@pobox.com>
-+ - no longer discard exceptions thrown by
-+ STORABLE_freeze/_thaw/attach() (perl #25933)
-
-- Version 1.0.10.
-+ - fix dependencies used to build Storable.pm from __Storable__.pm
-
-- Forgot to increase version number at previous patch (there were
-- two of them, which is why we jump from 1.0.8 to 1.0.10).
-+ - add experimental support for freezing/thawing regular
-+ expressions (perl #50608)
-
--Sat Feb 17 13:35:00 MET 2001 Raphael Manfredi <Raphael_Manfredi@pobox.com>
-+ - re-work recursion limiting to store the limit in a perl variable
-+ instead of baked into Storable.$so. This allows static Storable
-+ builds to work, and avoids the kind of circular reference on
-+ Storable.$so.
-
-- Version 1.0.8, binary format 2.4.
-+3.05_13 - 2017-07-24 13:57:13 rurban
-
-- Fixed incorrect error message.
-+ - mingw fix: use safe defaults, not segfaulting defaults.
-+ mingw fails on the stacksize binary search, leaving it empty.
-
-- Now bless objects ASAP at retrieve time, which is meant to fix
-- two bugs:
-+3.05_12 - Wed Apr 19 09:11:07 2017 +0200 Reini Urban <rurban@cpan.org>
-
-- * Indirect references to overloaded object were not able to
-- restore overloading if the object was not blessed yet,
-- which was possible since blessing occurred only after the
-- recursive retrieval.
-+ - enhance stack reserve from 8 to 16
-
-- * Storable hooks asking for serialization of blessed ref could
-- get un-blessed refs at retrieval time, for the very same
-- reason.
-+ - fix LD_LIBRARY_PATH usage for CORE
-
-- The fix implemented here was suggested by Nick Ing-Simmons.
-+ - fixed some coverity warnings and leaks
-
-- Added support for blessed ref to tied structures. This is the
-- cause for the binary format change.
-+ - added a release make target
-
-- Added EBCDIC version of the compatibility test with 0.6.11,
-- from Peter Prymmer
-+3.05_11 - Wed Mar 29 21:04:28 2017 +0200 Reini Urban <rurban@cpan.org>
-
-- Added tests for the new features, and to make sure the bugs they
-- are meant to fix are indeed fixed.
-+ - croak on sizes read > I32_MAX
-
--Wed Jan 3 10:43:18 MET 2001 Raphael Manfredi <Raphael_Manfredi@pobox.com>
-+ - simplify last_op_in_netorder
-
-- Removed spurious 'clean' entry in Makefile.PL.
-+ - protect from empty retrieve_vstring
-
-- Added CAN_FLOCK to determine whether we can flock() or not,
-- by inspecting Perl's configuration parameters, as determined
-- by Configure.
-+ - protect store_other error buf, potential static
-+ buffer overflow.
-
-- Trace offending package when overloading cannot be restored
-- on a scalar.
-+3.05_10 - Tue Mar 14 09:52:20 2017 +0100 Reini Urban <rurban@cpan.org>
-
-- Made context cleanup safer to avoid dup freeing, mostly in the
-- presence of repeated exceptions during store/retrieve (which can
-- cause memory leaks anyway, so it's just additional safety, not a
-- definite fix).
-+ - CORE-only improvements to stacksize
-
--Sun Nov 5 18:23:48 MET 2000 Raphael Manfredi <Raphael_Manfredi@pobox.com>
-+3.05_09 - Thu Mar 9 19:20:19 2017 +0100 Reini Urban <rurban@cpan.org>
-
-- Version 1.0.6.
-+ - compute the stacksizes, improve cleanup within croak
-+ from stack exhaustion.
-
-- Fixed severe "object lost" bug for STORABLE_freeze returns,
-- when refs to lexicals, taken within the hook, were to be
-- serialized by Storable. Enhanced the t/recurse.t test to
-- stress hook a little more with refs to lexicals.
-+ - added stack_depth and stack_depth_hash getters.
-
--Thu Oct 26 19:14:38 MEST 2000 Raphael Manfredi <Raphael_Manfredi@pobox.com>
-+3.05_08 - Wed Mar 8 21:03:43 CET 2017 Reini Urban <rurban@cpan.org>
-
-- Version 1.0.5.
-+ - finetune the max stack limit, for C++, DEBUGGING and 32bit.
-
-- Documented that store() and retrieve() can return undef.
-- That is, the error reporting is not always made via exceptions,
-- as the paragraph on error reporting was implying.
-+ - fix t/blessed.t for cperl5.22
-
-- Auto requires module of blessed ref when STORABLE_thaw misses.
-- When the Storable engine looks for the STORABLE_thaw hook and
-- does not find it, it now tries to require the package into which
-- the blessed reference is.
-+3.05_07 - Sun Mar 5 13:36:47 2017 +0100 Reini Urban <rurban@cpan.org>
-
-- Just check $^O, in t/lock.t: there's no need to pull the whole
-- Config module for that.
-+ - Fixed a podchecker issue
-
--Mon Oct 23 20:03:49 MEST 2000 Raphael Manfredi <Raphael_Manfredi@pobox.com>
-+3.05_06 - Sun Mar 5 11:42:04 2017 +0100 Reini Urban <rurban@cpan.org>
-
-- Version 1.0.4.
-+ - Fixed wrong recursion depth error with large arrays containing
-+ another array. L<[cperl #257]|https://github.com/perl11/cperl/issues/257>
-
-- Protected calls to flock() for DOS platform: apparently, the
-- flock/fcnlt emulation is reported to be broken on that
-- platform.
-+3.05_05 - Thu Feb 2 12:40:44 2017 +0100 Reini Urban <rurban@cpanel.net>
-
-- Added logcarp emulation if they don't have Log::Agent, since
-- we now use it to carp when lock_store/lock_retrieve is used
-- on DOS.
-+ - Add leak tests for [cpan #97316], [perl #121928]
-
--Fri Sep 29 21:52:29 MEST 2000 Raphael Manfredi <Raphael_Manfredi@pobox.com>
-+ - Limit the max recursion depth to 1200 on 32bit systems.
-+ We have no max_depth option yet, as in JSON::XS.
-
-- Version 1.0.3.
-+3.05_04 - Thu Feb 2 11:59:21 2017 +0100 Reini Urban <rurban@cpanel.net>
-
-- Avoid using "tainted" and "dirty" since Perl remaps them via
-- cpp (i.e. #define). This is deeply harmful when threading
-- is enabled. This concerned both the context structure and
-- local variable and argument names. Brrr..., scary!
-+ - Fix retrieve_tied_array which fails since 5.16
-+ [cpan #84705]
-
--Thu Sep 28 23:46:39 MEST 2000 Raphael Manfredi <Raphael_Manfredi@pobox.com>
-+ - Improve t/blessed.t in the creation of sv_yes/sv_no
-+ with threaded perls.
-
-- Version 1.0.2.
-+3.05_03 - Tue Jan 31 02:55:30 2017 +0100 Reini Urban <rurban@cpanel.net>
-
-- Fixed spelling in README.
-+ - Tune t/recurse.t stack-overflow limit more.
-
-- Added lock_store, lock_nstore, and lock_retrieve (advisory locking)
-- after a proposal from Erik Haugan <erik@solbors.no>.
-+3.05_02 - Mon Jan 30 19:50:29 2017 +0100 Reini Urban <rurban@cpanel.net>
-
-- Perls before 5.004_04 lack newSVpvn, added remapping in XS.
-+ - Tune t/recurse.t stack-overflow limit. Small 64bit systems overflow
-+ even with depth 3000, where 32bit are ok.
-
-- Fixed stupid typo in the t/utf8.t test.
-+3.05_01 - Mon Jan 30 15:13:38 2017 +0100 Reini Urban <rurban@cpanel.net>
-
--Sun Sep 17 18:51:10 MEST 2000 Raphael Manfredi <Raphael_Manfredi@pobox.com>
-+ - Protect against stack overflows with nested arrays and hashes
-+ [cpan #97526]. This imposes a new limit to your nested structures,
-+ but JSON::XS has a limit of 512. We use a max_depth of 3000 for the
-+ typical stack limit of 8k.
-
-- Version 1.0.1, binary format 2.3.
-+3.05 - Sun Jan 29 11:36:43 2017 +0100 Reini Urban <rurban@cpanel.net>
-
-- Documented that doubles are stored stringified by nstore().
-+ - Protect against classname len overflow on the stack
-+ and 2x on the heap with retrieve_bless and retrieve_hook.
-+ A serious security issue with malcrafted storable files or buffers,
-+ but p5p accepts no CVE on Storable attacks. See RT #130635
-+ (reported by JD).
-
-- Added Salvador Ortiz Garcia in CREDITS section, He identified
-- a bug in the store hooks and proposed the right fix: the class
-- id was allocated too soon. His bug case was also added to
-- the regression test suite.
-+ - Fix NULL ptr SEGVs with retrieve_code and retrieve_other.
-+ See RT #130098 (reported and fixed by JD)
-
-- Now only taint retrieved data when source was tainted. A bug
-- discovered by Marc Lehmann.
-+ - Fix wrong huge LOBJECT support, broken since 3.00c.
-+ Repro with `export PERL_TEST_MEMORY=8`
-
-- Added support for UTF-8 strings, a contribution of Marc Lehmann.
-- This is normally only activated in post-5.6 perls.
-+ - Fix the few remaining 2-arg open calls.
-
--Thu Aug 31 23:06:06 MEST 2000 Raphael Manfredi <Raphael_Manfredi@pobox.com>
-+ - Portability and backport fixes back to 5.6.2
-
-- First official release Storable 1.0, for inclusion in perl 5.7.0.
-- The license scheme is now compatible with Perl's.
-+3.04c - Sat Jan 7 09:01:29 2017 +0100 Reini Urban <rurban@cpanel.net>
-
--Thu Aug 24 01:02:02 MEST 2000 Raphael Manfredi <Raphael_Manfredi@pobox.com>
-+ - fix printf types and warnings, esp. for 32bit use64bitint
-
-- ANSI-fied most of the code, preparing for Perl core integration.
-- The next version of Storable will be 0.8, and will be integrated
-- into the Perl core (development branch).
-+ - Change sv_setpvn(…, "…", …) to sv_setpvs(…, "…")
-
-- Dispatch tables were moved upfront to relieve some compilers,
-- especially on AIX and Windows platforms.
-+3.03c - Tue Jul 26 11:49:33 2016 +1000 Tony Cook <tony@develop-help.com>
-
-- Merged 64-bit fixes from perl5-porters.
-+ - remove . from @INC when loading optional modules
-
--Mon Aug 14 09:22:04 MEST 2000 Raphael Manfredi <Raphael_Manfredi@pobox.com>
-+3.02c - Sun Nov 20 18:06:45 2016 +0100 Reini Urban <rurban@cpanel.net>
-
-- Added a refcnt dec in retrieve_tied_key(): sv_magic() increases
-- the refcnt on the mg_ptr as well.
-+ - Fix -Wc++11-compat warnings, fix -Wchar-subscripts
-
-- Removed spurious dependency to Devel::Peek, which was used for
-- testing only in t/tied_items.t. Thanks to Conrad Heiney
-- <conrad@fringehead.org> for spotting it first.
-+3.01c - Fri Sep 16 01:32:59 2016 +0200 Reini Urban <rurban@cpanel.net>
-
--Sun Aug 13 22:12:59 MEST 2000 Raphael Manfredi <Raphael_Manfredi@pobox.com>
-+ - Added warn_security("Movable-Type CVE-2015-1592 Storable metasploit attack")
-+ when detecting the third destructive metasploit vector,
-+ thawing bless \"mt-config.cgi", "CGITempFile".
-
-- Marc Lehmann kindly contributed code to add overloading support
-- and to handle references to tied variables.
-+3.00c - Thu Mar 31 17:10:27 2016 +0200 Reini Urban <rurban@cpanel.net>
-
-- Rewrote leading blurb about compatibility to make it clearer what
-- "backward compatibility" is about: when I say 0.7 is backward
-- compatible with 0.6, it means the revision 0.7 can read files
-- produced by 0.6.
-+ - Added support for u64 strings, arrays and hashes >2G
-+ via a new LOBJECT tag. This is for 32bit systems and lengths
-+ between 2GB and 4GB (I32-U32), and 64bit (>I32).
-
-- Mention new Clone(3) extension in SEE ALSO.
-+ - Bumped STORABLE_BIN_MINOR and STORABLE_BIN_WRITE_MINOR from 10 to 11
-
-- Was wrongly optimizing for "undef" values in hashes by not
-- fully recursing: as a result, tied "undef" values were incorrectly
-- serialized.
-+ - fix parallel tests, use unique filenames.
-
--Sun Jul 30 12:59:17 MEST 2000 Raphael Manfredi <Raphael_Manfredi@pobox.com>
-+ - fixed 2 instances of 2arg open,
-
-- First revision of Storable 0.7.
-+ - added optional flag arguments to skip tie and bless on retrieve/thaw,
-
-- The serializing format is new, known as version 2.0. It is fully
-- backward compatible with 0.6. Earlier formats are deprecated and
-- have not even been tested: next version will drop pre-0.6 format.
-+ - added SECURITY WARNING and Large data support to docs
-
-- Changes since 0.6@11:
-+ - compute CAN_FLOCK at compile-time
-
-- - Moved interface to the "beta" status. Some tiny parts are still
-- subject to change, but nothing important enough to warrant an "alpha"
-- status any longer.
-+ - reformat everything consistently
-
-- - Slightly reduced the size of the Storable image by factorizing
-- object class names and removing final object storage notification due
-- to a redesign of the blessed object storing.
-+ - enable DEBUGME tracing and asserts with -DDEBUGGING
-
-- - Classes can now redefine how they wish their instances to be serialized
-- and/or deep cloned. Serializing hooks are written in Perl code.
-+ - fix all 64 bit compiler warnings
-
-- - The engine is now fully re-entrant.
-+ - added some abstraction methods to avoid code duplication
-
--Sun Apr 2 23:47:50 MEST 2000 Raphael Manfredi <Raphael_Manfredi@pobox.com>
-+2.65 - unreleased
-
-- Added provision to detect more recent binary formats, since
-- the new upcoming Storable-0.7 will use a different format.
-- In order to prevent attempting the de-serialization of newer
-- formats by older versions, I'm adding this now to the 0.6 series.
-+ - Replace multiple 'use vars' by 'our'
-
-- I'm expecting this revision to be the last of the 0.6 series.
-- Unless it does not work with perl 5.6, which I don't use yet,
-- and therefore against which I cannot test.
-+ - remove Config dependency
-
--Wed Mar 29 19:55:21 MEST 2000 Raphael Manfredi <Raphael_Manfredi@pobox.com>
-+2.51 - Wed Jul 2 16:25:25 IST 2014 Abhijit Menon-Sen <ams@toroid.org>
-
-- Added note about format incompatibilities with old versions
-- (i.e. pre 0.5@9 formats, which cannot be understood as there
-- was no versionning information in the file by then).
-+ - [perl #121928] Fix memory leak for dclone inside freeze hook
-+ (Alex Solovey)
-
-- Protect all $@ variables when eval {} used, to avoid corrupting
-- it when store/retrieve is called within an exception handler.
-+ - Do not call DESTROY for empty objects
-+ (Vladimir Timofeev)
-
-- Mistakenly included "patchlevel.h" instead of <patchlevel.h>,
-- preventing Perl's patchlevel from being included, which is
-- needed starting from 5.6.
-+ - Other bugfixes
-
--Tue May 12 09:15:15 METDST 1998 Raphael Manfredi <Raphael_Manfredi@grenoble.hp.com>
-+2.45 - Sat Jul 13 18:34:27 IST 2013 Abhijit Menon-Sen <ams@toroid.org>
-
-- Fixed shared "undef" bug in hashes, which did not remain shared
-- through store/retrieve.
-+ - [perl #118829] Memory leaks in STORABLE_attach
-+ (Vladimir Timofeev)
-
--Thu Feb 10 19:48:16 MET 2000 Raphael Manfredi <Raphael_Manfredi@pobox.com>
-+ - [perl #118139] Don't SEGV during global destruction
-+ (Nicholas Clark, report/test from Reini Urban)
-
-- added last_op_in_netorder() predicate
-- documented last_op_in_netorder()
-- added tests for the new last_op_in_netorder() predicate
-+ - Added security warnings section (Steffen Mueller)
-
--Wed Oct 20 19:07:36 MEST 1999 Raphael Manfredi <Raphael_Manfredi@pobox.com>
-+ - Update INSTALLDIRS to favour installation in 'site'
-+ (James E Keenan)
-
-- Forgot to update VERSION
-+2.39 - Tue 11 Sep 06:51:11 IST 2012 Abhijit Menon-Sen <ams@toroid.org>
-
--Tue Oct 19 21:25:02 MEST 1999 Raphael Manfredi <Raphael_Manfredi@pobox.com>
-+ - Various bugfixes, including compatibility fixes for older versions of Perl
-+ and vstring handling.
-
-- Added mention of japanese translation for the manual page.
-+2.29 - Sun 3 Jul 09:10:11 IST 2011 Abhijit Menon-Sen <ams@toroid.org>
-
-- Fixed typo in macro that made threaded code not compilable,
-- especially on Win32 platforms.
-+ - Various bugfixes, notably including preventing nfreeze from incorrectly
-+ stringifying integers.
-
-- Changed detection of older perls (pre-5.005) by testing PATCHLEVEL
-- directly instead of relying on internal symbols.
-+2.25 - Fri 3 Dec 14:12:32 GMT 2010 David Leadbeater <dgl@dgl.cx>
-
--Tue Sep 14 22:13:28 MEST 1999 Raphael Manfredi <Raphael_Manfredi@pobox.com>
-+ - Support for serializing coderefs containing UTF-8.
-
-- Integrated "thread-safe" patch from Murray Nesbitt.
-- Note that this may not be very efficient for threaded code,
-- see comment in the code.
-+2.24 - Fri Nov 12 10:52:19 IST 2010 Abhijit Menon-Sen <ams@toroid.org>
-
-- Try to avoid compilation warning on 64-bit CPUs. Can't test it,
-- since I don't have access to such machines.
-+ - Performance improvement for overloaded classes from Benjamin Holzman.
-
--Mon Jul 12 14:37:19 METDST 1999 Raphael Manfredi <Raphael_Manfredi@pobox.com>
-+2.23 - Fri Nov 12 10:36:22 IST 2010 Abhijit Menon-Sen <ams@toroid.org>
-
-- changed my e-mail to pobox.
-+ - Release the latest version from the Perl repository.
-
-- mentioned it is not thread-safe.
-+2.21 - Thu Aug 6 10:55:50 IST 2009 Abhijit Menon-Sen <ams@toroid.org>
-
-- updated version number.
-+ - Includes hints/hpux.pl that was inadvertently left out of 2.20.
-
-- uses new internal PL_* naming convention.
-+2.20 - Mon May 18 09:38:20 IST 2009 Abhijit Menon-Sen <ams@toroid.org>
-
--Fri Jul 3 13:38:16 METDST 1998 Raphael Manfredi <Raphael_Manfredi@grenoble.hp.com>
-+ - Fix bug handling blessed references to overloaded objects, plus other
-+ miscellaneous fixes.
-
-- Updated benchmark figures due to recent optimizations done in
-- store(): tagnums are now stored as-is in the hash table, so
-- no surrounding SV is created. And the "shared keys" mode for
-- hash table was turned off.
-+2.19
-
-- Fixed backward compatibility (wrt 0.5@9) for retrieval of
-- blessed refs. That old version did something wrong, but the
-- bugfix prevented correct retrieval of the old format.
-+ - released with perl 5.8.9.
-
--Mon Jun 22 11:00:48 METDST 1998 Raphael Manfredi <Raphael_Manfredi@grenoble.hp.com>
-+2.18 - Thu Nov 22 13:24:18 IST 2007 Abhijit Menon-Sen <ams@toroid.org>
-
-- Changed benchmark figures.
-+ - Compile fixes for older Perls. (No functional changes.)
-
-- Adjust refcnt of tied objects after calling sv_magic() to avoid
-- memory leaks. Contributed by Jeff Gresham.
-+2.17 - Sat Nov 17 02:12:12 IST 2007 Abhijit Menon-Sen <ams@toroid.org>
-
--Fri Jun 12 11:50:04 METDST 1998 Raphael Manfredi <Raphael_Manfredi@grenoble.hp.com>
-+ - Various broken tests fixed. (No functional changes.)
-
-- Added workaround for persistent LVALUE-ness in perl5.004. All
-- scalars tagged as being an lvalue are handled as if they were
-- not an lvalue at all. Added test for that LVALUE bug workaround.
-+2.16 - Sat Mar 31 06:11:06 IST 2007 Abhijit Menon-Sen <ams@toroid.org>
-
-- Now handles Perl immortal scalars explicitly, by storing &sv_yes
-- as such, explicitly.
-+ - Fixes to Storable::dclone, read_magic, retrieve_lscalar
-
-- Retrieval of non-immortal undef cannot be shared. Previous
-- version was over-optimizing by not creating a separate SV for
-- all undefined scalars seen.
-+ - Storable 0.1 compatibility
-
--Thu Jun 4 17:21:51 METDST 1998 Raphael Manfredi <Raphael_Manfredi@grenoble.hp.com>
-+ - Miscellaneous compile/leak/test/portability fixes
-
-- Baseline for Storable-0.6@0.
-+2.15 - Mon May 23 22:48:49 IST 2005 Abhijit Menon-Sen <ams@wiw.org>
-
-- This version introduces a binary incompatibility in the generated
-- binary image, which is more compact than older ones by approximatively
-- 15%, depending on the exact degree of sharing in your structures.
-+ - Minor changes to address a couple of compile problems.
-
-- The good news is that your older images can still be retrieved with
-- this version, i.e. backward compatibility is preserved. This version
-- of Storable can only generate new binaries however.
-+2.14 - Mon Apr 25 07:29:14 IST 2005 Abhijit Menon-Sen <ams@wiw.org>
-
-- Another good news is that the retrieval of data structure is
-- significantly quicker than before, because a Perl array is used
-- instead of a hash table to keep track of retrieved objects, and
-- also because the image being smaller, less I/O function calls are
-- made.
-+ - Store weak references
-
--Tue May 12 09:15:15 METDST 1998 Raphael Manfredi <Raphael_Manfredi@grenoble.hp.com>
-+ - Add STORABLE_attach hook.
-
-- Version number now got from Storable.pm directly.
-+2.13 - Thu Jun 17 12:26:43 BST 2004 Nicholas Clark <nick@ccl4.org>
-
-- Fixed overzealous sv_type() optimization, which would make
-- Storable fail when faced with an "upgraded" SV to the PVIV
-- or PVNV kind containing a reference.
-+ - Don't change the type of top level overloaded references to RV -
-+ they are perfectly correct as PVMG
-
--Thu Apr 30 15:11:30 METDST 1998 Raphael Manfredi <Raphael_Manfredi@grenoble.hp.com>
-+ - Storable needs to cope with incoming frozen data that happens to be
-+ utf8 encoded.
-
-- Extended the SYNOPSIS section to give quick overview of the
-- routines and their signature.
-+2.12 - Wed Mar 17 15:40:29 GMT 2004 Nicholas Clark <nick@ccl4.org>
-
-- Optimized sv_type() to avoid flags checking when not needed, i.e.
-- when their type makes it impossible for them to be refs or tied.
-- This slightly increases throughput by a few percents when refs
-- and tied variables are marginal occurrences in your data.
-+ - Add regression tests for the auto-require of STORABLE_thaw
-
-- Stubs for XS now use OutputStream and InputStream file types to
-- make it work when the given file is actually a socket. Perl
-- makes a distinction for sockets in its internal I/O structures
-- by having both a read and a write structure, whereas plain files
-- share the same one.
-+ - Add auto-require of modules to restore overloading (and tests)
-
--Tue Jun 3 09:41:33 METDST 1997 Raphael Manfredi <Raphael_Manfredi@grenoble.hp.com>
-+ - Change to no context (should give speedup with ithreads)
-
-- Thanks to a contribution from Benjamin A. Holzman, Storable is now
-- able to correctly serialize tied SVs, i.e. tied arrays, hashes
-- and scalars.
-+2.11 - Sat Mar 13 20:11:03 GMT 2004 Nicholas Clark <nick@ccl4.org>
-
--Thu Apr 9 18:07:51 METDST 1998 Raphael Manfredi <Raphael_Manfredi@grenoble.hp.com>
-+ - Storing restricted hashes in canonical order would SEGV. Fixed.
-
-- I said SvPOK() had changed to SvPOKp(), but that was a lie...
-+ - It was impossible to retrieve references to PL_sv_no and
-+ PL_sv_undef from STORABLE_thaw hooks.
-
--Wed Apr 8 13:14:29 METDST 1998 Raphael Manfredi <Raphael_Manfredi@grenoble.hp.com>
-+ - restrict.t was failing on 5.8.0, due to 5.8.0's unique
-+ implementation of restricted hashes using PL_sv_undef
-
-- Wrote sizeof(SV *) instead of sizeof(I32) when portable, which
-- in effect mangled the object tags and prevented portability
-- across 32/64 bit architectures!
-+ - These changes allow a space optimisation for restricted hashes.
-
--Wed Mar 25 14:57:02 MET 1998 Raphael Manfredi <Raphael_Manfredi@grenoble.hp.com>
-+2.10 - Sat Jan 24 16:22:32 IST 2004 Abhijit Menon-Sen <ams@wiw.org>
-
-- Added code example for store_fd() and retrieve_fd() in the
-- man page, to emphasize that file descriptors must be passed as
-- globs, not as plain strings.
-+ - Thread safety: Storable::CLONE/init_perlinterp() now create
-+ a new Perl context for each new ithread.
-+ (From Stas Bekman and Jan Dubois.)
-
-- Cannot use SV addresses as tag when using nstore() on LP64. This
-- was the cause of problems when creating a storable image on an
-- LP64 machine and retrieving it on an ILP32 system, which is
-- exactly what nstore() is meant for...
-+ - Fix a tag count mismatch with $Storable::Deparse that caused
-+ all back-references after a stored sub to be off-by-N (where
-+ N was the number of code references in between).
-+ (From Sam Vilain.)
-
-- However, we continue to use SV addresses as tags for plain store(),
-- because benchmarking shows that it saves up to 8% of the store
-- time, and store() is meant to be fast at the expense of lack
-- of portability.
-+ - Prevent CODE references from turning into SCALAR references.
-+ (From Slaven Rezic.)
-
-- This means there will be approximately an 8% degradation of
-- performance for nstore(), but it's now working as expected.
-- That cost may vary on your machine of course, since it is
-- solely caused by the memory allocation overhead used to create
-- unique SV tags for each distinct stored SV.
-+2.09 - Sat Jan 3 18:49:18 GMT 2004 Nicholas Clark <nick@ccl4.org>
-
--Tue Jan 20 09:21:53 MET 1998 Raphael Manfredi <Raphael_Manfredi@grenoble.hp.com>
-+ - Fix minor problems with the CPAN release
-
-- Don't use any '_' in version number.
-+ - Make Storable.xs work on 5.8.2 and later (already in the core)
-
--Tue Jan 13 17:51:50 MET 1998 Raphael Manfredi <Raphael_Manfredi@grenoble.hp.com>
-+ - Ship the linux hints file
-
-- Updated version number.
-+ - Ship Test::More for the benefit of Perls pre 5.6.2
-
-- added binmode() calls for systems where it matters.
-+ - Correct Makefile.PL to only install in core for 5.8.0 and later
-
-- Be sure to pass globs, not plain file strings, to C routines,
-- so that Storable can be used under the Perl debugger.
-+2.08 - Sat Sep 6 01:08:20 IST 2003 Abhijit Menon-Sen <ams@wiw.org>
-
--Wed Nov 5 10:53:22 MET 1997 Raphael Manfredi <Raphael_Manfredi@grenoble.hp.com>
-+ - This release works around a 5.8.0 bug which caused hashes to not
-+ be marked as having key flags even though an HEK had HEK_WASUTF8
-+ set. (Note that the only reasonable solution is to silently drop
-+ the flag from the affected key.)
-
-- Fix memory leaks on seen hash table and returned SV refs.
-+ - Users of RT 3 who were seeing assertion failures should upgrade.
-+ (Perl 5.8.1 will have the bug fixed.)
-
-- Storable did not work properly when tainting enabled.
-+2.07 - Mon May 5 10:24:16 IST 2003 Abhijit Menon-Sen <ams@wiw.org>
-
-- Fixed "Allocation too large" messages in freeze/thaw and added.
-- proper regression test in t/freeze.t.
-+ - Minor bugfixes (self-tied objects are now correctly stored, as
-+ are the results of additions larger than INT_MAX).
-
--Tue Jun 3 09:41:33 METDST 1997 Raphael Manfredi <Raphael_Manfredi@grenoble.hp.com>
-+2.06 - Mon Oct 7 21:56:38 BST 2002 Nicholas Clark <nick@ccl4.org>
-
-- Updated version number
-+ - Remove qr// from t/downgrade.t so that it will run on 5.004
-
-- Added freeze/thaw interface and dclone.
-+ - Mention $File::Spec::VERSION a second time in t/forgive.t so that it
-+ runs without warnings in 5.004 (this may be a 5.00405 bug I'm working
-+ round)
-
--Fri May 16 10:45:47 METDST 1997 Raphael Manfredi <Raphael_Manfredi@grenoble.hp.com>
-+ - Fix t/integer.t initialisation to actually generate 64 bits of 9c
-
-- Forgot that AutoLoader does not export its own AUTOLOAD.
-- I could use
-+ - Fix comparison tests to use eval to get around 64 bit IV conversion
-+ issues on 5.6.x, following my t/integer.t ^ precedence bug found by
-+ Rafael Garcia-Suarez
-
-- use AutoLoader 'AUTOLOAD';
--
-- but that would not be backward compatible. So the export is
-- done by hand...
-+ - Alter t/malice.t to work with Test/More.pm in t/, and skip individual
-+ subtests that use $Config{ptrsize}, so that the rest of the test can
-+ now be run with 5.004
-
--Tue Mar 25 11:21:32 MET 1997 Raphael Manfredi <Raphael_Manfredi@grenoble.hp.com>
-+ - Change t/malice.t and the error message in check_magic in Storable.xs
-+ from "Pointer integer size" to "Pointer size"
-
-- Empty scalar strings are now "defined" at retrieval time.
-+ - Remove prerequisite of Test::More from Makefile.PL
-
-- New test to ensure an empty string is defined when retrieved.
-+ - Ship Test::Builder, Test::Simple and Test::More in t
-
--Thu Feb 27 16:32:44 MET 1997 Raphael Manfredi <Raphael_Manfredi@grenoble.hp.com>
-+2.05 - Thu Oct 3 08:57:22 IST 2002 Abhijit Menon-Sen <ams@wiw.org>
-
-- Updated version number
-+ - Adds support for CODE references from Slaven Rezic
-+ <slaven.rezic@berlin.de>.
-
-- Declare VERSION as being used
-+2.04 - Fri Jun 7 23:55:41 BST 2002 Nicholas Clark
-
-- Fixed a typo in the PerlIO_putc remapping.
-- PerlIO_read and perlIO_write inverted size/nb_items.
-- (only relevant for pre-perl5.004 versions)
-+ - Bug fix from Radu Greab <radu@netsoft.ro> (plus regression test)
-+ to fix a recently introduced bug detected by Dave Rolsky.
-+ Bug was that for a non threaded build, the class information was
-+ being lost at freeze time on the first object with a STORABLE_freeze
-+ hook. Consequentially the object was not blessed at all when thawed.
-+ (The presence (or lack) of STORABLE_thaw was irrelevant; this was
-+ a store-time data lost bug, caused by failure to initialize internal
-+ context)
-+ The bug was introduced as development perl change 16442 (on
-+ 2002/05/07), so has been present since 2.00.
-+ Patches to introduce more regression tests to reduce the chance of
-+ a reoccurrence of this sort of goof are always welcome.
-
--Thu Feb 27 15:58:31 MET 1997 Raphael Manfredi <Raphael_Manfredi@grenoble.hp.com>
-+2.03 - Thu May 30 20:31:08 BST 2002 Nicholas Clark <nick@ccl4.org>
-
-- Updated version number
-+ - Header changes on 5.6.x on Unix where IV is long long
-
-- Added VERSION identification
-+ 5.6.x introduced the ability to have IVs as long long. However,
-+ Configure still defined BYTEORDER based on the size of a long.
-+ Storable uses the BYTEORDER value as part of the header, but
-+ doesn't explicitly store sizeof(IV) anywhere in the header.
-+ Hence on 5.6.x built with IV as long long on a platform that
-+ uses Configure (ie most things except VMS and Windows) headers
-+ are identical for the different IV sizes, despite the files
-+ containing some fields based on sizeof(IV)
-
-- Allow build with perl5.003, which is ante perlIO time
-+ 5.8.0 is consistent; all platforms have BYTEORDER in config.h
-+ based on sizeof(IV) rather than sizeof(long). This means that
-+ the value of BYTEORDER will change from (say) 4321 to 87654321
-+ between 5.6.1 and 5.8.0 built with the same options to Configure
-+ on the same machine. This means that the Storable header will
-+ differ, and the two versions will wrongly thing that they are
-+ incompatible.
-
--Mon Jan 13 17:53:18 MET 1997 Raphael Manfredi <Raphael_Manfredi@grenoble.hp.com>
-+ For the benefit of long term consistency, Storable now
-+ implements the 5.8.0 BYTEORDER policy on 5.6.x. This means that
-+ 2.03 onwards default to be incompatible with 2.02 and earlier
-+ (ie the large 1.0.x installed base) on the same 5.6.x perl.
-
-- Random code fixes.
-+ To allow interworking, a new variable
-+ $Storable::interwork_56_64bit is introduced. It defaults to
-+ false. Set it to true to read and write old format files. Don't
-+ use it unless you have existing stored data written with 5.6.x
-+ that you couldn't otherwise read, or you need to interwork with
-+ a machine running older Storable on a 5.6.x with long long IVs
-+ (i.e., you probably don't need to use it).
-
--Wed Jan 22 15:19:56 MET 1997 Raphael Manfredi <Raphael_Manfredi@grenoble.hp.com>
-+2.02 - Sat May 25 22:38:39 BST 2002 Nicholas Clark <nick@ccl4.org>
-
-- Updated version number in Makefile.PL.
-+ - Rewrite Storable.xs so that the file header structure for write_magic
-+ is built at compile time, and check_magic attempts to the header in
-+ blocks rather than byte per byte. These changes make the compiled
-+ extension 2.25% smaller, but are not significant enough to give a
-+ noticeable speed up.
-
-- Added "thanks to" section to README.
-+2.01 - Thu May 23 22:50:41 BST 2002 Nicholas Clark <nick@ccl4.org>
-
-- Documented new forgive_me variable.
-+ - New regression tests integer.t
-
-- Made 64-bit clean.
-+ - Add code to safely store large unsigned integers.
-
-- Added forgive_me support to allow store() of data structures
-- containing non-storable items like CODE refs.
-+ - Change code not to attempt to store large integers (ie > 32 bits)
-+ in network order as 32 bits.
-+
-+ - *Never* underestimate the value of a pathological test suite carefully
-+ crafted with maximum malice before writing a line of real code. It
-+ prevents crafty bugs from stowing away in your released code.
-+ It's much less embarrassing to find them before you ship.
-+ (Well, never underestimate it if you ever want to work for me)
-+
-+2.0 - Fri May 17 22:48:59 BST 2002 Nicholas Clark <nick@ccl4.org>
-+
-+ - binary format 2.5 (but writes format 2.4 on pre 5.7.3)
-+
-+ The perl5 porters have decided to make sure that Storable still
-+ builds on pre-5.8 perls, and make the 5.8 version available on CPAN.
-+ The VERSION is now 2.0, and it passes all tests on 5.005_03, 5.6.1
-+ and 5.6.1 with threads. On 5.6.0 t/downgrade.t fails tests 34 and 37,
-+ due to a bug in 5.6.0 - upgrade to 5.6.1.
-+
-+ - Jarkko and I have collated the list of changes the perl5 porters have
-+ from the perl5 Changes file:
-+
-+ - data features of upcoming perl 5.8.0 are supported: Unicode hash
-+ keys (Unicode hash values have been supported since Storable 1.0.1)
-+ and "restricted hashes" (readonly hashes and hash entries)
-+
-+ - a newer version of perl can now be used to serialize data which is
-+ not supported in earlier perls: Storable will attempt to do the
-+ right thing for as long as possible, croaking only when safe data
-+ conversion simply isn't possible. Alternatively earlier perls can
-+ opt to have a lossy downgrade data instead of croaking
-+
-+ - when built with perls pre 5.7.3 this Storable writes out files
-+ with binary format 2.4, the same format as Storable 1.0.8 onwards.
-+ This should mean that this Storable will inter-operate seamlessly
-+ with any Storable 1.0.8 or newer on perls pre 5.7.3
-+
-+ - dclone() now works with empty string scalar objects
-+
-+ - retrieving of large hashes is now more efficient
-+
-+ - more routines autosplit out of the main module, so Storable should
-+ load slightly more quickly
-+
-+ - better documentation
-+
-+ - the internal context objects are now freed explicitly, rather than
-+ relying on thread or process exit
-+
-+ - bugs fixed in debugging trace code affecting builds made with 64 bit
-+ IVs
-+
-+ - code tidy-ups to allow clean compiles with more warning options
-+ turned on avoid problems with $@ getting corrupted on 5.005_03 if
-+ Carp wasn't already loaded
-+
-+ - added &show_file_magic, so you can add to /etc/magic and teach
-+ Unix's file command about Storable files
-+
-+ - We plan to keep Storable on CPAN in sync with the Perl core, so
-+ if you encounter bugs or other problems building or using Storable,
-+ please let us know at perl5-porters@perl.org
-+ Patches welcome!
-+
-+1.014 - Sat Dec 1 14:37:54 MET 2001 Raphael Manfredi <Raphael_Manfredi@pobox.com>
-+
-+ - This is the LAST maintenance release of the Storable module.
-+ Indeed, Storable is now part of perl 5.8, and will be maintained
-+ as part of Perl. The CPAN module will remain available there
-+ for people running pre-5.8 perls.
-+
-+ - Avoid requiring Fcntl upfront, useful to embedded runtimes.
-+ Use an eval {} for testing, instead of making Storable.pm
-+ simply fail its compilation in the BEGIN block.
-+
-+ - store_fd() will now correctly autoflush file if needed.
-+
-+1.013 - Tue Aug 28 23:53:20 MEST 2001 Raphael Manfredi <Raphael_Manfredi@pobox.com>
-+
-+ - Fixed truncation race with lock_retrieve() in lock_store().
-+ The file has to be truncated only once the exclusive lock is held.
-+
-+ - Removed spurious debugging messages in .xs file.
-+
-+1.012 - Sun Jul 1 13:27:32 MEST 2001 Raphael Manfredi <Raphael_Manfredi@pobox.com>
-+
-+ - Systematically use "=over 4" for POD linters.
-+ Apparently, POD linters are much stricter than would
-+ otherwise be needed, but that's OK.
-+
-+ - Fixed memory corruption on croaks during thaw(). Thanks
-+ to Claudio Garcia for reproducing this bug and providing the
-+ code to exercise it. Added test cases for this bug, adapted
-+ from Claudio's code.
-+
-+ - Made code compile cleanly with -Wall (from Jarkko Hietaniemi).
-+
-+ - Changed tagnum and classnum from I32 to IV in context. Also
-+ from Jarkko.
-+
-+1.011 - Thu Mar 15 01:22:32 MET 2001 Raphael Manfredi <Raphael_Manfredi@pobox.com>
-+
-+ - Last version was wrongly compiling with assertions on, due
-+ to an edit glitch. That did not cause any problem (apart from
-+ a slight performance loss) excepted on Win* platforms, where the
-+ assertion code does not compile.
-+
-+1.010 - Sat Feb 17 13:37:37 MET 2001 Raphael Manfredi <Raphael_Manfredi@pobox.com>
-+
-+ - Forgot to increase version number at previous patch (there were
-+ two of them, which is why we jump from 1.0.8 to 1.0.10).
-+
-+1.008 - Sat Feb 17 13:35:00 MET 2001 Raphael Manfredi <Raphael_Manfredi@pobox.com>
-+
-+ - binary format 2.4.
-+
-+ - Fixed incorrect error message.
-+
-+ - Now bless objects ASAP at retrieve time, which is meant to fix
-+ two bugs:
-+
-+ * Indirect references to overloaded object were not able to
-+ restore overloading if the object was not blessed yet,
-+ which was possible since blessing occurred only after the
-+ recursive retrieval.
-+
-+ * Storable hooks asking for serialization of blessed ref could
-+ get un-blessed refs at retrieval time, for the very same
-+ reason.
-+
-+ * The fix implemented here was suggested by Nick Ing-Simmons.
-+
-+ - Added support for blessed ref to tied structures. This is the
-+ cause for the binary format change.
-+
-+ - Added EBCDIC version of the compatibility test with 0.6.11,
-+ from Peter Prymmer
-+
-+ - Added tests for the new features, and to make sure the bugs they
-+ are meant to fix are indeed fixed.
-+
-+1.007 - Wed Jan 3 10:43:18 MET 2001 Raphael Manfredi <Raphael_Manfredi@pobox.com>
-+
-+ - Removed spurious 'clean' entry in Makefile.PL.
-+
-+ - Added CAN_FLOCK to determine whether we can flock() or not,
-+ by inspecting Perl's configuration parameters, as determined
-+ by Configure.
-+
-+ - Trace offending package when overloading cannot be restored
-+ on a scalar.
-+
-+ - Made context cleanup safer to avoid dup freeing, mostly in the
-+ presence of repeated exceptions during store/retrieve (which can
-+ cause memory leaks anyway, so it's just additional safety, not a
-+ definite fix).
-+
-+1.006 - Sun Nov 5 18:23:48 MET 2000 Raphael Manfredi <Raphael_Manfredi@pobox.com>
-+
-+ - Fixed severe "object lost" bug for STORABLE_freeze returns,
-+ when refs to lexicals, taken within the hook, were to be
-+ serialized by Storable. Enhanced the t/recurse.t test to
-+ stress hook a little more with refs to lexicals.
-+
-+1.005 - Thu Oct 26 19:14:38 MEST 2000 Raphael Manfredi <Raphael_Manfredi@pobox.com>
-+
-+ - Documented that store() and retrieve() can return undef.
-+ That is, the error reporting is not always made via exceptions,
-+ as the paragraph on error reporting was implying.
-+
-+ - Auto requires module of blessed ref when STORABLE_thaw misses.
-+ When the Storable engine looks for the STORABLE_thaw hook and
-+ does not find it, it now tries to require the package into which
-+ the blessed reference is.
-+
-+ - Just check $^O, in t/lock.t: there's no need to pull the whole
-+ Config module for that.
-+
-+1.004 - Mon Oct 23 20:03:49 MEST 2000 Raphael Manfredi <Raphael_Manfredi@pobox.com>
-+
-+ - Protected calls to flock() for DOS platform: apparently, the
-+ flock/fcnlt emulation is reported to be broken on that
-+ platform.
-+
-+ - Added logcarp emulation if they don't have Log::Agent, since
-+ we now use it to carp when lock_store/lock_retrieve is used
-+ on DOS.
-+
-+1.003 - Fri Sep 29 21:52:29 MEST 2000 Raphael Manfredi <Raphael_Manfredi@pobox.com>
-+
-+ - Avoid using "tainted" and "dirty" since Perl remaps them via
-+ cpp (i.e. #define). This is deeply harmful when threading
-+ is enabled. This concerned both the context structure and
-+ local variable and argument names. Brrr..., scary!
-+
-+1.002 - Thu Sep 28 23:46:39 MEST 2000 Raphael Manfredi <Raphael_Manfredi@pobox.com>
-+
-+ - Fixed spelling in README.
-+
-+ - Added lock_store, lock_nstore, and lock_retrieve (advisory locking)
-+ after a proposal from Erik Haugan <erik@solbors.no>.
-+
-+ - Perls before 5.004_04 lack newSVpvn, added remapping in XS.
-+
-+ - Fixed stupid typo in the t/utf8.t test.
-+
-+1.001 - Sun Sep 17 18:51:10 MEST 2000 Raphael Manfredi <Raphael_Manfredi@pobox.com>
-+
-+ - binary format 2.3.
-+
-+ - Documented that doubles are stored stringified by nstore().
-+
-+ - Added Salvador Ortiz Garcia in CREDITS section, He identified
-+ a bug in the store hooks and proposed the right fix: the class
-+ id was allocated too soon. His bug case was also added to
-+ the regression test suite.
-+
-+ - Now only taint retrieved data when source was tainted. A bug
-+ discovered by Marc Lehmann.
-+
-+ - Added support for UTF-8 strings, a contribution of Marc Lehmann.
-+ This is normally only activated in post-5.6 perls.
-+
-+1.000 - Thu Aug 31 23:06:06 MEST 2000 Raphael Manfredi <Raphael_Manfredi@pobox.com>
-+
-+ - First official release Storable 1.0, for inclusion in perl 5.7.0.
-+
-+ - The license scheme is now compatible with Perl's.
-+
-+0.703 - Thu Aug 24 01:02:02 MEST 2000 Raphael Manfredi <Raphael_Manfredi@pobox.com>
-+
-+ - ANSI-fied most of the code, preparing for Perl core integration.
-+ The next version of Storable will be 0.8, and will be integrated
-+ into the Perl core (development branch).
-+
-+ - Dispatch tables were moved upfront to relieve some compilers,
-+ especially on AIX and Windows platforms.
-+
-+ - Merged 64-bit fixes from perl5-porters.
-+
-+0.702 - Mon Aug 14 09:22:04 MEST 2000 Raphael Manfredi <Raphael_Manfredi@pobox.com>
-+
-+ - Added a refcnt dec in retrieve_tied_key(): sv_magic() increases
-+ the refcnt on the mg_ptr as well.
-+
-+ - Removed spurious dependency to Devel::Peek, which was used for
-+ testing only in t/tied_items.t. Thanks to Conrad Heiney
-+ <conrad@fringehead.org> for spotting it first.
-+
-+0.701 - Sun Aug 13 22:12:59 MEST 2000 Raphael Manfredi <Raphael_Manfredi@pobox.com>
-+
-+ - Marc Lehmann kindly contributed code to add overloading support
-+ and to handle references to tied variables.
-+
-+ - Rewrote leading blurb about compatibility to make it clearer what
-+ "backward compatibility" is about: when I say 0.7 is backward
-+ compatible with 0.6, it means the revision 0.7 can read files
-+ produced by 0.6.
-+
-+ - Mention new Clone(3) extension in SEE ALSO.
-+
-+ - Was wrongly optimizing for "undef" values in hashes by not
-+ fully recursing: as a result, tied "undef" values were incorrectly
-+ serialized.
-+
-+0.700 - Sun Jul 30 12:59:17 MEST 2000 Raphael Manfredi <Raphael_Manfredi@pobox.com>
-+
-+ - The serializing format is new, known as version 2.0. It is fully
-+ backward compatible with 0.6. Earlier formats are deprecated and
-+ have not even been tested: next version will drop pre-0.6 format.
-+
-+ - Moved interface to the "beta" status. Some tiny parts are still
-+ subject to change, but nothing important enough to warrant an "alpha"
-+ status any longer.
-+
-+ - Slightly reduced the size of the Storable image by factorizing
-+ object class names and removing final object storage notification due
-+ to a redesign of the blessed object storing.
-+
-+ - Classes can now redefine how they wish their instances to be serialized
-+ and/or deep cloned. Serializing hooks are written in Perl code.
-+
-+ - The engine is now fully re-entrant.
-+
-+0.611 - Sun Apr 2 23:47:50 MEST 2000 Raphael Manfredi <Raphael_Manfredi@pobox.com>
-+
-+ - Added provision to detect more recent binary formats, since
-+ the new upcoming Storable-0.7 will use a different format.
-+ In order to prevent attempting the de-serialization of newer
-+ formats by older versions, I'm adding this now to the 0.6 series.
-+
-+ - I'm expecting this revision to be the last of the 0.6 series.
-+ Unless it does not work with perl 5.6, which I don't use yet,
-+ and therefore against which I cannot test.
-+
-+0.610 - Wed Mar 29 19:55:21 MEST 2000 Raphael Manfredi <Raphael_Manfredi@pobox.com>
-+
-+ - Added note about format incompatibilities with old versions
-+ (i.e. pre 0.5@9 formats, which cannot be understood as there
-+ was no versionning information in the file by then).
-+
-+ - Protect all $@ variables when eval {} used, to avoid corrupting
-+ it when store/retrieve is called within an exception handler.
-+
-+ - Mistakenly included "patchlevel.h" instead of <patchlevel.h>,
-+ preventing Perl's patchlevel from being included, which is
-+ needed starting from 5.6.
-+
-+0.609 - Thu Feb 10 19:48:16 MET 2000 Raphael Manfredi <Raphael_Manfredi@pobox.com>
-+
-+ - Fixed shared "undef" bug in hashes, which did not remain shared
-+ through store/retrieve.
-+
-+ - added last_op_in_netorder() predicate
-+
-+ - documented last_op_in_netorder()
-+
-+ - added tests for the new last_op_in_netorder() predicate
-+
-+0.607 - Wed Oct 20 19:07:36 MEST 1999 Raphael Manfredi <Raphael_Manfredi@pobox.com>
-+
-+ - Forgot to update VERSION
-+
-+0.606 - Tue Oct 19 21:25:02 MEST 1999 Raphael Manfredi <Raphael_Manfredi@pobox.com>
-+
-+ - Added mention of japanese translation for the manual page.
-+
-+ - Fixed typo in macro that made threaded code not compilable,
-+ especially on Win32 platforms.
-+
-+ - Changed detection of older perls (pre-5.005) by testing PATCHLEVEL
-+ directly instead of relying on internal symbols.
-+
-+0.605 - Tue Sep 14 22:13:28 MEST 1999 Raphael Manfredi <Raphael_Manfredi@pobox.com>
-+
-+ - Integrated "thread-safe" patch from Murray Nesbitt.
-+ Note that this may not be very efficient for threaded code,
-+ see comment in the code.
-+
-+ - Try to avoid compilation warning on 64-bit CPUs. Can't test it,
-+ since I don't have access to such machines.
-+
-+0.604 - Mon Jul 12 14:37:19 METDST 1999 Raphael Manfredi <Raphael_Manfredi@pobox.com>
-+
-+ - changed my e-mail to pobox.
-+
-+ - mentioned it is not thread-safe.
-+
-+ - updated version number.
-+
-+ - uses new internal PL_* naming convention.
-+
-+0.603 - Fri Jul 3 13:38:16 METDST 1998 Raphael Manfredi <Raphael_Manfredi@grenoble.hp.com>
-+
-+ - Updated benchmark figures due to recent optimizations done in
-+ store(): tagnums are now stored as-is in the hash table, so
-+ no surrounding SV is created. And the "shared keys" mode for
-+ hash table was turned off.
-+
-+ - Fixed backward compatibility (wrt 0.5@9) for retrieval of
-+ blessed refs. That old version did something wrong, but the
-+ bugfix prevented correct retrieval of the old format.
-+
-+0.602 - Mon Jun 22 11:00:48 METDST 1998 Raphael Manfredi <Raphael_Manfredi@grenoble.hp.com>
-+
-+ - Changed benchmark figures.
-+
-+ - Adjust refcnt of tied objects after calling sv_magic() to avoid
-+ memory leaks. Contributed by Jeff Gresham.
-+
-+0.601 - Fri Jun 12 11:50:04 METDST 1998 Raphael Manfredi <Raphael_Manfredi@grenoble.hp.com>
-+
-+ - Added workaround for persistent LVALUE-ness in perl5.004. All
-+ scalars tagged as being an lvalue are handled as if they were
-+ not an lvalue at all. Added test for that LVALUE bug workaround.
-+
-+ - Now handles Perl immortal scalars explicitly, by storing &sv_yes
-+ as such, explicitly.
-+
-+ - Retrieval of non-immortal undef cannot be shared. Previous
-+ version was over-optimizing by not creating a separate SV for
-+ all undefined scalars seen.
-+
-+0.600 - Thu Jun 4 17:21:51 METDST 1998 Raphael Manfredi <Raphael_Manfredi@grenoble.hp.com>
-+
-+ - This version introduces a binary incompatibility in the generated
-+ binary image, which is more compact than older ones by approximatively
-+ 15%, depending on the exact degree of sharing in your structures.
-+
-+ - The good news is that your older images can still be retrieved with
-+ this version, i.e. backward compatibility is preserved. This version
-+ of Storable can only generate new binaries however.
-+
-+ - Another good news is that the retrieval of data structure is
-+ significantly quicker than before, because a Perl array is used
-+ instead of a hash table to keep track of retrieved objects, and
-+ also because the image being smaller, less I/O function calls are
-+ made.
-+
-+0.509 - Tue May 12 09:15:15 METDST 1998 Raphael Manfredi <Raphael_Manfredi@grenoble.hp.com>
-+
-+ - Version number now got from Storable.pm directly.
-+
-+ - Fixed overzealous sv_type() optimization, which would make
-+ Storable fail when faced with an "upgraded" SV to the PVIV
-+ or PVNV kind containing a reference.
-+
-+0.508 - Thu Apr 30 15:11:30 METDST 1998 Raphael Manfredi <Raphael_Manfredi@grenoble.hp.com>
-+
-+ - Extended the SYNOPSIS section to give quick overview of the
-+ routines and their signature.
-+
-+ - Optimized sv_type() to avoid flags checking when not needed, i.e.
-+ when their type makes it impossible for them to be refs or tied.
-+ This slightly increases throughput by a few percents when refs
-+ and tied variables are marginal occurrences in your data.
-+
-+ - Stubs for XS now use OutputStream and InputStream file types to
-+ make it work when the given file is actually a socket. Perl
-+ makes a distinction for sockets in its internal I/O structures
-+ by having both a read and a write structure, whereas plain files
-+ share the same one.
-+
-+0.507 - Fri Apr 24 17:29:23 METDST 1998 Raphael Manfredi <Raphael_Manfredi@grenoble.hp.com>
-+
-+ - Thanks to a contribution from Benjamin A. Holzman, Storable is now
-+ able to correctly serialize tied SVs, i.e. tied arrays, hashes
-+ and scalars.
-+
-+0.506 - Thu Apr 9 18:07:51 METDST 1998 Raphael Manfredi <Raphael_Manfredi@grenoble.hp.com>
-+
-+ - I said SvPOK() had changed to SvPOKp(), but that was a lie...
-+
-+0.505 - Wed Apr 8 13:14:29 METDST 1998 Raphael Manfredi <Raphael_Manfredi@grenoble.hp.com>
-+
-+ - Wrote sizeof(SV *) instead of sizeof(I32) when portable, which
-+ in effect mangled the object tags and prevented portability
-+ across 32/64 bit architectures!
-+
-+0.504 - Wed Mar 25 14:57:02 MET 1998 Raphael Manfredi <Raphael_Manfredi@grenoble.hp.com>
-+
-+ - Added code example for store_fd() and retrieve_fd() in the
-+ man page, to emphasize that file descriptors must be passed as
-+ globs, not as plain strings.
-+
-+ - Cannot use SV addresses as tag when using nstore() on LP64. This
-+ was the cause of problems when creating a storable image on an
-+ LP64 machine and retrieving it on an ILP32 system, which is
-+ exactly what nstore() is meant for...
-+
-+ - However, we continue to use SV addresses as tags for plain store(),
-+ because benchmarking shows that it saves up to 8% of the store
-+ time, and store() is meant to be fast at the expense of lack
-+ of portability.
-+
-+ - This means there will be approximately an 8% degradation of
-+ performance for nstore(), but it's now working as expected.
-+ That cost may vary on your machine of course, since it is
-+ solely caused by the memory allocation overhead used to create
-+ unique SV tags for each distinct stored SV.
-+
-+0.503 - Tue Jan 20 09:21:53 MET 1998 Raphael Manfredi <Raphael_Manfredi@grenoble.hp.com>
-+
-+ - Don't use any '_' in version number.
-+
-+0.5_02 - Tue Jan 13 17:51:50 MET 1998 Raphael Manfredi <Raphael_Manfredi@grenoble.hp.com>
-+
-+ - Updated version number.
-+
-+ - added binmode() calls for systems where it matters.
-+
-+ - Be sure to pass globs, not plain file strings, to C routines,
-+ so that Storable can be used under the Perl debugger.
-+
-+0.5_01 - Wed Nov 5 10:53:22 MET 1997 Raphael Manfredi <Raphael_Manfredi@grenoble.hp.com>
-+
-+ - Fix memory leaks on seen hash table and returned SV refs.
-+
-+ - Storable did not work properly when tainting enabled.
-+
-+ - Fixed "Allocation too large" messages in freeze/thaw and added.
-+ proper regression test in t/freeze.t.
-+
-+0.5 - Tue Jun 10 18:47:47 MET 1997 Raphael Manfredi <Raphael_Manfredi@grenoble.hp.com>
-+
-+ - Fix storing in network order where it isn't native
-+
-+ - Fix size calculation when storing to memory or cloning
-+
-+0.4_07 - Tue Jun 3 09:41:33 METDST 1997 Raphael Manfredi <Raphael_Manfredi@grenoble.hp.com>
-+
-+ - Added freeze/thaw interface and dclone.
-+
-+0.4_06 - Fri May 16 10:45:47 METDST 1997 Raphael Manfredi <Raphael_Manfredi@grenoble.hp.com>
-+
-+ - Forgot that AutoLoader does not export its own AUTOLOAD.
-+ I could use
-+
-+ use AutoLoader 'AUTOLOAD';
-+
-+ but that would not be backward compatible. So the export is
-+ done by hand...
-+
-+0.4_05 - Tue Mar 25 11:21:32 MET 1997 Raphael Manfredi <Raphael_Manfredi@grenoble.hp.com>
-+
-+ - Empty scalar strings are now "defined" at retrieval time.
-+
-+ - New test to ensure an empty string is defined when retrieved.
-+
-+0.4_04 - Thu Feb 27 16:32:44 MET 1997 Raphael Manfredi <Raphael_Manfredi@grenoble.hp.com>
-+
-+ - Declare VERSION as being used
-+
-+ - Fixed a typo in the PerlIO_putc remapping.
-+ PerlIO_read and perlIO_write inverted size/nb_items.
-+ (only relevant for pre-perl5.004 versions)
-+
-+0.4_03 - Thu Feb 27 15:58:31 MET 1997 Raphael Manfredi <Raphael_Manfredi@grenoble.hp.com>
-+
-+ - Added VERSION identification
-+
-+ - Allow build with perl5.003, which is ante perlIO time
-+
-+0.4_02 - Wed Jan 22 15:19:56 MET 1997 Raphael Manfredi <Raphael_Manfredi@grenoble.hp.com>
-+
-+ - Added "thanks to" section to README.
-+
-+ - Documented new forgive_me variable.
-+
-+ - Made 64-bit clean.
-+
-+ - Added forgive_me support to allow store() of data structures
-+ containing non-storable items like CODE refs.
-+
-+0.4 - Wed Jan 14 19:25:57 MET 1997 Raphael Manfredi <Raphael_Manfredi@grenoble.hp.com>
-+
-+ - Avoid changing directory in tests
-+
-+ - Add a separate type for storing longer strings
-+
-+ - Use PerlIO APIs
-+
-+0.3 - Tue Jan 13 16:12:36 MET 1997 Raphael Manfredi <Raphael_Manfredi@grenoble.hp.com>
-+
-+ - Encode integers as integers even if they have NOK flag
-+
-+ - Avoid extra increment of ref count when retreiving scalar references
-+
-+ - Fix mutability of hash slots decoded from undefs
-+
-+0.2_02 - Mon Jan 13 17:53:18 MET 1997 Raphael Manfredi <Raphael_Manfredi@grenoble.hp.com>
-+
-+ - Added MTG statistics.
-+
-+ - Updated statistics with MTG performance (1 Mbyte/s on store)
-+
-+ - Missed Changelog in MANIFEST.
-+
-+0.2 - Mon Jan 13 17:20:55 MET 1997 Raphael Manfredi <Raphael_Manfredi@grenoble.hp.com>
-+
-+ - Croak only after having closed the file
-+
-+ - Removed erroneous line in retrieve_fd
-+
-+ - Forgot to take network order into account for lengths
-+
-+0.1 - Mon Oct 2 11:50:02 MET 1995 Raphael Manfredi <Raphael_Manfredi@grenoble.hp.com>
-+
-+ - Initial release
-diff --git a/MANIFEST b/MANIFEST
-deleted file mode 100644
-index 5e382d9..0000000
---- a/MANIFEST
-+++ /dev/null
-@@ -1,65 +0,0 @@
--ChangeLog
--hints/gnukfreebsd.pl
--hints/gnuknetbsd.pl
--hints/hpux.pl
--hints/linux.pl
--Makefile.PL
--MANIFEST This list of files
--META.json Module JSON meta-data (added by MakeMaker)
--META.yml Module meta-data (added by MakeMaker)
--ppport.h
--README
--stacksize
--Storable.pm
--Storable.xs
--t/attach.t
--t/attach_errors.t
--t/attach_singleton.t
--t/blessed.t
--t/canonical.t
--t/circular_hook.t
--t/code.t
--t/compat01.t
--t/compat06.t
--t/croak.t
--t/CVE-2015-1592.t
--t/dclone.t
--t/destroy.t
--t/downgrade.t
--t/file_magic.t
--t/flags.t
--t/forgive.t
--t/freeze.t
--t/HAS_ATTACH.pm
--t/HAS_HOOK.pm
--t/HAS_OVERLOAD.pm
--t/huge.t
--t/hugeids.t
--t/integer.t
--t/interwork56.t
--t/just_plain_nasty.t
--t/leaks.t
--t/lock.t
--t/make_56_interwork.pl
--t/make_downgrade.pl
--t/make_overload.pl
--t/malice.t
--t/overload.t
--t/recurse.t
--t/regexp.t
--t/restrict.t
--t/retrieve.t
--t/robust.t
--t/sig_die.t
--t/st-dump.pl
--t/store.t
--t/testlib.pl
--t/threads.t
--t/tied.t
--t/tied_hook.t
--t/tied_items.t
--t/tied_reify.t
--t/tied_store.t
--t/utf8.t
--t/utf8hash.t
--t/weak.t
-diff --git a/MANIFEST.SKIP b/MANIFEST.SKIP
-new file mode 100644
-index 0000000..d6ef8b0
---- /dev/null
-+++ b/MANIFEST.SKIP
-@@ -0,0 +1,58 @@
-+# Avoid version control files.
-+\bRCS\b
-+\bCVS\b
-+\bSCCS\b
-+,v$
-+\B\.svn\b
-+\B\.git\b
-+^\.github\b
-+\B\.gitignore\b
-+\b_darcs\b
-+\B\.cvsignore$
-+\B\.bzr\b
-+\B\.bzrignore$
-+
-+# Avoid VMS specific MakeMaker generated files
-+\bDescrip.MMS$
-+\bDESCRIP.MMS$
-+\bdescrip.mms$
-+
-+# Avoid Makemaker generated and utility files.
-+\bMANIFEST\.bak
-+\bMakefile$
-+\bblib/
-+\bMakeMaker-\d
-+\bpm_to_blib\.ts$
-+\bpm_to_blib$
-+\bblibdirs\.ts$ # 6.18 through 6.25 generated this
-+\b_eumm/ # 7.05_05 and above
-+
-+# Avoid temp and backup files.
-+~$
-+\.old$
-+\#$
-+\b\.#
-+\.bak$
-+\.tmp$
-+\.#
-+\.rej$
-+\..*\.sw.?$
-+\.~\d+~$
-+
-+\B\.DS_Store
-+\B\._
-+\.i[cC]loud$
-+
-+\bcover_db\b
-+\bcovered\b
-+
-+\B\.prove$
-+
-+^MYMETA\.
-+^META_new\.(?:json|yml)
-+
-+^Storable-[0-9.]+
-+
-+\.bs$
-+\.c$
-+\.o$
-diff --git a/META.json b/META.json
-deleted file mode 100644
-index c19c6f6..0000000
---- a/META.json
-+++ /dev/null
-@@ -1,58 +0,0 @@
--{
-- "abstract" : "persistence for Perl data structures",
-- "author" : [
-- "Perl 5 Porters"
-- ],
-- "dynamic_config" : 1,
-- "generated_by" : "ExtUtils::MakeMaker version 7.62, CPAN::Meta::Converter version 2.150010",
-- "license" : [
-- "perl_5"
-- ],
-- "meta-spec" : {
-- "url" : "http://search.cpan.org/perldoc?CPAN::Meta::Spec",
-- "version" : 2
-- },
-- "name" : "Storable",
-- "no_index" : {
-- "directory" : [
-- "t",
-- "inc"
-- ]
-- },
-- "prereqs" : {
-- "build" : {
-- "requires" : {
-- "ExtUtils::MakeMaker" : "6.31"
-- }
-- },
-- "configure" : {
-- "requires" : {
-- "ExtUtils::MakeMaker" : "6.31"
-- }
-- },
-- "runtime" : {
-- "requires" : {
-- "XSLoader" : "0"
-- }
-- },
-- "test" : {
-- "requires" : {
-- "Test::More" : "0.41"
-- }
-- }
-- },
-- "provides" : {
-- "Storable" : {
-- "file" : "Storable.pm",
-- "version" : "3.25"
-- }
-- },
-- "release_status" : "stable",
-- "resources" : {
-- "bugtracker" : {
-- "web" : "https://github.com/Perl/perl5/issues"
-- }
-- },
-- "version" : "3.25",
-- "x_serialization_backend" : "JSON::PP version 4.06"
--}
-diff --git a/META.yml b/META.yml
-deleted file mode 100644
-index 7a8ca35..0000000
---- a/META.yml
-+++ /dev/null
-@@ -1,30 +0,0 @@
-----
--abstract: 'persistence for Perl data structures'
--author:
-- - 'Perl 5 Porters'
--build_requires:
-- ExtUtils::MakeMaker: '6.31'
-- Test::More: '0.41'
--configure_requires:
-- ExtUtils::MakeMaker: '6.31'
--dynamic_config: 1
--generated_by: 'ExtUtils::MakeMaker version 7.62, CPAN::Meta::Converter version 2.150010'
--license: perl
--meta-spec:
-- url: http://module-build.sourceforge.net/META-spec-v1.4.html
-- version: '1.4'
--name: Storable
--no_index:
-- directory:
-- - t
-- - inc
--provides:
-- Storable:
-- file: Storable.pm
-- version: '3.25'
--requires:
-- XSLoader: '0'
--resources:
-- bugtracker: https://github.com/Perl/perl5/issues
--version: '3.25'
--x_serialization_backend: 'CPAN::Meta::YAML version 0.018'
-diff --git a/Makefile.PL b/Makefile.PL
-index b705654..5d53384 100644
---- a/Makefile.PL
-+++ b/Makefile.PL
-@@ -1,7 +1,7 @@
- #
- # Copyright (c) 1995-2000, Raphael Manfredi
- # Copyright (c) 2017, Reini Urban
--#
-+#
- # You may redistribute only under the same terms as Perl 5, as specified
- # in the README file that comes with the distribution.
- #
-@@ -15,72 +15,33 @@ WriteMakefile(
- NAME => 'Storable',
- AUTHOR => 'Perl 5 Porters',
- LICENSE => 'perl',
-- DISTNAME => "Storable",
-- PREREQ_PM =>
-- {
-- XSLoader => 0,
-- },
-- ( $ExtUtils::MakeMaker::VERSION >= 6.64 ?
-- (
-- CONFIGURE_REQUIRES => {
-- 'ExtUtils::MakeMaker' => '6.31',
-- },
-- BUILD_REQUIRES => {
-- 'ExtUtils::MakeMaker' => '6.31',
-+ PREREQ_PM => {
-+ XSLoader => 0,
-+ },
-+ INSTALLDIRS => ($] >= 5.007 && $] < 5.012) ? 'perl' : 'site',
-+ VERSION_FROM => 'lib/Storable.pm',
-+ ABSTRACT_FROM => 'lib/Storable.pm',
-+ CONFIGURE_REQUIRES => {
-+ 'ExtUtils::MakeMaker' => '6.31',
-+ },
-+ BUILD_REQUIRES => {
-+ 'ExtUtils::MakeMaker' => '6.31',
-+ },
-+ TEST_REQUIRES => {
-+ 'Test::More' => '0.82',
-+ 'File::Temp' => '0',
-+ },
-+ META_MERGE => {
-+ "meta-spec" => { version => 2 },
-+ resources => {
-+ bugtracker => 'https://github.com/Perl/perl5/issues',
-+ },
-+ provides => {
-+ 'Storable' => {
-+ file => 'lib/Storable.pm',
-+ version => MM->parse_version('lib/Storable.pm'),
- },
-- TEST_REQUIRES => {
-- 'Test::More' => '0.82',
-- },
-- )
-- : () ),
-- INSTALLDIRS => ($] >= 5.007 && $] < 5.012) ? 'perl' : 'site',
-- VERSION_FROM => 'Storable.pm',
-- ABSTRACT_FROM => 'Storable.pm',
-- ($ExtUtils::MakeMaker::VERSION > 6.45 ?
-- (META_MERGE => { resources =>
-- { bugtracker => 'https://github.com/Perl/perl5/issues' },
-- provides => {
-- 'Storable' => {
-- file => 'Storable.pm',
-- version => MM->parse_version('Storable.pm'),
-- },
-- },
--
-- },
-- ) : ()),
-- dist => { SUFFIX => 'gz', COMPRESS => 'gzip -f' },
-+ },
-+ },
- clean => { FILES => 'Storable-*' },
- );
--
--my $ivtype = $Config{ivtype};
--
--# I don't know if the VMS folks ever supported long long on 5.6.x
--if ($ivtype and $ivtype eq 'long long' and $^O !~ /^MSWin/) {
-- print <<'EOM';
--
--You appear to have a perl configured to use 64 bit integers in its scalar
--variables. If you have existing data written with an earlier version of
--Storable which this version of Storable refuses to load with a
--
-- Byte order is not compatible
--
--error, then please read the section "64 bit data in perl 5.6.0 and 5.6.1"
--in the Storable documentation for instructions on how to read your data.
--
--(You can find the documentation at the end of Storable.pm in POD format)
--
--EOM
--}
--
--package MY;
--
--sub depend {
-- "
--
--release : dist
-- git tag \$(VERSION)
-- cpan-upload \$(DISTVNAME).tar\$(SUFFIX)
-- git push
-- git push --tags
--"
--}
-diff --git a/README b/README
-index f63ace9..86212fd 100644
---- a/README
-+++ b/README
-@@ -27,7 +27,7 @@ complex and circular it is, provided it contains only SCALAR, ARRAY,
- HASH (possibly tied) and references (possibly blessed) to those items.
-
- At a later stage, or in another program, you may retrieve data from
--the stored file and recreate the same hiearchy in memory. If you
-+the stored file and recreate the same hierarchy in memory. If you
- had blessed references, the retrieved references are blessed into
- the same package, so you must make sure you have access to the
- same perl class than the one used to create the relevant objects.
-diff --git a/Storable.xs b/Storable.xs
-index a558dd7..3930db6 100644
---- a/Storable.xs
-+++ b/Storable.xs
-@@ -22,6 +22,7 @@
- #define NEED_newCONSTSUB
- #define NEED_newSVpvn_flags
- #define NEED_newRV_noinc
-+#define NEED_sv_vstring_get
- #include "ppport.h" /* handle old perls */
-
- #ifdef DEBUGGING
-@@ -39,10 +40,10 @@
- #endif
-
- #ifndef HvRITER_set
--# define HvRITER_set(hv,r) (HvRITER(hv) = r)
-+# define HvRITER_set(hv,r) (HvRITER(hv) = r)
- #endif
- #ifndef HvEITER_set
--# define HvEITER_set(hv,r) (HvEITER(hv) = r)
-+# define HvEITER_set(hv,r) (HvEITER(hv) = r)
- #endif
-
- #ifndef HvRITER_get
-@@ -57,17 +58,17 @@
- #endif
-
- #ifndef HvTOTALKEYS
--# define HvTOTALKEYS(hv) HvKEYS(hv)
-+# define HvTOTALKEYS(hv) HvKEYS(hv)
- #endif
- /* 5.6 */
- #ifndef HvUSEDKEYS
--# define HvUSEDKEYS(hv) HvKEYS(hv)
-+# define HvUSEDKEYS(hv) HvKEYS(hv)
- #endif
-
- #ifdef SVf_IsCOW
--# define SvTRULYREADONLY(sv) SvREADONLY(sv)
-+# define SvTRULYREADONLY(sv) SvREADONLY(sv)
- #else
--# define SvTRULYREADONLY(sv) (SvREADONLY(sv) && !SvIsCOW(sv))
-+# define SvTRULYREADONLY(sv) (SvREADONLY(sv) && !SvIsCOW(sv))
- #endif
-
- #ifndef strEQc
-@@ -96,8 +97,8 @@
- */
-
- #define TRACEME(x) \
-- STMT_START { \
-- if (cxt->traceme) \
-+ STMT_START { \
-+ if (cxt->traceme) \
- { PerlIO_stdoutf x; PerlIO_stdoutf("\n"); } \
- } STMT_END
-
-@@ -107,16 +108,16 @@
- { PerlIO_stdoutf x; PerlIO_stdoutf("\n"); } \
- } STMT_END
-
--#define INIT_TRACEME \
-- STMT_START { \
-- cxt->traceme = SvTRUE(get_sv("Storable::DEBUGME", GV_ADD)); \
-+#define INIT_TRACEME \
-+ STMT_START { \
-+ cxt->traceme = SvTRUE(get_sv("Storable::DEBUGME", GV_ADD)); \
- } STMT_END
-
- #else
- #define TRACEME(x)
- #define TRACEMED(x)
- #define INIT_TRACEME
--#endif /* DEBUGME */
-+#endif /* DEBUGME */
-
- #ifdef DASSERT
- #define ASSERT(x,y) \
-@@ -135,77 +136,77 @@
- * Type markers.
- */
-
--#define C(x) ((char) (x)) /* For markers with dynamic retrieval handling */
--
--#define SX_OBJECT C(0) /* Already stored object */
--#define SX_LSCALAR C(1) /* Scalar (large binary) follows (length, data) */
--#define SX_ARRAY C(2) /* Array forthcoming (size, item list) */
--#define SX_HASH C(3) /* Hash forthcoming (size, key/value pair list) */
--#define SX_REF C(4) /* Reference to object forthcoming */
--#define SX_UNDEF C(5) /* Undefined scalar */
--#define SX_INTEGER C(6) /* Integer forthcoming */
--#define SX_DOUBLE C(7) /* Double forthcoming */
--#define SX_BYTE C(8) /* (signed) byte forthcoming */
--#define SX_NETINT C(9) /* Integer in network order forthcoming */
--#define SX_SCALAR C(10) /* Scalar (binary, small) follows (length, data) */
--#define SX_TIED_ARRAY C(11) /* Tied array forthcoming */
--#define SX_TIED_HASH C(12) /* Tied hash forthcoming */
--#define SX_TIED_SCALAR C(13) /* Tied scalar forthcoming */
--#define SX_SV_UNDEF C(14) /* Perl's immortal PL_sv_undef */
--#define SX_SV_YES C(15) /* Perl's immortal PL_sv_yes */
--#define SX_SV_NO C(16) /* Perl's immortal PL_sv_no */
--#define SX_BLESS C(17) /* Object is blessed */
--#define SX_IX_BLESS C(18) /* Object is blessed, classname given by index */
--#define SX_HOOK C(19) /* Stored via hook, user-defined */
--#define SX_OVERLOAD C(20) /* Overloaded reference */
--#define SX_TIED_KEY C(21) /* Tied magic key forthcoming */
--#define SX_TIED_IDX C(22) /* Tied magic index forthcoming */
--#define SX_UTF8STR C(23) /* UTF-8 string forthcoming (small) */
--#define SX_LUTF8STR C(24) /* UTF-8 string forthcoming (large) */
--#define SX_FLAG_HASH C(25) /* Hash with flags forthcoming (size, flags, key/flags/value triplet list) */
-+#define C(x) ((char) (x)) /* For markers with dynamic retrieval handling */
-+
-+#define SX_OBJECT C(0) /* Already stored object */
-+#define SX_LSCALAR C(1) /* Scalar (large binary) follows (length, data) */
-+#define SX_ARRAY C(2) /* Array forthcoming (size, item list) */
-+#define SX_HASH C(3) /* Hash forthcoming (size, key/value pair list) */
-+#define SX_REF C(4) /* Reference to object forthcoming */
-+#define SX_UNDEF C(5) /* Undefined scalar */
-+#define SX_INTEGER C(6) /* Integer forthcoming */
-+#define SX_DOUBLE C(7) /* Double forthcoming */
-+#define SX_BYTE C(8) /* (signed) byte forthcoming */
-+#define SX_NETINT C(9) /* Integer in network order forthcoming */
-+#define SX_SCALAR C(10) /* Scalar (binary, small) follows (length, data) */
-+#define SX_TIED_ARRAY C(11) /* Tied array forthcoming */
-+#define SX_TIED_HASH C(12) /* Tied hash forthcoming */
-+#define SX_TIED_SCALAR C(13) /* Tied scalar forthcoming */
-+#define SX_SV_UNDEF C(14) /* Perl's immortal PL_sv_undef */
-+#define SX_SV_YES C(15) /* Perl's immortal PL_sv_yes */
-+#define SX_SV_NO C(16) /* Perl's immortal PL_sv_no */
-+#define SX_BLESS C(17) /* Object is blessed */
-+#define SX_IX_BLESS C(18) /* Object is blessed, classname given by index */
-+#define SX_HOOK C(19) /* Stored via hook, user-defined */
-+#define SX_OVERLOAD C(20) /* Overloaded reference */
-+#define SX_TIED_KEY C(21) /* Tied magic key forthcoming */
-+#define SX_TIED_IDX C(22) /* Tied magic index forthcoming */
-+#define SX_UTF8STR C(23) /* UTF-8 string forthcoming (small) */
-+#define SX_LUTF8STR C(24) /* UTF-8 string forthcoming (large) */
-+#define SX_FLAG_HASH C(25) /* Hash with flags forthcoming (size, flags, key/flags/value triplet list) */
- #define SX_CODE C(26) /* Code references as perl source code */
--#define SX_WEAKREF C(27) /* Weak reference to object forthcoming */
--#define SX_WEAKOVERLOAD C(28) /* Overloaded weak reference */
--#define SX_VSTRING C(29) /* vstring forthcoming (small) */
--#define SX_LVSTRING C(30) /* vstring forthcoming (large) */
--#define SX_SVUNDEF_ELEM C(31) /* array element set to &PL_sv_undef */
--#define SX_REGEXP C(32) /* Regexp */
--#define SX_LOBJECT C(33) /* Large object: string, array or hash (size >2G) */
--#define SX_BOOLEAN_TRUE C(34) /* Boolean true */
--#define SX_BOOLEAN_FALSE C(35) /* Boolean false */
--#define SX_LAST C(36) /* invalid. marker only */
-+#define SX_WEAKREF C(27) /* Weak reference to object forthcoming */
-+#define SX_WEAKOVERLOAD C(28) /* Overloaded weak reference */
-+#define SX_VSTRING C(29) /* vstring forthcoming (small) */
-+#define SX_LVSTRING C(30) /* vstring forthcoming (large) */
-+#define SX_SVUNDEF_ELEM C(31) /* array element set to &PL_sv_undef */
-+#define SX_REGEXP C(32) /* Regexp */
-+#define SX_LOBJECT C(33) /* Large object: string, array or hash (size >2G) */
-+#define SX_BOOLEAN_TRUE C(34) /* Boolean true */
-+#define SX_BOOLEAN_FALSE C(35) /* Boolean false */
-+#define SX_LAST C(36) /* invalid. marker only */
-
- /*
- * Those are only used to retrieve "old" pre-0.6 binary images.
- */
--#define SX_ITEM 'i' /* An array item introducer */
--#define SX_IT_UNDEF 'I' /* Undefined array item */
--#define SX_KEY 'k' /* A hash key introducer */
--#define SX_VALUE 'v' /* A hash value introducer */
--#define SX_VL_UNDEF 'V' /* Undefined hash value */
-+#define SX_ITEM 'i' /* An array item introducer */
-+#define SX_IT_UNDEF 'I' /* Undefined array item */
-+#define SX_KEY 'k' /* A hash key introducer */
-+#define SX_VALUE 'v' /* A hash value introducer */
-+#define SX_VL_UNDEF 'V' /* Undefined hash value */
-
- /*
- * Those are only used to retrieve "old" pre-0.7 binary images
- */
-
--#define SX_CLASS 'b' /* Object is blessed, class name length <255 */
--#define SX_LG_CLASS 'B' /* Object is blessed, class name length >255 */
--#define SX_STORED 'X' /* End of object */
-+#define SX_CLASS 'b' /* Object is blessed, class name length <255 */
-+#define SX_LG_CLASS 'B' /* Object is blessed, class name length >255 */
-+#define SX_STORED 'X' /* End of object */
-
- /*
- * Limits between short/long length representation.
- */
-
--#define LG_SCALAR 255 /* Large scalar length limit */
--#define LG_BLESS 127 /* Large classname bless limit */
-+#define LG_SCALAR 255 /* Large scalar length limit */
-+#define LG_BLESS 127 /* Large classname bless limit */
-
- /*
- * Operation types
- */
-
--#define ST_STORE 0x1 /* Store operation */
--#define ST_RETRIEVE 0x2 /* Retrieval operation */
--#define ST_CLONE 0x4 /* Deep cloning operation */
-+#define ST_STORE 0x1 /* Store operation */
-+#define ST_RETRIEVE 0x2 /* Retrieval operation */
-+#define ST_CLONE 0x4 /* Deep cloning operation */
-
- /*
- * The following structure is used for hash table key retrieval. Since, when
-@@ -219,10 +220,10 @@
- * is required. Hence the aptr pointer.
- */
- struct extendable {
-- char *arena; /* Will hold hash key strings, resized as needed */
-- STRLEN asiz; /* Size of aforementioned buffer */
-- char *aptr; /* Arena pointer, for in-place read/write ops */
-- char *aend; /* First invalid address */
-+ char *arena; /* Will hold hash key strings, resized as needed */
-+ STRLEN asiz; /* Size of aforementioned buffer */
-+ char *aptr; /* Arena pointer, for in-place read/write ops */
-+ char *aend; /* First invalid address */
- };
-
- /*
-@@ -241,7 +242,7 @@ struct extendable {
- * indexing by a hash at store time, and via an array at retrieve time.
- */
-
--typedef unsigned long stag_t; /* Used by pre-0.6 binary format */
-+typedef unsigned long stag_t; /* Used by pre-0.6 binary format */
-
- /*
- * Make the tag type 64-bit on 64-bit platforms.
-@@ -260,7 +261,7 @@ typedef STRLEN ntag_t;
- * The following "thread-safe" related defines were contributed by
- * Murray Nesbitt <murray@activestate.com> and integrated by RAM, who
- * only renamed things a little bit to ensure consistency with surrounding
-- * code. -- RAM, 14/09/1999
-+ * code. -- RAM, 14/09/1999
- *
- * The original patch suffered from the fact that the stcxt_t structure
- * was global. Murray tried to minimize the impact on the code as much as
-@@ -278,7 +279,7 @@ typedef STRLEN ntag_t;
- * Conditional UTF8 support.
- *
- */
--#define STORE_UTF8STR(pv, len) STORE_PV_LEN(pv, len, SX_UTF8STR, SX_LUTF8STR)
-+#define STORE_UTF8STR(pv, len) STORE_PV_LEN(pv, len, SX_UTF8STR, SX_LUTF8STR)
- #define HAS_UTF8_SCALARS
- #ifdef HeKUTF8
- #define HAS_UTF8_HASHES
-@@ -299,7 +300,7 @@ typedef STRLEN ntag_t;
- #ifdef HvPLACEHOLDERS
- #define HAS_RESTRICTED_HASHES
- #else
--#define HVhek_PLACEHOLD 0x200
-+#define HVhek_PLACEHOLD 0x200
- #define RESTRICTED_HASH_CROAK() CROAK(("Cannot retrieve restricted hash"))
- #endif
-
-@@ -342,13 +343,13 @@ typedef union {
- /*
- * Fields s_tainted and s_dirty are prefixed with s_ because Perl's include
- * files remap tainted and dirty when threading is enabled. That's bad for
-- * perl to remap such common words. -- RAM, 29/09/00
-+ * perl to remap such common words. -- RAM, 29/09/00
- */
-
- struct stcxt;
- typedef struct stcxt {
-- int entry; /* flags recursion */
-- int optype; /* type of traversal operation */
-+ int entry; /* flags recursion */
-+ int optype; /* type of traversal operation */
- /* which objects have been seen, store time.
- tags are numbers, which are cast to (SV *) and stored directly */
- #ifdef USE_PTR_TABLE
-@@ -359,38 +360,38 @@ typedef struct stcxt {
- /* Still need hseen for the 0.6 file format code. */
- #endif
- HV *hseen;
-- AV *hook_seen; /* which SVs were returned by STORABLE_freeze() */
-- AV *aseen; /* which objects have been seen, retrieve time */
-- ntag_t where_is_undef; /* index in aseen of PL_sv_undef */
-- HV *hclass; /* which classnames have been seen, store time */
-- AV *aclass; /* which classnames have been seen, retrieve time */
-- HV *hook; /* cache for hook methods per class name */
-- IV tagnum; /* incremented at store time for each seen object */
-- IV classnum; /* incremented at store time for each seen classname */
-- int netorder; /* true if network order used */
-- int s_tainted; /* true if input source is tainted, at retrieve time */
-- int forgive_me; /* whether to be forgiving... */
-- int deparse; /* whether to deparse code refs */
-- SV *eval; /* whether to eval source code */
-- int canonical; /* whether to store hashes sorted by key */
-+ AV *hook_seen; /* which SVs were returned by STORABLE_freeze() */
-+ AV *aseen; /* which objects have been seen, retrieve time */
-+ ntag_t where_is_undef; /* index in aseen of PL_sv_undef */
-+ HV *hclass; /* which classnames have been seen, store time */
-+ AV *aclass; /* which classnames have been seen, retrieve time */
-+ HV *hook; /* cache for hook methods per class name */
-+ IV tagnum; /* incremented at store time for each seen object */
-+ IV classnum; /* incremented at store time for each seen classname */
-+ int netorder; /* true if network order used */
-+ int s_tainted; /* true if input source is tainted, at retrieve time */
-+ int forgive_me; /* whether to be forgiving... */
-+ int deparse; /* whether to deparse code refs */
-+ SV *eval; /* whether to eval source code */
-+ int canonical; /* whether to store hashes sorted by key */
- #ifndef HAS_RESTRICTED_HASHES
-- int derestrict; /* whether to downgrade restricted hashes */
-+ int derestrict; /* whether to downgrade restricted hashes */
- #endif
- #ifndef HAS_UTF8_ALL
-- int use_bytes; /* whether to bytes-ify utf8 */
--#endif
-- int accept_future_minor; /* croak immediately on future minor versions? */
-- int s_dirty; /* context is dirty due to CROAK() -- can be cleaned */
-- int membuf_ro; /* true means membuf is read-only and msaved is rw */
-- struct extendable keybuf; /* for hash key retrieval */
-- struct extendable membuf; /* for memory store/retrieve operations */
-- struct extendable msaved; /* where potentially valid mbuf is saved */
-- PerlIO *fio; /* where I/O are performed, NULL for memory */
-- int ver_major; /* major of version for retrieved object */
-- int ver_minor; /* minor of version for retrieved object */
-- SV *(**retrieve_vtbl)(pTHX_ struct stcxt *, const char *); /* retrieve dispatch table */
-- SV *prev; /* contexts chained backwards in real recursion */
-- SV *my_sv; /* the blessed scalar who's SvPVX() I am */
-+ int use_bytes; /* whether to bytes-ify utf8 */
-+#endif
-+ int accept_future_minor; /* croak immediately on future minor versions? */
-+ int s_dirty; /* context is dirty due to CROAK() -- can be cleaned */
-+ int membuf_ro; /* true means membuf is read-only and msaved is rw */
-+ struct extendable keybuf; /* for hash key retrieval */
-+ struct extendable membuf; /* for memory store/retrieve operations */
-+ struct extendable msaved; /* where potentially valid mbuf is saved */
-+ PerlIO *fio; /* where I/O are performed, NULL for memory */
-+ int ver_major; /* major of version for retrieved object */
-+ int ver_minor; /* minor of version for retrieved object */
-+ SV *(**retrieve_vtbl)(pTHX_ struct stcxt *, const char *); /* retrieve dispatch table */
-+ SV *prev; /* contexts chained backwards in real recursion */
-+ SV *my_sv; /* the blessed scalar who's SvPVX() I am */
-
- /* recur_sv:
-
-@@ -411,8 +412,8 @@ typedef struct stcxt {
- */
- SV *recur_sv; /* check only one recursive SV */
- int in_retrieve_overloaded; /* performance hack for retrieving overloaded objects */
-- int flags; /* controls whether to bless or tie objects */
-- IV recur_depth; /* avoid stack overflows RT #97526 */
-+ int flags; /* controls whether to bless or tie objects */
-+ IV recur_depth; /* avoid stack overflows RT #97526 */
- IV max_recur_depth; /* limit for recur_depth */
- IV max_recur_depth_hash; /* limit for recur_depth for hashes */
- #ifdef DEBUGME
-@@ -455,8 +456,8 @@ static MGVTBL vtbl_storable = {
- # define sv_magicext(sv, obj, type, vtbl, name, namlen) \
- THX_sv_magicext(aTHX_ sv, obj, type, vtbl, name, namlen)
- static MAGIC *THX_sv_magicext(pTHX_
-- SV *sv, SV *obj, int type,
-- MGVTBL const *vtbl, char const *name, I32 namlen)
-+ SV *sv, SV *obj, int type,
-+ MGVTBL const *vtbl, char const *name, I32 namlen)
- {
- MAGIC *mg;
- if (obj || namlen)
-@@ -476,8 +477,8 @@ static MAGIC *THX_sv_magicext(pTHX_
- }
- #endif
-
--#define NEW_STORABLE_CXT_OBJ(cxt) \
-- STMT_START { \
-+#define NEW_STORABLE_CXT_OBJ(cxt) \
-+ STMT_START { \
- SV *self = newSV(sizeof(stcxt_t) - 1); \
- SV *my_sv = newRV_noinc(self); \
- sv_magicext(self, NULL, PERL_MAGIC_ext, &vtbl_storable, NULL, 0); \
-@@ -488,26 +489,26 @@ static MAGIC *THX_sv_magicext(pTHX_
-
- #if defined(MULTIPLICITY) || defined(PERL_OBJECT) || defined(PERL_CAPI)
-
--#define dSTCXT_SV \
-+#define dSTCXT_SV \
- SV *perinterp_sv = *hv_fetch(PL_modglobal, \
-- MY_VERSION, sizeof(MY_VERSION)-1, TRUE)
-+ MY_VERSION, sizeof(MY_VERSION)-1, TRUE)
-
--#define dSTCXT_PTR(T,name) \
-+#define dSTCXT_PTR(T,name) \
- T name = ((perinterp_sv \
- && SvIOK(perinterp_sv) && SvIVX(perinterp_sv) \
- ? (T)SvPVX(SvRV(INT2PTR(SV*,SvIVX(perinterp_sv)))) : (T) 0))
--#define dSTCXT \
-+#define dSTCXT \
- dSTCXT_SV; \
- dSTCXT_PTR(stcxt_t *, cxt)
-
--#define INIT_STCXT \
-+#define INIT_STCXT \
- dSTCXT; \
- NEW_STORABLE_CXT_OBJ(cxt); \
-- assert(perinterp_sv); \
-+ assert(perinterp_sv); \
- sv_setiv(perinterp_sv, PTR2IV(cxt->my_sv))
-
--#define SET_STCXT(x) \
-- STMT_START { \
-+#define SET_STCXT(x) \
-+ STMT_START { \
- dSTCXT_SV; \
- sv_setiv(perinterp_sv, PTR2IV(x->my_sv)); \
- } STMT_END
-@@ -515,9 +516,9 @@ static MAGIC *THX_sv_magicext(pTHX_
- #else /* !MULTIPLICITY && !PERL_OBJECT && !PERL_CAPI */
-
- static stcxt_t *Context_ptr = NULL;
--#define dSTCXT stcxt_t *cxt = Context_ptr
--#define SET_STCXT(x) Context_ptr = x
--#define INIT_STCXT \
-+#define dSTCXT stcxt_t *cxt = Context_ptr
-+#define SET_STCXT(x) Context_ptr = x
-+#define INIT_STCXT \
- dSTCXT; \
- NEW_STORABLE_CXT_OBJ(cxt); \
- SET_STCXT(cxt)
-@@ -542,7 +543,7 @@ static stcxt_t *Context_ptr = NULL;
- * but the topmost context stacked.
- */
-
--#define CROAK(x) STMT_START { cxt->s_dirty = 1; croak x; } STMT_END
-+#define CROAK(x) STMT_START { cxt->s_dirty = 1; croak x; } STMT_END
-
- /*
- * End of "thread-safe" related definitions.
-@@ -556,9 +557,9 @@ static stcxt_t *Context_ptr = NULL;
- */
-
- #if PTRSIZE <= 4
--#define LOW_32BITS(x) ((I32) (x))
-+#define LOW_32BITS(x) ((I32) (x))
- #else
--#define LOW_32BITS(x) ((I32) ((STRLEN) (x) & 0xffffffffUL))
-+#define LOW_32BITS(x) ((I32) ((STRLEN) (x) & 0xffffffffUL))
- #endif
-
- /*
-@@ -579,33 +580,33 @@ static stcxt_t *Context_ptr = NULL;
- */
-
- #if INTSIZE > 4
--#define oI(x) ((I32 *) ((char *) (x) + 4))
--#define oS(x) ((x) - 4)
--#define oL(x) (x)
--#define oC(x) (x = 0)
-+#define oI(x) ((I32 *) ((char *) (x) + 4))
-+#define oS(x) ((x) - 4)
-+#define oL(x) (x)
-+#define oC(x) (x = 0)
- #define CRAY_HACK
- #else
--#define oI(x) (x)
--#define oS(x) (x)
--#define oL(x) (x)
-+#define oI(x) (x)
-+#define oS(x) (x)
-+#define oL(x) (x)
- #define oC(x)
- #endif
-
- /*
- * key buffer handling
- */
--#define kbuf (cxt->keybuf).arena
--#define ksiz (cxt->keybuf).asiz
--#define KBUFINIT() \
-- STMT_START { \
-+#define kbuf (cxt->keybuf).arena
-+#define ksiz (cxt->keybuf).asiz
-+#define KBUFINIT() \
-+ STMT_START { \
- if (!kbuf) { \
- TRACEME(("** allocating kbuf of 128 bytes")); \
- New(10003, kbuf, 128, char); \
- ksiz = 128; \
- } \
- } STMT_END
--#define KBUFCHK(x) \
-- STMT_START { \
-+#define KBUFCHK(x) \
-+ STMT_START { \
- if (x >= ksiz) { \
- if (x >= I32_MAX) \
- CROAK(("Too large size > I32_MAX")); \
-@@ -619,23 +620,23 @@ static stcxt_t *Context_ptr = NULL;
- /*
- * memory buffer handling
- */
--#define mbase (cxt->membuf).arena
--#define msiz (cxt->membuf).asiz
--#define mptr (cxt->membuf).aptr
--#define mend (cxt->membuf).aend
-+#define mbase (cxt->membuf).arena
-+#define msiz (cxt->membuf).asiz
-+#define mptr (cxt->membuf).aptr
-+#define mend (cxt->membuf).aend
-
--#define MGROW (1 << 13)
--#define MMASK (MGROW - 1)
-+#define MGROW (1 << 13)
-+#define MMASK (MGROW - 1)
-
--#define round_mgrow(x) \
-+#define round_mgrow(x) \
- ((STRLEN) (((STRLEN) (x) + MMASK) & ~MMASK))
--#define trunc_int(x) \
-+#define trunc_int(x) \
- ((STRLEN) ((STRLEN) (x) & ~(sizeof(int)-1)))
--#define int_aligned(x) \
-+#define int_aligned(x) \
- ((STRLEN)(x) == trunc_int(x))
-
--#define MBUF_INIT(x) \
-- STMT_START { \
-+#define MBUF_INIT(x) \
-+ STMT_START { \
- if (!mbase) { \
- TRACEME(("** allocating mbase of %d bytes", MGROW)); \
- New(10003, mbase, (int)MGROW, char); \
-@@ -648,8 +649,8 @@ static stcxt_t *Context_ptr = NULL;
- mend = mbase + msiz; \
- } STMT_END
-
--#define MBUF_TRUNC(x) mptr = mbase + x
--#define MBUF_SIZE() (mptr - mbase)
-+#define MBUF_TRUNC(x) mptr = mbase + x
-+#define MBUF_SIZE() (mptr - mbase)
-
- /*
- * MBUF_SAVE_AND_LOAD
-@@ -659,8 +660,8 @@ static stcxt_t *Context_ptr = NULL;
- * buffer into cxt->msaved, before MBUF_LOAD() can be used to retrieve
- * data from a string.
- */
--#define MBUF_SAVE_AND_LOAD(in) \
-- STMT_START { \
-+#define MBUF_SAVE_AND_LOAD(in) \
-+ STMT_START { \
- ASSERT(!cxt->membuf_ro, ("mbase not already saved")); \
- cxt->membuf_ro = 1; \
- TRACEME(("saving mbuf")); \
-@@ -668,8 +669,8 @@ static stcxt_t *Context_ptr = NULL;
- MBUF_LOAD(in); \
- } STMT_END
-
--#define MBUF_RESTORE() \
-- STMT_START { \
-+#define MBUF_RESTORE() \
-+ STMT_START { \
- ASSERT(cxt->membuf_ro, ("mbase is read-only")); \
- cxt->membuf_ro = 0; \
- TRACEME(("restoring mbuf")); \
-@@ -680,8 +681,8 @@ static stcxt_t *Context_ptr = NULL;
- * Use SvPOKp(), because SvPOK() fails on tainted scalars.
- * See store_scalar() for other usage of this workaround.
- */
--#define MBUF_LOAD(v) \
-- STMT_START { \
-+#define MBUF_LOAD(v) \
-+ STMT_START { \
- ASSERT(cxt->membuf_ro, ("mbase is read-only")); \
- if (!SvPOKp(v)) \
- CROAK(("Not a scalar string")); \
-@@ -689,8 +690,8 @@ static stcxt_t *Context_ptr = NULL;
- mend = mbase + msiz; \
- } STMT_END
-
--#define MBUF_XTEND(x) \
-- STMT_START { \
-+#define MBUF_XTEND(x) \
-+ STMT_START { \
- STRLEN nsz = (STRLEN) round_mgrow((x)+msiz); \
- STRLEN offset = mptr - mbase; \
- ASSERT(!cxt->membuf_ro, ("mbase is not read-only")); \
-@@ -702,14 +703,14 @@ static stcxt_t *Context_ptr = NULL;
- mend = mbase + nsz; \
- } STMT_END
-
--#define MBUF_CHK(x) \
-- STMT_START { \
-+#define MBUF_CHK(x) \
-+ STMT_START { \
- if ((mptr + (x)) > mend) \
- MBUF_XTEND(x); \
- } STMT_END
-
--#define MBUF_GETC(x) \
-- STMT_START { \
-+#define MBUF_GETC(x) \
-+ STMT_START { \
- if (mptr < mend) \
- x = (int) (unsigned char) *mptr++; \
- else \
-@@ -717,8 +718,8 @@ static stcxt_t *Context_ptr = NULL;
- } STMT_END
-
- #ifdef CRAY_HACK
--#define MBUF_GETINT(x) \
-- STMT_START { \
-+#define MBUF_GETINT(x) \
-+ STMT_START { \
- oC(x); \
- if ((mptr + 4) <= mend) { \
- memcpy(oI(&x), mptr, 4); \
-@@ -727,8 +728,8 @@ static stcxt_t *Context_ptr = NULL;
- return (SV *) 0; \
- } STMT_END
- #else
--#define MBUF_GETINT(x) \
-- STMT_START { \
-+#define MBUF_GETINT(x) \
-+ STMT_START { \
- if ((mptr + sizeof(int)) <= mend) { \
- if (int_aligned(mptr)) \
- x = *(int *) mptr; \
-@@ -740,8 +741,8 @@ static stcxt_t *Context_ptr = NULL;
- } STMT_END
- #endif
-
--#define MBUF_READ(x,s) \
-- STMT_START { \
-+#define MBUF_READ(x,s) \
-+ STMT_START { \
- if ((mptr + (s)) <= mend) { \
- memcpy(x, mptr, s); \
- mptr += s; \
-@@ -749,8 +750,8 @@ static stcxt_t *Context_ptr = NULL;
- return (SV *) 0; \
- } STMT_END
-
--#define MBUF_SAFEREAD(x,s,z) \
-- STMT_START { \
-+#define MBUF_SAFEREAD(x,s,z) \
-+ STMT_START { \
- if ((mptr + (s)) <= mend) { \
- memcpy(x, mptr, s); \
- mptr += s; \
-@@ -760,8 +761,8 @@ static stcxt_t *Context_ptr = NULL;
- } \
- } STMT_END
-
--#define MBUF_SAFEPVREAD(x,s,z) \
-- STMT_START { \
-+#define MBUF_SAFEPVREAD(x,s,z) \
-+ STMT_START { \
- if ((mptr + (s)) <= mend) { \
- memcpy(x, mptr, s); \
- mptr += s; \
-@@ -771,8 +772,8 @@ static stcxt_t *Context_ptr = NULL;
- } \
- } STMT_END
-
--#define MBUF_PUTC(c) \
-- STMT_START { \
-+#define MBUF_PUTC(c) \
-+ STMT_START { \
- if (mptr < mend) \
- *mptr++ = (char) c; \
- else { \
-@@ -782,15 +783,15 @@ static stcxt_t *Context_ptr = NULL;
- } STMT_END
-
- #ifdef CRAY_HACK
--#define MBUF_PUTINT(i) \
-- STMT_START { \
-+#define MBUF_PUTINT(i) \
-+ STMT_START { \
- MBUF_CHK(4); \
- memcpy(mptr, oI(&i), 4); \
- mptr += 4; \
- } STMT_END
- #else
--#define MBUF_PUTINT(i) \
-- STMT_START { \
-+#define MBUF_PUTINT(i) \
-+ STMT_START { \
- MBUF_CHK(sizeof(int)); \
- if (int_aligned(mptr)) \
- *(int *) mptr = i; \
-@@ -800,14 +801,14 @@ static stcxt_t *Context_ptr = NULL;
- } STMT_END
- #endif
-
--#define MBUF_PUTLONG(l) \
-- STMT_START { \
-+#define MBUF_PUTLONG(l) \
-+ STMT_START { \
- MBUF_CHK(8); \
- memcpy(mptr, &l, 8); \
- mptr += 8; \
- } STMT_END
--#define MBUF_WRITE(x,s) \
-- STMT_START { \
-+#define MBUF_WRITE(x,s) \
-+ STMT_START { \
- MBUF_CHK(s); \
- memcpy(mptr, x, s); \
- mptr += s; \
-@@ -817,60 +818,60 @@ static stcxt_t *Context_ptr = NULL;
- * Possible return values for sv_type().
- */
-
--#define svis_REF 0
--#define svis_SCALAR 1
--#define svis_ARRAY 2
--#define svis_HASH 3
--#define svis_TIED 4
--#define svis_TIED_ITEM 5
--#define svis_CODE 6
--#define svis_REGEXP 7
--#define svis_OTHER 8
-+#define svis_REF 0
-+#define svis_SCALAR 1
-+#define svis_ARRAY 2
-+#define svis_HASH 3
-+#define svis_TIED 4
-+#define svis_TIED_ITEM 5
-+#define svis_CODE 6
-+#define svis_REGEXP 7
-+#define svis_OTHER 8
-
- /*
- * Flags for SX_HOOK.
- */
-
--#define SHF_TYPE_MASK 0x03
--#define SHF_LARGE_CLASSLEN 0x04
--#define SHF_LARGE_STRLEN 0x08
--#define SHF_LARGE_LISTLEN 0x10
--#define SHF_IDX_CLASSNAME 0x20
--#define SHF_NEED_RECURSE 0x40
--#define SHF_HAS_LIST 0x80
-+#define SHF_TYPE_MASK 0x03
-+#define SHF_LARGE_CLASSLEN 0x04
-+#define SHF_LARGE_STRLEN 0x08
-+#define SHF_LARGE_LISTLEN 0x10
-+#define SHF_IDX_CLASSNAME 0x20
-+#define SHF_NEED_RECURSE 0x40
-+#define SHF_HAS_LIST 0x80
-
- /*
- * Types for SX_HOOK (last 2 bits in flags).
- */
-
--#define SHT_SCALAR 0
--#define SHT_ARRAY 1
--#define SHT_HASH 2
--#define SHT_EXTRA 3 /* Read extra byte for type */
-+#define SHT_SCALAR 0
-+#define SHT_ARRAY 1
-+#define SHT_HASH 2
-+#define SHT_EXTRA 3 /* Read extra byte for type */
-
- /*
- * The following are held in the "extra byte"...
- */
-
--#define SHT_TSCALAR 4 /* 4 + 0 -- tied scalar */
--#define SHT_TARRAY 5 /* 4 + 1 -- tied array */
--#define SHT_THASH 6 /* 4 + 2 -- tied hash */
-+#define SHT_TSCALAR 4 /* 4 + 0 -- tied scalar */
-+#define SHT_TARRAY 5 /* 4 + 1 -- tied array */
-+#define SHT_THASH 6 /* 4 + 2 -- tied hash */
-
- /*
- * per hash flags for flagged hashes
- */
-
--#define SHV_RESTRICTED 0x01
-+#define SHV_RESTRICTED 0x01
-
- /*
- * per key flags for flagged hashes
- */
-
--#define SHV_K_UTF8 0x01
--#define SHV_K_WASUTF8 0x02
--#define SHV_K_LOCKED 0x04
--#define SHV_K_ISSV 0x08
--#define SHV_K_PLACEHOLDER 0x10
-+#define SHV_K_UTF8 0x01
-+#define SHV_K_WASUTF8 0x02
-+#define SHV_K_LOCKED 0x04
-+#define SHV_K_ISSV 0x08
-+#define SHV_K_PLACEHOLDER 0x10
-
- /*
- * flags to allow blessing and/or tieing data the data we load
-@@ -882,7 +883,7 @@ static stcxt_t *Context_ptr = NULL;
- * Flags for SX_REGEXP.
- */
-
--#define SHR_U32_RE_LEN 0x01
-+#define SHR_U32_RE_LEN 0x01
-
- /*
- * Before 0.6, the magic string was "perl-store" (binary version number 0).
-@@ -898,10 +899,10 @@ static stcxt_t *Context_ptr = NULL;
- * spot errors if a file making use of 0.7-specific extensions is given to
- * 0.6 for retrieval, the binary version was moved to "2". And I'm introducing
- * a "minor" version, to better track this kind of evolution from now on.
-- *
-+ *
- */
- static const char old_magicstr[] = "perl-store"; /* Magic number before 0.6 */
--static const char magicstr[] = "pst0"; /* Used as a magic number */
-+static const char magicstr[] = "pst0"; /* Used as a magic number */
-
- #define MAGICSTR_BYTES 'p','s','t','0'
- #define OLDMAGICSTR_BYTES 'p','e','r','l','-','s','t','o','r','e'
-@@ -971,20 +972,20 @@ static const char byteorderstr[] = {BYTEORDER_BYTES, 0};
- static const char byteorderstr_56[] = {BYTEORDER_BYTES_56, 0};
- #endif
-
--#define STORABLE_BIN_MAJOR 2 /* Binary major "version" */
--#define STORABLE_BIN_MINOR 12 /* Binary minor "version" */
-+#define STORABLE_BIN_MAJOR 2 /* Binary major "version" */
-+#define STORABLE_BIN_MINOR 12 /* Binary minor "version" */
-
- #if !defined (SvVOK)
- /*
- * Perl 5.6.0-5.8.0 can do weak references, but not vstring magic.
- */
--#define STORABLE_BIN_WRITE_MINOR 8
-+#define STORABLE_BIN_WRITE_MINOR 8
- #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
-+#define STORABLE_BIN_WRITE_MINOR 11
- #else
--#define STORABLE_BIN_WRITE_MINOR 9
-+#define STORABLE_BIN_WRITE_MINOR 9
- #endif
-
- #if PERL_VERSION_LT(5,8,1)
-@@ -1002,16 +1003,16 @@ static const char byteorderstr_56[] = {BYTEORDER_BYTES_56, 0};
- * tagnum with cxt->tagnum++ along with this macro!
- * - samv 20Jan04
- */
--#define PUTMARK(x) \
-- STMT_START { \
-+#define PUTMARK(x) \
-+ STMT_START { \
- if (!cxt->fio) \
- MBUF_PUTC(x); \
- else if (PerlIO_putc(cxt->fio, x) == EOF) \
- return -1; \
- } STMT_END
-
--#define WRITE_I32(x) \
-- STMT_START { \
-+#define WRITE_I32(x) \
-+ STMT_START { \
- ASSERT(sizeof(x) == sizeof(I32), ("writing an I32")); \
- if (!cxt->fio) \
- MBUF_PUTINT(x); \
-@@ -1020,9 +1021,9 @@ static const char byteorderstr_56[] = {BYTEORDER_BYTES_56, 0};
- return -1; \
- } STMT_END
-
--#define WRITE_U64(x) \
-- STMT_START { \
-- ASSERT(sizeof(x) == sizeof(UV), ("writing an UV")); \
-+#define WRITE_U64(x) \
-+ STMT_START { \
-+ ASSERT(sizeof(x) == sizeof(UV), ("writing an UV")); \
- if (!cxt->fio) \
- MBUF_PUTLONG(x); \
- else if (PerlIO_write(cxt->fio, oL(&x), \
-@@ -1032,7 +1033,7 @@ static const char byteorderstr_56[] = {BYTEORDER_BYTES_56, 0};
-
- #ifdef HAS_HTONL
- #define WLEN(x) \
-- STMT_START { \
-+ STMT_START { \
- ASSERT(sizeof(x) == sizeof(int), ("WLEN writing an int")); \
- if (cxt->netorder) { \
- int y = (int) htonl(x); \
-@@ -1051,11 +1052,11 @@ static const char byteorderstr_56[] = {BYTEORDER_BYTES_56, 0};
-
- # ifdef HAS_U64
-
--#define W64LEN(x) \
-- STMT_START { \
-+#define W64LEN(x) \
-+ STMT_START { \
- ASSERT(sizeof(x) == 8, ("W64LEN writing a U64")); \
- if (cxt->netorder) { \
-- U32 buf[2]; \
-+ U32 buf[2]; \
- buf[1] = htonl(x & 0xffffffffUL); \
- buf[0] = htonl(x >> 32); \
- if (!cxt->fio) \
-@@ -1079,7 +1080,7 @@ static const char byteorderstr_56[] = {BYTEORDER_BYTES_56, 0};
- # endif
-
- #else
--#define WLEN(x) WRITE_I32(x)
-+#define WLEN(x) WRITE_I32(x)
- #ifdef HAS_U64
- #define W64LEN(x) WRITE_U64(x)
- #else
-@@ -1087,16 +1088,16 @@ static const char byteorderstr_56[] = {BYTEORDER_BYTES_56, 0};
- #endif
- #endif
-
--#define WRITE(x,y) \
-- STMT_START { \
-+#define WRITE(x,y) \
-+ STMT_START { \
- if (!cxt->fio) \
- MBUF_WRITE(x,y); \
- else if (PerlIO_write(cxt->fio, x, y) != (SSize_t)y) \
- return -1; \
- } STMT_END
-
--#define STORE_PV_LEN(pv, len, small, large) \
-- STMT_START { \
-+#define STORE_PV_LEN(pv, len, small, large) \
-+ STMT_START { \
- if (len <= LG_SCALAR) { \
- int ilen = (int) len; \
- unsigned char clen = (unsigned char) len; \
-@@ -1117,17 +1118,17 @@ static const char byteorderstr_56[] = {BYTEORDER_BYTES_56, 0};
- } \
- } STMT_END
-
--#define STORE_SCALAR(pv, len) STORE_PV_LEN(pv, len, SX_SCALAR, SX_LSCALAR)
-+#define STORE_SCALAR(pv, len) STORE_PV_LEN(pv, len, SX_SCALAR, SX_LSCALAR)
-
- /*
- * Store &PL_sv_undef in arrays without recursing through store(). We
- * actually use this to represent nonexistent elements, for historical
- * reasons.
- */
--#define STORE_SV_UNDEF() \
-+#define STORE_SV_UNDEF() \
- STMT_START { \
-- cxt->tagnum++; \
-- PUTMARK(SX_SV_UNDEF); \
-+ cxt->tagnum++; \
-+ PUTMARK(SX_SV_UNDEF); \
- } STMT_END
-
- /*
-@@ -1138,16 +1139,16 @@ static const char byteorderstr_56[] = {BYTEORDER_BYTES_56, 0};
- (cxt->fio ? PerlIO_getc(cxt->fio) \
- : (mptr >= mend ? EOF : (int) *mptr++))
-
--#define GETMARK(x) \
-- STMT_START { \
-+#define GETMARK(x) \
-+ STMT_START { \
- if (!cxt->fio) \
- MBUF_GETC(x); \
- else if ((int) (x = PerlIO_getc(cxt->fio)) == EOF) \
- return (SV *) 0; \
- } STMT_END
-
--#define READ_I32(x) \
-- STMT_START { \
-+#define READ_I32(x) \
-+ STMT_START { \
- ASSERT(sizeof(x) == sizeof(I32), ("reading an I32")); \
- oC(x); \
- if (!cxt->fio) \
-@@ -1159,7 +1160,7 @@ static const char byteorderstr_56[] = {BYTEORDER_BYTES_56, 0};
-
- #ifdef HAS_NTOHL
- #define RLEN(x) \
-- STMT_START { \
-+ STMT_START { \
- oC(x); \
- if (!cxt->fio) \
- MBUF_GETINT(x); \
-@@ -1173,16 +1174,16 @@ static const char byteorderstr_56[] = {BYTEORDER_BYTES_56, 0};
- #define RLEN(x) READ_I32(x)
- #endif
-
--#define READ(x,y) \
-- STMT_START { \
-- if (!cxt->fio) \
-+#define READ(x,y) \
-+ STMT_START { \
-+ if (!cxt->fio) \
- MBUF_READ(x, y); \
-- else if (PerlIO_read(cxt->fio, x, y) != (SSize_t)y) \
-+ else if (PerlIO_read(cxt->fio, x, y) != (SSize_t)y) \
- return (SV *) 0; \
- } STMT_END
-
- #define SAFEREAD(x,y,z) \
-- STMT_START { \
-+ STMT_START { \
- if (!cxt->fio) \
- MBUF_SAFEREAD(x,y,z); \
- else if (PerlIO_read(cxt->fio, x, y) != (SSize_t)y) { \
-@@ -1191,8 +1192,8 @@ static const char byteorderstr_56[] = {BYTEORDER_BYTES_56, 0};
- } \
- } STMT_END
-
--#define SAFEPVREAD(x,y,z) \
-- STMT_START { \
-+#define SAFEPVREAD(x,y,z) \
-+ STMT_START { \
- if (!cxt->fio) \
- MBUF_SAFEPVREAD(x,y,z); \
- else if (PerlIO_read(cxt->fio, x, y) != y) { \
-@@ -1210,21 +1211,21 @@ static const char byteorderstr_56[] = {BYTEORDER_BYTES_56, 0};
- # else
- static U32 Sntohl(U32 x) {
- return (((U8) x) << 24) + ((x & 0xFF00) << 8)
-- + ((x & 0xFF0000) >> 8) + ((x & 0xFF000000) >> 24);
-+ + ((x & 0xFF0000) >> 8) + ((x & 0xFF000000) >> 24);
- }
- # endif
-
- # define READ_U64(x) \
- STMT_START { \
-- ASSERT(sizeof(x) == 8, ("R64LEN reading a U64")); \
-- if (cxt->netorder) { \
-- U32 buf[2]; \
-- READ((void *)buf, sizeof(buf)); \
-- (x) = ((UV)Sntohl(buf[0]) << 32) + Sntohl(buf[1]); \
-- } \
-- else { \
-- READ(&(x), sizeof(x)); \
-- } \
-+ ASSERT(sizeof(x) == 8, ("R64LEN reading a U64")); \
-+ if (cxt->netorder) { \
-+ U32 buf[2]; \
-+ READ((void *)buf, sizeof(buf)); \
-+ (x) = ((UV)Sntohl(buf[0]) << 32) + Sntohl(buf[1]); \
-+ } \
-+ else { \
-+ READ(&(x), sizeof(x)); \
-+ } \
- } STMT_END
-
- #endif
-@@ -1253,8 +1254,8 @@ static U32 Sntohl(U32 x) {
- *
- * The _NN variants dont check for y being null
- */
--#define SEEN0_NN(y,i) \
-- STMT_START { \
-+#define SEEN0_NN(y,i) \
-+ STMT_START { \
- if (av_store(cxt->aseen, cxt->tagnum++, i ? (SV*)(y) \
- : SvREFCNT_inc(y)) == 0) \
- return (SV *) 0; \
-@@ -1263,22 +1264,22 @@ static U32 Sntohl(U32 x) {
- PTR2UV(y), (int)SvREFCNT(y)-1)); \
- } STMT_END
-
--#define SEEN0(y,i) \
-- STMT_START { \
-+#define SEEN0(y,i) \
-+ STMT_START { \
- if (!y) \
- return (SV *) 0; \
- SEEN0_NN(y,i); \
- } STMT_END
-
--#define SEEN_NN(y,stash,i) \
-- STMT_START { \
-+#define SEEN_NN(y,stash,i) \
-+ STMT_START { \
- SEEN0_NN(y,i); \
-- if (stash) \
-+ if (stash) \
- BLESS((SV *)(y), (HV *)(stash)); \
- } STMT_END
-
--#define SEEN(y,stash,i) \
-- STMT_START { \
-+#define SEEN(y,stash,i) \
-+ STMT_START { \
- if (!y) \
- return (SV *) 0; \
- SEEN_NN(y,stash, i); \
-@@ -1289,8 +1290,8 @@ static U32 Sntohl(U32 x) {
- * "A" magic is added before the sv_bless for overloaded classes, this avoids
- * an expensive call to S_reset_amagic in sv_bless.
- */
--#define BLESS(s,stash) \
-- STMT_START { \
-+#define BLESS(s,stash) \
-+ STMT_START { \
- SV *ref; \
- if (cxt->flags & FLAG_BLESS_OK) { \
- TRACEME(("blessing 0x%" UVxf " in %s", PTR2UV(s), \
-@@ -1318,7 +1319,7 @@ static U32 Sntohl(U32 x) {
-
- #if defined(USE_ITHREADS)
-
--#define STORE_HASH_SORT \
-+#define STORE_HASH_SORT \
- ENTER; { \
- PerlInterpreter *orig_perl = PERL_GET_CONTEXT; \
- SAVESPTR(orig_perl); \
-@@ -1328,7 +1329,7 @@ static U32 Sntohl(U32 x) {
-
- #else /* ! USE_ITHREADS */
-
--#define STORE_HASH_SORT \
-+#define STORE_HASH_SORT \
- qsort((char *) AvARRAY(av), len, sizeof(SV *), sortcmp);
-
- #endif /* USE_ITHREADS */
-@@ -1343,8 +1344,8 @@ static U32 Sntohl(U32 x) {
- static int store(pTHX_ stcxt_t *cxt, SV *sv);
- static SV *retrieve(pTHX_ stcxt_t *cxt, const char *cname);
-
--#define UNSEE() \
-- STMT_START { \
-+#define UNSEE() \
-+ STMT_START { \
- av_pop(cxt->aseen); \
- cxt->tagnum--; \
- } STMT_END
-@@ -1367,18 +1368,18 @@ static int store_blessed(pTHX_ stcxt_t *cxt, SV *sv, int type, HV *pkg);
- typedef int (*sv_store_t)(pTHX_ stcxt_t *cxt, SV *sv);
-
- static const sv_store_t sv_store[] = {
-- (sv_store_t)store_ref, /* svis_REF */
-- (sv_store_t)store_scalar, /* svis_SCALAR */
-- (sv_store_t)store_array, /* svis_ARRAY */
-- (sv_store_t)store_hash, /* svis_HASH */
-- (sv_store_t)store_tied, /* svis_TIED */
-+ (sv_store_t)store_ref, /* svis_REF */
-+ (sv_store_t)store_scalar, /* svis_SCALAR */
-+ (sv_store_t)store_array, /* svis_ARRAY */
-+ (sv_store_t)store_hash, /* svis_HASH */
-+ (sv_store_t)store_tied, /* svis_TIED */
- (sv_store_t)store_tied_item,/* svis_TIED_ITEM */
-- (sv_store_t)store_code, /* svis_CODE */
-- (sv_store_t)store_regexp, /* svis_REGEXP */
-- (sv_store_t)store_other, /* svis_OTHER */
-+ (sv_store_t)store_code, /* svis_CODE */
-+ (sv_store_t)store_regexp, /* svis_REGEXP */
-+ (sv_store_t)store_other, /* svis_OTHER */
- };
-
--#define SV_STORE(x) (*sv_store[x])
-+#define SV_STORE(x) (*sv_store[x])
-
- /*
- * Dynamic dispatching tables for SV retrieval.
-@@ -1417,43 +1418,43 @@ static int store_hentry(pTHX_ stcxt_t *cxt, HV* hv, UV i, HEK *hek, SV *val,
- typedef SV* (*sv_retrieve_t)(pTHX_ stcxt_t *cxt, const char *name);
-
- static const sv_retrieve_t sv_old_retrieve[] = {
-- 0, /* SX_OBJECT -- entry unused dynamically */
-- (sv_retrieve_t)retrieve_lscalar, /* SX_LSCALAR */
-- (sv_retrieve_t)old_retrieve_array, /* SX_ARRAY -- for pre-0.6 binaries */
-- (sv_retrieve_t)old_retrieve_hash, /* SX_HASH -- for pre-0.6 binaries */
-- (sv_retrieve_t)retrieve_ref, /* SX_REF */
-- (sv_retrieve_t)retrieve_undef, /* SX_UNDEF */
-- (sv_retrieve_t)retrieve_integer, /* SX_INTEGER */
-- (sv_retrieve_t)retrieve_double, /* SX_DOUBLE */
-- (sv_retrieve_t)retrieve_byte, /* SX_BYTE */
-- (sv_retrieve_t)retrieve_netint, /* SX_NETINT */
-- (sv_retrieve_t)retrieve_scalar, /* SX_SCALAR */
-- (sv_retrieve_t)retrieve_tied_array, /* SX_TIED_ARRAY */
-- (sv_retrieve_t)retrieve_tied_hash, /* SX_TIED_HASH */
-+ 0, /* SX_OBJECT -- entry unused dynamically */
-+ (sv_retrieve_t)retrieve_lscalar, /* SX_LSCALAR */
-+ (sv_retrieve_t)old_retrieve_array, /* SX_ARRAY -- for pre-0.6 binaries */
-+ (sv_retrieve_t)old_retrieve_hash, /* SX_HASH -- for pre-0.6 binaries */
-+ (sv_retrieve_t)retrieve_ref, /* SX_REF */
-+ (sv_retrieve_t)retrieve_undef, /* SX_UNDEF */
-+ (sv_retrieve_t)retrieve_integer, /* SX_INTEGER */
-+ (sv_retrieve_t)retrieve_double, /* SX_DOUBLE */
-+ (sv_retrieve_t)retrieve_byte, /* SX_BYTE */
-+ (sv_retrieve_t)retrieve_netint, /* SX_NETINT */
-+ (sv_retrieve_t)retrieve_scalar, /* SX_SCALAR */
-+ (sv_retrieve_t)retrieve_tied_array, /* SX_TIED_ARRAY */
-+ (sv_retrieve_t)retrieve_tied_hash, /* SX_TIED_HASH */
- (sv_retrieve_t)retrieve_tied_scalar,/* SX_TIED_SCALAR */
-- (sv_retrieve_t)retrieve_other, /* SX_SV_UNDEF not supported */
-- (sv_retrieve_t)retrieve_other, /* SX_SV_YES not supported */
-- (sv_retrieve_t)retrieve_other, /* SX_SV_NO not supported */
-- (sv_retrieve_t)retrieve_other, /* SX_BLESS not supported */
-- (sv_retrieve_t)retrieve_other, /* SX_IX_BLESS not supported */
-- (sv_retrieve_t)retrieve_other, /* SX_HOOK not supported */
-- (sv_retrieve_t)retrieve_other, /* SX_OVERLOADED not supported */
-- (sv_retrieve_t)retrieve_other, /* SX_TIED_KEY not supported */
-- (sv_retrieve_t)retrieve_other, /* SX_TIED_IDX not supported */
-- (sv_retrieve_t)retrieve_other, /* SX_UTF8STR not supported */
-- (sv_retrieve_t)retrieve_other, /* SX_LUTF8STR not supported */
-- (sv_retrieve_t)retrieve_other, /* SX_FLAG_HASH not supported */
-- (sv_retrieve_t)retrieve_other, /* SX_CODE not supported */
-- (sv_retrieve_t)retrieve_other, /* SX_WEAKREF not supported */
-- (sv_retrieve_t)retrieve_other, /* SX_WEAKOVERLOAD not supported */
-- (sv_retrieve_t)retrieve_other, /* SX_VSTRING not supported */
-- (sv_retrieve_t)retrieve_other, /* SX_LVSTRING not supported */
-- (sv_retrieve_t)retrieve_other, /* SX_SVUNDEF_ELEM not supported */
-- (sv_retrieve_t)retrieve_other, /* SX_REGEXP */
-- (sv_retrieve_t)retrieve_other, /* SX_LOBJECT not supported */
-- (sv_retrieve_t)retrieve_other, /* SX_BOOLEAN_TRUE not supported */
-- (sv_retrieve_t)retrieve_other, /* SX_BOOLEAN_FALSE not supported */
-- (sv_retrieve_t)retrieve_other, /* SX_LAST */
-+ (sv_retrieve_t)retrieve_other, /* SX_SV_UNDEF not supported */
-+ (sv_retrieve_t)retrieve_other, /* SX_SV_YES not supported */
-+ (sv_retrieve_t)retrieve_other, /* SX_SV_NO not supported */
-+ (sv_retrieve_t)retrieve_other, /* SX_BLESS not supported */
-+ (sv_retrieve_t)retrieve_other, /* SX_IX_BLESS not supported */
-+ (sv_retrieve_t)retrieve_other, /* SX_HOOK not supported */
-+ (sv_retrieve_t)retrieve_other, /* SX_OVERLOADED not supported */
-+ (sv_retrieve_t)retrieve_other, /* SX_TIED_KEY not supported */
-+ (sv_retrieve_t)retrieve_other, /* SX_TIED_IDX not supported */
-+ (sv_retrieve_t)retrieve_other, /* SX_UTF8STR not supported */
-+ (sv_retrieve_t)retrieve_other, /* SX_LUTF8STR not supported */
-+ (sv_retrieve_t)retrieve_other, /* SX_FLAG_HASH not supported */
-+ (sv_retrieve_t)retrieve_other, /* SX_CODE not supported */
-+ (sv_retrieve_t)retrieve_other, /* SX_WEAKREF not supported */
-+ (sv_retrieve_t)retrieve_other, /* SX_WEAKOVERLOAD not supported */
-+ (sv_retrieve_t)retrieve_other, /* SX_VSTRING not supported */
-+ (sv_retrieve_t)retrieve_other, /* SX_LVSTRING not supported */
-+ (sv_retrieve_t)retrieve_other, /* SX_SVUNDEF_ELEM not supported */
-+ (sv_retrieve_t)retrieve_other, /* SX_REGEXP */
-+ (sv_retrieve_t)retrieve_other, /* SX_LOBJECT not supported */
-+ (sv_retrieve_t)retrieve_other, /* SX_BOOLEAN_TRUE not supported */
-+ (sv_retrieve_t)retrieve_other, /* SX_BOOLEAN_FALSE not supported */
-+ (sv_retrieve_t)retrieve_other, /* SX_LAST */
- };
-
- static SV *retrieve_hook_common(pTHX_ stcxt_t *cxt, const char *cname, int large);
-@@ -1480,43 +1481,43 @@ static SV *retrieve_boolean_true(pTHX_ stcxt_t *cxt, const char *cname);
- static SV *retrieve_boolean_false(pTHX_ stcxt_t *cxt, const char *cname);
-
- static const sv_retrieve_t sv_retrieve[] = {
-- 0, /* SX_OBJECT -- entry unused dynamically */
-- (sv_retrieve_t)retrieve_lscalar, /* SX_LSCALAR */
-- (sv_retrieve_t)retrieve_array, /* SX_ARRAY */
-- (sv_retrieve_t)retrieve_hash, /* SX_HASH */
-- (sv_retrieve_t)retrieve_ref, /* SX_REF */
-- (sv_retrieve_t)retrieve_undef, /* SX_UNDEF */
-- (sv_retrieve_t)retrieve_integer, /* SX_INTEGER */
-- (sv_retrieve_t)retrieve_double, /* SX_DOUBLE */
-- (sv_retrieve_t)retrieve_byte, /* SX_BYTE */
-- (sv_retrieve_t)retrieve_netint, /* SX_NETINT */
-- (sv_retrieve_t)retrieve_scalar, /* SX_SCALAR */
-- (sv_retrieve_t)retrieve_tied_array, /* SX_TIED_ARRAY */
-- (sv_retrieve_t)retrieve_tied_hash, /* SX_TIED_HASH */
-+ 0, /* SX_OBJECT -- entry unused dynamically */
-+ (sv_retrieve_t)retrieve_lscalar, /* SX_LSCALAR */
-+ (sv_retrieve_t)retrieve_array, /* SX_ARRAY */
-+ (sv_retrieve_t)retrieve_hash, /* SX_HASH */
-+ (sv_retrieve_t)retrieve_ref, /* SX_REF */
-+ (sv_retrieve_t)retrieve_undef, /* SX_UNDEF */
-+ (sv_retrieve_t)retrieve_integer, /* SX_INTEGER */
-+ (sv_retrieve_t)retrieve_double, /* SX_DOUBLE */
-+ (sv_retrieve_t)retrieve_byte, /* SX_BYTE */
-+ (sv_retrieve_t)retrieve_netint, /* SX_NETINT */
-+ (sv_retrieve_t)retrieve_scalar, /* SX_SCALAR */
-+ (sv_retrieve_t)retrieve_tied_array, /* SX_TIED_ARRAY */
-+ (sv_retrieve_t)retrieve_tied_hash, /* SX_TIED_HASH */
- (sv_retrieve_t)retrieve_tied_scalar,/* SX_TIED_SCALAR */
-- (sv_retrieve_t)retrieve_sv_undef, /* SX_SV_UNDEF */
-- (sv_retrieve_t)retrieve_sv_yes, /* SX_SV_YES */
-- (sv_retrieve_t)retrieve_sv_no, /* SX_SV_NO */
-- (sv_retrieve_t)retrieve_blessed, /* SX_BLESS */
-+ (sv_retrieve_t)retrieve_sv_undef, /* SX_SV_UNDEF */
-+ (sv_retrieve_t)retrieve_sv_yes, /* SX_SV_YES */
-+ (sv_retrieve_t)retrieve_sv_no, /* SX_SV_NO */
-+ (sv_retrieve_t)retrieve_blessed, /* SX_BLESS */
- (sv_retrieve_t)retrieve_idx_blessed,/* SX_IX_BLESS */
-- (sv_retrieve_t)retrieve_hook, /* SX_HOOK */
-- (sv_retrieve_t)retrieve_overloaded, /* SX_OVERLOAD */
-- (sv_retrieve_t)retrieve_tied_key, /* SX_TIED_KEY */
-- (sv_retrieve_t)retrieve_tied_idx, /* SX_TIED_IDX */
-- (sv_retrieve_t)retrieve_utf8str, /* SX_UTF8STR */
-- (sv_retrieve_t)retrieve_lutf8str, /* SX_LUTF8STR */
-- (sv_retrieve_t)retrieve_flag_hash, /* SX_HASH */
-- (sv_retrieve_t)retrieve_code, /* SX_CODE */
-- (sv_retrieve_t)retrieve_weakref, /* SX_WEAKREF */
-+ (sv_retrieve_t)retrieve_hook, /* SX_HOOK */
-+ (sv_retrieve_t)retrieve_overloaded, /* SX_OVERLOAD */
-+ (sv_retrieve_t)retrieve_tied_key, /* SX_TIED_KEY */
-+ (sv_retrieve_t)retrieve_tied_idx, /* SX_TIED_IDX */
-+ (sv_retrieve_t)retrieve_utf8str, /* SX_UTF8STR */
-+ (sv_retrieve_t)retrieve_lutf8str, /* SX_LUTF8STR */
-+ (sv_retrieve_t)retrieve_flag_hash, /* SX_HASH */
-+ (sv_retrieve_t)retrieve_code, /* SX_CODE */
-+ (sv_retrieve_t)retrieve_weakref, /* SX_WEAKREF */
- (sv_retrieve_t)retrieve_weakoverloaded,/* SX_WEAKOVERLOAD */
-- (sv_retrieve_t)retrieve_vstring, /* SX_VSTRING */
-- (sv_retrieve_t)retrieve_lvstring, /* SX_LVSTRING */
-+ (sv_retrieve_t)retrieve_vstring, /* SX_VSTRING */
-+ (sv_retrieve_t)retrieve_lvstring, /* SX_LVSTRING */
- (sv_retrieve_t)retrieve_svundef_elem,/* SX_SVUNDEF_ELEM */
-- (sv_retrieve_t)retrieve_regexp, /* SX_REGEXP */
-- (sv_retrieve_t)retrieve_lobject, /* SX_LOBJECT */
-- (sv_retrieve_t)retrieve_boolean_true, /* SX_BOOLEAN_TRUE */
-- (sv_retrieve_t)retrieve_boolean_false, /* SX_BOOLEAN_FALSE */
-- (sv_retrieve_t)retrieve_other, /* SX_LAST */
-+ (sv_retrieve_t)retrieve_regexp, /* SX_REGEXP */
-+ (sv_retrieve_t)retrieve_lobject, /* SX_LOBJECT */
-+ (sv_retrieve_t)retrieve_boolean_true, /* SX_BOOLEAN_TRUE */
-+ (sv_retrieve_t)retrieve_boolean_false, /* SX_BOOLEAN_FALSE */
-+ (sv_retrieve_t)retrieve_other, /* SX_LAST */
- };
-
- #define RETRIEVE(c,x) ((x) >= SX_LAST ? retrieve_other : *(c)->retrieve_vtbl[x])
-@@ -1536,8 +1537,8 @@ static void init_perinterp(pTHX)
- {
- INIT_STCXT;
- INIT_TRACEME;
-- cxt->netorder = 0; /* true if network order used */
-- cxt->forgive_me = -1; /* whether to be forgiving... */
-+ cxt->netorder = 0; /* true if network order used */
-+ cxt->forgive_me = -1; /* whether to be forgiving... */
- cxt->accept_future_minor = -1; /* would otherwise occur too late */
- }
-
-@@ -1553,7 +1554,7 @@ static void reset_context(stcxt_t *cxt)
- cxt->s_dirty = 0;
- cxt->recur_sv = NULL;
- cxt->recur_depth = 0;
-- cxt->optype &= ~(ST_STORE|ST_RETRIEVE); /* Leave ST_CLONE alone */
-+ cxt->optype &= ~(ST_STORE|ST_RETRIEVE); /* Leave ST_CLONE alone */
- }
-
- /*
-@@ -1562,7 +1563,7 @@ static void reset_context(stcxt_t *cxt)
- * Initialize a new store context for real recursion.
- */
- static void init_store_context(pTHX_
-- stcxt_t *cxt,
-+ stcxt_t *cxt,
- PerlIO *f,
- int optype,
- int network_order)
-@@ -1572,15 +1573,15 @@ static void init_store_context(pTHX_
- TRACEME(("init_store_context"));
-
- cxt->netorder = network_order;
-- cxt->forgive_me = -1; /* Fetched from perl if needed */
-- cxt->deparse = -1; /* Idem */
-- cxt->eval = NULL; /* Idem */
-- cxt->canonical = -1; /* Idem */
-- cxt->tagnum = -1; /* Reset tag numbers */
-- cxt->classnum = -1; /* Reset class numbers */
-- cxt->fio = f; /* Where I/O are performed */
-- cxt->optype = optype; /* A store, or a deep clone */
-- cxt->entry = 1; /* No recursion yet */
-+ cxt->forgive_me = -1; /* Fetched from perl if needed */
-+ cxt->deparse = -1; /* Idem */
-+ cxt->eval = NULL; /* Idem */
-+ cxt->canonical = -1; /* Idem */
-+ cxt->tagnum = -1; /* Reset tag numbers */
-+ cxt->classnum = -1; /* Reset class numbers */
-+ cxt->fio = f; /* Where I/O are performed */
-+ cxt->optype = optype; /* A store, or a deep clone */
-+ cxt->entry = 1; /* No recursion yet */
-
- /*
- * The 'hseen' table is used to keep track of each SV stored and their
-@@ -1598,7 +1599,7 @@ static void init_store_context(pTHX_
- cxt->pseen = ptr_table_new();
- cxt->hseen = 0;
- #else
-- cxt->hseen = newHV(); /* Table where seen objects are stored */
-+ cxt->hseen = newHV(); /* Table where seen objects are stored */
- HvSHAREKEYS_off(cxt->hseen);
- #endif
- /*
-@@ -1617,9 +1618,9 @@ static void init_store_context(pTHX_
- *
- * It is reported fixed in 5.005, hence the #if.
- */
--#define HBUCKETS 4096 /* Buckets for %hseen */
-+#define HBUCKETS 4096 /* Buckets for %hseen */
- #ifndef USE_PTR_TABLE
-- HvMAX(cxt->hseen) = HBUCKETS - 1; /* keys %hseen = $HBUCKETS; */
-+ HvMAX(cxt->hseen) = HBUCKETS - 1; /* keys %hseen = $HBUCKETS; */
- #endif
-
- /*
-@@ -1630,9 +1631,9 @@ static void init_store_context(pTHX_
- * We turn the shared key optimization on.
- */
-
-- cxt->hclass = newHV(); /* Where seen classnames are stored */
-+ cxt->hclass = newHV(); /* Where seen classnames are stored */
-
-- HvMAX(cxt->hclass) = HBUCKETS - 1; /* keys %hclass = $HBUCKETS; */
-+ HvMAX(cxt->hclass) = HBUCKETS - 1; /* keys %hclass = $HBUCKETS; */
-
- /*
- * The 'hook' hash table is used to keep track of the references on
-@@ -1643,7 +1644,7 @@ static void init_store_context(pTHX_
- * hooks.
- */
-
-- cxt->hook = newHV(); /* Table where hooks are cached */
-+ cxt->hook = newHV(); /* Table where hooks are cached */
-
- /*
- * The 'hook_seen' array keeps track of all the SVs returned by
-@@ -1678,7 +1679,7 @@ static void clean_store_context(pTHX_ stcxt_t *cxt)
- #ifndef USE_PTR_TABLE
- if (cxt->hseen) {
- hv_iterinit(cxt->hseen);
-- while ((he = hv_iternext(cxt->hseen))) /* Extra () for -Wall */
-+ while ((he = hv_iternext(cxt->hseen))) /* Extra () for -Wall */
- HeVAL(he) = &PL_sv_undef;
- }
- #endif
-@@ -1696,7 +1697,7 @@ static void clean_store_context(pTHX_ stcxt_t *cxt)
- * some cases where this routine is called more than once, during
- * exceptional events. This was reported by Marc Lehmann when Storable
- * is executed from mod_perl, and the fix was suggested by him.
-- * -- RAM, 20/12/2000
-+ * -- RAM, 20/12/2000
- */
-
- #ifdef USE_PTR_TABLE
-@@ -1736,13 +1737,13 @@ static void clean_store_context(pTHX_ stcxt_t *cxt)
- sv_free((SV *) hook_seen);
- }
-
-- cxt->forgive_me = -1; /* Fetched from perl if needed */
-- cxt->deparse = -1; /* Idem */
-+ cxt->forgive_me = -1; /* Fetched from perl if needed */
-+ cxt->deparse = -1; /* Idem */
- if (cxt->eval) {
- SvREFCNT_dec(cxt->eval);
- }
-- cxt->eval = NULL; /* Idem */
-- cxt->canonical = -1; /* Idem */
-+ cxt->eval = NULL; /* Idem */
-+ cxt->canonical = -1; /* Idem */
-
- reset_context(cxt);
- }
-@@ -1753,7 +1754,7 @@ static void clean_store_context(pTHX_ stcxt_t *cxt)
- * Initialize a new retrieve context for real recursion.
- */
- static void init_retrieve_context(pTHX_
-- stcxt_t *cxt, int optype, int is_tainted)
-+ stcxt_t *cxt, int optype, int is_tainted)
- {
- INIT_TRACEME;
-
-@@ -1768,7 +1769,7 @@ static void init_retrieve_context(pTHX_
- * hooks.
- */
-
-- cxt->hook = newHV(); /* Caches STORABLE_thaw */
-+ cxt->hook = newHV(); /* Caches STORABLE_thaw */
-
- #ifdef USE_PTR_TABLE
- cxt->pseen = 0;
-@@ -1784,19 +1785,19 @@ static void init_retrieve_context(pTHX_
- cxt->hseen = (((void*)cxt->retrieve_vtbl == (void*)sv_old_retrieve)
- ? newHV() : 0);
-
-- cxt->aseen = newAV(); /* Where retrieved objects are kept */
-- cxt->where_is_undef = UNSET_NTAG_T; /* Special case for PL_sv_undef */
-- cxt->aclass = newAV(); /* Where seen classnames are kept */
-- cxt->tagnum = 0; /* Have to count objects... */
-- cxt->classnum = 0; /* ...and class names as well */
-+ cxt->aseen = newAV(); /* Where retrieved objects are kept */
-+ cxt->where_is_undef = UNSET_NTAG_T; /* Special case for PL_sv_undef */
-+ cxt->aclass = newAV(); /* Where seen classnames are kept */
-+ cxt->tagnum = 0; /* Have to count objects... */
-+ cxt->classnum = 0; /* ...and class names as well */
- cxt->optype = optype;
- cxt->s_tainted = is_tainted;
-- cxt->entry = 1; /* No recursion yet */
-+ cxt->entry = 1; /* No recursion yet */
- #ifndef HAS_RESTRICTED_HASHES
-- cxt->derestrict = -1; /* Fetched from perl if needed */
-+ cxt->derestrict = -1; /* Fetched from perl if needed */
- #endif
- #ifndef HAS_UTF8_ALL
-- cxt->use_bytes = -1; /* Fetched from perl if needed */
-+ cxt->use_bytes = -1; /* Fetched from perl if needed */
- #endif
- cxt->accept_future_minor = -1;/* Fetched from perl if needed */
- cxt->in_retrieve_overloaded = 0;
-@@ -1842,16 +1843,16 @@ static void clean_retrieve_context(pTHX_ stcxt_t *cxt)
- HV *hseen = cxt->hseen;
- cxt->hseen = 0;
- hv_undef(hseen);
-- sv_free((SV *) hseen); /* optional HV, for backward compat. */
-+ sv_free((SV *) hseen); /* optional HV, for backward compat. */
- }
-
- #ifndef HAS_RESTRICTED_HASHES
-- cxt->derestrict = -1; /* Fetched from perl if needed */
-+ cxt->derestrict = -1; /* Fetched from perl if needed */
- #endif
- #ifndef HAS_UTF8_ALL
-- cxt->use_bytes = -1; /* Fetched from perl if needed */
-+ cxt->use_bytes = -1; /* Fetched from perl if needed */
- #endif
-- cxt->accept_future_minor = -1; /* Fetched from perl if needed */
-+ cxt->accept_future_minor = -1; /* Fetched from perl if needed */
-
- cxt->in_retrieve_overloaded = 0;
- reset_context(cxt);
-@@ -1989,9 +1990,9 @@ static int last_op_in_netorder(pTHX)
- * nor its ancestors know about the method.
- */
- static SV *pkg_fetchmeth(pTHX_
-- HV *cache,
-- HV *pkg,
-- const char *method)
-+ HV *cache,
-+ HV *pkg,
-+ const char *method)
- {
- GV *gv;
- SV *sv;
-@@ -2030,9 +2031,9 @@ static SV *pkg_fetchmeth(pTHX_
- * Force cached value to be undef: hook ignored even if present.
- */
- static void pkg_hide(pTHX_
-- HV *cache,
-- HV *pkg,
-- const char *method)
-+ HV *cache,
-+ HV *pkg,
-+ const char *method)
- {
- const char *hvname = HvNAME_get(pkg);
- PERL_UNUSED_ARG(method);
-@@ -2046,9 +2047,9 @@ static void pkg_hide(pTHX_
- * Discard cached value: a whole fetch loop will be retried at next lookup.
- */
- static void pkg_uncache(pTHX_
-- HV *cache,
-- HV *pkg,
-- const char *method)
-+ HV *cache,
-+ HV *pkg,
-+ const char *method)
- {
- const char *hvname = HvNAME_get(pkg);
- PERL_UNUSED_ARG(method);
-@@ -2064,9 +2065,9 @@ static void pkg_uncache(pTHX_
- * know about the method.
- */
- static SV *pkg_can(pTHX_
-- HV *cache,
-- HV *pkg,
-- const char *method)
-+ HV *cache,
-+ HV *pkg,
-+ const char *method)
- {
- SV **svh;
- SV *sv;
-@@ -2099,7 +2100,7 @@ static SV *pkg_can(pTHX_
- }
-
- TRACEME(("not cached yet"));
-- return pkg_fetchmeth(aTHX_ cache, pkg, method); /* Fetch and cache */
-+ return pkg_fetchmeth(aTHX_ cache, pkg, method); /* Fetch and cache */
- }
-
- /*
-@@ -2109,11 +2110,11 @@ static SV *pkg_can(pTHX_
- * Propagates the single returned value if not called in void context.
- */
- static SV *scalar_call(pTHX_
-- SV *obj,
-- SV *hook,
-- int cloning,
-- AV *av,
-- I32 flags)
-+ SV *obj,
-+ SV *hook,
-+ int cloning,
-+ AV *av,
-+ I32 flags)
- {
- dSP;
- int count;
-@@ -2129,12 +2130,12 @@ static SV *scalar_call(pTHX_
-
- PUSHMARK(sp);
- XPUSHs(obj);
-- XPUSHs(sv_2mortal(newSViv(cloning))); /* Cloning flag */
-+ XPUSHs(sv_2mortal(newSViv(cloning))); /* Cloning flag */
- if (av) {
- SV **ary = AvARRAY(av);
- SSize_t cnt = AvFILLp(av) + 1;
- SSize_t i;
-- XPUSHs(ary[0]); /* Frozen string */
-+ XPUSHs(ary[0]); /* Frozen string */
- for (i = 1; i < cnt; i++) {
- TRACEME(("pushing arg #%d (0x%" UVxf ")...",
- (int)i, PTR2UV(ary[i])));
-@@ -2144,7 +2145,7 @@ static SV *scalar_call(pTHX_
- PUTBACK;
-
- TRACEME(("calling..."));
-- count = call_sv(hook, flags); /* Go back to Perl code */
-+ count = call_sv(hook, flags); /* Go back to Perl code */
- TRACEME(("count = %d", count));
-
- SPAGAIN;
-@@ -2168,9 +2169,9 @@ static SV *scalar_call(pTHX_
- * Returns the list of returned values in an array.
- */
- static AV *array_call(pTHX_
-- SV *obj,
-- SV *hook,
-- int cloning)
-+ SV *obj,
-+ SV *hook,
-+ int cloning)
- {
- dSP;
- int count;
-@@ -2186,11 +2187,11 @@ static AV *array_call(pTHX_
- SAVETMPS;
-
- PUSHMARK(sp);
-- XPUSHs(obj); /* Target object */
-- XPUSHs(sv_2mortal(newSViv(cloning))); /* Cloning flag */
-+ XPUSHs(obj); /* Target object */
-+ XPUSHs(sv_2mortal(newSViv(cloning))); /* Cloning flag */
- PUTBACK;
-
-- count = call_sv(hook, G_LIST); /* Go back to Perl code */
-+ count = call_sv(hook, G_LIST); /* Go back to Perl code */
-
- SPAGAIN;
-
-@@ -2281,10 +2282,10 @@ cleanup_recursive_data(pTHX_ SV* sv) {
- * Return true if the class was known, false if the ID was just generated.
- */
- static int known_class(pTHX_
-- stcxt_t *cxt,
-- char *name, /* Class name */
-- int len, /* Name length */
-- I32 *classnum)
-+ stcxt_t *cxt,
-+ char *name, /* Class name */
-+ int len, /* Name length */
-+ I32 *classnum)
- {
- SV **svh;
- HV *hclass = cxt->hclass;
-@@ -2394,7 +2395,7 @@ static int store_scalar(pTHX_ stcxt_t *cxt, SV *sv)
- IV iv;
- char *pv;
- STRLEN len;
-- U32 flags = SvFLAGS(sv); /* "cc -O" may put it in register */
-+ U32 flags = SvFLAGS(sv); /* "cc -O" may put it in register */
-
- TRACEME(("store_scalar (0x%" UVxf ")", PTR2UV(sv)));
-
-@@ -2404,7 +2405,7 @@ static int store_scalar(pTHX_ stcxt_t *cxt, SV *sv)
- * sv->sv_flags each time we wish to check the flags.
- */
-
-- if (!(flags & SVf_OK)) { /* !SvOK(sv) */
-+ if (!(flags & SVf_OK)) { /* !SvOK(sv) */
- if (sv == &PL_sv_undef) {
- TRACEME(("immortal undef"));
- PUTMARK(SX_SV_UNDEF);
-@@ -2454,8 +2455,8 @@ static int store_scalar(pTHX_ stcxt_t *cxt, SV *sv)
- TRACEME(("immortal no"));
- PUTMARK(SX_SV_NO);
- } else {
-- pv = SvPV(sv, len); /* We know it's SvPOK */
-- goto string; /* Share code below */
-+ pv = SvPV(sv, len); /* We know it's SvPOK */
-+ goto string; /* Share code below */
- }
- #ifdef SvIsBOOL
- } else if (SvIsBOOL(sv)) {
-@@ -2491,7 +2492,7 @@ static int store_scalar(pTHX_ stcxt_t *cxt, SV *sv)
- #ifdef SVf_IVisUV
- /* Need to do this out here, else 0xFFFFFFFF becomes iv of -1
- * (for example) and that ends up in the optimised small integer
-- * case.
-+ * case.
- */
- if ((flags & SVf_IVisUV) && SvUV(sv) > IV_MAX) {
- TRACEME(("large unsigned integer as string, value = %" UVuf,
-@@ -2556,21 +2557,21 @@ static int store_scalar(pTHX_ stcxt_t *cxt, SV *sv)
- */
- if (nv.nv == (NV) (iv = I_V(nv.nv))) {
- TRACEME(("double %" NVff " is actually integer %" IVdf, nv, iv));
-- goto integer; /* Share code above */
-+ goto integer; /* Share code above */
- }
- #else
-
- SvIV_please(sv);
- if (SvIOK_notUV(sv)) {
- iv = SvIV(sv);
-- goto integer; /* Share code above */
-+ goto integer; /* Share code above */
- }
- nv.nv = SvNV(sv);
- #endif
-
- if (cxt->netorder) {
- TRACEME(("double %" NVff " stored as string", nv.nv));
-- goto string_readlen; /* Share code below */
-+ goto string_readlen; /* Share code below */
- }
- #if NV_PADDING
- Zero(nv.bytes + NVSIZE - NV_PADDING, NV_PADDING, char);
-@@ -2583,7 +2584,8 @@ static int store_scalar(pTHX_ stcxt_t *cxt, SV *sv)
-
- } else if (flags & (SVp_POK | SVp_NOK | SVp_IOK)) {
- #ifdef SvVOK
-- MAGIC *mg;
-+ const char *vstr_pv;
-+ STRLEN vstr_len;
- #endif
- UV wlen; /* For 64-bit machines */
-
-@@ -2597,18 +2599,14 @@ static int store_scalar(pTHX_ stcxt_t *cxt, SV *sv)
- string:
-
- #ifdef SvVOK
-- if (SvMAGICAL(sv) && (mg = mg_find(sv, 'V'))) {
-- /* The macro passes this by address, not value, and a lot of
-- called code assumes that it's 32 bits without checking. */
-- const SSize_t len = mg->mg_len;
-+ if ((vstr_pv = SvVSTRING(sv, vstr_len))) {
- /* we no longer accept vstrings over I32_SIZE-1, so don't emit
- them, also, older Storables handle them badly.
- */
-- if (len >= I32_MAX) {
-+ if (vstr_len >= I32_MAX) {
- CROAK(("vstring too large to freeze"));
- }
-- STORE_PV_LEN((const char *)mg->mg_ptr,
-- len, SX_VSTRING, SX_LVSTRING);
-+ STORE_PV_LEN(vstr_pv, vstr_len, SX_VSTRING, SX_LVSTRING);
- }
- #endif
-
-@@ -2625,7 +2623,7 @@ static int store_scalar(pTHX_ stcxt_t *cxt, SV *sv)
- sv_reftype(sv, FALSE),
- PTR2UV(sv)));
- }
-- return 0; /* Ok, no recursion on scalars */
-+ return 0; /* Ok, no recursion on scalars */
- }
-
- /*
-@@ -2704,7 +2702,7 @@ static int store_array(pTHX_ stcxt_t *cxt, AV *av)
- }
- #endif
- TRACEME(("(#%d) item", (int)i));
-- if ((ret = store(aTHX_ cxt, *sav))) /* Extra () for -Wall */
-+ if ((ret = store(aTHX_ cxt, *sav))) /* Extra () for -Wall */
- return ret;
- }
-
-@@ -2778,7 +2776,7 @@ static int store_hash(pTHX_ stcxt_t *cxt, HV *hv)
- unsigned char hash_flags = (SvREADONLY(hv) ? SHV_RESTRICTED : 0);
- SV * const recur_sv = cxt->recur_sv;
-
-- /*
-+ /*
- * Signal hash by emitting SX_HASH, followed by the table length.
- * Max number of keys per perl version:
- * IV - 5.12
-@@ -2788,7 +2786,7 @@ static int store_hash(pTHX_ stcxt_t *cxt, HV *hv)
- */
-
- if (len > 0x7fffffffu) { /* keys > I32_MAX */
-- /*
-+ /*
- * Large hash: SX_LOBJECT type hashflags? U64 data
- *
- * Stupid limitation:
-@@ -2870,7 +2868,7 @@ static int store_hash(pTHX_ stcxt_t *cxt, HV *hv)
- && (cxt->canonical =
- (SvTRUE(get_sv("Storable::canonical", GV_ADD))
- ? 1 : 0))))
-- ) {
-+ ) {
- /*
- * Storing in order, sorted by key.
- * Run through the hash, building up an array of keys in a
-@@ -2939,7 +2937,7 @@ static int store_hash(pTHX_ stcxt_t *cxt, HV *hv)
-
- TRACEME(("(#%d) value 0x%" UVxf, (int)i, PTR2UV(val)));
-
-- if ((ret = store(aTHX_ cxt, val))) /* Extra () for -Wall, grr... */
-+ if ((ret = store(aTHX_ cxt, val))) /* Extra () for -Wall, grr... */
- goto out;
-
- /*
-@@ -3004,7 +3002,7 @@ static int store_hash(pTHX_ stcxt_t *cxt, HV *hv)
- Safefree (keyval);
- }
-
-- /*
-+ /*
- * Free up the temporary array
- */
-
-@@ -3027,7 +3025,7 @@ static int store_hash(pTHX_ stcxt_t *cxt, HV *hv)
- SV *val = (he ? hv_iterval(hv, he) : 0);
-
- if (val == 0)
-- return 1; /* Internal error, not I/O error */
-+ return 1; /* Internal error, not I/O error */
-
- if ((ret = store_hentry(aTHX_ cxt, hv, i, HeKEY_hek(he), val, hash_flags)))
- goto out;
-@@ -3042,14 +3040,14 @@ static int store_hash(pTHX_ stcxt_t *cxt, HV *hv)
- if (cxt->max_recur_depth_hash != -1 && recur_sv != (SV*)hv && cxt->recur_depth > 0) {
- --cxt->recur_depth;
- }
-- HvRITER_set(hv, riter); /* Restore hash iterator state */
-+ HvRITER_set(hv, riter); /* Restore hash iterator state */
- HvEITER_set(hv, eiter);
-
- return ret;
- }
-
- static int store_hentry(pTHX_
-- stcxt_t *cxt, HV* hv, UV i, HEK *hek, SV *val, unsigned char hash_flags)
-+ stcxt_t *cxt, HV* hv, UV i, HEK *hek, SV *val, unsigned char hash_flags)
- {
- int ret = 0;
- int flagged_hash = ((SvREADONLY(hv)
-@@ -3221,7 +3219,7 @@ static int store_code(pTHX_ stcxt_t *cxt, CV *cv)
- (cxt->deparse < 0 &&
- !(cxt->deparse =
- SvTRUE(get_sv("Storable::Deparse", GV_ADD)) ? 1 : 0))
-- ) {
-+ ) {
- return store_other(aTHX_ cxt, (SV*)cv);
- }
-
-@@ -3276,7 +3274,7 @@ static int store_code(pTHX_ stcxt_t *cxt, CV *cv)
- CROAK(("The result of B::Deparse::coderef2text was empty - maybe you're trying to serialize an XS function?\n"));
- }
-
-- /*
-+ /*
- * Signal code by emitting SX_CODE.
- */
-
-@@ -3366,7 +3364,7 @@ static int store_regexp(pTHX_ stcxt_t *cxt, SV *sv) {
- if (re_len > 0xFF) {
- op_flags |= SHR_U32_RE_LEN;
- }
--
-+
- PUTMARK(SX_REGEXP);
- PUTMARK(op_flags);
- if (op_flags & SHR_U32_RE_LEN) {
-@@ -3412,13 +3410,13 @@ static int store_tied(pTHX_ stcxt_t *cxt, SV *sv)
-
- if (svt == SVt_PVHV) {
- TRACEME(("tied hash"));
-- PUTMARK(SX_TIED_HASH); /* Introduces tied hash */
-+ PUTMARK(SX_TIED_HASH); /* Introduces tied hash */
- } else if (svt == SVt_PVAV) {
- TRACEME(("tied array"));
-- PUTMARK(SX_TIED_ARRAY); /* Introduces tied array */
-+ PUTMARK(SX_TIED_ARRAY); /* Introduces tied array */
- } else {
- TRACEME(("tied scalar"));
-- PUTMARK(SX_TIED_SCALAR); /* Introduces tied scalar */
-+ PUTMARK(SX_TIED_SCALAR); /* Introduces tied scalar */
- mtype = 'q';
- }
-
-@@ -3480,7 +3478,7 @@ static int store_tied_item(pTHX_ stcxt_t *cxt, SV *sv)
- PUTMARK(SX_TIED_KEY);
- TRACEME(("store_tied_item: storing OBJ 0x%" UVxf, PTR2UV(mg->mg_obj)));
-
-- if ((ret = store(aTHX_ cxt, mg->mg_obj))) /* Extra () for -Wall, grr... */
-+ if ((ret = store(aTHX_ cxt, mg->mg_obj))) /* Extra () for -Wall, grr... */
- return ret;
-
- TRACEME(("store_tied_item: storing PTR 0x%" UVxf, PTR2UV(mg->mg_ptr)));
-@@ -3494,7 +3492,7 @@ static int store_tied_item(pTHX_ stcxt_t *cxt, SV *sv)
- PUTMARK(SX_TIED_IDX);
- TRACEME(("store_tied_item: storing OBJ 0x%" UVxf, PTR2UV(mg->mg_obj)));
-
-- if ((ret = store(aTHX_ cxt, mg->mg_obj))) /* Idem, for -Wall */
-+ if ((ret = store(aTHX_ cxt, mg->mg_obj))) /* Idem, for -Wall */
- return ret;
-
- TRACEME(("store_tied_item: storing IDX %d", (int)idx));
-@@ -3508,7 +3506,7 @@ static int store_tied_item(pTHX_ stcxt_t *cxt, SV *sv)
- }
-
- /*
-- * store_hook -- dispatched manually, not via sv_store[]
-+ * store_hook -- dispatched manually, not via sv_store[]
- *
- * The blessed SV is serialized by a hook.
- *
-@@ -3525,7 +3523,7 @@ static int store_tied_item(pTHX_ stcxt_t *cxt, SV *sv)
- *
- * and when the <index> form is used (classname already seen), the "large
- * classname" bit in <flags> indicates how large the <index> is.
-- *
-+ *
- * The serialized string returned by the hook is of length <len2> and comes
- * next. It is an opaque string for us.
- *
-@@ -3566,16 +3564,16 @@ static int store_hook(
- SV *ref;
- AV *av;
- SV **ary;
-- IV count; /* really len3 + 1 */
-+ IV count; /* really len3 + 1 */
- unsigned char flags;
- char *pv;
- int i;
-- int recursed = 0; /* counts recursion */
-- int obj_type; /* object type, on 2 bits */
-+ int recursed = 0; /* counts recursion */
-+ int obj_type; /* object type, on 2 bits */
- I32 classnum;
- int ret;
- int clone = cxt->optype & ST_CLONE;
-- char mtype = '\0'; /* for blessed ref to tied structures */
-+ char mtype = '\0'; /* for blessed ref to tied structures */
- unsigned char eflags = '\0'; /* used when object type is SHT_EXTRA */
- #ifdef HAS_U64
- int need_large_oids = 0;
-@@ -3607,9 +3605,9 @@ static int store_hook(
- * Produced by a blessed ref to a tied data structure, $o in the
- * following Perl code.
- *
-- * my %h;
-+ * my %h;
- * tie %h, 'FOO';
-- * my $o = bless \%h, 'BAR';
-+ * my $o = bless \%h, 'BAR';
- *
- * Signal the tie-ing magic by setting the object type as SHT_EXTRA
- * (since we have only 2 bits in <flags> to store the type), and an
-@@ -3662,9 +3660,9 @@ static int store_hook(
-
- TRACEME(("about to call STORABLE_freeze on class %s", classname));
-
-- ref = newRV_inc(sv); /* Temporary reference */
-+ ref = newRV_inc(sv); /* Temporary reference */
- av = array_call(aTHX_ ref, hook, clone); /* @a = $object->STORABLE_freeze($c) */
-- SvREFCNT_dec(ref); /* Reclaim temporary reference */
-+ SvREFCNT_dec(ref); /* Reclaim temporary reference */
-
- count = AvFILLp(av) + 1;
- TRACEME(("store_hook, array holds %" IVdf " items", count));
-@@ -3709,7 +3707,7 @@ static int store_hook(
- pv = SvPV(ary[0], len2);
- /* We can't use pkg_can here because it only caches one method per
- * package */
-- {
-+ {
- GV* gv = gv_fetchmethod_autoload(pkg, "STORABLE_attach", FALSE);
- if (gv && isGV(gv)) {
- if (count > 1)
-@@ -3720,7 +3718,7 @@ static int store_hook(
-
- #ifdef HAS_U64
- if (count > I32_MAX) {
-- CROAK(("Too many references returned by STORABLE_freeze()"));
-+ CROAK(("Too many references returned by STORABLE_freeze()"));
- }
- #endif
-
-@@ -3751,7 +3749,7 @@ static int store_hook(
- if (!SvROK(rsv))
- CROAK(("Item #%d returned by STORABLE_freeze "
- "for %s is not a reference", (int)i, classname));
-- xsv = SvRV(rsv); /* Follow ref to know what to look for */
-+ xsv = SvRV(rsv); /* Follow ref to know what to look for */
-
- /*
- * Look in hseen and see if we have a tag already.
-@@ -3764,10 +3762,10 @@ static int store_hook(
- safely store a tag zero. So for ptr_tables we store tag+1
- */
- if ((fake_tag = (char *)ptr_table_fetch(cxt->pseen, xsv)))
-- goto sv_seen; /* Avoid moving code too far to the right */
-+ goto sv_seen; /* Avoid moving code too far to the right */
- #else
- if ((svh = hv_fetch(cxt->hseen, (char *) &xsv, sizeof(xsv), FALSE)))
-- goto sv_seen; /* Avoid moving code too far to the right */
-+ goto sv_seen; /* Avoid moving code too far to the right */
- #endif
-
- TRACEME(("listed object %d at 0x%" UVxf " is unknown", i-1,
-@@ -3790,14 +3788,14 @@ static int store_hook(
- if (len2 > INT32_MAX)
- PUTMARK(SX_LOBJECT);
- #endif
-- PUTMARK(SX_HOOK);
-+ PUTMARK(SX_HOOK);
- PUTMARK(flags);
- if (obj_type == SHT_EXTRA)
- PUTMARK(eflags);
- } else
- PUTMARK(flags);
-
-- if ((ret = store(aTHX_ cxt, xsv))) /* Given by hook for us to store */
-+ if ((ret = store(aTHX_ cxt, xsv))) /* Given by hook for us to store */
- return ret;
-
- #ifdef USE_PTR_TABLE
-@@ -3834,7 +3832,7 @@ static int store_hook(
- */
-
- ASSERT(SvREFCNT(xsv) > 1, ("SV will survive disposal of its REF"));
-- SvREFCNT_dec(rsv); /* Dispose of reference */
-+ SvREFCNT_dec(rsv); /* Dispose of reference */
-
- /*
- * Replace entry with its tag (not a real SV, so no refcnt increment)
-@@ -3866,7 +3864,7 @@ static int store_hook(
- check_done:
- if (!known_class(aTHX_ cxt, classname, len, &classnum)) {
- TRACEME(("first time we see class %s, ID = %d", classname, (int)classnum));
-- classnum = -1; /* Mark: we must store classname */
-+ classnum = -1; /* Mark: we must store classname */
- } else {
- TRACEME(("already seen class %s, ID = %d", classname, (int)classnum));
- }
-@@ -3908,9 +3906,9 @@ static int store_hook(
- if (!recursed) {
- #ifdef HAS_U64
- if (len2 > INT32_MAX)
-- PUTMARK(SX_LOBJECT);
-+ PUTMARK(SX_LOBJECT);
- #endif
-- PUTMARK(SX_HOOK);
-+ PUTMARK(SX_HOOK);
- PUTMARK(flags);
- if (obj_type == SHT_EXTRA)
- PUTMARK(eflags);
-@@ -3932,7 +3930,7 @@ static int store_hook(
- unsigned char clen = (unsigned char) len;
- PUTMARK(clen);
- }
-- WRITE(classname, len); /* Final \0 is omitted */
-+ WRITE(classname, len); /* Final \0 is omitted */
- }
-
- /* <len2> <frozen-str> */
-@@ -3943,26 +3941,26 @@ static int store_hook(
- else
- #endif
- if (flags & SHF_LARGE_STRLEN) {
-- U32 wlen2 = len2; /* STRLEN might be 8 bytes */
-- WLEN(wlen2); /* Must write an I32 for 64-bit machines */
-+ U32 wlen2 = len2; /* STRLEN might be 8 bytes */
-+ WLEN(wlen2); /* Must write an I32 for 64-bit machines */
- } else {
- unsigned char clen = (unsigned char) len2;
- PUTMARK(clen);
- }
- if (len2)
-- WRITE(pv, (SSize_t)len2); /* Final \0 is omitted */
-+ WRITE(pv, (SSize_t)len2); /* Final \0 is omitted */
-
- /* [<len3> <object-IDs>] */
- if (flags & SHF_HAS_LIST) {
- int len3 = count - 1;
- if (flags & SHF_LARGE_LISTLEN) {
- #ifdef HAS_U64
-- int tlen3 = need_large_oids ? -len3 : len3;
-- WLEN(tlen3);
-+ int tlen3 = need_large_oids ? -len3 : len3;
-+ WLEN(tlen3);
- #else
- WLEN(len3);
- #endif
-- }
-+ }
- else {
- unsigned char clen = (unsigned char) len3;
- PUTMARK(clen);
-@@ -3998,7 +3996,7 @@ static int store_hook(
- */
-
- if (count > 1)
-- AvFILLp(av) = 0; /* Cheat, nothing after 0 interests us */
-+ AvFILLp(av) = 0; /* Cheat, nothing after 0 interests us */
- av_undef(av);
- sv_free((SV *) av);
-
-@@ -4030,7 +4028,7 @@ static int store_hook(
- }
-
- /*
-- * store_blessed -- dispatched manually, not via sv_store[]
-+ * store_blessed -- dispatched manually, not via sv_store[]
- *
- * Check whether there is a STORABLE_xxx hook defined in the class or in one
- * of its ancestors. If there is, then redispatch to store_hook();
-@@ -4114,9 +4112,9 @@ static int store_blessed(
- } else {
- unsigned char flag = (unsigned char) 0x80;
- PUTMARK(flag);
-- WLEN(len); /* Don't BER-encode, this should be rare */
-+ WLEN(len); /* Don't BER-encode, this should be rare */
- }
-- WRITE(classname, len); /* Final \0 is omitted */
-+ WRITE(classname, len); /* Final \0 is omitted */
- }
-
- /*
-@@ -4152,7 +4150,7 @@ static int store_other(pTHX_ stcxt_t *cxt, SV *sv)
- (cxt->forgive_me < 0 &&
- !(cxt->forgive_me = SvTRUE
- (get_sv("Storable::forgive_me", GV_ADD)) ? 1 : 0))
-- )
-+ )
- CROAK(("Can't store %s items", sv_reftype(sv, FALSE)));
-
- warn("Can't store item %s(0x%" UVxf ")",
-@@ -4219,12 +4217,12 @@ static int sv_type(pTHX_ SV *sv)
- case SVt_PVMG:
- #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)) {
-- return svis_REGEXP;
-- }
-+ == (SVs_OBJECT|BFD_Svs_SMG_OR_RMG)
-+ && mg_find(sv, PERL_MAGIC_qr)) {
-+ return svis_REGEXP;
-+ }
- #endif
-- case SVt_PVLV: /* Workaround for perl5.004_04 "LVALUE" bug */
-+ case SVt_PVLV: /* Workaround for perl5.004_04 "LVALUE" bug */
- if ((SvFLAGS(sv) & (SVs_GMG|SVs_SMG|SVs_RMG)) ==
- (SVs_GMG|SVs_SMG|SVs_RMG) &&
- (mg_find(sv, 'p')))
-@@ -4249,7 +4247,7 @@ static int sv_type(pTHX_ SV *sv)
- case SVt_PVCV:
- return svis_CODE;
- #if PERL_VERSION_GE(5,9,0)
-- /* case SVt_INVLIST: */
-+ /* case SVt_INVLIST: */
- #endif
- #if PERL_VERSION_GE(5,11,0)
- case SVt_REGEXP:
-@@ -4293,7 +4291,7 @@ static int store(pTHX_ stcxt_t *cxt, SV *sv)
- * real pointer, rather a tag number (watch the insertion code below).
- * That means it probably safe to assume it is well under the 32-bit
- * limit, and makes the truncation safe.
-- * -- RAM, 14/09/1999
-+ * -- RAM, 14/09/1999
- */
-
- #ifdef USE_PTR_TABLE
-@@ -4302,8 +4300,8 @@ static int store(pTHX_ stcxt_t *cxt, SV *sv)
- svh = hv_fetch(hseen, (char *) &sv, sizeof(sv), FALSE);
- #endif
- if (svh) {
-- ntag_t tagval;
-- if (sv == &PL_sv_undef) {
-+ ntag_t tagval;
-+ if (sv == &PL_sv_undef) {
- /* We have seen PL_sv_undef before, but fake it as
- if we have not.
-
-@@ -4334,9 +4332,9 @@ static int store(pTHX_ stcxt_t *cxt, SV *sv)
- }
-
- #ifdef USE_PTR_TABLE
-- tagval = PTR2TAG(((char *)svh)-1);
-+ tagval = PTR2TAG(((char *)svh)-1);
- #else
-- tagval = PTR2TAG(*svh);
-+ tagval = PTR2TAG(*svh);
- #endif
- #ifdef HAS_U64
-
-@@ -4345,30 +4343,30 @@ static int store(pTHX_ stcxt_t *cxt, SV *sv)
- Ensure only a newer Storable will be able to parse this tag id
- if it's over the 2G mark.
- */
-- if (tagval > I32_MAX) {
-+ if (tagval > I32_MAX) {
-
-- TRACEME(("object 0x%" UVxf " seen as #%" UVuf, PTR2UV(sv),
-- (UV)tagval));
-+ TRACEME(("object 0x%" UVxf " seen as #%" UVuf, PTR2UV(sv),
-+ (UV)tagval));
-
-- PUTMARK(SX_LOBJECT);
-- PUTMARK(SX_OBJECT);
-- W64LEN(tagval);
-- return 0;
-- }
-- else
-+ PUTMARK(SX_LOBJECT);
-+ PUTMARK(SX_OBJECT);
-+ W64LEN(tagval);
-+ return 0;
-+ }
-+ else
- #endif
-- {
-- I32 ltagval;
-+ {
-+ I32 ltagval;
-
-- ltagval = htonl((I32)tagval);
-+ ltagval = htonl((I32)tagval);
-
-- TRACEME(("object 0x%" UVxf " seen as #%d", PTR2UV(sv),
-- ntohl(ltagval)));
-+ TRACEME(("object 0x%" UVxf " seen as #%d", PTR2UV(sv),
-+ ntohl(ltagval)));
-
-- PUTMARK(SX_OBJECT);
-- WRITE_I32(ltagval);
-- return 0;
-- }
-+ PUTMARK(SX_OBJECT);
-+ WRITE_I32(ltagval);
-+ return 0;
-+ }
- }
-
- /*
-@@ -4523,7 +4521,7 @@ static int magic_write(pTHX_ stcxt_t *cxt)
- * dclone() and store() is performed to memory.
- */
- static int do_store(pTHX_
-- PerlIO *f,
-+ PerlIO *f,
- SV *sv,
- int optype,
- int network_order,
-@@ -4573,9 +4571,9 @@ static int do_store(pTHX_
-
- if (!SvROK(sv))
- CROAK(("Not a reference"));
-- sv = SvRV(sv); /* So follow it to know what to store */
-+ sv = SvRV(sv); /* So follow it to know what to store */
-
-- /*
-+ /*
- * If we're going to store to memory, reset the buffer.
- */
-
-@@ -4588,8 +4586,8 @@ static int do_store(pTHX_
-
- init_store_context(aTHX_ cxt, f, optype, network_order);
-
-- if (-1 == magic_write(aTHX_ cxt)) /* Emit magic and ILP info */
-- return 0; /* Error */
-+ if (-1 == magic_write(aTHX_ cxt)) /* Emit magic and ILP info */
-+ return 0; /* Error */
-
- /*
- * Recursively store object...
-@@ -4597,7 +4595,7 @@ static int do_store(pTHX_
-
- ASSERT(is_storing(aTHX), ("within store operation"));
-
-- status = store(aTHX_ cxt, sv); /* Just do it! */
-+ status = store(aTHX_ cxt, sv); /* Just do it! */
-
- /*
- * If they asked for a memory store and they provided an SV pointer,
-@@ -4669,7 +4667,7 @@ static SV *retrieve_other(pTHX_ stcxt_t *cxt, const char *cname)
- if (
- cxt->ver_major != STORABLE_BIN_MAJOR &&
- cxt->ver_minor != STORABLE_BIN_MINOR
-- ) {
-+ ) {
- CROAK(("Corrupted storable %s (binary v%d.%d), current is v%d.%d",
- cxt->fio ? "file" : "string",
- cxt->ver_major, cxt->ver_minor,
-@@ -4680,7 +4678,7 @@ static SV *retrieve_other(pTHX_ stcxt_t *cxt, const char *cname)
- cxt->ver_major, cxt->ver_minor));
- }
-
-- return (SV *) 0; /* Just in case */
-+ return (SV *) 0; /* Just in case */
- }
-
- /*
-@@ -4700,7 +4698,7 @@ static SV *retrieve_idx_blessed(pTHX_ stcxt_t *cxt, const char *cname)
- TRACEME(("retrieve_idx_blessed (#%d)", (int)cxt->tagnum));
- ASSERT(!cname, ("no bless-into class given here, got %s", cname));
-
-- GETMARK(idx); /* Index coded on a single char? */
-+ GETMARK(idx); /* Index coded on a single char? */
- if (idx & 0x80)
- RLEN(idx);
-
-@@ -4713,7 +4711,7 @@ static SV *retrieve_idx_blessed(pTHX_ stcxt_t *cxt, const char *cname)
- CROAK(("Class name #%" IVdf " should have been seen already",
- (IV) idx));
-
-- classname = SvPVX(*sva); /* We know it's a PV, by construction */
-+ classname = SvPVX(*sva); /* We know it's a PV, by construction */
-
- TRACEME(("class ID %d => %s", (int)idx, classname));
-
-@@ -4737,7 +4735,7 @@ static SV *retrieve_blessed(pTHX_ stcxt_t *cxt, const char *cname)
- {
- U32 len;
- SV *sv;
-- char buf[LG_BLESS + 1]; /* Avoid malloc() if possible */
-+ char buf[LG_BLESS + 1]; /* Avoid malloc() if possible */
- char *classname = buf;
- char *malloced_classname = NULL;
-
-@@ -4752,7 +4750,7 @@ static SV *retrieve_blessed(pTHX_ stcxt_t *cxt, const char *cname)
- * single byte, and the string can be read on the stack.
- */
-
-- GETMARK(len); /* Length coded on a single char? */
-+ GETMARK(len); /* Length coded on a single char? */
- if (len & 0x80) {
- RLEN(len);
- TRACEME(("** allocating %ld bytes for class name", (long)len+1));
-@@ -4767,7 +4765,7 @@ static SV *retrieve_blessed(pTHX_ stcxt_t *cxt, const char *cname)
- malloced_classname = classname;
- }
- SAFEPVREAD(classname, (I32)len, malloced_classname);
-- classname[len] = '\0'; /* Mark string end */
-+ classname[len] = '\0'; /* Mark string end */
-
- /*
- * It's a new classname, otherwise it would have been an SX_IX_BLESS.
-@@ -4815,7 +4813,7 @@ static SV *retrieve_blessed(pTHX_ stcxt_t *cxt, const char *cname)
- static SV *retrieve_hook_common(pTHX_ stcxt_t *cxt, const char *cname, int large)
- {
- U32 len;
-- char buf[LG_BLESS + 1]; /* Avoid malloc() if possible */
-+ char buf[LG_BLESS + 1]; /* Avoid malloc() if possible */
- char *classname = buf;
- unsigned int flags;
- STRLEN len2;
-@@ -4894,9 +4892,9 @@ static SV *retrieve_hook_common(pTHX_ stcxt_t *cxt, const char *cname, int large
- }
- break;
- default:
-- return retrieve_other(aTHX_ cxt, 0); /* Let it croak */
-+ return retrieve_other(aTHX_ cxt, 0); /* Let it croak */
- }
-- SEEN0_NN(sv, 0); /* Don't bless yet */
-+ SEEN0_NN(sv, 0); /* Don't bless yet */
-
- /*
- * Whilst flags tell us to recurse, do so.
-@@ -4939,7 +4937,7 @@ static SV *retrieve_hook_common(pTHX_ stcxt_t *cxt, const char *cname, int large
- CROAK(("Class name #%" IVdf " should have been seen already",
- (IV) idx));
-
-- classname = SvPVX(*sva); /* We know it's a PV, by construction */
-+ classname = SvPVX(*sva); /* We know it's a PV, by construction */
- TRACEME(("class ID %d => %s", (int)idx, classname));
-
- } else {
-@@ -4970,7 +4968,7 @@ static SV *retrieve_hook_common(pTHX_ stcxt_t *cxt, const char *cname, int large
- }
-
- SAFEPVREAD(classname, (I32)len, malloced_classname);
-- classname[len] = '\0'; /* Mark string end */
-+ classname[len] = '\0'; /* Mark string end */
-
- /*
- * Record new classname.
-@@ -5012,8 +5010,8 @@ static SV *retrieve_hook_common(pTHX_ stcxt_t *cxt, const char *cname, int large
- }
- SvCUR_set(frozen, len2);
- *SvEND(frozen) = '\0';
-- (void) SvPOK_only(frozen); /* Validates string pointer */
-- if (cxt->s_tainted) /* Is input source tainted? */
-+ (void) SvPOK_only(frozen); /* Validates string pointer */
-+ if (cxt->s_tainted) /* Is input source tainted? */
- SvTAINT(frozen);
-
- TRACEME(("frozen string: %d bytes", (int)len2));
-@@ -5025,22 +5023,22 @@ static SV *retrieve_hook_common(pTHX_ stcxt_t *cxt, const char *cname, int large
- if (flags & SHF_HAS_LIST) {
- if (flags & SHF_LARGE_LISTLEN) {
- RLEN(len3);
-- if (len3 < 0) {
-+ if (len3 < 0) {
- #ifdef HAS_U64
-- ++has_large_oids;
-- len3 = -len3;
-+ ++has_large_oids;
-+ len3 = -len3;
- #else
-- CROAK(("Large object ids in hook data not supported on 32-bit platforms"));
-+ CROAK(("Large object ids in hook data not supported on 32-bit platforms"));
- #endif
--
-- }
-- }
-- else
-+
-+ }
-+ }
-+ else
- GETMARK(len3);
- if (len3) {
- av = newAV();
-- av_extend(av, len3 + 1); /* Leave room for [0] */
-- AvFILLp(av) = len3; /* About to be filled anyway */
-+ av_extend(av, len3 + 1); /* Leave room for [0] */
-+ AvFILLp(av) = len3; /* About to be filled anyway */
- }
- }
-
-@@ -5059,23 +5057,23 @@ static SV *retrieve_hook_common(pTHX_ stcxt_t *cxt, const char *cname, int large
- if (av) {
- SV **ary = AvARRAY(av);
- int i;
-- for (i = 1; i <= len3; i++) { /* We leave [0] alone */
-+ for (i = 1; i <= len3; i++) { /* We leave [0] alone */
- ntag_t tag;
- SV **svh;
- SV *xsv;
-
- #ifdef HAS_U64
-- if (has_large_oids) {
-- READ_U64(tag);
-- }
-- else {
-- U32 tmp;
-- READ_I32(tmp);
-- tag = ntohl(tmp);
-- }
-+ if (has_large_oids) {
-+ READ_U64(tag);
-+ }
-+ else {
-+ U32 tmp;
-+ READ_I32(tmp);
-+ tag = ntohl(tmp);
-+ }
- #else
-- READ_I32(tag);
-- tag = ntohl(tag);
-+ READ_I32(tag);
-+ tag = ntohl(tag);
- #endif
-
- svh = av_fetch(cxt->aseen, tag, FALSE);
-@@ -5132,7 +5130,7 @@ static SV *retrieve_hook_common(pTHX_ stcxt_t *cxt, const char *cname, int large
- sv_free((SV *) av);
- SvREFCNT_dec(attach_hook);
- if (attached &&
-- SvROK(attached) &&
-+ SvROK(attached) &&
- sv_derived_from(attached, classname)
- ) {
- UNSEE();
-@@ -5240,7 +5238,7 @@ static SV *retrieve_hook_common(pTHX_ stcxt_t *cxt, const char *cname, int large
-
- TRACEME(("retrieving magic object for 0x%" UVxf "...", PTR2UV(sv)));
-
-- rv = retrieve(aTHX_ cxt, 0); /* Retrieve <magic object> */
-+ rv = retrieve(aTHX_ cxt, 0); /* Retrieve <magic object> */
-
- TRACEME(("restoring the magic object 0x%" UVxf " part of 0x%" UVxf,
- PTR2UV(rv), PTR2UV(sv)));
-@@ -5266,9 +5264,9 @@ static SV *retrieve_hook_common(pTHX_ stcxt_t *cxt, const char *cname, int large
- * means the hook cannot know it deals with an object whose variable is
- * tied. But this is happening when retrieving $o in the following case:
- *
-- * my %h;
-+ * my %h;
- * tie %h, 'FOO';
-- * my $o = bless \%h, 'BAR';
-+ * my $o = bless \%h, 'BAR';
- *
- * The 'BAR' class is NOT the one where %h is tied into. Therefore, as
- * far as the 'BAR' class is concerned, the fact that %h is not a REAL
-@@ -5284,7 +5282,7 @@ static SV *retrieve_hook_common(pTHX_ stcxt_t *cxt, const char *cname, int large
- */
-
- sv_magic(sv, rv, mtype, (char *)NULL, 0);
-- SvREFCNT_dec(rv); /* Undo refcnt inc from sv_magic() */
-+ SvREFCNT_dec(rv); /* Undo refcnt inc from sv_magic() */
-
- return sv;
- }
-@@ -5321,10 +5319,10 @@ static SV *retrieve_ref(pTHX_ stcxt_t *cxt, const char *cname)
- stash = gv_stashpv(cname, GV_ADD);
- else
- stash = 0;
-- SEEN_NN(rv, stash, 0); /* Will return if rv is null */
-+ SEEN_NN(rv, stash, 0); /* Will return if rv is null */
- sv = retrieve(aTHX_ cxt, 0);/* Retrieve <object> */
- if (!sv)
-- return (SV *) 0; /* Failed */
-+ return (SV *) 0; /* Failed */
-
- /*
- * WARNING: breaks RV encapsulation.
-@@ -5335,7 +5333,7 @@ static SV *retrieve_ref(pTHX_ stcxt_t *cxt, const char *cname)
- *
- * We don't say:
- *
-- * SvRV(rv) = SvREFCNT_inc(sv);
-+ * SvRV(rv) = SvREFCNT_inc(sv);
- *
- * here because the reference count we got from retrieve() above is
- * already correct: if the object was retrieved from the file, then
-@@ -5350,7 +5348,7 @@ static SV *retrieve_ref(pTHX_ stcxt_t *cxt, const char *cname)
- sv_upgrade(rv, SVt_RV);
- }
-
-- SvRV_set(rv, sv); /* $rv = \$sv */
-+ SvRV_set(rv, sv); /* $rv = \$sv */
- SvROK_on(rv);
- /*if (cxt->entry && ++cxt->ref_cnt > MAX_REF_CNT) {
- CROAK(("Max. recursion depth with nested refs exceeded"));
-@@ -5404,19 +5402,19 @@ static SV *retrieve_overloaded(pTHX_ stcxt_t *cxt, const char *cname)
-
- rv = NEWSV(10002, 0);
- stash = cname ? gv_stashpv(cname, GV_ADD) : 0;
-- SEEN_NN(rv, stash, 0); /* Will return if rv is null */
-+ SEEN_NN(rv, stash, 0); /* Will return if rv is null */
- cxt->in_retrieve_overloaded = 1; /* so sv_bless doesn't call S_reset_amagic */
- sv = retrieve(aTHX_ cxt, 0); /* Retrieve <object> */
- cxt->in_retrieve_overloaded = 0;
- if (!sv)
-- return (SV *) 0; /* Failed */
-+ return (SV *) 0; /* Failed */
-
- /*
- * WARNING: breaks RV encapsulation.
- */
-
- SvUPGRADE(rv, SVt_RV);
-- SvRV_set(rv, sv); /* $rv = \$sv */
-+ SvRV_set(rv, sv); /* $rv = \$sv */
- SvROK_on(rv);
-
- /*
-@@ -5494,14 +5492,14 @@ static SV *retrieve_tied_array(pTHX_ stcxt_t *cxt, const char *cname)
-
- tv = NEWSV(10002, 0);
- stash = cname ? gv_stashpv(cname, GV_ADD) : 0;
-- SEEN_NN(tv, stash, 0); /* Will return if tv is null */
-- sv = retrieve(aTHX_ cxt, 0); /* Retrieve <object> */
-+ SEEN_NN(tv, stash, 0); /* Will return if tv is null */
-+ sv = retrieve(aTHX_ cxt, 0); /* Retrieve <object> */
- if (!sv)
-- return (SV *) 0; /* Failed */
-+ return (SV *) 0; /* Failed */
-
- sv_upgrade(tv, SVt_PVAV);
- sv_magic(tv, sv, 'P', (char *)NULL, 0);
-- SvREFCNT_dec(sv); /* Undo refcnt inc from sv_magic() */
-+ SvREFCNT_dec(sv); /* Undo refcnt inc from sv_magic() */
-
- TRACEME(("ok (retrieve_tied_array at 0x%" UVxf ")", PTR2UV(tv)));
-
-@@ -5528,14 +5526,14 @@ static SV *retrieve_tied_hash(pTHX_ stcxt_t *cxt, const char *cname)
-
- tv = NEWSV(10002, 0);
- stash = cname ? gv_stashpv(cname, GV_ADD) : 0;
-- SEEN_NN(tv, stash, 0); /* Will return if tv is null */
-- sv = retrieve(aTHX_ cxt, 0); /* Retrieve <object> */
-+ SEEN_NN(tv, stash, 0); /* Will return if tv is null */
-+ sv = retrieve(aTHX_ cxt, 0); /* Retrieve <object> */
- if (!sv)
-- return (SV *) 0; /* Failed */
-+ return (SV *) 0; /* Failed */
-
- sv_upgrade(tv, SVt_PVHV);
- sv_magic(tv, sv, 'P', (char *)NULL, 0);
-- SvREFCNT_dec(sv); /* Undo refcnt inc from sv_magic() */
-+ SvREFCNT_dec(sv); /* Undo refcnt inc from sv_magic() */
-
- TRACEME(("ok (retrieve_tied_hash at 0x%" UVxf ")", PTR2UV(tv)));
-
-@@ -5562,10 +5560,10 @@ static SV *retrieve_tied_scalar(pTHX_ stcxt_t *cxt, const char *cname)
-
- tv = NEWSV(10002, 0);
- stash = cname ? gv_stashpv(cname, GV_ADD) : 0;
-- SEEN_NN(tv, stash, 0); /* Will return if rv is null */
-- sv = retrieve(aTHX_ cxt, 0); /* Retrieve <object> */
-+ SEEN_NN(tv, stash, 0); /* Will return if rv is null */
-+ sv = retrieve(aTHX_ cxt, 0); /* Retrieve <object> */
- if (!sv) {
-- return (SV *) 0; /* Failed */
-+ return (SV *) 0; /* Failed */
- }
- else if (SvTYPE(sv) != SVt_NULL) {
- obj = sv;
-@@ -5605,19 +5603,19 @@ static SV *retrieve_tied_key(pTHX_ stcxt_t *cxt, const char *cname)
-
- tv = NEWSV(10002, 0);
- stash = cname ? gv_stashpv(cname, GV_ADD) : 0;
-- SEEN_NN(tv, stash, 0); /* Will return if tv is null */
-- sv = retrieve(aTHX_ cxt, 0); /* Retrieve <object> */
-+ SEEN_NN(tv, stash, 0); /* Will return if tv is null */
-+ sv = retrieve(aTHX_ cxt, 0); /* Retrieve <object> */
- if (!sv)
-- return (SV *) 0; /* Failed */
-+ return (SV *) 0; /* Failed */
-
-- key = retrieve(aTHX_ cxt, 0); /* Retrieve <key> */
-+ key = retrieve(aTHX_ cxt, 0); /* Retrieve <key> */
- if (!key)
-- return (SV *) 0; /* Failed */
-+ return (SV *) 0; /* Failed */
-
- sv_upgrade(tv, SVt_PVMG);
- sv_magic(tv, sv, 'p', (char *)key, HEf_SVKEY);
-- SvREFCNT_dec(key); /* Undo refcnt inc from sv_magic() */
-- SvREFCNT_dec(sv); /* Undo refcnt inc from sv_magic() */
-+ SvREFCNT_dec(key); /* Undo refcnt inc from sv_magic() */
-+ SvREFCNT_dec(sv); /* Undo refcnt inc from sv_magic() */
-
- return tv;
- }
-@@ -5643,16 +5641,16 @@ static SV *retrieve_tied_idx(pTHX_ stcxt_t *cxt, const char *cname)
-
- tv = NEWSV(10002, 0);
- stash = cname ? gv_stashpv(cname, GV_ADD) : 0;
-- SEEN_NN(tv, stash, 0); /* Will return if tv is null */
-- sv = retrieve(aTHX_ cxt, 0); /* Retrieve <object> */
-+ SEEN_NN(tv, stash, 0); /* Will return if tv is null */
-+ sv = retrieve(aTHX_ cxt, 0); /* Retrieve <object> */
- if (!sv)
-- return (SV *) 0; /* Failed */
-+ return (SV *) 0; /* Failed */
-
-- RLEN(idx); /* Retrieve <idx> */
-+ RLEN(idx); /* Retrieve <idx> */
-
- sv_upgrade(tv, SVt_PVMG);
- sv_magic(tv, sv, 'p', (char *)NULL, idx);
-- SvREFCNT_dec(sv); /* Undo refcnt inc from sv_magic() */
-+ SvREFCNT_dec(sv); /* Undo refcnt inc from sv_magic() */
-
- return tv;
- }
-@@ -5675,7 +5673,7 @@ static SV *get_lstring(pTHX_ stcxt_t *cxt, UV len, int isutf8, const char *cname
-
- sv = NEWSV(10002, len);
- stash = cname ? gv_stashpv(cname, GV_ADD) : 0;
-- SEEN_NN(sv, stash, 0); /* Associate this new scalar with tag "tagnum" */
-+ SEEN_NN(sv, stash, 0); /* Associate this new scalar with tag "tagnum" */
-
- if (len == 0) {
- SvPVCLEAR(sv);
-@@ -5692,11 +5690,11 @@ static SV *get_lstring(pTHX_ stcxt_t *cxt, UV len, int isutf8, const char *cname
- */
-
- SAFEREAD(SvPVX(sv), len, sv);
-- SvCUR_set(sv, len); /* Record C string length */
-- *SvEND(sv) = '\0'; /* Ensure it's null terminated anyway */
-- (void) SvPOK_only(sv); /* Validate string pointer */
-- if (cxt->s_tainted) /* Is input source tainted? */
-- SvTAINT(sv); /* External data cannot be trusted */
-+ SvCUR_set(sv, len); /* Record C string length */
-+ *SvEND(sv) = '\0'; /* Ensure it's null terminated anyway */
-+ (void) SvPOK_only(sv); /* Validate string pointer */
-+ if (cxt->s_tainted) /* Is input source tainted? */
-+ SvTAINT(sv); /* External data cannot be trusted */
-
- /* Check for CVE-215-1592 */
- if (cname && len == 13 && strEQc(cname, "CGITempFile")
-@@ -5824,7 +5822,7 @@ static SV *retrieve_vstring(pTHX_ stcxt_t *cxt, const char *cname)
- READ(s, len);
- sv = retrieve(aTHX_ cxt, cname);
- if (!sv)
-- return (SV *) 0; /* Failed */
-+ return (SV *) 0; /* Failed */
- sv_magic(sv,NULL,PERL_MAGIC_vstring,s,len);
- /* 5.10.0 and earlier seem to need this */
- SvRMAGICAL_on(sv);
-@@ -5866,7 +5864,7 @@ static SV *retrieve_lvstring(pTHX_ stcxt_t *cxt, const char *cname)
- sv = retrieve(aTHX_ cxt, cname);
- if (!sv) {
- Safefree(s);
-- return (SV *) 0; /* Failed */
-+ return (SV *) 0; /* Failed */
- }
- sv_magic(sv,NULL,PERL_MAGIC_vstring,s,len);
- /* 5.10.0 and earlier seem to need this */
-@@ -5899,7 +5897,7 @@ static SV *retrieve_integer(pTHX_ stcxt_t *cxt, const char *cname)
- READ(&iv, sizeof(iv));
- sv = newSViv(iv);
- stash = cname ? gv_stashpv(cname, GV_ADD) : 0;
-- SEEN_NN(sv, stash, 0); /* Associate this new scalar with tag "tagnum" */
-+ SEEN_NN(sv, stash, 0); /* Associate this new scalar with tag "tagnum" */
-
- TRACEME(("integer %" IVdf, iv));
- TRACEME(("ok (retrieve_integer at 0x%" UVxf ")", PTR2UV(sv)));
-@@ -5973,12 +5971,12 @@ static SV *retrieve_lobject(pTHX_ stcxt_t *cxt, const char *cname)
- #ifdef HAS_U64
-
- if (type == SX_FLAG_HASH) {
-- /* we write the flags immediately after the op. I could have
-- changed the writer, but this may allow someone to recover
-- data they're already frozen, though such a very large hash
-- seems unlikely.
-- */
-- GETMARK(hash_flags);
-+ /* we write the flags immediately after the op. I could have
-+ changed the writer, but this may allow someone to recover
-+ data they're already frozen, though such a very large hash
-+ seems unlikely.
-+ */
-+ GETMARK(hash_flags);
- }
- else if (type == SX_HOOK) {
- return retrieve_hook_common(aTHX_ cxt, cname, TRUE);
-@@ -6025,7 +6023,7 @@ static SV *retrieve_lobject(pTHX_ stcxt_t *cxt, const char *cname)
- #else
- PERL_UNUSED_ARG(cname);
-
-- /* previously this (brokenly) checked the length value and only failed if
-+ /* previously this (brokenly) checked the length value and only failed if
- the length was over 4G.
- Since this op should only occur with objects over 4GB (or 2GB) we can just
- reject it.
-@@ -6057,7 +6055,7 @@ static SV *retrieve_netint(pTHX_ stcxt_t *cxt, const char *cname)
- TRACEME(("network integer (as-is) %d", iv));
- #endif
- stash = cname ? gv_stashpv(cname, GV_ADD) : 0;
-- SEEN_NN(sv, stash, 0); /* Associate this new scalar with tag "tagnum" */
-+ SEEN_NN(sv, stash, 0); /* Associate this new scalar with tag "tagnum" */
-
- TRACEME(("ok (retrieve_netint at 0x%" UVxf ")", PTR2UV(sv)));
-
-@@ -6081,7 +6079,7 @@ static SV *retrieve_double(pTHX_ stcxt_t *cxt, const char *cname)
- READ(&nv, sizeof(nv));
- sv = newSVnv(nv);
- stash = cname ? gv_stashpv(cname, GV_ADD) : 0;
-- SEEN_NN(sv, stash, 0); /* Associate this new scalar with tag "tagnum" */
-+ SEEN_NN(sv, stash, 0); /* Associate this new scalar with tag "tagnum" */
-
- TRACEME(("double %" NVff, nv));
- TRACEME(("ok (retrieve_double at 0x%" UVxf ")", PTR2UV(sv)));
-@@ -6104,7 +6102,7 @@ static SV *retrieve_byte(pTHX_ stcxt_t *cxt, const char *cname)
- /* MSVC 2017 doesn't handle the AIX workaround well */
- int tmp;
- #else
-- signed char tmp; /* Workaround for AIX cc bug --H.Merijn Brand */
-+ signed char tmp; /* Workaround for AIX cc bug --H.Merijn Brand */
- #endif
-
- TRACEME(("retrieve_byte (#%d)", (int)cxt->tagnum));
-@@ -6114,7 +6112,7 @@ static SV *retrieve_byte(pTHX_ stcxt_t *cxt, const char *cname)
- tmp = (unsigned char) siv - 128;
- sv = newSViv(tmp);
- stash = cname ? gv_stashpv(cname, GV_ADD) : 0;
-- SEEN_NN(sv, stash, 0); /* Associate this new scalar with tag "tagnum" */
-+ SEEN_NN(sv, stash, 0); /* Associate this new scalar with tag "tagnum" */
-
- TRACEME(("byte %d", tmp));
- TRACEME(("ok (retrieve_byte at 0x%" UVxf ")", PTR2UV(sv)));
-@@ -6247,7 +6245,7 @@ static SV *retrieve_array(pTHX_ stcxt_t *cxt, const char *cname)
- if (len)
- av_extend(av, len);
- else
-- return (SV *) av; /* No data follow if array is empty */
-+ return (SV *) av; /* No data follow if array is empty */
-
- /*
- * Now get each item in turn...
-@@ -6255,7 +6253,7 @@ static SV *retrieve_array(pTHX_ stcxt_t *cxt, const char *cname)
-
- for (i = 0; i < len; i++) {
- TRACEME(("(#%d) item", (int)i));
-- sv = retrieve(aTHX_ cxt, 0); /* Retrieve item */
-+ sv = retrieve(aTHX_ cxt, 0); /* Retrieve item */
- if (!sv)
- return (SV *) 0;
- if (sv == &PL_sv_undef) {
-@@ -6304,7 +6302,7 @@ static SV *get_larray(pTHX_ stcxt_t *cxt, UV len, const char *cname)
-
- for (i = 0; i < len; i++) {
- TRACEME(("(#%d) item", (int)i));
-- sv = retrieve(aTHX_ cxt, 0); /* Retrieve item */
-+ sv = retrieve(aTHX_ cxt, 0); /* Retrieve item */
- if (!sv)
- return (SV *) 0;
- if (sv == &PL_sv_undef) {
-@@ -6345,7 +6343,7 @@ static SV *get_lhash(pTHX_ stcxt_t *cxt, UV len, int hash_flags, const char *cna
-
- #ifdef HAS_RESTRICTED_HASHES
- PERL_UNUSED_ARG(hash_flags);
--#else
-+#else
- if (hash_flags & SHV_RESTRICTED) {
- if (cxt->derestrict < 0)
- cxt->derestrict = (SvTRUE
-@@ -6359,11 +6357,11 @@ static SV *get_lhash(pTHX_ stcxt_t *cxt, UV len, int hash_flags, const char *cna
- TRACEME(("size = %lu", (unsigned long)len));
- hv = newHV();
- stash = cname ? gv_stashpv(cname, GV_ADD) : 0;
-- SEEN_NN(hv, stash, 0); /* Will return if table not allocated properly */
-+ SEEN_NN(hv, stash, 0); /* Will return if table not allocated properly */
- if (len == 0)
-- return (SV *) hv; /* No data follow if table empty */
-+ return (SV *) hv; /* No data follow if table empty */
- TRACEME(("split %lu", (unsigned long)len+1));
-- hv_ksplit(hv, len+1); /* pre-extend hash to save multiple splits */
-+ hv_ksplit(hv, len+1); /* pre-extend hash to save multiple splits */
-
- /*
- * Now get each key/value pair in turn...
-@@ -6386,11 +6384,11 @@ static SV *get_lhash(pTHX_ stcxt_t *cxt, UV len, int hash_flags, const char *cna
- * Hence the key comes after the value.
- */
-
-- RLEN(size); /* Get key size */
-- KBUFCHK((STRLEN)size); /* Grow hash key read pool if needed */
-+ RLEN(size); /* Get key size */
-+ KBUFCHK((STRLEN)size); /* Grow hash key read pool if needed */
- if (size)
- READ(kbuf, size);
-- kbuf[size] = '\0'; /* Mark string end, just in case */
-+ kbuf[size] = '\0'; /* Mark string end, just in case */
- TRACEME(("(#%d) key '%s'", (int)i, kbuf));
-
- /*
-@@ -6436,11 +6434,11 @@ static SV *retrieve_hash(pTHX_ stcxt_t *cxt, const char *cname)
- TRACEME(("size = %d", (int)len));
- hv = newHV();
- stash = cname ? gv_stashpv(cname, GV_ADD) : 0;
-- SEEN_NN(hv, stash, 0); /* Will return if table not allocated properly */
-+ SEEN_NN(hv, stash, 0); /* Will return if table not allocated properly */
- if (len == 0)
-- return (SV *) hv; /* No data follow if table empty */
-+ return (SV *) hv; /* No data follow if table empty */
- TRACEME(("split %d", (int)len+1));
-- hv_ksplit(hv, len+1); /* pre-extend hash to save multiple splits */
-+ hv_ksplit(hv, len+1); /* pre-extend hash to save multiple splits */
-
- /*
- * Now get each key/value pair in turn...
-@@ -6463,11 +6461,11 @@ static SV *retrieve_hash(pTHX_ stcxt_t *cxt, const char *cname)
- * Hence the key comes after the value.
- */
-
-- RLEN(size); /* Get key size */
-- KBUFCHK((STRLEN)size); /* Grow hash key read pool if needed */
-+ RLEN(size); /* Get key size */
-+ KBUFCHK((STRLEN)size); /* Grow hash key read pool if needed */
- if (size)
- READ(kbuf, size);
-- kbuf[size] = '\0'; /* Mark string end, just in case */
-+ kbuf[size] = '\0'; /* Mark string end, just in case */
- TRACEME(("(#%d) key '%s'", (int)i, kbuf));
-
- /*
-@@ -6526,11 +6524,11 @@ static SV *retrieve_flag_hash(pTHX_ stcxt_t *cxt, const char *cname)
- TRACEME(("size = %d, flags = %d", (int)len, hash_flags));
- hv = newHV();
- stash = cname ? gv_stashpv(cname, GV_ADD) : 0;
-- SEEN_NN(hv, stash, 0); /* Will return if table not allocated properly */
-+ SEEN_NN(hv, stash, 0); /* Will return if table not allocated properly */
- if (len == 0)
-- return (SV *) hv; /* No data follow if table empty */
-+ return (SV *) hv; /* No data follow if table empty */
- TRACEME(("split %d", (int)len+1));
-- hv_ksplit(hv, len+1); /* pre-extend hash to save multiple splits */
-+ hv_ksplit(hv, len+1); /* pre-extend hash to save multiple splits */
-
- /*
- * Now get each key/value pair in turn...
-@@ -6597,11 +6595,11 @@ static SV *retrieve_flag_hash(pTHX_ stcxt_t *cxt, const char *cname)
- store_flags |= HVhek_WASUTF8;
- #endif
-
-- RLEN(size); /* Get key size */
-+ RLEN(size); /* Get key size */
- KBUFCHK((STRLEN)size);/* Grow hash key read pool if needed */
- if (size)
- READ(kbuf, size);
-- kbuf[size] = '\0'; /* Mark string end, just in case */
-+ kbuf[size] = '\0'; /* Mark string end, just in case */
- TRACEME(("(#%d) key '%s' flags %X store_flags %X", (int)i, kbuf,
- flags, store_flags));
-
-@@ -6721,7 +6719,7 @@ static SV *retrieve_code(pTHX_ stcxt_t *cxt, const char *cname)
- SAVETMPS;
-
- errsv = get_sv("@", GV_ADD);
-- SvPVCLEAR(errsv); /* clear $@ */
-+ SvPVCLEAR(errsv); /* clear $@ */
- if (SvROK(cxt->eval) && SvTYPE(SvRV(cxt->eval)) == SVt_PVCV) {
- PUSHMARK(sp);
- XPUSHs(sv_2mortal(newSVsv(sub)));
-@@ -6820,7 +6818,7 @@ static SV *retrieve_regexp(pTHX_ stcxt_t *cxt, const char *cname) {
- SvREFCNT_inc(sv);
- stash = cname ? gv_stashpv(cname, GV_ADD) : 0;
- SEEN_NN(sv, stash, 0);
--
-+
- FREETMPS;
- LEAVE;
-
-@@ -6858,11 +6856,11 @@ static SV *old_retrieve_array(pTHX_ stcxt_t *cxt, const char *cname)
- RLEN(len);
- TRACEME(("size = %d", (int)len));
- av = newAV();
-- SEEN0_NN(av, 0); /* Will return if array not allocated nicely */
-+ SEEN0_NN(av, 0); /* Will return if array not allocated nicely */
- if (len)
- av_extend(av, len);
- else
-- return (SV *) av; /* No data follow if array is empty */
-+ return (SV *) av; /* No data follow if array is empty */
-
- /*
- * Now get each item in turn...
-@@ -6872,12 +6870,12 @@ static SV *old_retrieve_array(pTHX_ stcxt_t *cxt, const char *cname)
- GETMARK(c);
- if (c == SX_IT_UNDEF) {
- TRACEME(("(#%d) undef item", (int)i));
-- continue; /* av_extend() already filled us with undef */
-+ continue; /* av_extend() already filled us with undef */
- }
- if (c != SX_ITEM)
- (void) retrieve_other(aTHX_ cxt, 0);/* Will croak out */
- TRACEME(("(#%d) item", (int)i));
-- sv = retrieve(aTHX_ cxt, 0); /* Retrieve item */
-+ sv = retrieve(aTHX_ cxt, 0); /* Retrieve item */
- if (!sv)
- return (SV *) 0;
- if (av_store(av, i, sv) == 0)
-@@ -6909,7 +6907,7 @@ static SV *old_retrieve_hash(pTHX_ stcxt_t *cxt, const char *cname)
- HV *hv;
- SV *sv = (SV *) 0;
- int c;
-- SV *sv_h_undef = (SV *) 0; /* hv_store() bug */
-+ SV *sv_h_undef = (SV *) 0; /* hv_store() bug */
-
- PERL_UNUSED_ARG(cname);
- TRACEME(("old_retrieve_hash (#%d)", (int)cxt->tagnum));
-@@ -6921,11 +6919,11 @@ static SV *old_retrieve_hash(pTHX_ stcxt_t *cxt, const char *cname)
- RLEN(len);
- TRACEME(("size = %d", (int)len));
- hv = newHV();
-- SEEN0_NN(hv, 0); /* Will return if table not allocated properly */
-+ SEEN0_NN(hv, 0); /* Will return if table not allocated properly */
- if (len == 0)
-- return (SV *) hv; /* No data follow if table empty */
-+ return (SV *) hv; /* No data follow if table empty */
- TRACEME(("split %d", (int)len+1));
-- hv_ksplit(hv, len+1); /* pre-extend hash to save multiple splits */
-+ hv_ksplit(hv, len+1); /* pre-extend hash to save multiple splits */
-
- /*
- * Now get each key/value pair in turn...
-@@ -6965,11 +6963,11 @@ static SV *old_retrieve_hash(pTHX_ stcxt_t *cxt, const char *cname)
- GETMARK(c);
- if (c != SX_KEY)
- (void) retrieve_other(aTHX_ cxt, 0); /* Will croak out */
-- RLEN(size); /* Get key size */
-- KBUFCHK((STRLEN)size); /* Grow hash key read pool if needed */
-+ RLEN(size); /* Get key size */
-+ KBUFCHK((STRLEN)size); /* Grow hash key read pool if needed */
- if (size)
- READ(kbuf, size);
-- kbuf[size] = '\0'; /* Mark string end, just in case */
-+ kbuf[size] = '\0'; /* Mark string end, just in case */
- TRACEME(("(#%d) key '%s'", (int)i, kbuf));
-
- /*
-@@ -7032,10 +7030,10 @@ static SV *magic_check(pTHX_ stcxt_t *cxt)
- STRLEN len = sizeof(magicstr);
- STRLEN old_len;
-
-- READ(buf, (SSize_t)(len)); /* Not null-terminated */
-+ READ(buf, (SSize_t)(len)); /* Not null-terminated */
-
- /* Point at the byte after the byte we read. */
-- current = buf + --len; /* Do the -- outside of macros. */
-+ current = buf + --len; /* Do the -- outside of macros. */
-
- if (memNE(buf, magicstr, len)) {
- /*
-@@ -7127,8 +7125,8 @@ static SV *magic_check(pTHX_ stcxt_t *cxt)
- * information to check.
- */
-
-- if ((cxt->netorder = (use_network_order & 0x1))) /* Extra () for -Wall */
-- return &PL_sv_undef; /* No byte ordering info */
-+ if ((cxt->netorder = (use_network_order & 0x1))) /* Extra () for -Wall */
-+ return &PL_sv_undef; /* No byte ordering info */
-
- /* In C truth is 1, falsehood is 0. Very convenient. */
- use_NV_size = version_major >= 2 && version_minor >= 2;
-@@ -7140,7 +7138,7 @@ static SV *magic_check(pTHX_ stcxt_t *cxt)
- c = use_network_order;
- }
- length = c + 3 + use_NV_size;
-- READ(buf, length); /* Not null-terminated */
-+ READ(buf, length); /* Not null-terminated */
-
- TRACEME(("byte order '%.*s' %d", c, buf, c));
-
-@@ -7179,7 +7177,7 @@ static SV *magic_check(pTHX_ stcxt_t *cxt)
- CROAK(("Double size is not compatible"));
- }
-
-- return &PL_sv_undef; /* OK */
-+ return &PL_sv_undef; /* OK */
- }
-
- /*
-@@ -7207,14 +7205,14 @@ static SV *retrieve(pTHX_ stcxt_t *cxt, const char *cname)
- * no longer supported, hence the final "goto" in the "if" block.
- */
-
-- if (cxt->hseen) { /* Retrieving old binary */
-+ if (cxt->hseen) { /* Retrieving old binary */
- stag_t tag;
- if (cxt->netorder) {
- I32 nettag;
-- READ(&nettag, sizeof(I32)); /* Ordered sequence of I32 */
-+ READ(&nettag, sizeof(I32)); /* Ordered sequence of I32 */
- tag = (stag_t) nettag;
- } else
-- READ(&tag, sizeof(stag_t)); /* Original address of the SV */
-+ READ(&tag, sizeof(stag_t)); /* Original address of the SV */
-
- GETMARK(type);
- if (type == SX_OBJECT) {
-@@ -7223,7 +7221,7 @@ static SV *retrieve(pTHX_ stcxt_t *cxt, const char *cname)
- if (!svh)
- CROAK(("Old tag 0x%" UVxf " should have been mapped already",
- (UV) tag));
-- tagn = SvIV(*svh); /* Mapped tag number computed earlier below */
-+ tagn = SvIV(*svh); /* Mapped tag number computed earlier below */
-
- /*
- * The following code is common with the SX_OBJECT case below.
-@@ -7235,8 +7233,8 @@ static SV *retrieve(pTHX_ stcxt_t *cxt, const char *cname)
- (IV) tagn));
- sv = *svh;
- TRACEME(("has retrieved #%d at 0x%" UVxf, (int)tagn, PTR2UV(sv)));
-- SvREFCNT_inc(sv); /* One more reference to this same sv */
-- return sv; /* The SV pointer where object was retrieved */
-+ SvREFCNT_inc(sv); /* One more reference to this same sv */
-+ return sv; /* The SV pointer where object was retrieved */
- }
-
- /*
-@@ -7288,8 +7286,8 @@ static SV *retrieve(pTHX_ stcxt_t *cxt, const char *cname)
- (IV) tag));
- sv = *svh;
- TRACEME(("had retrieved #%d at 0x%" UVxf, (int)tag, PTR2UV(sv)));
-- SvREFCNT_inc(sv); /* One more reference to this same sv */
-- return sv; /* The SV pointer where object was retrieved */
-+ SvREFCNT_inc(sv); /* One more reference to this same sv */
-+ return sv; /* The SV pointer where object was retrieved */
- } else if (type >= SX_LAST && cxt->ver_minor > STORABLE_BIN_MINOR) {
- if (cxt->accept_future_minor < 0)
- cxt->accept_future_minor
-@@ -7304,7 +7302,7 @@ static SV *retrieve(pTHX_ stcxt_t *cxt, const char *cname)
- }
- }
-
-- first_time: /* Will disappear when support for old format is dropped */
-+ first_time: /* Will disappear when support for old format is dropped */
-
- /*
- * Okay, first time through for this one.
-@@ -7312,7 +7310,7 @@ static SV *retrieve(pTHX_ stcxt_t *cxt, const char *cname)
-
- sv = RETRIEVE(cxt, type)(aTHX_ cxt, cname);
- if (!sv)
-- return (SV *) 0; /* Failed */
-+ return (SV *) 0; /* Failed */
-
- /*
- * Old binary formats (pre-0.7).
-@@ -7332,19 +7330,19 @@ static SV *retrieve(pTHX_ stcxt_t *cxt, const char *cname)
- HV* stash;
- switch (type) {
- case SX_CLASS:
-- GETMARK(len); /* Length coded on a single char */
-+ GETMARK(len); /* Length coded on a single char */
- break;
-- case SX_LG_CLASS: /* Length coded on a regular integer */
-+ case SX_LG_CLASS: /* Length coded on a regular integer */
- RLEN(len);
- break;
- case EOF:
- default:
-- return (SV *) 0; /* Failed */
-+ return (SV *) 0; /* Failed */
- }
-- KBUFCHK((STRLEN)len); /* Grow buffer as necessary */
-+ KBUFCHK((STRLEN)len); /* Grow buffer as necessary */
- if (len)
- READ(kbuf, len);
-- kbuf[len] = '\0'; /* Mark string end */
-+ kbuf[len] = '\0'; /* Mark string end */
- stash = gv_stashpvn(kbuf, len, GV_ADD);
- BLESS(sv, stash);
- }
-@@ -7353,7 +7351,7 @@ static SV *retrieve(pTHX_ stcxt_t *cxt, const char *cname)
- TRACEME(("ok (retrieved 0x%" UVxf ", refcnt=%d, %s)", PTR2UV(sv),
- (int)SvREFCNT(sv) - 1, sv_reftype(sv, FALSE)));
-
-- return sv; /* Ok */
-+ return sv; /* Ok */
- }
-
- /*
-@@ -7371,11 +7369,11 @@ static SV *do_retrieve(
- {
- dSTCXT;
- SV *sv;
-- int is_tainted; /* Is input source tainted? */
-- int pre_06_fmt = 0; /* True with pre Storable 0.6 formats */
-+ int is_tainted; /* Is input source tainted? */
-+ int pre_06_fmt = 0; /* True with pre Storable 0.6 formats */
-
- TRACEMED(("do_retrieve (optype = 0x%x, flags=0x%x)",
-- (unsigned)optype, (unsigned)flags));
-+ (unsigned)optype, (unsigned)flags));
-
- optype |= ST_RETRIEVE;
- cxt->flags = flags;
-@@ -7424,7 +7422,7 @@ static SV *do_retrieve(
- * in the buffer (dclone case).
- */
-
-- KBUFINIT(); /* Allocate hash key reading pool once */
-+ KBUFINIT(); /* Allocate hash key reading pool once */
-
- if (!f && in) {
- #ifdef SvUTF8_on
-@@ -7475,7 +7473,7 @@ static SV *do_retrieve(
- * some of the initializations.
- */
-
-- cxt->fio = f; /* Where I/O are performed */
-+ cxt->fio = f; /* Where I/O are performed */
-
- if (!magic_check(aTHX_ cxt))
- CROAK(("Magic number checking on storable %s failed",
-@@ -7509,15 +7507,15 @@ static SV *do_retrieve(
- if (!f && in)
- MBUF_RESTORE();
-
-- pre_06_fmt = cxt->hseen != NULL; /* Before we clean context */
-+ pre_06_fmt = cxt->hseen != NULL; /* Before we clean context */
-
- /*
- * The "root" context is never freed.
- */
-
- clean_retrieve_context(aTHX_ cxt);
-- if (cxt->prev) /* This context was stacked */
-- free_context(aTHX_ cxt); /* It was not the "root" context */
-+ if (cxt->prev) /* This context was stacked */
-+ free_context(aTHX_ cxt); /* It was not the "root" context */
-
- /*
- * Prepare returned value.
-@@ -7525,7 +7523,7 @@ static SV *do_retrieve(
-
- if (!sv) {
- TRACEMED(("retrieve ERROR"));
-- return &PL_sv_undef; /* Something went wrong, return undef */
-+ return &PL_sv_undef; /* Something went wrong, return undef */
- }
-
- TRACEMED(("retrieve got %s(0x%" UVxf ")",
-@@ -7540,7 +7538,7 @@ static SV *do_retrieve(
- * already one and not a scalar, for consistency reasons.
- */
-
-- if (pre_06_fmt) { /* Was not handling overloading by then */
-+ if (pre_06_fmt) { /* Was not handling overloading by then */
- SV *rv;
- TRACEMED(("fixing for old formats -- pre 0.6"));
- if (sv_type(aTHX_ sv) == svis_REF && (rv = SvRV(sv)) && SvOBJECT(rv)) {
-@@ -7655,15 +7653,15 @@ static SV *dclone(pTHX_ SV *sv)
- */
-
- if (!do_store(aTHX_ (PerlIO*) 0, sv, ST_CLONE, FALSE, (SV**) 0))
-- return &PL_sv_undef; /* Error during store */
-+ return &PL_sv_undef; /* Error during store */
-
- /*
- * Because of the above optimization, we have to refresh the context,
- * since a new one could have been allocated and stacked by do_store().
- */
-
-- { dSTCXT; real_context = cxt; } /* Sub-block needed for macro */
-- cxt = real_context; /* And we need this temporary... */
-+ { dSTCXT; real_context = cxt; } /* Sub-block needed for macro */
-+ cxt = real_context; /* And we need this temporary... */
-
- /*
- * Now, 'cxt' may refer to a new context.
-@@ -7680,7 +7678,7 @@ static SV *dclone(pTHX_ SV *sv)
- /*
- * Since we're passing do_retrieve() both a NULL file and sv, we need
- * to pre-compute the taintedness of the input by setting cxt->tainted
-- * to whatever state our own input string was. -- RAM, 15/09/2000
-+ * to whatever state our own input string was. -- RAM, 15/09/2000
- *
- * do_retrieve() will free non-root context.
- */
-@@ -7708,9 +7706,9 @@ static SV *dclone(pTHX_ SV *sv)
- */
-
- #ifndef OutputStream
--#define OutputStream PerlIO *
--#define InputStream PerlIO *
--#endif /* !OutputStream */
-+#define OutputStream PerlIO *
-+#define InputStream PerlIO *
-+#endif /* !OutputStream */
-
- static int
- storable_free(pTHX_ SV *sv, MAGIC* mg) {
-@@ -7730,7 +7728,7 @@ storable_free(pTHX_ SV *sv, MAGIC* mg) {
- return 0;
- }
-
--MODULE = Storable PACKAGE = Storable
-+MODULE = Storable PACKAGE = Storable
-
- PROTOTYPES: ENABLE
-
-@@ -7772,7 +7770,7 @@ CODE:
- SV *
- pstore(f,obj)
- OutputStream f
-- SV* obj
-+ SV* obj
- ALIAS:
- net_pstore = 1
- PPCODE:
-@@ -7794,7 +7792,7 @@ PPCODE:
-
- SV *
- mstore(obj)
-- SV* obj
-+ SV* obj
- ALIAS:
- net_mstore = 1
- CODE:
-@@ -7806,8 +7804,8 @@ OUTPUT:
-
- SV *
- pretrieve(f, flag = 6)
-- InputStream f
-- IV flag
-+ InputStream f
-+ IV flag
- CODE:
- RETVAL = pretrieve(aTHX_ f, flag);
- OUTPUT:
-@@ -7816,7 +7814,7 @@ OUTPUT:
- SV *
- mretrieve(sv, flag = 6)
- SV* sv
-- IV flag
-+ IV flag
- CODE:
- RETVAL = mretrieve(aTHX_ sv, flag);
- OUTPUT:
-@@ -7824,7 +7822,7 @@ OUTPUT:
-
- SV *
- dclone(sv)
-- SV* sv
-+ SV* sv
- CODE:
- RETVAL = dclone(aTHX_ sv);
- OUTPUT:
-diff --git a/hints/hpux.pl b/hints/hpux.pl
-index 959d6fe..9435658 100644
---- a/hints/hpux.pl
-+++ b/hints/hpux.pl
-@@ -6,5 +6,5 @@ use Config;
- unless ($Config{gccversion}) {
- my $optimize = $Config{optimize};
- $optimize =~ s/(^| )[-+]O[2-9]( |$)/$1+O1$2/ and
-- $self->{OPTIMIZE} = $optimize;
-- }
-+ $self->{OPTIMIZE} = $optimize;
-+}
-diff --git a/hints/linux.pl b/hints/linux.pl
-index f6cc0fa..b563567 100644
---- a/hints/linux.pl
-+++ b/hints/linux.pl
-@@ -10,7 +10,7 @@ if ($Config{gccversion} and !$Config{usethreads}) {
- my $optimize = $Config{optimize};
- # works fine with gcc 4 or clang
- if ($optimize =~ s/(^| )-O[3-9]( |$)/$1-O2$2/ and $Config{gccversion} =~ /^[23]\./) {
-- $self->{OPTIMIZE} = $optimize;
-+ $self->{OPTIMIZE} = $optimize;
- }
- }
-
-diff --git a/Storable.pm b/lib/Storable.pm
-similarity index 86%
-rename from Storable.pm
-rename to lib/Storable.pm
-index d531f2b..dce9843 100644
---- a/Storable.pm
-+++ b/lib/Storable.pm
-@@ -8,38 +8,41 @@
- # in the README file that comes with the distribution.
- #
-
--BEGIN { require XSLoader }
--require Exporter;
- package Storable;
-+use strict;
-+
-+use XSLoader ();
-+use Exporter ();
-
- our @ISA = qw(Exporter);
- our @EXPORT = qw(store retrieve);
- our @EXPORT_OK = qw(
-- nstore store_fd nstore_fd fd_retrieve
-- freeze nfreeze thaw
-- dclone
-- retrieve_fd
-- lock_store lock_nstore lock_retrieve
-- file_magic read_magic
-- BLESS_OK TIE_OK FLAGS_COMPAT
-- stack_depth stack_depth_hash
-+ nstore store_fd nstore_fd fd_retrieve
-+ freeze nfreeze thaw
-+ dclone
-+ retrieve_fd
-+ lock_store lock_nstore lock_retrieve
-+ file_magic read_magic
-+ BLESS_OK TIE_OK FLAGS_COMPAT
-+ stack_depth stack_depth_hash
- );
-
- our ($canonical, $forgive_me);
-
- BEGIN {
-- our $VERSION = '3.32';
-+ our $VERSION = '3.37';
- }
-
- our $recursion_limit;
- our $recursion_limit_hash;
-
- $recursion_limit = 512
-- unless defined $recursion_limit;
-+ unless defined $recursion_limit;
- $recursion_limit_hash = 256
-- unless defined $recursion_limit_hash;
-+ unless defined $recursion_limit_hash;
-
- use Carp;
-+use Fcntl qw(LOCK_SH LOCK_EX);
-
- BEGIN {
- if (eval {
-@@ -76,21 +79,6 @@ BEGIN {
- }
- }
-
--#
--# They might miss :flock in Fcntl
--#
--
--BEGIN {
-- if (eval { require Fcntl; 1 } && exists $Fcntl::EXPORT_TAGS{'flock'}) {
-- Fcntl->import(':flock');
-- } else {
-- eval q{
-- sub LOCK_SH () { 1 }
-- sub LOCK_EX () { 2 }
-- };
-- }
--}
--
- sub CLONE {
- # clone context under threads
- Storable::init_perinterp();
-@@ -102,9 +90,9 @@ sub FLAGS_COMPAT () { BLESS_OK | TIE_OK }
-
- # By default restricted hashes are downgraded on earlier perls.
-
--$Storable::flags = FLAGS_COMPAT;
--$Storable::downgrade_restricted = 1;
--$Storable::accept_future_minor = 1;
-+our $flags = FLAGS_COMPAT;
-+our $downgrade_restricted = 1;
-+our $accept_future_minor = 1;
-
- BEGIN { XSLoader::load('Storable') };
-
-@@ -119,27 +107,24 @@ sub show_file_magic {
- # the following lines need to be added to the local magic(5) file,
- # usually either /usr/share/misc/magic or /etc/magic.
- #
--0 string perl-store perl Storable(v0.6) data
-->4 byte >0 (net-order %d)
-->>4 byte &01 (network-ordered)
-->>4 byte =3 (major 1)
-->>4 byte =2 (major 1)
--
--0 string pst0 perl Storable(v0.7) data
-->4 byte >0
-->>4 byte &01 (network-ordered)
-->>4 byte =5 (major 2)
-->>4 byte =4 (major 2)
-->>5 byte >0 (minor %d)
-+0 string perl-store perl Storable(v0.6) data
-+>4 byte >0 (net-order %d)
-+>>4 byte &01 (network-ordered)
-+>>4 byte =3 (major 1)
-+>>4 byte =2 (major 1)
-+
-+0 string pst0 perl Storable(v0.7) data
-+>4 byte >0
-+>>4 byte &01 (network-ordered)
-+>>4 byte =5 (major 2)
-+>>4 byte =4 (major 2)
-+>>5 byte >0 (minor %d)
- EOM
- }
-
- sub file_magic {
-- require IO::File;
--
- my $file = shift;
-- my $fh = IO::File->new;
-- open($fh, "<", $file) || die "Can't open '$file': $!";
-+ open(my $fh, "<", $file) || die "Can't open '$file': $!";
- binmode($fh);
- defined(sysread($fh, my $buf, 32)) || die "Can't read from '$file': $!";
- close($fh);
-@@ -156,53 +141,53 @@ sub read_magic {
- my $buflen = length($buf);
- my $magic;
- if ($buf =~ s/^(pst0|perl-store)//) {
-- $magic = $1;
-- $info{file} = $file || 1;
-+ $magic = $1;
-+ $info{file} = $file || 1;
- }
- else {
-- return undef if $file;
-- $magic = "";
-+ return undef if $file;
-+ $magic = "";
- }
-
- return undef unless length($buf);
-
- my $net_order;
- if ($magic eq "perl-store" && ord(substr($buf, 0, 1)) > 1) {
-- $info{version} = -1;
-- $net_order = 0;
-+ $info{version} = -1;
-+ $net_order = 0;
- }
- else {
-- $buf =~ s/(.)//s;
-- my $major = (ord $1) >> 1;
-- return undef if $major > 4; # sanity (assuming we never go that high)
-- $info{major} = $major;
-- $net_order = (ord $1) & 0x01;
-- if ($major > 1) {
-- return undef unless $buf =~ s/(.)//s;
-- my $minor = ord $1;
-- $info{minor} = $minor;
-- $info{version} = "$major.$minor";
-- $info{version_nv} = sprintf "%d.%03d", $major, $minor;
-- }
-- else {
-- $info{version} = $major;
-- }
-+ $buf =~ s/(.)//s;
-+ my $major = (ord $1) >> 1;
-+ return undef if $major > 4; # sanity (assuming we never go that high)
-+ $info{major} = $major;
-+ $net_order = (ord $1) & 0x01;
-+ if ($major > 1) {
-+ return undef unless $buf =~ s/(.)//s;
-+ my $minor = ord $1;
-+ $info{minor} = $minor;
-+ $info{version} = "$major.$minor";
-+ $info{version_nv} = sprintf "%d.%03d", $major, $minor;
-+ }
-+ else {
-+ $info{version} = $major;
-+ }
- }
- $info{version_nv} ||= $info{version};
- $info{netorder} = $net_order;
-
- unless ($net_order) {
-- return undef unless $buf =~ s/(.)//s;
-- my $len = ord $1;
-- return undef unless length($buf) >= $len;
-- return undef unless $len == 4 || $len == 8; # sanity
-- @info{qw(byteorder intsize longsize ptrsize)}
-- = unpack "a${len}CCC", $buf;
-- (substr $buf, 0, $len + 3) = '';
-- if ($info{version_nv} >= 2.002) {
-- return undef unless $buf =~ s/(.)//s;
-- $info{nvsize} = ord $1;
-- }
-+ return undef unless $buf =~ s/(.)//s;
-+ my $len = ord $1;
-+ return undef unless length($buf) >= $len;
-+ return undef unless $len == 4 || $len == 8; # sanity
-+ @info{qw(byteorder intsize longsize ptrsize)}
-+ = unpack "a${len}CCC", $buf;
-+ (substr $buf, 0, $len + 3) = '';
-+ if ($info{version_nv} >= 2.002) {
-+ return undef unless $buf =~ s/(.)//s;
-+ $info{nvsize} = ord $1;
-+ }
- }
- $info{hdrsize} = $buflen - length($buf);
-
-@@ -262,34 +247,34 @@ sub _store {
- my $self = shift;
- my ($file, $use_locking) = @_;
- logcroak "not a reference" unless ref($self);
-- logcroak "wrong argument number" unless @_ == 2; # No @foo in arglist
-- local *FILE;
-+ logcroak "wrong argument number" unless @_ == 2; # No @foo in arglist
-+ my $FILE;
- if ($use_locking) {
-- open(FILE, ">>", $file) || logcroak "can't write into $file: $!";
-+ open($FILE, ">>", $file) || logcroak "can't write into $file: $!";
- unless (CAN_FLOCK) {
- logcarp
-- "Storable::lock_store: fcntl/flock emulation broken on $^O";
-+ "Storable::lock_store: fcntl/flock emulation broken on $^O";
- return undef;
- }
-- flock(FILE, LOCK_EX) ||
-- logcroak "can't get exclusive lock on $file: $!";
-- truncate FILE, 0;
-+ flock($FILE, LOCK_EX) ||
-+ logcroak "can't get exclusive lock on $file: $!";
-+ truncate $FILE, 0;
- # Unlocking will happen when FILE is closed
- } else {
-- open(FILE, ">", $file) || logcroak "can't create $file: $!";
-+ open($FILE, ">", $file) || logcroak "can't create $file: $!";
- }
-- binmode FILE; # Archaic systems...
-- my $da = $@; # Don't mess if called from exception handler
-+ binmode $FILE; # Archaic systems...
-+ my $da = $@; # Don't mess if called from exception handler
- my $ret;
- # Call C routine nstore or pstore, depending on network order
-- eval { $ret = &$xsptr(*FILE, $self) };
-+ eval { $ret = &$xsptr($FILE, $self) };
- # close will return true on success, so the or short-circuits, the ()
- # expression is true, and for that case the block will only be entered
- # if $@ is true (ie eval failed)
- # if close fails, it returns false, $ret is altered, *that* is (also)
- # false, so the () expression is false, !() is true, and the block is
- # entered.
-- if (!(close(FILE) or undef $ret) || $@) {
-+ if (!(close($FILE) or undef $ret) || $@) {
- unlink($file) or warn "Can't unlink $file: $!\n";
- }
- if ($@) {
-@@ -326,15 +311,20 @@ sub _store_fd {
- my $self = shift;
- my ($file) = @_;
- logcroak "not a reference" unless ref($self);
-- logcroak "too many arguments" unless @_ == 1; # No @foo in arglist
-+ logcroak "too many arguments" unless @_ == 1; # No @foo in arglist
- my $fd = fileno($file);
- logcroak "not a valid file descriptor" unless defined $fd;
-- my $da = $@; # Don't mess if called from exception handler
-+ $file = do {
-+ no strict 'refs';
-+ \*{ $file };
-+ };
-+ my $da = $@; # Don't mess if called from exception handler
- my $ret;
- # Call C routine nstore or pstore, depending on network order
- eval { $ret = &$xsptr($file, $self) };
- logcroak $@ if $@ =~ s/\.?\n$/,/;
-- local $\; print $file ''; # Autoflush the file if wanted
-+ local $\;
-+ print $file ''; # Autoflush the file if wanted
- $@ = $da;
- return $ret;
- }
-@@ -363,8 +353,8 @@ sub _freeze {
- my $xsptr = shift;
- my $self = shift;
- logcroak "not a reference" unless ref($self);
-- logcroak "too many arguments" unless @_ == 0; # No @foo in arglist
-- my $da = $@; # Don't mess if called from exception handler
-+ logcroak "too many arguments" unless @_ == 0; # No @foo in arglist
-+ my $da = $@; # Don't mess if called from exception handler
- my $ret;
- # Call C routine mstore or net_mstore, depending on network order
- eval { $ret = &$xsptr($self) };
-@@ -406,19 +396,19 @@ sub _retrieve {
- $flags = $Storable::flags unless defined $flags;
- my $FILE;
- open($FILE, "<", $file) || logcroak "can't open $file: $!";
-- binmode $FILE; # Archaic systems...
-+ binmode $FILE; # Archaic systems...
- my $self;
-- my $da = $@; # Could be from exception handler
-+ my $da = $@; # Could be from exception handler
- if ($use_locking) {
- unless (CAN_FLOCK) {
- logcarp
-- "Storable::lock_store: fcntl/flock emulation broken on $^O";
-+ "Storable::lock_store: fcntl/flock emulation broken on $^O";
- return undef;
- }
- flock($FILE, LOCK_SH) || logcroak "can't get shared lock on $file: $!";
- # Unlocking will happen when FILE is closed
- }
-- eval { $self = pretrieve($FILE, $flags) }; # Call C routine
-+ eval { $self = pretrieve($FILE, $flags) }; # Call C routine
- close($FILE);
- if ($@) {
- $@ =~ s/\.?\n$/,/ unless ref $@;
-@@ -439,8 +429,8 @@ sub fd_retrieve {
- my $fd = fileno($file);
- logcroak "not a valid file descriptor" unless defined $fd;
- my $self;
-- my $da = $@; # Could be from exception handler
-- eval { $self = pretrieve($file, $flags) }; # Call C routine
-+ my $da = $@; # Could be from exception handler
-+ eval { $self = pretrieve($file, $flags) }; # Call C routine
- if ($@) {
- $@ =~ s/\.?\n$/,/ unless ref $@;
- logcroak $@;
-@@ -449,7 +439,7 @@ sub fd_retrieve {
- return $self;
- }
-
--sub retrieve_fd { &fd_retrieve } # Backward compatibility
-+sub retrieve_fd { &fd_retrieve } # Backward compatibility
-
- #
- # thaw
-@@ -467,8 +457,8 @@ sub thaw {
- $flags = $Storable::flags unless defined $flags;
- return undef unless defined $frozen;
- my $self;
-- my $da = $@; # Could be from exception handler
-- eval { $self = mretrieve($frozen, $flags) };# Call C routine
-+ my $da = $@; # Could be from exception handler
-+ eval { $self = mretrieve($frozen, $flags) }; # Call C routine
- if ($@) {
- $@ =~ s/\.?\n$/,/ unless ref $@;
- logcroak $@;
-@@ -521,7 +511,7 @@ sub _regexp_pattern {
- }
- 1
- EOS
-- or die "Cannot define _regexp_pattern: $@";
-+ or die "Cannot define _regexp_pattern: $@";
- }
-
- 1;
-@@ -533,34 +523,34 @@ Storable - persistence for Perl data structures
-
- =head1 SYNOPSIS
-
-- use Storable;
-- store \%table, 'file';
-- $hashref = retrieve('file');
-+ use Storable;
-+ store \%table, 'file';
-+ $hashref = retrieve('file');
-
-- use Storable qw(nstore store_fd nstore_fd freeze thaw dclone);
-+ use Storable qw(nstore store_fd nstore_fd freeze thaw dclone);
-
-- # Network order
-- nstore \%table, 'file';
-- $hashref = retrieve('file'); # There is NO nretrieve()
-+ # Network order
-+ nstore \%table, 'file';
-+ $hashref = retrieve('file'); # There is NO nretrieve()
-
-- # Storing to and retrieving from an already opened file
-- store_fd \@array, \*STDOUT;
-- nstore_fd \%table, \*STDOUT;
-- $aryref = fd_retrieve(\*SOCKET);
-- $hashref = fd_retrieve(\*SOCKET);
-+ # Storing to and retrieving from an already opened file
-+ store_fd \@array, \*STDOUT;
-+ nstore_fd \%table, \*STDOUT;
-+ $aryref = fd_retrieve(\*SOCKET);
-+ $hashref = fd_retrieve(\*SOCKET);
-
-- # Serializing to memory
-- $serialized = freeze \%table;
-- %table_clone = %{ thaw($serialized) };
-+ # Serializing to memory
-+ $serialized = freeze \%table;
-+ %table_clone = %{ thaw($serialized) };
-
-- # Deep (recursive) cloning
-- $cloneref = dclone($ref);
-+ # Deep (recursive) cloning
-+ $cloneref = dclone($ref);
-
-- # Advisory locking
-- use Storable qw(lock_store lock_nstore lock_retrieve)
-- lock_store \%table, 'file';
-- lock_nstore \%table, 'file';
-- $hashref = lock_retrieve('file');
-+ # Advisory locking
-+ use Storable qw(lock_store lock_nstore lock_retrieve)
-+ lock_store \%table, 'file';
-+ lock_nstore \%table, 'file';
-+ $hashref = lock_retrieve('file');
-
- =head1 DESCRIPTION
-
-@@ -593,8 +583,8 @@ so you will have to do that explicitly if you need those routines.
- The file descriptor you supply must be already opened, for read
- if you're going to retrieve and for write if you wish to store.
-
-- store_fd(\%table, *STDOUT) || die "can't store to stdout\n";
-- $hashref = fd_retrieve(*STDIN);
-+ store_fd(\%table, *STDOUT) || die "can't store to stdout\n";
-+ $hashref = fd_retrieve(*STDIN);
-
- You can also store data in network order to allow easy sharing across
- multiple platforms, or when storing on a socket known to be remotely
-@@ -1018,7 +1008,7 @@ stay shared.
-
- In the above [A, C] example, the C<STORABLE_freeze> hook could return:
-
-- ("something", $self->{B})
-+ ("something", $self->{B})
-
- and the B part would be serialized by the engine. In C<STORABLE_thaw>, you
- would get back the reference to the B' object, deserialized for you.
-@@ -1152,48 +1142,48 @@ such.
-
- Here are some code samples showing a possible usage of Storable:
-
-- use Storable qw(store retrieve freeze thaw dclone);
-+ use Storable qw(store retrieve freeze thaw dclone);
-
-- %color = ('Blue' => 0.1, 'Red' => 0.8, 'Black' => 0, 'White' => 1);
-+ %color = ('Blue' => 0.1, 'Red' => 0.8, 'Black' => 0, 'White' => 1);
-
-- store(\%color, 'mycolors') or die "Can't store %a in mycolors!\n";
-+ store(\%color, 'mycolors') or die "Can't store %a in mycolors!\n";
-
-- $colref = retrieve('mycolors');
-- die "Unable to retrieve from mycolors!\n" unless defined $colref;
-- printf "Blue is still %lf\n", $colref->{'Blue'};
-+ $colref = retrieve('mycolors');
-+ die "Unable to retrieve from mycolors!\n" unless defined $colref;
-+ printf "Blue is still %lf\n", $colref->{'Blue'};
-
-- $colref2 = dclone(\%color);
-+ $colref2 = dclone(\%color);
-
-- $str = freeze(\%color);
-- printf "Serialization of %%color is %d bytes long.\n", length($str);
-- $colref3 = thaw($str);
-+ $str = freeze(\%color);
-+ printf "Serialization of %%color is %d bytes long.\n", length($str);
-+ $colref3 = thaw($str);
-
- which prints (on my machine):
-
-- Blue is still 0.100000
-- Serialization of %color is 102 bytes long.
-+ Blue is still 0.100000
-+ Serialization of %color is 102 bytes long.
-
- Serialization of CODE references and deserialization in a safe
- compartment:
-
- =for example begin
-
-- use Storable qw(freeze thaw);
-- use Safe;
-- use strict;
-- my $safe = new Safe;
-- # because of opcodes used in "use strict":
-- $safe->permit(qw(:default require));
-- local $Storable::Deparse = 1;
-- local $Storable::Eval = sub { $safe->reval($_[0]) };
-- my $serialized = freeze(sub { 42 });
-- my $code = thaw($serialized);
-- $code->() == 42;
-+ use Storable qw(freeze thaw);
-+ use Safe;
-+ use strict;
-+ my $safe = Safe->new;
-+ # because of opcodes used in "use strict":
-+ $safe->permit(qw(:default require));
-+ local $Storable::Deparse = 1;
-+ local $Storable::Eval = sub { $safe->reval($_[0]) };
-+ my $serialized = freeze(sub { 42 });
-+ my $code = thaw($serialized);
-+ $code->() == 42;
-
- =for example end
-
- =for example_testing
-- is( $code->(), 42 );
-+ is( $code->(), 42 );
-
- =head1 SECURITY WARNING
-
-@@ -1400,23 +1390,23 @@ reading them.
-
- Thank you to (in chronological order):
-
-- Jarkko Hietaniemi <jhi@iki.fi>
-- Ulrich Pfeifer <pfeifer@charly.informatik.uni-dortmund.de>
-- Benjamin A. Holzman <bholzman@earthlink.net>
-- Andrew Ford <A.Ford@ford-mason.co.uk>
-- Gisle Aas <gisle@aas.no>
-- Jeff Gresham <gresham_jeffrey@jpmorgan.com>
-- Murray Nesbitt <murray@activestate.com>
-- Marc Lehmann <pcg@opengroup.org>
-- Justin Banks <justinb@wamnet.com>
-- Jarkko Hietaniemi <jhi@iki.fi> (AGAIN, as perl 5.7.0 Pumpkin!)
-- Salvador Ortiz Garcia <sog@msg.com.mx>
-- Dominic Dunlop <domo@computer.org>
-- Erik Haugan <erik@solbors.no>
-- Benjamin A. Holzman <ben.holzman@grantstreet.com>
-- Reini Urban <rurban@cpan.org>
-- Todd Rinaldo <toddr@cpanel.net>
-- Aaron Crane <arc@cpan.org>
-+ Jarkko Hietaniemi <jhi@iki.fi>
-+ Ulrich Pfeifer <pfeifer@charly.informatik.uni-dortmund.de>
-+ Benjamin A. Holzman <bholzman@earthlink.net>
-+ Andrew Ford <A.Ford@ford-mason.co.uk>
-+ Gisle Aas <gisle@aas.no>
-+ Jeff Gresham <gresham_jeffrey@jpmorgan.com>
-+ Murray Nesbitt <murray@activestate.com>
-+ Marc Lehmann <pcg@opengroup.org>
-+ Justin Banks <justinb@wamnet.com>
-+ Jarkko Hietaniemi <jhi@iki.fi> (AGAIN, as perl 5.7.0 Pumpkin!)
-+ Salvador Ortiz Garcia <sog@msg.com.mx>
-+ Dominic Dunlop <domo@computer.org>
-+ Erik Haugan <erik@solbors.no>
-+ Benjamin A. Holzman <ben.holzman@grantstreet.com>
-+ Reini Urban <rurban@cpan.org>
-+ Todd Rinaldo <toddr@cpanel.net>
-+ Aaron Crane <arc@cpan.org>
-
- for their bug reports, suggestions and contributions.
-
-diff --git a/stacksize b/stacksize
-index 2896684..90739d4 100644
---- a/stacksize
-+++ b/stacksize
-@@ -48,9 +48,9 @@ if ($^O eq "MSWin32") {
- require Win32;
- my ($str, $major, $minor) = Win32::GetOSVersion();
- if ($major < 6 || $major == 6 && $minor < 1) {
-- print "# Using defaults for older Win32\n";
-- write_limits(500, 256);
-- exit;
-+ print "# Using defaults for older Win32\n";
-+ write_limits(500, 256);
-+ exit;
- }
- }
- my ($n, $good, $bad, $found) =
-diff --git a/t/CVE-2015-1592.t b/t/CVE-2015-1592.t
-index a71f44c..c6cdeaf 100644
---- a/t/CVE-2015-1592.t
-+++ b/t/CVE-2015-1592.t
-@@ -1,7 +1,8 @@
--#!/usr/bin/perl
-+#!./perl
-
- use strict;
- use warnings;
-+
- use Test::More;
- use Storable qw(freeze thaw);
- plan tests => 1;
-@@ -17,5 +18,5 @@ my $frozen = freeze($x);
- local $SIG{__WARN__} = sub { $warnings .= "@_" };
- thaw($frozen);
- like($warnings, qr/SECURITY: Movable-Type CVE-2015-1592 Storable metasploit attack/,
-- 'Detect CVE-2015-1592');
-+ 'Detect CVE-2015-1592');
- }
-diff --git a/t/HAS_ATTACH.pm b/t/HAS_ATTACH.pm
-deleted file mode 100644
-index 72855aa..0000000
---- a/t/HAS_ATTACH.pm
-+++ /dev/null
-@@ -1,10 +0,0 @@
--package HAS_ATTACH;
--
--sub STORABLE_attach {
-- ++$attached_count;
-- return bless [], 'HAS_ATTACH';
--}
--
--++$loaded_count;
--
--1;
-diff --git a/t/HAS_HOOK.pm b/t/HAS_HOOK.pm
-deleted file mode 100644
-index 979a6a2..0000000
---- a/t/HAS_HOOK.pm
-+++ /dev/null
-@@ -1,9 +0,0 @@
--package HAS_HOOK;
--
--sub STORABLE_thaw {
-- ++$thawed_count;
--}
--
--++$loaded_count;
--
--1;
-diff --git a/t/HAS_OVERLOAD.pm b/t/HAS_OVERLOAD.pm
-deleted file mode 100644
-index 8a622a4..0000000
---- a/t/HAS_OVERLOAD.pm
-+++ /dev/null
-@@ -1,14 +0,0 @@
--package HAS_OVERLOAD;
--
--use overload
-- '""' => sub { ${$_[0]} }, fallback => 1;
--
--sub make {
-- my $package = shift;
-- my $value = shift;
-- bless \$value, $package;
--}
--
--++$loaded_count;
--
--1;
-diff --git a/t/attach.t b/t/attach.t
-index 5ffdae5..5aae156 100644
---- a/t/attach.t
-+++ b/t/attach.t
-@@ -2,41 +2,34 @@
- #
- # This file tests that Storable correctly uses STORABLE_attach hooks
-
--sub BEGIN {
-- unshift @INC, 't';
-- unshift @INC, 't/compat' if $] < 5.006002;
-- require Config; import Config;
-- if ($ENV{PERL_CORE} and $Config{'extensions'} !~ /\bStorable\b/) {
-- print "1..0 # Skip: Storable was not built\n";
-- exit 0;
-- }
--}
-+use strict;
-+use warnings;
-
- use Test::More tests => 3;
- use Storable ();
-
- {
-- my $destruct_cnt = 0;
-- my $obj = bless {data => 'ok'}, 'My::WithDestructor';
-- my $target = Storable::thaw( Storable::freeze( $obj ) );
-- is( $target->{data}, 'ok', 'We got correct object after freeze/thaw' );
-- is( $destruct_cnt, 0, 'No tmp objects created by Storable' );
-- undef $obj;
-- undef $target;
-- is( $destruct_cnt, 2, 'Only right objects destroyed at the end' );
--
-- package My::WithDestructor;
--
-- sub STORABLE_freeze {
-- my ($self, $clone) = @_;
-- return $self->{data};
-- }
--
-- sub STORABLE_attach {
-- my ($class, $clone, $string) = @_;
-- return bless {data => $string}, 'My::WithDestructor';
-- }
--
-- sub DESTROY { $destruct_cnt++; }
-+ my $destruct_cnt = 0;
-+ my $obj = bless {data => 'ok'}, 'My::WithDestructor';
-+ my $target = Storable::thaw( Storable::freeze( $obj ) );
-+ is( $target->{data}, 'ok', 'We got correct object after freeze/thaw' );
-+ is( $destruct_cnt, 0, 'No tmp objects created by Storable' );
-+ undef $obj;
-+ undef $target;
-+ is( $destruct_cnt, 2, 'Only right objects destroyed at the end' );
-+
-+ package My::WithDestructor;
-+
-+ sub STORABLE_freeze {
-+ my ($self, $clone) = @_;
-+ return $self->{data};
-+ }
-+
-+ sub STORABLE_attach {
-+ my ($class, $clone, $string) = @_;
-+ return bless {data => $string}, 'My::WithDestructor';
-+ }
-+
-+ sub DESTROY { $destruct_cnt++; }
- }
-
-diff --git a/t/attach_errors.t b/t/attach_errors.t
-index e2be39d..d99366c 100644
---- a/t/attach_errors.t
-+++ b/t/attach_errors.t
-@@ -12,22 +12,15 @@
- # This file tests several known-error cases relating to STORABLE_attach, in
- # which Storable should (correctly) throw errors.
-
--sub BEGIN {
-- unshift @INC, 't';
-- unshift @INC, 't/compat' if $] < 5.006002;
-- require Config; import Config;
-- if ($ENV{PERL_CORE} and $Config{'extensions'} !~ /\bStorable\b/) {
-- print "1..0 # Skip: Storable was not built\n";
-- exit 0;
-- }
--}
-+use strict;
-+use warnings;
-
- use Test::More tests => 40;
- use Storable ();
-
- #####################################################################
- # Error 1
--#
-+#
- # Classes that implement STORABLE_thaw _cannot_ have references
- # returned by their STORABLE_freeze method. When they do, Storable
- # should throw an exception
-@@ -36,54 +29,54 @@ use Storable ();
-
- # Good Case - should not die
- {
-- my $goodfreeze = bless {}, 'My::GoodFreeze';
-- my $frozen = undef;
-- eval {
-- $frozen = Storable::freeze( $goodfreeze );
-- };
-- ok( ! $@, 'Storable does not die when STORABLE_freeze does not return references' );
-- ok( $frozen, 'Storable freezes to a string successfully' );
--
-- package My::GoodFreeze;
--
-- sub STORABLE_freeze {
-- my ($self, $clone) = @_;
--
-- # Illegally include a reference in this return
-- return ('');
-- }
--
-- sub STORABLE_attach {
-- my ($class, $clone, $string) = @_;
-- return bless { }, 'My::GoodFreeze';
-- }
-+ my $goodfreeze = bless {}, 'My::GoodFreeze';
-+ my $frozen = undef;
-+ eval {
-+ $frozen = Storable::freeze( $goodfreeze );
-+ };
-+ ok( ! $@, 'Storable does not die when STORABLE_freeze does not return references' );
-+ ok( $frozen, 'Storable freezes to a string successfully' );
-+
-+ package My::GoodFreeze;
-+
-+ sub STORABLE_freeze {
-+ my ($self, $clone) = @_;
-+
-+ # Illegally include a reference in this return
-+ return ('');
-+ }
-+
-+ sub STORABLE_attach {
-+ my ($class, $clone, $string) = @_;
-+ return bless { }, 'My::GoodFreeze';
-+ }
- }
-
-
-
- # Error Case - should die on freeze
- {
-- my $badfreeze = bless {}, 'My::BadFreeze';
-- eval {
-- Storable::freeze( $badfreeze );
-- };
-- ok( $@, 'Storable dies correctly when STORABLE_freeze returns a reference' );
-- # Check for a unique substring of the error message
-- ok( $@ =~ /cannot return references/, 'Storable dies with the expected error' );
--
-- package My::BadFreeze;
--
-- sub STORABLE_freeze {
-- my ($self, $clone) = @_;
--
-- # Illegally include a reference in this return
-- return ('', []);
-- }
--
-- sub STORABLE_attach {
-- my ($class, $clone, $string) = @_;
-- return bless { }, 'My::BadFreeze';
-- }
-+ my $badfreeze = bless {}, 'My::BadFreeze';
-+ eval {
-+ Storable::freeze( $badfreeze );
-+ };
-+ ok( $@, 'Storable dies correctly when STORABLE_freeze returns a reference' );
-+ # Check for a unique substring of the error message
-+ ok( $@ =~ /cannot return references/, 'Storable dies with the expected error' );
-+
-+ package My::BadFreeze;
-+
-+ sub STORABLE_freeze {
-+ my ($self, $clone) = @_;
-+
-+ # Illegally include a reference in this return
-+ return ('', []);
-+ }
-+
-+ sub STORABLE_attach {
-+ my ($class, $clone, $string) = @_;
-+ return bless { }, 'My::BadFreeze';
-+ }
- }
-
-
-@@ -100,73 +93,73 @@ use Storable ();
-
- # Good Case - should not die
- {
-- my $goodthaw = bless {}, 'My::GoodThaw';
-- my $frozen = undef;
-- eval {
-- $frozen = Storable::freeze( $goodthaw );
-- };
-- ok( $frozen, 'Storable freezes to a string as expected' );
-- my $thawed = eval {
-- Storable::thaw( $frozen );
-- };
-- isa_ok( $thawed, 'My::GoodThaw' );
-- is( $thawed->{foo}, 'bar', 'My::GoodThaw thawed correctly as expected' );
--
-- package My::GoodThaw;
--
-- sub STORABLE_freeze {
-- my ($self, $clone) = @_;
--
-- return ('');
-- }
--
-- sub STORABLE_attach {
-- my ($class, $clone, $string) = @_;
-- return bless { 'foo' => 'bar' }, 'My::GoodThaw';
-- }
-+ my $goodthaw = bless {}, 'My::GoodThaw';
-+ my $frozen = undef;
-+ eval {
-+ $frozen = Storable::freeze( $goodthaw );
-+ };
-+ ok( $frozen, 'Storable freezes to a string as expected' );
-+ my $thawed = eval {
-+ Storable::thaw( $frozen );
-+ };
-+ isa_ok( $thawed, 'My::GoodThaw' );
-+ is( $thawed->{foo}, 'bar', 'My::GoodThaw thawed correctly as expected' );
-+
-+ package My::GoodThaw;
-+
-+ sub STORABLE_freeze {
-+ my ($self, $clone) = @_;
-+
-+ return ('');
-+ }
-+
-+ sub STORABLE_attach {
-+ my ($class, $clone, $string) = @_;
-+ return bless { 'foo' => 'bar' }, 'My::GoodThaw';
-+ }
- }
-
-
-
- # Bad Case - should die on thaw
- {
-- # Create the frozen string normally
-- my $badthaw = bless { }, 'My::BadThaw';
-- my $frozen = undef;
-- eval {
-- $frozen = Storable::freeze( $badthaw );
-- };
-- ok( $frozen, 'BadThaw was frozen with references correctly' );
--
-- # Set up the error condition by deleting the normal STORABLE_thaw,
-- # and creating a STORABLE_attach.
-- *My::BadThaw::STORABLE_attach = *My::BadThaw::STORABLE_thaw;
-- *My::BadThaw::STORABLE_attach = *My::BadThaw::STORABLE_thaw; # Suppress a warning
-- delete ${'My::BadThaw::'}{STORABLE_thaw};
--
-- # Trigger the error condition
-- my $thawed = undef;
-- eval {
-- $thawed = Storable::thaw( $frozen );
-- };
-- ok( $@, 'My::BadThaw object dies when thawing as expected' );
-- # Check for a snippet from the error message
-- ok( $@ =~ /unexpected references/, 'Dies with the expected error message' );
--
-- package My::BadThaw;
--
-- sub STORABLE_freeze {
-- my ($self, $clone) = @_;
--
-- return ('', []);
-- }
--
-- # Start with no STORABLE_attach method so we can get a
-- # frozen object-containing-a-reference into the freeze string.
-- sub STORABLE_thaw {
-- my ($class, $clone, $string) = @_;
-- return bless { 'foo' => 'bar' }, 'My::BadThaw';
-- }
-+ # Create the frozen string normally
-+ my $badthaw = bless { }, 'My::BadThaw';
-+ my $frozen = undef;
-+ eval {
-+ $frozen = Storable::freeze( $badthaw );
-+ };
-+ ok( $frozen, 'BadThaw was frozen with references correctly' );
-+
-+ # Set up the error condition by deleting the normal STORABLE_thaw,
-+ # and creating a STORABLE_attach.
-+ *My::BadThaw::STORABLE_attach = *My::BadThaw::STORABLE_thaw;
-+ *My::BadThaw::STORABLE_attach = *My::BadThaw::STORABLE_thaw; # Suppress a warning
-+ delete $My::BadThaw::{STORABLE_thaw};
-+
-+ # Trigger the error condition
-+ my $thawed = undef;
-+ eval {
-+ $thawed = Storable::thaw( $frozen );
-+ };
-+ ok( $@, 'My::BadThaw object dies when thawing as expected' );
-+ # Check for a snippet from the error message
-+ ok( $@ =~ /unexpected references/, 'Dies with the expected error message' );
-+
-+ package My::BadThaw;
-+
-+ sub STORABLE_freeze {
-+ my ($self, $clone) = @_;
-+
-+ return ('', []);
-+ }
-+
-+ # Start with no STORABLE_attach method so we can get a
-+ # frozen object-containing-a-reference into the freeze string.
-+ sub STORABLE_thaw {
-+ my ($class, $clone, $string) = @_;
-+ return bless { 'foo' => 'bar' }, 'My::BadThaw';
-+ }
- }
-
-
-@@ -181,56 +174,56 @@ use Storable ();
-
- # Good Case - should not die
- {
-- my $goodattach = bless { }, 'My::GoodAttach';
-- my $frozen = Storable::freeze( $goodattach );
-- ok( $frozen, 'My::GoodAttach return as expected' );
-- my $thawed = eval {
-- Storable::thaw( $frozen );
-- };
-- isa_ok( $thawed, 'My::GoodAttach' );
-- is( ref($thawed), 'My::GoodAttach::Subclass',
-- 'The slightly-tricky good "returns a subclass" case returns as expected' );
--
-- package My::GoodAttach;
--
-- sub STORABLE_freeze {
-- my ($self, $cloning) = @_;
-- return ('');
-- }
--
-- sub STORABLE_attach {
-- my ($class, $cloning, $string) = @_;
--
-- return bless { }, 'My::GoodAttach::Subclass';
-- }
--
-- package My::GoodAttach::Subclass;
--
-- BEGIN {
-- @ISA = 'My::GoodAttach';
-- }
-+ my $goodattach = bless { }, 'My::GoodAttach';
-+ my $frozen = Storable::freeze( $goodattach );
-+ ok( $frozen, 'My::GoodAttach return as expected' );
-+ my $thawed = eval {
-+ Storable::thaw( $frozen );
-+ };
-+ isa_ok( $thawed, 'My::GoodAttach' );
-+ is( ref($thawed), 'My::GoodAttach::Subclass',
-+ 'The slightly-tricky good "returns a subclass" case returns as expected' );
-+
-+ package My::GoodAttach;
-+
-+ sub STORABLE_freeze {
-+ my ($self, $cloning) = @_;
-+ return ('');
-+ }
-+
-+ sub STORABLE_attach {
-+ my ($class, $cloning, $string) = @_;
-+
-+ return bless { }, 'My::GoodAttach::Subclass';
-+ }
-+
-+ package My::GoodAttach::Subclass;
-+
-+ BEGIN {
-+ our @ISA = 'My::GoodAttach';
-+ }
- }
-
- # Good case - multiple references to the same object should be attached properly
- {
-- my $obj = bless { id => 111 }, 'My::GoodAttach::MultipleReferences';
-+ my $obj = bless { id => 111 }, 'My::GoodAttach::MultipleReferences';
- my $arr = [$obj];
-
- push @$arr, $obj;
-
-- my $frozen = Storable::freeze($arr);
-+ my $frozen = Storable::freeze($arr);
-
-- ok( $frozen, 'My::GoodAttach return as expected' );
-+ ok( $frozen, 'My::GoodAttach return as expected' );
-
-- my $thawed = eval {
-- Storable::thaw( $frozen );
-- };
-+ my $thawed = eval {
-+ Storable::thaw( $frozen );
-+ };
-
-- isa_ok( $thawed->[0], 'My::GoodAttach::MultipleReferences' );
-- isa_ok( $thawed->[1], 'My::GoodAttach::MultipleReferences' );
-+ isa_ok( $thawed->[0], 'My::GoodAttach::MultipleReferences' );
-+ isa_ok( $thawed->[1], 'My::GoodAttach::MultipleReferences' );
-
-- is($thawed->[0], $thawed->[1], 'References to the same object are attached properly');
-- is($thawed->[1]{id}, $obj->{id}, 'Object with multiple references attached properly');
-+ is($thawed->[0], $thawed->[1], 'References to the same object are attached properly');
-+ is($thawed->[1]{id}, $obj->{id}, 'Object with multiple references attached properly');
-
- package My::GoodAttach::MultipleReferences;
-
-@@ -250,47 +243,47 @@ use Storable ();
-
- # Bad Cases - die on thaw
- {
-- my $returnvalue = undef;
--
-- # Create and freeze the object
-- my $badattach = bless { }, 'My::BadAttach';
-- my $frozen = Storable::freeze( $badattach );
-- ok( $frozen, 'BadAttach freezes as expected' );
--
-- # Try a number of different return values, all of which
-- # should cause Storable to die.
-- my @badthings = (
-- undef,
-- '',
-- 1,
-- [],
-- {},
-- \"foo",
-- (bless { }, 'Foo'),
-- );
-- foreach ( @badthings ) {
-- $returnvalue = $_;
--
-- my $thawed = undef;
-- eval {
-- $thawed = Storable::thaw( $frozen );
-- };
-- ok( $@, 'BadAttach dies on thaw' );
-- ok( $@ =~ /STORABLE_attach did not return a My::BadAttach object/,
-- 'BadAttach dies on thaw with the expected error message' );
-- is( $thawed, undef, 'Double checking $thawed was not set' );
-- }
--
-- package My::BadAttach;
--
-- sub STORABLE_freeze {
-- my ($self, $cloning) = @_;
-- return ('');
-- }
--
-- sub STORABLE_attach {
-- my ($class, $cloning, $string) = @_;
--
-- return $returnvalue;
-- }
-+ my $returnvalue = undef;
-+
-+ # Create and freeze the object
-+ my $badattach = bless { }, 'My::BadAttach';
-+ my $frozen = Storable::freeze( $badattach );
-+ ok( $frozen, 'BadAttach freezes as expected' );
-+
-+ # Try a number of different return values, all of which
-+ # should cause Storable to die.
-+ my @badthings = (
-+ undef,
-+ '',
-+ 1,
-+ [],
-+ {},
-+ \"foo",
-+ (bless { }, 'Foo'),
-+ );
-+ foreach ( @badthings ) {
-+ $returnvalue = $_;
-+
-+ my $thawed = undef;
-+ eval {
-+ $thawed = Storable::thaw( $frozen );
-+ };
-+ ok( $@, 'BadAttach dies on thaw' );
-+ ok( $@ =~ /STORABLE_attach did not return a My::BadAttach object/,
-+ 'BadAttach dies on thaw with the expected error message' );
-+ is( $thawed, undef, 'Double checking $thawed was not set' );
-+ }
-+
-+ package My::BadAttach;
-+
-+ sub STORABLE_freeze {
-+ my ($self, $cloning) = @_;
-+ return ('');
-+ }
-+
-+ sub STORABLE_attach {
-+ my ($class, $cloning, $string) = @_;
-+
-+ return $returnvalue;
-+ }
- }
-diff --git a/t/attach_singleton.t b/t/attach_singleton.t
-index c555c5c..ca8833a 100644
---- a/t/attach_singleton.t
-+++ b/t/attach_singleton.t
-@@ -9,15 +9,8 @@
- # Tests freezing/thawing structures containing Singleton objects,
- # which should see both structs pointing to the same object.
-
--sub BEGIN {
-- unshift @INC, 't';
-- unshift @INC, 't/compat' if $] < 5.006002;
-- require Config; import Config;
-- if ($ENV{PERL_CORE} and $Config{'extensions'} !~ /\bStorable\b/) {
-- print "1..0 # Skip: Storable was not built\n";
-- exit 0;
-- }
--}
-+use strict;
-+use warnings;
-
- use Test::More tests => 16;
- use Storable ();
-@@ -66,25 +59,25 @@ package My::Singleton;
- my $SINGLETON = undef;
-
- sub new {
-- $SINGLETON or
-- $SINGLETON = bless { value => 'Hello World!' }, $_[0];
-+ $SINGLETON or
-+ $SINGLETON = bless { value => 'Hello World!' }, $_[0];
- }
-
- sub STORABLE_freeze {
-- my $self = shift;
-+ my $self = shift;
-
-- # We don't actually need to return anything, but provide a null string
-- # to avoid the null-list-return behaviour.
-- return ('foo');
-+ # We don't actually need to return anything, but provide a null string
-+ # to avoid the null-list-return behaviour.
-+ return ('foo');
- }
-
- sub STORABLE_attach {
-- my ($class, $clone, $string) = @_;
-- Test::More::ok( ! ref $class, 'STORABLE_attach passed class, and not an object' );
-- Test::More::is( $class, 'My::Singleton', 'STORABLE_attach is passed the correct class name' );
-- Test::More::is( $clone, 0, 'We are not in a dclone' );
-- Test::More::is( $string, 'foo', 'STORABLE_attach gets the string back' );
--
-- # Get the Singleton object and return it
-- return $class->new;
-+ my ($class, $clone, $string) = @_;
-+ Test::More::ok( ! ref $class, 'STORABLE_attach passed class, and not an object' );
-+ Test::More::is( $class, 'My::Singleton', 'STORABLE_attach is passed the correct class name' );
-+ Test::More::is( $clone, 0, 'We are not in a dclone' );
-+ Test::More::is( $string, 'foo', 'STORABLE_attach gets the string back' );
-+
-+ # Get the Singleton object and return it
-+ return $class->new;
- }
-diff --git a/t/blessed.t b/t/blessed.t
-index dea569b..3930040 100644
---- a/t/blessed.t
-+++ b/t/blessed.t
-@@ -1,51 +1,48 @@
- #!./perl
- #
- # Copyright (c) 1995-2000, Raphael Manfredi
--#
-+#
- # You may redistribute only under the same terms as Perl 5, as specified
- # in the README file that comes with the distribution.
- #
-
-+my %immortals;
-+
- BEGIN {
- # Do this as the very first thing, in order to avoid problems with the
- # PADTMP flag on pre-5.19.3 threaded Perls. On those Perls, compiling
- # code that contains a constant-folded canonical truth value breaks
- # the ability to take a reference to that canonical truth value later.
-- $::false = 0;
-- %::immortals = (
-- 'u' => \undef,
-- 'y' => \!$::false,
-- 'n' => \!!$::false,
-+ my $false = 0;
-+ %immortals = (
-+ 'u' => \undef,
-+ 'y' => \!$false,
-+ 'n' => \!!$false,
- );
- }
-
--sub BEGIN {
-- if ($ENV{PERL_CORE}) {
-- chdir 'dist/Storable' if -d 'dist/Storable';
-- @INC = ('../../lib', 't');
-- } else {
-- unshift @INC, 't';
-- unshift @INC, 't/compat' if $] < 5.006002;
-- }
-- require Config; import Config;
-- if ($ENV{PERL_CORE} and $Config{'extensions'} !~ /\bStorable\b/) {
-- print "1..0 # Skip: Storable was not built\n";
-- exit 0;
-- }
-+use strict;
-+use warnings;
-+
-+BEGIN {
-+ unshift @INC, 't/lib';
- }
-
-+use Config;
- use Test::More;
-+use STTestLib qw(tempfilename);
-
- use Storable qw(freeze thaw store retrieve fd_retrieve);
-
--%::weird_refs =
-- (REF => \(my $aref = []),
-- VSTRING => \(my $vstring = v1.2.3),
-- 'long VSTRING' => \(my $lvstring = eval "v" . 0 x 300),
-- LVALUE => \(my $substr = substr((my $str = "foo"), 0, 3)));
-+my %weird_refs = (
-+ REF => \(my $aref = []),
-+ VSTRING => \(my $vstring = v1.2.3),
-+ 'long VSTRING' => \(my $lvstring = eval "v" . 0 x 300),
-+ LVALUE => \(my $substr = substr((my $str = "foo"), 0, 3))
-+);
-
- my $test = 18;
--my $tests = $test + 41 + (2 * 6 * keys %::immortals) + (3 * keys %::weird_refs);
-+my $tests = $test + 41 + (2 * 6 * keys %immortals) + (3 * keys %weird_refs);
- plan(tests => $tests);
-
- package SHORT_NAME;
-@@ -57,36 +54,36 @@ package SHORT_NAME_WITH_HOOK;
- sub make { bless [], shift }
-
- sub STORABLE_freeze {
-- my $self = shift;
-- return ("", $self);
-+ my $self = shift;
-+ return ("", $self);
- }
-
- sub STORABLE_thaw {
-- my $self = shift;
-- my $cloning = shift;
-- my ($x, $obj) = @_;
-- die "STORABLE_thaw" unless $obj eq $self;
-+ my $self = shift;
-+ my $cloning = shift;
-+ my ($x, $obj) = @_;
-+ die "STORABLE_thaw" unless $obj eq $self;
- }
-
- package main;
-
- # Still less than 256 bytes, so long classname logic not fully exercised
- # Identifier too long - 5.004
--# parser.h: char tokenbuf[256]: cperl5.24 => 1024
-+# parser.h: char tokenbuf[256]: cperl5.24 => 1024
- my $m = ($Config{usecperl} and $] >= 5.024) ? 56 : 14;
- my $longname = "LONG_NAME_" . ('xxxxxxxxxxxxx::' x $m) . "final";
-
- eval <<EOC;
- package $longname;
-
--\@ISA = ("SHORT_NAME");
-+our \@ISA = ("SHORT_NAME");
- EOC
- is($@, '');
-
- eval <<EOC;
- package ${longname}_WITH_HOOK;
-
--\@ISA = ("SHORT_NAME_WITH_HOOK");
-+our \@ISA = ("SHORT_NAME_WITH_HOOK");
- EOC
- is($@, '');
-
-@@ -136,7 +133,7 @@ sub STORABLE_freeze {
- # Some reference some number of times.
- my $self = shift;
- my ($what, $times) = @$self;
-- return ("$what$times", ($::immortals{$what}) x $times);
-+ return ("$what$times", ($immortals{$what}) x $times);
- }
-
- sub STORABLE_thaw {
-@@ -146,7 +143,7 @@ sub STORABLE_thaw {
- my ($what, $times) = $x =~ /(.)(\d+)/;
- die "'$x' didn't match" unless defined $times;
- main::is(scalar @refs, $times);
-- my $expect = $::immortals{$what};
-+ my $expect = $immortals{$what};
- die "'$x' did not give a reference" unless ref $expect;
- my $fail;
- foreach (@refs) {
-@@ -162,37 +159,37 @@ package main;
- # $Storable::DEBUGME = 1;
- my $count;
- foreach $count (1..3) {
-- my $immortal;
-- foreach $immortal (keys %::immortals) {
-- print "# $immortal x $count\n";
-- my $i = RETURNS_IMMORTALS->make ($immortal, $count);
--
-- my $f = freeze ($i);
-- TODO: {
-- # ref sv_true is not always sv_true, at least in older threaded perls.
-- local $TODO = "Some 5.10/12 do not preserve ref identity with freeze \\(1 == 1)"
-- if !defined($f) and $] < 5.013 and $] > 5.009 and $immortal eq 'y';
-- isnt($f, undef);
-+ my $immortal;
-+ foreach $immortal (keys %immortals) {
-+ print "# $immortal x $count\n";
-+ my $i = RETURNS_IMMORTALS->make ($immortal, $count);
-+
-+ my $f = freeze ($i);
-+ TODO: {
-+ # ref sv_true is not always sv_true, at least in older threaded perls.
-+ local $TODO = "Some 5.10/12 do not preserve ref identity with freeze \\(1 == 1)"
-+ if !defined($f) and $] < 5.013 and $] > 5.009 and $immortal eq 'y';
-+ isnt($f, undef);
-+ }
-+ my $t = thaw $f;
-+ pass("thaw didn't crash");
- }
-- my $t = thaw $f;
-- pass("thaw didn't crash");
-- }
- }
-
- # Test automatic require of packages to find thaw hook.
-
- package HAS_HOOK;
-
--$loaded_count = 0;
--$thawed_count = 0;
-+our $loaded_count = 0;
-+our $thawed_count = 0;
-
- sub make {
-- bless [];
-+ bless [];
- }
-
- sub STORABLE_freeze {
-- my $self = shift;
-- return '';
-+ my $self = shift;
-+ return '';
- }
-
- package main;
-@@ -220,26 +217,29 @@ is(ref $t, 'HAS_HOOK');
- {
- package STRESS_THE_STACK;
-
-+ our $freeze_count = 0;
-+ our $thaw_count = 0;
-+
- my $stress;
- sub make {
-- bless [];
-+ bless [];
- }
-
- sub no_op {
-- 0;
-+ 0;
- }
-
- sub STORABLE_freeze {
-- my $self = shift;
-- ++$freeze_count;
-- return no_op(1..(++$stress * 2000)) ? die "can't happen" : '';
-+ my $self = shift;
-+ ++$freeze_count;
-+ return no_op(1..(++$stress * 2000)) ? die "can't happen" : '';
- }
-
- sub STORABLE_thaw {
-- my $self = shift;
-- ++$thaw_count;
-- no_op(1..(++$stress * 2000)) && die "can't happen";
-- return;
-+ my $self = shift;
-+ ++$thaw_count;
-+ no_op(1..(++$stress * 2000)) && die "can't happen";
-+ return;
- }
- }
-
-@@ -257,10 +257,7 @@ is($STRESS_THE_STACK::thaw_count, 1);
- isnt($t, undef);
- is(ref $t, 'STRESS_THE_STACK');
-
--my $file = "storable-testfile.$$";
--die "Temporary file '$file' already exists" if -e $file;
--
--END { while (-f $file) {unlink $file or die "Can't unlink '$file': $!" }}
-+my $file = tempfilename();
-
- $STRESS_THE_STACK::freeze_count = 0;
- $STRESS_THE_STACK::thaw_count = 0;
-@@ -282,7 +279,7 @@ is(ref $t, 'STRESS_THE_STACK');
- my $o= {str=>bless {}};
- my $f= ::freeze($o);
- ::is ref $o->{str}, __PACKAGE__,
-- 'assignment to $_[0] in STORABLE_freeze does not corrupt things';
-+ 'assignment to $_[0] in STORABLE_freeze does not corrupt things';
- }
-
- # [perl #113880]
-@@ -307,15 +304,18 @@ is(ref $t, 'STRESS_THE_STACK');
- # It is not just Storable that did not support vstrings. :-)
- # See https://rt.cpan.org/Ticket/Display.html?id=78678
- my $newver = "version"->can("new")
-- ? sub { "version"->new(shift) }
-- : sub { "" };
-+ ? sub {
-+ no warnings;
-+ "version"->new(shift)
-+ }
-+ : sub { "" };
- if (!ok
-- $$thawn eq $$obj && &$newver($$thawn) eq &$newver($$obj),
-- "get the right value back"
-+ $$thawn eq $$obj && &$newver($$thawn) eq &$newver($$obj),
-+ "get the right value back"
- ) {
- diag "$$thawn vs $$obj";
- diag &$newver($$thawn) eq &$newver($$obj) if &$newver(1);
-- }
-+ }
- }
- else {
- is_deeply($thawn, $obj, "get the right value back");
-@@ -365,16 +365,16 @@ is(ref $t, 'STRESS_THE_STACK');
- die ${$_[0]}
- }
-
-- package ThawHookDies;
-- sub STORABLE_freeze {
-- my ($self, $cloning) = @_;
-- my $tmp = $$self;
-- return "a", \$tmp;
-- }
-- sub STORABLE_thaw {
-- my ($self, $cloning, $str, $obj) = @_;
-- die $$obj;
-- }
-+ package ThawHookDies;
-+ sub STORABLE_freeze {
-+ my ($self, $cloning) = @_;
-+ my $tmp = $$self;
-+ return "a", \$tmp;
-+ }
-+ sub STORABLE_thaw {
-+ my ($self, $cloning, $str, $obj) = @_;
-+ die $$obj;
-+ }
- }
- my $x = bless \(my $tmpx = "Foo"), "FreezeHookDies";
- my $y = bless \(my $tmpy = []), "FreezeHookDies";
-@@ -434,13 +434,13 @@ is(ref $t, 'STRESS_THE_STACK');
- };
- my $msg = $@;
- like($msg, qr/Unexpected object type \(GLOB\) of class 'GlobHooked' in store_hook\(\) calling GlobHookedBase::STORABLE_freeze/,
-- "check we get the verbose message");
-+ "check we get the verbose message");
- }
-
- SKIP:
- {
- $] < 5.012
-- and skip "Can't assign regexps directly before 5.12", 4;
-+ and skip "Can't assign regexps directly before 5.12", 4;
- my $hook_called;
- # store regexp via hook
- {
-diff --git a/t/boolean.t b/t/boolean.t
-index 9ba19c0..70b65a4 100644
---- a/t/boolean.t
-+++ b/t/boolean.t
-@@ -8,77 +8,67 @@ BEGIN {
- $false_ref = \!!0;
- }
-
--BEGIN {
-- unshift @INC, 't';
-- unshift @INC, 't/compat' if $] < 5.006002;
-- require Config;
-- if ($ENV{PERL_CORE} and $Config::Config{'extensions'} !~ /\bStorable\b/) {
-- print "1..0 # Skip: Storable was not built\n";
-- exit 0;
-- }
--}
--
- use Test::More tests => 12;
- use Storable qw(thaw freeze);
-
- use constant CORE_BOOLS => defined &builtin::is_bool;
-
- {
-- my $x = $true_ref;
-- my $y = ${thaw freeze \$x};
-- is($y, $x);
-- eval {
-- $$y = 2;
-- };
-- isnt $@, '',
-- 'immortal true maintained as immortal';
-+ my $x = $true_ref;
-+ my $y = ${thaw freeze \$x};
-+ is($y, $x);
-+ eval {
-+ $$y = 2;
-+ };
-+ isnt $@, '',
-+ 'immortal true maintained as immortal';
- }
-
- {
-- my $x = $false_ref;
-- my $y = ${thaw freeze \$x};
-- is($y, $x);
-- eval {
-- $$y = 2;
-- };
-- isnt $@, '',
-- 'immortal false maintained as immortal';
-+ my $x = $false_ref;
-+ my $y = ${thaw freeze \$x};
-+ is($y, $x);
-+ eval {
-+ $$y = 2;
-+ };
-+ isnt $@, '',
-+ 'immortal false maintained as immortal';
- }
-
- {
-- my $true = $$true_ref;
-- my $x = \$true;
-- my $y = ${thaw freeze \$x};
-- is($$y, $$x);
-- is($$y, '1');
-- SKIP: {
-- skip "perl $] does not support tracking boolean values", 1
-- unless CORE_BOOLS;
-- BEGIN { CORE_BOOLS and warnings->unimport('experimental::builtin') }
-- ok builtin::is_bool($$y);
-- }
-- eval {
-- $$y = 2;
-- };
-- is $@, '',
-- 'mortal true maintained as mortal';
-+ my $true = $$true_ref;
-+ my $x = \$true;
-+ my $y = ${thaw freeze \$x};
-+ is($$y, $$x);
-+ is($$y, '1');
-+ SKIP: {
-+ skip "perl $] does not support tracking boolean values", 1
-+ unless CORE_BOOLS;
-+ BEGIN { CORE_BOOLS and warnings->unimport('experimental::builtin') }
-+ ok builtin::is_bool($$y);
-+ }
-+ eval {
-+ $$y = 2;
-+ };
-+ is $@, '',
-+ 'mortal true maintained as mortal';
- }
-
- {
-- my $false = $$false_ref;
-- my $x = \$false;
-- my $y = ${thaw freeze \$x};
-- is($$y, $$x);
-- is($$y, '');
-- SKIP: {
-- skip "perl $] does not support tracking boolean values", 1
-- unless CORE_BOOLS;
-- BEGIN { CORE_BOOLS and warnings->unimport('experimental::builtin') }
-- ok builtin::is_bool($$y);
-- }
-- eval {
-- $$y = 2;
-- };
-- is $@, '',
-- 'mortal true maintained as mortal';
-+ my $false = $$false_ref;
-+ my $x = \$false;
-+ my $y = ${thaw freeze \$x};
-+ is($$y, $$x);
-+ is($$y, '');
-+ SKIP: {
-+ skip "perl $] does not support tracking boolean values", 1
-+ unless CORE_BOOLS;
-+ BEGIN { CORE_BOOLS and warnings->unimport('experimental::builtin') }
-+ ok builtin::is_bool($$y);
-+ }
-+ eval {
-+ $$y = 2;
-+ };
-+ is $@, '',
-+ 'mortal true maintained as mortal';
- }
-diff --git a/t/canonical.t b/t/canonical.t
-index 3b930aa..6237db6 100644
---- a/t/canonical.t
-+++ b/t/canonical.t
-@@ -1,21 +1,13 @@
- #!./perl
- #
- # Copyright (c) 1995-2000, Raphael Manfredi
--#
-+#
- # You may redistribute only under the same terms as Perl 5, as specified
- # in the README file that comes with the distribution.
--#
--
--sub BEGIN {
-- unshift @INC, 't';
-- unshift @INC, 't/compat' if $] < 5.006002;
-- require Config; import Config;
-- if ($ENV{PERL_CORE} and $Config{'extensions'} !~ /\bStorable\b/) {
-- print "1..0 # Skip: Storable was not built\n";
-- exit 0;
-- }
--}
-+#
-
-+use strict;
-+use warnings;
-
- use Storable qw(freeze thaw dclone);
- our ($debugging, $verbose);
-@@ -26,56 +18,61 @@ use Test::More tests => 8;
- # (you may want to reduce the size of the hashes too)
- # $debugging = 1;
-
--$hashsize = 100;
--$maxhash2size = 100;
--$maxarraysize = 100;
-+my $hashsize = 100;
-+my $maxhash2size = 100;
-+my $maxarraysize = 100;
-
- # Use Digest::MD5 if its available to make random string keys
-
- eval { require Digest::MD5; };
--$gotmd5 = !$@;
-+my $gotmd5 = !$@;
- note "Will use Digest::MD5" if $gotmd5;
-
- # Use Data::Dumper if debugging and it is available to create an ASCII dump
-
-+my $gotdd;
- if ($debugging) {
- eval { require "Data/Dumper.pm" };
- $gotdd = !$@;
- }
-
--@fixed_strings = ("January", "February", "March", "April", "May", "June",
-- "July", "August", "September", "October", "November", "December" );
-+my @fixed_strings = (
-+ "January", "February", "March", "April", "May", "June",
-+ "July", "August", "September", "October", "November", "December"
-+);
-
- # Build some arbitrarily complex data structure starting with a top level hash
- # (deeper levels contain scalars, references to hashes or references to arrays);
-
-+my %a1;
-+
- for (my $i = 0; $i < $hashsize; $i++) {
-- my($k) = int(rand(1_000_000));
-- $k = Digest::MD5::md5_hex($k) if $gotmd5 and int(rand(2));
-- $a1{$k} = { key => "$k", "value" => $i };
--
-- # A third of the elements are references to further hashes
--
-- if (int(rand(1.5))) {
-- my($hash2) = {};
-- my($hash2size) = int(rand($maxhash2size));
-- while ($hash2size--) {
-- my($k2) = $k . $i . int(rand(100));
-- $hash2->{$k2} = $fixed_strings[rand(int(@fixed_strings))];
-- }
-- $a1{$k}->{value} = $hash2;
-- }
--
-- # A further third are references to arrays
--
-- elsif (int(rand(2))) {
-- my($arr_ref) = [];
-- my($arraysize) = int(rand($maxarraysize));
-- while ($arraysize--) {
-- push(@$arr_ref, $fixed_strings[rand(int(@fixed_strings))]);
-- }
-- $a1{$k}->{value} = $arr_ref;
-- }
-+ my($k) = int(rand(1_000_000));
-+ $k = Digest::MD5::md5_hex($k) if $gotmd5 and int(rand(2));
-+ $a1{$k} = { key => "$k", "value" => $i };
-+
-+ # A third of the elements are references to further hashes
-+
-+ if (int(rand(1.5))) {
-+ my($hash2) = {};
-+ my($hash2size) = int(rand($maxhash2size));
-+ while ($hash2size--) {
-+ my($k2) = $k . $i . int(rand(100));
-+ $hash2->{$k2} = $fixed_strings[rand(int(@fixed_strings))];
-+ }
-+ $a1{$k}->{value} = $hash2;
-+ }
-+
-+ # A further third are references to arrays
-+
-+ elsif (int(rand(2))) {
-+ my($arr_ref) = [];
-+ my($arraysize) = int(rand($maxarraysize));
-+ while ($arraysize--) {
-+ push(@$arr_ref, $fixed_strings[rand(int(@fixed_strings))]);
-+ }
-+ $a1{$k}->{value} = $arr_ref;
-+ }
- }
-
-
-@@ -84,25 +81,27 @@ print STDERR Data::Dumper::Dumper(\%a1) if ($verbose and $gotdd);
-
- # Copy the hash, element by element in order of the keys
-
--foreach $k (sort keys %a1) {
-+my %a2;
-+
-+foreach my $k (sort keys %a1) {
- $a2{$k} = { key => "$k", "value" => $a1{$k}->{value} };
- }
-
- # Deep clone the hash
-
--$a3 = dclone(\%a1);
-+my $a3 = dclone(\%a1);
-
- # In canonical mode the frozen representation of each of the hashes
- # should be identical
-
- $Storable::canonical = 1;
-
--$x1 = freeze(\%a1);
--$x2 = freeze(\%a2);
--$x3 = freeze($a3);
-+my $x1 = freeze(\%a1);
-+my $x2 = freeze(\%a2);
-+my $x3 = freeze($a3);
-
--cmp_ok(length $x1, '>', $hashsize); # sanity check
--is(length $x1, length $x2); # idem
-+cmp_ok(length $x1, '>', $hashsize); # sanity check
-+is(length $x1, length $x2); # idem
- is($x1, $x2);
- is($x1, $x3);
-
-diff --git a/t/circular_hook.t b/t/circular_hook.t
-index fd635c0..66f9afe 100644
---- a/t/circular_hook.t
-+++ b/t/circular_hook.t
-@@ -12,15 +12,8 @@
- # This file tests several known-error cases relating to STORABLE_attach, in
- # which Storable should (correctly) throw errors.
-
--sub BEGIN {
-- unshift @INC, 't';
-- unshift @INC, 't/compat' if $] < 5.006002;
-- require Config; import Config;
-- if ($ENV{PERL_CORE} and $Config{'extensions'} !~ /\bStorable\b/) {
-- print "1..0 # Skip: Storable was not built\n";
-- exit 0;
-- }
--}
-+use strict;
-+use warnings;
-
- use Storable ();
- use Test::More tests => 9;
-@@ -54,34 +47,34 @@ is_deeply( \@Foo::order, [ 'Bar', 'Foo' ], 'thaw order is correct (depth first)'
-
- package Foo;
-
--@order = ();
-+our @order = ();
-
- sub STORABLE_freeze {
-- my ($self, $clone) = @_;
-- my $class = ref $self;
--
-- # print "# Freezing $class\n";
-+ my ($self, $clone) = @_;
-+ my $class = ref $self;
-+
-+ # print "# Freezing $class\n";
-
-- return ($class, $self->{$class});
-+ return ($class, $self->{$class});
- }
-
- sub STORABLE_thaw {
-- my ($self, $clone, $string, @refs) = @_;
-- my $class = ref $self;
-+ my ($self, $clone, $string, @refs) = @_;
-+ my $class = ref $self;
-
-- # print "# Thawing $class\n";
-+ # print "# Thawing $class\n";
-
-- $self->{$class} = shift @refs;
-+ $self->{$class} = shift @refs;
-
-- push @order, $class;
-+ push @order, $class;
-
-- return;
-+ return;
- }
-
- package Bar;
-
- BEGIN {
--@ISA = 'Foo';
-+our @ISA = 'Foo';
- }
-
- 1;
-diff --git a/t/code.t b/t/code.t
-index b4e7081..a86b296 100644
---- a/t/code.t
-+++ b/t/code.t
-@@ -6,34 +6,26 @@
- # in the README file that comes with the distribution.
- #
-
--sub BEGIN {
-- unshift @INC, 't';
-- unshift @INC, 't/compat' if $] < 5.006002;
-- require Config; import Config;
-- if ($ENV{PERL_CORE} and $Config{'extensions'} !~ /\bStorable\b/) {
-- print "1..0 # Skip: Storable was not built\n";
-- exit 0;
-- }
--}
-+# before strict/warnings to make the life for Safe->reval easier
-+sub code { "JAPH" }
-+my $coderef = sub { 6*7 };
-
- use strict;
-+use warnings;
-+
- BEGIN {
- if (!eval q{
-- use Test::More;
-- use B::Deparse 0.61;
-- use 5.006;
-- 1;
-+ use B::Deparse 0.61;
-+ 1;
- }) {
-- print "1..0 # skip: tests only work with B::Deparse 0.61 and at least perl 5.6.0\n";
-- exit;
-- }
-- require File::Spec;
-- if ($File::Spec::VERSION < 0.8) {
-- print "1..0 # Skip: newer File::Spec needed\n";
-- exit 0;
-+ print "1..0 # skip: tests only work with B::Deparse 0.61\n";
-+ exit;
- }
- }
-
-+use Test::More;
-+use File::Spec;
-+
- BEGIN { plan tests => 63 }
-
- use Storable qw(retrieve store nstore freeze nfreeze thaw dclone);
-@@ -46,33 +38,29 @@ our ($freezed, $thawed, @obj, @res, $blessed_code);
- $blessed_code = bless sub { "blessed" }, "Some::Package";
- { package Another::Package; sub foo { __PACKAGE__ } }
-
--{
-- no strict; # to make the life for Safe->reval easier
-- sub code { "JAPH" }
--}
--
- local *FOO;
-
--@obj =
-- ([\&code, # code reference
-- sub { 6*7 },
-- $blessed_code, # blessed code reference
-- \&Another::Package::foo, # code in another package
-- sub ($$;$) { 0 }, # prototypes
-- sub { print "test\n" },
-- \&Storable::_store, # large scalar
-- ],
-+@obj = (
-+ [
-+ \&code, # code reference
-+ $coderef,
-+ $blessed_code, # blessed code reference
-+ \&Another::Package::foo, # code in another package
-+ sub ($$;$) { 0 }, # prototypes
-+ sub { print "test\n" },
-+ \&Storable::_store, # large scalar
-+ ],
-
-- {"a" => sub { "srt" }, "b" => \&code},
-+ {"a" => sub { "srt" }, "b" => \&code},
-
-- sub { ord("a")-ord("7") },
-+ sub { ord("a")-ord("7") },
-
-- \&code,
-+ \&code,
-
-- \&dclone, # XS function
-+ \&dclone, # XS function
-
-- sub { open FOO, '<', "/" },
-- );
-+ sub { open FOO, '<', "/" },
-+);
-
- $Storable::Deparse = 1;
- $Storable::Eval = 1;
-@@ -156,10 +144,10 @@ is(prototype($thawed->[4]), prototype($obj[0]->[4]));
- local $Storable::Eval = 0;
-
- for my $i (0 .. 1) {
-- $freezed = freeze $obj[$i];
-- $@ = "";
-- eval { $thawed = thaw $freezed };
-- like($@, qr/Can\'t eval/);
-+ $freezed = freeze $obj[$i];
-+ $@ = "";
-+ eval { $thawed = thaw $freezed };
-+ like($@, qr/Can\'t eval/);
- }
- }
-
-@@ -167,9 +155,9 @@ is(prototype($thawed->[4]), prototype($obj[0]->[4]));
-
- local $Storable::Deparse = 0;
- for my $i (0 .. 1) {
-- $@ = "";
-- eval { $freezed = freeze $obj[$i] };
-- like($@, qr/Can\'t store CODE items/);
-+ $@ = "";
-+ eval { $freezed = freeze $obj[$i] };
-+ like($@, qr/Can\'t store CODE items/);
- }
- }
-
-@@ -177,11 +165,11 @@ is(prototype($thawed->[4]), prototype($obj[0]->[4]));
- local $Storable::Eval = 0;
- local $Storable::forgive_me = 1;
- for my $i (0 .. 4) {
-- $freezed = freeze $obj[0]->[$i];
-- $@ = "";
-- eval { $thawed = thaw $freezed };
-- is($@, "");
-- like($$thawed, qr/^sub/);
-+ $freezed = freeze $obj[0]->[$i];
-+ $@ = "";
-+ eval { $thawed = thaw $freezed };
-+ is($@, "");
-+ like($$thawed, qr/^sub/);
- }
- }
-
-@@ -193,7 +181,7 @@ is(prototype($thawed->[4]), prototype($obj[0]->[4]));
-
- open(SAVEERR, ">&STDERR");
- open(STDERR, '>', $devnull) or
-- ( print SAVEERR "Unable to redirect STDERR: $!\n" and exit(1) );
-+ ( print SAVEERR "Unable to redirect STDERR: $!\n" and exit(1) );
-
- eval { $freezed = freeze $obj[0]->[0] };
-
-@@ -204,7 +192,7 @@ is(prototype($thawed->[4]), prototype($obj[0]->[4]));
- }
-
- {
-- my $safe = new Safe;
-+ my $safe = Safe->new;
- local $Storable::Eval = sub { $safe->reval(shift) };
-
- $freezed = freeze $obj[0]->[0];
-@@ -219,25 +207,25 @@ is(prototype($thawed->[4]), prototype($obj[0]->[4]));
- like($@, qr/(trapped|Code sub)/);
-
- if (0) {
-- # Disable or fix this test if the internal representation of Storable
-- # changes.
-- skip("no malicious storable file check", 1);
-+ # Disable or fix this test if the internal representation of Storable
-+ # changes.
-+ skip("no malicious storable file check", 1);
- } else {
-- # Construct malicious storable code
-- $freezed = nfreeze $obj[0]->[0];
-- my $bad_code = ';open FOO, "/badfile"';
-- # 5th byte is (short) length of scalar
-- my $len = ord(substr($freezed, 4, 1));
-- substr($freezed, 4, 1, chr($len+length($bad_code)));
-- substr($freezed, -1, 0, $bad_code);
-- $@ = "";
-- eval { $thawed = thaw $freezed };
-- like($@, qr/(trapped|Code sub)/);
-+ # Construct malicious storable code
-+ $freezed = nfreeze $obj[0]->[0];
-+ my $bad_code = ';open FOO, "/badfile"';
-+ # 5th byte is (short) length of scalar
-+ my $len = ord(substr($freezed, 4, 1));
-+ substr($freezed, 4, 1, chr($len+length($bad_code)));
-+ substr($freezed, -1, 0, $bad_code);
-+ $@ = "";
-+ eval { $thawed = thaw $freezed };
-+ like($@, qr/(trapped|Code sub)/);
- }
- }
-
- {
-- my $safe = new Safe;
-+ my $safe = Safe->new;
- # because of opcodes used in "use strict":
- $safe->permit(qw(:default require caller));
- local $Storable::Eval = sub { $safe->reval(shift) };
-@@ -251,18 +239,19 @@ is(prototype($thawed->[4]), prototype($obj[0]->[4]));
-
- {
- {
-- package MySafe;
-- sub new { bless {}, shift }
-- sub reval {
-- my $source = $_[1];
-- # Here you can apply some nifty regexpes to ensure the
-- # safeness of the source code.
-- my $coderef = eval $source;
-- $coderef;
-- }
-+ package MySafe;
-+ sub new { bless {}, shift }
-+ sub reval {
-+ my $source = $_[1];
-+ # Here you can apply some nifty regexpes to ensure the
-+ # safeness of the source code.
-+ no warnings;
-+ my $coderef = eval $source;
-+ $coderef;
-+ }
- }
-
-- my $safe = new MySafe;
-+ my $safe = MySafe->new;
- local $Storable::Eval = sub { $safe->reval($_[0]) };
-
- $freezed = freeze $obj[0];
-@@ -272,11 +261,11 @@ is(prototype($thawed->[4]), prototype($obj[0]->[4]));
- if ($@ ne "") {
- fail() for (1..5);
- } else {
-- is($thawed->[0]->(), "JAPH");
-- is($thawed->[1]->(), 42);
-- is($thawed->[2]->(), "blessed");
-- is($thawed->[3]->(), "Another::Package");
-- is(prototype($thawed->[4]), prototype($obj[0]->[4]));
-+ is($thawed->[0]->(), "JAPH");
-+ is($thawed->[1]->(), 42);
-+ is($thawed->[2]->(), "blessed");
-+ is($thawed->[3]->(), "Another::Package");
-+ is(prototype($thawed->[4]), prototype($obj[0]->[4]));
- }
- }
-
-@@ -292,18 +281,18 @@ is(prototype($thawed->[4]), prototype($obj[0]->[4]));
- local $Storable::Eval = 1;
-
- for my $sub ($short_sub, $long_sub) {
-- my $res;
-+ my $res;
-
-- $res = thaw freeze [$sub, $sub];
-- is(int($res->[0]), int($res->[1]));
-+ $res = thaw freeze [$sub, $sub];
-+ is(int($res->[0]), int($res->[1]));
-
-- $res = thaw freeze [$sclr, $sub, $sub, $sclr];
-- is(int($res->[0]), int($res->[3]));
-- is(int($res->[1]), int($res->[2]));
-+ $res = thaw freeze [$sclr, $sub, $sub, $sclr];
-+ is(int($res->[0]), int($res->[3]));
-+ is(int($res->[1]), int($res->[2]));
-
-- $res = thaw freeze [$sub, $sub, $sclr, $sclr];
-- is(int($res->[0]), int($res->[1]));
-- is(int($res->[2]), int($res->[3]));
-+ $res = thaw freeze [$sub, $sub, $sclr, $sclr];
-+ is(int($res->[0]), int($res->[1]));
-+ is(int($res->[2]), int($res->[3]));
- }
-
- }
-diff --git a/t/compat01.t b/t/compat01.t
-index 56d7df6..1b5fc40 100644
---- a/t/compat01.t
-+++ b/t/compat01.t
-@@ -1,22 +1,16 @@
- #!perl -w
-
--BEGIN {
-- unshift @INC, 't';
-- unshift @INC, 't/compat' if $] < 5.006002;
-- require Config; import Config;
-- if ($ENV{PERL_CORE} and $Config{'extensions'} !~ /\bStorable\b/) {
-- print "1..0 # Skip: Storable was not built\n";
-- exit 0;
-- }
-+use strict;
-+use warnings;
-
-- use Config;
-+use Config;
-+BEGIN {
- if ($Config{byteorder} ne "1234") {
-- print "1..0 # Skip: Test only works for 32 bit little-ending machines\n";
-- exit 0;
-+ print "1..0 # Skip: Test only works for 32 bit little-ending machines\n";
-+ exit 0;
- }
- }
-
--use strict;
- use Storable qw(retrieve);
- use Test::More;
-
-diff --git a/t/compat06.t b/t/compat06.t
-index f8446ee..b82ee2f 100644
---- a/t/compat06.t
-+++ b/t/compat06.t
-@@ -1,20 +1,13 @@
- #!./perl
- #
- # Copyright (c) 1995-2000, Raphael Manfredi
--#
-+#
- # You may redistribute only under the same terms as Perl 5, as specified
- # in the README file that comes with the distribution.
- #
-
--BEGIN {
-- unshift @INC, 't';
-- unshift @INC, 't/compat' if $] < 5.006002;
-- require Config; import Config;
-- if ($ENV{PERL_CORE} and $Config{'extensions'} !~ /\bStorable\b/) {
-- print "1..0 # Skip: Storable was not built\n";
-- exit 0;
-- }
--}
-+use strict;
-+use warnings;
-
- use Test::More tests => 8;
-
-@@ -22,51 +15,53 @@ use Storable qw(freeze nfreeze thaw);
-
- package TIED_HASH;
-
-+our $hash_fetch;
-+
- sub TIEHASH {
-- my $self = bless {}, shift;
-- return $self;
-+ my $self = bless {}, shift;
-+ return $self;
- }
-
- sub FETCH {
-- my $self = shift;
-- my ($key) = @_;
-- $main::hash_fetch++;
-- return $self->{$key};
-+ my $self = shift;
-+ my ($key) = @_;
-+ $hash_fetch++;
-+ return $self->{$key};
- }
-
- sub STORE {
-- my $self = shift;
-- my ($key, $val) = @_;
-- $self->{$key} = $val;
-+ my $self = shift;
-+ my ($key, $val) = @_;
-+ $self->{$key} = $val;
- }
-
- package SIMPLE;
-
- sub make {
-- my $self = bless [], shift;
-- my ($x) = @_;
-- $self->[0] = $x;
-- return $self;
-+ my $self = bless [], shift;
-+ my ($x) = @_;
-+ $self->[0] = $x;
-+ return $self;
- }
-
- package ROOT;
-
- sub make {
-- my $self = bless {}, shift;
-- my $h = tie %hash, TIED_HASH;
-- $self->{h} = $h;
-- $self->{ref} = \%hash;
-- my @pool;
-- for (my $i = 0; $i < 5; $i++) {
-- push(@pool, SIMPLE->make($i));
-- }
-- $self->{obj} = \@pool;
-- my @a = ('string', $h, $self);
-- $self->{a} = \@a;
-- $self->{num} = [1, 0, -3, -3.14159, 456, 4.5];
-- $h->{key1} = 'val1';
-- $h->{key2} = 'val2';
-- return $self;
-+ my $self = bless {}, shift;
-+ my $h = tie my %hash, 'TIED_HASH';
-+ $self->{h} = $h;
-+ $self->{ref} = \%hash;
-+ my @pool;
-+ for (my $i = 0; $i < 5; $i++) {
-+ push(@pool, SIMPLE->make($i));
-+ }
-+ $self->{obj} = \@pool;
-+ my @a = ('string', $h, $self);
-+ $self->{a} = \@a;
-+ $self->{num} = [1, 0, -3, -3.14159, 456, 4.5];
-+ $h->{key1} = 'val1';
-+ $h->{key2} = 'val2';
-+ return $self;
- };
-
- sub num { $_[0]->{num} }
-@@ -77,33 +72,33 @@ sub obj { $_[0]->{obj} }
- package main;
-
- my $is_EBCDIC = (ord('A') == 193) ? 1 : 0;
--
-+
- my $r = ROOT->make;
-
- my $data = '';
--if (!$is_EBCDIC) { # ASCII machine
-- while (<DATA>) {
-- next if /^#/;
-- $data .= unpack("u", $_);
-- }
-+if (!$is_EBCDIC) { # ASCII machine
-+ while (<DATA>) {
-+ next if /^#/;
-+ $data .= unpack("u", $_);
-+ }
- } else {
-- while (<DATA>) {
-- next if /^#$/; # skip comments
-- next if /^#\s+/; # skip comments
-- next if /^[^#]/; # skip uuencoding for ASCII machines
-- s/^#//; # prepare uuencoded data for EBCDIC machines
-- $data .= unpack("u", $_);
-- }
-+ while (<DATA>) {
-+ next if /^#$/; # skip comments
-+ next if /^#\s+/; # skip comments
-+ next if /^[^#]/; # skip uuencoding for ASCII machines
-+ s/^#//; # prepare uuencoded data for EBCDIC machines
-+ $data .= unpack("u", $_);
-+ }
- }
-
- my $expected_length = $is_EBCDIC ? 217 : 278;
- is(length $data, $expected_length);
--
-+
- my $y = thaw($data);
- isnt($y, undef);
- is(ref $y, 'ROOT');
-
--$Storable::canonical = 1; # Prevent "used once" warning
-+$Storable::canonical = 1; # Prevent "used once" warning
- $Storable::canonical = 1;
- # Allow for long double string conversions.
- $y->{num}->[3] += 0;
-@@ -112,12 +107,12 @@ is(nfreeze($y), nfreeze($r));
-
- is($y->ref->{key1}, 'val1');
- is($y->ref->{key2}, 'val2');
--is($hash_fetch, 2);
-+is($TIED_HASH::hash_fetch, 2);
-
- my $num = $r->num;
- my $ok = 1;
- for (my $i = 0; $i < @$num; $i++) {
-- do { $ok = 0; last } unless $num->[$i] == $y->num->[$i];
-+ do { $ok = 0; last } unless $num->[$i] == $y->num->[$i];
- }
- is($ok, 1);
-
-diff --git a/t/croak.t b/t/croak.t
-index ecd2bf8..4bc229f 100644
---- a/t/croak.t
-+++ b/t/croak.t
-@@ -5,34 +5,24 @@
- # with 5.005_03. This test shows it up, whereas malice.t does not.
- # In particular, don't use Test; as this covers up the problem.
-
--sub BEGIN {
-- if ($ENV{PERL_CORE}) {
-- require Config; import Config;
-- %Config=%Config if 0; # cease -w
-- if ($Config{'extensions'} !~ /\bStorable\b/) {
-- print "1..0 # Skip: Storable was not built\n";
-- exit 0;
-- }
-- }
--}
--
- use strict;
-+#use warnings; # ancient warnings will load Carp
-
- BEGIN {
-- die "Oi! No! Don't change this test so that Carp is used before Storable"
-- if defined &Carp::carp;
-+ die "Oi! No! Don't change this test so that Carp is used before Storable"
-+ if defined &Carp::carp;
- }
- use Storable qw(freeze thaw);
-
- print "1..2\n";
-
- for my $test (1,2) {
-- eval {thaw "\xFF\xFF"};
-- if ($@ =~ /Storable binary image v127.255 more recent than I am \(v2\.\d+\)/)
-- {
-- print "ok $test\n";
-- } else {
-- chomp $@;
-- print "not ok $test # Expected a meaningful croak. Got '$@'\n";
-+ eval {thaw "\xFF\xFF"};
-+ if ($@ =~ /Storable binary image v127.255 more recent than I am \(v2\.\d+\)/) {
-+ print "ok $test\n";
-+ }
-+ else {
-+ chomp $@;
-+ print "not ok $test # Expected a meaningful croak. Got '$@'\n";
- }
- }
-diff --git a/t/dclone.t b/t/dclone.t
-index ce6c756..ac7e93c 100644
---- a/t/dclone.t
-+++ b/t/dclone.t
-@@ -1,61 +1,58 @@
- #!./perl
- #
- # Copyright (c) 1995-2000, Raphael Manfredi
--#
-+#
- # You may redistribute only under the same terms as Perl 5, as specified
- # in the README file that comes with the distribution.
- #
-
-+use strict;
-+use warnings;
-+
- sub BEGIN {
-- unshift @INC, 't';
-- unshift @INC, 't/compat' if $] < 5.006002;
-- require Config; import Config;
-- if ($ENV{PERL_CORE} and $Config{'extensions'} !~ /\bStorable\b/) {
-- print "1..0 # Skip: Storable was not built\n";
-- exit 0;
-- }
-- require 'st-dump.pl';
-+ unshift @INC, 't/lib';
- }
-
-+use STDump;
-
- use Storable qw(dclone);
-
- use Test::More tests => 14;
-
--$a = 'toto';
--$b = \$a;
--$c = bless {}, CLASS;
-+my $a = 'toto';
-+my $b = \$a;
-+my $c = bless {}, 'CLASS';
- $c->{attribute} = 'attrval';
--%a = ('key', 'value', 1, 0, $a, $b, 'cvar', \$c);
--@a = ('first', undef, 3, -4, -3.14159, 456, 4.5,
-- $b, \$a, $a, $c, \$c, \%a);
-+my %a = ('key', 'value', 1, 0, $a, $b, 'cvar', \$c);
-+my @a = ('first', undef, 3, -4, -3.14159, 456, 4.5,
-+ $b, \$a, $a, $c, \$c, \%a);
-
- my $aref = dclone(\@a);
- isnt($aref, undef);
-
--$dumped = &dump(\@a);
-+my $dumped = stdump(\@a);
- isnt($dumped, undef);
-
--$got = &dump($aref);
-+my $got = stdump($aref);
- isnt($got, undef);
-
- is($got, $dumped);
-
--package FOO; @ISA = qw(Storable);
-+package FOO; our @ISA = qw(Storable);
-
- sub make {
-- my $self = bless {};
-- $self->{key} = \%main::a;
-- return $self;
-+ my $self = bless {};
-+ $self->{key} = \%a;
-+ return $self;
- };
-
- package main;
-
--$foo = FOO->make;
-+my $foo = FOO->make;
- my $r = $foo->dclone;
- isnt($r, undef);
-
--is(&dump($foo), &dump($r));
-+is(stdump($foo), stdump($r));
-
- # Ensure refs to "undef" values are properly shared during cloning
- my $hash;
-@@ -86,9 +83,9 @@ is($$clone, '');
- SKIP: {
- # Do not fail if Tie::Hash and/or Tie::StdHash is not available
- skip 'No Tie::StdHash available', 2
-- unless eval { require Tie::Hash; scalar keys %Tie::StdHash:: };
-+ unless eval { require Tie::Hash; scalar keys %Tie::StdHash:: };
- skip 'This version of perl has problems with Tie::StdHash', 2
-- if $] eq "5.008";
-+ if $] eq "5.008";
- tie my %tie, "Tie::StdHash" or die $!;
- $tie{array} = [1,2,3,4];
- $tie{hash} = {1,2,3,4};
-diff --git a/t/destroy.t b/t/destroy.t
-index dcc3600..b48b22d 100644
---- a/t/destroy.t
-+++ b/t/destroy.t
-@@ -1,20 +1,23 @@
- # [perl #118139] crash in global destruction when accessing the freed cxt.
-+use strict;
-+use warnings;
-+
- use Test::More tests => 1;
- use Storable;
- BEGIN {
-- store {}, "foo";
-+ store {}, "foo";
- }
- package foo;
- sub new { return bless {} }
- DESTROY {
-- open FH, '<', "foo" or die $!;
-- eval { Storable::pretrieve(*FH); };
-- close FH or die $!;
-- unlink "foo";
-+ open FH, '<', "foo" or die $!;
-+ eval { Storable::pretrieve(*FH); };
-+ close FH or die $!;
-+ unlink "foo";
- }
-
- package main;
- # print "# $^X\n";
--$x = foo->new();
-+my $x = foo->new();
-
- ok(1);
-diff --git a/t/downgrade.t b/t/downgrade.t
-index 43a32ed..bf40a0c 100644
---- a/t/downgrade.t
-+++ b/t/downgrade.t
-@@ -6,52 +6,42 @@
- # in the README file that comes with the distribution.
- #
-
--# I ought to keep this test easily backwards compatible to 5.004, so no
--# qr//;
--
- # This test checks downgrade behaviour on pre-5.8 perls when new 5.8 features
- # are encountered.
-
--sub BEGIN {
-- unshift @INC, 't';
-- unshift @INC, 't/compat' if $] < 5.006002;
-- require Config; import Config;
-- if ($ENV{PERL_CORE} and $Config{'extensions'} !~ /\bStorable\b/) {
-- print "1..0 # Skip: Storable was not built\n";
-- exit 0;
-- }
--}
-+use strict;
-+use warnings;
-
- use Test::More;
- use Storable 'thaw';
-
--use strict;
- our (%U_HASH, $UTF8_CROAK, $RESTRICTED_CROAK);
-
--our @RESTRICT_TESTS = ('Locked hash', 'Locked hash placeholder',
-- 'Locked keys', 'Locked keys placeholder',
-- );
-+our @RESTRICT_TESTS = (
-+ 'Locked hash', 'Locked hash placeholder',
-+ 'Locked keys', 'Locked keys placeholder',
-+);
- our %R_HASH = (perl => 'rules');
-
- if ($] > 5.007002) {
-- # This is cheating. "\xdf" in Latin 1 is beta S, so will match \w if it
-- # is stored in utf8, not bytes.
-- # "\xdf" is y diaresis in EBCDIC (except for cp875, but so far no-one seems
-- # to use that) which has exactly the same properties for \w
-- # So the tests happen to pass.
-- my $utf8 = "Schlo\xdf" . chr 256;
-- chop $utf8;
--
-- # \xe5 is V in EBCDIC. That doesn't have the same properties w.r.t. \w as
-- # an a circumflex, so we need to be explicit.
--
-- # and its these very properties we're trying to test - an edge case
-- # involving whether scalars are being stored in bytes or in utf8.
-- my $a_circumflex = (ord ('A') == 193 ? "\x47" : "\xe5");
-- %U_HASH = (map {$_, $_} 'castle', "ch${a_circumflex}teau", $utf8, chr 0x57CE);
-- plan tests => 169;
-+ # This is cheating. "\xdf" in Latin 1 is beta S, so will match \w if it
-+ # is stored in utf8, not bytes.
-+ # "\xdf" is y diaresis in EBCDIC (except for cp875, but so far no-one seems
-+ # to use that) which has exactly the same properties for \w
-+ # So the tests happen to pass.
-+ my $utf8 = "Schlo\xdf" . chr 256;
-+ chop $utf8;
-+
-+ # \xe5 is V in EBCDIC. That doesn't have the same properties w.r.t. \w as
-+ # an a circumflex, so we need to be explicit.
-+
-+ # and its these very properties we're trying to test - an edge case
-+ # involving whether scalars are being stored in bytes or in utf8.
-+ my $a_circumflex = (ord ('A') == 193 ? "\x47" : "\xe5");
-+ %U_HASH = (map {$_, $_} 'castle', "ch${a_circumflex}teau", $utf8, chr 0x57CE);
-+ plan tests => 169;
- } else {
-- plan tests => 59;
-+ plan tests => 59;
- }
-
- $UTF8_CROAK = "/^Cannot retrieve UTF8 data in non-UTF8 perl/";
-@@ -59,122 +49,122 @@ $RESTRICTED_CROAK = "/^Cannot retrieve restricted hash/";
-
- my %tests;
- {
-- local $/ = "\n\nend\n";
-- while (<DATA>) {
-- next unless /\S/s;
-- unless (/begin ([0-7]{3}) ([^\n]*)\n(.*)$/s) {
-- s/\n.*//s;
-- warn "Dodgy data in section starting '$_'";
-- next;
-+ local $/ = "\n\nend\n";
-+ while (<DATA>) {
-+ next unless /\S/s;
-+ unless (/begin ([0-7]{3}) ([^\n]*)\n(.*)$/s) {
-+ s/\n.*//s;
-+ warn "Dodgy data in section starting '$_'";
-+ next;
-+ }
-+ next unless oct $1 == ord 'A'; # Skip ASCII on EBCDIC, and vice versa
-+ my $data = unpack 'u', $3;
-+ $tests{$2} = $data;
- }
-- next unless oct $1 == ord 'A'; # Skip ASCII on EBCDIC, and vice versa
-- my $data = unpack 'u', $3;
-- $tests{$2} = $data;
-- }
- }
-
- # use Data::Dumper; $Data::Dumper::Useqq = 1; print Dumper \%tests;
- sub thaw_hash {
-- my ($name, $expected) = @_;
-- my $hash = eval {thaw $tests{$name}};
-- is ($@, '', "Thawed $name without error?");
-- isa_ok ($hash, 'HASH');
-- ok (defined $hash && eq_hash($hash, $expected),
-- "And it is the hash we expected?");
-- $hash;
-+ my ($name, $expected) = @_;
-+ my $hash = eval {thaw $tests{$name}};
-+ is ($@, '', "Thawed $name without error?");
-+ isa_ok ($hash, 'HASH');
-+ ok (defined $hash && eq_hash($hash, $expected),
-+ "And it is the hash we expected?");
-+ $hash;
- }
-
- sub thaw_scalar {
-- my ($name, $expected, $bug) = @_;
-- my $scalar = eval {thaw $tests{$name}};
-- is ($@, '', "Thawed $name without error?");
-- isa_ok ($scalar, 'SCALAR', "Thawed $name?");
-- is ($$scalar, $expected, "And it is the data we expected?");
-- $scalar;
-+ my ($name, $expected, $bug) = @_;
-+ my $scalar = eval {thaw $tests{$name}};
-+ is ($@, '', "Thawed $name without error?");
-+ isa_ok ($scalar, 'SCALAR', "Thawed $name?");
-+ is ($$scalar, $expected, "And it is the data we expected?");
-+ $scalar;
- }
-
- sub thaw_fail {
-- my ($name, $expected) = @_;
-- my $thing = eval {thaw $tests{$name}};
-- is ($thing, undef, "Thawed $name failed as expected?");
-- like ($@, $expected, "Error as predicted?");
-+ my ($name, $expected) = @_;
-+ my $thing = eval {thaw $tests{$name}};
-+ is ($thing, undef, "Thawed $name failed as expected?");
-+ like ($@, $expected, "Error as predicted?");
- }
-
- sub test_locked_hash {
-- my $hash = shift;
-- my @keys = keys %$hash;
-- my ($key, $value) = each %$hash;
-- eval {$hash->{$key} = reverse $value};
-- like( $@, "/^Modification of a read-only value attempted/",
-+ my $hash = shift;
-+ my @keys = keys %$hash;
-+ my ($key, $value) = each %$hash;
-+ eval {$hash->{$key} = reverse $value};
-+ like( $@, "/^Modification of a read-only value attempted/",
- 'trying to change a locked key' );
-- is ($hash->{$key}, $value, "hash should not change?");
-- eval {$hash->{use} = 'perl'};
-- like( $@, "/^Attempt to access disallowed key 'use' in a restricted hash/",
-+ is ($hash->{$key}, $value, "hash should not change?");
-+ eval {$hash->{use} = 'perl'};
-+ like( $@, "/^Attempt to access disallowed key 'use' in a restricted hash/",
- 'trying to add another key' );
-- ok (eq_array([keys %$hash], \@keys), "Still the same keys?");
-+ ok (eq_array([keys %$hash], \@keys), "Still the same keys?");
- }
-
- sub test_restricted_hash {
-- my $hash = shift;
-- my @keys = keys %$hash;
-- my ($key, $value) = each %$hash;
-- eval {$hash->{$key} = reverse $value};
-- is( $@, '',
-+ my $hash = shift;
-+ my @keys = keys %$hash;
-+ my ($key, $value) = each %$hash;
-+ eval {$hash->{$key} = reverse $value};
-+ is( $@, '',
- 'trying to change a restricted key' );
-- is ($hash->{$key}, reverse ($value), "hash should change");
-- eval {$hash->{use} = 'perl'};
-- like( $@, "/^Attempt to access disallowed key 'use' in a restricted hash/",
-+ is ($hash->{$key}, reverse ($value), "hash should change");
-+ eval {$hash->{use} = 'perl'};
-+ like( $@, "/^Attempt to access disallowed key 'use' in a restricted hash/",
- 'trying to add another key' );
-- ok (eq_array([keys %$hash], \@keys), "Still the same keys?");
-+ ok (eq_array([keys %$hash], \@keys), "Still the same keys?");
- }
-
- sub test_placeholder {
-- my $hash = shift;
-- eval {$hash->{rules} = 42};
-- is ($@, '', 'No errors');
-- is ($hash->{rules}, 42, "New value added");
-+ my $hash = shift;
-+ eval {$hash->{rules} = 42};
-+ is ($@, '', 'No errors');
-+ is ($hash->{rules}, 42, "New value added");
- }
-
- sub test_newkey {
-- my $hash = shift;
-- eval {$hash->{nms} = "http://nms-cgi.sourceforge.net/"};
-- is ($@, '', 'No errors');
-- is ($hash->{nms}, "http://nms-cgi.sourceforge.net/", "New value added");
-+ my $hash = shift;
-+ eval {$hash->{nms} = "http://nms-cgi.sourceforge.net/"};
-+ is ($@, '', 'No errors');
-+ is ($hash->{nms}, "http://nms-cgi.sourceforge.net/", "New value added");
- }
-
- # $Storable::DEBUGME = 1;
- thaw_hash ('Hash with utf8 flag but no utf8 keys', \%R_HASH);
-
- if (eval "use Hash::Util; 1") {
-- print "# We have Hash::Util, so test that the restricted hashes in <DATA> are valid\n";
-- for $Storable::downgrade_restricted (0, 1, undef, "cheese") {
-+ print "# We have Hash::Util, so test that the restricted hashes in <DATA> are valid\n";
-+ for $Storable::downgrade_restricted (0, 1, undef, "cheese") {
-+ my $hash = thaw_hash ('Locked hash', \%R_HASH);
-+ test_locked_hash ($hash);
-+ $hash = thaw_hash ('Locked hash placeholder', \%R_HASH);
-+ test_locked_hash ($hash);
-+ test_placeholder ($hash);
-+
-+ $hash = thaw_hash ('Locked keys', \%R_HASH);
-+ test_restricted_hash ($hash);
-+ $hash = thaw_hash ('Locked keys placeholder', \%R_HASH);
-+ test_restricted_hash ($hash);
-+ test_placeholder ($hash);
-+ }
-+} else {
-+ print "# We don't have Hash::Util, so test that the restricted hashes downgrade\n";
- my $hash = thaw_hash ('Locked hash', \%R_HASH);
-- test_locked_hash ($hash);
-+ test_newkey ($hash);
- $hash = thaw_hash ('Locked hash placeholder', \%R_HASH);
-- test_locked_hash ($hash);
-- test_placeholder ($hash);
--
-+ test_newkey ($hash);
- $hash = thaw_hash ('Locked keys', \%R_HASH);
-- test_restricted_hash ($hash);
-+ test_newkey ($hash);
- $hash = thaw_hash ('Locked keys placeholder', \%R_HASH);
-- test_restricted_hash ($hash);
-- test_placeholder ($hash);
-- }
--} else {
-- print "# We don't have Hash::Util, so test that the restricted hashes downgrade\n";
-- my $hash = thaw_hash ('Locked hash', \%R_HASH);
-- test_newkey ($hash);
-- $hash = thaw_hash ('Locked hash placeholder', \%R_HASH);
-- test_newkey ($hash);
-- $hash = thaw_hash ('Locked keys', \%R_HASH);
-- test_newkey ($hash);
-- $hash = thaw_hash ('Locked keys placeholder', \%R_HASH);
-- test_newkey ($hash);
-- local $Storable::downgrade_restricted = 0;
-- thaw_fail ('Locked hash', $RESTRICTED_CROAK);
-- thaw_fail ('Locked hash placeholder', $RESTRICTED_CROAK);
-- thaw_fail ('Locked keys', $RESTRICTED_CROAK);
-- thaw_fail ('Locked keys placeholder', $RESTRICTED_CROAK);
-+ test_newkey ($hash);
-+ local $Storable::downgrade_restricted = 0;
-+ thaw_fail ('Locked hash', $RESTRICTED_CROAK);
-+ thaw_fail ('Locked hash placeholder', $RESTRICTED_CROAK);
-+ thaw_fail ('Locked keys', $RESTRICTED_CROAK);
-+ thaw_fail ('Locked keys placeholder', $RESTRICTED_CROAK);
- }
-
- print "# We have utf8 scalars, so test that the utf8 scalars in <DATA> are valid\n";
-@@ -184,44 +174,36 @@ thaw_scalar ('Short 24 bit utf8 data', chr 0xC0FFEE);
- thaw_scalar ('Long 24 bit utf8 data', chr (0xC0FFEE) x 256);
-
- if ($] > 5.007002) {
-- print "# We have utf8 hashes, so test that the utf8 hashes in <DATA> are valid\n";
-- my $hash = thaw_hash ('Hash with utf8 keys', \%U_HASH);
-- my $a_circumflex = (ord ('A') == 193 ? "\x47" : "\xe5");
-- for (keys %$hash) {
-- my $l = 0 + /^\w+$/;
-- my $r = 0 + $hash->{$_} =~ /^\w+$/;
-- cmp_ok ($l, '==', $r, sprintf "key length %d", length $_);
-- cmp_ok ($l, '==', $_ eq "ch${a_circumflex}teau" ? 0 : 1);
-- }
-- if (eval "use Hash::Util; 1") {
-- print "# We have Hash::Util, so test that the restricted utf8 hash is valid\n";
-- my $hash = thaw_hash ('Locked hash with utf8 keys', \%U_HASH);
-+ print "# We have utf8 hashes, so test that the utf8 hashes in <DATA> are valid\n";
-+ my $hash = thaw_hash ('Hash with utf8 keys', \%U_HASH);
-+ my $a_circumflex = (ord ('A') == 193 ? "\x47" : "\xe5");
- for (keys %$hash) {
-- my $l = 0 + /^\w+$/;
-- my $r = 0 + $hash->{$_} =~ /^\w+$/;
-- cmp_ok ($l, '==', $r, sprintf "key length %d", length $_);
-- cmp_ok ($l, '==', $_ eq "ch${a_circumflex}teau" ? 0 : 1);
-+ my $l = 0 + /^\w+$/;
-+ my $r = 0 + $hash->{$_} =~ /^\w+$/;
-+ cmp_ok ($l, '==', $r, sprintf "key length %d", length $_);
-+ cmp_ok ($l, '==', $_ eq "ch${a_circumflex}teau" ? 0 : 1);
-+ }
-+ {
-+ require Hash::Util;
-+ print "# We have Hash::Util, so test that the restricted utf8 hash is valid\n";
-+ my $hash = thaw_hash ('Locked hash with utf8 keys', \%U_HASH);
-+ for (keys %$hash) {
-+ my $l = 0 + /^\w+$/;
-+ my $r = 0 + $hash->{$_} =~ /^\w+$/;
-+ cmp_ok ($l, '==', $r, sprintf "key length %d", length $_);
-+ cmp_ok ($l, '==', $_ eq "ch${a_circumflex}teau" ? 0 : 1);
-+ }
-+ test_locked_hash ($hash);
- }
-- test_locked_hash ($hash);
-- } else {
-- print "# We don't have Hash::Util, so test that the utf8 hash downgrades\n";
-- fail ("You can't get here [perl version $]]. This is a bug in the test.
--# Please send the output of perl -V to perlbug\@perl.org");
-- }
- } else {
-- print "# We don't have utf8 hashes, so test that the utf8 hashes downgrade\n";
-- thaw_fail ('Hash with utf8 keys', $UTF8_CROAK);
-- thaw_fail ('Locked hash with utf8 keys', $UTF8_CROAK);
-- local $Storable::drop_utf8 = 1;
-- my $expect = thaw $tests{"Hash with utf8 keys for 5.6"};
-- thaw_hash ('Hash with utf8 keys', $expect);
-- #foreach (keys %$expect) { print "'$_':\t'$expect->{$_}'\n"; }
-- #foreach (keys %$got) { print "'$_':\t'$got->{$_}'\n"; }
-- if (eval "use Hash::Util; 1") {
-- print "# We have Hash::Util, so test that the restricted hashes in <DATA> are valid\n";
-- fail ("You can't get here [perl version $]]. This is a bug in the test.
--# Please send the output of perl -V to perlbug\@perl.org");
-- } else {
-+ print "# We don't have utf8 hashes, so test that the utf8 hashes downgrade\n";
-+ thaw_fail ('Hash with utf8 keys', $UTF8_CROAK);
-+ thaw_fail ('Locked hash with utf8 keys', $UTF8_CROAK);
-+ local $Storable::drop_utf8 = 1;
-+ my $expect = thaw $tests{"Hash with utf8 keys for 5.6"};
-+ thaw_hash ('Hash with utf8 keys', $expect);
-+ #foreach (keys %$expect) { print "'$_':\t'$expect->{$_}'\n"; }
-+ #foreach (keys %$got) { print "'$_':\t'$got->{$_}'\n"; }
- print "# We don't have Hash::Util, so test that the restricted hashes downgrade\n";
- my $hash = thaw_hash ('Locked hash with utf8 keys', $expect);
- test_newkey ($hash);
-@@ -230,7 +212,6 @@ if ($] > 5.007002) {
- # Which croak comes first is a bit of an implementation issue :-)
- local $Storable::drop_utf8 = 0;
- thaw_fail ('Locked hash with utf8 keys', $RESTRICTED_CROAK);
-- }
- }
- __END__
- # A whole run of 2.x nfreeze data, uuencoded. The "mode bits" are the octal
-diff --git a/t/file_magic.t b/t/file_magic.t
-index a68665d..8c3f7ca 100644
---- a/t/file_magic.t
-+++ b/t/file_magic.t
-@@ -1,10 +1,8 @@
- #!perl -w
-
--BEGIN {
-- unshift @INC, 't/compat' if $] < 5.006002;
--};
--
- use strict;
-+use warnings;
-+
- use Test::More;
- use Storable qw(store nstore);
- use Config qw(%Config);
-@@ -32,354 +30,354 @@ my @tests = (
- [
- "perl-store\x041234\4\4\4\xD4\xC2\32\b\3\13\0\0\0v\b\xC5\32\b...",
- {
-- byteorder => 1234,
-- file => "data_perl-5.006001_i686-linux-thread-multi_Storable-0.1.le32",
-- hdrsize => 18,
-- intsize => 4,
-- longsize => 4,
-- netorder => 0,
-- ptrsize => 4,
-- version => -1,
-- version_nv => -1,
-+ byteorder => 1234,
-+ file => "data_perl-5.006001_i686-linux-thread-multi_Storable-0.1.le32",
-+ hdrsize => 18,
-+ intsize => 4,
-+ longsize => 4,
-+ netorder => 0,
-+ ptrsize => 4,
-+ version => -1,
-+ version_nv => -1,
- },
- ],
- [
- "perl-store\0\x041234\4\4\4\x8Co\34\b\3\13\0\0\0v\x94v\34...",
- {
-- byteorder => 1234,
-- file => "data_perl-5.006001_i686-linux-thread-multi_Storable-0.4_07.le32",
-- hdrsize => 19,
-- intsize => 4,
-- longsize => 4,
-- major => 0,
-- netorder => 0,
-- ptrsize => 4,
-- version => 0,
-- version_nv => 0,
-+ byteorder => 1234,
-+ file => "data_perl-5.006001_i686-linux-thread-multi_Storable-0.4_07.le32",
-+ hdrsize => 19,
-+ intsize => 4,
-+ longsize => 4,
-+ major => 0,
-+ netorder => 0,
-+ ptrsize => 4,
-+ version => 0,
-+ version_nv => 0,
- },
- ],
- [
- "perl-store\1\x8Co\34\b\3\0\0\0\13v\x94v\34\b\1\0\0\4\0\0\0...",
- {
-- file => "data_perl-5.006001_i686-linux-thread-multi_Storable-0.4_07.neutral",
-- hdrsize => 11,
-- major => 0,
-- netorder => 1,
-- version => 0,
-- version_nv => 0,
-+ file => "data_perl-5.006001_i686-linux-thread-multi_Storable-0.4_07.neutral",
-+ hdrsize => 11,
-+ major => 0,
-+ netorder => 1,
-+ version => 0,
-+ version_nv => 0,
- },
- ],
- [
- "pst0\2\x041234\4\4\4\3\13\0\0\0\1\0\4\0\0\0\0\0\0\0\0\0\0\0...",
- {
-- byteorder => 1234,
-- file => "data_perl-5.006001_i686-linux-thread-multi_Storable-0.604.le32",
-- hdrsize => 13,
-- intsize => 4,
-- longsize => 4,
-- major => 1,
-- netorder => 0,
-- ptrsize => 4,
-- version => 1,
-- version_nv => 1,
-+ byteorder => 1234,
-+ file => "data_perl-5.006001_i686-linux-thread-multi_Storable-0.604.le32",
-+ hdrsize => 13,
-+ intsize => 4,
-+ longsize => 4,
-+ major => 1,
-+ netorder => 0,
-+ ptrsize => 4,
-+ version => 1,
-+ version_nv => 1,
- },
- ],
- [
- "pst0\3\3\0\0\0\13\1\0\0\4\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0...",
- {
-- file => "data_perl-5.006001_i686-linux-thread-multi_Storable-0.604.neutral",
-- hdrsize => 5,
-- major => 1,
-- netorder => 1,
-- version => 1,
-- version_nv => 1,
-+ file => "data_perl-5.006001_i686-linux-thread-multi_Storable-0.604.neutral",
-+ hdrsize => 5,
-+ major => 1,
-+ netorder => 1,
-+ version => 1,
-+ version_nv => 1,
- },
- ],
- [
- "pst0\4\0\x041234\4\4\4\3\13\0\0\0\1\0\4\0\0\0\0\0\0\0\0\0\0...",
- {
-- byteorder => 1234,
-- file => "data_perl-5.006001_i686-linux-thread-multi_Storable-0.700.le32",
-- hdrsize => 14,
-- intsize => 4,
-- longsize => 4,
-- major => 2,
-- minor => 0,
-- netorder => 0,
-- ptrsize => 4,
-- version => "2.0",
-- version_nv => "2.000",
-+ byteorder => 1234,
-+ file => "data_perl-5.006001_i686-linux-thread-multi_Storable-0.700.le32",
-+ hdrsize => 14,
-+ intsize => 4,
-+ longsize => 4,
-+ major => 2,
-+ minor => 0,
-+ netorder => 0,
-+ ptrsize => 4,
-+ version => "2.0",
-+ version_nv => "2.000",
- },
- ],
- [
- "pst0\5\0\3\0\0\0\13\1\0\0\4\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0...",
- {
-- file => "data_perl-5.006001_i686-linux-thread-multi_Storable-0.700.neutral",
-- hdrsize => 6,
-- major => 2,
-- minor => 0,
-- netorder => 1,
-- version => "2.0",
-- version_nv => "2.000",
-+ file => "data_perl-5.006001_i686-linux-thread-multi_Storable-0.700.neutral",
-+ hdrsize => 6,
-+ major => 2,
-+ minor => 0,
-+ netorder => 1,
-+ version => "2.0",
-+ version_nv => "2.000",
- },
- ],
- [
- "pst0\4\4\x041234\4\4\4\x08\3\13\0\0\0\1\0\4\0\0\0\0\0\0\0\0\0...",
- {
-- byteorder => 1234,
-- file => "data_perl-5.006001_i686-linux-thread-multi_Storable-1.012.le32",
-- hdrsize => 15,
-- intsize => 4,
-- longsize => 4,
-- major => 2,
-- minor => 4,
-- netorder => 0,
-- nvsize => 8,
-- ptrsize => 4,
-- version => "2.4",
-- version_nv => "2.004",
-+ byteorder => 1234,
-+ file => "data_perl-5.006001_i686-linux-thread-multi_Storable-1.012.le32",
-+ hdrsize => 15,
-+ intsize => 4,
-+ longsize => 4,
-+ major => 2,
-+ minor => 4,
-+ netorder => 0,
-+ nvsize => 8,
-+ ptrsize => 4,
-+ version => "2.4",
-+ version_nv => "2.004",
- },
- ],
- [
- "pst0\4\3\x044321\4\4\4\x08\3\0\0\0\13\1\0\0\4\0\0\0\0\0\0\0\0...",
- {
-- byteorder => 4321,
-- file => "data_perl-5.006001_IA64.ARCHREV_0-thread-multi_Storable-1.006.be32",
-- hdrsize => 15,
-- intsize => 4,
-- longsize => 4,
-- major => 2,
-- minor => 3,
-- netorder => 0,
-- nvsize => 8,
-- ptrsize => 4,
-- version => "2.3",
-- version_nv => "2.003",
-+ byteorder => 4321,
-+ file => "data_perl-5.006001_IA64.ARCHREV_0-thread-multi_Storable-1.006.be32",
-+ hdrsize => 15,
-+ intsize => 4,
-+ longsize => 4,
-+ major => 2,
-+ minor => 3,
-+ netorder => 0,
-+ nvsize => 8,
-+ ptrsize => 4,
-+ version => "2.3",
-+ version_nv => "2.003",
- },
- ],
- [
- "pst0\5\3\3\0\0\0\13\1\0\0\4\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0...",
- {
-- file => "data_perl-5.006001_IA64.ARCHREV_0-thread-multi_Storable-1.006.neutral",
-- hdrsize => 6,
-- major => 2,
-- minor => 3,
-- netorder => 1,
-- version => "2.3",
-- version_nv => "2.003",
-+ file => "data_perl-5.006001_IA64.ARCHREV_0-thread-multi_Storable-1.006.neutral",
-+ hdrsize => 6,
-+ major => 2,
-+ minor => 3,
-+ netorder => 1,
-+ version => "2.3",
-+ version_nv => "2.003",
- },
- ],
- [
- "pst0\4\4\x044321\4\4\4\x08\3\0\0\0\13\1\0\0\4\0\0\0\0\0\0\0\0...",
- {
-- byteorder => 4321,
-- file => "data_perl-5.006001_IA64.ARCHREV_0-thread-multi_Storable-1.012.be32",
-- hdrsize => 15,
-- intsize => 4,
-- longsize => 4,
-- major => 2,
-- minor => 4,
-- netorder => 0,
-- nvsize => 8,
-- ptrsize => 4,
-- version => "2.4",
-- version_nv => "2.004",
-+ byteorder => 4321,
-+ file => "data_perl-5.006001_IA64.ARCHREV_0-thread-multi_Storable-1.012.be32",
-+ hdrsize => 15,
-+ intsize => 4,
-+ longsize => 4,
-+ major => 2,
-+ minor => 4,
-+ netorder => 0,
-+ nvsize => 8,
-+ ptrsize => 4,
-+ version => "2.4",
-+ version_nv => "2.004",
- },
- ],
- [
- "pst0\5\4\3\0\0\0\13\1\0\0\4\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0...",
- {
-- file => "data_perl-5.006001_IA64.ARCHREV_0-thread-multi_Storable-1.012.neutral",
-- hdrsize => 6,
-- major => 2,
-- minor => 4,
-- netorder => 1,
-- version => "2.4",
-- version_nv => "2.004",
-+ file => "data_perl-5.006001_IA64.ARCHREV_0-thread-multi_Storable-1.012.neutral",
-+ hdrsize => 6,
-+ major => 2,
-+ minor => 4,
-+ netorder => 1,
-+ version => "2.4",
-+ version_nv => "2.004",
- },
- ],
- [
- "pst0\4\6\x044321\4\4\4\x08\3\0\0\0\13\n\n4294967296...",
- {
-- byteorder => 4321,
-- file => "data_perl-5.008001_darwin-thread-multi-2level_Storable-2.08.be32",
-- hdrsize => 15,
-- intsize => 4,
-- longsize => 4,
-- major => 2,
-- minor => 6,
-- netorder => 0,
-- nvsize => 8,
-- ptrsize => 4,
-- version => "2.6",
-- version_nv => "2.006",
-+ byteorder => 4321,
-+ file => "data_perl-5.008001_darwin-thread-multi-2level_Storable-2.08.be32",
-+ hdrsize => 15,
-+ intsize => 4,
-+ longsize => 4,
-+ major => 2,
-+ minor => 6,
-+ netorder => 0,
-+ nvsize => 8,
-+ ptrsize => 4,
-+ version => "2.6",
-+ version_nv => "2.006",
- },
- ],
- [
- "pst0\5\6\3\0\0\0\13\n\n4294967296\0\0\0\bfour_...",
- {
-- file => "data_perl-5.008001_darwin-thread-multi-2level_Storable-2.08.neutral",
-- hdrsize => 6,
-- major => 2,
-- minor => 6,
-- netorder => 1,
-- version => "2.6",
-- version_nv => "2.006",
-+ file => "data_perl-5.008001_darwin-thread-multi-2level_Storable-2.08.neutral",
-+ hdrsize => 6,
-+ major => 2,
-+ minor => 6,
-+ netorder => 1,
-+ version => "2.6",
-+ version_nv => "2.006",
- },
- ],
- [
- "pst0\4\6\x044321\4\4\4\x08\3\0\0\0\13\4\3\0\0\0\0\0\0\0\nem...",
- {
-- byteorder => 4321,
-- file => "data_perl-5.008003_PA-RISC1.1-thread-multi_Storable-2.09.be32",
-- hdrsize => 15,
-- intsize => 4,
-- longsize => 4,
-- major => 2,
-- minor => 6,
-- netorder => 0,
-- nvsize => 8,
-- ptrsize => 4,
-- version => "2.6",
-- version_nv => "2.006",
-+ byteorder => 4321,
-+ file => "data_perl-5.008003_PA-RISC1.1-thread-multi_Storable-2.09.be32",
-+ hdrsize => 15,
-+ intsize => 4,
-+ longsize => 4,
-+ major => 2,
-+ minor => 6,
-+ netorder => 0,
-+ nvsize => 8,
-+ ptrsize => 4,
-+ version => "2.6",
-+ version_nv => "2.006",
- },
- ],
- [
- "pst0\5\6\3\0\0\0\13\4\3\0\0\0\0\0\0\0\nempty_hash\n...",
- {
-- file => "data_perl-5.008003_PA-RISC1.1-thread-multi_Storable-2.09.neutral",
-- hdrsize => 6,
-- major => 2,
-- minor => 6,
-- netorder => 1,
-- version => "2.6",
-- version_nv => "2.006",
-+ file => "data_perl-5.008003_PA-RISC1.1-thread-multi_Storable-2.09.neutral",
-+ hdrsize => 6,
-+ major => 2,
-+ minor => 6,
-+ netorder => 1,
-+ version => "2.6",
-+ version_nv => "2.006",
- },
- ],
- [
- "pst0\4\6\x0812345678\4\4\4\x08\3\13\0\0\0\4\3\0\0\0\0\n\0...",
- {
-- byteorder => 12_345_678,
-- file => "data_perl-5.008004_i86pc-solaris-64int_Storable-2.12.le64",
-- hdrsize => 19,
-- intsize => 4,
-- longsize => 4,
-- major => 2,
-- minor => 6,
-- netorder => 0,
-- nvsize => 8,
-- ptrsize => 4,
-- version => "2.6",
-- version_nv => "2.006",
-+ byteorder => 12_345_678,
-+ file => "data_perl-5.008004_i86pc-solaris-64int_Storable-2.12.le64",
-+ hdrsize => 19,
-+ intsize => 4,
-+ longsize => 4,
-+ major => 2,
-+ minor => 6,
-+ netorder => 0,
-+ nvsize => 8,
-+ ptrsize => 4,
-+ version => "2.6",
-+ version_nv => "2.006",
- },
- ],
- [
- "pst0\4\6\x041234\4\4\4\x08\3\13\0\0\0\4\3\0\0\0\0\n\0\0\0em...",
- {
-- byteorder => 1234,
-- file => "data_perl-5.008006_i686-linux-thread-multi_Storable-2.13.le32",
-- hdrsize => 15,
-- intsize => 4,
-- longsize => 4,
-- major => 2,
-- minor => 6,
-- netorder => 0,
-- nvsize => 8,
-- ptrsize => 4,
-- version => "2.6",
-- version_nv => "2.006",
-+ byteorder => 1234,
-+ file => "data_perl-5.008006_i686-linux-thread-multi_Storable-2.13.le32",
-+ hdrsize => 15,
-+ intsize => 4,
-+ longsize => 4,
-+ major => 2,
-+ minor => 6,
-+ netorder => 0,
-+ nvsize => 8,
-+ ptrsize => 4,
-+ version => "2.6",
-+ version_nv => "2.006",
- },
- ],
- [
- "pst0\4\6\x0887654321\4\x08\x08\x08\3\0\0\0\13\4\3\0\0\0\0\0\0...",
- {
-- byteorder => 87_654_321,
-- file => "data_perl-5.008007_IA64.ARCHREV_0-thread-multi-LP64_Storable-2.13.be64",
-- hdrsize => 19,
-- intsize => 4,
-- longsize => 8,
-- major => 2,
-- minor => 6,
-- netorder => 0,
-- nvsize => 8,
-- ptrsize => 8,
-- version => "2.6",
-- version_nv => "2.006",
-+ byteorder => 87_654_321,
-+ file => "data_perl-5.008007_IA64.ARCHREV_0-thread-multi-LP64_Storable-2.13.be64",
-+ hdrsize => 19,
-+ intsize => 4,
-+ longsize => 8,
-+ major => 2,
-+ minor => 6,
-+ netorder => 0,
-+ nvsize => 8,
-+ ptrsize => 8,
-+ version => "2.6",
-+ version_nv => "2.006",
- },
- ],
- [
- "pst0\4\x07\x0812345678\4\x08\x08\x08\3\13\0\0\0\4\3\0\0\0\0\n\0...",
- {
-- byteorder => 12_345_678,
-- file => "data_perl-5.008007_x86-solaris-thread-multi-64_Storable-2.15.le64",
-- hdrsize => 19,
-- intsize => 4,
-- longsize => 8,
-- major => 2,
-- minor => 7,
-- netorder => 0,
-- nvsize => 8,
-- ptrsize => 8,
-- version => "2.7",
-- version_nv => "2.007",
-+ byteorder => 12_345_678,
-+ file => "data_perl-5.008007_x86-solaris-thread-multi-64_Storable-2.15.le64",
-+ hdrsize => 19,
-+ intsize => 4,
-+ longsize => 8,
-+ major => 2,
-+ minor => 7,
-+ netorder => 0,
-+ nvsize => 8,
-+ ptrsize => 8,
-+ version => "2.7",
-+ version_nv => "2.007",
- },
- ],
- [
- "pst0\5\x07\3\0\0\0\13\4\3\0\0\0\0\0\0\0\nempty_hash\n...",
- {
-- file => "data_perl-5.008007_x86-solaris-thread-multi-64_Storable-2.15.neutral",
-- hdrsize => 6,
-- major => 2,
-- minor => 7,
-- netorder => 1,
-- version => "2.7",
-- version_nv => "2.007",
-+ file => "data_perl-5.008007_x86-solaris-thread-multi-64_Storable-2.15.neutral",
-+ hdrsize => 6,
-+ major => 2,
-+ minor => 7,
-+ netorder => 1,
-+ version => "2.7",
-+ version_nv => "2.007",
- },
- ],
- [
- "pst0\4\5\x041234\4\4\4\x08\3\13\0\0\0\4\3\0\0\0\0\n\0\0\0em...",
- {
-- byteorder => 1234,
-- file => "data_perl-5.008_i686-linux-thread-multi_Storable-2.04.le32",
-- hdrsize => 15,
-- intsize => 4,
-- longsize => 4,
-- major => 2,
-- minor => 5,
-- netorder => 0,
-- nvsize => 8,
-- ptrsize => 4,
-- version => "2.5",
-- version_nv => "2.005",
-+ byteorder => 1234,
-+ file => "data_perl-5.008_i686-linux-thread-multi_Storable-2.04.le32",
-+ hdrsize => 15,
-+ intsize => 4,
-+ longsize => 4,
-+ major => 2,
-+ minor => 5,
-+ netorder => 0,
-+ nvsize => 8,
-+ ptrsize => 4,
-+ version => "2.5",
-+ version_nv => "2.005",
- },
- ],
- [
- "pst0\5\5\3\0\0\0\13\4\3\0\0\0\0\0\0\0\nempty_hash\n...",
- {
-- file => "data_perl-5.008_i686-linux-thread-multi_Storable-2.04.neutral",
-- hdrsize => 6,
-- major => 2,
-- minor => 5,
-- netorder => 1,
-- version => "2.5",
-- version_nv => "2.005",
-+ file => "data_perl-5.008_i686-linux-thread-multi_Storable-2.04.neutral",
-+ hdrsize => 6,
-+ major => 2,
-+ minor => 5,
-+ netorder => 1,
-+ version => "2.5",
-+ version_nv => "2.005",
- },
- ],
- [
- "pst0\4\x07\x041234\4\4\4\x08\3\13\0\0\0\4\3\0\0\0\0\n\0\0\0em...",
- {
-- byteorder => 1234,
-- file => "data_perl-5.009003_i686-linux_Storable-2.15.le32",
-- hdrsize => 15,
-- intsize => 4,
-- longsize => 4,
-- major => 2,
-- minor => 7,
-- netorder => 0,
-- nvsize => 8,
-- ptrsize => 4,
-- version => "2.7",
-- version_nv => "2.007",
-+ byteorder => 1234,
-+ file => "data_perl-5.009003_i686-linux_Storable-2.15.le32",
-+ hdrsize => 15,
-+ intsize => 4,
-+ longsize => 4,
-+ major => 2,
-+ minor => 7,
-+ netorder => 0,
-+ nvsize => 8,
-+ ptrsize => 4,
-+ version => "2.7",
-+ version_nv => "2.007",
- },
- ],
- );
-@@ -408,8 +406,8 @@ store({}, $file);
- ok(!$info->{netorder}, "no netorder");
-
- my %attrs = (
-- nvsize => 5.006,
-- ptrsize => 5.005,
-+ nvsize => 5.006,
-+ ptrsize => 5.005,
- map {$_ => 5.004} qw(byteorder intsize longsize)
- );
- for my $attr (keys %attrs) {
-@@ -435,7 +433,7 @@ nstore({}, $file);
-
- ok($info->{netorder}, "no netorder");
- for (qw(byteorder intsize longsize ptrsize nvsize)) {
-- ok(!exists $info->{$_}, "no $_");
-+ ok(!exists $info->{$_}, "no $_");
- }
- }
-
-diff --git a/t/flags.t b/t/flags.t
-index e648f7a..ed376d1 100644
---- a/t/flags.t
-+++ b/t/flags.t
-@@ -1,103 +1,103 @@
- #!./perl
-
-+use strict;
-+use warnings;
-+
- use Test::More tests => 16;
-
- use Storable ();
-
--use warnings;
--use strict;
--
- package TEST;
-
- sub make {
-- my $pkg = shift;
-- return bless { a => 1, b => 2 }, $pkg;
-+ my $pkg = shift;
-+ return bless { a => 1, b => 2 }, $pkg;
- }
-
- package TIED_HASH;
-
- sub TIEHASH {
-- my $pkg = shift;
-- return bless { a => 1, b => 2 }, $pkg;
-+ my $pkg = shift;
-+ return bless { a => 1, b => 2 }, $pkg;
- }
-
- sub FETCH {
-- my ($self, $key) = @_;
-- return $self->{$key};
-+ my ($self, $key) = @_;
-+ return $self->{$key};
- }
-
- sub STORE {
-- my ($self, $key, $value) = @_;
-- $self->{$key} = $value;
-+ my ($self, $key, $value) = @_;
-+ $self->{$key} = $value;
- }
-
- sub FIRSTKEY {
-- my $self = shift;
-- keys %$self;
-- return each %$self;
-+ my $self = shift;
-+ keys %$self;
-+ return each %$self;
- }
-
- sub NEXTKEY {
-- my $self = shift;
-- return each %{$self};
-+ my $self = shift;
-+ return each %{$self};
- }
-
- sub EXISTS {
-- my ($self, $key) = @_;
-- return exists $self->{$key};
-+ my ($self, $key) = @_;
-+ return exists $self->{$key};
- }
-
- package main;
-
- {
-- my $obj = TEST->make;
--
-- is_deeply($obj, { a => 1, b => 2 }, "object contains correct data");
--
-- my $frozen = Storable::freeze($obj);
-- my ($t1, $t2) = Storable::thaw($frozen);
--
-- {
-- no warnings 'once';
-- local $Storable::flags = Storable::FLAGS_COMPAT();
-- $t2 = Storable::thaw($frozen);
-- }
--
-- is_deeply($t1, $t2, "objects contain matching data");
-- is(ref $t1, 'TEST', "default object is blessed");
-- is(ref $t2, 'TEST', "compat object is blessed into correct class");
--
-- my $t3 = Storable::thaw($frozen, Storable::FLAGS_COMPAT());
-- is_deeply($t2, $t3, "objects contain matching data (explicit test)");
-- is(ref $t3, 'TEST', "compat object is blessed into correct class (explicit test)");
--
-- my $t4 = Storable::thaw($frozen, Storable::BLESS_OK());
-- is_deeply($t2, $t3, "objects contain matching data (explicit test for bless)");
-- is(ref $t3, 'TEST', "compat object is blessed into correct class (explicit test for bless)");
--
-- {
-- no warnings 'once';
-- local $Storable::flags = Storable::FLAGS_COMPAT();
-- my $t5 = Storable::thaw($frozen, 0);
-- my $t6 = Storable::thaw($frozen, Storable::TIE_OK());
--
-- is_deeply($t1, $t5, "objects contain matching data");
-- is_deeply($t1, $t6, "objects contain matching data for TIE_OK");
-- is(ref $t5, 'HASH', "default object is unblessed");
-- is(ref $t6, 'HASH', "TIE_OK object is unblessed");
-- }
-+ my $obj = TEST->make;
-+
-+ is_deeply($obj, { a => 1, b => 2 }, "object contains correct data");
-+
-+ my $frozen = Storable::freeze($obj);
-+ my ($t1, $t2) = Storable::thaw($frozen);
-+
-+ {
-+ no warnings 'once';
-+ local $Storable::flags = Storable::FLAGS_COMPAT();
-+ $t2 = Storable::thaw($frozen);
-+ }
-+
-+ is_deeply($t1, $t2, "objects contain matching data");
-+ is(ref $t1, 'TEST', "default object is blessed");
-+ is(ref $t2, 'TEST', "compat object is blessed into correct class");
-+
-+ my $t3 = Storable::thaw($frozen, Storable::FLAGS_COMPAT());
-+ is_deeply($t2, $t3, "objects contain matching data (explicit test)");
-+ is(ref $t3, 'TEST', "compat object is blessed into correct class (explicit test)");
-+
-+ my $t4 = Storable::thaw($frozen, Storable::BLESS_OK());
-+ is_deeply($t2, $t3, "objects contain matching data (explicit test for bless)");
-+ is(ref $t3, 'TEST', "compat object is blessed into correct class (explicit test for bless)");
-+
-+ {
-+ no warnings 'once';
-+ local $Storable::flags = Storable::FLAGS_COMPAT();
-+ my $t5 = Storable::thaw($frozen, 0);
-+ my $t6 = Storable::thaw($frozen, Storable::TIE_OK());
-+
-+ is_deeply($t1, $t5, "objects contain matching data");
-+ is_deeply($t1, $t6, "objects contain matching data for TIE_OK");
-+ is(ref $t5, 'HASH', "default object is unblessed");
-+ is(ref $t6, 'HASH', "TIE_OK object is unblessed");
-+ }
- }
-
- {
-- tie my %hash, 'TIED_HASH';
-- ok(tied %hash, "hash is tied");
-- my $obj = { bow => \%hash };
-+ tie my %hash, 'TIED_HASH';
-+ ok(tied %hash, "hash is tied");
-+ my $obj = { bow => \%hash };
-
-- my $frozen = Storable::freeze($obj);
-- my $t1 = Storable::thaw($frozen, Storable::FLAGS_COMPAT());
-- my $t2 = eval { Storable::thaw($frozen); };
-+ my $frozen = Storable::freeze($obj);
-+ my $t1 = Storable::thaw($frozen, Storable::FLAGS_COMPAT());
-+ my $t2 = eval { Storable::thaw($frozen); };
-
-- ok(!$@, "trying to thaw a tied value succeeds");
-- ok(tied %{$t1->{bow}}, "compat object is tied");
-- is(ref tied %{$t1->{bow}}, 'TIED_HASH', "compat object is tied into correct class");
-+ ok(!$@, "trying to thaw a tied value succeeds");
-+ ok(tied %{$t1->{bow}}, "compat object is tied");
-+ is(ref tied %{$t1->{bow}}, 'TIED_HASH', "compat object is tied into correct class");
- }
-diff --git a/t/forgive.t b/t/forgive.t
-index 1833a26..b3775ed 100644
---- a/t/forgive.t
-+++ b/t/forgive.t
-@@ -1,7 +1,7 @@
- #!./perl
- #
- # Copyright (c) 1995-2000, Raphael Manfredi
--#
-+#
- # You may redistribute only under the same terms as Perl 5, as specified
- # in the README file that comes with the distribution.
- #
-@@ -9,26 +9,13 @@
- # (C) Copyright 1997, Universitat Dortmund, all rights reserved.
- #
-
--sub BEGIN {
-- unshift @INC, 't';
-- unshift @INC, 't/compat' if $] < 5.006002;
-- require Config; import Config;
-- if ($ENV{PERL_CORE} and $Config{'extensions'} !~ /\bStorable\b/) {
-- print "1..0 # Skip: Storable was not built\n";
-- exit 0;
-- }
--}
-+use strict;
-+use warnings;
-
- use Storable qw(store retrieve);
- use Test::More;
-
--# problems with 5.00404 when in an BEGIN block, so this is defined here
--if (!eval { require File::Spec; 1 } || $File::Spec::VERSION < 0.8) {
-- plan(skip_all => "File::Spec 0.8 needed");
-- # Mention $File::Spec::VERSION again, as 5.00503's harness seems to have
-- # warnings on.
-- exit $File::Spec::VERSION;
--}
-+use File::Spec;
-
- plan(tests => 8);
-
-@@ -45,8 +32,8 @@ $Storable::forgive_me=1;
- my $devnull = File::Spec->devnull;
-
- open(SAVEERR, ">&STDERR");
--open(STDERR, '>', $devnull) or
-- ( print SAVEERR "Unable to redirect STDERR: $!\n" and exit(1) );
-+open(STDERR, '>', $devnull) or
-+ ( print SAVEERR "Unable to redirect STDERR: $!\n" and exit(1) );
-
- eval {$result = store ($bad , "store$$")};
-
-diff --git a/t/freeze.t b/t/freeze.t
-index 1dbac0c..52a5da7 100644
---- a/t/freeze.t
-+++ b/t/freeze.t
-@@ -1,97 +1,94 @@
- #!./perl
- #
- # Copyright (c) 1995-2000, Raphael Manfredi
--#
-+#
- # You may redistribute only under the same terms as Perl 5, as specified
- # in the README file that comes with the distribution.
- #
-
-+use strict;
-+use warnings;
-+
- sub BEGIN {
-- unshift @INC, 't';
-- unshift @INC, 't/compat' if $] < 5.006002;
-- require Config; import Config;
-- if ($ENV{PERL_CORE} and $Config{'extensions'} !~ /\bStorable\b/) {
-- print "1..0 # Skip: Storable was not built\n";
-- exit 0;
-- }
-- require 'st-dump.pl';
-+ unshift @INC, 't/lib';
- }
-
-+use STDump;
- use Storable qw(freeze nfreeze thaw);
-
- $Storable::flags = Storable::FLAGS_COMPAT;
-
- use Test::More tests => 21;
-
--$a = 'toto';
--$b = \$a;
--$c = bless {}, CLASS;
-+my $a = 'toto';
-+my $b = \$a;
-+my $c = bless {}, 'CLASS';
- $c->{attribute} = $b;
--$d = {};
--$e = [];
-+my $d = {};
-+my $e = [];
- $d->{'a'} = $e;
- $e->[0] = $d;
--%a = ('key', 'value', 1, 0, $a, $b, 'cvar', \$c);
--@a = ('first', undef, 3, -4, -3.14159, 456, 4.5, $d, \$d, \$e, $e,
-- $b, \$a, $a, $c, \$c, \%a);
-+my %a = ('key', 'value', 1, 0, $a, $b, 'cvar', \$c);
-+my @a = ('first', undef, 3, -4, -3.14159, 456, 4.5, $d, \$d, \$e, $e,
-+ $b, \$a, $a, $c, \$c, \%a);
-
- my $f1 = freeze(\@a);
- isnt($f1, undef);
-
--$dumped = &dump(\@a);
-+my $dumped = stdump(\@a);
- isnt($dumped, undef);
-
--$root = thaw($f1);
-+my $root = thaw($f1);
- isnt($root, undef);
-
--$got = &dump($root);
-+my $got = stdump($root);
- isnt($got, undef);
-
- is($got, $dumped);
-
--package FOO; @ISA = qw(Storable);
-+package FOO; our @ISA = qw(Storable);
-
- sub make {
-- my $self = bless {};
-- $self->{key} = \%main::a;
-- return $self;
-+ my $self = bless {};
-+ $self->{key} = \%a;
-+ return $self;
- };
-
- package main;
-
--$foo = FOO->make;
-+my $foo = FOO->make;
- my $f2 = $foo->freeze;
- isnt($f2, undef);
-
- my $f3 = $foo->nfreeze;
- isnt($f3, undef);
-
--$root3 = thaw($f3);
-+my $root3 = thaw($f3);
- isnt($root3, undef);
-
--is(&dump($foo), &dump($root3));
-+is(stdump($foo), stdump($root3));
-
- $root = thaw($f2);
--is(&dump($foo), &dump($root));
-+is(stdump($foo), stdump($root));
-
--is(&dump($root3), &dump($root));
-+is(stdump($root3), stdump($root));
-
--$other = freeze($root);
-+my $other = freeze($root);
- is(length$other, length $f2);
-
--$root2 = thaw($other);
--is(&dump($root2), &dump($root));
-+my $root2 = thaw($other);
-+is(stdump($root2), stdump($root));
-
--$VAR1 = [
-- 'method',
-- 1,
-- 'prepare',
-- 'SELECT table_name, table_owner, num_rows FROM iitables
-- where table_owner != \'$ingres\' and table_owner != \'DBA\''
-+my $VAR1 = [
-+ 'method',
-+ 1,
-+ 'prepare',
-+ 'SELECT table_name, table_owner, num_rows FROM iitables
-+ where table_owner != \'$ingres\' and table_owner != \'DBA\''
- ];
-
--$x = nfreeze($VAR1);
--$VAR2 = thaw($x);
-+my $x = nfreeze($VAR1);
-+my $VAR2 = thaw($x);
- is($VAR2->[3], $VAR1->[3]);
-
- # Test the workaround for LVALUE bug in perl 5.004_04 -- from Gisle Aas
-@@ -105,14 +102,14 @@ is($@, '');
- my $thaw_me = 'asdasdasdasd';
-
- eval {
-- my $thawed = thaw $thaw_me;
-+ my $thawed = thaw $thaw_me;
- };
- isnt($@, '');
-
- my %to_be_frozen = (foo => 'bar');
- my $frozen;
- eval {
-- $frozen = freeze \%to_be_frozen;
-+ $frozen = freeze \%to_be_frozen;
- };
- is($@, '');
-
-@@ -121,7 +118,7 @@ eval { thaw $thaw_me };
- eval { $frozen = freeze { foo => {} } };
- is($@, '');
-
--thaw $frozen; # used to segfault here
-+thaw $frozen; # used to segfault here
- pass("Didn't segfault");
-
- SKIP: {
-diff --git a/t/huge.t b/t/huge.t
-index 09b173e..d2bbf15 100644
---- a/t/huge.t
-+++ b/t/huge.t
-@@ -8,8 +8,6 @@ use Storable qw(dclone);
- use Test::More;
-
- BEGIN {
-- plan skip_all => 'Storable was not built'
-- if $ENV{PERL_CORE} && $Config{'extensions'} !~ /\b Storable \b/x;
- plan skip_all => 'Need 64-bit pointers for this test'
- if $Config{ptrsize} < 8 and $] > 5.013;
- plan skip_all => 'Need 64-bit int for this test on older versions'
-@@ -23,8 +21,8 @@ my $huge = int(2 ** 31);
- # v5.24.1c/v5.25.1c switched to die earlier with "Too many elements",
- # which is much safer.
- my $has_too_many = ($Config{usecperl} and
-- (($] >= 5.024001 and $] < 5.025000)
-- or $] >= 5.025001)) ? 1 : 0;
-+ (($] >= 5.024001 and $] < 5.025000)
-+ or $] >= 5.025001)) ? 1 : 0;
-
- # These overlarge sizes are enabled only since Storable 3.00 and some
- # cases need cperl support. Perl5 (as of 5.24) has some internal
-@@ -40,28 +38,35 @@ my $has_too_many = ($Config{usecperl} and
- # U32 5.25c -
- # hash key: I32
-
--my @cases = (
-- ['huge string',
-- sub { my $s = 'x' x $huge; \$s }],
-+my @cases;
-+ [
-+ 'huge string',
-+ sub { my $s = 'x' x $huge; \$s }
-+ ],
-
-- ['array with huge element',
-- sub { my $s = 'x' x $huge; [$s] }],
-+ [
-+ 'array with huge element',
-+ sub { my $s = 'x' x $huge; [$s] }
-+ ],
-
-- ['hash with huge value',
-- sub { my $s = 'x' x $huge; +{ foo => $s } }],
-+ [
-+ 'hash with huge value',
-+ sub { my $s = 'x' x $huge; +{ foo => $s } }
-+ ],
-
- # There's no huge key, limited to I32.
-- ) if $Config{ptrsize} > 4;
-+) if $Config{ptrsize} > 4;
-
-
- # An array with a huge number of elements requires several gigabytes of
- # virtual memory. On darwin it is evtl killed.
- if ($Config{ptrsize} > 4 and !$has_too_many) {
-- # needs 20-55G virtual memory, 4.6M heap and several minutes on a fast machine
-+ # needs 20-55G virtual memory, 4.6M heap and several minutes on a fast machine
- if ($ENV{PERL_TEST_MEMORY} >= 55) {
-- push @cases,
-- [ 'huge array',
-- sub { my @x; $x[$huge] = undef; \@x } ];
-+ push @cases, [
-+ 'huge array',
-+ sub { my @x; $x[$huge] = undef; \@x }
-+ ];
- } else {
- diag "skip huge array, need PERL_TEST_MEMORY >= 55";
- }
-@@ -74,9 +79,10 @@ if (!$has_too_many) {
- # needs >90G virtual mem, and is evtl. killed
- if ($ENV{PERL_TEST_MEMORY} >= 96) {
- # number of keys >I32. impossible to handle with perl5, but Storable can.
-- push @cases,
-- ['huge hash',
-- sub { my %x = (0 .. $huge); \%x } ];
-+ push @cases, [
-+ 'huge hash',
-+ sub { my %x = (0 .. $huge); \%x }
-+ ];
- } else {
- diag "skip huge hash, need PERL_TEST_MEMORY >= 96";
- }
-diff --git a/t/hugeids.t b/t/hugeids.t
-index c0e19ae..fd8663e 100644
---- a/t/hugeids.t
-+++ b/t/hugeids.t
-@@ -15,8 +15,6 @@ use File::Temp qw(tempfile);
- use File::Spec;
-
- BEGIN {
-- plan skip_all => 'Storable was not built'
-- if $ENV{PERL_CORE} && $Config{'extensions'} !~ /\b Storable \b/x;
- plan skip_all => 'Need 64-bit pointers for this test'
- if $Config{ptrsize} < 8 and $] > 5.013;
- plan skip_all => 'Need 64-bit int for this test on older versions'
-@@ -39,185 +37,178 @@ plan tests => 12;
- my $skips = $ENV{PERL_STORABLE_SKIP_ID_TEST} || '';
- my $keeps = $ENV{PERL_STORABLE_KEEP_ID_TEST};
-
--freeze_thaw_test
-- (
-- name => "object ids between 2G and 4G",
-- freeze => \&make_2g_data,
-- thaw => \&check_2g_data,
-- id => "2g",
-- memory => 34,
-- );
--
--freeze_thaw_test
-- (
-- name => "object ids over 4G",
-- freeze => \&make_4g_data,
-- thaw => \&check_4g_data,
-- id => "4g",
-- memory => 70,
-- );
--
--freeze_thaw_test
-- (
-- name => "hook object ids over 4G",
-- freeze => \&make_hook_data,
-- thaw => \&check_hook_data,
-- id => "hook4g",
-- memory => 70,
-- );
-+freeze_thaw_test(
-+ name => "object ids between 2G and 4G",
-+ freeze => \&make_2g_data,
-+ thaw => \&check_2g_data,
-+ id => "2g",
-+ memory => 34,
-+);
-+
-+freeze_thaw_test(
-+ name => "object ids over 4G",
-+ freeze => \&make_4g_data,
-+ thaw => \&check_4g_data,
-+ id => "4g",
-+ memory => 70,
-+);
-+
-+freeze_thaw_test(
-+ name => "hook object ids over 4G",
-+ freeze => \&make_hook_data,
-+ thaw => \&check_hook_data,
-+ id => "hook4g",
-+ memory => 70,
-+);
-
- # not really an id test, but the infrastructure here makes tests
- # easier
--freeze_thaw_test
-- (
-- name => "network store large PV",
-- freeze => \&make_net_large_pv,
-- thaw => \&check_net_large_pv,
-- id => "netlargepv",
-- memory => 8,
-- );
--
--freeze_thaw_test
-- (
-- name => "hook store with 2g data",
-- freeze => \&make_2g_hook_data,
-- thaw => \&check_2g_hook_data,
-- id => "hook2gdata",
-- memory => 4,
-- );
--
--freeze_thaw_test
-- (
-- name => "hook store with 4g data",
-- freeze => \&make_4g_hook_data,
-- thaw => \&check_4g_hook_data,
-- id => "hook4gdata",
-- memory => 8,
-- );
-+freeze_thaw_test(
-+ name => "network store large PV",
-+ freeze => \&make_net_large_pv,
-+ thaw => \&check_net_large_pv,
-+ id => "netlargepv",
-+ memory => 8,
-+);
-+
-+freeze_thaw_test(
-+ name => "hook store with 2g data",
-+ freeze => \&make_2g_hook_data,
-+ thaw => \&check_2g_hook_data,
-+ id => "hook2gdata",
-+ memory => 4,
-+);
-+
-+freeze_thaw_test(
-+ name => "hook store with 4g data",
-+ freeze => \&make_4g_hook_data,
-+ thaw => \&check_4g_hook_data,
-+ id => "hook4gdata",
-+ memory => 8,
-+);
-
- sub freeze_thaw_test {
- my %opts = @_;
-
- my $freeze = $opts{freeze}
-- or die "Missing freeze";
-+ or die "Missing freeze";
- my $thaw = $opts{thaw}
-- or die "Missing thaw";
-+ or die "Missing thaw";
- my $id = $opts{id}
-- or die "Missing id";
-+ or die "Missing id";
- my $name = $opts{name}
-- or die "Missing name";
-+ or die "Missing name";
- my $memory = $opts{memory}
-- or die "Missing memory";
-+ or die "Missing memory";
- my $todo_thaw = $opts{todo_thaw} || "";
-
-- SKIP:
-- {
-- # IPC::Run would be handy here
-+ SKIP: {
-+ # IPC::Run would be handy here
-
-- $ENV{PERL_TEST_MEMORY} >= $memory
-- or skip "Not enough memory to test $name", 2;
-- $skips =~ /\b\Q$id\E\b/
-- and skip "You requested test $name ($id) be skipped", 2;
-+ $ENV{PERL_TEST_MEMORY} >= $memory
-+ or skip "Not enough memory to test $name", 2;
-+ $skips =~ /\b\Q$id\E\b/
-+ and skip "You requested test $name ($id) be skipped", 2;
- defined $keeps && $keeps !~ /\b\Q$id\E\b/
- and skip "You didn't request test $name ($id)", 2;
-- my $stored;
-- if (defined(my $pid = open(my $fh, "-|"))) {
-- unless ($pid) {
-- # child
-- open my $cfh, "|-", "gzip"
-- or die "Cannot pipe to gzip: $!";
-- binmode $cfh;
-- $freeze->($cfh);
-- exit;
-- }
-- # parent
-- $stored = do { local $/; <$fh> };
-- close $fh;
-- }
-- else {
-- skip "$name: Cannot fork for freeze", 2;
-- }
-- ok($stored, "$name: we got output data")
-- or skip "$name: skipping thaw test", 1;
--
-- my ($tfh, $tname) = tempfile();
--
-- #my $tname = "$id.store.gz";
-- #open my $tfh, ">", $tname or die;
-- #binmode $tfh;
--
-- print $tfh $stored;
-- close $tfh;
--
-- if (defined(my $pid = open(my $fh, "-|"))) {
-- unless ($pid) {
-- # child
-- open my $bfh, "-|", "gunzip <$tname"
-- or die "Cannot pipe from gunzip: $!";
-- binmode $bfh;
-- $thaw->($bfh);
-- exit;
-- }
-- my $out = do { local $/; <$fh> };
-- chomp $out;
-- local $TODO = $todo_thaw;
-- is($out, "OK", "$name: check result");
-- }
-- else {
-- skip "$name: Cannot fork for thaw", 1;
-- }
-+ my $stored;
-+ if (defined(my $pid = open(my $fh, "-|"))) {
-+ unless ($pid) {
-+ # child
-+ open my $cfh, "|-", "gzip"
-+ or die "Cannot pipe to gzip: $!";
-+ binmode $cfh;
-+ $freeze->($cfh);
-+ exit;
-+ }
-+ # parent
-+ $stored = do { local $/; <$fh> };
-+ close $fh;
-+ }
-+ else {
-+ skip "$name: Cannot fork for freeze", 2;
-+ }
-+ ok($stored, "$name: we got output data")
-+ or skip "$name: skipping thaw test", 1;
-+
-+ my ($tfh, $tname) = tempfile();
-+
-+ #my $tname = "$id.store.gz";
-+ #open my $tfh, ">", $tname or die;
-+ #binmode $tfh;
-+
-+ print $tfh $stored;
-+ close $tfh;
-+
-+ if (defined(my $pid = open(my $fh, "-|"))) {
-+ unless ($pid) {
-+ # child
-+ open my $bfh, "-|", "gunzip <$tname"
-+ or die "Cannot pipe from gunzip: $!";
-+ binmode $bfh;
-+ $thaw->($bfh);
-+ exit;
-+ }
-+ my $out = do { local $/; <$fh> };
-+ chomp $out;
-+ local $TODO = $todo_thaw;
-+ is($out, "OK", "$name: check result");
-+ }
-+ else {
-+ skip "$name: Cannot fork for thaw", 1;
-+ }
- }
- }
-
-
- sub make_2g_data {
-- my ($fh) = @_;
-- my @x;
-- my $y = 1;
-- my $z = 2;
-- my $g2 = 0x80000000;
-- $x[0] = \$y;
-- $x[$g2] = \$y;
-- $x[$g2+1] = \$z;
-- $x[$g2+2] = \$z;
-- store_fd(\@x, $fh);
-+ my ($fh) = @_;
-+ my @x;
-+ my $y = 1;
-+ my $z = 2;
-+ my $g2 = 0x80000000;
-+ $x[0] = \$y;
-+ $x[$g2] = \$y;
-+ $x[$g2+1] = \$z;
-+ $x[$g2+2] = \$z;
-+ store_fd(\@x, $fh);
- }
-
- sub check_2g_data {
-- my ($fh) = @_;
-- my $x = retrieve_fd($fh);
-- my $g2 = 0x80000000;
-- $x->[0] == $x->[$g2]
-- or die "First entry mismatch";
-- $x->[$g2+1] == $x->[$g2+2]
-- or die "2G+ entry mismatch";
-- print "OK";
-+ my ($fh) = @_;
-+ my $x = retrieve_fd($fh);
-+ my $g2 = 0x80000000;
-+ $x->[0] == $x->[$g2]
-+ or die "First entry mismatch";
-+ $x->[$g2+1] == $x->[$g2+2]
-+ or die "2G+ entry mismatch";
-+ print "OK";
- }
-
- sub make_4g_data {
-- my ($fh) = @_;
-- my @x;
-- my $y = 1;
-- my $z = 2;
-- my $g4 = 2*0x80000000;
-- $x[0] = \$y;
-- $x[$g4] = \$y;
-- $x[$g4+1] = \$z;
-- $x[$g4+2] = \$z;
-- store_fd(\@x, $fh);
-+ my ($fh) = @_;
-+ my @x;
-+ my $y = 1;
-+ my $z = 2;
-+ my $g4 = 2*0x80000000;
-+ $x[0] = \$y;
-+ $x[$g4] = \$y;
-+ $x[$g4+1] = \$z;
-+ $x[$g4+2] = \$z;
-+ store_fd(\@x, $fh);
- }
-
- sub check_4g_data {
-- my ($fh) = @_;
-- my $x = retrieve_fd($fh);
-- my $g4 = 2*0x80000000;
-- $x->[0] == $x->[$g4]
-- or die "First entry mismatch";
-- $x->[$g4+1] == $x->[$g4+2]
-- or die "4G+ entry mismatch";
-- ${$x->[$g4+1]} == 2
-- or die "Incorrect value in 4G+ entry";
-- print "OK";
-+ my ($fh) = @_;
-+ my $x = retrieve_fd($fh);
-+ my $g4 = 2*0x80000000;
-+ $x->[0] == $x->[$g4]
-+ or die "First entry mismatch";
-+ $x->[$g4+1] == $x->[$g4+2]
-+ or die "4G+ entry mismatch";
-+ ${$x->[$g4+1]} == 2
-+ or die "Incorrect value in 4G+ entry";
-+ print "OK";
- }
-
- sub make_hook_data {
-@@ -240,11 +231,11 @@ sub check_hook_data {
- my $y = $x->[$g4+1];
- $y = $x->[$g4+1];
- $y->id == 201
-- or die "Incorrect id in 4G+ object";
-+ or die "Incorrect id in 4G+ object";
- ref($y->data) eq 'HASH'
-- or die "data isn't a ref";
-+ or die "data isn't a ref";
- $y->data->{name} eq "two"
-- or die "data name not 'one'";
-+ or die "data name not 'one'";
- print "OK";
- }
-
-@@ -261,10 +252,10 @@ sub check_net_large_pv {
- my $x = retrieve_fd($fh);
- my $g4 = 2*0x80000000;
- ref $x && ref($x) eq "SCALAR"
-- or die "Not a scalar ref ", ref $x;
-+ or die "Not a scalar ref ", ref $x;
-
- length($$x) == $g4+5
-- or die "Incorect length";
-+ or die "Incorect length";
- print "OK";
- }
-
-diff --git a/t/integer.t b/t/integer.t
-index b6d9f90..61cae89 100644
---- a/t/integer.t
-+++ b/t/integer.t
-@@ -6,25 +6,14 @@
- # in the README file that comes with the distribution.
- #
-
--# I ought to keep this test easily backwards compatible to 5.004, so no
--# qr//;
--
- # This test checks downgrade behaviour on pre-5.8 perls when new 5.8 features
- # are encountered.
-
--sub BEGIN {
-- unshift @INC, 't';
-- unshift @INC, 't/compat' if $] < 5.006002;
-- require Config; import Config;
-- if ($ENV{PERL_CORE} and $Config{'extensions'} !~ /\bStorable\b/) {
-- print "1..0 # Skip: Storable was not built\n";
-- exit 0;
-- }
--}
-+use strict;
-+use warnings;
-
- use Test::More;
- use Storable qw (dclone store retrieve freeze thaw nstore nfreeze);
--use strict;
-
- my $max_uv = ~0;
- my $max_uv_m1 = ~0 ^ 1;
-@@ -33,36 +22,38 @@ my $max_uv_m1 = ~0 ^ 1;
- # use integer.
- my $max_iv_p1 = $max_uv ^ ($max_uv >> 1);
- my $lots_of_9C = do {
-- my $temp = sprintf "%#x", ~0;
-- $temp =~ s/ff/9c/g;
-- local $^W;
-- eval $temp;
-+ my $temp = sprintf "%#x", ~0;
-+ $temp =~ s/ff/9c/g;
-+ local $^W;
-+ no warnings 'portable';
-+ eval $temp;
- };
-
- my $max_iv = ~0 >> 1;
- my $min_iv = do {use integer; -$max_iv-1}; # 2s complement assumption
-
--my @processes = (["dclone", \&do_clone],
-- ["freeze/thaw", \&freeze_and_thaw],
-- ["nfreeze/thaw", \&nfreeze_and_thaw],
-- ["store/retrieve", \&store_and_retrieve],
-- ["nstore/retrieve", \&nstore_and_retrieve],
-- );
--my @numbers =
-- (# IV bounds of 8 bits
-- -1, 0, 1, -127, -128, -129, 42, 126, 127, 128, 129, 254, 255, 256, 257,
-- # IV bounds of 32 bits
-- -2147483647, -2147483648, -2147483649, 2147483646, 2147483647, 2147483648,
-- # IV bounds
-- $min_iv, do {use integer; $min_iv + 1}, do {use integer; $max_iv - 1},
-- $max_iv,
-- # UV bounds at 32 bits
-- 0x7FFFFFFF, 0x80000000, 0x80000001, 0xFFFFFFFF, 0xDEADBEEF,
-- # UV bounds
-- $max_iv_p1, $max_uv_m1, $max_uv, $lots_of_9C,
-- # NV-UV conversion
-- 2559831922.0,
-- );
-+my @processes = (
-+ ["dclone", \&do_clone],
-+ ["freeze/thaw", \&freeze_and_thaw],
-+ ["nfreeze/thaw", \&nfreeze_and_thaw],
-+ ["store/retrieve", \&store_and_retrieve],
-+ ["nstore/retrieve", \&nstore_and_retrieve],
-+);
-+my @numbers = (
-+ # IV bounds of 8 bits
-+ -1, 0, 1, -127, -128, -129, 42, 126, 127, 128, 129, 254, 255, 256, 257,
-+ # IV bounds of 32 bits
-+ -2147483647, -2147483648, -2147483649, 2147483646, 2147483647, 2147483648,
-+ # IV bounds
-+ $min_iv, do {use integer; $min_iv + 1}, do {use integer; $max_iv - 1},
-+ $max_iv,
-+ # UV bounds at 32 bits
-+ 0x7FFFFFFF, 0x80000000, 0x80000001, 0xFFFFFFFF, 0xDEADBEEF,
-+ # UV bounds
-+ $max_iv_p1, $max_uv_m1, $max_uv, $lots_of_9C,
-+ # NV-UV conversion
-+ 2559831922.0,
-+);
-
- plan tests => @processes * @numbers * 5;
-
-@@ -72,102 +63,104 @@ die "Temporary file '$file' already exists" if -e $file;
- END { while (-f $file) {unlink $file or die "Can't unlink '$file': $!" }}
-
- sub do_clone {
-- my $data = shift;
-- my $copy = eval {dclone $data};
-- is ($@, '', 'Should be no error dcloning');
-- ok (1, "dlcone is only 1 process, not 2");
-- return $copy;
-+ my $data = shift;
-+ my $copy = eval {dclone $data};
-+ is ($@, '', 'Should be no error dcloning');
-+ ok (1, "dlcone is only 1 process, not 2");
-+ return $copy;
- }
-
- sub freeze_and_thaw {
-- my $data = shift;
-- my $frozen = eval {freeze $data};
-- is ($@, '', 'Should be no error freezing');
-- my $copy = eval {thaw $frozen};
-- is ($@, '', 'Should be no error thawing');
-- return $copy;
-+ my $data = shift;
-+ my $frozen = eval {freeze $data};
-+ is ($@, '', 'Should be no error freezing');
-+ my $copy = eval {thaw $frozen};
-+ is ($@, '', 'Should be no error thawing');
-+ return $copy;
- }
-
- sub nfreeze_and_thaw {
-- my $data = shift;
-- my $frozen = eval {nfreeze $data};
-- is ($@, '', 'Should be no error nfreezing');
-- my $copy = eval {thaw $frozen};
-- is ($@, '', 'Should be no error thawing');
-- return $copy;
-+ my $data = shift;
-+ my $frozen = eval {nfreeze $data};
-+ is ($@, '', 'Should be no error nfreezing');
-+ my $copy = eval {thaw $frozen};
-+ is ($@, '', 'Should be no error thawing');
-+ return $copy;
- }
-
- sub store_and_retrieve {
-- my $data = shift;
-- my $frozen = eval {store $data, $file};
-- is ($@, '', 'Should be no error storing');
-- my $copy = eval {retrieve $file};
-- is ($@, '', 'Should be no error retrieving');
-- return $copy;
-+ my $data = shift;
-+ my $frozen = eval {store $data, $file};
-+ is ($@, '', 'Should be no error storing');
-+ my $copy = eval {retrieve $file};
-+ is ($@, '', 'Should be no error retrieving');
-+ return $copy;
- }
-
- sub nstore_and_retrieve {
-- my $data = shift;
-- my $frozen = eval {nstore $data, $file};
-- is ($@, '', 'Should be no error storing');
-- my $copy = eval {retrieve $file};
-- is ($@, '', 'Should be no error retrieving');
-- return $copy;
-+ my $data = shift;
-+ my $frozen = eval {nstore $data, $file};
-+ is ($@, '', 'Should be no error storing');
-+ my $copy = eval {retrieve $file};
-+ is ($@, '', 'Should be no error retrieving');
-+ return $copy;
- }
-
- foreach (@processes) {
-- my ($process, $sub) = @$_;
-- foreach my $number (@numbers) {
-- # as $number is an alias into @numbers, we don't want any side effects of
-- # conversion macros affecting later runs, so pass a copy to Storable:
-- my $copy1 = my $copy2 = my $copy0 = $number;
-- my $copy_s = &$sub (\$copy0);
-- if (is (ref $copy_s, "SCALAR", "got back a scalar ref?")) {
-- # Test inside use integer to see if the bit pattern is identical
-- # and outside to see if the sign is right.
-- # On 5.8 we don't need this trickery anymore.
-- # We really do need 2 copies here, as conversion may have side effect
-- # bugs. In particular, I know that this happens:
-- # perl5.00503 -le '$a = "-2147483649"; $a & 0; print $a; print $a+1'
-- # -2147483649
-- # 2147483648
--
-- my $copy_s1 = my $copy_s2 = $$copy_s;
-- # On 5.8 can do this with a straight ==, due to the integer/float maths
-- # on 5.6 can't do this with
-- # my $eq = do {use integer; $copy_s1 == $copy1} && $copy_s1 == $copy1;
-- # because on builds with IV as long long it tickles bugs.
-- # (Uncomment it and the Devel::Peek line below to see the messed up
-- # state of the scalar, with PV showing the correct string for the
-- # number, and IV holding a bogus value which has been truncated to 32 bits
--
-- # So, check the bit patterns are identical, and check that the sign is the
-- # same. This works on all the versions in all the sizes.
-- # $eq = && (($copy_s1 <=> 0) == ($copy1 <=> 0));
-- # Split this into 2 tests, to cater for 5.005_03
--
-- # Aargh. Even this doesn't work because 5.6.x sends values with (same
-- # number of decimal digits as ~0 + 1) via atof. So ^ is getting strings
-- # cast to doubles cast to integers. And that truncates low order bits.
-- # my $bit = ok (($copy_s1 ^ $copy1) == 0, "$process $copy1 (bitpattern)");
--
-- # Oh well; at least the parser gets it right. :-)
-- my $copy_s3 = eval $copy_s1;
-- die "Was supposed to have number $copy_s3, got error $@"
-- unless defined $copy_s3;
-- my $bit = ok (($copy_s3 ^ $copy1) == 0, "$process $copy1 (bitpattern)");
-- my $sign = ok (($copy_s2 <=> 0) == ($copy2 <=> 0),
-- "$process $copy1 (sign)");
--
-- unless ($bit and $sign) {
-- printf "# Passed in %s (%#x, %i)\n# got back '%s' (%#x, %i)\n",
-- $copy1, $copy1, $copy1, $copy_s1, $copy_s1, $copy_s1;
-- # use Devel::Peek; Dump $number; Dump $copy1; Dump $copy_s1;
-- }
-- # unless ($bit) { use Devel::Peek; Dump $copy_s1; Dump $$copy_s; }
-- } else {
-- fail ("$process $copy1");
-- fail ("$process $copy1");
-+ my ($process, $sub) = @$_;
-+ foreach my $number (@numbers) {
-+ # as $number is an alias into @numbers, we don't want any side effects of
-+ # conversion macros affecting later runs, so pass a copy to Storable:
-+ my $copy1 = my $copy2 = my $copy0 = $number;
-+ my $copy_s = &$sub (\$copy0);
-+ if (is (ref $copy_s, "SCALAR", "got back a scalar ref?")) {
-+ # Test inside use integer to see if the bit pattern is identical
-+ # and outside to see if the sign is right.
-+ # On 5.8 we don't need this trickery anymore.
-+ # We really do need 2 copies here, as conversion may have side effect
-+ # bugs. In particular, I know that this happens:
-+ # perl5.00503 -le '$a = "-2147483649"; $a & 0; print $a; print $a+1'
-+ # -2147483649
-+ # 2147483648
-+
-+ my $copy_s1 = my $copy_s2 = $$copy_s;
-+ # On 5.8 can do this with a straight ==, due to the integer/float maths
-+ # on 5.6 can't do this with
-+ # my $eq = do {use integer; $copy_s1 == $copy1} && $copy_s1 == $copy1;
-+ # because on builds with IV as long long it tickles bugs.
-+ # (Uncomment it and the Devel::Peek line below to see the messed up
-+ # state of the scalar, with PV showing the correct string for the
-+ # number, and IV holding a bogus value which has been truncated to 32 bits
-+
-+ # So, check the bit patterns are identical, and check that the sign is the
-+ # same. This works on all the versions in all the sizes.
-+ # $eq = && (($copy_s1 <=> 0) == ($copy1 <=> 0));
-+ # Split this into 2 tests, to cater for 5.005_03
-+
-+ # Aargh. Even this doesn't work because 5.6.x sends values with (same
-+ # number of decimal digits as ~0 + 1) via atof. So ^ is getting strings
-+ # cast to doubles cast to integers. And that truncates low order bits.
-+ # my $bit = ok (($copy_s1 ^ $copy1) == 0, "$process $copy1 (bitpattern)");
-+
-+ # Oh well; at least the parser gets it right. :-)
-+ my $copy_s3 = eval $copy_s1;
-+ die "Was supposed to have number $copy_s3, got error $@"
-+ unless defined $copy_s3;
-+ my $bit = ok (($copy_s3 ^ $copy1) == 0, "$process $copy1 (bitpattern)");
-+ my $sign = ok (
-+ ($copy_s2 <=> 0) == ($copy2 <=> 0),
-+ "$process $copy1 (sign)"
-+ );
-+
-+ unless ($bit and $sign) {
-+ printf "# Passed in %s (%#x, %i)\n# got back '%s' (%#x, %i)\n",
-+ $copy1, $copy1, $copy1, $copy_s1, $copy_s1, $copy_s1;
-+ # use Devel::Peek; Dump $number; Dump $copy1; Dump $copy_s1;
-+ }
-+ # unless ($bit) { use Devel::Peek; Dump $copy_s1; Dump $$copy_s; }
-+ } else {
-+ fail ("$process $copy1");
-+ fail ("$process $copy1");
-+ }
- }
-- }
- }
-diff --git a/t/interwork56.t b/t/interwork56.t
-index 239c8c1..49ae44f 100644
---- a/t/interwork56.t
-+++ b/t/interwork56.t
-@@ -6,20 +6,15 @@
- # in the README file that comes with the distribution.
- #
-
--# I ought to keep this test easily backwards compatible to 5.004, so no
--# qr//;
--
- # This test checks whether the kludge to interwork with 5.6 Storables compiled
- # on Unix systems with IV as long long works.
-
-+use strict;
-+use warnings;
-+
-+use Config;
- sub BEGIN {
-- unshift @INC, 't';
-- unshift @INC, 't/compat' if $] < 5.006002;
-- require Config; import Config;
-- if ($ENV{PERL_CORE} and $Config{'extensions'} !~ /\bStorable\b/) {
-- print "1..0 # Skip: Storable was not built\n";
-- exit 0;
-- }
-+ unshift @INC, 't/lib';
- unless ($Config{ivsize} and $Config{ivsize} > $Config{longsize}) {
- print "1..0 # Skip: Your IVs are no larger than your longs\n";
- exit 0;
-@@ -27,7 +22,6 @@ sub BEGIN {
- }
-
- use Storable qw(freeze thaw);
--use strict;
- use Test::More tests=>30;
-
- our (%tests);
-@@ -70,15 +64,15 @@ SKIP: {
- print << "EOM";
- # No test data for Storable 1.x for:
- #
--# byteorder '$Config{byteorder}'
--# sizeof(int) $$header{intsize}
--# sizeof(long) $$header{longsize}
--# sizeof(char *) $$header{ptrsize}
--# sizeof(NV) $$header{nvsize}
-+# byteorder '$Config{byteorder}'
-+# sizeof(int) $$header{intsize}
-+# sizeof(long) $$header{longsize}
-+# sizeof(char *) $$header{ptrsize}
-+# sizeof(NV) $$header{nvsize}
-
- # If you have Storable 1.x built with perl 5.6.x on this platform, please
- # make_56_interwork.pl to generate test data, and append the test data to
--# this test.
-+# this test.
- # You may find that make_56_interwork.pl reports that your platform has no
- # interworking problems, in which case you need do nothing.
- EOM
-@@ -87,7 +81,7 @@ EOM
- my $result = eval {thaw $real_thing};
- is ($result, undef, "By default should not be able to thaw");
- like ($@, qr/Byte order is not compatible/,
-- "because the header byte order strings differ");
-+ "because the header byte order strings differ");
- local $Storable::interwork_56_64bit = 1;
- $result = eval {thaw $real_thing};
- isa_ok ($result, 'ARRAY', "With flag should now thaw");
-@@ -99,8 +93,8 @@ EOM
-
- is (@$result, 4, "4 elements in array");
- like ($$result[0],
-- qr/^This file was written with [0-9.]+ on perl [0-9.]+\z/,
-- "1st element");
-+ qr/^This file was written with [0-9.]+ on perl [0-9.]+\z/,
-+ "1st element");
- is ($$result[1], "$kingdom was correct", "2nd element");
- cmp_ok ($$result[2] ^ $value, '==', 0, "3rd element") or
- printf "# expected %#X, got %#X\n", $value, $$result[2];
-@@ -121,12 +115,12 @@ my $test_kludge;
- my $header_kludge = Storable::read_magic ($test_kludge);
-
- cmp_ok (length ($header_kludge->{byteorder}), '==', $Config{longsize},
-- "With 5.6 interwork kludge byteorder string should be same size as long"
-- );
-+ "With 5.6 interwork kludge byteorder string should be same size as long"
-+);
- $result = eval {thaw $test_kludge};
- is ($result, undef, "By default should not be able to thaw");
- like ($@, qr/Byte order is not compatible/,
-- "because the header byte order strings differ");
-+ "because the header byte order strings differ");
-
- $result = eval {thaw $test};
- isa_ok ($result, 'SCALAR', "CHORUS: check thawing test data");
-@@ -144,7 +138,7 @@ is ($$result, 'Hell', " and gives the expected data");
- $result = eval {thaw $test};
- is ($result, undef, "But now can't thaw real data");
- like ($@, qr/Byte order is not compatible/,
-- "because the header byte order strings differ");
-+ "because the header byte order strings differ");
- }
-
- # All together now:
-diff --git a/t/just_plain_nasty.t b/t/just_plain_nasty.t
-index 5423719..ed99068 100644
---- a/t/just_plain_nasty.t
-+++ b/t/just_plain_nasty.t
-@@ -1,36 +1,24 @@
--#!/usr/bin/perl
-+#!./perl
-
- # This is a test suite to cover all the nasty and horrible data
- # structures that cause bizarre corner cases.
-
- # Everyone's invited! :-D
-
--sub BEGIN {
-- unshift @INC, 't';
-- unshift @INC, 't/compat' if $] < 5.006002;
-- require Config; import Config;
-- if ($ENV{PERL_CORE} and $Config{'extensions'} !~ /\bStorable\b/) {
-- print "1..0 # Skip: Storable was not built\n";
-- exit 0;
-- }
--}
--
- use strict;
-+use warnings;
-+
-+use Test::More;
-+use File::Spec;
-+
- BEGIN {
- if (!eval q{
-- use Test::More;
- use B::Deparse 0.61;
-- use 5.006;
- 1;
- }) {
-- print "1..0 # skip: tests only work with B::Deparse 0.61 and at least perl 5.6.0\n";
-+ print "1..0 # skip: tests only work with B::Deparse 0.61\n";
- exit;
- }
-- require File::Spec;
-- if ($File::Spec::VERSION < 0.8) {
-- print "1..0 # Skip: newer File::Spec needed\n";
-- exit 0;
-- }
- }
-
- use Storable qw(freeze thaw);
-@@ -44,11 +32,11 @@ BEGIN {
-
- {
- package Banana;
-- use overload
-- '<=>' => \&compare,
-- '==' => \&equal,
-- '""' => \&real,
-- fallback => 1;
-+ use overload
-+ '<=>' => \&compare,
-+ '==' => \&equal,
-+ '""' => \&real,
-+ fallback => 1;
- sub compare { return int(rand(3))-1 };
- sub equal { return 1 if rand(1) > 0.5 }
- sub real { return "keep it so" }
-@@ -56,14 +44,14 @@ BEGIN {
-
- my (@a);
-
--for my $dbun (1, 0) { # dbun - don't be utterly nasty - being utterly
-- # nasty means having a reference to the object
-- # directly within itself. otherwise it's in the
-- # second array.
-+for my $dbun (1, 0) { # dbun - don't be utterly nasty - being utterly
-+ # nasty means having a reference to the object
-+ # directly within itself. otherwise it's in the
-+ # second array.
- my $nasty = [
-- ($a[0] = bless [ ], "Banana"),
-- ($a[1] = [ ]),
-- ];
-+ ($a[0] = bless [ ], "Banana"),
-+ ($a[1] = [ ]),
-+ ];
-
- $a[$dbun]->[0] = $a[0];
-
-@@ -135,8 +123,8 @@ for my $dbun (1, 0) { # dbun - don't be utterly nasty - being utterly
-
- sub headit {
-
-- return; # comment out to get headings - useful for scanning
-- # output with $Storable::DEBUGME = 1
-+ return; # comment out to get headings - useful for scanning
-+ # output with $Storable::DEBUGME = 1
-
- my $title = shift;
-
-@@ -144,6 +132,6 @@ sub headit {
- my $size_right = (67 - length($title)) >> 1;
-
- print "# ".("-" x $size_left). " $title "
-- .("-" x $size_right)."\n";
-+ .("-" x $size_right)."\n";
- }
-
-diff --git a/t/leaks.t b/t/leaks.t
-index eb151a1..204d631 100644
---- a/t/leaks.t
-+++ b/t/leaks.t
-@@ -1,10 +1,13 @@
- #!./perl
-
-+use strict;
-+use warnings;
-+
- use Test::More;
- use Storable ();
- BEGIN {
--eval "use Test::LeakTrace";
--plan 'skip_all' => 'Test::LeakTrace required for this tests' if $@;
-+ eval "use Test::LeakTrace";
-+ plan 'skip_all' => 'Test::LeakTrace required for this tests' if $@;
- }
- plan 'tests' => 1;
-
-@@ -33,17 +36,17 @@ plan 'tests' => 1;
- }
-
- { # [cpan #97316]
-- package TestClass;
-+ package TestClass;
-
-- sub new {
-- my $class = shift;
-- return bless({}, $class);
-- }
-- sub STORABLE_freeze {
-- die;
-- }
-+ sub new {
-+ my $class = shift;
-+ return bless({}, $class);
-+ }
-+ sub STORABLE_freeze {
-+ die;
-+ }
-
-- package main;
-- my $obj = TestClass->new;
-- eval { freeze($obj); };
-+ package main;
-+ my $obj = TestClass->new;
-+ eval { freeze($obj); };
- }
-diff --git a/t/lib/HAS_HOOK.pm b/t/lib/HAS_HOOK.pm
-new file mode 100644
-index 0000000..3013015
---- /dev/null
-+++ b/t/lib/HAS_HOOK.pm
-@@ -0,0 +1,14 @@
-+package HAS_HOOK;
-+use strict;
-+use warnings;
-+
-+our $thawed_count;
-+our $loaded_count;
-+
-+sub STORABLE_thaw {
-+ ++$thawed_count;
-+}
-+
-+++$loaded_count;
-+
-+1;
-diff --git a/t/lib/HAS_OVERLOAD.pm b/t/lib/HAS_OVERLOAD.pm
-new file mode 100644
-index 0000000..d6f0241
---- /dev/null
-+++ b/t/lib/HAS_OVERLOAD.pm
-@@ -0,0 +1,18 @@
-+package HAS_OVERLOAD;
-+use strict;
-+use warnings;
-+
-+our $loaded_count;
-+
-+use overload
-+ '""' => sub { ${$_[0]} }, fallback => 1;
-+
-+sub make {
-+ my $package = shift;
-+ my $value = shift;
-+ bless \$value, $package;
-+}
-+
-+++$loaded_count;
-+
-+1;
-diff --git a/t/lib/STDump.pm b/t/lib/STDump.pm
-new file mode 100644
-index 0000000..d7fa886
---- /dev/null
-+++ b/t/lib/STDump.pm
-@@ -0,0 +1,138 @@
-+#
-+# Copyright (c) 1995-2000, Raphael Manfredi
-+#
-+# You may redistribute only under the same terms as Perl 5, as specified
-+# in the README file that comes with the distribution.
-+#
-+
-+package STDump;
-+use strict;
-+use warnings;
-+use Carp;
-+use Exporter;
-+*import = \&Exporter::import;
-+
-+our @EXPORT = qw(stdump);
-+
-+my %dump = (
-+ 'SCALAR' => \&dump_scalar,
-+ 'LVALUE' => \&dump_scalar,
-+ 'ARRAY' => \&dump_array,
-+ 'HASH' => \&dump_hash,
-+ 'REF' => \&dump_ref,
-+);
-+
-+# Given an object, dump its transitive data closure
-+sub stdump {
-+ my ($object) = @_;
-+ croak "Not a reference!" unless ref($object);
-+ my $ctx = {
-+ dumped => {},
-+ object => {},
-+ count => 0,
-+ dump => '',
-+ };
-+ recursive_dump($object, 1, $ctx);
-+ return $ctx->{dump};
-+}
-+
-+# This is the root recursive dumping routine that may indirectly be
-+# called by one of the routine it calls...
-+# The link parameter is set to false when the reference passed to
-+# the routine is an internal temporary variable, implying the object's
-+# address is not to be dumped in the %dumped table since it's not a
-+# user-visible object.
-+sub recursive_dump {
-+ my ($object, $link, $ctx) = @_;
-+
-+ # Get something like SCALAR(0x...) or TYPE=SCALAR(0x...).
-+ # Then extract the bless, ref and address parts of that string.
-+
-+ my $what = "$object"; # Stringify
-+ my ($bless, $ref, $addr) = $what =~ /^(\w+)=(\w+)\((0x.*)\)$/;
-+ ($ref, $addr) = $what =~ /^(\w+)\((0x.*)\)$/ unless $bless;
-+
-+ # Special case for references to references. When stringified,
-+ # they appear as being scalars. However, ref() correctly pinpoints
-+ # them as being references indirections. And that's it.
-+
-+ $ref = 'REF' if ref($object) eq 'REF';
-+
-+ # Make sure the object has not been already dumped before.
-+ # We don't want to duplicate data. Retrieval will know how to
-+ # relink from the previously seen object.
-+
-+ if ($link && $ctx->{dumped}{$addr}++) {
-+ my $num = $ctx->{object}{$addr};
-+ $ctx->{dump} .= "OBJECT #$num seen\n";
-+ return;
-+ }
-+
-+ my $objcount = $ctx->{count}++;
-+ $ctx->{object}{$addr} = $objcount;
-+
-+ # Call the appropriate dumping routine based on the reference type.
-+ # If the referenced was blessed, we bless it once the object is dumped.
-+ # The retrieval code will perform the same on the last object retrieved.
-+
-+ croak "Unknown simple type '$ref'" unless defined $dump{$ref};
-+
-+ $dump{$ref}->($object, $ctx); # Dump object
-+ $ctx->{dump} .= "BLESS $bless\n" if $bless; # Mark it as blessed, if necessary
-+
-+ $ctx->{dump} .= "OBJECT $objcount\n";
-+}
-+
-+# Dump single scalar
-+sub dump_scalar {
-+ my ($sref, $ctx) = @_;
-+ my $scalar = $$sref;
-+ unless (defined $scalar) {
-+ $ctx->{dump} .= "UNDEF\n";
-+ return;
-+ }
-+ my $len = length($scalar);
-+ $ctx->{dump} .= "SCALAR len=$len $scalar\n";
-+}
-+
-+# Dump array
-+sub dump_array {
-+ my ($aref, $ctx) = @_;
-+ my $items = 0 + @{$aref};
-+ $ctx->{dump} .= "ARRAY items=$items\n";
-+ foreach my $item (@{$aref}) {
-+ unless (defined $item) {
-+ $ctx->{dump} .= 'ITEM_UNDEF' . "\n";
-+ next;
-+ }
-+ $ctx->{dump} .= 'ITEM ';
-+ recursive_dump(\$item, 1, $ctx);
-+ }
-+}
-+
-+# Dump hash table
-+sub dump_hash {
-+ my ($href, $ctx) = @_;
-+ my $items = scalar(keys %{$href});
-+ $ctx->{dump} .= "HASH items=$items\n";
-+ foreach my $key (sort keys %{$href}) {
-+ $ctx->{dump} .= 'KEY ';
-+ recursive_dump(\$key, undef, $ctx);
-+ unless (defined $href->{$key}) {
-+ $ctx->{dump} .= 'VALUE_UNDEF' . "\n";
-+ next;
-+ }
-+ $ctx->{dump} .= 'VALUE ';
-+ recursive_dump(\$href->{$key}, 1, $ctx);
-+ }
-+}
-+
-+# Dump reference to reference
-+sub dump_ref {
-+ my ($rref, $ctx) = @_;
-+ my $deref = $$rref; # Follow reference to reference
-+ $ctx->{dump} .= 'REF ';
-+ recursive_dump($deref, 1, $ctx); # $dref is a reference
-+}
-+
-+1;
-diff --git a/t/lib/STTestLib.pm b/t/lib/STTestLib.pm
-new file mode 100644
-index 0000000..a370334
---- /dev/null
-+++ b/t/lib/STTestLib.pm
-@@ -0,0 +1,39 @@
-+package STTestLib;
-+use strict;
-+use warnings;
-+
-+use Exporter;
-+*import = \&Exporter::import;
-+
-+our @EXPORT_OK = qw(slurp write_and_retrieve tempfilename);
-+
-+use Storable qw(retrieve);
-+use File::Temp qw(tempfile);
-+
-+sub slurp {
-+ my $file = shift;
-+ open my $fh, "<", $file or die "Can't open '$file': $!";
-+ binmode $fh;
-+ my $contents = do { local $/; <$fh> };
-+ die "Can't read $file: $!" unless defined $contents;
-+ return $contents;
-+}
-+
-+sub write_and_retrieve {
-+ my $data = shift;
-+
-+ my ($fh, $filename) = tempfile('storable-testfile-XXXXX', TMPDIR => 1, UNLINK => 1);
-+ binmode $fh;
-+ print $fh $data or die "Can't print to '$filename': $!";
-+ close $fh or die "Can't close '$filename': $!";
-+
-+ return eval { retrieve $filename };
-+}
-+
-+sub tempfilename {
-+ local $^W;
-+ my (undef, $file) = tempfile('storable-testfile-XXXXX', TMPDIR => 1, UNLINK => 1);
-+ return $file;
-+}
-+
-+1;
-diff --git a/t/lock.t b/t/lock.t
-index 8c1fc57..aea8146 100644
---- a/t/lock.t
-+++ b/t/lock.t
-@@ -1,23 +1,19 @@
- #!./perl
- #
- # Copyright (c) 1995-2000, Raphael Manfredi
--#
-+#
- # You may redistribute only under the same terms as Perl 5, as specified
- # in the README file that comes with the distribution.
- #
-
-+use strict;
-+use warnings;
-+
- sub BEGIN {
-- unshift @INC, 't';
-- unshift @INC, 't/compat' if $] < 5.006002;
-- require Config; import Config;
-- if ($ENV{PERL_CORE} and $Config{'extensions'} !~ /\bStorable\b/) {
-- print "1..0 # Skip: Storable was not built\n";
-- exit 0;
-- }
--
-- require 'st-dump.pl';
-+ unshift @INC, 't/lib';
- }
-
-+use STDump;
- use Test::More;
- use Storable qw(lock_store lock_retrieve);
-
-@@ -27,20 +23,20 @@ unless (&Storable::CAN_FLOCK) {
-
- plan(tests => 5);
-
--@a = ('first', undef, 3, -4, -3.14159, 456, 4.5);
-+my @a = ('first', undef, 3, -4, -3.14159, 456, 4.5);
-
- #
- # We're just ensuring things work, we're not validating locking.
- #
-
- isnt(lock_store(\@a, "store$$"), undef);
--my $dumped = &dump(\@a);
-+my $dumped = stdump(\@a);
- isnt($dumped, undef);
-
--$root = lock_retrieve("store$$");
-+my $root = lock_retrieve("store$$");
- is(ref $root, 'ARRAY');
- is(scalar @a, scalar @$root);
--is(&dump($root), $dumped);
-+is(stdump($root), $dumped);
-
- END { 1 while unlink "store$$" }
-
-diff --git a/t/make_56_interwork.pl b/t/make_56_interwork.pl
-old mode 100644
-new mode 100755
-index c73e9b6..7e6d072
---- a/t/make_56_interwork.pl
-+++ b/t/make_56_interwork.pl
-@@ -1,5 +1,6 @@
--#!/usr/bin/perl -w
-+#!/usr/bin/env perl
- use strict;
-+use warnings;
-
- use Config;
- use Storable qw(freeze thaw);
-@@ -8,10 +9,11 @@ use Storable qw(freeze thaw);
- # Belfuscu welcomed the rebels who wanted to eat big end first.
- my $kingdom = $Config{byteorder} =~ /23/ ? "Lillput" : "Belfuscu";
-
--my $frozen = freeze
-- ["This file was written with $Storable::VERSION on perl $]",
-- "$kingdom was correct", (~0 ^ (~0 >> 1) ^ 2),
-- "The End"];
-+my $frozen = freeze [
-+ "This file was written with $Storable::VERSION on perl $]",
-+ "$kingdom was correct", (~0 ^ (~0 >> 1) ^ 2),
-+ "The End"
-+];
-
- my $ivsize = $Config{ivsize} || $Config{longsize};
-
-@@ -19,8 +21,8 @@ my $storesize = unpack 'xxC', $frozen;
- my $storebyteorder = unpack "xxxA$storesize", $frozen;
-
- if ($Config{byteorder} eq $storebyteorder) {
-- my $ivtype = $Config{ivtype} || 'long';
-- print <<"EOM";
-+ my $ivtype = $Config{ivtype} || 'long';
-+ print <<"EOM";
- You only need to run this generator program where Config.pm's byteorder string
- is not the same length as the size of IVs.
-
-@@ -31,17 +33,17 @@ MS Windows)
- This is perl $], sizeof(long) is $Config{longsize}, IVs are '$ivtype', sizeof(IV) is $ivsize,
- byteorder is '$Config{byteorder}', Storable $Storable::VERSION writes a byteorder of '$storebyteorder'
- EOM
-- exit; # Grr '
-+ exit; # Grr '
- }
-
- my ($i, $l, $p, $n) = unpack "xxxx${storesize}CCCC", $frozen;
-
- print <<"EOM";
--# byteorder '$storebyteorder'
--# sizeof(int) $i
--# sizeof(long) $l
-+# byteorder '$storebyteorder'
-+# sizeof(int) $i
-+# sizeof(long) $l
- # sizeof(char *) $p
--# sizeof(NV) $n
-+# sizeof(NV) $n
- EOM
-
- my $uu = pack 'u', $frozen;
-diff --git a/t/make_downgrade.pl b/t/make_downgrade.pl
-old mode 100644
-new mode 100755
-index 60375db..a553cd9
---- a/t/make_downgrade.pl
-+++ b/t/make_downgrade.pl
-@@ -1,5 +1,6 @@
--#!/usr/local/bin/perl -w
-+#!/usr/bin/env perl
- use strict;
-+use warnings;
-
- use 5.007003;
- use Hash::Util qw(lock_hash unlock_hash lock_keys);
-@@ -7,14 +8,14 @@ use Storable qw(nfreeze);
-
- # If this looks like a hack, it's probably because it is :-)
- sub uuencode_it {
-- my ($data, $name) = @_;
-- my $frozen = nfreeze $data;
-+ my ($data, $name) = @_;
-+ my $frozen = nfreeze $data;
-
-- my $uu = pack 'u', $frozen;
-+ my $uu = pack 'u', $frozen;
-
-- printf "begin %3o $name\n", ord 'A';
-- print $uu;
-- print "\nend\n\n";
-+ printf "begin %3o $name\n", ord 'A';
-+ print $uu;
-+ print "\nend\n\n";
- }
-
-
-@@ -93,11 +94,11 @@ uuencode_it (\%uhash, "Locked hash with utf8 keys");
- my %pre58;
-
- while (my ($key, $val) = each %uhash) {
-- # hash keys are always stored downgraded to bytes if possible, with a flag
-- # to say "promote back to utf8"
-- # Whereas scalars are stored as is.
-- utf8::encode ($key) if ord $key > 256;
-- $pre58{$key} = $val;
-+ # hash keys are always stored downgraded to bytes if possible, with a flag
-+ # to say "promote back to utf8"
-+ # Whereas scalars are stored as is.
-+ utf8::encode ($key) if ord $key > 256;
-+ $pre58{$key} = $val;
-
- }
- uuencode_it (\%pre58, "Hash with utf8 keys for 5.6");
-diff --git a/t/make_overload.pl b/t/make_overload.pl
-old mode 100644
-new mode 100755
-index bd224f5..3182264
---- a/t/make_overload.pl
-+++ b/t/make_overload.pl
-@@ -1,5 +1,6 @@
--#!/usr/local/bin/perl -w
-+#!/usr/bin/env perl
- use strict;
-+use warnings;
-
- use Storable qw(nfreeze);
- use HAS_OVERLOAD;
-diff --git a/t/malice.t b/t/malice.t
-index 7b92d3d..f72e45f 100644
---- a/t/malice.t
-+++ b/t/malice.t
-@@ -6,25 +6,18 @@
- # in the README file that comes with the distribution.
- #
-
--# I'm trying to keep this test easily backwards compatible to 5.004, so no
--# qr//;
--
- # This test tries to craft malicious data to test out as many different
- # error traps in Storable as possible
- # It also acts as a test for read_header
-
--sub BEGIN {
-- # This lets us distribute Test::More in t/
-- unshift @INC, 't';
-- unshift @INC, 't/compat' if $] < 5.006002;
-- require Config; import Config;
-- if ($ENV{PERL_CORE} and $Config{'extensions'} !~ /\bStorable\b/) {
-- print "1..0 # Skip: Storable was not built\n";
-- exit 0;
-- }
--}
--
- use strict;
-+use warnings;
-+
-+use Config;
-+
-+BEGIN {
-+ unshift @INC, 't/lib';
-+}
-
- our $byteorder = $Config{byteorder};
-
-@@ -35,6 +28,7 @@ our $major = 2;
- our $minor = 12;
- our $minor_write = $] >= 5.019 ? 11 : $] > 5.008 ? 9 : $] > 5.005_50 ? 8 : 4;
-
-+use STTestLib qw(slurp write_and_retrieve tempfilename);
- use Test::More;
-
- # If it's 5.7.3 or later the hash will be stored with flags, which is
-@@ -48,8 +42,6 @@ our $fancy = ($] > 5.007 ? 2 : 0);
- plan tests => 372 + length ($byteorder) * 4 + $fancy * 8;
-
- use Storable qw (store retrieve freeze thaw nstore nfreeze);
--require 'testlib.pl';
--our $file;
-
- # The chr 256 is a hack to force the hash to always have the utf8 keys flag
- # set on 5.7.3 and later. Otherwise the test fails if run with -Mutf8 because
-@@ -59,195 +51,220 @@ my %hash = (perl => 'rules', chr 256, '');
- delete $hash{chr 256};
-
- sub test_hash {
-- my $clone = shift;
-- 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", "Got expected value when looking up key in clone");
-+ my $clone = shift;
-+ 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", "Got expected value when looking up key in clone");
- }
-
- sub test_header {
-- my ($header, $isfile, $isnetorder) = @_;
-- is (!!$header->{file}, !!$isfile, "is file");
-- is ($header->{major}, $major, "major number");
-- is ($header->{minor}, $minor_write, "minor number");
-- is (!!$header->{netorder}, !!$isnetorder, "is network order");
-- if ($isnetorder) {
-- # Network order header has no sizes
-- } else {
-- is ($header->{byteorder}, $byteorder, "byte order");
-- is ($header->{intsize}, $Config{intsize}, "int size");
-- is ($header->{longsize}, $Config{longsize}, "long size");
-- SKIP: {
-- skip ("No \$Config{prtsize} on this perl version ($])", 1)
-- unless defined $Config{ptrsize};
-- is ($header->{ptrsize}, $Config{ptrsize}, "long size");
-+ my ($header, $isfile, $isnetorder) = @_;
-+ is (!!$header->{file}, !!$isfile, "is file");
-+ is ($header->{major}, $major, "major number");
-+ is ($header->{minor}, $minor_write, "minor number");
-+ is (!!$header->{netorder}, !!$isnetorder, "is network order");
-+ if ($isnetorder) {
-+ # Network order header has no sizes
-+ }
-+ else {
-+ is ($header->{byteorder}, $byteorder, "byte order");
-+ is ($header->{intsize}, $Config{intsize}, "int size");
-+ is ($header->{longsize}, $Config{longsize}, "long size");
-+ SKIP: {
-+ skip ("No \$Config{prtsize} on this perl version ($])", 1)
-+ unless defined $Config{ptrsize};
-+ is ($header->{ptrsize}, $Config{ptrsize}, "long size");
-+ }
-+ is ($header->{nvsize}, $Config{nvsize} || $Config{doublesize} || 8,
-+ "nv size"); # 5.00405 doesn't even have doublesize in config.
- }
-- is ($header->{nvsize}, $Config{nvsize} || $Config{doublesize} || 8,
-- "nv size"); # 5.00405 doesn't even have doublesize in config.
-- }
- }
-
- sub test_truncated {
-- my ($data, $sub, $magic_len, $what) = @_;
-- for my $i (0 .. length ($data) - 1) {
-- my $short = substr $data, 0, $i;
--
-- # local $Storable::DEBUGME = 1;
-- my $clone = &$sub($short);
-- is (defined ($clone), '', "truncated $what to $i should fail");
-- if ($i < $magic_len) {
-- like ($@, "/^Magic number checking on storable $what failed/",
-- "Should croak with magic number warning");
-- } else {
-- is ($@, "", "Should not set \$\@");
-+ my ($data, $sub, $magic_len, $what) = @_;
-+ for my $i (0 .. length ($data) - 1) {
-+ my $short = substr $data, 0, $i;
-+
-+ # local $Storable::DEBUGME = 1;
-+ my $clone = &$sub($short);
-+ is (defined ($clone), '', "truncated $what to $i should fail");
-+ if ($i < $magic_len) {
-+ like ($@, "/^Magic number checking on storable $what failed/",
-+ "Should croak with magic number warning");
-+ }
-+ else {
-+ is ($@, "", "Should not set \$\@");
-+ }
- }
-- }
- }
-
- sub test_corrupt {
-- my ($data, $sub, $what, $name) = @_;
-+ my ($data, $sub, $what, $name) = @_;
-
-- my $clone = &$sub($data);
-- local $Test::Builder::Level = $Test::Builder::Level + 1;
-- is (defined ($clone), '', "$name $what should fail");
-- like ($@, $what, $name);
-+ my $clone = &$sub($data);
-+ local $Test::Builder::Level = $Test::Builder::Level + 1;
-+ is (defined ($clone), '', "$name $what should fail");
-+ like ($@, $what, $name);
- }
-
- sub test_things {
-- my ($contents, $sub, $what, $isnetwork) = @_;
-- my $isfile = $what eq 'file';
-- my $file_magic = $isfile ? length $file_magic_str : 0;
-+ my ($contents, $sub, $what, $isnetwork) = @_;
-+ my $isfile = $what eq 'file';
-+ my $file_magic = $isfile ? length $file_magic_str : 0;
-
-- my $header = Storable::read_magic ($contents);
-- test_header ($header, $isfile, $isnetwork);
-+ my $header = Storable::read_magic ($contents);
-+ test_header ($header, $isfile, $isnetwork);
-
-- # Test that if we re-write it, everything still works:
-- my $clone = &$sub ($contents);
-+ # Test that if we re-write it, everything still works:
-+ my $clone = &$sub ($contents);
-
-- is ($@, "", "There should be no error");
-+ is ($@, "", "There should be no error");
-
-- test_hash ($clone);
-+ test_hash ($clone);
-
-- # Now lets check the short version:
-- test_truncated ($contents, $sub, $file_magic
-- + ($isnetwork ? $network_magic : $other_magic), $what);
-+ # Now lets check the short version:
-+ test_truncated ($contents, $sub, $file_magic
-+ + ($isnetwork ? $network_magic : $other_magic), $what);
-+
-+ my $copy;
-+ if ($isfile) {
-+ $copy = $contents;
-+ substr ($copy, 0, 4) = 'iron';
-+ test_corrupt(
-+ $copy, $sub, "/^File is not a perl storable/",
-+ "magic number"
-+ );
-+ }
-
-- my $copy;
-- if ($isfile) {
- $copy = $contents;
-- substr ($copy, 0, 4) = 'iron';
-- test_corrupt ($copy, $sub, "/^File is not a perl storable/",
-- "magic number");
-- }
--
-- $copy = $contents;
-- # Needs to be more than 1, as we're already coding a spread of 1 minor version
-- # number on writes (2.5, 2.4). May increase to 2 if we figure we can do 2.3
-- # on 5.005_03 (No utf8).
-- # 4 allows for a small safety margin
-- # Which we've now exhausted given that Storable 2.25 is writing 2.8
-- # (Joke:
-- # Question: What is the value of pi?
-- # Mathematician answers "It's pi, isn't it"
-- # Physicist answers "3.1, within experimental error"
-- # Engineer answers "Well, allowing for a small safety margin, 18"
-- # )
-- my $minor6 = $header->{minor} + 6;
-- substr ($copy, $file_magic + 1, 1) = chr $minor6;
-- {
-- # Now by default newer minor version numbers are not a pain.
-- $clone = &$sub($copy);
-- is ($@, "", "by default no error on higher minor");
-- test_hash ($clone);
-+ # Needs to be more than 1, as we're already coding a spread of 1 minor version
-+ # number on writes (2.5, 2.4). May increase to 2 if we figure we can do 2.3
-+ # on 5.005_03 (No utf8).
-+ # 4 allows for a small safety margin
-+ # Which we've now exhausted given that Storable 2.25 is writing 2.8
-+ # (Joke:
-+ # Question: What is the value of pi?
-+ # Mathematician answers "It's pi, isn't it"
-+ # Physicist answers "3.1, within experimental error"
-+ # Engineer answers "Well, allowing for a small safety margin, 18"
-+ # )
-+ my $minor6 = $header->{minor} + 6;
-+ substr ($copy, $file_magic + 1, 1) = chr $minor6;
-+ {
-+ # Now by default newer minor version numbers are not a pain.
-+ $clone = &$sub($copy);
-+ is ($@, "", "by default no error on higher minor");
-+ test_hash ($clone);
-+
-+ local $Storable::accept_future_minor = 0;
-+ test_corrupt(
-+ $copy, $sub,
-+ "/^Storable binary image v$header->{major}\.$minor6 more recent than I am \\(v$header->{major}\.$minor\\)/",
-+ "higher minor"
-+ );
-+ }
-
-- local $Storable::accept_future_minor = 0;
-- test_corrupt ($copy, $sub,
-- "/^Storable binary image v$header->{major}\.$minor6 more recent than I am \\(v$header->{major}\.$minor\\)/",
-- "higher minor");
-- }
--
-- $copy = $contents;
-- my $major1 = $header->{major} + 1;
-- substr ($copy, $file_magic, 1) = chr 2*$major1;
-- test_corrupt ($copy, $sub,
-- "/^Storable binary image v$major1\.$header->{minor} more recent than I am \\(v$header->{major}\.$minor\\)/",
-- "higher major");
--
-- # Continue messing with the previous copy
-- my $minor1 = $header->{minor} - 1;
-- substr ($copy, $file_magic + 1, 1) = chr $minor1;
-- test_corrupt ($copy, $sub,
-- "/^Storable binary image v$major1\.$minor1 more recent than I am \\(v$header->{major}\.$minor\\)/",
-- "higher major, lower minor");
--
-- my $where;
-- if (!$isnetwork) {
-- # All these are omitted from the network order header.
-- # I'm not sure if it's correct to omit the byte size stuff.
- $copy = $contents;
-- substr ($copy, $file_magic + 3, length $header->{byteorder})
-- = reverse $header->{byteorder};
--
-- test_corrupt ($copy, $sub, "/^Byte order is not compatible/",
-- "byte order");
-- $where = $file_magic + 3 + length $header->{byteorder};
-- foreach (['intsize', "Integer"],
-- ['longsize', "Long integer"],
-- ['ptrsize', "Pointer"],
-- ['nvsize', "Double"]) {
-- my ($key, $name) = @$_;
-- $copy = $contents;
-- substr ($copy, $where++, 1) = chr 0;
-- test_corrupt ($copy, $sub, "/^$name size is not compatible/",
-- "$name size");
-+ my $major1 = $header->{major} + 1;
-+ substr ($copy, $file_magic, 1) = chr 2*$major1;
-+ test_corrupt(
-+ $copy, $sub,
-+ "/^Storable binary image v$major1\.$header->{minor} more recent than I am \\(v$header->{major}\.$minor\\)/",
-+ "higher major"
-+ );
-+
-+ # Continue messing with the previous copy
-+ my $minor1 = $header->{minor} - 1;
-+ substr ($copy, $file_magic + 1, 1) = chr $minor1;
-+ test_corrupt(
-+ $copy, $sub,
-+ "/^Storable binary image v$major1\.$minor1 more recent than I am \\(v$header->{major}\.$minor\\)/",
-+ "higher major, lower minor"
-+ );
-+
-+ my $where;
-+ if (!$isnetwork) {
-+ # All these are omitted from the network order header.
-+ # I'm not sure if it's correct to omit the byte size stuff.
-+ $copy = $contents;
-+ substr ($copy, $file_magic + 3, length $header->{byteorder})
-+ = reverse $header->{byteorder};
-+
-+ test_corrupt(
-+ $copy, $sub, "/^Byte order is not compatible/",
-+ "byte order"
-+ );
-+ $where = $file_magic + 3 + length $header->{byteorder};
-+ foreach (
-+ ['intsize', "Integer"],
-+ ['longsize', "Long integer"],
-+ ['ptrsize', "Pointer"],
-+ ['nvsize', "Double"]
-+ ) {
-+ my ($key, $name) = @$_;
-+ $copy = $contents;
-+ substr ($copy, $where++, 1) = chr 0;
-+ test_corrupt(
-+ $copy, $sub, "/^$name size is not compatible/",
-+ "$name size"
-+ );
-+ }
-+ } else {
-+ $where = $file_magic + $network_magic;
- }
-- } else {
-- $where = $file_magic + $network_magic;
-- }
--
-- # Just the header and a tag 255. As 34 is currently the highest tag, this
-- # is "unexpected"
-- $copy = substr ($contents, 0, $where) . chr 255;
--
-- test_corrupt ($copy, $sub,
-- "/^Corrupted storable $what \\(binary v$header->{major}.$header->{minor}\\)/",
-- "bogus tag");
--
-- # Now drop the minor version number
-- substr ($copy, $file_magic + 1, 1) = chr $minor1;
--
-- test_corrupt ($copy, $sub,
-- "/^Corrupted storable $what \\(binary v$header->{major}.$minor1\\)/",
-- "bogus tag, minor less 1");
-- # Now increase the minor version number
-- substr ($copy, $file_magic + 1, 1) = chr $minor6;
--
-- # local $Storable::DEBUGME = 1;
-- # This is the delayed croak
-- test_corrupt ($copy, $sub,
-- "/^Storable binary image v$header->{major}.$minor6 contains data of type 255. This Storable is v$header->{major}.$minor and can only handle data types up to 35/",
-- "bogus tag, minor plus 4");
-- # And check again that this croak is not delayed:
-- {
-+
-+ # Just the header and a tag 255. As 34 is currently the highest tag, this
-+ # is "unexpected"
-+ $copy = substr ($contents, 0, $where) . chr 255;
-+
-+ test_corrupt(
-+ $copy, $sub,
-+ "/^Corrupted storable $what \\(binary v$header->{major}.$header->{minor}\\)/",
-+ "bogus tag"
-+ );
-+
-+ # Now drop the minor version number
-+ substr ($copy, $file_magic + 1, 1) = chr $minor1;
-+
-+ test_corrupt(
-+ $copy, $sub,
-+ "/^Corrupted storable $what \\(binary v$header->{major}.$minor1\\)/",
-+ "bogus tag, minor less 1"
-+ );
-+ # Now increase the minor version number
-+ substr ($copy, $file_magic + 1, 1) = chr $minor6;
-+
- # local $Storable::DEBUGME = 1;
-- local $Storable::accept_future_minor = 0;
-- test_corrupt ($copy, $sub,
-- "/^Storable binary image v$header->{major}\.$minor6 more recent than I am \\(v$header->{major}\.$minor\\)/",
-- "higher minor");
-- }
-+ # This is the delayed croak
-+ test_corrupt(
-+ $copy, $sub,
-+ "/^Storable binary image v$header->{major}.$minor6 contains data of type 255. This Storable is v$header->{major}.$minor and can only handle data types up to 35/",
-+ "bogus tag, minor plus 4"
-+ );
-+ # And check again that this croak is not delayed:
-+ {
-+ # local $Storable::DEBUGME = 1;
-+ local $Storable::accept_future_minor = 0;
-+ test_corrupt(
-+ $copy, $sub,
-+ "/^Storable binary image v$header->{major}\.$minor6 more recent than I am \\(v$header->{major}\.$minor\\)/",
-+ "higher minor"
-+ );
-+ }
- }
-
-+my $file = tempfilename();
- ok (defined store(\%hash, $file), "store() returned defined value");
-
- my $expected = 20 + length ($file_magic_str) + $other_magic + $fancy;
- my $length = -s $file;
-
- die "Don't seem to have written file '$file' as I can't get its length: $!"
-- unless defined $file;
-+ unless defined $file;
-
- die "Expected file to be $expected bytes (sizeof long is $Config{longsize}) but it is $length"
-- unless $length == $expected;
-+ unless $length == $expected;
-
- # Read the contents into memory:
- my $contents = slurp ($file);
-@@ -257,14 +274,11 @@ my $clone = retrieve $file;
- test_hash ($clone);
-
- # Then test it.
--test_things($contents, \&store_and_retrieve, 'file');
-+test_things($contents, \&write_and_retrieve, 'file');
-
- # And now try almost everything again with a Storable string
- my $stored = freeze \%hash;
--test_things($stored, \&freeze_and_thaw, 'string');
--
--# Network order.
--unlink $file or die "Can't unlink '$file': $!";
-+test_things($stored, sub { eval { thaw $_[0] } }, 'string');
-
- ok (defined nstore(\%hash, $file), "nstore() returned defined value");
-
-@@ -272,10 +286,10 @@ $expected = 20 + length ($file_magic_str) + $network_magic + $fancy;
- $length = -s $file;
-
- die "Don't seem to have written file '$file' as I can't get its length: $!"
-- unless defined $file;
-+ unless defined $file;
-
- die "Expected file to be $expected bytes (sizeof long is $Config{longsize}) but it is $length"
-- unless $length == $expected;
-+ unless $length == $expected;
-
- # Read the contents into memory:
- $contents = slurp ($file);
-@@ -285,11 +299,11 @@ $clone = retrieve $file;
- test_hash ($clone);
-
- # Then test it.
--test_things($contents, \&store_and_retrieve, 'file', 1);
-+test_things($contents, \&write_and_retrieve, 'file', 1);
-
- # And now try almost everything again with a Storable string
- $stored = nfreeze \%hash;
--test_things($stored, \&freeze_and_thaw, 'string', 1);
-+test_things($stored, sub { eval { thaw $_[0] } }, 'string', 1);
-
- # Test that the bug fixed by #20587 doesn't affect us under some older
- # Perl. AMS 20030901
-@@ -304,7 +318,7 @@ test_things($stored, \&freeze_and_thaw, 'string', 1);
- }
-
- # Unusual in that the empty string is stored with an SX_LSCALAR marker
--my $hash = store_and_retrieve("pst0\5\6\3\0\0\0\1\1\0\0\0\0\0\0\0\5empty");
-+my $hash = write_and_retrieve("pst0\5\6\3\0\0\0\1\1\0\0\0\0\0\0\0\5empty");
- ok(!$@, "no exception");
- is(ref($hash), "HASH", "got a hash");
- is($hash->{empty}, "", "got empty element");
-diff --git a/t/overload.t b/t/overload.t
-index 64c09e4..305a92e 100644
---- a/t/overload.t
-+++ b/t/overload.t
-@@ -1,19 +1,16 @@
- #!./perl
- #
- # Copyright (c) 1995-2000, Raphael Manfredi
--#
-+#
- # You may redistribute only under the same terms as Perl 5, as specified
- # in the README file that comes with the distribution.
--#
--
--sub BEGIN {
-- unshift @INC, 't';
-- unshift @INC, 't/compat' if $] < 5.006002;
-- require Config; import Config;
-- if ($ENV{PERL_CORE} and $Config{'extensions'} !~ /\bStorable\b/) {
-- print "1..0 # Skip: Storable was not built\n";
-- exit 0;
-- }
-+#
-+
-+use strict;
-+use warnings;
-+
-+BEGIN {
-+ unshift @INC, 't/lib';
- }
-
- use Storable qw(freeze thaw);
-@@ -25,22 +22,22 @@ use Test::More tests => 19;
- package OVERLOADED;
-
- use overload
-- '""' => sub { $_[0][0] };
-+ '""' => sub { $_[0][0] };
-
- package main;
-
--$a = bless [77], OVERLOADED;
-+my $a = bless [77], 'OVERLOADED';
-
--$b = thaw freeze $a;
-+my $b = thaw freeze $a;
- is(ref $b, 'OVERLOADED');
- is("$b", "77");
-
--$c = thaw freeze \$a;
-+my $c = thaw freeze \$a;
- is(ref $c, 'REF');
- is(ref $$c, 'OVERLOADED');
- is("$$c", "77");
-
--$d = thaw freeze [$a, $a];
-+my $d = thaw freeze [$a, $a];
- is("$d->[0]", "77");
- $d->[0][0]++;
- is("$d->[1]", "78");
-@@ -48,27 +45,27 @@ is("$d->[1]", "78");
- package REF_TO_OVER;
-
- sub make {
-- my $self = bless {}, shift;
-- my ($over) = @_;
-- $self->{over} = $over;
-- return $self;
-+ my $self = bless {}, shift;
-+ my ($over) = @_;
-+ $self->{over} = $over;
-+ return $self;
- }
-
- package OVER;
-
- use overload
-- '+' => \&plus,
-- '""' => sub { ref $_[0] };
-+ '+' => \&plus,
-+ '""' => sub { ref $_[0] };
-
- sub plus {
-- return 314;
-+ return 314;
- }
-
- sub make {
-- my $self = bless {}, shift;
-- my $ref = REF_TO_OVER->make($self);
-- $self->{ref} = $ref;
-- return $self;
-+ my $self = bless {}, shift;
-+ my $ref = REF_TO_OVER->make($self);
-+ $self->{ref} = $ref;
-+ return $self;
- }
-
- package main;
-@@ -86,7 +83,8 @@ is($b + $b, 314);
- my $f = '';
- if (ord ('A') == 193) { # EBCDIC.
- $f = unpack 'u', q{7!084$0S(P>)MUN7%V=/6P<0*!**5EJ8`};
--}else {
-+}
-+else {
- $f = unpack 'u', q{7!084$0Q(05-?3U9%4DQ/040*!'-N;W<`};
- }
-
-@@ -103,12 +101,11 @@ is($$$t, 'snow');
- #---
- # blessed reference to overloaded object.
- {
-- my $a = bless [88], 'OVERLOADED';
-- my $c = thaw freeze bless \$a, 'main';
-- is(ref $c, 'main');
-- is(ref $$c, 'OVERLOADED');
-- is("$$c", "88");
--
-+ my $a = bless [88], 'OVERLOADED';
-+ my $c = thaw freeze bless \$a, 'main';
-+ is(ref $c, 'main');
-+ is(ref $$c, 'OVERLOADED');
-+ is("$$c", "88");
- }
-
- 1;
-diff --git a/t/recurse.t b/t/recurse.t
-index 6f82169..f1d330a 100644
---- a/t/recurse.t
-+++ b/t/recurse.t
-@@ -1,20 +1,13 @@
- #!./perl
- #
- # Copyright (c) 1995-2000, Raphael Manfredi
--#
-+#
- # You may redistribute only under the same terms as Perl 5, as specified
- # in the README file that comes with the distribution.
--#
--use Config;
--
--sub BEGIN {
-- unshift @INC, 't';
-- unshift @INC, 't/compat' if $] < 5.006002;
-- if ($ENV{PERL_CORE} and $Config{'extensions'} !~ /\bStorable\b/) {
-- print "1..0 # Skip: Storable was not built\n";
-- exit 0;
-- }
--}
-+#
-+
-+use strict;
-+use warnings;
-
- use Storable qw(freeze thaw dclone);
-
-@@ -26,7 +19,7 @@ package OBJ_REAL;
-
- use Storable qw(freeze thaw);
-
--@x = ('a', 1);
-+my @x = ('a', 1);
-
- sub make { bless [], shift }
-
-@@ -106,9 +99,9 @@ package OBJ_REAL2;
-
- use Storable qw(freeze thaw);
-
--$MAX = 20;
--$recursed = 0;
--$hook_called = 0;
-+our $MAX = 20;
-+our $recursed = 0;
-+our $hook_called = 0;
-
- sub make { bless [], shift }
-
-@@ -196,10 +189,10 @@ sub new {
- my $class = shift;
- return bless {
- a => 'dummy',
-- b => [
-+ b => [
- Foo->new(1),
-- Foo->new(2), # Second instance of a Foo
-- ]
-+ Foo->new(2), # Second instance of a Foo
-+ ]
- }, $class;
- }
-
-@@ -216,7 +209,7 @@ sub STORABLE_thaw {
-
- package main;
-
--my $bar = new Bar;
-+my $bar = Bar->new;
- my $bar2 = thaw freeze $bar;
-
- is(ref($bar2), 'Bar');
-@@ -351,7 +344,7 @@ eval {
- dclone $t;
- };
- like $@, qr/Max\. recursion depth with nested structures exceeded/,
-- 'Caught aref stack overflow '.MAX_DEPTH*2;
-+ 'Caught aref stack overflow '.MAX_DEPTH*2;
-
- if ($ENV{APPVEYOR} and length(pack "p", "") >= 8) {
- # TODO: need to repro this fail on a small machine.
-@@ -366,7 +359,7 @@ else {
- dclone $t;
- };
- like $@, qr/Max\. recursion depth with nested structures exceeded/,
-- 'Caught href stack overflow '.MAX_DEPTH_HASH*2;
-+ 'Caught href stack overflow '.MAX_DEPTH_HASH*2;
- }
-
- {
-@@ -378,5 +371,5 @@ else {
- push @tt, $t;
- }
- ok(eval { dclone \@tt; 1 },
-- "low depth structure shouldn't be treated as nested");
-+ "low depth structure shouldn't be treated as nested");
- }
-diff --git a/t/regexp.t b/t/regexp.t
-index 6c6b1d5..e4bff60 100644
---- a/t/regexp.t
-+++ b/t/regexp.t
-@@ -1,4 +1,4 @@
--#!perl -w
-+#!./perl -w
- use strict;
- use Storable "dclone";
- use Test::More;
-@@ -6,7 +6,7 @@ use Test::More;
- my $version = int(($]-5)*1000);
-
- $version >= 8
-- or plan skip_all => "regexps not supported before 5.8";
-+ or plan skip_all => "regexps not supported before 5.8";
-
- my @tests;
- while (<DATA>) {
-@@ -30,9 +30,9 @@ while (<DATA>) {
- }
- my @match = split /\s*,\s*/, $match;
- for my $m (@match) {
-- my $not = $m =~ s/^!//;
-- my $cmatch = eval $m;
-- die if $@;
-+ my $not = $m =~ s/^!//;
-+ my $cmatch = eval $m;
-+ die if $@;
- push @tests, [ $code, $not, $cmatch, $m, $name ];
- }
- }
-@@ -42,7 +42,7 @@ plan tests => 10 + 3*scalar(@tests);
- SKIP:
- {
- $version >= 14 && $version < 20
-- or skip "p introduced in 5.14, pointless from 5.20", 4;
-+ or skip "p introduced in 5.14, pointless from 5.20", 4;
- my $q1 = eval "qr/b/p";
- my $q2 = eval "qr/b/";
- my $c1 = dclone($q1);
-@@ -56,7 +56,7 @@ SKIP:
- SKIP:
- {
- $version >= 24
-- or skip "n introduced in 5.22", 4;
-+ or skip "n introduced in 5.22", 4;
- my $c1 = dclone(eval "qr/(\\w)/");
- my $c2 = dclone(eval "qr/(\\w)/n");
- ok("a" =~ $c1, "a matches $c1");
-@@ -68,7 +68,7 @@ SKIP:
- SKIP:
- {
- $version >= 8
-- or skip "Cannot retrieve before 5.8", 1;
-+ or skip "Cannot retrieve before 5.8", 1;
- my $x;
- my $re = qr/a(?{ $x = 1 })/;
- use re 'eval';
-@@ -82,27 +82,27 @@ for my $test (@tests) {
- my $qr = eval $code;
- die "Could not compile $code: $@" if $@;
- if ($not) {
-- unlike($match, $qr, "$name: pre(not) match $matchc");
-+ unlike($match, $qr, "$name: pre(not) match $matchc");
- }
- else {
-- like($match, $qr, "$name: prematch $matchc");
-+ like($match, $qr, "$name: prematch $matchc");
- }
- my $qr2 = dclone($qr);
- if ($not) {
-- unlike($match, $qr2, "$name: (not) match $matchc");
-+ unlike($match, $qr2, "$name: (not) match $matchc");
- }
- else {
-- like($match, $qr2, "$name: match $matchc");
-+ like($match, $qr2, "$name: match $matchc");
- }
-
- # this is unlikely to be a problem, but make sure regexps are frozen sanely
- # as part of a data structure
- my $a2 = dclone([ $qr ]);
- if ($not) {
-- unlike($match, $a2->[0], "$name: (not) match $matchc (array)");
-+ unlike($match, $a2->[0], "$name: (not) match $matchc (array)");
- }
- else {
-- like($match, $a2->[0], "$name: match $matchc (array)");
-+ like($match, $a2->[0], "$name: match $matchc (array)");
- }
- }
-
-diff --git a/t/restrict.t b/t/restrict.t
-index 36a9179..026d635 100644
---- a/t/restrict.t
-+++ b/t/restrict.t
-@@ -1,30 +1,22 @@
- #!./perl -w
- #
- # Copyright 2002, Larry Wall.
--#
-+#
- # You may redistribute only under the same terms as Perl 5, as specified
- # in the README file that comes with the distribution.
- #
-
-+use strict;
-+use warnings;
-+
- sub BEGIN {
-- unshift @INC, 't';
-- unshift @INC, 't/compat' if $] < 5.006002;
-- if ($ENV{PERL_CORE}){
-- require Config;
-- if ($Config::Config{'extensions'} !~ /\bStorable\b/) {
-- print "1..0 # Skip: Storable was not built\n";
-+ if (!eval "require Hash::Util") {
-+ if ($@ =~ /Can\'t locate Hash\/Util\.pm in \@INC/s) {
-+ print "1..0 # Skip: No Hash::Util:\n";
- exit 0;
-+ } else {
-+ die;
- }
-- } else {
-- if (!eval "require Hash::Util") {
-- if ($@ =~ /Can\'t locate Hash\/Util\.pm in \@INC/s) {
-- print "1..0 # Skip: No Hash::Util:\n";
-- exit 0;
-- } else {
-- die;
-- }
-- }
-- unshift @INC, 't';
- }
- }
-
-@@ -46,81 +38,81 @@ my $test;
- package Restrict_Test;
-
- sub me_second {
-- return (undef, $_[0]);
-+ return (undef, $_[0]);
- }
-
- package main;
-
- sub freeze_thaw {
-- my $temp = freeze $_[0];
-- return thaw $temp;
-+ my $temp = freeze $_[0];
-+ return thaw $temp;
- }
-
- sub testit {
-- my $hash = shift;
-- my $cloner = shift;
-- my $copy = &$cloner($hash);
-+ my $hash = shift;
-+ my $cloner = shift;
-+ my $copy = &$cloner($hash);
-
-- my @in_keys = sort keys %$hash;
-- my @out_keys = sort keys %$copy;
-- is("@in_keys", "@out_keys", "keys match after deep clone");
-+ my @in_keys = sort keys %$hash;
-+ my @out_keys = sort keys %$copy;
-+ is("@in_keys", "@out_keys", "keys match after deep clone");
-
-- # $copy = $hash; # used in initial debug of the tests
-+ # $copy = $hash; # used in initial debug of the tests
-
-- is(Internals::SvREADONLY(%$copy), 1, "cloned hash restricted?");
-+ is(Internals::SvREADONLY(%$copy), 1, "cloned hash restricted?");
-
-- is(Internals::SvREADONLY($copy->{question}), 1,
-- "key 'question' not locked in copy?");
-+ is(Internals::SvREADONLY($copy->{question}), 1,
-+ "key 'question' not locked in copy?");
-
-- is(Internals::SvREADONLY($copy->{answer}), '',
-- "key 'answer' not locked in copy?");
-+ is(Internals::SvREADONLY($copy->{answer}), '',
-+ "key 'answer' not locked in copy?");
-
-- eval { $copy->{extra} = 15 } ;
-- is($@, '', "Can assign to reserved key 'extra'?");
-+ eval { $copy->{extra} = 15 } ;
-+ is($@, '', "Can assign to reserved key 'extra'?");
-
-- eval { $copy->{nono} = 7 } ;
-- isnt($@, '', "Can not assign to invalid key 'nono'?");
-+ eval { $copy->{nono} = 7 } ;
-+ isnt($@, '', "Can not assign to invalid key 'nono'?");
-
-- is(exists $copy->{undef}, 1, "key 'undef' exists");
-+ is(exists $copy->{undef}, 1, "key 'undef' exists");
-
-- is($copy->{undef}, undef, "value for key 'undef' is undefined");
-+ is($copy->{undef}, undef, "value for key 'undef' is undefined");
- }
-
- for $Storable::canonical (0, 1) {
-- for my $cloner (\&dclone, \&freeze_thaw) {
-- print "# \$Storable::canonical = $Storable::canonical\n";
-- testit (\%hash, $cloner);
-- my $object = \%hash;
-- # bless {}, "Restrict_Test";
--
-- my %hash2;
-- $hash2{"k$_"} = "v$_" for 0..16;
-- lock_hash %hash2;
-- for (0..16) {
-- unlock_value %hash2, "k$_";
-- delete $hash2{"k$_"};
-- }
-- my $copy = &$cloner(\%hash2);
-+ for my $cloner (\&dclone, \&freeze_thaw) {
-+ print "# \$Storable::canonical = $Storable::canonical\n";
-+ testit (\%hash, $cloner);
-+ my $object = \%hash;
-+ # bless {}, "Restrict_Test";
-+
-+ my %hash2;
-+ $hash2{"k$_"} = "v$_" for 0..16;
-+ lock_hash %hash2;
-+ for (0..16) {
-+ unlock_value %hash2, "k$_";
-+ delete $hash2{"k$_"};
-+ }
-+ my $copy = &$cloner(\%hash2);
-
-- for (0..16) {
-- my $k = "k$_";
-- eval { $copy->{$k} = undef } ;
-- is($@, '', "Can assign to reserved key '$k'?");
-- }
-+ for (0..16) {
-+ my $k = "k$_";
-+ eval { $copy->{$k} = undef } ;
-+ is($@, '', "Can assign to reserved key '$k'?");
-+ }
-
-- my %hv;
-- $hv{a} = __PACKAGE__;
-- lock_keys %hv;
-- my $hv2 = &$cloner(\%hv);
-- ok eval { $$hv2{a} = 70 }, 'COWs do not become read-only';
-- }
-+ my %hv;
-+ $hv{a} = __PACKAGE__;
-+ lock_keys %hv;
-+ my $hv2 = &$cloner(\%hv);
-+ ok eval { $$hv2{a} = 70 }, 'COWs do not become read-only';
-+ }
- }
-
- # [perl #73972]
- # broken again with cperl PERL_PERTURB_KEYS_TOP.
- SKIP: {
- skip "TODO restricted Storable hashes broken with PERL_PERTURB_KEYS_TOP", 1
-- if !$Storable::DEBUGME && $Config{usecperl};
-+ if !$Storable::DEBUGME && $Config{usecperl};
- for my $n (1..100) {
- my @keys = map { "FOO$_" } (1..$n);
-
-diff --git a/t/retrieve.t b/t/retrieve.t
-index 0412772..7e57753 100644
---- a/t/retrieve.t
-+++ b/t/retrieve.t
-@@ -2,24 +2,16 @@
- #
- # Copyright (c) 1995-2000, Raphael Manfredi
- # Copyright (c) 2017, cPanel Inc
--#
-+#
- # You may redistribute only under the same terms as Perl 5, as specified
- # in the README file that comes with the distribution.
- #
-
- sub BEGIN {
-- unshift @INC, 'dist/Storable/t' if $ENV{PERL_CORE} and -d 'dist/Storable/t';
-- unshift @INC, 't';
-- unshift @INC, 't/compat' if $] < 5.006002;
-- require Config; import Config;
-- if ($ENV{PERL_CORE} and $Config{'extensions'} !~ /\bStorable\b/) {
-- print "1..0 # Skip: Storable was not built\n";
-- exit 0;
-- }
-- require 'st-dump.pl';
-+ unshift @INC, 't/lib';
- }
-
--
-+use STDump;
- use Storable qw(store retrieve nstore);
- use Test::More tests => 20;
-
-@@ -29,7 +21,7 @@ $c = bless {}, CLASS;
- $c->{attribute} = 'attrval';
- %a = ('key', 'value', 1, 0, $a, $b, 'cvar', \$c);
- @a = ('first', '', undef, 3, -4, -3.14159, 456, 4.5,
-- $b, \$a, $a, $c, \$c, \%a);
-+ $b, \$a, $a, $c, \$c, \%a);
-
- isnt(store(\@a, "store$$"), undef);
- is(Storable::last_op_in_netorder(), '');
-@@ -45,9 +37,9 @@ $nroot = retrieve('nstore');
- isnt($root, undef);
- is(Storable::last_op_in_netorder(), 1);
-
--$d1 = &dump($root);
-+$d1 = stdump($root);
- isnt($d1, undef);
--$d2 = &dump($nroot);
-+$d2 = stdump($nroot);
- isnt($d2, undef);
-
- is($d1, $d2);
-@@ -81,7 +73,7 @@ SKIP:
- # the test allocates 2GB, but other memory is allocated too, so we want
- # at least 3
- $ENV{PERL_TEST_MEMORY} && $ENV{PERL_TEST_MEMORY} >= 3
-- or skip "over 2GB memory needed for this test", 2;
-+ or skip "over 2GB memory needed for this test", 2;
- # len<I32, len>127: stack overflow
- my $retrieve_hook = "\x04\x0a\x08\x31\x32\x33\x34\x35\x36\x37\x38\x04\x08\x08\x08\x13\x04\x49\xfe\xf4\x7f\x72\x6e\x61\x6c\x73\x02\x00\x00\x00\x00";
- my $x = eval { Storable::mretrieve($retrieve_hook); };
-diff --git a/t/robust.t b/t/robust.t
-index 27f5fc0..639fdfc 100644
---- a/t/robust.t
-+++ b/t/robust.t
-@@ -1,9 +1,12 @@
--#!/usr/bin/perl
-+#!./perl
-
- # This test script checks that Storable will load properly if someone
- # is incorrectly messing with %INC to hide Log::Agent. No, no-one should
- # really be doing this, but, then, it *used* to work!
-
-+use strict;
-+use warnings;
-+
- use Test::More;
- plan tests => 1;
-
-diff --git a/t/sig_die.t b/t/sig_die.t
-index 3ea2df4..3c150a8 100644
---- a/t/sig_die.t
-+++ b/t/sig_die.t
-@@ -6,17 +6,8 @@
- # in the README file that comes with the distribution.
- #
-
--sub BEGIN {
-- unshift @INC, 't';
-- unshift @INC, 't/compat' if $] < 5.006002;
-- require Config; import Config;
-- if ($ENV{PERL_CORE} and $Config{'extensions'} !~ /\bStorable\b/) {
-- print "1..0 # Skip: Storable was not built\n";
-- exit 0;
-- }
--}
--
- use strict;
-+use warnings;
- use Test::More tests => 1;
-
- my @warns;
-diff --git a/t/st-dump.pl b/t/st-dump.pl
-deleted file mode 100644
-index 50d8712..0000000
---- a/t/st-dump.pl
-+++ /dev/null
-@@ -1,136 +0,0 @@
--#
--# Copyright (c) 1995-2000, Raphael Manfredi
--#
--# You may redistribute only under the same terms as Perl 5, as specified
--# in the README file that comes with the distribution.
--#
--
--package dump;
--use Carp;
--
--%dump = (
-- 'SCALAR' => 'dump_scalar',
-- 'LVALUE' => 'dump_scalar',
-- 'ARRAY' => 'dump_array',
-- 'HASH' => 'dump_hash',
-- 'REF' => 'dump_ref',
--);
--
--# Given an object, dump its transitive data closure
--sub main::dump {
-- my ($object) = @_;
-- croak "Not a reference!" unless ref($object);
-- local %dumped;
-- local %object;
-- local $count = 0;
-- local $dumped = '';
-- &recursive_dump($object, 1);
-- return $dumped;
--}
--
--# This is the root recursive dumping routine that may indirectly be
--# called by one of the routine it calls...
--# The link parameter is set to false when the reference passed to
--# the routine is an internal temporary variable, implying the object's
--# address is not to be dumped in the %dumped table since it's not a
--# user-visible object.
--sub recursive_dump {
-- my ($object, $link) = @_;
--
-- # Get something like SCALAR(0x...) or TYPE=SCALAR(0x...).
-- # Then extract the bless, ref and address parts of that string.
--
-- my $what = "$object"; # Stringify
-- my ($bless, $ref, $addr) = $what =~ /^(\w+)=(\w+)\((0x.*)\)$/;
-- ($ref, $addr) = $what =~ /^(\w+)\((0x.*)\)$/ unless $bless;
--
-- # Special case for references to references. When stringified,
-- # they appear as being scalars. However, ref() correctly pinpoints
-- # them as being references indirections. And that's it.
--
-- $ref = 'REF' if ref($object) eq 'REF';
--
-- # Make sure the object has not been already dumped before.
-- # We don't want to duplicate data. Retrieval will know how to
-- # relink from the previously seen object.
--
-- if ($link && $dumped{$addr}++) {
-- my $num = $object{$addr};
-- $dumped .= "OBJECT #$num seen\n";
-- return;
-- }
--
-- my $objcount = $count++;
-- $object{$addr} = $objcount;
--
-- # Call the appropriate dumping routine based on the reference type.
-- # If the referenced was blessed, we bless it once the object is dumped.
-- # The retrieval code will perform the same on the last object retrieved.
--
-- croak "Unknown simple type '$ref'" unless defined $dump{$ref};
--
-- &{$dump{$ref}}($object); # Dump object
-- &bless($bless) if $bless; # Mark it as blessed, if necessary
--
-- $dumped .= "OBJECT $objcount\n";
--}
--
--# Indicate that current object is blessed
--sub bless {
-- my ($class) = @_;
-- $dumped .= "BLESS $class\n";
--}
--
--# Dump single scalar
--sub dump_scalar {
-- my ($sref) = @_;
-- my $scalar = $$sref;
-- unless (defined $scalar) {
-- $dumped .= "UNDEF\n";
-- return;
-- }
-- my $len = length($scalar);
-- $dumped .= "SCALAR len=$len $scalar\n";
--}
--
--# Dump array
--sub dump_array {
-- my ($aref) = @_;
-- my $items = 0 + @{$aref};
-- $dumped .= "ARRAY items=$items\n";
-- foreach $item (@{$aref}) {
-- unless (defined $item) {
-- $dumped .= 'ITEM_UNDEF' . "\n";
-- next;
-- }
-- $dumped .= 'ITEM ';
-- &recursive_dump(\$item, 1);
-- }
--}
--
--# Dump hash table
--sub dump_hash {
-- my ($href) = @_;
-- my $items = scalar(keys %{$href});
-- $dumped .= "HASH items=$items\n";
-- foreach $key (sort keys %{$href}) {
-- $dumped .= 'KEY ';
-- &recursive_dump(\$key, undef);
-- unless (defined $href->{$key}) {
-- $dumped .= 'VALUE_UNDEF' . "\n";
-- next;
-- }
-- $dumped .= 'VALUE ';
-- &recursive_dump(\$href->{$key}, 1);
-- }
--}
--
--# Dump reference to reference
--sub dump_ref {
-- my ($rref) = @_;
-- my $deref = $$rref; # Follow reference to reference
-- $dumped .= 'REF ';
-- &recursive_dump($deref, 1); # $dref is a reference
--}
--
--1;
-diff --git a/t/store.t b/t/store.t
-index 45af0b2..e8ca167 100644
---- a/t/store.t
-+++ b/t/store.t
-@@ -6,86 +6,83 @@
- # in the README file that comes with the distribution.
- #
-
-+use strict;
-+use warnings;
-+
- sub BEGIN {
-- unshift @INC, 't';
-- unshift @INC, 't/compat' if $] < 5.006002;
-- require Config; import Config;
-- if ($ENV{PERL_CORE} and $Config{'extensions'} !~ /\bStorable\b/) {
-- print "1..0 # Skip: Storable was not built\n";
-- exit 0;
-- }
-- require 'st-dump.pl';
-+ unshift @INC, 't/lib';
- }
-
-+use STDump;
- # $Storable::DEBUGME = 1;
- use Storable qw(store retrieve store_fd nstore_fd fd_retrieve);
-
- use Test::More tests => 25;
-
--$a = 'toto';
--$b = \$a;
--$c = bless {}, CLASS;
-+my $a = 'toto';
-+my $b = \$a;
-+my $c = bless {}, 'CLASS';
- $c->{attribute} = 'attrval';
--%a = ('key', 'value', 1, 0, $a, $b, 'cvar', \$c);
--@a = ('first', undef, 3, -4, -3.14159, 456, 4.5,
-- $b, \$a, $a, $c, \$c, \%a);
-+my %a = ('key', 'value', 1, 0, $a, $b, 'cvar', \$c);
-+my @a = ('first', undef, 3, -4, -3.14159, 456, 4.5,
-+ $b, \$a, $a, $c, \$c, \%a);
-
- isnt(store(\@a, "store$$"), undef);
-
--$dumped = &dump(\@a);
-+my $dumped = stdump(\@a);
- isnt($dumped, undef);
-
--$root = retrieve("store$$");
-+my $root = retrieve("store$$");
- isnt($root, undef);
-
--$got = &dump($root);
-+my $got = stdump($root);
- isnt($got, undef);
-
- is($got, $dumped);
-
- 1 while unlink "store$$";
-
--package FOO; @ISA = qw(Storable);
-+package FOO; our @ISA = qw(Storable);
-
- sub make {
-- my $self = bless {};
-- $self->{key} = \%main::a;
-- return $self;
-+ my $self = bless {};
-+ $self->{key} = \%a;
-+ return $self;
- };
-
- package main;
-
--$foo = FOO->make;
-+my $foo = FOO->make;
- isnt($foo->store("store$$"), undef);
-
--isnt(open(OUT, '>>', "store$$"), undef);
--binmode OUT;
-+isnt(open(my $OUT, '>>', "store$$"), undef);
-+binmode $OUT;
-
--isnt(store_fd(\@a, ::OUT), undef);
--isnt(nstore_fd($foo, ::OUT), undef);
--isnt(nstore_fd(\%a, ::OUT), undef);
-+isnt(store_fd(\@a, $OUT), undef);
-+isnt(nstore_fd($foo, $OUT), undef);
-+isnt(nstore_fd(\%a, $OUT), undef);
-
--isnt(close(OUT), undef);
-+isnt(close($OUT), undef);
-
--isnt(open(OUT, "store$$"), undef);
-+isnt(open($OUT, '<', "store$$"), undef);
-
--$r = fd_retrieve(::OUT);
-+my $r = fd_retrieve($OUT);
- isnt($r, undef);
--is(&dump($r), &dump($foo));
-+is(stdump($r), stdump($foo));
-
--$r = fd_retrieve(::OUT);
-+$r = fd_retrieve($OUT);
- isnt($r, undef);
--is(&dump($r), &dump(\@a));
-+is(stdump($r), stdump(\@a));
-
--$r = fd_retrieve(main::OUT);
-+$r = fd_retrieve($OUT);
- isnt($r, undef);
--is(&dump($r), &dump($foo));
-+is(stdump($r), stdump($foo));
-
--$r = fd_retrieve(::OUT);
-+$r = fd_retrieve($OUT);
- isnt($r, undef);
--is(&dump($r), &dump(\%a));
-+is(stdump($r), stdump(\%a));
-
--eval { $r = fd_retrieve(::OUT); };
-+eval { $r = fd_retrieve($OUT); };
- isnt($@, '');
-
- {
-@@ -105,12 +102,12 @@ isnt($@, '');
- {
-
- my $frozen =
-- "\x70\x73\x74\x30\x04\x0a\x08\x31\x32\x33\x34\x35\x36\x37\x38\x04\x08\x08\x08\x03\xff\x00\x00\x00\x19\x08\xff\x00\x00\x00\x08\x08\xf9\x16\x16\x13\x16\x10\x10\x10\xff\x15\x16\x16\x16\x1e\x16\x16\x16\x16\x16\x16\x16\x16\x16\x16\x13\xf0\x16\x16\x16\xfe\x16\x41\x41\x41\x41\xe8\x03\x41\x41\x41\x41\x41\x41\x41\x41\x51\x41\xa9\xac\xac\xac\xac\xac\xac\xac\xac\xac\xac\xac\xac\xac\xac\xac\xac\xac\xac\xac\xac\xb8\xac\xac\xac\xac\xac\xac\xac\xac\x9a\xac\xac\xac\xac\xac\xac\xac\xac\xac\x93\xac\xac\xac\xac\xac\xac\xac\xac\xac\xac\xac\xac\xac\xac\xac\xac\xac\xac\xac\xac\xac\xac\xac\xac\x00\x64\xac\xa8\xac\xac\xac\xac\xac\xac\xac\xac\xac\xac\xac\x2c\xac\x41\x41\x41\x41\x41\x41\x41\x41\x41\x00\x80\x41\x80\x41\x41\x41\x41\x41\x41\x51\x41\xac\xac\xac";
-+ "\x70\x73\x74\x30\x04\x0a\x08\x31\x32\x33\x34\x35\x36\x37\x38\x04\x08\x08\x08\x03\xff\x00\x00\x00\x19\x08\xff\x00\x00\x00\x08\x08\xf9\x16\x16\x13\x16\x10\x10\x10\xff\x15\x16\x16\x16\x1e\x16\x16\x16\x16\x16\x16\x16\x16\x16\x16\x13\xf0\x16\x16\x16\xfe\x16\x41\x41\x41\x41\xe8\x03\x41\x41\x41\x41\x41\x41\x41\x41\x51\x41\xa9\xac\xac\xac\xac\xac\xac\xac\xac\xac\xac\xac\xac\xac\xac\xac\xac\xac\xac\xac\xac\xb8\xac\xac\xac\xac\xac\xac\xac\xac\x9a\xac\xac\xac\xac\xac\xac\xac\xac\xac\x93\xac\xac\xac\xac\xac\xac\xac\xac\xac\xac\xac\xac\xac\xac\xac\xac\xac\xac\xac\xac\xac\xac\xac\xac\x00\x64\xac\xa8\xac\xac\xac\xac\xac\xac\xac\xac\xac\xac\xac\x2c\xac\x41\x41\x41\x41\x41\x41\x41\x41\x41\x00\x80\x41\x80\x41\x41\x41\x41\x41\x41\x51\x41\xac\xac\xac";
- open my $fh, '<', \$frozen;
- eval { Storable::fd_retrieve($fh); };
- pass('RT 130635: no stack smashing error when retrieving hook');
-
- }
-
--close OUT or die "Could not close: $!";
-+close $OUT or die "Could not close: $!";
- END { 1 while unlink "store$$" }
-diff --git a/t/testlib.pl b/t/testlib.pl
-deleted file mode 100644
-index a44c338..0000000
---- a/t/testlib.pl
-+++ /dev/null
-@@ -1,38 +0,0 @@
--#!perl -w
--use strict;
--
--our $file = "storable-testfile.$$";
--die "Temporary file '$file' already exists" if -e $file;
--
--END { while (-f $file) {unlink $file or die "Can't unlink '$file': $!" }}
--
--use Storable qw (store retrieve freeze thaw nstore nfreeze);
--
--sub slurp {
-- my $file = shift;
-- local (*FH, $/);
-- open FH, "<", $file or die "Can't open '$file': $!";
-- binmode FH;
-- my $contents = <FH>;
-- die "Can't read $file: $!" unless defined $contents;
-- return $contents;
--}
--
--sub store_and_retrieve {
-- my $data = shift;
-- unlink $file or die "Can't unlink '$file': $!";
-- local *FH;
-- open FH, ">", $file or die "Can't open '$file': $!";
-- binmode FH;
-- print FH $data or die "Can't print to '$file': $!";
-- close FH or die "Can't close '$file': $!";
--
-- return eval {retrieve $file};
--}
--
--sub freeze_and_thaw {
-- my $data = shift;
-- return eval {thaw $data};
--}
--
--1;
-diff --git a/t/threads.t b/t/threads.t
-index 0b34334..646357a 100644
---- a/t/threads.t
-+++ b/t/threads.t
-@@ -16,14 +16,11 @@
- # Storable::init_perinterp() to create a new context for each new
- # thread when it starts
-
-+use strict;
-+use warnings;
-+
-+use Config;
- sub BEGIN {
-- unshift @INC, 't';
-- unshift @INC, 't/compat' if $] < 5.006002;
-- require Config; import Config;
-- if ($ENV{PERL_CORE} and $Config{'extensions'} !~ /\bStorable\b/) {
-- print "1..0 # Skip: Storable was not built\n";
-- exit 0;
-- }
- unless ($Config{'useithreads'} and eval { require threads; 1 }) {
- print "1..0 # Skip: no threads\n";
- exit 0;
-@@ -35,7 +32,7 @@ sub BEGIN {
- # - is \W, so can't use \b at start. Negative look ahead and look behind
- # works at start/end of string, or where preceded/followed by spaces
- if ($] == 5.008002 and eval q{ $Config{'ccflags'} =~ /(?<!\S)-DDEBUGGING(?!\S)/ }) {
-- # Bug caused by change 21610, fixed by change 21849
-+ # Bug caused by change 21610, fixed by change 21849
- print "1..0 # Skip: tickles bug in threads combined with -DDEBUGGING on 5.8.2\n";
- exit 0;
- }
-@@ -43,8 +40,6 @@ sub BEGIN {
-
- use Test::More;
-
--use strict;
--
- use threads;
- use Storable qw(nfreeze);
-
-diff --git a/t/tied.t b/t/tied.t
-index e8be39e..567fb9e 100644
---- a/t/tied.t
-+++ b/t/tied.t
-@@ -1,130 +1,126 @@
- #!./perl
- #
- # Copyright (c) 1995-2000, Raphael Manfredi
--#
-+#
- # You may redistribute only under the same terms as Perl 5, as specified
- # in the README file that comes with the distribution.
- #
-
-+use strict;
-+use warnings;
-+
- sub BEGIN {
-- unshift @INC, 't';
-- unshift @INC, 't/compat' if $] < 5.006002;
-- require Config; import Config;
-- if ($ENV{PERL_CORE} and $Config{'extensions'} !~ /\bStorable\b/) {
-- print "1..0 # Skip: Storable was not built\n";
-- exit 0;
-- }
-- require 'st-dump.pl';
-+ unshift @INC, 't/lib';
- }
--
-+use STDump;
- use Storable qw(freeze thaw);
- $Storable::flags = Storable::FLAGS_COMPAT;
-
- use Test::More tests => 25;
-
--($scalar_fetch, $array_fetch, $hash_fetch) = (0, 0, 0);
-+my ($scalar_fetch, $array_fetch, $hash_fetch) = (0, 0, 0);
-
- package TIED_HASH;
-
- sub TIEHASH {
-- my $self = bless {}, shift;
-- return $self;
-+ my $self = bless {}, shift;
-+ return $self;
- }
-
- sub FETCH {
-- my $self = shift;
-- my ($key) = @_;
-- $main::hash_fetch++;
-- return $self->{$key};
-+ my $self = shift;
-+ my ($key) = @_;
-+ $hash_fetch++;
-+ return $self->{$key};
- }
-
- sub STORE {
-- my $self = shift;
-- my ($key, $value) = @_;
-- $self->{$key} = $value;
-+ my $self = shift;
-+ my ($key, $value) = @_;
-+ $self->{$key} = $value;
- }
-
- sub FIRSTKEY {
-- my $self = shift;
-- scalar keys %{$self};
-- return each %{$self};
-+ my $self = shift;
-+ scalar keys %{$self};
-+ return each %{$self};
- }
-
- sub NEXTKEY {
-- my $self = shift;
-- return each %{$self};
-+ my $self = shift;
-+ return each %{$self};
- }
-
- package TIED_ARRAY;
-
- sub TIEARRAY {
-- my $self = bless [], shift;
-- return $self;
-+ my $self = bless [], shift;
-+ return $self;
- }
-
- sub FETCH {
-- my $self = shift;
-- my ($idx) = @_;
-- $main::array_fetch++;
-- return $self->[$idx];
-+ my $self = shift;
-+ my ($idx) = @_;
-+ $array_fetch++;
-+ return $self->[$idx];
- }
-
- sub STORE {
-- my $self = shift;
-- my ($idx, $value) = @_;
-- $self->[$idx] = $value;
-+ my $self = shift;
-+ my ($idx, $value) = @_;
-+ $self->[$idx] = $value;
- }
-
- sub FETCHSIZE {
-- my $self = shift;
-- return @{$self};
-+ my $self = shift;
-+ return @{$self};
- }
-
- package TIED_SCALAR;
-
- sub TIESCALAR {
-- my $scalar;
-- my $self = bless \$scalar, shift;
-- return $self;
-+ my $scalar;
-+ my $self = bless \$scalar, shift;
-+ return $self;
- }
-
- sub FETCH {
-- my $self = shift;
-- $main::scalar_fetch++;
-- return $$self;
-+ my $self = shift;
-+ $scalar_fetch++;
-+ return $$self;
- }
-
- sub STORE {
-- my $self = shift;
-- my ($value) = @_;
-- $$self = $value;
-+ my $self = shift;
-+ my ($value) = @_;
-+ $$self = $value;
- }
-
- package FAULT;
-
--$fault = 0;
-+our $fault = 0;
-
- sub TIESCALAR {
-- my $pkg = shift;
-- return bless [@_], $pkg;
-+ my $pkg = shift;
-+ return bless [@_], $pkg;
- }
-
- sub FETCH {
-- my $self = shift;
-- my ($href, $key) = @$self;
-- $fault++;
-- untie $href->{$key};
-- return $href->{$key} = 1;
-+ my $self = shift;
-+ my ($href, $key) = @$self;
-+ $fault++;
-+ untie $href->{$key};
-+ return $href->{$key} = 1;
- }
-
- package main;
-
--$a = 'toto';
--$b = \$a;
-+my $a = 'toto';
-+my $b = \$a;
-
--$c = tie %hash, TIED_HASH;
--$d = tie @array, TIED_ARRAY;
--tie $scalar, TIED_SCALAR;
-+my $c = tie my %hash, 'TIED_HASH';
-+my $d = tie my @array, 'TIED_ARRAY';
-+tie my $scalar, 'TIED_SCALAR';
-
- #$scalar = 'foo';
- #$hash{'attribute'} = \$d;
-@@ -133,30 +129,30 @@ tie $scalar, TIED_SCALAR;
-
- ### If I say
- ### $hash{'attribute'} = $d;
--### below, then dump() incorrectly dumps the hash value as a string the second
-+### below, then stdump() incorrectly dumps the hash value as a string the second
- ### time it is reached. I have not investigated enough to tell whether it's
--### a bug in my dump() routine or in the Perl tieing mechanism.
-+### a bug in my stdump() routine or in the Perl tieing mechanism.
- $scalar = 'foo';
- $hash{'attribute'} = 'plain value';
- $array[0] = \$scalar;
- $array[1] = $c;
- $array[2] = \@array;
-
--@tied = (\$scalar, \@array, \%hash);
--%a = ('key', 'value', 1, 0, $a, $b, 'cvar', \$a, 'scalarref', \$scalar);
--@a = ('first', 3, -4, -3.14159, 456, 4.5, $d, \$d,
-- $b, \$a, $a, $c, \$c, \%a, \@array, \%hash, \@tied);
-+my @tied = (\$scalar, \@array, \%hash);
-+my %a = ('key', 'value', 1, 0, $a, $b, 'cvar', \$a, 'scalarref', \$scalar);
-+my @a = ('first', 3, -4, -3.14159, 456, 4.5, $d, \$d,
-+ $b, \$a, $a, $c, \$c, \%a, \@array, \%hash, \@tied);
-
- my $f = freeze(\@a);
- isnt($f, undef);
-
--$dumped = &dump(\@a);
-+my $dumped = stdump(\@a);
- isnt($dumped, undef);
-
--$root = thaw($f);
-+my $root = thaw($f);
- isnt($root, undef);
-
--$got = &dump($root);
-+my $got = stdump($root);
- isnt($got, undef);
-
- ### Used to see the manifestation of the bug documented above.
-@@ -167,25 +163,25 @@ isnt($got, undef);
-
- is($got, $dumped);
-
--$g = freeze($root);
-+my $g = freeze($root);
- is(length $f, length $g);
-
- # Ensure the tied items in the retrieved image work
--@old = ($scalar_fetch, $array_fetch, $hash_fetch);
--@tied = ($tscalar, $tarray, $thash) = @{$root->[$#{$root}]};
--@type = qw(SCALAR ARRAY HASH);
-+my @old = ($scalar_fetch, $array_fetch, $hash_fetch);
-+@tied = my ($tscalar, $tarray, $thash) = @{$root->[$#{$root}]};
-+my @type = qw(SCALAR ARRAY HASH);
-
- is(ref tied $$tscalar, 'TIED_SCALAR');
- is(ref tied @$tarray, 'TIED_ARRAY');
- is(ref tied %$thash, 'TIED_HASH');
-
--@new = ($$tscalar, $tarray->[0], $thash->{'attribute'});
-+my @new = ($$tscalar, $tarray->[0], $thash->{'attribute'});
- @new = ($scalar_fetch, $array_fetch, $hash_fetch);
-
- # Tests 10..15
--for ($i = 0; $i < @new; $i++) {
-- is($new[$i], $old[$i] + 1);
-- is(ref $tied[$i], $type[$i]);
-+for (my $i = 0; $i < @new; $i++) {
-+ is($new[$i], $old[$i] + 1);
-+ is(ref $tied[$i], $type[$i]);
- }
-
- # Check undef ties
-@@ -208,14 +204,14 @@ is($FAULT::fault, 2);
- our ($a, $b);
- $b = "not ok ";
- sub TIESCALAR { bless \$a } sub FETCH { "ok " }
-- tie $a, P; my $r = thaw freeze \$a; $b = $$r;
-+ tie $a, 'P'; my $r = thaw freeze \$a; $b = $$r;
- main::is($b, "ok ");
- }
-
- {
- # blessed ref to tied object should be thawed blessed
- my @a;
-- tie @a, TIED_ARRAY;
-+ tie @a, 'TIED_ARRAY';
- my $r = bless \@a, 'FOO99';
- my $f = freeze($r);
- my $t = thaw($f);
-diff --git a/t/tied_hook.t b/t/tied_hook.t
-index 7f2bc98..ee3b6f2 100644
---- a/t/tied_hook.t
-+++ b/t/tied_hook.t
-@@ -1,155 +1,157 @@
- #!./perl
- #
- # Copyright (c) 1995-2000, Raphael Manfredi
--#
-+#
- # You may redistribute only under the same terms as Perl 5, as specified
- # in the README file that comes with the distribution.
- #
-
-+use strict;
-+use warnings;
-+
- sub BEGIN {
-- unshift @INC, 't';
-- unshift @INC, 't/compat' if $] < 5.006002;
-- require Config; import Config;
-- if ($ENV{PERL_CORE} and $Config{'extensions'} !~ /\bStorable\b/) {
-- print "1..0 # Skip: Storable was not built\n";
-- exit 0;
-- }
-- require 'st-dump.pl';
-+ unshift @INC, 't/lib';
- }
-
-+use STDump;
-+
- use Storable qw(freeze thaw);
-
- $Storable::flags = Storable::FLAGS_COMPAT;
-
- use Test::More tests => 28;
-
--($scalar_fetch, $array_fetch, $hash_fetch) = (0, 0, 0);
-+my (
-+ $scalar_fetch, $scalar_hook1, $scalar_hook2,
-+ $array_fetch, $array_hook1, $array_hook2,
-+ $hash_fetch, $hash_hook1, $hash_hook2,
-+) = (0) x 9;
-
- package TIED_HASH;
-
- sub TIEHASH {
-- my $self = bless {}, shift;
-- return $self;
-+ my $self = bless {}, shift;
-+ return $self;
- }
-
- sub FETCH {
-- my $self = shift;
-- my ($key) = @_;
-- $main::hash_fetch++;
-- return $self->{$key};
-+ my $self = shift;
-+ my ($key) = @_;
-+ $hash_fetch++;
-+ return $self->{$key};
- }
-
- sub STORE {
-- my $self = shift;
-- my ($key, $value) = @_;
-- $self->{$key} = $value;
-+ my $self = shift;
-+ my ($key, $value) = @_;
-+ $self->{$key} = $value;
- }
-
- sub FIRSTKEY {
-- my $self = shift;
-- scalar keys %{$self};
-- return each %{$self};
-+ my $self = shift;
-+ scalar keys %{$self};
-+ return each %{$self};
- }
-
- sub NEXTKEY {
-- my $self = shift;
-- return each %{$self};
-+ my $self = shift;
-+ return each %{$self};
- }
-
- sub STORABLE_freeze {
-- my $self = shift;
-- $main::hash_hook1++;
-- return join(":", keys %$self) . ";" . join(":", values %$self);
-+ my $self = shift;
-+ $hash_hook1++;
-+ return join(":", keys %$self) . ";" . join(":", values %$self);
- }
-
- sub STORABLE_thaw {
-- my ($self, $cloning, $frozen) = @_;
-- my ($keys, $values) = split(/;/, $frozen);
-- my @keys = split(/:/, $keys);
-- my @values = split(/:/, $values);
-- for (my $i = 0; $i < @keys; $i++) {
-- $self->{$keys[$i]} = $values[$i];
-- }
-- $main::hash_hook2++;
-+ my ($self, $cloning, $frozen) = @_;
-+ my ($keys, $values) = split(/;/, $frozen);
-+ my @keys = split(/:/, $keys);
-+ my @values = split(/:/, $values);
-+ for (my $i = 0; $i < @keys; $i++) {
-+ $self->{$keys[$i]} = $values[$i];
-+ }
-+ $hash_hook2++;
- }
-
- package TIED_ARRAY;
-
- sub TIEARRAY {
-- my $self = bless [], shift;
-- return $self;
-+ my $self = bless [], shift;
-+ return $self;
- }
-
- sub FETCH {
-- my $self = shift;
-- my ($idx) = @_;
-- $main::array_fetch++;
-- return $self->[$idx];
-+ my $self = shift;
-+ my ($idx) = @_;
-+ $array_fetch++;
-+ return $self->[$idx];
- }
-
- sub STORE {
-- my $self = shift;
-- my ($idx, $value) = @_;
-- $self->[$idx] = $value;
-+ my $self = shift;
-+ my ($idx, $value) = @_;
-+ $self->[$idx] = $value;
- }
-
- sub FETCHSIZE {
-- my $self = shift;
-- return @{$self};
-+ my $self = shift;
-+ return @{$self};
- }
-
- sub STORABLE_freeze {
-- my $self = shift;
-- $main::array_hook1++;
-- return join(":", @$self);
-+ my $self = shift;
-+ $array_hook1++;
-+ return join(":", @$self);
- }
-
- sub STORABLE_thaw {
-- my ($self, $cloning, $frozen) = @_;
-- @$self = split(/:/, $frozen);
-- $main::array_hook2++;
-+ my ($self, $cloning, $frozen) = @_;
-+ @$self = split(/:/, $frozen);
-+ $array_hook2++;
- }
-
- package TIED_SCALAR;
-
- sub TIESCALAR {
-- my $scalar;
-- my $self = bless \$scalar, shift;
-- return $self;
-+ my $scalar;
-+ my $self = bless \$scalar, shift;
-+ return $self;
- }
-
- sub FETCH {
-- my $self = shift;
-- $main::scalar_fetch++;
-- return $$self;
-+ my $self = shift;
-+ $scalar_fetch++;
-+ return $$self;
- }
-
- sub STORE {
-- my $self = shift;
-- my ($value) = @_;
-- $$self = $value;
-+ my $self = shift;
-+ my ($value) = @_;
-+ $$self = $value;
- }
-
- sub STORABLE_freeze {
-- my $self = shift;
-- $main::scalar_hook1++;
-- return $$self;
-+ my $self = shift;
-+ $scalar_hook1++;
-+ return $$self;
- }
-
- sub STORABLE_thaw {
-- my ($self, $cloning, $frozen) = @_;
-- $$self = $frozen;
-- $main::scalar_hook2++;
-+ my ($self, $cloning, $frozen) = @_;
-+ $$self = $frozen;
-+ $scalar_hook2++;
- }
-
- package main;
-
--$a = 'toto';
--$b = \$a;
-+my $a = 'toto';
-+my $b = \$a;
-
--$c = tie %hash, TIED_HASH;
--$d = tie @array, TIED_ARRAY;
--tie $scalar, TIED_SCALAR;
-+my $c = tie my %hash, 'TIED_HASH';
-+my $d = tie my @array, 'TIED_ARRAY';
-+tie my $scalar, 'TIED_SCALAR';
-
- $scalar = 'foo';
- $hash{'attribute'} = 'plain value';
-@@ -158,43 +160,43 @@ $array[1] = $c;
- $array[2] = \@array;
- $array[3] = "plaine scalaire";
-
--@tied = (\$scalar, \@array, \%hash);
--%a = ('key', 'value', 1, 0, $a, $b, 'cvar', \$a, 'scalarref', \$scalar);
--@a = ('first', 3, -4, -3.14159, 456, 4.5, $d, \$d,
-- $b, \$a, $a, $c, \$c, \%a, \@array, \%hash, \@tied);
-+my @tied = (\$scalar, \@array, \%hash);
-+my %a = ('key', 'value', 1, 0, $a, $b, 'cvar', \$a, 'scalarref', \$scalar);
-+my @a = ('first', 3, -4, -3.14159, 456, 4.5, $d, \$d,
-+ $b, \$a, $a, $c, \$c, \%a, \@array, \%hash, \@tied);
-
- my $f = freeze(\@a);
- isnt($f, undef);
--$dumped = &dump(\@a);
-+my $dumped = stdump(\@a);
- isnt($dumped, undef);
-
--$root = thaw($f);
-+my $root = thaw($f);
- isnt($root, undef);
-
--$got = &dump($root);
-+my $got = stdump($root);
- isnt($got, undef);
-
--isnt($got, $dumped); # our hooks did not handle refs in array
-+isnt($got, $dumped); # our hooks did not handle refs in array
-
--$g = freeze($root);
-+my $g = freeze($root);
- is(length $f, length $g);
-
- # Ensure the tied items in the retrieved image work
--@old = ($scalar_fetch, $array_fetch, $hash_fetch);
--@tied = ($tscalar, $tarray, $thash) = @{$root->[$#{$root}]};
--@type = qw(SCALAR ARRAY HASH);
-+my @old = ($scalar_fetch, $array_fetch, $hash_fetch);
-+@tied = my ($tscalar, $tarray, $thash) = @{$root->[$#{$root}]};
-+my @type = qw(SCALAR ARRAY HASH);
-
- is(ref tied $$tscalar, 'TIED_SCALAR');
- is(ref tied @$tarray, 'TIED_ARRAY');
- is(ref tied %$thash, 'TIED_HASH');
-
--@new = ($$tscalar, $tarray->[0], $thash->{'attribute'});
-+my @new = ($$tscalar, $tarray->[0], $thash->{'attribute'});
- @new = ($scalar_fetch, $array_fetch, $hash_fetch);
-
- # Tests 10..15
--for ($i = 0; $i < @new; $i++) {
-- is($new[$i], $old[$i] + 1); # Tests 10,12,14
-- is(ref $tied[$i], $type[$i]); # Tests 11,13,15
-+for (my $i = 0; $i < @new; $i++) {
-+ is($new[$i], $old[$i] + 1); # Tests 10,12,14
-+ is(ref $tied[$i], $type[$i]); # Tests 11,13,15
- }
-
- is($$tscalar, 'foo');
-@@ -213,7 +215,7 @@ is($hash_hook2, 1);
- # And now for the "blessed ref to tied hash" with "store hook" test...
- #
-
--my $bc = bless \%hash, 'FOO'; # FOO does not exist -> no hook
-+my $bc = bless \%hash, 'FOO'; # FOO does not exist -> no hook
- my $bx = thaw freeze $bc;
-
- is(ref $bx, 'FOO');
-@@ -225,14 +227,14 @@ package TIED_HASH_REF;
-
-
- sub STORABLE_freeze {
-- my ($self, $cloning) = @_;
-- return if $cloning;
-- return('ref lost');
-+ my ($self, $cloning) = @_;
-+ return if $cloning;
-+ return('ref lost');
- }
-
- sub STORABLE_thaw {
-- my ($self, $cloning, $data) = @_;
-- return if $cloning;
-+ my ($self, $cloning, $data) = @_;
-+ return if $cloning;
- }
-
- package main;
-diff --git a/t/tied_items.t b/t/tied_items.t
-index 3d13971..361727f 100644
---- a/t/tied_items.t
-+++ b/t/tied_items.t
-@@ -1,7 +1,7 @@
- #!./perl
- #
- # Copyright (c) 1995-2000, Raphael Manfredi
--#
-+#
- # You may redistribute only under the same terms as Perl 5, as specified
- # in the README file that comes with the distribution.
- #
-@@ -10,15 +10,8 @@
- # Tests ref to items in tied hash/array structures.
- #
-
--sub BEGIN {
-- unshift @INC, 't';
-- unshift @INC, 't/compat' if $] < 5.006002;
-- require Config; import Config;
-- if ($ENV{PERL_CORE} and $Config{'extensions'} !~ /\bStorable\b/) {
-- print "1..0 # Skip: Storable was not built\n";
-- exit 0;
-- }
--}
-+use strict;
-+use warnings;
-
- $^W = 0;
-
-@@ -27,27 +20,27 @@ use Test::More tests => 8;
-
- $Storable::flags = Storable::FLAGS_COMPAT;
-
--$h_fetches = 0;
-+my $h_fetches = 0;
-
- sub H::TIEHASH { bless \(my $x), "H" }
- sub H::FETCH { $h_fetches++; $_[1] - 70 }
-
--tie %h, "H";
-+tie my %h, "H";
-
--$ref = \$h{77};
--$ref2 = dclone $ref;
-+my $ref = \$h{77};
-+my $ref2 = dclone $ref;
-
- is($h_fetches, 0);
- is($$ref2, $$ref);
- is($$ref2, 7);
- is($h_fetches, 2);
-
--$a_fetches = 0;
-+my $a_fetches = 0;
-
- sub A::TIEARRAY { bless \(my $x), "A" }
- sub A::FETCH { $a_fetches++; $_[1] - 70 }
-
--tie @a, "A";
-+tie my @a, "A";
-
- $ref = \$a[78];
- $ref2 = dclone $ref;
-diff --git a/t/tied_reify.t b/t/tied_reify.t
-index 44e8637..40b6a96 100644
---- a/t/tied_reify.t
-+++ b/t/tied_reify.t
-@@ -1,8 +1,11 @@
-+#!./perl
-+use strict;
-+use warnings;
-+
- use Test::More tests => 1;
--
-+
- package dumb_thing;
-
--use strict; use warnings;
- use Tie::Array;
- use Carp;
- use base 'Tie::StdArray';
-@@ -19,7 +22,6 @@ sub TIEARRAY {
-
- package main;
-
--use strict; use warnings;
- use Storable qw(freeze thaw);
-
- my $x = [1,2,3,4];
-diff --git a/t/tied_store.t b/t/tied_store.t
-index c657f95..771a613 100644
---- a/t/tied_store.t
-+++ b/t/tied_store.t
-@@ -1,14 +1,7 @@
- #!./perl
-
--sub BEGIN {
-- unshift @INC, 't';
-- unshift @INC, 't/compat' if $] < 5.006002;
-- require Config; import Config;
-- if ($ENV{PERL_CORE} and $Config{'extensions'} !~ /\bStorable\b/) {
-- print "1..0 # Skip: Storable was not built\n";
-- exit 0;
-- }
--}
-+use strict;
-+use warnings;
-
- use Storable ();
- use Test::More tests => 3;
-@@ -20,8 +13,8 @@ package TIED_HASH;
- sub TIEHASH { bless({}, $_[0]) }
-
- sub STORE {
-- $f = Storable::freeze(\$_[2]);
-- 1;
-+ $f = Storable::freeze(\$_[2]);
-+ 1;
- }
-
- package TIED_ARRAY;
-@@ -29,8 +22,8 @@ package TIED_ARRAY;
- sub TIEARRAY { bless({}, $_[0]) }
-
- sub STORE {
-- $f = Storable::freeze(\$_[2]);
-- 1;
-+ $f = Storable::freeze(\$_[2]);
-+ 1;
- }
-
- package TIED_SCALAR;
-@@ -38,8 +31,8 @@ package TIED_SCALAR;
- sub TIESCALAR { bless({}, $_[0]) }
-
- sub STORE {
-- $f = Storable::freeze(\$_[1]);
-- 1;
-+ $f = Storable::freeze(\$_[1]);
-+ 1;
- }
-
- package main;
-diff --git a/t/utf8.t b/t/utf8.t
-index 0f546f0..67063e7 100644
---- a/t/utf8.t
-+++ b/t/utf8.t
-@@ -1,53 +1,44 @@
- #!./perl -w
- #
- # Copyright (c) 1995-2000, Raphael Manfredi
--#
-+#
- # You may redistribute only under the same terms as Perl 5, as specified
- # in the README file that comes with the distribution.
- #
-
--sub BEGIN {
-- unshift @INC, 't';
-- unshift @INC, 't/compat' if $] < 5.006002;
-- require Config; import Config;
-- if ($ENV{PERL_CORE} and $Config{'extensions'} !~ /\bStorable\b/) {
-- print "1..0 # Skip: Storable was not built\n";
-- exit 0;
-- }
--}
--
- use strict;
-+use warnings;
-
- use Storable qw(thaw freeze);
- use Test::More tests => 6;
-
- my $x = chr(1234);
--is($x, ${thaw freeze \$x});
-+is($x, ${thaw freeze \$x}, "round trip one unicode character");
-
- # Long scalar
- $x = join '', map {chr $_} (0..1023);
--is($x, ${thaw freeze \$x});
-+is($x, ${thaw freeze \$x}, "round trip Unicode string");
-
- # Char in the range 127-255 (probably) in utf8. This just won't work for
- # EBCDIC for early Perls.
- $x = ($] lt 5.007_003) ? chr(175) : chr(utf8::unicode_to_native(175))
-- . chr (256);
-+ . chr (256);
- chop $x;
--is($x, ${thaw freeze \$x});
-+is($x, ${thaw freeze \$x}, "round strip a 128-255 character");
-
- # Storable needs to cope if a frozen string happens to be internal utf8
- # encoded
-
- $x = chr 256;
- my $data = freeze \$x;
--is($x, ${thaw $data});
-+is($x, ${thaw $data}, "sanity check for upgraded frozen data");
-
- $data .= chr 256;
- chop $data;
--is($x, ${thaw $data});
-+is($x, ${thaw $data}, "test for upgraded frozen data");
-
-
- $data .= chr 256;
- # This definitely isn't valid
- eval {thaw $data};
--like($@, qr/corrupt.*characters outside/);
-+like($@, qr/corrupt.*characters outside/, "check error handling for added 256 code point");
-diff --git a/t/utf8hash.t b/t/utf8hash.t
-index a2a8725..638076a 100644
---- a/t/utf8hash.t
-+++ b/t/utf8hash.t
-@@ -1,21 +1,15 @@
- #!./perl
-
-+use strict;
-+use warnings;
-+
- sub BEGIN {
- if ($] < 5.007) {
-- print "1..0 # Skip: no utf8 hash key support\n";
-- exit 0;
-- }
-- unshift @INC, 't';
-- require Config; import Config;
-- if ($ENV{PERL_CORE}){
-- if($Config{'extensions'} !~ /\bStorable\b/) {
-- print "1..0 # Skip: Storable was not built\n";
-- exit 0;
-- }
-+ print "1..0 # Skip: no utf8 hash key support\n";
-+ exit 0;
- }
- }
-
--use strict;
- our $DEBUGME = shift || 0;
- use Storable qw(store nstore retrieve thaw freeze);
- {
-@@ -41,9 +35,9 @@ no utf8; # we have a naked 8-bit byte below (in Latin 1, anyway)
- # In Latin 1 -ese the below ord() should end up 0xc0 (192),
- # in EBCDIC 0x64 (100). Both should end up being UTF-8/UTF-EBCDIC.
- my @ords = (
-- ord("�"), # LATIN CAPITAL LETTER A WITH GRAVE
-- 0x3000, #IDEOGRAPHIC SPACE
-- );
-+ ord("�"), # LATIN CAPITAL LETTER A WITH GRAVE
-+ 0x3000, #IDEOGRAPHIC SPACE
-+);
-
- foreach my $i (@ords){
- my $u = chr($i); utf8::upgrade($u);
-@@ -58,20 +52,20 @@ foreach my $i (@ords){
-
- sub nkeys($){
- my $href = shift;
-- return scalar keys %$href;
-+ return scalar keys %$href;
- }
-
- my $nk;
--is($nk = nkeys(\%utf8hash), scalar(@ords)*2,
-- "nasty hash generated (nkeys=$nk)");
-+is($nk = nkeys(\%utf8hash), scalar(@ords)*2,
-+ "nasty hash generated (nkeys=$nk)");
-
- # now let the show begin!
-
- my $thawed = thaw(freeze(\%utf8hash));
-
- is($nk = nkeys($thawed),
-- nkeys(\%utf8hash),
-- "scalar keys \%{\$thawed} (nkeys=$nk)");
-+ nkeys(\%utf8hash),
-+ "scalar keys \%{\$thawed} (nkeys=$nk)");
- for my $k (sort keys %$thawed){
- is($utf8hash{$k}, $thawed->{$k}, "frozen item chr($utf8hash{$k})");
- }
-@@ -83,8 +77,8 @@ ok((nstore \%utf8hash, $storage), "nstore to $storage");
- ok(($retrieved = retrieve($storage)), "retrieve from $storage");
-
- is($nk = nkeys($retrieved),
-- nkeys(\%utf8hash),
-- "scalar keys \%{\$retrieved} (nkeys=$nk)");
-+ nkeys(\%utf8hash),
-+ "scalar keys \%{\$retrieved} (nkeys=$nk)");
- for my $k (sort keys %$retrieved){
- is($utf8hash{$k}, $retrieved->{$k}, "nstored item chr($utf8hash{$k})");
- }
-@@ -94,8 +88,8 @@ unlink $storage;
- ok((store \%utf8hash, $storage), "store to $storage");
- ok(($retrieved = retrieve($storage)), "retrieve from $storage");
- is($nk = nkeys($retrieved),
-- nkeys(\%utf8hash),
-- "scalar keys \%{\$retrieved} (nkeys=$nk)");
-+ nkeys(\%utf8hash),
-+ "scalar keys \%{\$retrieved} (nkeys=$nk)");
- for my $k (sort keys %$retrieved){
- is($utf8hash{$k}, $retrieved->{$k}, "stored item chr($utf8hash{$k})");
- }
-@@ -106,7 +100,7 @@ $DEBUGME or unlink $storage;
- package Hash_Test;
-
- sub me_second {
-- return (undef, $_[0]);
-+ return (undef, $_[0]);
- }
-
- package main;
-@@ -118,15 +112,15 @@ chop $utf8;
- my $bypass = 0;
-
- sub class_test {
-- my ($object, $package) = @_;
-- unless ($package) {
-- is ref $object, 'HASH', "$object is unblessed";
-- return;
-- }
-- isa_ok ($object, $package);
-- my ($garbage, $copy) = eval {$object->me_second};
-- is $@, "", "check it has correct method";
-- cmp_ok $copy, '==', $object, "and that it returns the same object";
-+ my ($object, $package) = @_;
-+ unless ($package) {
-+ is ref $object, 'HASH', "$object is unblessed";
-+ return;
-+ }
-+ isa_ok ($object, $package);
-+ my ($garbage, $copy) = eval {$object->me_second};
-+ is $@, "", "check it has correct method";
-+ cmp_ok $copy, '==', $object, "and that it returns the same object";
- }
-
- # Thanks to Dan Kogai for the Kanji for "castle" (which he informs me also
-@@ -134,65 +128,65 @@ sub class_test {
- my %hash = (map {$_, $_} 'castle', "ch\xe5teau", $utf8, "\x{57CE}");
-
- for my $package ('', 'Hash_Test') {
-- # Run through and sanity check these.
-- if ($package) {
-- bless \%hash, $package;
-- }
-- for (keys %hash) {
-- my $l = 0 + /^\w+$/;
-- my $r = 0 + $hash{$_} =~ /^\w+$/;
-- cmp_ok ($l, '==', $r);
-- }
--
-- # Grr. This cperl mode thinks that ${ is a punctuation variable.
-- # I presume it's punishment for using xemacs rather than emacs. Or OS/2 :-)
-- my $copy = $bypass ? \%hash : ${thaw freeze \\%hash};
-- class_test ($copy, $package);
--
-- for (keys %$copy) {
-- my $l = 0 + /^\w+$/;
-- my $r = 0 + $copy->{$_} =~ /^\w+$/;
-- cmp_ok ($l, '==', $r, sprintf "key length %d", length $_);
-- }
--
--
-- my $bytes = my $char = chr 27182;
-- utf8::encode ($bytes);
--
-- my $orig = {$char => 1};
-- if ($package) {
-- bless $orig, $package;
-- }
-- my $just_utf8 = $bypass ? $orig : ${thaw freeze \$orig};
-- class_test ($just_utf8, $package);
-- cmp_ok (scalar keys %$just_utf8, '==', 1, "1 key in utf8?");
-- cmp_ok ($just_utf8->{$char}, '==', 1, "utf8 key present?");
-- ok (!exists $just_utf8->{$bytes}, "bytes key absent?");
--
-- $orig = {$bytes => 1};
-- if ($package) {
-- bless $orig, $package;
-- }
-- my $just_bytes = $bypass ? $orig : ${thaw freeze \$orig};
-- class_test ($just_bytes, $package);
--
-- cmp_ok (scalar keys %$just_bytes, '==', 1, "1 key in bytes?");
-- cmp_ok ($just_bytes->{$bytes}, '==', 1, "bytes key present?");
-- ok (!exists $just_bytes->{$char}, "utf8 key absent?");
--
-- die sprintf "Both have length %d, which is crazy", length $char
-- if length $char == length $bytes;
--
-- $orig = {$bytes => length $bytes, $char => length $char};
-- if ($package) {
-- bless $orig, $package;
-- }
-- my $both = $bypass ? $orig : ${thaw freeze \$orig};
-- class_test ($both, $package);
--
-- cmp_ok (scalar keys %$both, '==', 2, "2 keys?");
-- cmp_ok ($both->{$bytes}, '==', length $bytes, "bytes key present?");
-- cmp_ok ($both->{$char}, '==', length $char, "utf8 key present?");
-+ # Run through and sanity check these.
-+ if ($package) {
-+ bless \%hash, $package;
-+ }
-+ for (keys %hash) {
-+ my $l = 0 + /^\w+$/;
-+ my $r = 0 + $hash{$_} =~ /^\w+$/;
-+ cmp_ok ($l, '==', $r);
-+ }
-+
-+ # Grr. This cperl mode thinks that ${ is a punctuation variable.
-+ # I presume it's punishment for using xemacs rather than emacs. Or OS/2 :-)
-+ my $copy = $bypass ? \%hash : ${thaw freeze \\%hash};
-+ class_test ($copy, $package);
-+
-+ for (keys %$copy) {
-+ my $l = 0 + /^\w+$/;
-+ my $r = 0 + $copy->{$_} =~ /^\w+$/;
-+ cmp_ok ($l, '==', $r, sprintf "key length %d", length $_);
-+ }
-+
-+
-+ my $bytes = my $char = chr 27182;
-+ utf8::encode ($bytes);
-+
-+ my $orig = {$char => 1};
-+ if ($package) {
-+ bless $orig, $package;
-+ }
-+ my $just_utf8 = $bypass ? $orig : ${thaw freeze \$orig};
-+ class_test ($just_utf8, $package);
-+ cmp_ok (scalar keys %$just_utf8, '==', 1, "1 key in utf8?");
-+ cmp_ok ($just_utf8->{$char}, '==', 1, "utf8 key present?");
-+ ok (!exists $just_utf8->{$bytes}, "bytes key absent?");
-+
-+ $orig = {$bytes => 1};
-+ if ($package) {
-+ bless $orig, $package;
-+ }
-+ my $just_bytes = $bypass ? $orig : ${thaw freeze \$orig};
-+ class_test ($just_bytes, $package);
-+
-+ cmp_ok (scalar keys %$just_bytes, '==', 1, "1 key in bytes?");
-+ cmp_ok ($just_bytes->{$bytes}, '==', 1, "bytes key present?");
-+ ok (!exists $just_bytes->{$char}, "utf8 key absent?");
-+
-+ die sprintf "Both have length %d, which is crazy", length $char
-+ if length $char == length $bytes;
-+
-+ $orig = {$bytes => length $bytes, $char => length $char};
-+ if ($package) {
-+ bless $orig, $package;
-+ }
-+ my $both = $bypass ? $orig : ${thaw freeze \$orig};
-+ class_test ($both, $package);
-+
-+ cmp_ok (scalar keys %$both, '==', 2, "2 keys?");
-+ cmp_ok ($both->{$bytes}, '==', length $bytes, "bytes key present?");
-+ cmp_ok ($both->{$char}, '==', length $char, "utf8 key present?");
- }
-
- }
-diff --git a/t/weak.t b/t/weak.t
-index 48752fb..e6cde65 100644
---- a/t/weak.t
-+++ b/t/weak.t
-@@ -6,42 +6,40 @@
- # in the README file that comes with the distribution.
- #
-
-+use strict;
-+use warnings;
-+
-+use Config;
- sub BEGIN {
-- # This lets us distribute Test::More in t/
-- unshift @INC, 't';
-- unshift @INC, 't/compat' if $] < 5.006002;
-- require Config; import Config;
-- if ($ENV{PERL_CORE} and $Config{'extensions'} !~ /\bStorable\b/) {
-- print "1..0 # Skip: Storable was not built\n";
-- exit 0;
-- }
-- if ($Config{extensions} !~ /\bList\/Util\b/) {
-- print "1..0 # Skip: List::Util was not built\n";
-- exit 0;
-- }
--
-- require Scalar::Util;
-- Scalar::Util->import(qw(weaken isweak));
-- if (grep { /weaken/ } @Scalar::Util::EXPORT_FAIL) {
-- print("1..0 # Skip: No support for weaken in Scalar::Util\n");
-- exit 0;
-- }
-+ if ($Config{extensions} !~ /\bList\/Util\b/) {
-+ print "1..0 # Skip: List::Util was not built\n";
-+ exit 0;
-+ }
-+
-+ require Scalar::Util;
-+ Scalar::Util->import(qw(weaken isweak));
-+ if (grep { /weaken/ } @Scalar::Util::EXPORT_FAIL) {
-+ print("1..0 # Skip: No support for weaken in Scalar::Util\n");
-+ exit 0;
-+ }
-+}
-+
-+BEGIN {
-+ unshift @INC, 't/lib';
- }
-
- use Test::More 'no_plan';
- use Storable qw (store retrieve freeze thaw nstore nfreeze dclone);
--require 'testlib.pl';
--our $file;
--use strict;
-+use STTestLib qw(write_and_retrieve tempfilename slurp);
-
- # $Storable::flags = Storable::FLAGS_COMPAT;
-
- sub tester {
-- my ($contents, $sub, $testersub, $what) = @_;
-- # Test that if we re-write it, everything still works:
-- my $clone = &$sub ($contents);
-- is ($@, "", "There should be no error extracting for $what");
-- &$testersub ($clone, $what);
-+ my ($contents, $sub, $testersub, $what) = @_;
-+ # Test that if we re-write it, everything still works:
-+ my $clone = &$sub ($contents);
-+ is ($@, "", "There should be no error extracting for $what");
-+ &$testersub ($clone, $what);
- }
-
- my $r = {};
-@@ -60,7 +58,7 @@ ok (isweak($w->[0]), "element 0 is a weak reference");
- package OVERLOADED;
-
- use overload
-- '""' => sub { $_[0][0] };
-+ '""' => sub { $_[0][0] };
-
- package main;
-
-@@ -71,77 +69,83 @@ weaken $o->[0];
- ok (isweak($o->[0]), "element 0 is a weak reference");
-
- my @tests = (
--[$s1,
-- sub {
-- my ($clone, $what) = @_;
-- isa_ok($clone,'ARRAY');
-- isa_ok($clone->[0],'HASH');
-- isa_ok($clone->[1],'HASH');
-- ok(!isweak $clone->[0], "Element 0 isn't weak");
-- ok(isweak $clone->[1], "Element 1 is weak");
--}
--],
--# The weak reference needs to hang around long enough for other stuff to
--# be able to make references to it. So try it second.
--[$s0,
-- sub {
-- my ($clone, $what) = @_;
-- isa_ok($clone,'ARRAY');
-- isa_ok($clone->[0],'HASH');
-- isa_ok($clone->[1],'HASH');
-- ok(isweak $clone->[0], "Element 0 is weak");
-- ok(!isweak $clone->[1], "Element 1 isn't weak");
--}
--],
--[$w,
-- sub {
-- my ($clone, $what) = @_;
-- isa_ok($clone,'ARRAY');
-- if ($what eq 'nothing') {
-- # We're the original, so we're still a weakref to a hash
-- isa_ok($clone->[0],'HASH');
-- ok(isweak $clone->[0], "Element 0 is weak");
-- } else {
-- is($clone->[0],undef);
-- }
--}
--],
--[$o,
--sub {
-- my ($clone, $what) = @_;
-- isa_ok($clone,'ARRAY');
-- isa_ok($clone->[0],'OVERLOADED');
-- isa_ok($clone->[1],'OVERLOADED');
-- ok(isweak $clone->[0], "Element 0 is weak");
-- ok(!isweak $clone->[1], "Element 1 isn't weak");
-- is ("$clone->[0]", 77, "Element 0 stringifies to 77");
-- is ("$clone->[1]", 77, "Element 1 stringifies to 77");
--}
--],
-+ [
-+ $s1,
-+ sub {
-+ my ($clone, $what) = @_;
-+ isa_ok($clone,'ARRAY');
-+ isa_ok($clone->[0],'HASH');
-+ isa_ok($clone->[1],'HASH');
-+ ok(!isweak $clone->[0], "Element 0 isn't weak");
-+ ok(isweak $clone->[1], "Element 1 is weak");
-+ }
-+ ],
-+ # The weak reference needs to hang around long enough for other stuff to
-+ # be able to make references to it. So try it second.
-+ [
-+ $s0,
-+ sub {
-+ my ($clone, $what) = @_;
-+ isa_ok($clone,'ARRAY');
-+ isa_ok($clone->[0],'HASH');
-+ isa_ok($clone->[1],'HASH');
-+ ok(isweak $clone->[0], "Element 0 is weak");
-+ ok(!isweak $clone->[1], "Element 1 isn't weak");
-+ }
-+ ],
-+ [
-+ $w,
-+ sub {
-+ my ($clone, $what) = @_;
-+ isa_ok($clone,'ARRAY');
-+ if ($what eq 'nothing') {
-+ # We're the original, so we're still a weakref to a hash
-+ isa_ok($clone->[0],'HASH');
-+ ok(isweak $clone->[0], "Element 0 is weak");
-+ } else {
-+ is($clone->[0],undef);
-+ }
-+ }
-+ ],
-+ [
-+ $o,
-+ sub {
-+ my ($clone, $what) = @_;
-+ isa_ok($clone,'ARRAY');
-+ isa_ok($clone->[0],'OVERLOADED');
-+ isa_ok($clone->[1],'OVERLOADED');
-+ ok(isweak $clone->[0], "Element 0 is weak");
-+ ok(!isweak $clone->[1], "Element 1 isn't weak");
-+ is ("$clone->[0]", 77, "Element 0 stringifies to 77");
-+ is ("$clone->[1]", 77, "Element 1 stringifies to 77");
-+ }
-+ ],
- );
-
- foreach (@tests) {
-- my ($input, $testsub) = @$_;
-+ my ($input, $testsub) = @$_;
-+
-+ tester($input, sub {return shift}, $testsub, 'nothing');
-
-- tester($input, sub {return shift}, $testsub, 'nothing');
-+ my $file = tempfilename();
-
-- ok (defined store($input, $file));
-+ ok (defined store($input, $file));
-
-- # Read the contents into memory:
-- my $contents = slurp ($file);
-+ # Read the contents into memory:
-+ my $contents = slurp ($file);
-
-- tester($contents, \&store_and_retrieve, $testsub, 'file');
-+ tester($contents, \&write_and_retrieve, $testsub, 'file');
-
-- # And now try almost everything again with a Storable string
-- my $stored = freeze $input;
-- tester($stored, \&freeze_and_thaw, $testsub, 'string');
-+ # And now try almost everything again with a Storable string
-+ my $stored = freeze $input;
-+ tester($stored, sub { eval { thaw $_[0] } }, $testsub, 'string');
-
-- ok (defined nstore($input, $file));
-+ ok (defined nstore($input, $file));
-
-- tester($contents, \&store_and_retrieve, $testsub, 'network file');
-+ tester($contents, \&write_and_retrieve, $testsub, 'network file');
-
-- $stored = nfreeze $input;
-- tester($stored, \&freeze_and_thaw, $testsub, 'network string');
-+ $stored = nfreeze $input;
-+ tester($stored, sub { eval { thaw $_[0] } }, $testsub, 'network string');
- }
-
- {
---
-2.49.0
-
diff --git a/perl-Storable.spec b/perl-Storable.spec
index 59f51c0..3152ba1 100644
--- a/perl-Storable.spec
+++ b/perl-Storable.spec
@@ -1,17 +1,13 @@
-%global base_version 3.25
+%global base_version 3.41
Name: perl-Storable
Epoch: 1
-Version: 3.37
-Release: 522%{?dist}
+Version: 3.41
+Release: 1%{?dist}
Summary: Persistence for Perl data structures
# Storable.pm: GPL+ or Artistic
License: GPL-1.0-or-later OR Artistic-1.0-Perl
URL: https://metacpan.org/release/Storable
-Source0: https://cpan.metacpan.org/authors/id/N/NW/NWCLARK/Storable-%{base_version}.tar.gz
-# Unbundled from perl 5.37.12
-Patch0: Storable-3.25-Upgrade-to-3.32.patch
-# Unbundled from perl 5.42.0
-Patch1: Storable-3.32-Upgrade-to-3.37.patch
+Source0: https://cpan.metacpan.org/authors/id/H/HA/HAARG/Storable-%{base_version}.tar.gz
BuildRequires: coreutils
BuildRequires: gcc
BuildRequires: make
@@ -145,6 +141,9 @@ make test
%{_libexecdir}/%{name}
%changelog
+* Mon Jun 08 2026 Jitka Plesnikova <jplesnik@redhat.com> - 1:3.41-1
+- 3.41 bump (rhbz#2485665)
+
* Sat Jan 17 2026 Fedora Release Engineering <releng@fedoraproject.org> - 1:3.37-522
- Rebuilt for https://fedoraproject.org/wiki/Fedora_44_Mass_Rebuild
diff --git a/sources b/sources
index c1fe2cb..051079e 100644
--- a/sources
+++ b/sources
@@ -1 +1 @@
-SHA512 (Storable-3.25.tar.gz) = a1e0342061bc3fbe04e1041c94004c6dc2fbee10ab49939fe93fa84696829aa32896e6af234a33743c6ecd9e5b0c2e2c623428207e0f04dc01b31caa87f8d73c
+SHA512 (Storable-3.41.tar.gz) = 932d21f51269a035bdb93ad13249214d4ee50010788b71f3efa6511cade53276b7d0501f15f1c016b8d5398435422b52fb30ff9da3140574176c9b8dae740db5
^ permalink raw reply related [flat|nested] only message in thread
only message in thread, other threads:[~2026-06-08 11:23 UTC | newest]
Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2026-06-08 11:23 [rpms/perl-Storable] rawhide: 3.41 bump (rhbz#2485665) Jitka Plesnikova
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox