+ - remove Devel::GlobalDestruction fallback inlining because we can now
+ depend on 0.08 which uses Sub::Exporter::Progressive
- honour BUILDARGS when calling $meta->new_object on behalf of Moose
- throw an error on invalid builder (RT#78479)
- - require D::GD 0.07 to avoid prototype mismatch errors
- fix stupid typo in new Sub::Quote section
1.000001 - 2012-07-21
'strictures' => 1.001001,
'Module::Runtime' => 0.012,
'Role::Tiny' => 1.001003,
+ 'Devel::GlobalDestruction' => 0.08,
);
# have to do this since old EUMM dev releases miss the eval $VERSION line
use strictures 1;
use Module::Runtime qw(require_module);
+use Devel::GlobalDestruction ();
use base qw(Exporter);
use Moo::_mro;
);
sub _in_global_destruction ();
+*_in_global_destruction = \&Devel::GlobalDestruction::in_global_destruction;
sub _install_modifier {
my ($into, $type, $name, $code) = @_;
}
}
-
sub STANDARD_DESTROY {
my $self = shift;
die $e if $e; # rethrow
}
-if (eval { use_module('Devel::GlobalDestruction', 0.07) }) {
- *_in_global_destruction = \&Devel::GlobalDestruction::in_global_destruction;
-} elsif (defined ${^GLOBAL_PHASE}) {
- eval 'sub _in_global_destruction () { ${^GLOBAL_PHASE} eq q[DESTRUCT] }';
-} else {
- eval <<'PP_IGD' or die $@;
-
-my ($in_global_destruction, $before_is_installed);
-
-sub _in_global_destruction () { $in_global_destruction }
-
-END {
- # SpeedyCGI runs END blocks every cycle but somehow keeps object instances
- # hence lying about it seems reasonable...ish
- $in_global_destruction = 1 unless $CGI::SpeedyCGI::i_am_speedy;
-}
-
-# threads do not execute the global ENDs (it would be stupid). However
-# one can register a new END via simple string eval within a thread, and
-# achieve the same result. A logical place to do this would be CLONE, which
-# is claimed to run in the context of the new thread. However this does
-# not really seem to be the case - any END evaled in a CLONE is ignored :(
-# Hence blatantly hooking threads::create
-
-if ($INC{'threads.pm'}) {
- my $orig_create = threads->can('create');
- no warnings 'redefine';
- *threads::create = sub {
- { local $@; eval 'END { $in_global_destruction = 1 }' };
- goto $orig_create;
- };
- $before_is_installed = 1;
-}
-
-# just in case threads got loaded after us (silly)
-sub CLONE {
- unless ($before_is_installed) {
- require Carp;
- Carp::croak("You must load the 'threads' module before @{[ __PACKAGE__ ]}");
- }
-}
-
-1; # keep eval happy
-
-PP_IGD
-
-}
-
1;