Only use subname on __ANON__ code refs
Yuval Kogman [Sat, 23 May 2009 21:13:00 +0000 (23:13 +0200)]
Changes
lib/Class/MOP/Class.pm

diff --git a/Changes b/Changes
index d1076d5..7dfafbc 100644 (file)
--- a/Changes
+++ b/Changes
@@ -14,6 +14,8 @@ Revision history for Perl extension Class-MOP.
     * Class::MOP::Class
       - Add direct_subclasses method (Sartak)
         - Tests for subclasses and direct_subclasses (Sartak)
+      - subname is no longer used unconditionally in add_method, but only if
+        the code reference's name is '__ANON__' (nothingmuch)
 
 0.84 Tue, May 12, 2009
     * Makefile.PL
index a331ea4..bdc2793 100644 (file)
@@ -619,10 +619,16 @@ sub add_method {
     # method. This is hackier, but quicker too.
     $self->{methods}{$method_name} = $method;
     
-    my $full_method_name = ($self->name . '::' . $method_name);    
+    my ( $current_package, $current_name ) = Class::MOP::get_code_info($body);
+
+    if ( $current_name eq '__ANON__' ) {
+        my $full_method_name = ($self->name . '::' . $method_name);
+        subname($full_method_name => $body);
+    }
+
     $self->add_package_symbol(
-        { sigil => '&', type => 'CODE', name => $method_name }, 
-        subname($full_method_name => $body)
+        { sigil => '&', type => 'CODE', name => $method_name },
+        $body,
     );
 }