From: Matt S Trout Date: Sat, 4 Aug 2012 10:23:36 +0000 (+0000) Subject: D::GD 08 uses S'Ex::Progressive so we can uninline the fallback now X-Git-Tag: v1.000002~2 X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=commitdiff_plain;h=7d0a35fa8e9bb0171d3f8ab732936cc40ad76934;hp=eea41fb2c9a6cae25d22dfdc425220ba20532b14;p=gitmo%2FMoo.git D::GD 08 uses S'Ex::Progressive so we can uninline the fallback now --- diff --git a/Changes b/Changes index afb921a..51a07e5 100644 --- a/Changes +++ b/Changes @@ -1,6 +1,7 @@ + - 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 diff --git a/Makefile.PL b/Makefile.PL index 514d904..5f4c57a 100644 --- a/Makefile.PL +++ b/Makefile.PL @@ -14,6 +14,7 @@ my %RUN_DEPS = ( '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 diff --git a/lib/Moo/_Utils.pm b/lib/Moo/_Utils.pm index 76ba5d9..466f3c1 100644 --- a/lib/Moo/_Utils.pm +++ b/lib/Moo/_Utils.pm @@ -10,6 +10,7 @@ use constant can_haz_subname => eval { require Sub::Name }; use strictures 1; use Module::Runtime qw(require_module); +use Devel::GlobalDestruction (); use base qw(Exporter); use Moo::_mro; @@ -20,6 +21,7 @@ our @EXPORT = qw( ); sub _in_global_destruction (); +*_in_global_destruction = \&Devel::GlobalDestruction::in_global_destruction; sub _install_modifier { my ($into, $type, $name, $code) = @_; @@ -88,7 +90,6 @@ sub _unimport_coderefs { } } - sub STANDARD_DESTROY { my $self = shift; @@ -105,52 +106,4 @@ sub STANDARD_DESTROY { 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;