X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?p=gitmo%2FMouse.git;a=blobdiff_plain;f=lib%2FMouse%2FUtil.pm;fp=lib%2FMouse%2FUtil.pm;h=17d7efeaabc9a429f28b7ea161e886a0094298e5;hp=48cc6c6f13884c1013cbbbe9ddf97d409ec5d691;hb=31aa6299ca20515174f1b145e5b3d4dbd9e09a08;hpb=40762421972358b8f2b5a4489a00fea7de44bdf7 diff --git a/lib/Mouse/Util.pm b/lib/Mouse/Util.pm index 48cc6c6..17d7efe 100644 --- a/lib/Mouse/Util.pm +++ b/lib/Mouse/Util.pm @@ -169,7 +169,7 @@ sub find_meta{ return class_of( $_[0] ); } -sub does_role{ +sub _does_role_impl { my ($class_or_obj, $role_name) = @_; my $meta = class_of($class_or_obj); @@ -180,6 +180,16 @@ sub does_role{ return defined($meta) && $meta->does_role($role_name); } +sub does_role { + my($thing, $role_name) = @_; + + if( (Scalar::Util::blessed($thing) || is_class_loaded($thing)) + && $thing->can('does')) { + return $thing->does($role_name); + } + goto &_does_role_impl; +} + # taken from Mouse::Util (0.90) { my %cache; @@ -377,7 +387,7 @@ sub dump :method { # general does() method sub does :method { - goto &does_role; + goto &_does_role_impl; } 1;