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);
-
- Class::MOP::remove_metaclass_by_name($name);
-
no strict 'refs';
+ @{$name . '::ISA'} = ();
+ %{$name . '::'} = ();
delete ${$ANON_CLASS_PREFIX}{$serial_id . '::'};
- return;
+
+ Class::MOP::remove_metaclass_by_name($name);
}
}
sub superclasses {
my $self = shift;
+ my $var_spec = { sigil => '@', type => 'ARRAY', name => 'ISA' };
if (@_) {
my @supers = @_;
- @{$self->get_package_symbol('@ISA', create => 1)} = @supers;
+ @{$self->get_package_symbol($var_spec)} = @supers;
# NOTE:
# on 5.8 and below, we need to call
$self->_check_metaclass_compatibility();
$self->_superclasses_updated();
}
- @{$self->get_package_symbol('@ISA', create => 1)};
+ @{$self->get_package_symbol($var_spec)};
}
sub _superclasses_updated {