latest moose inlining destructor by default
[gitmo/Mouse.git] / lib / Mouse / Meta / Class.pm
index 9e6ef57..4761e5d 100644 (file)
@@ -4,7 +4,7 @@ use warnings;
 
 use Mouse::Meta::Method::Constructor;
 use Mouse::Meta::Method::Destructor;
-use Scalar::Util qw/blessed/;
+use Scalar::Util qw/blessed weaken/;
 use Mouse::Util qw/get_linear_isa version authority identifier/;
 use Carp 'confess';
 
@@ -27,6 +27,17 @@ do {
             if !exists($METACLASS_CACHE{$name});
         return $METACLASS_CACHE{$name};
     }
+
+    # Means of accessing all the metaclasses that have
+    # been initialized thus far
+    sub get_all_metaclasses         {        %METACLASS_CACHE         }
+    sub get_all_metaclass_instances { values %METACLASS_CACHE         }
+    sub get_all_metaclass_names     { keys   %METACLASS_CACHE         }
+    sub get_metaclass_by_name       { $METACLASS_CACHE{$_[0]}         }
+    sub store_metaclass_by_name     { $METACLASS_CACHE{$_[0]} = $_[1] }
+    sub weaken_metaclass            { weaken($METACLASS_CACHE{$_[0]}) }
+    sub does_metaclass_exist        { exists $METACLASS_CACHE{$_[0]} && defined $METACLASS_CACHE{$_[0]} }
+    sub remove_metaclass_by_name    { $METACLASS_CACHE{$_[0]} = undef }
 };
 
 sub new {
@@ -136,7 +147,8 @@ sub add_attribute {
     }
 }
 
-sub compute_all_applicable_attributes {
+sub compute_all_applicable_attributes { shift->get_all_attributes(@_) }
+sub get_all_attributes {
     my $self = shift;
     my (@attr, %seen);
 
@@ -181,7 +193,7 @@ sub clone_instance {
 
     my $clone = bless { %$instance }, ref $instance;
 
-    foreach my $attr ($class->compute_all_applicable_attributes()) {
+    foreach my $attr ($class->get_all_attributes()) {
         if ( defined( my $init_arg = $attr->init_arg ) ) {
             if (exists $params{$init_arg}) {
                 $clone->{ $attr->name } = $params{$init_arg};
@@ -197,6 +209,7 @@ sub make_immutable {
     my $self = shift;
     my %args = (
         inline_constructor => 1,
+        inline_destructor  => 1,
         @_,
     );
 
@@ -297,7 +310,7 @@ sub does_role {
 
     for my $class ($self->linearized_isa) {
         next unless $class->can('meta') and $class->meta->can('roles');
-        for my $role (@{ $self->roles }) {
+        for my $role (@{ $class->meta->roles }) {
             return 1 if $role->name eq $role_name;
         }
     }
@@ -412,7 +425,7 @@ Gets (or sets) the list of superclasses of the owner class.
 Begins keeping track of the existing L<Mouse::Meta::Attribute> for the owner
 class.
 
-=head2 compute_all_applicable_attributes -> (Mouse::Meta::Attribute)
+=head2 get_all_attributes -> (Mouse::Meta::Attribute)
 
 Returns the list of all L<Mouse::Meta::Attribute> instances associated with
 this class and its superclasses.
@@ -426,7 +439,7 @@ L<Mouse::Meta::Attribute> objects.
 
 This returns a list of attribute names which are defined in the local
 class. If you want a list of all applicable attributes for a class,
-use the C<compute_all_applicable_attributes> method.
+use the C<get_all_attributes> method.
 
 =head2 has_attribute Name -> Bool
 
@@ -447,7 +460,8 @@ metaclass.
 
 =head2 clone_instance Instance, Parameters -> Instance
 
-Clones the given C<Instance> and sets any additional parameters.
+The clone_instance method has been made private.
+The public version is deprecated.
 
 =cut