use strict;
use warnings;
-use Scalar::Util 'blessed';
+use Mouse::Util qw/get_linear_isa blessed/;
use Carp 'confess';
-use MRO::Compat;
-
do {
my %METACLASS_CACHE;
@{ $self->{superclasses} };
}
+sub add_method {
+ my $self = shift;
+ my $name = shift;
+ my $code = shift;
+
+ my $pkg = $self->name;
+
+ no strict 'refs';
+ *{ $pkg . '::' . $name } = $code;
+}
+
+# copied from Class::Inspector
+sub get_method_list {
+ my $self = shift;
+ my $name = $self->name;
+
+ no strict 'refs';
+ # Get all the CODE symbol table entries
+ my @functions = grep !/^meta$/,
+ grep { /\A[^\W\d]\w*\z/o }
+ grep { defined &{"${name}::$_"} }
+ keys %{"${name}::"};
+ wantarray ? @functions : \@functions;
+}
+
sub add_attribute {
my $self = shift;
my $attr = shift;
sub has_attribute { exists $_[0]->{attributes}->{$_[1]} }
sub get_attribute { $_[0]->{attributes}->{$_[1]} }
-sub linearized_isa { @{ mro::get_linear_isa($_[0]->name) } }
+sub linearized_isa { @{ get_linear_isa($_[0]->name) } }
sub clone_object {
my $class = shift;
my ($class, $instance, %params) = @_;
(blessed($instance))
- || confess "You can only clone instances, \$self is not a blessed instance";
+ || confess "You can only clone instances, ($instance) is not a blessed instance";
my $clone = bless { %$instance }, ref $instance;
}
+sub make_immutable {}
+sub is_immutable { 0 }
+
+sub attribute_metaclass { "Mouse::Meta::Class" }
+
+sub add_before_method_modifier {
+ my ($self, $name, $code) = @_;
+ require Class::Method::Modifiers;
+ Class::Method::Modifiers::_install_modifier(
+ $self->name,
+ 'before',
+ $name,
+ $code,
+ );
+}
+
+sub add_around_method_modifier {
+ my ($self, $name, $code) = @_;
+ require Class::Method::Modifiers;
+ Class::Method::Modifiers::_install_modifier(
+ $self->name,
+ 'around',
+ $name,
+ $code,
+ );
+}
+
+sub add_after_method_modifier {
+ my ($self, $name, $code) = @_;
+ require Class::Method::Modifiers;
+ Class::Method::Modifiers::_install_modifier(
+ $self->name,
+ 'after',
+ $name,
+ $code,
+ );
+}
1;