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;
}
}
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
$self->_check_metaclass_compatibility();
$self->_superclasses_updated();
}
- @{$self->get_package_symbol($var_spec)};
+ @{$self->get_package_symbol('@ISA', create => 1)};
}
sub _superclasses_updated {
$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,