← Index
NYTProf Performance Profile   « line view »
For fastest.pl
  Run on Fri Jan 31 20:48:16 2014
Reported on Fri Jan 31 20:49:40 2014

Filename/opt/perl-5.18.1/lib/site_perl/5.18.1/darwin-thread-multi-2level/Mouse/Meta/Role.pm
StatementsExecuted 6 statements in 885µs
Subroutines
Calls P F Exclusive
Time
Inclusive
Time
Subroutine
11115µs65µsMouse::Meta::Role::::BEGIN@2Mouse::Meta::Role::BEGIN@2
1115µs5µsMouse::Meta::Role::::BEGIN@4Mouse::Meta::Role::BEGIN@4
0000s0sMouse::Meta::Role::::_construct_metaMouse::Meta::Role::_construct_meta
0000s0sMouse::Meta::Role::::add_attributeMouse::Meta::Role::add_attribute
0000s0sMouse::Meta::Role::::add_override_method_modifierMouse::Meta::Role::add_override_method_modifier
0000s0sMouse::Meta::Role::::add_required_methodsMouse::Meta::Role::add_required_methods
0000s0sMouse::Meta::Role::::applyMouse::Meta::Role::apply
0000s0sMouse::Meta::Role::::calculate_all_rolesMouse::Meta::Role::calculate_all_roles
0000s0sMouse::Meta::Role::::combineMouse::Meta::Role::combine
0000s0sMouse::Meta::Role::::create_anon_roleMouse::Meta::Role::create_anon_role
0000s0sMouse::Meta::Role::::does_roleMouse::Meta::Role::does_role
0000s0sMouse::Meta::Role::::get_override_method_modifierMouse::Meta::Role::get_override_method_modifier
0000s0sMouse::Meta::Role::::get_required_method_listMouse::Meta::Role::get_required_method_list
0000s0sMouse::Meta::Role::::requires_methodMouse::Meta::Role::requires_method
Call graph for these subroutines as a Graphviz dot language file.
Line State
ments
Time
on line
Calls Time
in subs
Code
1package Mouse::Meta::Role;
2236µs2114µs
# spent 65µs (15+50) within Mouse::Meta::Role::BEGIN@2 which was called: # once (15µs+50µs) by Mouse::BEGIN@15 at line 2
use Mouse::Util qw(:meta); # enables strict and warnings
# spent 65µs making 1 call to Mouse::Meta::Role::BEGIN@2 # spent 50µs making 1 call to Mouse::Exporter::do_import
3
42838µs15µs
# spent 5µs within Mouse::Meta::Role::BEGIN@4 which was called: # once (5µs+0s) by Mouse::BEGIN@15 at line 4
use Mouse::Meta::Module;
# spent 5µs making 1 call to Mouse::Meta::Role::BEGIN@4
517µsour @ISA = qw(Mouse::Meta::Module);
6
7sub method_metaclass;
8
9sub _construct_meta {
10 my $class = shift;
11
12 my %args = @_;
13
14 $args{methods} = {};
15 $args{attributes} = {};
16 $args{required_methods} = [];
17 $args{roles} = [];
18
19 my $self = bless \%args, ref($class) || $class;
20 if($class ne __PACKAGE__){
21 $self->meta->_initialize_object($self, \%args);
22 }
23 return $self;
24}
25
26sub create_anon_role{
27 my $self = shift;
28 return $self->create(undef, @_);
29}
30
31sub is_anon_role;
32
33sub get_roles;
34
35sub calculate_all_roles {
36 my $self = shift;
37 my %seen;
38 return grep { !$seen{ $_->name }++ }
39 ($self, map { $_->calculate_all_roles } @{ $self->get_roles });
40}
41
42sub get_required_method_list{
43 return @{ $_[0]->{required_methods} };
44}
45
46sub add_required_methods {
47 my($self, @methods) = @_;
48 my %required = map{ $_ => 1 } @{$self->{required_methods}};
49 push @{$self->{required_methods}}, grep{ !$required{$_}++ && !$self->has_method($_) } @methods;
50 return;
51}
52
53sub requires_method {
54 my($self, $name) = @_;
55 return scalar( grep{ $_ eq $name } @{ $self->{required_methods} } ) != 0;
56}
57
58sub add_attribute {
59 my $self = shift;
60 my $name = shift;
61
62 $self->{attributes}->{$name} = (@_ == 1) ? $_[0] : { @_ };
63 return;
64}
65
66sub apply {
67 my $self = shift;
68 my $consumer = shift;
69
70 require 'Mouse/Meta/Role/Application.pm';
71 return Mouse::Meta::Role::Application->new(@_)->apply($self, $consumer);
72}
73
74sub combine {
75 my($self, @role_specs) = @_;
76
77 require 'Mouse/Meta/Role/Composite.pm';
78 return Mouse::Meta::Role::Composite->new(roles => \@role_specs);
79}
80
81sub add_before_method_modifier;
82sub add_around_method_modifier;
83sub add_after_method_modifier;
84
85sub get_before_method_modifiers;
86sub get_around_method_modifiers;
87sub get_after_method_modifiers;
88
89sub add_override_method_modifier{
90 my($self, $method_name, $method) = @_;
91
92 if($self->has_method($method_name)){
93 # This error happens in the override keyword or during role composition,
94 # so I added a message, "A local method of ...", only for compatibility (gfx)
95 $self->throw_error("Cannot add an override of method '$method_name' "
96 . "because there is a local version of '$method_name'"
97 . "(A local method of the same name as been found)");
98 }
99
100 $self->{override_method_modifiers}->{$method_name} = $method;
101}
102
103sub get_override_method_modifier {
104 my ($self, $method_name) = @_;
105 return $self->{override_method_modifiers}->{$method_name};
106}
107
108sub does_role {
109 my ($self, $role_name) = @_;
110
111 (defined $role_name)
112 || $self->throw_error("You must supply a role name to look for");
113
114 $role_name = $role_name->name if ref $role_name;
115
116 # if we are it,.. then return true
117 return 1 if $role_name eq $self->name;
118 # otherwise.. check our children
119 for my $role (@{ $self->get_roles }) {
120 return 1 if $role->does_role($role_name);
121 }
122 return 0;
123}
124
12514µs1;
126__END__