X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?p=gitmo%2FMouse.git;a=blobdiff_plain;f=lib%2FMouse%2FMeta%2FClass.pm;h=fbb4bb9b25adf035af7ceb5d126cdf2c1079f55b;hp=afe92940c085a385a7861c6cd2aecb6796889a8d;hb=f91c9c099c234823ea992198c845e5bb066fdc7a;hpb=fa9a3caafde48555c4711bcc7dee544396281600 diff --git a/lib/Mouse/Meta/Class.pm b/lib/Mouse/Meta/Class.pm index afe9294..fbb4bb9 100644 --- a/lib/Mouse/Meta/Class.pm +++ b/lib/Mouse/Meta/Class.pm @@ -69,18 +69,31 @@ sub add_method { } # copied from Class::Inspector -sub get_method_list { +my $get_methods_for_class = sub { my $self = shift; - my $name = $self->name; + my $name = shift; no strict 'refs'; # Get all the CODE symbol table entries my @functions = - grep !/^(?:has|with|around|before|after|blessed|extends|confess)$/, + grep !/^(?:has|with|around|before|after|blessed|extends|confess|override|super)$/, grep { defined &{"${name}::$_"} } keys %{"${name}::"}; - push @functions, keys %{$self->{'methods'}->{$name}}; + push @functions, keys %{$self->{'methods'}->{$name}} if $self; wantarray ? @functions : \@functions; +}; + +sub get_method_list { + my $self = shift; + $get_methods_for_class->($self, $self->name); +} + +sub get_all_method_names { + my $self = shift; + my %uniq; + return grep { $uniq{$_}++ == 0 } + map { $get_methods_for_class->(undef, $_) } + $self->linearized_isa; } sub add_attribute { @@ -145,10 +158,18 @@ sub clone_instance { sub make_immutable { my $self = shift; - my %args = @_; + my %args = ( + inline_constructor => 1, + @_, + ); + my $name = $self->name; $self->{is_immutable}++; - $self->add_method('new' => Mouse::Meta::Method::Constructor->generate_constructor_method_inline( $self )); + + if ($args{inline_constructor}) { + $self->add_method('new' => Mouse::Meta::Method::Constructor->generate_constructor_method_inline( $self )); + } + if ($args{inline_destructor}) { $self->add_method('DESTROY' => Mouse::Meta::Method::Destructor->generate_destructor_method_inline( $self )); }