X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FMoose%2FRole.pm;h=4eedae33e6f49328b37d2e42b44499b5959941f8;hb=87e636262bb48cefaaa4f30504deec928fd38513;hp=e27f1849dafa9d5d25410ee9c73f4c4e17bde6be;hpb=c7d8fe950098e91780355ed7a91f066e682eb4a3;p=gitmo%2FMoose.git diff --git a/lib/Moose/Role.pm b/lib/Moose/Role.pm index e27f184..4eedae3 100644 --- a/lib/Moose/Role.pm +++ b/lib/Moose/Role.pm @@ -5,12 +5,12 @@ use strict; use warnings; use Scalar::Util 'blessed'; -use Carp 'confess', 'croak'; +use Carp 'croak'; use Data::OptList; use Sub::Exporter; -our $VERSION = '0.55_02'; +our $VERSION = '0.57'; $VERSION = eval $VERSION; our $AUTHORITY = 'cpan:STEVAN'; @@ -123,8 +123,7 @@ sub init_meta { my %args = @_; my $role = $args{for_class} - or confess - "Cannot call init_meta without specifying a for_class"; + or Moose->throw_error("Cannot call init_meta without specifying a for_class"); my $metaclass = $args{metaclass} || "Moose::Meta::Role"; @@ -136,11 +135,17 @@ sub init_meta { if ($role->can('meta')) { $meta = $role->meta(); (blessed($meta) && $meta->isa('Moose::Meta::Role')) - || confess "You already have a &meta function, but it does not return a Moose::Meta::Role"; + || Moose->throw_error("You already have a &meta function, but it does not return a Moose::Meta::Role"); } else { $meta = $metaclass->initialize($role); - $meta->alias_method('meta' => sub { $meta }); + + $meta->add_method( + 'meta' => sub { + # re-initialize so it inherits properly + $metaclass->initialize( ref($_[0]) || $_[0] ); + } + ); } return $meta;