bump the Package::Stash dep
[gitmo/Class-MOP.git] / lib / Class / MOP / Mixin / HasMethods.pm
index d08d273..2fe0135 100644 (file)
@@ -82,10 +82,7 @@ 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);
 }
 
 sub _code_is_mine {
@@ -103,7 +100,10 @@ sub has_method {
     ( defined $method_name && length $method_name )
         || confess "You must define a method name";
 
-    return defined( $self->_get_maybe_raw_method($method_name) );
+    my $method = $self->_get_maybe_raw_method($method_name)
+        or return;
+
+    return defined($self->_method_map->{$method_name} = $method);
 }
 
 sub get_method {
@@ -128,15 +128,9 @@ sub _get_maybe_raw_method {
     my ( $self, $method_name ) = @_;
 
     my $map_entry = $self->_method_map->{$method_name};
-    return $map_entry if blessed $map_entry;
+    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);
@@ -152,8 +146,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;