X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FClass%2FMOP%2FMixin%2FHasMethods.pm;h=141bfa71143053dc4e34edb1877d5fd623f40a09;hb=53362bcb1b32d87630190fbf50679dc37bb51adf;hp=e343d2099182b46235d05b30b6671a89a2263fde;hpb=5018df3eea5b6b41aa78a0d999903887c2873eca;p=gitmo%2FClass-MOP.git diff --git a/lib/Class/MOP/Mixin/HasMethods.pm b/lib/Class/MOP/Mixin/HasMethods.pm index e343d20..141bfa7 100644 --- a/lib/Class/MOP/Mixin/HasMethods.pm +++ b/lib/Class/MOP/Mixin/HasMethods.pm @@ -15,8 +15,6 @@ use Sub::Name 'subname'; use base 'Class::MOP::Mixin'; -sub method_metaclass { $_[0]->{'method_metaclass'} } -sub wrapped_method_metaclass { $_[0]->{'wrapped_method_metaclass'} } sub _meta_method_class { 'Class::MOP::Method::Meta' } sub _add_meta_method { @@ -82,10 +80,11 @@ sub add_method { subname( $full_method_name => $body ); } - $self->add_package_symbol( - { sigil => '&', type => 'CODE', name => $method_name }, - $body, - ); + $self->add_package_symbol("&$method_name", $body); + + # if we added the actual method object to the method map, we're still valid + $self->update_package_cache_flag + if blessed($method); } sub _code_is_mine { @@ -133,13 +132,7 @@ sub _get_maybe_raw_method { my $map_entry = $self->_method_map->{$method_name}; return $map_entry if defined $map_entry; - my $code = $self->get_package_symbol( - { - name => $method_name, - sigil => '&', - type => 'CODE', - } - ); + my $code = $self->get_package_symbol("&$method_name"); unless ($map_entry) { return unless $code && $self->_code_is_mine($code); @@ -155,8 +148,7 @@ sub remove_method { my $removed_method = delete $self->_method_map->{$method_name}; - $self->remove_package_symbol( - { sigil => '&', type => 'CODE', name => $method_name } ); + $self->remove_package_symbol("&$method_name"); $removed_method->detach_from_class if $removed_method && blessed $removed_method;