Filename | /Users/dde/perl5/perlbrew/perls/5.18.0t/lib/site_perl/5.18.0/darwin-thread-multi-2level/Moose/Meta/Attribute/Native/Trait.pm |
Statements | Executed 861 statements in 2.74ms |
Calls | P | F | Exclusive Time |
Inclusive Time |
Subroutine |
---|---|---|---|---|---|
52 | 2 | 1 | 655µs | 151ms | _native_accessor_class_for | Moose::Meta::Attribute::Native::Trait::
4 | 1 | 1 | 215µs | 149ms | _check_handles_values | Moose::Meta::Attribute::Native::Trait::
52 | 1 | 1 | 81µs | 81µs | _canonicalize_handles_value | Moose::Meta::Attribute::Native::Trait::
26 | 1 | 1 | 64µs | 84µs | _root_types | Moose::Meta::Attribute::Native::Trait::
4 | 1 | 1 | 56µs | 1.76ms | _check_helper_type | Moose::Meta::Attribute::Native::Trait::
4 | 1 | 1 | 54µs | 249µs | _build_native_type | Moose::Meta::Attribute::Native::Trait::
4 | 1 | 1 | 11µs | 11µs | CORE:match (opcode) | Moose::Meta::Attribute::Native::Trait::
1 | 1 | 1 | 9µs | 9µs | BEGIN@3 | Moose::Meta::Attribute::Native::Trait::
1 | 1 | 1 | 8µs | 14µs | BEGIN@13 | Moose::Meta::Attribute::Native::Trait::
1 | 1 | 1 | 8µs | 1.31ms | BEGIN@15 | Moose::Meta::Attribute::Native::Trait::
1 | 1 | 1 | 8µs | 30µs | BEGIN@11 | Moose::Meta::Attribute::Native::Trait::
1 | 1 | 1 | 8µs | 30µs | BEGIN@12 | Moose::Meta::Attribute::Native::Trait::
1 | 1 | 1 | 8µs | 76µs | BEGIN@230 | Moose::Meta::Attribute::Native::Trait::
1 | 1 | 1 | 7µs | 76µs | BEGIN@231 | Moose::Meta::Attribute::Native::Trait::
1 | 1 | 1 | 7µs | 89µs | BEGIN@14 | Moose::Meta::Attribute::Native::Trait::
1 | 1 | 1 | 7µs | 1.82ms | BEGIN@9 | Moose::Meta::Attribute::Native::Trait::
0 | 0 | 0 | 0s | 0s | __ANON__[:122] | Moose::Meta::Attribute::Native::Trait::
0 | 0 | 0 | 0s | 0s | __ANON__[:155] | Moose::Meta::Attribute::Native::Trait::
0 | 0 | 0 | 0s | 0s | __ANON__[:190] | Moose::Meta::Attribute::Native::Trait::
0 | 0 | 0 | 0s | 0s | __ANON__[:30] | Moose::Meta::Attribute::Native::Trait::
0 | 0 | 0 | 0s | 0s | __ANON__[:41] | Moose::Meta::Attribute::Native::Trait::
0 | 0 | 0 | 0s | 0s | __ANON__[:55] | Moose::Meta::Attribute::Native::Trait::
0 | 0 | 0 | 0s | 0s | __ANON__[:84] | Moose::Meta::Attribute::Native::Trait::
0 | 0 | 0 | 0s | 0s | __ANON__[:87] | Moose::Meta::Attribute::Native::Trait::
Line | State ments |
Time on line |
Calls | Time in subs |
Code |
---|---|---|---|---|---|
1 | |||||
2 | package Moose::Meta::Attribute::Native::Trait; | ||||
3 | # spent 9µs within Moose::Meta::Attribute::Native::Trait::BEGIN@3 which was called:
# once (9µs+0s) by Module::Runtime::require_module at line 5 | ||||
4 | 1 | 4µs | $Moose::Meta::Attribute::Native::Trait::AUTHORITY = 'cpan:STEVAN'; | ||
5 | 1 | 28µs | 1 | 9µs | } # spent 9µs making 1 call to Moose::Meta::Attribute::Native::Trait::BEGIN@3 |
6 | { | ||||
7 | 2 | 700ns | $Moose::Meta::Attribute::Native::Trait::VERSION = '2.1005'; | ||
8 | } | ||||
9 | 2 | 33µs | 2 | 3.63ms | # spent 1.82ms (7µs+1.81) within Moose::Meta::Attribute::Native::Trait::BEGIN@9 which was called:
# once (7µs+1.81ms) by Module::Runtime::require_module at line 9 # spent 1.82ms making 1 call to Moose::Meta::Attribute::Native::Trait::BEGIN@9
# spent 1.81ms making 1 call to Moose::Exporter::__ANON__[Moose/Exporter.pm:519] |
10 | |||||
11 | 2 | 27µs | 2 | 53µs | # spent 30µs (8+22) within Moose::Meta::Attribute::Native::Trait::BEGIN@11 which was called:
# once (8µs+22µs) by Module::Runtime::require_module at line 11 # spent 30µs making 1 call to Moose::Meta::Attribute::Native::Trait::BEGIN@11
# spent 22µs making 1 call to Exporter::import |
12 | 2 | 23µs | 2 | 52µs | # spent 30µs (8+22) within Moose::Meta::Attribute::Native::Trait::BEGIN@12 which was called:
# once (8µs+22µs) by Module::Runtime::require_module at line 12 # spent 30µs making 1 call to Moose::Meta::Attribute::Native::Trait::BEGIN@12
# spent 22µs making 1 call to Exporter::import |
13 | 2 | 25µs | 2 | 19µs | # spent 14µs (8+5) within Moose::Meta::Attribute::Native::Trait::BEGIN@13 which was called:
# once (8µs+5µs) by Module::Runtime::require_module at line 13 # spent 14µs making 1 call to Moose::Meta::Attribute::Native::Trait::BEGIN@13
# spent 5µs making 1 call to Package::DeprecationManager::__ANON__[Package/DeprecationManager.pm:61] |
14 | 2 | 24µs | 2 | 171µs | # spent 89µs (7+82) within Moose::Meta::Attribute::Native::Trait::BEGIN@14 which was called:
# once (7µs+82µs) by Module::Runtime::require_module at line 14 # spent 89µs making 1 call to Moose::Meta::Attribute::Native::Trait::BEGIN@14
# spent 82µs making 1 call to Sub::Exporter::__ANON__[Sub/Exporter.pm:337] |
15 | 2 | 924µs | 2 | 2.61ms | # spent 1.31ms (8µs+1.30) within Moose::Meta::Attribute::Native::Trait::BEGIN@15 which was called:
# once (8µs+1.30ms) by Module::Runtime::require_module at line 15 # spent 1.31ms making 1 call to Moose::Meta::Attribute::Native::Trait::BEGIN@15
# spent 1.30ms making 1 call to Moose::Exporter::__ANON__[Moose/Exporter.pm:519] |
16 | |||||
17 | 1 | 1µs | 1 | 47µs | requires '_helper_type'; # spent 47µs making 1 call to Moose::Role::requires |
18 | |||||
19 | 1 | 1µs | 1 | 85µs | has _used_default_is => ( # spent 85µs making 1 call to Moose::Role::has |
20 | is => 'rw', | ||||
21 | isa => 'Bool', | ||||
22 | default => 0, | ||||
23 | ); | ||||
24 | |||||
25 | before '_process_options' => sub { | ||||
26 | 4 | 2µs | my ( $self, $name, $options ) = @_; | ||
27 | |||||
28 | 4 | 5µs | 4 | 1.76ms | $self->_check_helper_type( $options, $name ); # spent 1.76ms making 4 calls to Moose::Meta::Attribute::Native::Trait::_check_helper_type, avg 440µs/call |
29 | |||||
30 | 17 | 70µs | 7 | 25µs | if ( !( any { exists $options->{$_} } qw( is reader writer accessor ) ) # spent 15µs making 4 calls to List::MoreUtils::any, avg 4µs/call
# spent 10µs making 3 calls to UNIVERSAL::can, avg 3µs/call |
31 | && $self->can('_default_is') ) { | ||||
32 | |||||
33 | $options->{is} = $self->_default_is; | ||||
34 | |||||
35 | $options->{_used_default_is} = 1; | ||||
36 | } | ||||
37 | |||||
38 | 4 | 11µs | 4 | 7µs | if ( # spent 7µs making 4 calls to List::MoreUtils::any, avg 2µs/call |
39 | !( | ||||
40 | $options->{required} | ||||
41 | 4 | 23µs | || any { exists $options->{$_} } qw( default builder lazy_build ) | ||
42 | ) | ||||
43 | && $self->can('_default_default') | ||||
44 | ) { | ||||
45 | |||||
46 | $options->{default} = $self->_default_default; | ||||
47 | |||||
48 | Moose::Deprecated::deprecated( | ||||
49 | feature => 'default default for Native Trait', | ||||
50 | message => | ||||
51 | 'Allowing a native trait to automatically supply a default is deprecated.' | ||||
52 | . ' You can avoid this warning by supplying a default, builder, or making the attribute required' | ||||
53 | ); | ||||
54 | } | ||||
55 | 1 | 4µs | 1 | 52µs | }; # spent 52µs making 1 call to Moose::Role::before |
56 | |||||
57 | after 'install_accessors' => sub { | ||||
58 | 4 | 900ns | my $self = shift; | ||
59 | |||||
60 | 4 | 13µs | 4 | 8µs | return unless $self->_used_default_is; # spent 8µs making 4 calls to Moose::Meta::Class::__ANON__::SERIAL::1::_used_default_is, avg 2µs/call |
61 | |||||
62 | my @methods | ||||
63 | = $self->_default_is eq 'rw' | ||||
64 | ? qw( reader writer accessor ) | ||||
65 | : 'reader'; | ||||
66 | |||||
67 | my $name = $self->name; | ||||
68 | my $class = $self->associated_class->name; | ||||
69 | |||||
70 | for my $meth ( uniq grep {defined} map { $self->$_ } @methods ) { | ||||
71 | |||||
72 | my $message | ||||
73 | = "The $meth method in the $class class was automatically created" | ||||
74 | . " by the native delegation trait for the $name attribute." | ||||
75 | . q{ This "default is" feature is deprecated.} | ||||
76 | . q{ Explicitly set "is" or define accessor names to avoid this}; | ||||
77 | |||||
78 | $self->associated_class->add_before_method_modifier( | ||||
79 | $meth => sub { | ||||
80 | Moose::Deprecated::deprecated( | ||||
81 | feature => 'default is for Native Trait', | ||||
82 | message =>$message, | ||||
83 | ); | ||||
84 | } | ||||
85 | ); | ||||
86 | } | ||||
87 | 1 | 3µs | 1 | 40µs | }; # spent 40µs making 1 call to Moose::Role::after |
88 | |||||
89 | # spent 1.76ms (56µs+1.70) within Moose::Meta::Attribute::Native::Trait::_check_helper_type which was called 4 times, avg 440µs/call:
# 4 times (56µs+1.70ms) by Class::MOP::Class:::before at line 28, avg 440µs/call | ||||
90 | 4 | 1µs | my ( $self, $options, $name ) = @_; | ||
91 | |||||
92 | 4 | 5µs | 4 | 3µs | my $type = $self->_helper_type; # spent 3µs making 4 calls to Moose::Meta::Attribute::Native::Trait::Array::_helper_type, avg 825ns/call |
93 | |||||
94 | 4 | 2µs | $options->{isa} = $type | ||
95 | unless exists $options->{isa}; | ||||
96 | |||||
97 | 4 | 200ns | my $isa; | ||
98 | 4 | 100ns | my $isa_name; | ||
99 | |||||
100 | 4 | 5µs | 4 | 136µs | if ( # spent 136µs making 4 calls to Moose::Util::does_role, avg 34µs/call |
101 | Moose::Util::does_role( | ||||
102 | $options->{isa}, 'Specio::Constraint::Role::Interface' | ||||
103 | ) | ||||
104 | ) { | ||||
105 | |||||
106 | $isa = $options->{isa}; | ||||
107 | require Specio::Library::Builtins; | ||||
108 | return if $isa->is_a_type_of( Specio::Library::Builtins::t($type) ); | ||||
109 | $isa_name = $isa->name() || $isa->description(); | ||||
110 | } | ||||
111 | else { | ||||
112 | 4 | 7µs | 4 | 1.36ms | $isa = Moose::Util::TypeConstraints::find_or_create_type_constraint( # spent 1.36ms making 4 calls to Moose::Util::TypeConstraints::find_or_create_type_constraint, avg 339µs/call |
113 | $options->{isa} ); | ||||
114 | 4 | 20µs | 4 | 208µs | return if $isa->is_a_type_of($type); # spent 208µs making 4 calls to Moose::Meta::TypeConstraint::is_a_type_of, avg 52µs/call |
115 | $isa_name = $isa->name(); | ||||
116 | } | ||||
117 | |||||
118 | confess | ||||
119 | "The type constraint for $name must be a subtype of $type but it's a $isa_name"; | ||||
120 | } | ||||
121 | |||||
122 | 5 | 14µs | 5 | 149ms | before 'install_accessors' => sub { (shift)->_check_handles_values }; # spent 149ms making 4 calls to Moose::Meta::Attribute::Native::Trait::_check_handles_values, avg 37.3ms/call
# spent 29µs making 1 call to Moose::Role::before |
123 | |||||
124 | # spent 149ms (215µs+149) within Moose::Meta::Attribute::Native::Trait::_check_handles_values which was called 4 times, avg 37.3ms/call:
# 4 times (215µs+149ms) by Class::MOP::Class:::before at line 122, avg 37.3ms/call | ||||
125 | 4 | 900ns | my $self = shift; | ||
126 | |||||
127 | 4 | 11µs | 4 | 166µs | my %handles = $self->_canonicalize_handles; # spent 166µs making 4 calls to Moose::Meta::Class::__ANON__::SERIAL::1::_canonicalize_handles, avg 41µs/call |
128 | |||||
129 | 4 | 19µs | for my $original_method ( values %handles ) { | ||
130 | 26 | 8µs | my $name = $original_method->[0]; | ||
131 | |||||
132 | 26 | 46µs | 26 | 149ms | my $accessor_class = $self->_native_accessor_class_for($name); # spent 149ms making 26 calls to Moose::Meta::Attribute::Native::Trait::_native_accessor_class_for, avg 5.72ms/call |
133 | |||||
134 | 26 | 134µs | 26 | 39µs | ( $accessor_class && $accessor_class->can('new') ) # spent 39µs making 26 calls to UNIVERSAL::can, avg 1µs/call |
135 | || confess | ||||
136 | "$name is an unsupported method type - $accessor_class"; | ||||
137 | } | ||||
138 | } | ||||
139 | |||||
140 | around '_canonicalize_handles' => sub { | ||||
141 | 8 | 300ns | shift; | ||
142 | 8 | 1µs | my $self = shift; | ||
143 | 8 | 14µs | 8 | 13µs | my $handles = $self->handles; # spent 13µs making 8 calls to Moose::Meta::Mixin::AttributeCore::handles, avg 2µs/call |
144 | |||||
145 | 8 | 1µs | return unless $handles; | ||
146 | |||||
147 | 8 | 4µs | unless ( 'HASH' eq ref $handles ) { | ||
148 | $self->throw_error( | ||||
149 | "The 'handles' option must be a HASH reference, not $handles"); | ||||
150 | } | ||||
151 | |||||
152 | return | ||||
153 | 8 | 76µs | 52 | 81µs | map { $_ => $self->_canonicalize_handles_value( $handles->{$_} ) } # spent 81µs making 52 calls to Moose::Meta::Attribute::Native::Trait::_canonicalize_handles_value, avg 2µs/call |
154 | keys %$handles; | ||||
155 | 1 | 2µs | 1 | 39µs | }; # spent 39µs making 1 call to Moose::Role::around |
156 | |||||
157 | # spent 81µs within Moose::Meta::Attribute::Native::Trait::_canonicalize_handles_value which was called 52 times, avg 2µs/call:
# 52 times (81µs+0s) by Class::MOP::Class:::around at line 153, avg 2µs/call | ||||
158 | 52 | 6µs | my $self = shift; | ||
159 | 52 | 6µs | my $value = shift; | ||
160 | |||||
161 | 52 | 2µs | if ( ref $value && 'ARRAY' ne ref $value ) { | ||
162 | $self->throw_error( | ||||
163 | "All values passed to handles must be strings or ARRAY references, not $value" | ||||
164 | ); | ||||
165 | } | ||||
166 | |||||
167 | 52 | 103µs | return ref $value ? $value : [$value]; | ||
168 | } | ||||
169 | |||||
170 | around '_make_delegation_method' => sub { | ||||
171 | 26 | 3µs | my $next = shift; | ||
172 | 26 | 7µs | my ( $self, $handle_name, $method_to_call ) = @_; | ||
173 | |||||
174 | 26 | 11µs | my ( $name, @curried_args ) = @$method_to_call; | ||
175 | |||||
176 | 26 | 42µs | 26 | 2.46ms | my $accessor_class = $self->_native_accessor_class_for($name); # spent 2.46ms making 26 calls to Moose::Meta::Attribute::Native::Trait::_native_accessor_class_for, avg 94µs/call |
177 | |||||
178 | 26 | 90µs | 26 | 44µs | die "Cannot find an accessor class for $name" # spent 44µs making 26 calls to UNIVERSAL::can, avg 2µs/call |
179 | unless $accessor_class && $accessor_class->can('new'); | ||||
180 | |||||
181 | 26 | 196µs | 104 | 34.6ms | return $accessor_class->new( # spent 8.53ms making 5 calls to Moose::Meta::Class::__ANON__::SERIAL::4::new, avg 1.71ms/call
# spent 5.94ms making 4 calls to Moose::Meta::Class::__ANON__::SERIAL::3::new, avg 1.49ms/call
# spent 4.86ms making 4 calls to Moose::Meta::Class::__ANON__::SERIAL::2::new, avg 1.21ms/call
# spent 4.61ms making 4 calls to Moose::Meta::Class::__ANON__::SERIAL::5::new, avg 1.15ms/call
# spent 4.53ms making 4 calls to Moose::Meta::Class::__ANON__::SERIAL::6::new, avg 1.13ms/call
# spent 4.22ms making 4 calls to Moose::Meta::Class::__ANON__::SERIAL::7::new, avg 1.06ms/call
# spent 1.85ms making 1 call to Moose::Meta::Class::__ANON__::SERIAL::8::new
# spent 84µs making 26 calls to Moose::Meta::Attribute::Native::Trait::_root_types, avg 3µs/call
# spent 17µs making 26 calls to Class::MOP::Attribute::associated_class, avg 638ns/call
# spent 11µs making 26 calls to Class::MOP::Package::name, avg 408ns/call |
182 | name => $handle_name, | ||||
183 | package_name => $self->associated_class->name, | ||||
184 | delegate_to_method => $name, | ||||
185 | attribute => $self, | ||||
186 | is_inline => 1, | ||||
187 | curried_arguments => \@curried_args, | ||||
188 | root_types => [ $self->_root_types ], | ||||
189 | ); | ||||
190 | 1 | 3µs | 1 | 3.35ms | }; # spent 3.35ms making 1 call to Moose::Role::around |
191 | |||||
192 | # spent 84µs (64+19) within Moose::Meta::Attribute::Native::Trait::_root_types which was called 26 times, avg 3µs/call:
# 26 times (64µs+19µs) by Class::MOP::Class:::around at line 181, avg 3µs/call | ||||
193 | 26 | 50µs | 26 | 19µs | return $_[0]->_helper_type; # spent 19µs making 26 calls to Moose::Meta::Attribute::Native::Trait::Array::_helper_type, avg 735ns/call |
194 | } | ||||
195 | |||||
196 | # spent 151ms (655µs+151) within Moose::Meta::Attribute::Native::Trait::_native_accessor_class_for which was called 52 times, avg 2.91ms/call:
# 26 times (336µs+148ms) by Moose::Meta::Attribute::Native::Trait::_check_handles_values at line 132, avg 5.72ms/call
# 26 times (319µs+2.14ms) by Class::MOP::Class:::around at line 176, avg 94µs/call | ||||
197 | 52 | 11µs | my ( $self, $suffix ) = @_; | ||
198 | |||||
199 | 52 | 60µs | 52 | 371µs | my $role # spent 371µs making 52 calls to Moose::Meta::Class::__ANON__::SERIAL::1::_native_type, avg 7µs/call |
200 | = 'Moose::Meta::Method::Accessor::Native::' | ||||
201 | . $self->_native_type . '::' | ||||
202 | . $suffix; | ||||
203 | |||||
204 | 52 | 36µs | 52 | 91.1ms | load_class($role); # spent 91.1ms making 52 calls to Class::Load::load_class, avg 1.75ms/call |
205 | 52 | 381µs | 208 | 59.1ms | return Moose::Meta::Class->create_anon_class( # spent 58.9ms making 52 calls to Class::MOP::Class::create_anon_class, avg 1.13ms/call
# spent 51µs making 52 calls to Moose::Meta::Attribute::accessor_metaclass, avg 983ns/call
# spent 39µs making 52 calls to Class::MOP::Package::name, avg 754ns/call
# spent 36µs making 52 calls to Moose::Meta::Attribute::delegation_metaclass, avg 687ns/call |
206 | superclasses => | ||||
207 | [ $self->accessor_metaclass, $self->delegation_metaclass ], | ||||
208 | roles => [$role], | ||||
209 | cache => 1, | ||||
210 | )->name; | ||||
211 | } | ||||
212 | |||||
213 | # spent 249µs (54+195) within Moose::Meta::Attribute::Native::Trait::_build_native_type which was called 4 times, avg 62µs/call:
# 4 times (54µs+195µs) by Moose::Meta::Class::__ANON__::SERIAL::1::_native_type at line 11 of (eval 74)[Eval/Closure.pm:135], avg 62µs/call | ||||
214 | 4 | 700ns | my $self = shift; | ||
215 | |||||
216 | 12 | 27µs | 16 | 184µs | for my $role_name ( map { $_->name } $self->meta->calculate_all_roles ) { # spent 146µs making 4 calls to Moose::Meta::Class::calculate_all_roles, avg 37µs/call
# spent 34µs making 4 calls to Moose::Meta::Class::__ANON__::SERIAL::1::meta, avg 8µs/call
# spent 4µs making 8 calls to Class::MOP::Package::name, avg 475ns/call |
217 | 4 | 34µs | 4 | 11µs | return $1 if $role_name =~ /::Native::Trait::(\w+)$/; # spent 11µs making 4 calls to Moose::Meta::Attribute::Native::Trait::CORE:match, avg 3µs/call |
218 | } | ||||
219 | |||||
220 | die "Cannot calculate native type for " . ref $self; | ||||
221 | } | ||||
222 | |||||
223 | 1 | 1µs | 1 | 82µs | has '_native_type' => ( # spent 82µs making 1 call to Moose::Role::has |
224 | is => 'ro', | ||||
225 | isa => 'Str', | ||||
226 | lazy => 1, | ||||
227 | builder => '_build_native_type', | ||||
228 | ); | ||||
229 | |||||
230 | 2 | 25µs | 2 | 145µs | # spent 76µs (8+69) within Moose::Meta::Attribute::Native::Trait::BEGIN@230 which was called:
# once (8µs+69µs) by Module::Runtime::require_module at line 230 # spent 76µs making 1 call to Moose::Meta::Attribute::Native::Trait::BEGIN@230
# spent 69µs making 1 call to Moose::Exporter::__ANON__[Moose/Exporter.pm:706] |
231 | 2 | 36µs | 2 | 145µs | # spent 76µs (7+69) within Moose::Meta::Attribute::Native::Trait::BEGIN@231 which was called:
# once (7µs+69µs) by Module::Runtime::require_module at line 231 # spent 76µs making 1 call to Moose::Meta::Attribute::Native::Trait::BEGIN@231
# spent 69µs making 1 call to Moose::Exporter::__ANON__[Moose/Exporter.pm:706] |
232 | |||||
233 | 1 | 17µs | 1; | ||
234 | |||||
235 | # ABSTRACT: Shared role for native delegation traits | ||||
236 | |||||
237 | __END__ | ||||
# spent 11µs within Moose::Meta::Attribute::Native::Trait::CORE:match which was called 4 times, avg 3µs/call:
# 4 times (11µs+0s) by Moose::Meta::Attribute::Native::Trait::_build_native_type at line 217, avg 3µs/call |