micro optimization
[gitmo/Mouse.git] / lib / Mouse / Meta / Class.pm
index 67d012e..3f9c54c 100644 (file)
@@ -4,6 +4,7 @@ use strict;
 use warnings;
 
 use Mouse::Meta::Method::Constructor;
+use Mouse::Meta::Method::Destructor;
 use Mouse::Util qw/get_linear_isa blessed/;
 use Carp 'confess';
 
@@ -36,6 +37,7 @@ sub new {
         no strict 'refs';
         \@{ $args{name} . '::ISA' };
     };
+    $args{roles} ||= [];
 
     bless \%args, $class;
 }
@@ -143,7 +145,8 @@ sub make_immutable {
     my $name = $self->name;
     $self->{is_immutable}++;
     no strict 'refs';
-    *{"$name\::new"} = Mouse::Meta::Method::Constructor->generate_constructor_method_inline( $self );
+    *{"$name\::new"}     = Mouse::Meta::Method::Constructor->generate_constructor_method_inline( $self );
+    *{"$name\::DESTROY"} = Mouse::Meta::Method::Destructor->generate_destructor_method_inline( $self );
 }
 sub make_mutable {
     Carp::croak "Mouse::Meta::Class->make_mutable does not supported by Mouse";
@@ -185,6 +188,18 @@ sub add_after_method_modifier {
     );
 }
 
+sub roles { $_[0]->{roles} }
+
+sub does_role {
+    my ($self, $role_name) = @_;
+    (defined $role_name)
+        || confess "You must supply a role name to look for";
+    for my $role (@{ $self->{roles} }) {
+        return 1 if $role->name eq $role_name;
+    }
+    return 0;
+}
+
 1;
 
 __END__