my $self = shift;
# this is always okay ...
- return if blessed($self) eq 'Class::MOP::Class';
+ return if blessed($self) eq 'Class::MOP::Class' &&
+ $self->instance_metaclass eq 'Class::MOP::Instance';
my @class_list = $self->class_precedence_list;
shift @class_list; # shift off $self->name
" is not compatible with the " .
$class_name . "->meta => (" . ($meta->instance_metaclass) . ")";
}
- }
+ }
}
sub create {
if (@_) {
my @supers = @_;
@{$self->name . '::ISA'} = @supers;
+ # NOTE:
+ # we need to check the metaclass
+ # compatability here so that we can
+ # be sure that the superclass is
+ # not potentially creating an issues
+ # we don't know about
+ $self->check_metaclass_compatability();
}
@{$self->name . '::ISA'};
}
sub get_method_list {
my $self = shift;
no strict 'refs';
- grep { $self->has_method($_) } %{$self->name . '::'};
+ grep { $self->has_method($_) } keys %{$self->name . '::'};
}
sub compute_all_applicable_methods {