X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FMouse%2FMeta%2FClass.pm;h=eb0aadc60f3fe63257a642c7f54f098422dd0a7c;hb=047d7af00ab8b37c6369c032211bfe492fe6cd05;hp=77b5d75cd87a1246179b1c1eafa1c51db54ae319;hpb=06a970ab9fb60a4cac5e3f1774cf9a2914c94cc1;p=gitmo%2FMouse.git diff --git a/lib/Mouse/Meta/Class.pm b/lib/Mouse/Meta/Class.pm index 77b5d75..eb0aadc 100644 --- a/lib/Mouse/Meta/Class.pm +++ b/lib/Mouse/Meta/Class.pm @@ -17,9 +17,9 @@ sub destructor_class() { 'Mouse::Meta::Method::Destructor' } sub _construct_meta { my($class, %args) = @_; - $args{attributes} ||= {}; - $args{methods} ||= {}; - $args{roles} ||= []; + $args{attributes} = {}; + $args{methods} = {}; + $args{roles} = []; $args{superclasses} = do { no strict 'refs'; @@ -38,11 +38,16 @@ sub create_anon_class{ return $self->create(undef, @_); } -sub is_anon_class{ - return exists $_[0]->{anon_serial_id}; -} +sub is_anon_class; + +sub roles; -sub roles { $_[0]->{roles} } +sub calculate_all_roles { + my $self = shift; + my %seen; + return grep { !$seen{ $_->name }++ } + map { $_->calculate_all_roles } @{ $self->roles }; +} sub superclasses { my $self = shift; @@ -51,7 +56,7 @@ sub superclasses { foreach my $super(@_){ Mouse::Util::load_class($super); my $meta = Mouse::Util::get_metaclass_by_name($super); - if($meta && $meta->isa('Mouse::Meta::Role')){ + if(Mouse::Util::is_a_metarole($meta)){ $self->throw_error("You cannot inherit from a Mouse Role ($super)"); } } @@ -149,24 +154,7 @@ sub compute_all_applicable_attributes { return shift->get_all_attributes(@_) } -sub get_all_attributes { - my $self = shift; - my (@attr, %seen); - - for my $class ($self->linearized_isa) { - my $meta = Mouse::Util::get_metaclass_by_name($class) - or next; - - for my $name ($meta->get_attribute_list) { - next if $seen{$name}++; - push @attr, $meta->get_attribute($name); - } - } - - return @attr; -} - -sub linearized_isa { @{ get_linear_isa($_[0]->name) } } +sub linearized_isa; sub new_object { my $self = shift; @@ -474,7 +462,7 @@ Mouse::Meta::Class - The Mouse class metaclass =head1 VERSION -This document describes Mouse version 0.38 +This document describes Mouse version 0.40_05 =head1 METHODS