X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FMouse%2FMeta%2FRole.pm;h=4910f72bf737aa7244cdebfb97931869c016be96;hb=9c85e9dc1fea8af52dde98b81ad345eb44e79242;hp=f7ebd21a2d521e74e56a8009cd241e14e36f8ba3;hpb=6719984210754e8d012ae678536f194c35000823;p=gitmo%2FMouse.git diff --git a/lib/Mouse/Meta/Role.pm b/lib/Mouse/Meta/Role.pm index f7ebd21..4910f72 100644 --- a/lib/Mouse/Meta/Role.pm +++ b/lib/Mouse/Meta/Role.pm @@ -2,6 +2,7 @@ package Mouse::Meta::Role; use strict; use warnings; use Carp 'confess'; + use Mouse::Util qw(version authority identifier); do { @@ -64,12 +65,13 @@ sub get_method_list { no strict 'refs'; # Get all the CODE symbol table entries my @functions = - grep !/^(?:has|with|around|before|after|blessed|extends|confess|excludes|meta|requires)$/, + grep !/^(?:has|with|around|before|after|augment|inner|override|super|blessed|extends|confess|excludes|requires)$/, grep { defined &{"${name}::$_"} } keys %{"${name}::"}; wantarray ? @functions : \@functions; } +# Moose uses Application::ToInstance, Application::ToClass, Application::ToRole sub apply { my $self = shift; my $selfname = $self->name; @@ -77,6 +79,10 @@ sub apply { my $classname = $class->name; my %args = @_; + if ($class->isa('Mouse::Object')) { + Carp::croak('Mouse does not support Application::ToInstance yet'); + } + if ($class->isa('Mouse::Meta::Class')) { for my $name (@{$self->{required_methods}}) { unless ($classname->can($name)) { @@ -96,12 +102,12 @@ sub apply { # XXX what's Moose's behavior? #next; } else { - *$class_function = *$role_function; + *{$class_function} = \&{$role_function}; } if ($args{alias} && $args{alias}->{$name}) { my $dstname = $args{alias}->{$name}; unless ($classname->can($dstname)) { - *{"${classname}::${dstname}"} = *$role_function; + *{"${classname}::${dstname}"} = \&$role_function; } } } @@ -192,7 +198,7 @@ sub combine_apply { if ($args{alias} && $args{alias}->{$name}) { my $dstname = $args{alias}->{$name}; unless ($classname->can($dstname)) { - *{"${classname}::${dstname}"} = *$role_function; + *{"${classname}::${dstname}"} = \&$role_function; } } }