Refactor XS symbol manipulators
[gitmo/Class-MOP.git] / lib / Class / MOP / Class.pm
index 3a965c3..fbceff6 100644 (file)
@@ -264,13 +264,19 @@ sub _check_metaclass_compatibility {
         my $current_meta = Class::MOP::get_metaclass_by_name($name);
         return if $current_meta ne $self;
 
+        if(my $isa_ref = $self->get_package_symbol('@ISA')){
+            @{$isa_ref} = ();
+        }
+
+        %{ $self->namespace } = ();
+
         my ($serial_id) = ($name =~ /^$ANON_CLASS_PREFIX(\d+)/o);
-        no strict 'refs';
-        @{$name . '::ISA'} = ();
-        %{$name . '::'}    = ();
-        delete ${$ANON_CLASS_PREFIX}{$serial_id . '::'};
 
         Class::MOP::remove_metaclass_by_name($name);
+
+        no strict 'refs';
+        delete ${$ANON_CLASS_PREFIX}{$serial_id . '::'};
+        return;
     }
 
 }
@@ -508,10 +514,9 @@ sub rebless_instance_away {
 
 sub superclasses {
     my $self     = shift;
-    my $var_spec = { sigil => '@', type => 'ARRAY', name => 'ISA' };
     if (@_) {
         my @supers = @_;
-        @{$self->get_package_symbol($var_spec)} = @supers;
+        @{$self->get_package_symbol('@ISA', create => 1)} = @supers;
 
         # NOTE:
         # on 5.8 and below, we need to call
@@ -530,7 +535,7 @@ sub superclasses {
         $self->_check_metaclass_compatibility();
         $self->_superclasses_updated();
     }
-    @{$self->get_package_symbol($var_spec)};
+    @{$self->get_package_symbol('@ISA', create => 1)};
 }
 
 sub _superclasses_updated {
@@ -632,14 +637,6 @@ sub add_method {
         $body = $method;
     }
 
-
-    my ( $current_package, $current_name ) = Class::MOP::get_code_info($body);
-
-    if ( !defined $current_name || $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 },
         $body,