X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FMouse%2FMeta%2FModule.pm;h=d6ce931a3e5cd27e5be5b5c70325cb2938a380ea;hb=999072aba606906b12c2f18e0ebde72e224de4dc;hp=d7439d84f7e39d1313c677f08f7ff94c3e1811cd;hpb=145d67894adb93b4aa067e88b914fc83a5a3533c;p=gitmo%2FMouse.git diff --git a/lib/Mouse/Meta/Module.pm b/lib/Mouse/Meta/Module.pm index d7439d8..d6ce931 100644 --- a/lib/Mouse/Meta/Module.pm +++ b/lib/Mouse/Meta/Module.pm @@ -79,44 +79,40 @@ sub remove_attribute { delete $_[0]->{attributes}->{$_[1]} } sub get_attribute_list{ keys %{$_[0]->{attributes}} } -# XXX: for backward compatibility +# XXX: not completely compatible with Moose my %foreign = map{ $_ => undef } qw( Mouse Mouse::Role Mouse::Util Mouse::Util::TypeConstraints Carp Scalar::Util List::Util ); -sub _code_is_mine{ -# my($self, $code) = @_; - - return !exists $foreign{ Mouse::Util::get_code_package($_[1]) }; +sub _get_method_body { + my($self, $method_name) = @_; + my $code = Mouse::Util::get_code_ref($self->{package}, $method_name); + return $code && !exists $foreign{ Mouse::Util::get_code_package($code) } + ? $code + : undef; } sub add_method; sub has_method { my($self, $method_name) = @_; - defined($method_name) or $self->throw_error('You must define a method name'); - return defined($self->{methods}{$method_name}) || do{ - my $code = Mouse::Util::get_code_ref($self->{package}, $method_name); - $code && $self->_code_is_mine($code); - }; + return defined( $self->{methods}{$method_name} ) + || defined( $self->_get_method_body($method_name) ); } sub get_method_body { my($self, $method_name) = @_; - defined($method_name) or $self->throw_error('You must define a method name'); - return $self->{methods}{$method_name} ||= do{ - my $code = Mouse::Util::get_code_ref($self->{package}, $method_name); - $code && $self->_code_is_mine($code) ? $code : undef; - }; + return $self->{methods}{$method_name} + ||= $self->_get_method_body($method_name); } -sub get_method{ +sub get_method { my($self, $method_name) = @_; if(my $code = $self->get_method_body($method_name)){ @@ -232,7 +228,7 @@ sub create { my $meta = $self->initialize( $package_name, %options); - Scalar::Util::weaken $METAS{$package_name} + Scalar::Util::weaken($METAS{$package_name}) if $mortal; $meta->add_method(meta => sub { @@ -319,7 +315,7 @@ Mouse::Meta::Module - The common base class of Mouse::Meta::Class and Mouse::Met =head1 VERSION -This document describes Mouse version 0.74 +This document describes Mouse version 0.82 =head1 DESCRIPTION