← 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:29 2022

Filename/Users/ether/.perlbrew/libs/36.0@std/lib/perl5/Moo.pm
StatementsExecuted 2127 statements in 13.3ms
Subroutines
Calls P F Exclusive
Time
Inclusive
Time
Subroutine
116436.38ms14.9msMoo::::_accessor_maker_forMoo::_accessor_maker_for
17114.08ms4.30msMoo::::make_classMoo::make_class
1113.47ms16.1msMoo::::BEGIN@6Moo::BEGIN@6
99432.39ms7.10msMoo::::_constructor_maker_forMoo::_constructor_maker_for (recurses: max depth 1, inclusive time 338µs)
45661.02ms93.1msMoo::::hasMoo::has
1711509µs3.01msMoo::::_install_subsMoo::_install_subs
171717411µs8.38msMoo::::importMoo::import
1711292µs292µsMoo::::_gen_subsMoo::_gen_subs
211138µs2.09msMoo::::_set_superclassesMoo::_set_superclasses
6031122µs122µsMoo::::_maybe_reset_handlemooseMoo::_maybe_reset_handlemoose
999112µs8.69msMoo::::withMoo::with
171168µs68µsMoo::::CORE:sortMoo::CORE:sort (opcode)
2921161µs61µsMoo::::CORE:matchMoo::CORE:match (opcode)
11144µs55µsMoo::::BEGIN@180Moo::BEGIN@180
55327µs1.43msMoo::::aroundMoo::around
11125µs28µsMoo::::BEGIN@2Moo::BEGIN@2
11124µs43µsMoo::::BEGIN@70Moo::BEGIN@70
71122µs22µsMoo::::is_classMoo::is_class
22215µs2.10msMoo::::extendsMoo::extends
11114µs54µsMoo::::BEGIN@18Moo::BEGIN@18
11111µs18µsMoo::::BEGIN@230Moo::BEGIN@230
11111µs16µsMoo::::BEGIN@275Moo::BEGIN@275
22111µs413µsMoo::::beforeMoo::before
1116µs21µsMoo::::BEGIN@4Moo::BEGIN@4
1116µs8µsMoo::::__ANON__[:256]Moo::__ANON__[:256]
1114µs4µsMoo::::BEGIN@19Moo::BEGIN@19
1114µs26µ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;
2226µs231µs
# spent 28µs (25+3) within Moo::BEGIN@2 which was called: # once (25µs+3µs) by OpenAPI::Modern::BEGIN@11 at line 2
use strict;
# spent 28µs making 1 call to Moo::BEGIN@2 # spent 3µs making 1 call to strict::import
3217µs248µs
# spent 26µs (4+22) within Moo::BEGIN@3 which was called: # once (4µs+22µs) by OpenAPI::Modern::BEGIN@11 at line 3
use warnings;
# spent 26µs making 1 call to Moo::BEGIN@3 # spent 22µs making 1 call to warnings::import
4226µs236µs
# spent 21µs (6+15) within Moo::BEGIN@4 which was called: # once (6µs+15µs) by OpenAPI::Modern::BEGIN@11 at line 4
no warnings 'once';
# spent 21µs making 1 call to Moo::BEGIN@4 # spent 15µs making 1 call to warnings::unimport
5
61374µs
# spent 16.1ms (3.47+12.7) within Moo::BEGIN@6 which was called: # once (3.47ms+12.7ms) 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
17172µs216.3ms);
# spent 16.1ms making 1 call to Moo::BEGIN@6 # spent 155µs making 1 call to Exporter::import
18263µs294µs
# spent 54µs (14+40) within Moo::BEGIN@18 which was called: # once (14µs+40µs) by OpenAPI::Modern::BEGIN@11 at line 18
use Carp qw(croak);
# spent 54µs making 1 call to Moo::BEGIN@18 # spent 40µ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 {
2014µs our @CARP_NOT = qw(
21 Method::Generate::Constructor
22 Method::Generate::Accessor
23 Moo::sification
24 Moo::_Utils
25 Moo::Role
26 );
271353µs14µs}
# spent 4µs making 1 call to Moo::BEGIN@19
28
2911µsour $VERSION = '2.005004';
3012µs$VERSION =~ tr/_//d;
31
3211.42msrequire Moo::sification;
3312µs14µsMoo::sification->import;
# spent 4µs making 1 call to Moo::sification::import
34
35our %MAKERS;
36
37
# spent 8.38ms (411µs+7.96) within Moo::import which was called 17 times, avg 493µs/call: # once (26µs+3.68ms) by OpenAPI::Modern::BEGIN@11 at line 11 of OpenAPI/Modern.pm # once (38µs+654µs) by JSON::Schema::Modern::Annotation::BEGIN@10 at line 10 of JSON/Schema/Modern/Annotation.pm # once (39µs+502µs) by JSON::Schema::Modern::Vocabulary::Content::BEGIN@10 at line 10 of JSON/Schema/Modern/Vocabulary/Content.pm # once (33µs+432µs) by JSON::Schema::Modern::Vocabulary::MetaData::BEGIN@10 at line 10 of JSON/Schema/Modern/Vocabulary/MetaData.pm # once (56µs+348µs) by JSON::Schema::Modern::Document::BEGIN@10 at line 10 of JSON/Schema/Modern/Document.pm # once (30µs+313µs) by JSON::Schema::Modern::Vocabulary::Core::BEGIN@10 at line 10 of JSON/Schema/Modern/Vocabulary/Core.pm # once (24µs+253µs) by JSON::Schema::Modern::Vocabulary::FormatAssertion::BEGIN@10 at line 10 of JSON/Schema/Modern/Vocabulary/FormatAssertion.pm # once (15µs+244µs) by Method::Generate::Constructor::BEGIN@12 at line 15 of Method/Generate/Constructor.pm # once (17µs+183µs) by JSON::Schema::Modern::Vocabulary::Applicator::BEGIN@10 at line 10 of JSON/Schema/Modern/Vocabulary/Applicator.pm # once (17µs+178µs) by JSON::Schema::Modern::Result::BEGIN@10 at line 10 of JSON/Schema/Modern/Result.pm # once (17µs+177µs) by JSON::Schema::Modern::Document::OpenAPI::BEGIN@11 at line 11 of JSON/Schema/Modern/Document/OpenAPI.pm # once (19µs+172µs) by JSON::Schema::Modern::Vocabulary::OpenAPI::BEGIN@10 at line 10 of JSON/Schema/Modern/Vocabulary/OpenAPI.pm # once (18µs+171µs) by JSON::Schema::Modern::Vocabulary::Unevaluated::BEGIN@10 at line 10 of JSON/Schema/Modern/Vocabulary/Unevaluated.pm # once (18µs+166µs) by JSON::Schema::Modern::Error::BEGIN@10 at line 10 of JSON/Schema/Modern/Error.pm # once (14µs+167µs) by JSON::Schema::Modern::Vocabulary::FormatAnnotation::BEGIN@10 at line 10 of JSON/Schema/Modern/Vocabulary/FormatAnnotation.pm # once (12µs+168µs) by JSON::Schema::Modern::BEGIN@11 at line 11 of JSON/Schema/Modern.pm # once (18µs+154µs) by JSON::Schema::Modern::Vocabulary::Validation::BEGIN@10 at line 10 of JSON/Schema/Modern/Vocabulary/Validation.pm
sub import {
381719µs my $target = caller;
39176µs my $class = shift;
401758µ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
441756µs17204µs _set_loaded(caller);
# spent 204µs making 17 calls to Moo::_Utils::_set_loaded, avg 12µs/call
45
461775µs1730µs strict->import;
# spent 30µs making 17 calls to strict::import, avg 2µs/call
471719µs17369µs warnings->import;
# spent 369µs making 17 calls to warnings::import, avg 22µs/call
48
491738µs173.01ms $class->_install_subs($target, @_);
# spent 3.01ms making 17 calls to Moo::_install_subs, avg 177µs/call
501734µs174.30ms $class->make_class($target);
# spent 4.30ms making 17 calls to Moo::make_class, avg 253µs/call
511771µs return;
52}
53
54
# spent 4.30ms (4.08+221µs) within Moo::make_class which was called 17 times, avg 253µs/call: # 17 times (4.08ms+221µs) by Moo::import at line 50, avg 253µs/call
sub make_class {
55172µs my ($me, $target) = @_;
56
571724µs my $makers = $MAKERS{$target} ||= {};
58179µs return $target if $makers->{is_class};
59
601720µs1735µs my $stash = _getstash($target);
# spent 35µs making 17 calls to Moo::_Utils::_getstash, avg 2µs/call
61 $makers->{non_methods} = {
62 map +($_ => \&{"${target}::${_}"}),
6317635µs29261µs grep exists &{"${target}::${_}"},
# spent 61µs making 292 calls to Moo::CORE:match, avg 209ns/call
64 grep !/::\z/ && !/\A\(/,
65 keys %$stash
66 };
67
68177µs $makers->{is_class} = 1;
69 {
70191.09ms262µs
# spent 43µs (24+19) within Moo::BEGIN@70 which was called: # once (24µs+19µs) by OpenAPI::Modern::BEGIN@11 at line 70
no strict 'refs';
# spent 43µs making 1 call to Moo::BEGIN@70 # spent 19µs making 1 call to strict::unimport
71 @{"${target}::ISA"} = do {
72342.65ms require Moo::Object; ('Moo::Object');
7317189µs } unless @{"${target}::ISA"};
74 }
75175µs if ($INC{'Moo/HandleMoose.pm'} && !$Moo::sification::disabled) {
76 Moo::HandleMoose::inject_fake_metaclass_for($target);
77 }
781749µs return $target;
79}
80
81
# spent 22µs within Moo::is_class which was called 7 times, avg 3µs/call: # 7 times (22µs+0s) by MooX::TypeTiny::import at line 14 of MooX/TypeTiny.pm, avg 3µs/call
sub is_class {
8273µs my ($me, $class) = @_;
83727µs return $MAKERS{$class} && $MAKERS{$class}{is_class};
84}
85
86
# spent 3.01ms (509µs+2.51) within Moo::_install_subs which was called 17 times, avg 177µs/call: # 17 times (509µs+2.51ms) by Moo::import at line 49, avg 177µs/call
sub _install_subs {
871711µs my ($me, $target) = @_;
881785µs17292µs my %install = $me->_gen_subs($target);
# spent 292µs making 17 calls to Moo::_gen_subs, avg 17µs/call
89 _install_tracked $target => $_ => $install{$_}
9017288µs1192.21ms for sort keys %install;
# spent 2.15ms making 102 calls to Moo::_Utils::_install_tracked, avg 21µs/call # spent 68µs making 17 calls to Moo::CORE:sort, avg 4µs/call
911745µs return;
92}
93
94
# spent 292µs within Moo::_gen_subs which was called 17 times, avg 17µs/call: # 17 times (292µs+0s) by Moo::_install_subs at line 88, avg 17µs/call
sub _gen_subs {
95179µs my ($me, $target) = @_;
96 return (
97
# spent 2.10ms (15µs+2.09) within Moo::extends which was called 2 times, avg 1.05ms/call: # once (9µs+1.74ms) by JSON::Schema::Modern::Document::extends at line 6 of (eval 258)[Class/Method/Modifiers.pm:148] # once (6µs+346µs) by JSON::Schema::Modern::Document::OpenAPI::extends at line 6 of (eval 382)[Class/Method/Modifiers.pm:148]
extends => sub {
9824µs22.09ms $me->_set_superclasses($target, @_);
# spent 2.09ms making 2 calls to Moo::_set_superclasses, avg 1.04ms/call
9922µs22µs $me->_maybe_reset_handlemoose($target);
# spent 2µs making 2 calls to Moo::_maybe_reset_handlemoose, avg 1µs/call
10025µs return;
101 },
102
# spent 8.69ms (112µs+8.57) within Moo::with which was called 9 times, avg 965µs/call: # once (28µs+4.54ms) by Module::Runtime::require_module at line 20 of JSON/Schema/Modern/Vocabulary/Core.pm # once (17µs+917µs) by Module::Runtime::require_module at line 23 of JSON/Schema/Modern/Vocabulary/Validation.pm # once (10µs+788µs) by JSON::Schema::Modern::Vocabulary::Applicator::BEGIN@21 at line 21 of JSON/Schema/Modern/Vocabulary/Unevaluated.pm # once (10µs+512µs) by Module::Runtime::require_module at line 21 of JSON/Schema/Modern/Vocabulary/FormatAssertion.pm # once (11µs+469µs) by Module::Runtime::require_module at line 20 of JSON/Schema/Modern/Vocabulary/OpenAPI.pm # once (11µs+410µs) by Module::Runtime::require_module at line 24 of JSON/Schema/Modern/Vocabulary/Applicator.pm # once (9µs+323µs) by Module::Runtime::require_module at line 20 of JSON/Schema/Modern/Vocabulary/MetaData.pm # once (7µs+310µs) by Module::Runtime::require_module at line 22 of JSON/Schema/Modern/Vocabulary/Content.pm # once (9µs+301µs) by Module::Runtime::require_module at line 21 of JSON/Schema/Modern/Vocabulary/FormatAnnotation.pm
with => sub {
103913µs require Moo::Role;
104939µs98.56ms Moo::Role->apply_roles_to_package($target, @_);
# spent 8.56ms making 9 calls to Role::Tiny::apply_roles_to_package, avg 951µs/call
105943µs916µs $me->_maybe_reset_handlemoose($target);
# spent 16µs making 9 calls to Moo::_maybe_reset_handlemoose, avg 2µs/call
106 },
107
# spent 93.1ms (1.02+92.1) within Moo::has which was called 45 times, avg 2.07ms/call: # 16 times (300µs+43.6ms) by JSON::Schema::Modern::has at line 6 of (eval 33)[Class/Method/Modifiers.pm:148], avg 2.74ms/call # 8 times (211µs+21.7ms) by JSON::Schema::Modern::Document::has at line 6 of (eval 256)[Class/Method/Modifiers.pm:148], avg 2.74ms/call # 6 times (161µs+11.4ms) by MooX::HandlesVia::has at line 31 of MooX/HandlesVia.pm, avg 1.93ms/call # 6 times (141µs+7.87ms) by JSON::Schema::Modern::Result::has at line 6 of (eval 219)[Class/Method/Modifiers.pm:148], avg 1.34ms/call # 5 times (104µs+4.09ms) by JSON::Schema::Modern::Error::has at line 6 of (eval 192)[Class/Method/Modifiers.pm:148], avg 838µs/call # 4 times (104µs+3.40ms) by JSON::Schema::Modern::Annotation::has at line 6 of (eval 225)[Class/Method/Modifiers.pm:148], avg 875µs/call
has => sub {
1084519µs my $name_proto = shift;
1094568µs my @name_proto = ref $name_proto eq 'ARRAY' ? @$name_proto : $name_proto;
1104546µs if (@_ % 2 != 0) {
111 croak "Invalid options for " . join(', ', map "'$_'", @name_proto)
112 . " attribute(s): even number of arguments expected, got " . scalar @_;
113 }
1144565µs my %spec = @_;
1154535µs foreach my $name (@name_proto) {
116 # Note that when multiple attributes specified, each attribute
117 # needs a separate \%specs hashref
1184941µs my $spec_ref = @name_proto > 1 ? +{%spec} : \%spec;
11949124µs981.79ms $me->_constructor_maker_for($target)
# spent 1.74ms making 49 calls to Method::Generate::Constructor::register_attribute_specs, avg 35µs/call # spent 47µs making 49 calls to Moo::_constructor_maker_for, avg 959ns/call
120 ->register_attribute_specs($name, $spec_ref);
12149156µs9890.2ms $me->_accessor_maker_for($target)
# spent 90.2ms making 49 calls to Method::Generate::Accessor::generate_method, avg 1.84ms/call # spent 61µs making 49 calls to Moo::_accessor_maker_for, avg 1µs/call
122 ->generate_method($target, $name, $spec_ref);
12349171µs49104µs $me->_maybe_reset_handlemoose($target);
# spent 104µs making 49 calls to Moo::_maybe_reset_handlemoose, avg 2µs/call
124 }
12545174µs return;
126 },
127 (map {
12868251µs my $type = $_;
129 (
130
# spent 1.43ms (27µs+1.41) within Moo::around which was called 5 times, avg 287µs/call: # once (9µs+467µs) by JSON::Schema::Modern::BEGIN@35 at line 135 of JSON/Schema/Modern/Document.pm # once (5µs+259µs) by OpenAPI::Modern::BEGIN@26 at line 133 of JSON/Schema/Modern.pm # once (5µs+244µs) by OpenAPI::Modern::BEGIN@26 at line 933 of JSON/Schema/Modern.pm # once (5µs+236µs) by main::BEGIN@2 at line 79 of OpenAPI/Modern.pm # once (3µs+201µs) by OpenAPI::Modern::BEGIN@26 at line 672 of JSON/Schema/Modern.pm # spent 413µs (11+402) within Moo::before which was called 2 times, avg 206µs/call: # once (7µs+286µs) by OpenAPI::Modern::BEGIN@26 at line 124 of JSON/Schema/Modern.pm # once (4µs+116µs) by OpenAPI::Modern::BEGIN@26 at line 935 of JSON/Schema/Modern.pm
$type => sub {
131715µs71.81ms _install_modifier($target, $type, @_);
# spent 1.81ms making 7 calls to Moo::_Utils::_install_modifier, avg 258µs/call
132727µs return;
133 },
134 )
1355154µs } qw(before after around)),
136 );
137}
138
139sub unimport {
140 my $target = caller;
141 _unimport_coderefs($target);
142}
143
144
# spent 2.09ms (138µs+1.95) within Moo::_set_superclasses which was called 2 times, avg 1.04ms/call: # 2 times (138µs+1.95ms) by Moo::extends at line 98, avg 1.04ms/call
sub _set_superclasses {
14521µs my $class = shift;
14620s my $target = shift;
14720s foreach my $superclass (@_) {
14821µs21.28ms _load_module($superclass);
# spent 1.28ms making 2 calls to Moo::_Utils::_load_module, avg 640µs/call
14925µs25µs if ($INC{'Role/Tiny.pm'} && Role::Tiny->is_role($superclass)) {
# spent 5µs making 2 calls to Role::Tiny::is_role, avg 2µs/call
150 croak "Can't extend role '$superclass'";
151 }
152 }
153224µ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}) {
15523µs214µs $old->assert_constructor;
# spent 14µs making 2 calls to Method::Generate::Constructor::assert_constructor, avg 7µ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)
15827µs6635µs ->register_attribute_specs(%{$old->all_attribute_specs});
# spent 619µs making 2 calls to Moo::_constructor_maker_for, avg 310µs/call # spent 14µs making 2 calls to Method::Generate::Constructor::register_attribute_specs, avg 7µs/call # spent 2µs making 2 calls to Method::Generate::Constructor::all_attribute_specs, avg 1µs/call
159 }
160 elsif (!$target->isa('Moo::Object')) {
161 Moo->_constructor_maker_for($target);
162 }
163223µs25µs $Moo::HandleMoose::MOUSE{$target} = [
# spent 5µ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 122µs within Moo::_maybe_reset_handlemoose which was called 60 times, avg 2µs/call: # 49 times (104µs+0s) by Moo::has at line 123, avg 2µs/call # 9 times (16µs+0s) by Moo::with at line 105, avg 2µs/call # 2 times (2µs+0s) by Moo::extends at line 99, avg 1µs/call
sub _maybe_reset_handlemoose {
1696030µs my ($class, $target) = @_;
17060148µs if ($INC{'Moo/HandleMoose.pm'} && !$Moo::sification::disabled) {
171 Moo::HandleMoose::maybe_reinject_fake_metaclass_for($target);
172 }
173}
174
175
# spent 14.9ms (6.38+8.57) within Moo::_accessor_maker_for which was called 116 times, avg 129µs/call: # 49 times (61µs+0s) by Moo::has at line 121, avg 1µs/call # 47 times (6.10ms+8.43ms) 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 309µs/call # 10 times (180µs+130µs) by Moo::Role::_maybe_make_accessors at line 254 of Moo/Role.pm, avg 31µs/call # 10 times (44µs+11µs) by Moo::_constructor_maker_for at line 207, avg 6µs/call
sub _accessor_maker_for {
17611657µs my ($class, $target) = @_;
17711684µs return unless $MAKERS{$target};
178116300µs $MAKERS{$target}{accessor} ||= do {
1791811µs my $maker_class = do {
1802397µs266µs
# spent 55µs (44+11) within Moo::BEGIN@180 which was called: # once (44µs+11µs) by OpenAPI::Modern::BEGIN@11 at line 180
no strict 'refs';
# spent 55µs making 1 call to Moo::BEGIN@180 # spent 11µs making 1 call to strict::unimport
1811811µs if (my $m = do {
18218147µs1867µs my @isa = @{_linear_isa($target)};
# spent 67µs making 18 calls to mro::get_linear_isa, avg 4µs/call
183184µs shift @isa;
1841885µ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 {
19318699µs require Method::Generate::Accessor;
194187µs 'Method::Generate::Accessor'
195 }
196 };
1971863µs18237µs $maker_class->new;
# spent 237µs making 18 calls to Moo::Object::new, avg 13µs/call
198 }
199}
200
201
# spent 7.10ms (2.39+4.71) within Moo::_constructor_maker_for which was called 99 times, avg 72µs/call: # 49 times (47µs+0s) by Moo::has at line 119, avg 959ns/call # 47 times (2.18ms+4.25ms) 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 137µs/call # 2 times (123µs+496µs) by Moo::_set_superclasses at line 158, avg 310µs/call # once (35µs+-35µs) by Moo::_constructor_maker_for at line 250 of Method/Generate/Constructor.pm
sub _constructor_maker_for {
2029934µs my ($class, $target) = @_;
2039923µs return unless $MAKERS{$target};
20499257µs $MAKERS{$target}{constructor} ||= do {
20510462µs require Method::Generate::Constructor;
206
2071091µs1055µs my %construct_opts = (
# spent 55µ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
227100s my $con;
2281042µs1017µs my @isa = @{_linear_isa($target)};
# spent 17µs making 10 calls to mro::get_linear_isa, avg 2µs/call
229103µs shift @isa;
2302326µs225µs
# spent 18µs (11+7) within Moo::BEGIN@230 which was called: # once (11µs+7µs) by OpenAPI::Modern::BEGIN@11 at line 230
no strict 'refs';
# spent 18µs making 1 call to Moo::BEGIN@230 # spent 7µs making 1 call to strict::unimport
2311054µs if (my ($parent_new) = grep +(defined &{$_.'::new'}), @isa) {
2321028µs15µs if ($parent_new eq 'Moo::Object') {
# spent 5µs making 1 call to UNIVERSAL::can
233 # no special constructor needed
234 }
235 elsif (my $makers = $MAKERS{$parent_new}) {
23610s $con = $makers->{constructor};
23712µs118µ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 8µs (6+2) within Moo::__ANON__[/Users/ether/.perlbrew/libs/36.0@std/lib/perl5/Moo.pm:256] which was called: # once (6µs+2µs) by Method::Generate::Constructor::_build_construction_string at line 68 of Method/Generate/Constructor.pm
$construct_opts{construction_builder} = sub {
252110µs12µs '$invoker->'.$target.'::SUPER::new('
# spent 2µs making 1 call to UNIVERSAL::can
253 .($target->can('FOREIGNBUILDARGS') ?
254 '$class->FOREIGNBUILDARGS(@_)' : '@_')
255 .')'
25613µs };
257 }
258 }
259 ($con ? ref($con) : 'Method::Generate::Constructor')
260 ->new(%construct_opts)
261 ->install_delayed
26210112µs313.87ms ->register_attribute_specs(%{$con?$con->all_attribute_specs:{}})
# spent 2.58ms making 10 calls to Method::Generate::Constructor::install_delayed, avg 258µs/call # spent 1.05ms making 10 calls to Method::Generate::Constructor::new, avg 105µs/call # spent 248µs making 10 calls to Method::Generate::Constructor::register_attribute_specs, avg 25µs/call # spent 1µ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 {;
2752437µs221µs
# spent 16µs (11+5) within Moo::BEGIN@275 which was called: # once (11µs+5µs) by OpenAPI::Modern::BEGIN@11 at line 275
no strict 'refs';
# spent 16µs making 1 call to Moo::BEGIN@275 # spent 5µ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
29418µs1;
295__END__
 
# spent 61µs within Moo::CORE:match which was called 292 times, avg 209ns/call: # 292 times (61µs+0s) by Moo::make_class at line 63, avg 209ns/call
sub Moo::CORE:match; # opcode
# spent 68µs within Moo::CORE:sort which was called 17 times, avg 4µs/call: # 17 times (68µs+0s) by Moo::_install_subs at line 90, avg 4µs/call
sub Moo::CORE:sort; # opcode