convert the rest of the simple readers in cmop to xs
[gitmo/Class-MOP.git] / lib / Class / MOP / Mixin / HasMethods.pm
index e343d20..141bfa7 100644 (file)
@@ -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;