← Index
NYTProf Performance Profile   « line view »
For ../prof.pl
  Run on Wed Dec 14 15:33:55 2022
Reported on Wed Dec 14 15:40:02 2022

Filename/Users/ether/.perlbrew/libs/36.0@std/lib/perl5/Moo.pm
StatementsExecuted 2127 statements in 11.2ms
Subroutines
Calls P F Exclusive
Time
Inclusive
Time
Subroutine
116435.88ms14.7msMoo::::_accessor_maker_forMoo::_accessor_maker_for
99432.69ms8.51msMoo::::_constructor_maker_forMoo::_constructor_maker_for (recurses: max depth 1, inclusive time 482µs)
1112.52ms17.1msMoo::::BEGIN@6Moo::BEGIN@6
17112.05ms2.23msMoo::::make_classMoo::make_class
45661.08ms88.8msMoo::::hasMoo::has
1711834µs834µsMoo::::CORE:sortMoo::CORE:sort (opcode)
1711456µs3.46msMoo::::_install_subsMoo::_install_subs
171717358µs6.62msMoo::::importMoo::import
1711260µs260µsMoo::::_gen_subsMoo::_gen_subs
211171µs2.41msMoo::::_set_superclassesMoo::_set_superclasses
6031156µs156µsMoo::::_maybe_reset_handlemooseMoo::_maybe_reset_handlemoose
99994µs7.85msMoo::::withMoo::with
2921151µs51µsMoo::::CORE:matchMoo::CORE:match (opcode)
11140µs46µsMoo::::BEGIN@2Moo::BEGIN@2
22230µs2.44msMoo::::extendsMoo::extends
55322µs1.15msMoo::::aroundMoo::around
71120µs20µsMoo::::is_classMoo::is_class
11115µs19µsMoo::::BEGIN@180Moo::BEGIN@180
22110µs513µsMoo::::beforeMoo::before
1119µs12µsMoo::::BEGIN@230Moo::BEGIN@230
1118µs13µsMoo::::BEGIN@70Moo::BEGIN@70
1118µs10µsMoo::::__ANON__[:256]Moo::__ANON__[:256]
1117µs22µsMoo::::BEGIN@18Moo::BEGIN@18
1115µs9µsMoo::::BEGIN@275Moo::BEGIN@275
1114µs4µsMoo::::BEGIN@19Moo::BEGIN@19
1114µs29µsMoo::::BEGIN@4Moo::BEGIN@4
1113µs22µsMoo::::BEGIN@3Moo::BEGIN@3
0000s0sMoo::::__ANON__[:101]Moo::__ANON__[:101]
0000s0sMoo::::__ANON__[:106]Moo::__ANON__[:106]
0000s0sMoo::::__ANON__[:126]Moo::__ANON__[:126]
0000s0sMoo::::__ANON__[:133]Moo::__ANON__[:133]
0000s0sMoo::::__ANON__[:248]Moo::__ANON__[:248]
0000s0sMoo::::_concrete_methods_ofMoo::_concrete_methods_of
0000s0sMoo::::afterMoo::after
0000s0sMoo::::unimportMoo::unimport
Call graph for these subroutines as a Graphviz dot language file.
Line State
ments
Time
on line
Calls Time
in subs
Code
1package Moo;
2245µs252µs
# spent 46µs (40+6) within Moo::BEGIN@2 which was called: # once (40µs+6µs) by OpenAPI::Modern::BEGIN@11 at line 2
use strict;
# spent 46µs making 1 call to Moo::BEGIN@2 # spent 6µs making 1 call to strict::import
3216µs241µs
# spent 22µs (3+19) within Moo::BEGIN@3 which was called: # once (3µs+19µs) by OpenAPI::Modern::BEGIN@11 at line 3
use warnings;
# spent 22µs making 1 call to Moo::BEGIN@3 # spent 19µs making 1 call to warnings::import
4228µs254µs
# spent 29µs (4+25) within Moo::BEGIN@4 which was called: # once (4µs+25µs) by OpenAPI::Modern::BEGIN@11 at line 4
no warnings 'once';
# spent 29µs making 1 call to Moo::BEGIN@4 # spent 25µs making 1 call to warnings::unimport
5
61439µs
# spent 17.1ms (2.52+14.6) within Moo::BEGIN@6 which was called: # once (2.52ms+14.6ms) by OpenAPI::Modern::BEGIN@11 at line 17
use Moo::_Utils qw(
7 _check_tracked
8 _getglob
9 _getstash
10 _install_coderef
11 _install_modifier
12 _install_tracked
13 _linear_isa
14 _load_module
15 _set_loaded
16 _unimport_coderefs
17149µs217.2ms);
# spent 17.1ms making 1 call to Moo::BEGIN@6 # spent 104µs making 1 call to Exporter::import
18243µs237µs
# spent 22µs (7+15) within Moo::BEGIN@18 which was called: # once (7µs+15µs) by OpenAPI::Modern::BEGIN@11 at line 18
use Carp qw(croak);
# spent 22µs making 1 call to Moo::BEGIN@18 # spent 15µs making 1 call to Exporter::import
19
# spent 4µs within Moo::BEGIN@19 which was called: # once (4µs+0s) by OpenAPI::Modern::BEGIN@11 at line 27
BEGIN {
2013µs our @CARP_NOT = qw(
21 Method::Generate::Constructor
22 Method::Generate::Accessor
23 Moo::sification
24 Moo::_Utils
25 Moo::Role
26 );
271241µs14µs}
# spent 4µs making 1 call to Moo::BEGIN@19
28
2910sour $VERSION = '2.005004';
3011µs$VERSION =~ tr/_//d;
31
3211.29msrequire Moo::sification;
3313µs13µsMoo::sification->import;
# spent 3µs making 1 call to Moo::sification::import
34
35our %MAKERS;
36
37
# spent 6.62ms (358µs+6.26) within Moo::import which was called 17 times, avg 389µs/call: # once (22µs+2.25ms) by OpenAPI::Modern::BEGIN@11 at line 11 of OpenAPI/Modern.pm # once (20µs+320µs) by JSON::Schema::Modern::BEGIN@11 at line 11 of JSON/Schema/Modern.pm # once (19µs+318µs) by JSON::Schema::Modern::Vocabulary::OpenAPI::BEGIN@10 at line 10 of JSON/Schema/Modern/Vocabulary/OpenAPI.pm # once (23µs+308µs) by JSON::Schema::Modern::Document::OpenAPI::BEGIN@11 at line 11 of JSON/Schema/Modern/Document/OpenAPI.pm # once (21µs+276µs) by JSON::Schema::Modern::Annotation::BEGIN@10 at line 10 of JSON/Schema/Modern/Annotation.pm # once (20µs+275µs) by JSON::Schema::Modern::Vocabulary::Applicator::BEGIN@10 at line 10 of JSON/Schema/Modern/Vocabulary/Applicator.pm # once (19µs+274µs) by Method::Generate::Constructor::BEGIN@12 at line 15 of Method/Generate/Constructor.pm # once (21µs+266µs) by JSON::Schema::Modern::Vocabulary::MetaData::BEGIN@10 at line 10 of JSON/Schema/Modern/Vocabulary/MetaData.pm # once (21µs+257µs) by JSON::Schema::Modern::Document::BEGIN@10 at line 10 of JSON/Schema/Modern/Document.pm # once (28µs+244µs) by JSON::Schema::Modern::Error::BEGIN@10 at line 10 of JSON/Schema/Modern/Error.pm # once (25µs+246µs) by JSON::Schema::Modern::Vocabulary::FormatAnnotation::BEGIN@10 at line 10 of JSON/Schema/Modern/Vocabulary/FormatAnnotation.pm # once (24µs+246µs) by JSON::Schema::Modern::Vocabulary::Core::BEGIN@10 at line 10 of JSON/Schema/Modern/Vocabulary/Core.pm # once (20µs+245µs) by JSON::Schema::Modern::Result::BEGIN@10 at line 10 of JSON/Schema/Modern/Result.pm # once (25µs+229µs) by JSON::Schema::Modern::Vocabulary::Content::BEGIN@10 at line 10 of JSON/Schema/Modern/Vocabulary/Content.pm # once (19µs+177µs) by JSON::Schema::Modern::Vocabulary::Unevaluated::BEGIN@10 at line 10 of JSON/Schema/Modern/Vocabulary/Unevaluated.pm # once (15µs+165µs) by JSON::Schema::Modern::Vocabulary::Validation::BEGIN@10 at line 10 of JSON/Schema/Modern/Vocabulary/Validation.pm # once (16µs+159µs) by JSON::Schema::Modern::Vocabulary::FormatAssertion::BEGIN@10 at line 10 of JSON/Schema/Modern/Vocabulary/FormatAssertion.pm
sub import {
381714µs my $target = caller;
39176µs my $class = shift;
401746µs1542µs if ($INC{'Role/Tiny.pm'} and Role::Tiny->is_role($target)) {
# spent 42µs making 15 calls to Role::Tiny::is_role, avg 3µs/call
41 croak "Cannot import Moo into a role";
42 }
43
441753µs17168µs _set_loaded(caller);
# spent 168µs making 17 calls to Moo::_Utils::_set_loaded, avg 10µs/call
45
461765µs1724µs strict->import;
# spent 24µs making 17 calls to strict::import, avg 1µs/call
471716µs17338µs warnings->import;
# spent 338µs making 17 calls to warnings::import, avg 20µs/call
48
491740µs173.46ms $class->_install_subs($target, @_);
# spent 3.46ms making 17 calls to Moo::_install_subs, avg 203µs/call
501734µs172.23ms $class->make_class($target);
# spent 2.23ms making 17 calls to Moo::make_class, avg 131µs/call
5117145µs return;
52}
53
54
# spent 2.23ms (2.05+178µs) within Moo::make_class which was called 17 times, avg 131µs/call: # 17 times (2.05ms+178µs) by Moo::import at line 50, avg 131µs/call
sub make_class {
551711µs my ($me, $target) = @_;
56
571721µs my $makers = $MAKERS{$target} ||= {};
58176µs return $target if $makers->{is_class};
59
601751µs1733µs my $stash = _getstash($target);
# spent 33µs making 17 calls to Moo::_Utils::_getstash, avg 2µs/call
61 $makers->{non_methods} = {
62 map +($_ => \&{"${target}::${_}"}),
6317658µs29251µs grep exists &{"${target}::${_}"},
# spent 51µs making 292 calls to Moo::CORE:match, avg 175ns/call
64 grep !/::\z/ && !/\A\(/,
65 keys %$stash
66 };
67
681713µs $makers->{is_class} = 1;
69 {
7019716µs218µs
# spent 13µs (8+5) within Moo::BEGIN@70 which was called: # once (8µs+5µs) by OpenAPI::Modern::BEGIN@11 at line 70
no strict 'refs';
# spent 13µs making 1 call to Moo::BEGIN@70 # spent 5µs making 1 call to strict::unimport
71 @{"${target}::ISA"} = do {
7234538µs require Moo::Object; ('Moo::Object');
7317268µs } unless @{"${target}::ISA"};
74 }
75179µs if ($INC{'Moo/HandleMoose.pm'} && !$Moo::sification::disabled) {
76 Moo::HandleMoose::inject_fake_metaclass_for($target);
77 }
781744µs return $target;
79}
80
81
# spent 20µs within Moo::is_class which was called 7 times, avg 3µs/call: # 7 times (20µs+0s) by MooX::TypeTiny::import at line 14 of MooX/TypeTiny.pm, avg 3µs/call
sub is_class {
8275µs my ($me, $class) = @_;
83730µs return $MAKERS{$class} && $MAKERS{$class}{is_class};
84}
85
86
# spent 3.46ms (456µs+3.00) within Moo::_install_subs which was called 17 times, avg 203µs/call: # 17 times (456µs+3.00ms) by Moo::import at line 49, avg 203µs/call
sub _install_subs {
871713µs my ($me, $target) = @_;
881780µs17260µs my %install = $me->_gen_subs($target);
# spent 260µs making 17 calls to Moo::_gen_subs, avg 15µs/call
89 _install_tracked $target => $_ => $install{$_}
90171.04ms1192.74ms for sort keys %install;
# spent 1.91ms making 102 calls to Moo::_Utils::_install_tracked, avg 19µs/call # spent 834µs making 17 calls to Moo::CORE:sort, avg 49µs/call
911748µs return;
92}
93
94
# spent 260µs within Moo::_gen_subs which was called 17 times, avg 15µs/call: # 17 times (260µs+0s) by Moo::_install_subs at line 88, avg 15µs/call
sub _gen_subs {
951711µs my ($me, $target) = @_;
96 return (
97
# spent 2.44ms (30µs+2.41) within Moo::extends which was called 2 times, avg 1.22ms/call: # once (7µs+1.73ms) by JSON::Schema::Modern::Document::extends at line 6 of (eval 258)[Class/Method/Modifiers.pm:148] # once (23µs+682µs) by JSON::Schema::Modern::Document::OpenAPI::extends at line 6 of (eval 382)[Class/Method/Modifiers.pm:148]
extends => sub {
9824µs22.41ms $me->_set_superclasses($target, @_);
# spent 2.41ms making 2 calls to Moo::_set_superclasses, avg 1.20ms/call
9925µs25µs $me->_maybe_reset_handlemoose($target);
# spent 5µs making 2 calls to Moo::_maybe_reset_handlemoose, avg 2µs/call
10028µs return;
101 },
102
# spent 7.85ms (94µs+7.76) within Moo::with which was called 9 times, avg 872µs/call: # once (18µs+4.16ms) by Module::Runtime::require_module at line 20 of JSON/Schema/Modern/Vocabulary/Core.pm # once (13µs+526µs) by Module::Runtime::require_module at line 21 of JSON/Schema/Modern/Vocabulary/FormatAssertion.pm # once (11µs+501µs) by Module::Runtime::require_module at line 22 of JSON/Schema/Modern/Vocabulary/Content.pm # once (9µs+502µs) by JSON::Schema::Modern::Vocabulary::Applicator::BEGIN@21 at line 21 of JSON/Schema/Modern/Vocabulary/Unevaluated.pm # once (9µs+479µs) by Module::Runtime::require_module at line 21 of JSON/Schema/Modern/Vocabulary/FormatAnnotation.pm # once (10µs+476µs) by Module::Runtime::require_module at line 20 of JSON/Schema/Modern/Vocabulary/OpenAPI.pm # once (10µs+447µs) by Module::Runtime::require_module at line 23 of JSON/Schema/Modern/Vocabulary/Validation.pm # once (7µs+345µs) by Module::Runtime::require_module at line 24 of JSON/Schema/Modern/Vocabulary/Applicator.pm # once (7µs+316µs) by Module::Runtime::require_module at line 20 of JSON/Schema/Modern/Vocabulary/MetaData.pm
with => sub {
103910µs require Moo::Role;
104936µs97.74ms Moo::Role->apply_roles_to_package($target, @_);
# spent 7.74ms making 9 calls to Role::Tiny::apply_roles_to_package, avg 860µs/call
105946µs917µs $me->_maybe_reset_handlemoose($target);
# spent 17µs making 9 calls to Moo::_maybe_reset_handlemoose, avg 2µs/call
106 },
107
# spent 88.8ms (1.08+87.7) within Moo::has which was called 45 times, avg 1.97ms/call: # 16 times (333µs+38.9ms) by JSON::Schema::Modern::has at line 6 of (eval 33)[Class/Method/Modifiers.pm:148], avg 2.45ms/call # 8 times (181µs+22.2ms) by JSON::Schema::Modern::Document::has at line 6 of (eval 256)[Class/Method/Modifiers.pm:148], avg 2.80ms/call # 6 times (162µs+9.54ms) by MooX::HandlesVia::has at line 31 of MooX/HandlesVia.pm, avg 1.62ms/call # 6 times (146µs+8.81ms) by JSON::Schema::Modern::Result::has at line 6 of (eval 219)[Class/Method/Modifiers.pm:148], avg 1.49ms/call # 5 times (152µs+5.19ms) by JSON::Schema::Modern::Error::has at line 6 of (eval 192)[Class/Method/Modifiers.pm:148], avg 1.07ms/call # 4 times (102µs+3.04ms) by JSON::Schema::Modern::Annotation::has at line 6 of (eval 225)[Class/Method/Modifiers.pm:148], avg 784µs/call
has => sub {
1084518µs my $name_proto = shift;
1094556µs my @name_proto = ref $name_proto eq 'ARRAY' ? @$name_proto : $name_proto;
1104540µs if (@_ % 2 != 0) {
111 croak "Invalid options for " . join(', ', map "'$_'", @name_proto)
112 . " attribute(s): even number of arguments expected, got " . scalar @_;
113 }
1144564µs my %spec = @_;
1154527µs foreach my $name (@name_proto) {
116 # Note that when multiple attributes specified, each attribute
117 # needs a separate \%specs hashref
1184955µs my $spec_ref = @name_proto > 1 ? +{%spec} : \%spec;
11949124µs981.70ms $me->_constructor_maker_for($target)
# spent 1.62ms making 49 calls to Method::Generate::Constructor::register_attribute_specs, avg 33µs/call # spent 72µs making 49 calls to Moo::_constructor_maker_for, avg 1µs/call
120 ->register_attribute_specs($name, $spec_ref);
12149153µs9885.9ms $me->_accessor_maker_for($target)
# spent 85.8ms making 49 calls to Method::Generate::Accessor::generate_method, avg 1.75ms/call # spent 54µs making 49 calls to Moo::_accessor_maker_for, avg 1µs/call
122 ->generate_method($target, $name, $spec_ref);
12349161µs49134µs $me->_maybe_reset_handlemoose($target);
# spent 134µs making 49 calls to Moo::_maybe_reset_handlemoose, avg 3µs/call
124 }
12545155µs return;
126 },
127 (map {
12868217µs my $type = $_;
129 (
130
# spent 513µs (10+503) within Moo::before which was called 2 times, avg 256µs/call: # once (4µs+308µs) by OpenAPI::Modern::BEGIN@26 at line 909 of JSON/Schema/Modern.pm # once (6µs+195µs) by OpenAPI::Modern::BEGIN@26 at line 124 of JSON/Schema/Modern.pm # spent 1.15ms (22µs+1.12) within Moo::around which was called 5 times, avg 229µs/call: # once (4µs+266µs) by JSON::Schema::Modern::BEGIN@35 at line 135 of JSON/Schema/Modern/Document.pm # once (6µs+238µs) by OpenAPI::Modern::BEGIN@26 at line 907 of JSON/Schema/Modern.pm # once (6µs+219µs) by main::BEGIN@2 at line 79 of OpenAPI/Modern.pm # once (4µs+215µs) by OpenAPI::Modern::BEGIN@26 at line 133 of JSON/Schema/Modern.pm # once (2µs+187µs) by OpenAPI::Modern::BEGIN@26 at line 646 of JSON/Schema/Modern.pm
$type => sub {
131715µs71.63ms _install_modifier($target, $type, @_);
# spent 1.63ms making 7 calls to Moo::_Utils::_install_modifier, avg 233µs/call
132723µs return;
133 },
134 )
1355146µs } qw(before after around)),
136 );
137}
138
139sub unimport {
140 my $target = caller;
141 _unimport_coderefs($target);
142}
143
144
# spent 2.41ms (171µs+2.23) within Moo::_set_superclasses which was called 2 times, avg 1.20ms/call: # 2 times (171µs+2.23ms) by Moo::extends at line 98, avg 1.20ms/call
sub _set_superclasses {
14522µs my $class = shift;
14620s my $target = shift;
14723µs foreach my $superclass (@_) {
14823µs21.44ms _load_module($superclass);
# spent 1.44ms making 2 calls to Moo::_Utils::_load_module, avg 718µs/call
149210µs26µs if ($INC{'Role/Tiny.pm'} && Role::Tiny->is_role($superclass)) {
# spent 6µs making 2 calls to Role::Tiny::is_role, avg 3µs/call
150 croak "Can't extend role '$superclass'";
151 }
152 }
153229µs26µs @{*{_getglob("${target}::ISA")}} = @_;
# spent 6µs making 2 calls to Moo::_Utils::_getglob, avg 3µs/call
15422µs if (my $old = delete $Moo::MAKERS{$target}{constructor}) {
15524µs219µs $old->assert_constructor;
# spent 19µs making 2 calls to Method::Generate::Constructor::assert_constructor, avg 10µs/call
156228µs24µs delete _getstash($target)->{new};
# spent 4µs making 2 calls to Moo::_Utils::_getstash, avg 2µs/call
157 Moo->_constructor_maker_for($target)
158211µs6761µs ->register_attribute_specs(%{$old->all_attribute_specs});
# spent 733µs making 2 calls to Moo::_constructor_maker_for, avg 366µs/call # spent 27µs making 2 calls to Method::Generate::Constructor::register_attribute_specs, avg 14µs/call # spent 1µs making 2 calls to Method::Generate::Constructor::all_attribute_specs, avg 500ns/call
159 }
160 elsif (!$target->isa('Moo::Object')) {
161 Moo->_constructor_maker_for($target);
162 }
163276µs23µs $Moo::HandleMoose::MOUSE{$target} = [
# spent 3µs making 2 calls to UNIVERSAL::can, avg 2µs/call
164 grep defined, map Mouse::Util::find_meta($_), @_
165 ] if Mouse::Util->can('find_meta');
166}
167
168
# spent 156µs within Moo::_maybe_reset_handlemoose which was called 60 times, avg 3µs/call: # 49 times (134µs+0s) by Moo::has at line 123, avg 3µs/call # 9 times (17µs+0s) by Moo::with at line 105, avg 2µs/call # 2 times (5µs+0s) by Moo::extends at line 99, avg 2µs/call
sub _maybe_reset_handlemoose {
1696025µs my ($class, $target) = @_;
17060210µs if ($INC{'Moo/HandleMoose.pm'} && !$Moo::sification::disabled) {
171 Moo::HandleMoose::maybe_reinject_fake_metaclass_for($target);
172 }
173}
174
175
# spent 14.7ms (5.88+8.79) within Moo::_accessor_maker_for which was called 116 times, avg 126µs/call: # 49 times (54µs+0s) by Moo::has at line 121, avg 1µs/call # 47 times (5.62ms+8.65ms) by MooX::TypeTiny::__ANON__[/Users/ether/.perlbrew/libs/36.0@std/lib/perl5/MooX/TypeTiny.pm:25] at line 19 of MooX/TypeTiny.pm, avg 304µs/call # 10 times (164µs+127µs) by Moo::Role::_maybe_make_accessors at line 254 of Moo/Role.pm, avg 29µs/call # 10 times (40µs+20µs) by Moo::_constructor_maker_for at line 207, avg 6µs/call
sub _accessor_maker_for {
17611645µs my ($class, $target) = @_;
17711654µs return unless $MAKERS{$target};
178116322µs $MAKERS{$target}{accessor} ||= do {
1791812µs my $maker_class = do {
1802293µs223µs
# spent 19µs (15+4) within Moo::BEGIN@180 which was called: # once (15µs+4µs) by OpenAPI::Modern::BEGIN@11 at line 180
no strict 'refs';
# spent 19µs making 1 call to Moo::BEGIN@180 # spent 4µs making 1 call to strict::unimport
1811814µs if (my $m = do {
18218121µs1856µs my @isa = @{_linear_isa($target)};
# spent 56µs making 18 calls to mro::get_linear_isa, avg 3µs/call
183186µs shift @isa;
1841874µs if (my ($parent_new) = grep +(defined &{$_.'::new'}), @isa) {
185 $MAKERS{$parent_new} && $MAKERS{$parent_new}{accessor};
186 }
187 else {
188 undef;
189 }
190 }) {
191 ref($m);
192 } else {
19318830µs require Method::Generate::Accessor;
194182µs 'Method::Generate::Accessor'
195 }
196 };
1971854µs18221µs $maker_class->new;
# spent 221µs making 18 calls to Moo::Object::new, avg 12µs/call
198 }
199}
200
201
# spent 8.51ms (2.69+5.81) within Moo::_constructor_maker_for which was called 99 times, avg 86µs/call: # 49 times (72µs+0s) by Moo::has at line 119, avg 1µs/call # 47 times (2.50ms+5.20ms) by MooX::TypeTiny::__ANON__[/Users/ether/.perlbrew/libs/36.0@std/lib/perl5/MooX/TypeTiny.pm:25] at line 24 of MooX/TypeTiny.pm, avg 164µs/call # 2 times (76µs+657µs) by Moo::_set_superclasses at line 158, avg 366µs/call # once (45µs+-45µs) by Moo::_constructor_maker_for at line 250 of Method/Generate/Constructor.pm
sub _constructor_maker_for {
2029934µs my ($class, $target) = @_;
2039937µs return unless $MAKERS{$target};
20499259µs $MAKERS{$target}{constructor} ||= do {
20510434µs require Method::Generate::Constructor;
206
2071058µs1060µs my %construct_opts = (
# spent 60µs making 10 calls to Moo::_accessor_maker_for, avg 6µs/call
208 package => $target,
209 accessor_generator => $class->_accessor_maker_for($target),
210 subconstructor_handler => (
211 ' if ($Moo::MAKERS{$class}) {'."\n"
212 .' if ($Moo::MAKERS{$class}{constructor}) {'."\n"
213 .' package '.$target.';'."\n"
214 .' return $invoker->SUPER::new(@_);'."\n"
215 .' }'."\n"
216 .' '.$class.'->_constructor_maker_for($class);'."\n"
217 .' return $invoker->new(@_)'.";\n"
218 .' } elsif ($INC{"Moose.pm"} and my $meta = Class::MOP::get_metaclass_by_name($class)) {'."\n"
219 .' return $meta->new_object('."\n"
220 .' $class->can("BUILDARGS") ? $class->BUILDARGS(@_)'."\n"
221 .' : $class->Moo::Object::BUILDARGS(@_)'."\n"
222 .' );'."\n"
223 .' }'."\n"
224 ),
225 );
226
227102µs my $con;
2281040µs1010µs my @isa = @{_linear_isa($target)};
# spent 10µs making 10 calls to mro::get_linear_isa, avg 1µs/call
229107µs shift @isa;
2302268µs215µs
# spent 12µs (9+3) within Moo::BEGIN@230 which was called: # once (9µs+3µs) by OpenAPI::Modern::BEGIN@11 at line 230
no strict 'refs';
# spent 12µs making 1 call to Moo::BEGIN@230 # spent 3µs making 1 call to strict::unimport
2311029µs if (my ($parent_new) = grep +(defined &{$_.'::new'}), @isa) {
2321018µs11µs if ($parent_new eq 'Moo::Object') {
# spent 1µs making 1 call to UNIVERSAL::can
233 # no special constructor needed
234 }
235 elsif (my $makers = $MAKERS{$parent_new}) {
23611µs $con = $makers->{constructor};
23713µs123µs $construct_opts{construction_string} = $con->construction_string
238 if $con;
239 }
240 elsif ($parent_new->can('BUILDALL')) {
241 $construct_opts{construction_builder} = sub {
242 my $inv = $target->can('BUILDARGS') ? '' : 'Moo::Object::';
243 'do {'
244 .' my $args = $class->'.$inv.'BUILDARGS(@_);'
245 .' $args->{__no_BUILD__} = 1;'
246 .' $invoker->'.$target.'::SUPER::new($args);'
247 .'}'
248 };
249 }
250 else {
251
# spent 10µs (8+2) within Moo::__ANON__[/Users/ether/.perlbrew/libs/36.0@std/lib/perl5/Moo.pm:256] which was called: # once (8µs+2µs) by Method::Generate::Constructor::_build_construction_string at line 68 of Method/Generate/Constructor.pm
$construct_opts{construction_builder} = sub {
252112µs12µs '$invoker->'.$target.'::SUPER::new('
# spent 2µs making 1 call to UNIVERSAL::can
253 .($target->can('FOREIGNBUILDARGS') ?
254 '$class->FOREIGNBUILDARGS(@_)' : '@_')
255 .')'
25611µs };
257 }
258 }
259 ($con ? ref($con) : 'Method::Generate::Constructor')
260 ->new(%construct_opts)
261 ->install_delayed
2621091µs314.63ms ->register_attribute_specs(%{$con?$con->all_attribute_specs:{}})
# spent 2.75ms making 10 calls to Method::Generate::Constructor::install_delayed, avg 274µs/call # spent 1.61ms making 10 calls to Method::Generate::Constructor::new, avg 162µs/call # spent 272µs making 10 calls to Method::Generate::Constructor::register_attribute_specs, avg 27µs/call # spent 3µs making 1 call to Method::Generate::Constructor::all_attribute_specs
263 }
264}
265
266sub _concrete_methods_of {
267 my ($me, $class) = @_;
268 my $makers = $MAKERS{$class};
269
270 my $non_methods = $makers->{non_methods} || {};
271 my $stash = _getstash($class);
272
273 my $subs = {
274 map {;
2752252µs213µs
# spent 9µs (5+4) within Moo::BEGIN@275 which was called: # once (5µs+4µs) by OpenAPI::Modern::BEGIN@11 at line 275
no strict 'refs';
# spent 9µs making 1 call to Moo::BEGIN@275 # spent 4µs making 1 call to strict::unimport
276 ${"${class}::${_}"} = ${"${class}::${_}"};
277 ($_ => \&{"${class}::${_}"});
278 }
279 grep exists &{"${class}::${_}"},
280 grep !/::\z/,
281 keys %$stash
282 };
283
284 my %tracked = map +($_ => 1), _check_tracked($class, [ keys %$subs ]);
285
286 return {
287 map +($_ => \&{"${class}::${_}"}),
288 grep !($non_methods->{$_} && $non_methods->{$_} == $subs->{$_}),
289 grep !exists $tracked{$_},
290 keys %$subs
291 };
292}
293
29416µs1;
295__END__
 
# spent 51µs within Moo::CORE:match which was called 292 times, avg 175ns/call: # 292 times (51µs+0s) by Moo::make_class at line 63, avg 175ns/call
sub Moo::CORE:match; # opcode
# spent 834µs within Moo::CORE:sort which was called 17 times, avg 49µs/call: # 17 times (834µs+0s) by Moo::_install_subs at line 90, avg 49µs/call
sub Moo::CORE:sort; # opcode