X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FMoose%2FExporter.pm;h=6644ae9975b24a7841a85434273c4f06bf8e90e4;hb=59f5bbde66d61d15b684be88d138fd798ba851d0;hp=58be75440d12817d1a9b01c389c30f576ad63075;hpb=96bb13ea2de7708ef5c48714c0c0cb3abdfdc7ed;p=gitmo%2FMoose.git diff --git a/lib/Moose/Exporter.pm b/lib/Moose/Exporter.pm index 58be754..6644ae9 100644 --- a/lib/Moose/Exporter.pm +++ b/lib/Moose/Exporter.pm @@ -3,6 +3,10 @@ package Moose::Exporter; use strict; use warnings; +our $VERSION = '0.64'; +$VERSION = eval $VERSION; +our $AUTHORITY = 'cpan:STEVAN'; + use Class::MOP; use List::MoreUtils qw( first_index uniq ); use Moose::Util::MetaRole; @@ -164,7 +168,7 @@ sub _make_sub_exporter_params { our $CALLER; sub _make_wrapped_sub { - shift; + my $self = shift; my $fq_name = shift; my $sub = shift; my $export_recorder = shift; @@ -178,8 +182,9 @@ sub _make_wrapped_sub { return sub { my $caller = $CALLER; - my $sub - = Class::MOP::subname( $fq_name => sub { $sub->( $caller, @_ ) } ); + my $wrapper = $self->_make_wrapper($caller, $sub, $fq_name); + + my $sub = Class::MOP::subname($fq_name => $wrapper); $export_recorder->{$sub} = 1; @@ -187,6 +192,15 @@ sub _make_wrapped_sub { }; } +sub _make_wrapper { + shift; + my $caller = shift; + my $sub = shift; + my $fq_name = shift; + + return sub { $sub->($caller, @_) }; +} + sub _make_import_sub { shift; my $exporting_package = shift; @@ -232,6 +246,10 @@ sub _make_import_sub { my $did_init_meta; for my $c ( grep { $_->can('init_meta') } $class, @{$exports_from} ) { + # init_meta can apply a role, which when loaded uses + # Moose::Exporter, which in turn sets $CALLER, so we need + # to protect against that. + local $CALLER = $CALLER; $c->init_meta( for_class => $CALLER ); $did_init_meta = 1; }