← Index
NYTProf Performance Profile   « line view »
For ../prof.pl
  Run on Wed Dec 14 15:57:08 2022
Reported on Wed Dec 14 16:00:33 2022

Filename/Users/ether/.perlbrew/libs/36.0@std/lib/perl5/Method/Generate/Accessor.pm
StatementsExecuted 5206 statements in 15.0ms
Subroutines
Calls P F Exclusive
Time
Inclusive
Time
Subroutine
1114.53ms7.76msMethod::Generate::Accessor::::BEGIN@8Method::Generate::Accessor::BEGIN@8
49113.01ms90.2msMethod::Generate::Accessor::::generate_methodMethod::Generate::Accessor::generate_method
55111.13ms20.3msMethod::Generate::Accessor::::_generate_populate_setMethod::Generate::Accessor::_generate_populate_set
8231588µs1.77msMethod::Generate::Accessor::::_generate_simple_setMethod::Generate::Accessor::_generate_simple_set
8631588µs18.4msMethod::Generate::Accessor::::_validate_codulatableMethod::Generate::Accessor::_validate_codulatable
5131501µs18.9msMethod::Generate::Accessor::::_generate_getMethod::Generate::Accessor::_generate_get
3421438µs1.11msMethod::Generate::Accessor::::_generate_call_codeMethod::Generate::Accessor::_generate_call_code
1711388µs17.5msMethod::Generate::Accessor::::_generate_use_defaultMethod::Generate::Accessor::_generate_use_default
8211351µs666µsMethod::Generate::Accessor::::_generate_core_setMethod::Generate::Accessor::_generate_core_set
8241345µs882µsMethod::Generate::Accessor::::_generate_simple_getMethod::Generate::Accessor::_generate_simple_get
5511281µs20.6msMethod::Generate::Accessor::::generate_populate_setMethod::Generate::Accessor::generate_populate_set
1711242µs720µsMethod::Generate::Accessor::::_wrap_attr_exceptionMethod::Generate::Accessor::_wrap_attr_exception
1411231µs16.4msMethod::Generate::Accessor::::_generate_asserterMethod::Generate::Accessor::_generate_asserter
1021218µs3.10msMethod::Generate::Accessor::::_generate_setMethod::Generate::Accessor::_generate_set
3121163µs282µsMethod::Generate::Accessor::::_generate_simple_hasMethod::Generate::Accessor::_generate_simple_has
4111159µs159µsMethod::Generate::Accessor::::_generate_delegationMethod::Generate::Accessor::_generate_delegation
1711139µs1.39msMethod::Generate::Accessor::::_generate_coerceMethod::Generate::Accessor::_generate_coerce
2421138µs779µsMethod::Generate::Accessor::::_generate_get_defaultMethod::Generate::Accessor::_generate_get_default
5111119µs119µsMethod::Generate::Accessor::::is_simple_getMethod::Generate::Accessor::is_simple_get
6122105µs105µsMethod::Generate::Accessor::::has_eager_defaultMethod::Generate::Accessor::has_eager_default
21179µs79µsMethod::Generate::Accessor::::merge_specsMethod::Generate::Accessor::merge_specs
101175µs91µsMethod::Generate::Accessor::::is_simple_setMethod::Generate::Accessor::is_simple_set
171167µs178µsMethod::Generate::Accessor::::_attr_descMethod::Generate::Accessor::_attr_desc
11143µs48µsMethod::Generate::Accessor::::BEGIN@2Method::Generate::Accessor::BEGIN@2
131139µs39µsMethod::Generate::Accessor::::has_defaultMethod::Generate::Accessor::has_default
31126µs634µsMethod::Generate::Accessor::::_generate_getsetMethod::Generate::Accessor::_generate_getset
491123µs23µsMethod::Generate::Accessor::::CORE:substMethod::Generate::Accessor::CORE:subst (opcode)
11113µs230µsMethod::Generate::Accessor::::BEGIN@18Method::Generate::Accessor::BEGIN@18
11113µs56µsMethod::Generate::Accessor::::BEGIN@5Method::Generate::Accessor::BEGIN@5
11113µs47µsMethod::Generate::Accessor::::BEGIN@685Method::Generate::Accessor::BEGIN@685
11110µs10µsMethod::Generate::Accessor::::BEGIN@7Method::Generate::Accessor::BEGIN@7
1119µs31µsMethod::Generate::Accessor::::BEGIN@9Method::Generate::Accessor::BEGIN@9
1118µs46µsMethod::Generate::Accessor::::BEGIN@3Method::Generate::Accessor::BEGIN@3
1117µs24µsMethod::Generate::Accessor::::BEGIN@10Method::Generate::Accessor::BEGIN@10
1116µs6µsMethod::Generate::Accessor::::BEGIN@34Method::Generate::Accessor::BEGIN@34
6116µs6µsMethod::Generate::Accessor::::default_construction_stringMethod::Generate::Accessor::default_construction_string
1113µs3µsMethod::Generate::Accessor::::BEGIN@11Method::Generate::Accessor::BEGIN@11
1113µs3µsMethod::Generate::Accessor::::BEGIN@6Method::Generate::Accessor::BEGIN@6
0000s0sMethod::Generate::Accessor::::__ANON__[:95]Method::Generate::Accessor::__ANON__[:95]
0000s0sMethod::Generate::Accessor::::_die_overwriteMethod::Generate::Accessor::_die_overwrite
0000s0sMethod::Generate::Accessor::::_generate_isa_checkMethod::Generate::Accessor::_generate_isa_check
0000s0sMethod::Generate::Accessor::::_generate_simple_clearMethod::Generate::Accessor::_generate_simple_clear
0000s0sMethod::Generate::Accessor::::_generate_triggerMethod::Generate::Accessor::_generate_trigger
0000s0sMethod::Generate::Accessor::::_generate_xsMethod::Generate::Accessor::_generate_xs
0000s0sMethod::Generate::Accessor::::_sanitize_nameMethod::Generate::Accessor::_sanitize_name
0000s0sMethod::Generate::Accessor::::generate_coerceMethod::Generate::Accessor::generate_coerce
0000s0sMethod::Generate::Accessor::::generate_get_defaultMethod::Generate::Accessor::generate_get_default
0000s0sMethod::Generate::Accessor::::generate_isa_checkMethod::Generate::Accessor::generate_isa_check
0000s0sMethod::Generate::Accessor::::generate_simple_getMethod::Generate::Accessor::generate_simple_get
0000s0sMethod::Generate::Accessor::::generate_simple_hasMethod::Generate::Accessor::generate_simple_has
0000s0sMethod::Generate::Accessor::::generate_triggerMethod::Generate::Accessor::generate_trigger
0000s0sMethod::Generate::Accessor::::generate_use_defaultMethod::Generate::Accessor::generate_use_default
0000s0sMethod::Generate::Accessor::::is_simple_attributeMethod::Generate::Accessor::is_simple_attribute
Call graph for these subroutines as a Graphviz dot language file.
Line State
ments
Time
on line
Calls Time
in subs
Code
1package Method::Generate::Accessor;
2246µs253µs
# spent 48µs (43+5) within Method::Generate::Accessor::BEGIN@2 which was called: # once (43µs+5µs) by Moo::_accessor_maker_for at line 2
use strict;
# spent 48µs making 1 call to Method::Generate::Accessor::BEGIN@2 # spent 5µs making 1 call to strict::import
3233µs284µs
# spent 46µs (8+38) within Method::Generate::Accessor::BEGIN@3 which was called: # once (8µs+38µs) by Moo::_accessor_maker_for at line 3
use warnings;
# spent 46µs making 1 call to Method::Generate::Accessor::BEGIN@3 # spent 38µs making 1 call to warnings::import
4
5233µs299µs
# spent 56µs (13+43) within Method::Generate::Accessor::BEGIN@5 which was called: # once (13µs+43µs) by Moo::_accessor_maker_for at line 5
use Moo::_Utils qw(_maybe_load_module _install_coderef _module_name_rx);
# spent 56µs making 1 call to Method::Generate::Accessor::BEGIN@5 # spent 43µs making 1 call to Exporter::import
6236µs13µs
# spent 3µs within Method::Generate::Accessor::BEGIN@6 which was called: # once (3µs+0s) by Moo::_accessor_maker_for at line 6
use Moo::Object ();
# spent 3µs making 1 call to Method::Generate::Accessor::BEGIN@6
7131µs110µs
# spent 10µs within Method::Generate::Accessor::BEGIN@7 which was called: # once (10µs+0s) by Moo::_accessor_maker_for at line 7
BEGIN { our @ISA = qw(Moo::Object) }
# spent 10µs making 1 call to Method::Generate::Accessor::BEGIN@7
82772µs27.84ms
# spent 7.76ms (4.53+3.23) within Method::Generate::Accessor::BEGIN@8 which was called: # once (4.53ms+3.23ms) by Moo::_accessor_maker_for at line 8
use Sub::Quote qw(quote_sub quoted_from_sub quotify sanitize_identifier);
# spent 7.76ms making 1 call to Method::Generate::Accessor::BEGIN@8 # spent 79µs making 1 call to Exporter::import
9228µs253µs
# spent 31µs (9+22) within Method::Generate::Accessor::BEGIN@9 which was called: # once (9µs+22µs) by Moo::_accessor_maker_for at line 9
use Scalar::Util 'blessed';
# spent 31µs making 1 call to Method::Generate::Accessor::BEGIN@9 # spent 22µs making 1 call to Exporter::import
10236µs241µs
# spent 24µs (7+17) within Method::Generate::Accessor::BEGIN@10 which was called: # once (7µs+17µs) by Moo::_accessor_maker_for at line 10
use Carp qw(croak);
# spent 24µs making 1 call to Method::Generate::Accessor::BEGIN@10 # spent 17µs making 1 call to Exporter::import
11
# spent 3µs within Method::Generate::Accessor::BEGIN@11 which was called: # once (3µs+0s) by Moo::_accessor_maker_for at line 17
BEGIN {
1214µs our @CARP_NOT = qw(
13 Moo::_Utils
14 Moo::Object
15 Moo::Role
16 );
171120µs13µs}
# spent 3µs making 1 call to Method::Generate::Accessor::BEGIN@11
18
# spent 230µs (13+217) within Method::Generate::Accessor::BEGIN@18 which was called: # once (13µs+217µs) by Moo::_accessor_maker_for at line 33
BEGIN {
19 *_CAN_WEAKEN_READONLY = (
20 "$]" < 5.008_003 or $ENV{MOO_TEST_PRE_583}
2114µs ) ? sub(){0} : sub(){1};
22 our $CAN_HAZ_XS =
23 !$ENV{MOO_XS_DISABLE}
24 &&
25 _maybe_load_module('Class::XSAccessor')
26 &&
2713µs1217µs (eval { Class::XSAccessor->VERSION('1.07') })
# spent 217µs making 1 call to Moo::_Utils::_maybe_load_module
28 ;
29 our $CAN_HAZ_XS_PRED =
30 $CAN_HAZ_XS &&
3114µs (eval { Class::XSAccessor->VERSION('1.17') })
32 ;
33157µs1230µs}
# spent 230µs making 1 call to Method::Generate::Accessor::BEGIN@18
34
# spent 6µs within Method::Generate::Accessor::BEGIN@34 which was called: # once (6µs+0s) by Moo::_accessor_maker_for at line 38
BEGIN {
35 package
36 Method::Generate::Accessor::_Generated;
3715µs $Carp::Internal{+__PACKAGE__} = 1;
3814.42ms16µs}
# spent 6µs making 1 call to Method::Generate::Accessor::BEGIN@34
39
40sub _die_overwrite {
41 my ($pkg, $method, $type) = @_;
42 croak "You cannot overwrite a locally defined method ($method) with "
43 . ( $type || 'an accessor' );
44}
45
46
# spent 90.2ms (3.01+87.1) within Method::Generate::Accessor::generate_method which was called 49 times, avg 1.84ms/call: # 49 times (3.01ms+87.1ms) by Moo::has at line 121 of Moo.pm, avg 1.84ms/call
sub generate_method {
474935µs my ($self, $into, $name, $spec, $quote_opts) = @_;
48 $quote_opts = {
49 no_defer => 1,
50 package => 'Method::Generate::Accessor::_Generated',
5149129µs %{ $quote_opts||{} },
52 };
5349107µs4923µs $spec->{allow_overwrite}++ if $name =~ s/^\+//;
# spent 23µs making 49 calls to Method::Generate::Accessor::CORE:subst, avg 469ns/call
544935µs croak "Must have an is" unless my $is = $spec->{is};
554984µs if ($is eq 'ro') {
56 $spec->{reader} = $name unless exists $spec->{reader};
57 } elsif ($is eq 'rw') {
58 $spec->{accessor} = $name unless exists $spec->{accessor}
59 or ( $spec->{reader} and $spec->{writer} );
60 } elsif ($is eq 'lazy') {
61 $spec->{reader} = $name unless exists $spec->{reader};
62 $spec->{lazy} = 1;
63 $spec->{builder} ||= '_build_'.$name unless exists $spec->{default};
64 } elsif ($is eq 'rwp') {
6567µs $spec->{reader} = $name unless exists $spec->{reader};
6668µs $spec->{writer} = "_set_${name}" unless exists $spec->{writer};
67 } elsif ($is ne 'bare') {
68 croak "Unknown is ${is}";
69 }
704911µs if (exists $spec->{builder}) {
71 if(ref $spec->{builder}) {
72 $self->_validate_codulatable('builder', $spec->{builder},
73 "$into->$name", 'or a method name');
74 $spec->{builder_sub} = $spec->{builder};
75 $spec->{builder} = 1;
76 }
77 $spec->{builder} = '_build_'.$name if ($spec->{builder}||0) eq 1;
78 croak "Invalid builder for $into->$name - not a valid method name"
79 if $spec->{builder} !~ _module_name_rx;
80 }
814933µs if (($spec->{predicate}||0) eq 1) {
82 $spec->{predicate} = $name =~ /^_/ ? "_has${name}" : "has_${name}";
83 }
844926µs if (($spec->{clearer}||0) eq 1) {
85 $spec->{clearer} = $name =~ /^_/ ? "_clear${name}" : "clear_${name}";
86 }
874920µs if (($spec->{trigger}||0) eq 1) {
88 $spec->{trigger} = quote_sub('shift->_trigger_'.$name.'(@_)');
89 }
904925µs if (($spec->{coerce}||0) eq 1) {
91 my $isa = $spec->{isa};
92 if (blessed $isa and $isa->can('coercion')) {
93 $spec->{coerce} = $isa->coercion;
94 } elsif (blessed $isa and $isa->can('coerce')) {
95 $spec->{coerce} = sub { $isa->coerce(@_) };
96 } else {
97 croak "Invalid coercion for $into->$name - no appropriate type constraint";
98 }
99 }
100
1014937µs foreach my $setting (qw( isa coerce )) {
1029842µs next if !exists $spec->{$setting};
10357170µs5718.3ms $self->_validate_codulatable($setting, $spec->{$setting}, "$into->$name");
# spent 18.3ms making 57 calls to Method::Generate::Accessor::_validate_codulatable, avg 322µs/call
104 }
105
1064971µs1773µs if (exists $spec->{default}) {
# spent 73µs making 17 calls to Method::Generate::Accessor::_validate_codulatable, avg 4µs/call
107 if (ref $spec->{default}) {
108 $self->_validate_codulatable('default', $spec->{default}, "$into->$name",
109 'or a non-ref');
110 }
111 }
112
1134918µs if (exists $spec->{moosify}) {
1141215µs if (ref $spec->{moosify} ne 'ARRAY') {
115 $spec->{moosify} = [$spec->{moosify}];
116 }
117
1181214µs foreach my $spec (@{$spec->{moosify}}) {
1191217µs1229µs $self->_validate_codulatable('moosify', $spec, "$into->$name");
# spent 29µs making 12 calls to Method::Generate::Accessor::_validate_codulatable, avg 2µs/call
120 }
121 }
122
1234911µs my %methods;
1244963µs if (my $reader = $spec->{reader}) {
125 _die_overwrite($into, $reader, 'a reader')
12634120µs if !$spec->{allow_overwrite} && defined &{"${into}::${reader}"};
1273423µs if (our $CAN_HAZ_XS && $self->is_simple_get($name, $spec)) {
128 $methods{$reader} = $self->_generate_xs(
129 getters => $into, $reader, $name, $spec
130 );
131 } else {
1323432µs $self->{captures} = {};
133 $methods{$reader} =
134 quote_sub "${into}::${reader}"
135 => ' Carp::croak("'.$reader.' is a read-only accessor") if @_ > 1;'."\n"
136 .$self->_generate_get($name, $spec)
137 => delete $self->{captures}
13834211µs6818.3ms => $quote_opts
# spent 15.4ms making 34 calls to Sub::Quote::quote_sub, avg 453µs/call # spent 2.92ms making 34 calls to Method::Generate::Accessor::_generate_get, avg 86µs/call
139 ;
140 }
141 }
1424933µs if (my $accessor = $spec->{accessor}) {
143 _die_overwrite($into, $accessor, 'an accessor')
144313µs if !$spec->{allow_overwrite} && defined &{"${into}::${accessor}"};
14531µs if (
146 our $CAN_HAZ_XS
147 && $self->is_simple_get($name, $spec)
148 && $self->is_simple_set($name, $spec)
149 ) {
150 $methods{$accessor} = $self->_generate_xs(
151 accessors => $into, $accessor, $name, $spec
152 );
153 } else {
15432µs $self->{captures} = {};
155 $methods{$accessor} =
156 quote_sub "${into}::${accessor}"
157 => $self->_generate_getset($name, $spec)
158 => delete $self->{captures}
159320µs62.49ms => $quote_opts
# spent 1.86ms making 3 calls to Sub::Quote::quote_sub, avg 620µs/call # spent 634µs making 3 calls to Method::Generate::Accessor::_generate_getset, avg 211µs/call
160 ;
161 }
162 }
1634930µs if (my $writer = $spec->{writer}) {
164 _die_overwrite($into, $writer, 'a writer')
165723µs if !$spec->{allow_overwrite} && defined &{"${into}::${writer}"};
16675µs if (
167 our $CAN_HAZ_XS
168 && $self->is_simple_set($name, $spec)
169 ) {
170 $methods{$writer} = $self->_generate_xs(
171 setters => $into, $writer, $name, $spec
172 );
173 } else {
17477µs $self->{captures} = {};
175 $methods{$writer} =
176 quote_sub "${into}::${writer}"
177 => $self->_generate_set($name, $spec)
178 => delete $self->{captures}
179742µs146.79ms => $quote_opts
# spent 4.27ms making 7 calls to Sub::Quote::quote_sub, avg 610µs/call # spent 2.52ms making 7 calls to Method::Generate::Accessor::_generate_set, avg 360µs/call
180 ;
181 }
182 }
1834926µs if (my $pred = $spec->{predicate}) {
184 _die_overwrite($into, $pred, 'a predicate')
185 if !$spec->{allow_overwrite} && defined &{"${into}::${pred}"};
186 if (our $CAN_HAZ_XS && our $CAN_HAZ_XS_PRED) {
187 $methods{$pred} = $self->_generate_xs(
188 exists_predicates => $into, $pred, $name, $spec
189 );
190 } else {
191 $self->{captures} = {};
192 $methods{$pred} =
193 quote_sub "${into}::${pred}"
194 => $self->_generate_simple_has('$_[0]', $name, $spec)."\n"
195 => delete $self->{captures}
196 => $quote_opts
197 ;
198 }
199 }
2004929µs if (my $builder = delete $spec->{builder_sub}) {
201 _install_coderef( "${into}::$spec->{builder}" => $builder );
202 }
2034911µs if (my $cl = $spec->{clearer}) {
204 _die_overwrite($into, $cl, 'a clearer')
205 if !$spec->{allow_overwrite} && defined &{"${into}::${cl}"};
206 $self->{captures} = {};
207 $methods{$cl} =
208 quote_sub "${into}::${cl}"
209 => $self->_generate_simple_clear('$_[0]', $name, $spec)."\n"
210 => delete $self->{captures}
211 => $quote_opts
212 ;
213 }
2144938µs if (my $hspec = $spec->{handles}) {
2151421µs my $asserter = $spec->{asserter} ||= '_assert_'.$name;
2161417µs my @specs = do {
21714141µs if (ref($hspec) eq 'ARRAY') {
218 map [ $_ => $_ ], @$hspec;
219 } elsif (ref($hspec) eq 'HASH') {
220 map [ $_ => ref($hspec->{$_}) ? @{$hspec->{$_}} : $hspec->{$_} ],
221 keys %$hspec;
222 } elsif (!ref($hspec)) {
223 require Moo::Role;
224 map [ $_ => $_ ], Moo::Role->methods_provided_by($hspec)
225 } else {
226 croak "You gave me a handles of ${hspec} and I have no idea why";
227 }
228 };
2291432µs foreach my $delegation_spec (@specs) {
2304124µs my ($proxy, $target, @args) = @$delegation_spec;
231 _die_overwrite($into, $proxy, 'a delegation')
23241149µs if !$spec->{allow_overwrite} && defined &{"${into}::${proxy}"};
2334138µs $self->{captures} = {};
234 $methods{$proxy} =
235 quote_sub "${into}::${proxy}"
236 => $self->_generate_delegation($asserter, $target, \@args)
237 => delete $self->{captures}
23841267µs8214.6ms => $quote_opts
# spent 14.4ms making 41 calls to Sub::Quote::quote_sub, avg 352µs/call # spent 159µs making 41 calls to Method::Generate::Accessor::_generate_delegation, avg 4µs/call
239 ;
240 }
241 }
2424954µs if (my $asserter = $spec->{asserter}) {
243 _die_overwrite($into, $asserter, 'an asserter')
2441447µs if !$spec->{allow_overwrite} && defined &{"${into}::${asserter}"};
2451432µs local $self->{captures} = {};
246 $methods{$asserter} =
247 quote_sub "${into}::${asserter}"
248 => $self->_generate_asserter($name, $spec)
249 => delete $self->{captures}
25014115µs2826.5ms => $quote_opts
# spent 16.4ms making 14 calls to Method::Generate::Accessor::_generate_asserter, avg 1.17ms/call # spent 10.0ms making 14 calls to Sub::Quote::quote_sub, avg 718µs/call
251 ;
252 }
25349218µs \%methods;
254}
255
256
# spent 79µs within Method::Generate::Accessor::merge_specs which was called 2 times, avg 40µs/call: # 2 times (79µs+0s) by Method::Generate::Constructor::register_attribute_specs at line 27 of Method/Generate/Constructor.pm, avg 40µs/call
sub merge_specs {
25723µs my ($self, @specs) = @_;
25822µs my $spec = shift @specs;
25921µs for my $old_spec (@specs) {
26024µs foreach my $key (keys %$old_spec) {
2611230µs if ($key eq 'handles') {
262 }
263 elsif ($key eq 'moosify') {
264 $spec->{$key} = [
265 map { ref $_ eq 'ARRAY' ? @$_ : $_ }
266 grep defined,
267 ($old_spec->{$key}, $spec->{$key})
268 ];
269 }
270 elsif ($key eq 'builder' || $key eq 'default') {
271 $spec->{$key} = $old_spec->{$key}
272 if !(exists $spec->{builder} || exists $spec->{default});
273 }
274 elsif (!exists $spec->{$key}) {
275 $spec->{$key} = $old_spec->{$key};
276 }
277 }
278 }
279211µs $spec;
280}
281
282sub is_simple_attribute {
283 my ($self, $name, $spec) = @_;
284 # clearer doesn't have to be listed because it doesn't
285 # affect whether defined/exists makes a difference
286 !grep $spec->{$_},
287 qw(lazy default builder coerce isa trigger predicate weak_ref);
288}
289
290
# spent 119µs within Method::Generate::Accessor::is_simple_get which was called 51 times, avg 2µs/call: # 51 times (119µs+0s) by Method::Generate::Accessor::_generate_get at line 313, avg 2µs/call
sub is_simple_get {
2915124µs my ($self, $name, $spec) = @_;
29251179µs !($spec->{lazy} and (exists $spec->{default} or $spec->{builder}));
293}
294
295
# spent 91µs (75+16) within Method::Generate::Accessor::is_simple_set which was called 10 times, avg 9µs/call: # 10 times (75µs+16µs) by Method::Generate::Accessor::_generate_set at line 402, avg 9µs/call
sub is_simple_set {
296104µs my ($self, $name, $spec) = @_;
2971071µs1016µs !grep $spec->{$_}, qw(coerce isa trigger weak_ref);
# spent 16µs making 10 calls to Type::Tiny::__ANON__[Type/Tiny.pm:101], avg 2µs/call
298}
299
300
# spent 39µs within Method::Generate::Accessor::has_default which was called 13 times, avg 3µs/call: # 13 times (39µs+0s) by Method::Generate::Constructor::register_attribute_specs at line 29 of Method/Generate/Constructor.pm, avg 3µs/call
sub has_default {
301138µs my ($self, $name, $spec) = @_;
3021335µs $spec->{builder} or exists $spec->{default} or (($spec->{is}||'') eq 'lazy');
303}
304
305
# spent 105µs within Method::Generate::Accessor::has_eager_default which was called 61 times, avg 2µs/call: # 55 times (97µs+0s) by Method::Generate::Accessor::_generate_populate_set at line 547, avg 2µs/call # 6 times (8µs+0s) by Method::Generate::Constructor::_assign_new at line 214 of Method/Generate/Constructor.pm, avg 1µs/call
sub has_eager_default {
3066115µs my ($self, $name, $spec) = @_;
30761192µs (!$spec->{lazy} and (exists $spec->{default} or $spec->{builder}));
308}
309
310
# spent 18.9ms (501µs+18.4) within Method::Generate::Accessor::_generate_get which was called 51 times, avg 371µs/call: # 34 times (261µs+2.65ms) by Method::Generate::Accessor::generate_method at line 138, avg 86µs/call # 14 times (229µs+15.7ms) by Method::Generate::Accessor::_generate_asserter at line 644, avg 1.14ms/call # 3 times (11µs+19µs) by Method::Generate::Accessor::_generate_getset at line 637, avg 10µs/call
sub _generate_get {
3115125µs my ($self, $name, $spec) = @_;
31251107µs51638µs my $simple = $self->_generate_simple_get('$_[0]', $name, $spec);
# spent 638µs making 51 calls to Method::Generate::Accessor::_generate_simple_get, avg 13µs/call
31351184µs51119µs if ($self->is_simple_get($name, $spec)) {
# spent 119µs making 51 calls to Method::Generate::Accessor::is_simple_get, avg 2µs/call
314 $simple;
315 } else {
3161781µs3417.7ms $self->_generate_use_default(
# spent 17.5ms making 17 calls to Method::Generate::Accessor::_generate_use_default, avg 1.03ms/call # spent 143µs making 17 calls to Method::Generate::Accessor::_generate_simple_has, avg 8µs/call
317 '$_[0]', $name, $spec,
318 $self->_generate_simple_has('$_[0]', $name, $spec),
319 );
320 }
321}
322
323sub generate_simple_has {
324 my $self = shift;
325 $self->{captures} = {};
326 my $code = $self->_generate_simple_has(@_);
327 ($code, delete $self->{captures});
328}
329
330
# spent 282µs (163+119) within Method::Generate::Accessor::_generate_simple_has which was called 31 times, avg 9µs/call: # 17 times (78µs+65µs) by Method::Generate::Accessor::_generate_get at line 316, avg 8µs/call # 14 times (85µs+54µs) by Method::Generate::Accessor::_generate_asserter at line 644, avg 10µs/call
sub _generate_simple_has {
3313114µs my ($self, $me, $name) = @_;
33231159µs31119µs "exists ${me}->{${\quotify $name}}";
# spent 119µs making 31 calls to Sub::Quote::quotify, avg 4µs/call
333}
334
335sub _generate_simple_clear {
336 my ($self, $me, $name) = @_;
337 " delete ${me}->{${\quotify $name}}\n"
338}
339
340sub generate_get_default {
341 my $self = shift;
342 $self->{captures} = {};
343 my $code = $self->_generate_get_default(@_);
344 ($code, delete $self->{captures});
345}
346
347sub generate_use_default {
348 my $self = shift;
349 $self->{captures} = {};
350 my $code = $self->_generate_use_default(@_);
351 ($code, delete $self->{captures});
352}
353
354
# spent 17.5ms (388µs+17.1) within Method::Generate::Accessor::_generate_use_default which was called 17 times, avg 1.03ms/call: # 17 times (388µs+17.1ms) by Method::Generate::Accessor::_generate_get at line 316, avg 1.03ms/call
sub _generate_use_default {
3551715µs my ($self, $me, $name, $spec, $test) = @_;
3561766µs17679µs my $get_value = $self->_generate_get_default($me, $name, $spec);
# spent 679µs making 17 calls to Method::Generate::Accessor::_generate_get_default, avg 40µs/call
3571716µs2261µs if ($spec->{coerce}) {
358 $get_value = $self->_generate_coerce(
359 $name, $get_value,
360 $spec->{coerce}
361 )
362 }
363 $test." ? \n"
364 .$self->_generate_simple_get($me, $name, $spec)."\n:"
365 .($spec->{isa} ?
366 " do {\n my \$value = ".$get_value.";\n"
36717274µs6816.2ms ." ".$self->_generate_isa_check($name, '$value', $spec->{isa}).";\n"
# spent 15.6ms making 17 calls to Method::Generate::Accessor__WITH__MooX::TypeTiny::Role::GenerateAccessor::_generate_isa_check, avg 918µs/call # spent 404µs making 17 calls to Method::Generate::Accessor::_generate_simple_set, avg 24µs/call # spent 132µs making 17 calls to Method::Generate::Accessor::_generate_simple_get, avg 8µs/call # spent 40µs making 17 calls to Type::Tiny::__ANON__[Type/Tiny.pm:101], avg 2µs/call
368 ." ".$self->_generate_simple_set($me, $name, $spec, '$value')."\n"
369 ." }\n"
370 : ' ('.$self->_generate_simple_set($me, $name, $spec, $get_value).")\n"
371 );
372}
373
374
# spent 779µs (138+641) within Method::Generate::Accessor::_generate_get_default which was called 24 times, avg 32µs/call: # 17 times (97µs+582µs) by Method::Generate::Accessor::_generate_use_default at line 356, avg 40µs/call # 7 times (41µs+59µs) by Method::Generate::Accessor::_generate_populate_set at line 552, avg 14µs/call
sub _generate_get_default {
3752417µs my ($self, $me, $name, $spec) = @_;
37624115µs24641µs if (exists $spec->{default}) {
# spent 582µs making 17 calls to Method::Generate::Accessor::_generate_call_code, avg 34µs/call # spent 59µs making 7 calls to Sub::Quote::quotify, avg 8µs/call
377 ref $spec->{default}
378 ? $self->_generate_call_code($name, 'default', $me, $spec->{default})
379 : quotify $spec->{default};
380 }
381 else {
382 "${me}->${\$spec->{builder}}"
383 }
384}
385
386sub generate_simple_get {
387 my ($self, @args) = @_;
388 $self->{captures} = {};
389 my $code = $self->_generate_simple_get(@args);
390 ($code, delete $self->{captures});
391}
392
393
# spent 882µs (345+537) within Method::Generate::Accessor::_generate_simple_get which was called 82 times, avg 11µs/call: # 51 times (239µs+399µs) by Method::Generate::Accessor::_generate_get at line 312, avg 13µs/call # 17 times (49µs+83µs) by Method::Generate::Accessor::_generate_use_default at line 367, avg 8µs/call # 10 times (35µs+36µs) by Method::Generate::Accessor::_generate_set at line 410, avg 7µs/call # 4 times (22µs+19µs) by Method::Generate::Accessor::_generate_simple_set at line 601, avg 10µs/call
sub _generate_simple_get {
3948246µs my ($self, $me, $name) = @_;
39582119µs82537µs my $name_str = quotify $name;
# spent 537µs making 82 calls to Sub::Quote::quotify, avg 7µs/call
39682180µs "${me}->{${name_str}}";
397}
398
399
# spent 3.10ms (218µs+2.88) within Method::Generate::Accessor::_generate_set which was called 10 times, avg 310µs/call: # 7 times (170µs+2.35ms) by Method::Generate::Accessor::generate_method at line 179, avg 360µs/call # 3 times (48µs+530µs) by Method::Generate::Accessor::_generate_getset at line 637, avg 193µs/call
sub _generate_set {
400101µs my ($self, $name, $spec) = @_;
401107µs my ($me, $source) = ('$_[0]', '$_[1]');
4021021µs1091µs if ($self->is_simple_set($name, $spec)) {
# spent 91µs making 10 calls to Method::Generate::Accessor::is_simple_set, avg 9µs/call
403 return $self->_generate_simple_set($me, $name, $spec, $source);
404 }
405
4061011µs my ($coerce, $trigger, $isa_check) = @{$spec}{qw(coerce trigger isa)};
4071017µs4505µs if ($coerce) {
408 $source = $self->_generate_coerce($name, $source, $coerce);
409 }
41010136µs402.28ms if ($isa_check) {
# spent 1.98ms making 10 calls to Method::Generate::Accessor__WITH__MooX::TypeTiny::Role::GenerateAccessor::_generate_isa_check, avg 198µs/call # spent 223µs making 10 calls to Method::Generate::Accessor::_generate_simple_set, avg 22µs/call # spent 71µs making 10 calls to Method::Generate::Accessor::_generate_simple_get, avg 7µs/call # spent 9µs making 10 calls to Type::Tiny::__ANON__[Type/Tiny.pm:101], avg 900ns/call
411 'scalar do { my $value = '.$source.";\n"
412 .' ('.$self->_generate_isa_check($name, '$value', $isa_check)."),\n"
413 .' ('.$self->_generate_simple_set($me, $name, $spec, '$value')."),\n"
414 .($trigger
415 ? '('.$self->_generate_trigger($name, $me, '$value', $trigger)."),\n"
416 : '')
417 .' ('.$self->_generate_simple_get($me, $name, $spec)."),\n"
418 ."}";
419 }
420 elsif ($trigger) {
421 my $set = $self->_generate_simple_set($me, $name, $spec, $source);
422 "scalar (\n"
423 . ' ('.$self->_generate_trigger($name, $me, "($set)", $trigger)."),\n"
424 . ' ('.$self->_generate_simple_get($me, $name, $spec)."),\n"
425 . ")";
426 }
427 else {
428 '('.$self->_generate_simple_set($me, $name, $spec, $source).')';
429 }
430}
431
432sub generate_coerce {
433 my $self = shift;
434 $self->{captures} = {};
435 my $code = $self->_generate_coerce(@_);
436 ($code, delete $self->{captures});
437}
438
439
# spent 178µs (67+111) within Method::Generate::Accessor::_attr_desc which was called 17 times, avg 10µs/call: # 17 times (67µs+111µs) by Method::Generate::Accessor::_wrap_attr_exception at line 477, avg 10µs/call
sub _attr_desc {
440175µs my ($name, $init_arg) = @_;
4411755µs17111µs return quotify($name) if !defined($init_arg) or $init_arg eq $name;
# spent 111µs making 17 calls to Sub::Quote::quotify, avg 7µs/call
442 return quotify($name).' (constructor argument: '.quotify($init_arg).')';
443}
444
445
# spent 1.39ms (139µs+1.25) within Method::Generate::Accessor::_generate_coerce which was called 17 times, avg 82µs/call: # 17 times (139µs+1.25ms) by MooX::TypeTiny::Role::GenerateAccessor::__ANON__[/Users/ether/.perlbrew/libs/36.0@std/lib/perl5/MooX/TypeTiny/Role/GenerateAccessor.pm:63] at line 42 of MooX/TypeTiny/Role/GenerateAccessor.pm, avg 82µs/call
sub _generate_coerce {
4461712µs my ($self, $name, $value, $coerce, $init_arg) = @_;
44717112µs341.25ms $self->_wrap_attr_exception(
# spent 720µs making 17 calls to Method::Generate::Accessor::_wrap_attr_exception, avg 42µs/call # spent 527µs making 17 calls to Method::Generate::Accessor::_generate_call_code, avg 31µs/call
448 $name,
449 "coercion",
450 $init_arg,
451 $self->_generate_call_code($name, 'coerce', "${value}", $coerce),
452 1,
453 );
454}
455
456sub generate_trigger {
457 my $self = shift;
458 $self->{captures} = {};
459 my $code = $self->_generate_trigger(@_);
460 ($code, delete $self->{captures});
461}
462
463sub _generate_trigger {
464 my ($self, $name, $obj, $value, $trigger) = @_;
465 $self->_generate_call_code($name, 'trigger', "${obj}, ${value}", $trigger);
466}
467
468sub generate_isa_check {
469 my ($self, @args) = @_;
470 $self->{captures} = {};
471 my $code = $self->_generate_isa_check(@args);
472 ($code, delete $self->{captures});
473}
474
475
# spent 720µs (242+478) within Method::Generate::Accessor::_wrap_attr_exception which was called 17 times, avg 42µs/call: # 17 times (242µs+478µs) by Method::Generate::Accessor::_generate_coerce at line 447, avg 42µs/call
sub _wrap_attr_exception {
4761715µs my ($self, $name, $step, $arg, $code, $want_return) = @_;
4771769µs34302µs my $prefix = quotify("${step} for "._attr_desc($name, $arg).' failed: ');
# spent 178µs making 17 calls to Method::Generate::Accessor::_attr_desc, avg 10µs/call # spent 124µs making 17 calls to Sub::Quote::quotify, avg 7µs/call
47817120µs51176µs "do {\n"
# spent 176µs making 51 calls to Sub::Quote::quotify, avg 3µs/call
479 .' local $Method::Generate::Accessor::CurrentAttribute = {'."\n"
480 .' init_arg => '.quotify($arg).",\n"
481 .' name => '.quotify($name).",\n"
482 .' step => '.quotify($step).",\n"
483 ." };\n"
484 .($want_return ? ' (my $_return),'."\n" : '')
485 .' (my $_error), (my $_old_error = $@);'."\n"
486 ." (eval {\n"
487 .' ($@ = $_old_error),'."\n"
488 .' ('
489 .($want_return ? '$_return ='."\n" : '')
490 .$code."),\n"
491 ." 1\n"
492 ." } or\n"
493 .' $_error = CORE::ref $@ ? $@ : '.$prefix.'.$@);'."\n"
494 .' ($@ = $_old_error),'."\n"
495 .' (defined $_error and CORE::die $_error);'."\n"
496 .($want_return ? ' $_return;'."\n" : '')
497 ."}\n"
498}
499
500sub _generate_isa_check {
501 my ($self, $name, $value, $check, $init_arg) = @_;
502 $self->_wrap_attr_exception(
503 $name,
504 "isa check",
505 $init_arg,
506 $self->_generate_call_code($name, 'isa_check', $value, $check)
507 );
508}
509
510
# spent 1.11ms (438µs+671µs) within Method::Generate::Accessor::_generate_call_code which was called 34 times, avg 33µs/call: # 17 times (226µs+356µs) by Method::Generate::Accessor::_generate_get_default at line 376, avg 34µs/call # 17 times (212µs+315µs) by Method::Generate::Accessor::_generate_coerce at line 447, avg 31µs/call
sub _generate_call_code {
5113430µs my ($self, $name, $type, $values, $sub) = @_;
5123493µs3420µs $sub = \&{$sub} if blessed($sub); # coderef if blessed
# spent 20µs making 34 calls to Scalar::Util::blessed, avg 588ns/call
51334155µs34122µs if (my $quoted = quoted_from_sub($sub)) {
# spent 122µs making 34 calls to Sub::Quote::quoted_from_sub, avg 4µs/call
514 my $local = 1;
515 if ($values eq '@_' || $values eq '$_[0]') {
516 $local = 0;
517 $values = '@_';
518 }
519 my $code = $quoted->[1];
520 if (my $captures = $quoted->[2]) {
521 my $cap_name = qq{\$${type}_captures_for_}.sanitize_identifier($name);
522 $self->{captures}->{$cap_name} = \$captures;
523 Sub::Quote::inlinify($code, $values,
524 Sub::Quote::capture_unroll($cap_name, $captures, 6), $local);
525 } else {
526 Sub::Quote::inlinify($code, $values, undef, $local);
527 }
528 } else {
52934105µs34529µs my $cap_name = qq{\$${type}_for_}.sanitize_identifier($name);
# spent 529µs making 34 calls to Sub::Quote::sanitize_identifier, avg 16µs/call
5303447µs $self->{captures}->{$cap_name} = \$sub;
5313417µs "${cap_name}->(${values})";
532 }
533}
534
535sub _sanitize_name { sanitize_identifier($_[1]) }
536
537
# spent 20.6ms (281µs+20.3) within Method::Generate::Accessor::generate_populate_set which was called 55 times, avg 375µs/call: # 55 times (281µs+20.3ms) by Method::Generate::Constructor::_assign_new at line 223 of Method/Generate/Constructor.pm, avg 375µs/call
sub generate_populate_set {
5385516µs my $self = shift;
5395538µs $self->{captures} = {};
5405579µs5520.3ms my $code = $self->_generate_populate_set(@_);
# spent 20.3ms making 55 calls to Method::Generate::Accessor::_generate_populate_set, avg 370µs/call
54155115µs ($code, delete $self->{captures});
542}
543
544
# spent 20.3ms (1.13+19.2) within Method::Generate::Accessor::_generate_populate_set which was called 55 times, avg 370µs/call: # 55 times (1.13ms+19.2ms) by Method::Generate::Accessor::generate_populate_set at line 540, avg 370µs/call
sub _generate_populate_set {
5455528µs my ($self, $me, $name, $spec, $source, $test, $init_arg) = @_;
546
5475575µs5597µs my $has_default = $self->has_eager_default($name, $spec);
# spent 97µs making 55 calls to Method::Generate::Accessor::has_eager_default, avg 2µs/call
5485514µs if (!($has_default || $test)) {
549 return '';
550 }
551557µs if ($has_default) {
552716µs7100µs my $get_default = $self->_generate_get_default($me, $name, $spec);
# spent 100µs making 7 calls to Method::Generate::Accessor::_generate_get_default, avg 14µs/call
553711µs $source =
554 $test
555 ? "(\n ${test}\n"
556 ." ? ${source}\n : "
557 .$get_default
558 .")"
559 : $get_default;
560 }
5615550µs111.20ms if ($spec->{coerce}) {
562 $source = $self->_generate_coerce(
563 $name, $source,
564 $spec->{coerce}, $init_arg
565 )
566 }
56755357µs9216.7ms if ($spec->{isa}) {
# spent 16.6ms making 46 calls to Method::Generate::Accessor__WITH__MooX::TypeTiny::Role::GenerateAccessor::_generate_isa_check, avg 361µs/call # spent 79µs making 46 calls to Type::Tiny::__ANON__[Type/Tiny.pm:101], avg 2µs/call
568 $source = 'scalar do { my $value = '.$source.";\n"
569 .' ('.$self->_generate_isa_check(
570 $name, '$value', $spec->{isa}, $init_arg
571 )."),\n"
572 ." \$value\n"
573 ."}\n";
574 }
57555101µs551.15ms my $set = $self->_generate_simple_set($me, $name, $spec, $source);
# spent 1.15ms making 55 calls to Method::Generate::Accessor::_generate_simple_set, avg 21µs/call
576 my $trigger = $spec->{trigger} ? $self->_generate_trigger(
577 $name, $me, $self->_generate_simple_get($me, $name, $spec),
578 $spec->{trigger}
5795534µs ) : undef;
58055173µs if ($has_default) {
581 "($set)," . ($trigger && $test ? "($test and $trigger)," : '') . "\n";
582 }
583 else {
5844870µs "($test and ($set)" . ($trigger ? ", ($trigger)" : '') . "),\n";
585 }
586}
587
588
# spent 666µs (351+315) within Method::Generate::Accessor::_generate_core_set which was called 82 times, avg 8µs/call: # 82 times (351µs+315µs) by Method::Generate::Accessor::_generate_simple_set at line 597, avg 8µs/call
sub _generate_core_set {
5898235µs my ($self, $me, $name, $spec, $value) = @_;
5908278µs82315µs my $name_str = quotify $name;
# spent 315µs making 82 calls to Sub::Quote::quotify, avg 4µs/call
59182216µs "${me}->{${name_str}} = ${value}";
592}
593
594
# spent 1.77ms (588µs+1.19) within Method::Generate::Accessor::_generate_simple_set which was called 82 times, avg 22µs/call: # 55 times (347µs+801µs) by Method::Generate::Accessor::_generate_populate_set at line 575, avg 21µs/call # 17 times (152µs+252µs) by Method::Generate::Accessor::_generate_use_default at line 367, avg 24µs/call # 10 times (89µs+134µs) by Method::Generate::Accessor::_generate_set at line 410, avg 22µs/call
sub _generate_simple_set {
5958263µs my ($self, $me, $name, $spec, $value) = @_;
59682112µs82480µs my $name_str = quotify $name;
# spent 480µs making 82 calls to Sub::Quote::quotify, avg 6µs/call
5978295µs82666µs my $simple = $self->_generate_core_set($me, $name, $spec, $value);
# spent 666µs making 82 calls to Method::Generate::Accessor::_generate_core_set, avg 8µs/call
598
59982199µs if ($spec->{weak_ref}) {
60048µs require Scalar::Util;
601411µs441µs my $get = $self->_generate_simple_get($me, $name, $spec);
# spent 41µs making 4 calls to Method::Generate::Accessor::_generate_simple_get, avg 10µs/call
602
603 # Perl < 5.8.3 can't weaken refs to readonly vars
604 # (e.g. string constants). This *can* be solved by:
605 #
606 # &Internals::SvREADONLY($foo, 0);
607 # Scalar::Util::weaken($foo);
608 # &Internals::SvREADONLY($foo, 1);
609 #
610 # but requires Internal functions and is just too damn crazy
611 # so simply throw a better exception
61245µs my $weak_simple = _CAN_WEAKEN_READONLY
613 ? "do { Scalar::Util::weaken(${simple}); no warnings 'void'; $get }"
614 : <<"EOC"
615 ( eval { Scalar::Util::weaken($simple); 1 }
616 ? do { no warnings 'void'; $get }
617 : do {
618 if( \$@ =~ /Modification of a read-only value attempted/) {
619 require Carp;
620 Carp::croak( sprintf (
621 'Reference to readonly value in "%s" can not be weakened on Perl < 5.8.3',
622 $name_str,
623 ) );
624 } else {
625 die \$@;
626 }
627 }
628 )
629EOC
630 } else {
6317824µs $simple;
632 }
633}
634
635
# spent 634µs (26+608) within Method::Generate::Accessor::_generate_getset which was called 3 times, avg 211µs/call: # 3 times (26µs+608µs) by Method::Generate::Accessor::generate_method at line 159, avg 211µs/call
sub _generate_getset {
63631µs my ($self, $name, $spec) = @_;
637388µs6608µs q{(@_ > 1}."\n ? ".$self->_generate_set($name, $spec)
# spent 578µs making 3 calls to Method::Generate::Accessor::_generate_set, avg 193µs/call # spent 30µs making 3 calls to Method::Generate::Accessor::_generate_get, avg 10µs/call
638 ."\n : ".$self->_generate_get($name, $spec)."\n )";
639}
640
641
# spent 16.4ms (231µs+16.2) within Method::Generate::Accessor::_generate_asserter which was called 14 times, avg 1.17ms/call: # 14 times (231µs+16.2ms) by Method::Generate::Accessor::generate_method at line 250, avg 1.17ms/call
sub _generate_asserter {
642149µs my ($self, $name, $spec) = @_;
6431450µs14108µs my $name_str = quotify($name);
# spent 108µs making 14 calls to Sub::Quote::quotify, avg 8µs/call
64414127µs2816.1ms "do {\n"
# spent 16.0ms making 14 calls to Method::Generate::Accessor::_generate_get, avg 1.14ms/call # spent 139µs making 14 calls to Method::Generate::Accessor::_generate_simple_has, avg 10µs/call
645 ." my \$val = ".$self->_generate_get($name, $spec).";\n"
646 ." ".$self->_generate_simple_has('$_[0]', $name, $spec)."\n"
647 ." or Carp::croak(q{Attempted to access '}.${name_str}.q{' but it is not set});\n"
648 ." \$val;\n"
649 ."}\n";
650}
651
# spent 159µs within Method::Generate::Accessor::_generate_delegation which was called 41 times, avg 4µs/call: # 41 times (159µs+0s) by Method::Generate::Accessor::generate_method at line 238, avg 4µs/call
sub _generate_delegation {
6524115µs my ($self, $asserter, $target, $args) = @_;
6534118µs my $arg_string = do {
6544123µs if (@$args) {
655 # I could, I reckon, linearise out non-refs here using quotify
656 # plus something to check for numbers but I'm unsure if it's worth it
657 $self->{captures}{'@curries'} = $args;
658 '@curries, @_';
659 } else {
6604117µs '@_';
661 }
662 };
66341109µs "shift->${asserter}->${target}(${arg_string});";
664}
665
666sub _generate_xs {
667 my ($self, $type, $into, $name, $slot) = @_;
668 Class::XSAccessor->import(
669 class => $into,
670 $type => { $name => $slot },
671 replace => 1,
672 );
673 $into->can($name);
674}
675
676611µs
# spent 6µs within Method::Generate::Accessor::default_construction_string which was called 6 times, avg 1µs/call: # 6 times (6µs+0s) by Method::Generate::Constructor::_build_construction_string at line 68 of Method/Generate/Constructor.pm, avg 1µs/call
sub default_construction_string { '{}' }
677
678
# spent 18.4ms (588µs+17.9) within Method::Generate::Accessor::_validate_codulatable which was called 86 times, avg 214µs/call: # 57 times (494µs+17.8ms) by Method::Generate::Accessor::generate_method at line 103, avg 322µs/call # 17 times (68µs+5µs) by Method::Generate::Accessor::generate_method at line 106, avg 4µs/call # 12 times (26µs+3µs) by Method::Generate::Accessor::generate_method at line 119, avg 2µs/call
sub _validate_codulatable {
6798635µs my ($self, $setting, $value, $into, $appended) = @_;
680
6818616µs my $error;
682
68386371µs8679µs if (blessed $value) {
# spent 79µs making 86 calls to Scalar::Util::blessed, avg 919ns/call
6844711µs local $@;
6852285µs281µs
# spent 47µs (13+34) within Method::Generate::Accessor::BEGIN@685 which was called: # once (13µs+34µs) by Moo::_accessor_maker_for at line 685
no warnings 'void';
# spent 47µs making 1 call to Method::Generate::Accessor::BEGIN@685 # spent 34µs making 1 call to warnings::unimport
686141329µs4717.8ms eval { \&$value; 1 }
# spent 17.8ms making 47 calls to Type::Tiny::__ANON__[Type/Tiny.pm:89], avg 378µs/call
687 and return 1;
688 $error = "could not be converted to a coderef: $@";
689 }
690 elsif (ref $value eq 'CODE') {
691 return 1;
692 }
693 else {
694 $error = 'is not a coderef or code-convertible object';
695 }
696
697 croak "Invalid $setting '"
698 . ($INC{'overload.pm'} ? overload::StrVal($value) : $value)
699 . "' for $into " . $error
700 . ($appended ? " $appended" : '');
701}
702
70317µs1;
 
# spent 23µs within Method::Generate::Accessor::CORE:subst which was called 49 times, avg 469ns/call: # 49 times (23µs+0s) by Method::Generate::Accessor::generate_method at line 53, avg 469ns/call
sub Method::Generate::Accessor::CORE:subst; # opcode