X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FMoose%2FMeta%2FClass.pm;h=b849e42b477639a8d5e3e369e73e634ed32877ff;hb=4bcbbb57ec37a9eeff3d7207fad57645d7254560;hp=d591d21cbc256e4a876e1a00e6a3deb69fa41aa9;hpb=5ef36adde3d619733607b9f5f1136524a00848df;p=gitmo%2FMoose.git diff --git a/lib/Moose/Meta/Class.pm b/lib/Moose/Meta/Class.pm index d591d21..b849e42 100644 --- a/lib/Moose/Meta/Class.pm +++ b/lib/Moose/Meta/Class.pm @@ -11,7 +11,7 @@ use List::Util qw( first ); use List::MoreUtils qw( any all uniq first_index ); use Scalar::Util 'weaken', 'blessed'; -our $VERSION = '0.85'; +our $VERSION = '0.89_01'; $VERSION = eval $VERSION; our $AUTHORITY = 'cpan:STEVAN'; @@ -140,6 +140,26 @@ sub add_role { push @{$self->roles} => $role; } +sub make_immutable { + my $self = shift; + + # we do this for metaclasses way too often to do this check for them + if ( !$self->name->isa('Class::MOP::Object') ) { + my @superclasses = grep { $_ ne 'Moose::Object' && $_ ne $self->name } + $self->linearized_isa; + for my $superclass (@superclasses) { + my $meta = Class::MOP::class_of($superclass); + next unless $meta && $meta->isa('Moose::Meta::Class'); + next unless $meta->is_mutable; + Carp::cluck( "Calling make_immutable on " + . $self->name + . ", which has a mutable ancestor ($superclass)" ); + last; + } + } + $self->SUPER::make_immutable(@_); +} + sub role_applications { my ($self) = @_; @@ -233,7 +253,7 @@ sub superclasses { foreach my $super (@supers) { Class::MOP::load_class($super); my $meta = Class::MOP::class_of($super); - Moose->throw_error("You cannot inherit from a Moose Role ($super)") + $self->throw_error("You cannot inherit from a Moose Role ($super)") if $meta && $meta->isa('Moose::Meta::Role') } return $self->SUPER::superclasses(@supers); @@ -673,7 +693,7 @@ These all default to the appropriate Moose class. This overrides the parent's method in order to accept a C option. This should be an array reference containing one more roles -that the class does. +that the class does, each optionally followed by a hashref of options. my $metaclass = Moose::Meta::Class->create( 'New::Class', roles => [...] );