← Index
NYTProf Performance Profile   « line view »
For ../prof.pl
  Run on Thu Dec 15 15:23:56 2022
Reported on Thu Dec 15 15:27:03 2022

Filename/Users/ether/.perlbrew/libs/36.0@std/lib/perl5/Method/Generate/Constructor.pm
StatementsExecuted 2374 statements in 7.37ms
Subroutines
Calls P F Exclusive
Time
Inclusive
Time
Subroutine
711983µs28.6msMethod::Generate::Constructor::::generate_methodMethod::Generate::Constructor::generate_method
311816µs1.04msMethod::Generate::Constructor::::buildall_generatorMethod::Generate::Constructor::buildall_generator
6242703µs1.47msMethod::Generate::Constructor::::register_attribute_specsMethod::Generate::Constructor::register_attribute_specs
111579µs607µsMethod::Generate::Constructor::::BEGIN@10Method::Generate::Constructor::BEGIN@10
711487µs15.6msMethod::Generate::Constructor::::_assign_newMethod::Generate::Constructor::_assign_new
7432324µs747µsMethod::Generate::Constructor::::assert_constructorMethod::Generate::Constructor::assert_constructor
1011248µs2.16msMethod::Generate::Constructor::::install_delayedMethod::Generate::Constructor::install_delayed
7411237µs423µsMethod::Generate::Constructor::::current_constructorMethod::Generate::Constructor::current_constructor
711199µs29.3msMethod::Generate::Constructor::::__ANON__[:101]Method::Generate::Constructor::__ANON__[:101]
711137µs186µsMethod::Generate::Constructor::::_check_requiredMethod::Generate::Constructor::_check_required
4911107µs107µsMethod::Generate::Constructor::::_cap_callMethod::Generate::Constructor::_cap_call
743172µs72µsMethod::Generate::Constructor::::accessor_generatorMethod::Generate::Constructor::accessor_generator
61156µs103µsMethod::Generate::Constructor::::_build_construction_stringMethod::Generate::Constructor::_build_construction_string
71151µs629µsMethod::Generate::Constructor::::_handle_subconstructorMethod::Generate::Constructor::_handle_subconstructor
631145µs45µsMethod::Generate::Constructor::::CORE:substMethod::Generate::Constructor::CORE:subst (opcode)
213136µs36µsMethod::Generate::Constructor::::CORE:sortMethod::Generate::Constructor::CORE:sort (opcode)
82235µs138µsMethod::Generate::Constructor::::construction_stringMethod::Generate::Constructor::construction_string
11122µs26µsMethod::Generate::Constructor::::BEGIN@2Method::Generate::Constructor::BEGIN@2
11110µs10µsMethod::Generate::Constructor::::BEGIN@11Method::Generate::Constructor::BEGIN@11
11110µs415µsMethod::Generate::Constructor::::BEGIN@12Method::Generate::Constructor::BEGIN@12
1118µs23µsMethod::Generate::Constructor::::BEGIN@9Method::Generate::Constructor::BEGIN@9
5118µs8µsMethod::Generate::Constructor::::_generate_argsMethod::Generate::Constructor::_generate_args
1117µs32µsMethod::Generate::Constructor::::BEGIN@5Method::Generate::Constructor::BEGIN@5
1117µs26µsMethod::Generate::Constructor::::BEGIN@8Method::Generate::Constructor::BEGIN@8
1115µs34µsMethod::Generate::Constructor::::BEGIN@3Method::Generate::Constructor::BEGIN@3
1115µs33µsMethod::Generate::Constructor::::BEGIN@7Method::Generate::Constructor::BEGIN@7
3214µs4µsMethod::Generate::Constructor::::all_attribute_specsMethod::Generate::Constructor::all_attribute_specs
1113µs20µsMethod::Generate::Constructor::::BEGIN@6Method::Generate::Constructor::BEGIN@6
2112µs2µsMethod::Generate::Constructor::::_generate_args_via_buildargsMethod::Generate::Constructor::_generate_args_via_buildargs
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::Constructor;
2230µs230µs
# spent 26µs (22+4) within Method::Generate::Constructor::BEGIN@2 which was called: # once (22µs+4µs) by Moo::_constructor_maker_for at line 2
use strict;
# spent 26µs making 1 call to Method::Generate::Constructor::BEGIN@2 # spent 4µs making 1 call to strict::import
3219µs263µs
# spent 34µs (5+29) within Method::Generate::Constructor::BEGIN@3 which was called: # once (5µs+29µs) by Moo::_constructor_maker_for at line 3
use warnings;
# spent 34µs making 1 call to Method::Generate::Constructor::BEGIN@3 # spent 29µs making 1 call to warnings::import
4
5215µs257µs
# spent 32µs (7+25) within Method::Generate::Constructor::BEGIN@5 which was called: # once (7µs+25µs) by Moo::_constructor_maker_for at line 5
use Sub::Quote qw(quote_sub quotify);
# spent 32µs making 1 call to Method::Generate::Constructor::BEGIN@5 # spent 25µs making 1 call to Exporter::import
6220µs237µs
# spent 20µs (3+17) within Method::Generate::Constructor::BEGIN@6 which was called: # once (3µs+17µs) by Moo::_constructor_maker_for at line 6
use Sub::Defer;
# spent 20µs making 1 call to Method::Generate::Constructor::BEGIN@6 # spent 17µs making 1 call to Exporter::import
7228µs261µs
# spent 33µs (5+28) within Method::Generate::Constructor::BEGIN@7 which was called: # once (5µs+28µs) by Moo::_constructor_maker_for at line 7
use Moo::_Utils qw(_getstash _getglob _linear_isa);
# spent 33µs making 1 call to Method::Generate::Constructor::BEGIN@7 # spent 28µs making 1 call to Exporter::import
8237µs245µs
# spent 26µs (7+19) within Method::Generate::Constructor::BEGIN@8 which was called: # once (7µs+19µs) by Moo::_constructor_maker_for at line 8
use Scalar::Util qw(weaken);
# spent 26µs making 1 call to Method::Generate::Constructor::BEGIN@8 # spent 19µs making 1 call to Exporter::import
9218µs238µs
# spent 23µs (8+15) within Method::Generate::Constructor::BEGIN@9 which was called: # once (8µs+15µs) by Moo::_constructor_maker_for at line 9
use Carp qw(croak);
# spent 23µs making 1 call to Method::Generate::Constructor::BEGIN@9 # spent 15µs making 1 call to Exporter::import
102485µs1607µs
# spent 607µs (579+28) within Method::Generate::Constructor::BEGIN@10 which was called: # once (579µs+28µs) by Moo::_constructor_maker_for at line 10
use Carp::Heavy ();
# spent 607µs making 1 call to Method::Generate::Constructor::BEGIN@10
11162µs110µs
# spent 10µs within Method::Generate::Constructor::BEGIN@11 which was called: # once (10µs+0s) by Moo::_constructor_maker_for at line 11
BEGIN { our @CARP_NOT = qw(Sub::Defer) }
# spent 10µs making 1 call to Method::Generate::Constructor::BEGIN@11
12
# spent 415µs (10+405) within Method::Generate::Constructor::BEGIN@12 which was called: # once (10µs+405µs) by Moo::_constructor_maker_for at line 16
BEGIN {
1310s local $Moo::sification::disabled = 1;
1411µs require Moo;
1516µs1405µs Moo->import;
# spent 405µs making 1 call to Moo::import
1611.58ms1415µs}
# spent 415µs making 1 call to Method::Generate::Constructor::BEGIN@12
17
18
# spent 1.47ms (703µs+768µs) within Method::Generate::Constructor::register_attribute_specs which was called 62 times, avg 24µs/call: # 49 times (538µs+657µs) by Moo::has at line 119 of Moo.pm, avg 24µs/call # 10 times (112µs+88µs) by Moo::_constructor_maker_for at line 262 of Moo.pm, avg 20µs/call # 2 times (7µs+7µs) by Moo::_set_superclasses at line 158 of Moo.pm, avg 7µs/call # once (46µs+16µs) by Moo::_constructor_maker_for at line 250
sub register_attribute_specs {
196225µs my ($self, @new_specs) = @_;
206275µs62613µs $self->assert_constructor;
# spent 613µs making 62 calls to Method::Generate::Constructor::assert_constructor, avg 10µs/call
216233µs my $specs = $self->{attribute_specs}||={};
226269µs6255µs my $ag = $self->accessor_generator;
# spent 55µs making 62 calls to Method::Generate::Constructor::accessor_generator, avg 887ns/call
2362124µs while (my ($name, $new_spec) = splice @new_specs, 0, 2) {
2463136µs6345µs if ($name =~ s/^\+//) {
# spent 45µs making 63 calls to Method::Generate::Constructor::CORE:subst, avg 714ns/call
25 croak "has '+${name}' given but no ${name} attribute already exists"
2621µs unless my $old_spec = $specs->{$name};
2727µs228µs $ag->merge_specs($new_spec, $old_spec);
# spent 28µs making 2 calls to Method::Generate::Accessor::merge_specs, avg 14µs/call
28 }
296353µs1327µs if ($new_spec->{required}
# spent 27µs making 13 calls to Method::Generate::Accessor::has_default, avg 2µs/call
30 && !(
31 $ag->has_default($name, $new_spec)
32 || !exists $new_spec->{init_arg}
33 || defined $new_spec->{init_arg}
34 )
35 ) {
36 croak "You cannot have a required attribute (${name})"
37 . " without a default, builder, or an init_arg";
38 }
39 $new_spec->{index} = scalar keys %$specs
406344µs unless defined $new_spec->{index};
416338µs $specs->{$name} = $new_spec;
42 }
4362156µs $self;
44}
45
46
# spent 4µs within Method::Generate::Constructor::all_attribute_specs which was called 3 times, avg 1µs/call: # 2 times (2µs+0s) by Moo::_set_superclasses at line 158 of Moo.pm, avg 1µs/call # once (2µs+0s) by Moo::_constructor_maker_for at line 262 of Moo.pm
sub all_attribute_specs {
47 $_[0]->{attribute_specs}
4836µs}
49
50
# spent 72µs within Method::Generate::Constructor::accessor_generator which was called 74 times, avg 973ns/call: # 62 times (55µs+0s) by Method::Generate::Constructor::register_attribute_specs at line 22, avg 887ns/call # 7 times (7µs+0s) by Method::Generate::Constructor::_assign_new at line 209, avg 1µs/call # 5 times (10µs+0s) by Method::Generate::Constructor::_build_construction_string at line 68, avg 2µs/call
sub accessor_generator {
51 $_[0]->{accessor_generator}
5274120µs}
53
54
# spent 138µs (35+103) within Method::Generate::Constructor::construction_string which was called 8 times, avg 17µs/call: # 7 times (32µs+90µs) by Method::Generate::Constructor::generate_method at line 138, avg 17µs/call # once (3µs+13µs) by Moo::_constructor_maker_for at line 237 of Moo.pm
sub construction_string {
5583µs my ($self) = @_;
56 $self->{construction_string}
57829µs6103µs ||= $self->_build_construction_string;
# spent 103µs making 6 calls to Method::Generate::Constructor::_build_construction_string, avg 17µs/call
58}
59
60
# spent 1.04ms (816µs+220µs) within Method::Generate::Constructor::buildall_generator which was called 3 times, avg 345µs/call: # 3 times (816µs+220µs) by Method::Generate::Constructor::generate_method at line 138, avg 345µs/call
sub buildall_generator {
613510µs require Method::Generate::BuildAll;
62351µs388µs Method::Generate::BuildAll->new;
# spent 88µs making 3 calls to Moo::Object::new, avg 29µs/call
63}
64
65
# spent 103µs (56+47) within Method::Generate::Constructor::_build_construction_string which was called 6 times, avg 17µs/call: # 6 times (56µs+47µs) by Method::Generate::Constructor::construction_string at line 57, avg 17µs/call
sub _build_construction_string {
6661µs my ($self) = @_;
6763µs my $builder = $self->{construction_builder};
68670µs1147µs $builder ? $self->$builder
# spent 29µs making 5 calls to Method::Generate::Accessor::default_construction_string, avg 6µs/call # spent 10µs making 5 calls to Method::Generate::Constructor::accessor_generator, avg 2µs/call # spent 8µs making 1 call to Moo::__ANON__[Moo.pm:256]
69 : 'bless('
70 .$self->accessor_generator->default_construction_string
71 .', $class);'
72}
73
74
# spent 2.16ms (248µs+1.91) within Method::Generate::Constructor::install_delayed which was called 10 times, avg 216µs/call: # 10 times (248µs+1.91ms) by Moo::_constructor_maker_for at line 262 of Moo.pm, avg 216µs/call
sub install_delayed {
75104µs my ($self) = @_;
761019µs10124µs $self->assert_constructor;
# spent 124µs making 10 calls to Method::Generate::Constructor::assert_constructor, avg 12µs/call
77101µs my $package = $self->{package};
781071µs106µs my (undef, @isa) = @{_linear_isa($package)};
# spent 6µs making 10 calls to mro::get_linear_isa, avg 600ns/call
791013µs my $isa = join ',', @isa;
801045µs101.36ms my (undef, $from_file, $from_line) = caller(Carp::short_error_loc());
# spent 1.36ms making 10 calls to Carp::short_error_loc, avg 136µs/call
81
# spent 29.3ms (199µs+29.1) within Method::Generate::Constructor::__ANON__[/Users/ether/.perlbrew/libs/36.0@std/lib/perl5/Method/Generate/Constructor.pm:101] which was called 7 times, avg 4.19ms/call: # 7 times (199µs+29.1ms) by Sub::Defer::undefer_sub at line 85 of Sub/Defer.pm, avg 4.19ms/call
my $constructor = defer_sub "${package}::new" => sub {
827615µs7562µs my (undef, @new_isa) = @{_linear_isa($package)};
# spent 562µs making 7 calls to mro::get_linear_isa, avg 80µs/call
83715µs if (join(',', @new_isa) ne $isa) {
84 my ($expected_new) = grep { *{_getglob($_.'::new')}{CODE} } @isa;
85 my ($found_new) = grep { *{_getglob($_.'::new')}{CODE} } @new_isa;
86 if (($found_new||'') ne ($expected_new||'')) {
87 $found_new ||= 'none';
88 $expected_new ||= 'none';
89 croak "Expected parent constructor of $package to be"
90 . " $expected_new, but found $found_new: changing the inheritance"
91 . " chain (\@ISA) at runtime (after $from_file line $from_line) is unsupported";
92 }
93 }
94
95 my $constructor = $self->generate_method(
96754µs728.6ms $package, 'new', $self->{attribute_specs}, { no_install => 1, no_defer => 1 }
# spent 28.6ms making 7 calls to Method::Generate::Constructor::generate_method, avg 4.08ms/call
97 );
98712µs $self->{inlined} = 1;
99726µs77µs weaken($self->{constructor} = $constructor);
# spent 7µs making 7 calls to Scalar::Util::weaken, avg 1µs/call
100720µs $constructor;
1011050µs10411µs };
# spent 411µs making 10 calls to Sub::Defer::defer_sub, avg 41µs/call
1021012µs $self->{inlined} = 0;
1031020µs106µs weaken($self->{constructor} = $constructor);
# spent 6µs making 10 calls to Scalar::Util::weaken, avg 600ns/call
1041020µs $self;
105}
106
107
# spent 423µs (237+186) within Method::Generate::Constructor::current_constructor which was called 74 times, avg 6µs/call: # 74 times (237µs+186µs) by Method::Generate::Constructor::assert_constructor at line 115, avg 6µs/call
sub current_constructor {
1087421µs my ($self, $package) = @_;
10974218µs74186µs return *{_getglob("${package}::new")}{CODE};
# spent 186µs making 74 calls to Moo::_Utils::_getglob, avg 3µs/call
110}
111
112
# spent 747µs (324+423) within Method::Generate::Constructor::assert_constructor which was called 74 times, avg 10µs/call: # 62 times (275µs+338µs) by Method::Generate::Constructor::register_attribute_specs at line 20, avg 10µs/call # 10 times (44µs+80µs) by Method::Generate::Constructor::install_delayed at line 76, avg 12µs/call # 2 times (5µs+5µs) by Moo::_set_superclasses at line 155 of Moo.pm, avg 5µs/call
sub assert_constructor {
1137417µs my ($self) = @_;
1147468µs my $package = $self->{package} or return 1;
11574106µs74423µs my $current = $self->current_constructor($package)
# spent 423µs making 74 calls to Method::Generate::Constructor::current_constructor, avg 6µs/call
116 or return 1;
117 my $constructor = $self->{constructor}
1186427µs or croak "Unknown constructor for $package already exists";
1196424µs croak "Constructor for $package has been replaced with an unknown sub"
120 if $constructor != $current;
121 croak "Constructor for $package has been inlined and cannot be updated"
1226491µs if $self->{inlined};
123}
124
125
# spent 28.6ms (983µs+27.6) within Method::Generate::Constructor::generate_method which was called 7 times, avg 4.08ms/call: # 7 times (983µs+27.6ms) by Method::Generate::Constructor::__ANON__[/Users/ether/.perlbrew/libs/36.0@std/lib/perl5/Method/Generate/Constructor.pm:101] at line 96, avg 4.08ms/call
sub generate_method {
12674µs my ($self, $into, $name, $spec, $quote_opts) = @_;
127 $quote_opts = {
128717µs %{$quote_opts||{}},
129 package => $into,
130 };
1317588µs foreach my $no_init (grep !exists($spec->{$_}{init_arg}), keys %$spec) {
1324556µs $spec->{$no_init}{init_arg} = $no_init;
133 }
134716µs local $self->{captures} = {};
135
1367120µs778µs my $into_buildargs = $into->can('BUILDARGS');
# spent 78µs making 7 calls to UNIVERSAL::can, avg 11µs/call
137
1387182µs4817.8ms my $body
# spent 15.6ms making 7 calls to Method::Generate::Constructor::_assign_new, avg 2.23ms/call # spent 1.04ms making 3 calls to Method::Generate::Constructor::buildall_generator, avg 345µs/call # spent 629µs making 7 calls to Method::Generate::Constructor::_handle_subconstructor, avg 90µs/call # spent 186µs making 7 calls to Method::Generate::Constructor::_check_required, avg 27µs/call # spent 122µs making 7 calls to Method::Generate::Constructor::construction_string, avg 17µs/call # spent 101µs making 3 calls to Method::Generate::BuildAll::buildall_body_for, avg 34µs/call # spent 31µs making 7 calls to UNIVERSAL::can, avg 4µs/call # spent 8µs making 5 calls to Method::Generate::Constructor::_generate_args, avg 2µs/call # spent 2µs making 2 calls to Method::Generate::Constructor::_generate_args_via_buildargs, avg 1µs/call
139 = ' my $invoker = CORE::shift();'."\n"
140 . ' my $class = CORE::ref($invoker) ? CORE::ref($invoker) : $invoker;'."\n"
141 . $self->_handle_subconstructor($into, $name)
142 . ( $into_buildargs && $into_buildargs != \&Moo::Object::BUILDARGS
143 ? $self->_generate_args_via_buildargs
144 : $self->_generate_args
145 )
146 . $self->_check_required($spec)
147 . ' my $new = '.$self->construction_string.";\n"
148 . $self->_assign_new($spec)
149 . ( $into->can('BUILD')
150 ? $self->buildall_generator->buildall_body_for( $into, '$new', '$args' )
151 : ''
152 )
153 . ' return $new;'."\n";
154
155733µs717µs if ($into->can('DEMOLISH')) {
# spent 17µs making 7 calls to UNIVERSAL::can, avg 2µs/call
156 require Method::Generate::DemolishAll;
157 Method::Generate::DemolishAll->new->generate_method($into);
158 }
159 quote_sub
160 "${into}::${name}" => $body,
161763µs79.74ms $self->{captures}, $quote_opts||{}
# spent 9.74ms making 7 calls to Sub::Quote::quote_sub, avg 1.39ms/call
162 ;
163}
164
165
# spent 629µs (51+578) within Method::Generate::Constructor::_handle_subconstructor which was called 7 times, avg 90µs/call: # 7 times (51µs+578µs) by Method::Generate::Constructor::generate_method at line 138, avg 90µs/call
sub _handle_subconstructor {
16675µs my ($self, $into, $name) = @_;
167758µs7578µs if (my $gen = $self->{subconstructor_handler}) {
# spent 578µs making 7 calls to Sub::Quote::quotify, avg 83µs/call
168 ' if ($class ne '.quotify($into).') {'."\n".
169 $gen.
170 ' }'."\n";
171 } else {
172 ''
173 }
174}
175
176
# spent 107µs within Method::Generate::Constructor::_cap_call which was called 49 times, avg 2µs/call: # 49 times (107µs+0s) by Method::Generate::Constructor::_assign_new at line 223, avg 2µs/call
sub _cap_call {
1774910µs my ($self, $code, $captures) = @_;
1784958µs @{$self->{captures}}{keys %$captures} = values %$captures if $captures;
1794971µs $code;
180}
181
182
# spent 2µs within Method::Generate::Constructor::_generate_args_via_buildargs which was called 2 times, avg 1µs/call: # 2 times (2µs+0s) by Method::Generate::Constructor::generate_method at line 138, avg 1µs/call
sub _generate_args_via_buildargs {
18320s my ($self) = @_;
18426µs q{ my $args = $class->BUILDARGS(@_);}."\n"
185 .q{ Carp::croak("BUILDARGS did not return a hashref") unless CORE::ref($args) eq 'HASH';}
186 ."\n";
187}
188
189# inlined from Moo::Object - update that first.
190
# spent 8µs within Method::Generate::Constructor::_generate_args which was called 5 times, avg 2µs/call: # 5 times (8µs+0s) by Method::Generate::Constructor::generate_method at line 138, avg 2µs/call
sub _generate_args {
19152µs my ($self) = @_;
19257µs return <<'_EOA';
193 my $args = scalar @_ == 1
194 ? CORE::ref $_[0] eq 'HASH'
195 ? { %{ $_[0] } }
196 : Carp::croak("Single parameters to new() must be a HASH ref"
197 . " data => ". $_[0])
198 : @_ % 2
199 ? Carp::croak("The new() method for $class expects a hash reference or a"
200 . " key/value list. You passed an odd number of arguments")
201 : {@_}
202 ;
203_EOA
204
205}
206
207
# spent 15.6ms (487µs+15.2) within Method::Generate::Constructor::_assign_new which was called 7 times, avg 2.23ms/call: # 7 times (487µs+15.2ms) by Method::Generate::Constructor::generate_method at line 138, avg 2.23ms/call
sub _assign_new {
20874µs my ($self, $spec) = @_;
20978µs77µs my $ag = $self->accessor_generator;
# spent 7µs making 7 calls to Method::Generate::Constructor::accessor_generator, avg 1µs/call
21073µs my %test;
211724µs76µs NAME: foreach my $name (sort keys %$spec) {
# spent 6µs making 7 calls to Method::Generate::Constructor::CORE:sort, avg 857ns/call
212556µs my $attr_spec = $spec->{$name};
213 next NAME unless defined($attr_spec->{init_arg})
2145515µs66µs or $ag->has_eager_default($name, $attr_spec);
# spent 6µs making 6 calls to Method::Generate::Accessor::has_eager_default, avg 1µs/call
2154930µs $test{$name} = $attr_spec->{init_arg};
216 }
217 join '', map {
21856168µs78µs my $arg = $test{$_};
# spent 8µs making 7 calls to Method::Generate::Constructor::CORE:sort, avg 1µs/call
2194940µs49170µs my $arg_key = quotify($arg);
# spent 170µs making 49 calls to Sub::Quote::quotify, avg 3µs/call
2204918µs my $test = defined $arg ? "exists \$args->{$arg_key}" : undef;
2214916µs my $source = defined $arg ? "\$args->{$arg_key}" : undef;
2224914µs my $attr_spec = $spec->{$_};
2234992µs9815.0ms $self->_cap_call($ag->generate_populate_set(
# spent 14.8ms making 49 calls to Method::Generate::Accessor::generate_populate_set, avg 303µs/call # spent 107µs making 49 calls to Method::Generate::Constructor::_cap_call, avg 2µs/call
224 '$new', $_, $attr_spec, $source, $test, $arg,
225 ));
226 } sort keys %test;
227}
228
229
# spent 186µs (137+49) within Method::Generate::Constructor::_check_required which was called 7 times, avg 27µs/call: # 7 times (137µs+49µs) by Method::Generate::Constructor::generate_method at line 138, avg 27µs/call
sub _check_required {
23075µs my ($self, $spec) = @_;
231 my @required_init =
232 map $spec->{$_}{init_arg},
233 grep {
23462114µs722µs my $s = $spec->{$_}; # ignore required if default or builder set
# spent 22µs making 7 calls to Method::Generate::Constructor::CORE:sort, avg 3µs/call
235 $s->{required} and not($s->{builder} or exists $s->{default})
2365510µs } sort keys %$spec;
237710µs return '' unless @required_init;
238417µs927µs ' if (my @missing = grep !exists $args->{$_}, '
# spent 27µs making 9 calls to Sub::Quote::quotify, avg 3µs/call
239 .join(', ', map quotify($_), @required_init).') {'."\n"
240 .q{ Carp::croak("Missing required arguments: ".CORE::join(', ', sort @missing));}."\n"
241 ." }\n";
242}
243
244# bootstrap our own constructor
245sub new {
24610s my $class = shift;
24717µs14µs delete _getstash(__PACKAGE__)->{new};
# spent 4µs making 1 call to Moo::_Utils::_getstash
248112µs13µs bless $class->BUILDARGS(@_), $class;
# spent 3µs making 1 call to Moo::Object::BUILDARGS
249}
250115µs262µsMoo->_constructor_maker_for(__PACKAGE__)
# spent 62µs making 1 call to Method::Generate::Constructor::register_attribute_specs # spent 581µs making 1 call to Moo::_constructor_maker_for, recursion: max depth 1, sum of overlapping time 581µs
251->register_attribute_specs(
252 attribute_specs => {
253 is => 'ro',
254 reader => 'all_attribute_specs',
255 },
256 accessor_generator => { is => 'ro' },
257 construction_string => { is => 'lazy' },
258 construction_builder => { is => 'bare' },
259 subconstructor_handler => { is => 'ro' },
260 package => { is => 'bare' },
261);
26211µsif ($INC{'Moo/HandleMoose.pm'} && !$Moo::sification::disabled) {
263 Moo::HandleMoose::inject_fake_metaclass_for(__PACKAGE__);
264}
265
266120µs1;
 
# spent 36µs within Method::Generate::Constructor::CORE:sort which was called 21 times, avg 2µs/call: # 7 times (22µs+0s) by Method::Generate::Constructor::_check_required at line 234, avg 3µs/call # 7 times (8µs+0s) by Method::Generate::Constructor::_assign_new at line 218, avg 1µs/call # 7 times (6µs+0s) by Method::Generate::Constructor::_assign_new at line 211, avg 857ns/call
sub Method::Generate::Constructor::CORE:sort; # opcode
# spent 45µs within Method::Generate::Constructor::CORE:subst which was called 63 times, avg 714ns/call: # 63 times (45µs+0s) by Method::Generate::Constructor::register_attribute_specs at line 24, avg 714ns/call
sub Method::Generate::Constructor::CORE:subst; # opcode