← Index
NYTProf Performance Profile   « line view »
For examples/Atom-timer.pl
  Run on Mon Aug 12 14:45:28 2013
Reported on Mon Aug 12 14:46:14 2013

Filename/Users/dde/perl5/perlbrew/perls/5.18.0t/lib/site_perl/5.18.0/darwin-thread-multi-2level/Moose/Exporter.pm
StatementsExecuted 8279 statements in 14.3ms
Subroutines
Calls P F Exclusive
Time
Inclusive
Time
Subroutine
1113.50ms75.0msMoose::Exporter::::BEGIN@13Moose::Exporter::BEGIN@13
1111.95ms2.41msMoose::Exporter::::BEGIN@17Moose::Exporter::BEGIN@17
26111.58ms16.7msMoose::Exporter::::__ANON__[:137]Moose::Exporter::__ANON__[:137]
17111.15ms1.18msMoose::Exporter::::_remove_keywordsMoose::Exporter::_remove_keywords
176111.04ms1.97msMoose::Exporter::::__ANON__[:379]Moose::Exporter::__ANON__[:379]
262625845µs69.0msMoose::Exporter::::__ANON__[:519]Moose::Exporter::__ANON__[:519]
111729µs894µsMoose::Exporter::::BEGIN@15Moose::Exporter::BEGIN@15
17611644µs644µsMoose::Exporter::::_late_curry_wrapperMoose::Exporter::_late_curry_wrapper
2611337µs337µsMoose::Exporter::::_collect_metarolesMoose::Exporter::_collect_metaroles
311286µs454µsMoose::Exporter::::_make_sub_exporter_paramsMoose::Exporter::_make_sub_exporter_params
2611198µs720µsMoose::Exporter::::_apply_metarolesMoose::Exporter::_apply_metaroles
2611181µs265µsMoose::Exporter::::_strip_traitsMoose::Exporter::_strip_traits
6011151µs363µsMoose::Exporter::::__ANON__[:252]Moose::Exporter::__ANON__[:252]
18411149µs149µsMoose::Exporter::::__ANON__[:307]Moose::Exporter::__ANON__[:307]
311143µs2.20msMoose::Exporter::::build_import_methodsMoose::Exporter::build_import_methods
2611127µs167µsMoose::Exporter::::_strip_metaclassMoose::Exporter::_strip_metaclass
5221126µs297µsMoose::Exporter::::__ANON__[:42]Moose::Exporter::__ANON__[:42]
2611120µs157µsMoose::Exporter::::_strip_meta_nameMoose::Exporter::_strip_meta_name
171716115µs1.29msMoose::Exporter::::__ANON__[:706]Moose::Exporter::__ANON__[:706]
412199µs99µsMoose::Exporter::::_sub_from_packageMoose::Exporter::_sub_from_package
161154µs54µsMoose::Exporter::::_make_wrapped_sub_with_metaMoose::Exporter::_make_wrapped_sub_with_meta
261148µs48µsMoose::Exporter::::_get_callerMoose::Exporter::_get_caller
431141µs41µsMoose::Exporter::::_flag_as_reexportMoose::Exporter::_flag_as_reexport (xsub)
31140µs40µsMoose::Exporter::::_make_init_metaMoose::Exporter::_make_init_meta
31130µs101µsMoose::Exporter::::_follow_alsoMoose::Exporter::_follow_also
31128µs1.18msMoose::Exporter::::_make_exporterMoose::Exporter::_make_exporter
33327µs2.22msMoose::Exporter::::setup_import_methodsMoose::Exporter::setup_import_methods
31126µs43µsMoose::Exporter::::_die_if_cycle_found_in_also_list_for_packageMoose::Exporter::_die_if_cycle_found_in_also_list_for_package
321123µs23µsMoose::Exporter::::_export_is_flaggedMoose::Exporter::_export_is_flagged (xsub)
33322µs63µsMoose::Exporter::::importMoose::Exporter::import
31121µs21µsMoose::Exporter::::_make_import_subMoose::Exporter::_make_import_sub
31115µs15µsMoose::Exporter::::_make_unimport_subMoose::Exporter::_make_unimport_sub
62113µs13µsMoose::Exporter::::_also_list_for_packageMoose::Exporter::_also_list_for_package
31113µs16µsMoose::Exporter::::_follow_also_realMoose::Exporter::_follow_also_real
31111µs11µsMoose::Exporter::::_parse_trait_aliasesMoose::Exporter::_parse_trait_aliases
1119µs19µsMoose::Exporter::::BEGIN@716Moose::Exporter::BEGIN@716
1118µs8µsMoose::Exporter::::BEGIN@2Moose::Exporter::BEGIN@2
1117µs36µsMoose::Exporter::::BEGIN@14Moose::Exporter::BEGIN@14
1117µs18µsMoose::Exporter::::BEGIN@133Moose::Exporter::BEGIN@133
1116µs16µsMoose::Exporter::::BEGIN@321Moose::Exporter::BEGIN@321
1116µs17µsMoose::Exporter::::BEGIN@9Moose::Exporter::BEGIN@9
3116µs6µsMoose::Exporter::::_die_if_also_list_cycles_back_to_existing_stackMoose::Exporter::_die_if_also_list_cycles_back_to_existing_stack
1116µs26µsMoose::Exporter::::BEGIN@18Moose::Exporter::BEGIN@18
1116µs16µsMoose::Exporter::::BEGIN@132Moose::Exporter::BEGIN@132
1116µs26µsMoose::Exporter::::BEGIN@16Moose::Exporter::BEGIN@16
1116µs26µsMoose::Exporter::::BEGIN@12Moose::Exporter::BEGIN@12
1116µs9µsMoose::Exporter::::BEGIN@10Moose::Exporter::BEGIN@10
1116µs14µsMoose::Exporter::::BEGIN@726Moose::Exporter::BEGIN@726
0000s0sMoose::Exporter::::__ANON__[:228]Moose::Exporter::__ANON__[:228]
0000s0sMoose::Exporter::::__ANON__[:356]Moose::Exporter::__ANON__[:356]
0000s0sMoose::Exporter::::__ANON__[:388]Moose::Exporter::__ANON__[:388]
0000s0sMoose::Exporter::::__ANON__[:410]Moose::Exporter::__ANON__[:410]
0000s0sMoose::Exporter::::__ANON__[:523]Moose::Exporter::__ANON__[:523]
0000s0sMoose::Exporter::::__ANON__[:537]Moose::Exporter::__ANON__[:537]
0000s0sMoose::Exporter::::__ANON__[:549]Moose::Exporter::__ANON__[:549]
0000s0sMoose::Exporter::::__ANON__[:778]Moose::Exporter::__ANON__[:778]
0000s0sMoose::Exporter::::_apply_meta_traitsMoose::Exporter::_apply_meta_traits
0000s0sMoose::Exporter::::_curry_wrapperMoose::Exporter::_curry_wrapper
0000s0sMoose::Exporter::::_make_wrapped_subMoose::Exporter::_make_wrapped_sub
Call graph for these subroutines as a Graphviz dot language file.
Line State
ments
Time
on line
Calls Time
in subs
Code
1package Moose::Exporter;
2
# spent 8µs within Moose::Exporter::BEGIN@2 which was called: # once (8µs+0s) by Moose::BEGIN@18 at line 4
BEGIN {
314µs $Moose::Exporter::AUTHORITY = 'cpan:STEVAN';
4128µs18µs}
# spent 8µs making 1 call to Moose::Exporter::BEGIN@2
5{
62800ns $Moose::Exporter::VERSION = '2.1005';
7}
8
9222µs227µs
# spent 17µs (6+10) within Moose::Exporter::BEGIN@9 which was called: # once (6µs+10µs) by Moose::BEGIN@18 at line 9
use strict;
# spent 17µs making 1 call to Moose::Exporter::BEGIN@9 # spent 10µs making 1 call to strict::import
10235µs212µs
# spent 9µs (6+3) within Moose::Exporter::BEGIN@10 which was called: # once (6µs+3µs) by Moose::BEGIN@18 at line 10
use warnings;
# spent 9µs making 1 call to Moose::Exporter::BEGIN@10 # spent 3µs making 1 call to warnings::import
11
12220µs246µs
# spent 26µs (6+20) within Moose::Exporter::BEGIN@12 which was called: # once (6µs+20µs) by Moose::BEGIN@18 at line 12
use Class::Load qw(is_class_loaded);
# spent 26µs making 1 call to Moose::Exporter::BEGIN@12 # spent 20µs making 1 call to Exporter::import
132106µs175.0ms
# spent 75.0ms (3.50+71.5) within Moose::Exporter::BEGIN@13 which was called: # once (3.50ms+71.5ms) by Moose::BEGIN@18 at line 13
use Class::MOP;
# spent 75.0ms making 1 call to Moose::Exporter::BEGIN@13
14232µs265µs
# spent 36µs (7+29) within Moose::Exporter::BEGIN@14 which was called: # once (7µs+29µs) by Moose::BEGIN@18 at line 14
use List::MoreUtils qw( first_index uniq );
# spent 36µs making 1 call to Moose::Exporter::BEGIN@14 # spent 29µs making 1 call to Exporter::import
152100µs1894µs
# spent 894µs (729+165) within Moose::Exporter::BEGIN@15 which was called: # once (729µs+165µs) by Moose::BEGIN@18 at line 15
use Moose::Util::MetaRole;
# spent 894µs making 1 call to Moose::Exporter::BEGIN@15
16224µs246µs
# spent 26µs (6+20) within Moose::Exporter::BEGIN@16 which was called: # once (6µs+20µs) by Moose::BEGIN@18 at line 16
use Scalar::Util qw(reftype);
# spent 26µs making 1 call to Moose::Exporter::BEGIN@16 # spent 20µs making 1 call to Exporter::import
17393µs32.53ms
# spent 2.41ms (1.95+459µs) within Moose::Exporter::BEGIN@17 which was called: # once (1.95ms+459µs) by Moose::BEGIN@18 at line 17
use Sub::Exporter 0.980;
# spent 2.41ms making 1 call to Moose::Exporter::BEGIN@17 # spent 107µs making 1 call to Sub::Exporter::__ANON__[Sub/Exporter.pm:337] # spent 7µs making 1 call to UNIVERSAL::VERSION
182374µs246µs
# spent 26µs (6+20) within Moose::Exporter::BEGIN@18 which was called: # once (6µs+20µs) by Moose::BEGIN@18 at line 18
use Sub::Name qw(subname);
# spent 26µs making 1 call to Moose::Exporter::BEGIN@18 # spent 20µs making 1 call to Exporter::import
19
201100nsmy %EXPORT_SPEC;
21
22
# spent 2.22ms (27µs+2.20) within Moose::Exporter::setup_import_methods which was called 3 times, avg 741µs/call: # once (10µs+860µs) by Moose::Meta::Attribute::BEGIN@24 at line 44 of Moose/Util/TypeConstraints.pm # once (8µs+691µs) by MooseX::Storage::Meta::Attribute::Trait::DoNotSerialize::BEGIN@9 at line 94 of Moose/Role.pm # once (9µs+646µs) by Atom::BEGIN@2 at line 137 of Moose.pm
sub setup_import_methods {
2334µs my ( $class, %args ) = @_;
24
2534µs $args{exporting_package} ||= caller();
26
27319µs32.20ms $class->build_import_methods(
# spent 2.20ms making 3 calls to Moose::Exporter::build_import_methods, avg 732µs/call
28 %args,
29 install => [qw(import unimport init_meta)]
30 );
31}
32
33# A reminder to intrepid Moose hackers
34# there may be more than one level of exporter
35# don't make doy cry. -- perigrin
36
37
# spent 2.20ms (143µs+2.05) within Moose::Exporter::build_import_methods which was called 3 times, avg 732µs/call: # 3 times (143µs+2.05ms) by Moose::Exporter::setup_import_methods at line 27, avg 732µs/call
sub build_import_methods {
3834µs my ( $class, %args ) = @_;
39
4032µs my $exporting_package = $args{exporting_package} ||= caller();
41
4255114µs52171µs
# spent 297µs (126+171) within Moose::Exporter::__ANON__[/Users/dde/perl5/perlbrew/perls/5.18.0t/lib/site_perl/5.18.0/darwin-thread-multi-2level/Moose/Exporter.pm:42] which was called 52 times, avg 6µs/call: # 26 times (68µs+88µs) by Moose::Exporter::_apply_metaroles at line 566, avg 6µs/call # 26 times (58µs+83µs) by Moose::Exporter::__ANON__[/Users/dde/perl5/perlbrew/perls/5.18.0t/lib/site_perl/5.18.0/darwin-thread-multi-2level/Moose/Exporter.pm:137] at line 108, avg 5µs/call
my $meta_lookup = $args{meta_lookup} || sub { Class::MOP::class_of(shift) };
# spent 171µs making 52 calls to Class::MOP::class_of, avg 3µs/call
43
4432µs $EXPORT_SPEC{$exporting_package} = \%args;
45
4636µs3101µs my @exports_from = $class->_follow_also($exporting_package);
# spent 101µs making 3 calls to Moose::Exporter::_follow_also, avg 34µs/call
47
4832µs my $export_recorder = {};
493700ns my $is_reexport = {};
50
51311µs3454µs my $exports = $class->_make_sub_exporter_params(
# spent 454µs making 3 calls to Moose::Exporter::_make_sub_exporter_params, avg 151µs/call
52 [ $exporting_package, @exports_from ],
53 $export_recorder,
54 $is_reexport,
55 $args{meta_lookup}, # so that we don't pass through the default
56 );
57
5836µs31.18ms my $exporter = $class->_make_exporter(
# spent 1.18ms making 3 calls to Moose::Exporter::_make_exporter, avg 394µs/call
59 $exports,
60 $is_reexport,
61 $meta_lookup,
62 );
63
643300ns my %methods;
6537µs321µs $methods{import} = $class->_make_import_sub(
# spent 21µs making 3 calls to Moose::Exporter::_make_import_sub, avg 7µs/call
66 $exporting_package,
67 $exporter,
68 \@exports_from,
69 $is_reexport,
70 $meta_lookup,
71 );
72
7337µs315µs $methods{unimport} = $class->_make_unimport_sub(
# spent 15µs making 3 calls to Moose::Exporter::_make_unimport_sub, avg 5µs/call
74 $exporting_package,
75 $exports,
76 $export_recorder,
77 $is_reexport,
78 $meta_lookup,
79 );
80
8137µs340µs $methods{init_meta} = $class->_make_init_meta(
# spent 40µs making 3 calls to Moose::Exporter::_make_init_meta, avg 13µs/call
82 $exporting_package,
83 \%args,
84 $meta_lookup,
85 );
86
8736µs368µs my $package = Class::MOP::Package->initialize($exporting_package);
# spent 68µs making 3 calls to Class::MOP::Package::initialize, avg 22µs/call
8834µs for my $to_install ( @{ $args{install} || [] } ) {
8993µs my $symbol = '&' . $to_install;
90 next
91910µs693µs unless $methods{$to_install}
# spent 93µs making 6 calls to Class::MOP::Package::has_package_symbol, avg 16µs/call
92 && !$package->has_package_symbol($symbol);
93610µs682µs $package->add_package_symbol( $symbol, $methods{$to_install} );
# spent 82µs making 6 calls to Class::MOP::Package::add_package_symbol, avg 14µs/call
94 }
95
96311µs return ( $methods{import}, $methods{unimport}, $methods{init_meta} );
97}
98
99
# spent 1.18ms (28µs+1.15) within Moose::Exporter::_make_exporter which was called 3 times, avg 394µs/call: # 3 times (28µs+1.15ms) by Moose::Exporter::build_import_methods at line 58, avg 394µs/call
sub _make_exporter {
10032µs my ($class, $exports, $is_reexport, $meta_lookup) = @_;
101
102 return Sub::Exporter::build_exporter(
103 {
104 exports => $exports,
105 groups => { default => [':all'] },
106
# spent 16.7ms (1.58+15.2) within Moose::Exporter::__ANON__[/Users/dde/perl5/perlbrew/perls/5.18.0t/lib/site_perl/5.18.0/darwin-thread-multi-2level/Moose/Exporter.pm:137] which was called 26 times, avg 644µs/call: # 26 times (1.58ms+15.2ms) by Sub::Exporter::_do_import at line 380 of Sub/Exporter.pm, avg 644µs/call
installer => sub {
107266µs my ($arg, $to_export) = @_;
1082622µs26141µs my $meta = $meta_lookup->($arg->{into});
# spent 141µs making 26 calls to Moose::Exporter::__ANON__[Moose/Exporter.pm:42], avg 5µs/call
109
1102610µs21.04ms goto &Sub::Exporter::default_installer unless $meta;
# spent 1.04ms making 2 calls to Sub::Exporter::default_installer, avg 519µs/call
111
112 # don't overwrite existing symbols with our magically flagged
113 # version of it if we would install the same sub that's already
114 # in the importer
115
116241µs my @filtered_to_export;
11724800ns my %installed;
1182482µs for (my $i = 0; $i < @{ $to_export }; $i += 2) {
119322106µs my ($as, $cv) = @{ $to_export }[$i, $i + 1];
120
121322365µs3242.15ms next if !ref($as)
# spent 2.13ms making 322 calls to Class::MOP::Package::has_package_symbol, avg 7µs/call # spent 13µs making 2 calls to Class::MOP::Package::get_package_symbol, avg 7µs/call
122 && $meta->has_package_symbol('&' . $as)
123 && $meta->get_package_symbol('&' . $as) == $cv;
124
125320104µs push @filtered_to_export, $as, $cv;
126320147µs $installed{$as} = 1 unless ref $as;
127 }
128
1292423µs2412.8ms Sub::Exporter::default_installer($arg, \@filtered_to_export);
# spent 12.8ms making 24 calls to Sub::Exporter::default_installer, avg 534µs/call
130
1312489µs for my $name ( keys %{$is_reexport} ) {
132223µs225µs
# spent 16µs (6+9) within Moose::Exporter::BEGIN@132 which was called: # once (6µs+9µs) by Moose::BEGIN@18 at line 132
no strict 'refs';
# spent 16µs making 1 call to Moose::Exporter::BEGIN@132 # spent 9µs making 1 call to strict::unimport
1332767µs230µs
# spent 18µs (7+12) within Moose::Exporter::BEGIN@133 which was called: # once (7µs+12µs) by Moose::BEGIN@18 at line 133
no warnings 'once';
# spent 18µs making 1 call to Moose::Exporter::BEGIN@133 # spent 12µs making 1 call to warnings::unimport
134468µs next unless exists $installed{$name};
13543172µs4341µs _flag_as_reexport( \*{ join q{::}, $arg->{into}, $name } );
# spent 41µs making 43 calls to Moose::Exporter::_flag_as_reexport, avg 944ns/call
136 }
137 },
138 }
139325µs31.15ms );
# spent 1.15ms making 3 calls to Sub::Exporter::build_exporter, avg 384µs/call
140}
141
142
# spent 101µs (30+72) within Moose::Exporter::_follow_also which was called 3 times, avg 34µs/call: # 3 times (30µs+72µs) by Moose::Exporter::build_import_methods at line 46, avg 34µs/call
sub _follow_also {
14331µs my $class = shift;
1443600ns my $exporting_package = shift;
145
14636µs343µs _die_if_cycle_found_in_also_list_for_package($exporting_package);
# spent 43µs making 3 calls to Moose::Exporter::_die_if_cycle_found_in_also_list_for_package, avg 14µs/call
147
148331µs629µs return uniq( _follow_also_real($exporting_package) );
# spent 16µs making 3 calls to Moose::Exporter::_follow_also_real, avg 5µs/call # spent 13µs making 3 calls to List::MoreUtils::uniq, avg 4µs/call
149}
150
151
# spent 16µs (13+3) within Moose::Exporter::_follow_also_real which was called 3 times, avg 5µs/call: # 3 times (13µs+3µs) by Moose::Exporter::_follow_also at line 148, avg 5µs/call
sub _follow_also_real {
1523700ns my $exporting_package = shift;
15332µs33µs my @also = _also_list_for_package($exporting_package);
# spent 3µs making 3 calls to Moose::Exporter::_also_list_for_package, avg 1µs/call
154
15537µs return map { $_, _follow_also_real($_) } @also;
156}
157
158
# spent 13µs within Moose::Exporter::_also_list_for_package which was called 6 times, avg 2µs/call: # 3 times (10µs+0s) by Moose::Exporter::_die_if_cycle_found_in_also_list_for_package at line 180, avg 3µs/call # 3 times (3µs+0s) by Moose::Exporter::_follow_also_real at line 153, avg 1µs/call
sub _also_list_for_package {
15961µs my $package = shift;
160
16162µs if ( !exists $EXPORT_SPEC{$package} ) {
162 my $loaded = is_class_loaded($package);
163
164 die "Package in also ($package) does not seem to "
165 . "use Moose::Exporter"
166 . ( $loaded ? "" : " (is it loaded?)" );
167 }
168
16963µs my $also = $EXPORT_SPEC{$package}{also};
170
171618µs return unless defined $also;
172
173 return ref $also ? @$also : $also;
174}
175
176# this is no Tarjan algorithm, but for the list sizes expected,
177# brute force will probably be fine (and more maintainable)
178
# spent 43µs (26+17) within Moose::Exporter::_die_if_cycle_found_in_also_list_for_package which was called 3 times, avg 14µs/call: # 3 times (26µs+17µs) by Moose::Exporter::_follow_also at line 146, avg 14µs/call
sub _die_if_cycle_found_in_also_list_for_package {
1793700ns my $package = shift;
180316µs617µs _die_if_also_list_cycles_back_to_existing_stack(
# spent 10µs making 3 calls to Moose::Exporter::_also_list_for_package, avg 3µs/call # spent 6µs making 3 calls to Moose::Exporter::_die_if_also_list_cycles_back_to_existing_stack, avg 2µs/call
181 [ _also_list_for_package($package) ],
182 [$package],
183 );
184}
185
186
# spent 6µs within Moose::Exporter::_die_if_also_list_cycles_back_to_existing_stack which was called 3 times, avg 2µs/call: # 3 times (6µs+0s) by Moose::Exporter::_die_if_cycle_found_in_also_list_for_package at line 180, avg 2µs/call
sub _die_if_also_list_cycles_back_to_existing_stack {
18732µs my ( $also_list, $existing_stack ) = @_;
188
18938µs return unless @$also_list && @$existing_stack;
190
191 for my $also_member (@$also_list) {
192 for my $stack_member (@$existing_stack) {
193 next unless $also_member eq $stack_member;
194
195 die
196 "Circular reference in 'also' parameter to Moose::Exporter between "
197 . join(
198 ', ',
199 @$existing_stack
200 ) . " and $also_member";
201 }
202
203 _die_if_also_list_cycles_back_to_existing_stack(
204 [ _also_list_for_package($also_member) ],
205 [ $also_member, @$existing_stack ],
206 );
207 }
208}
209
210
# spent 11µs within Moose::Exporter::_parse_trait_aliases which was called 3 times, avg 4µs/call: # 3 times (11µs+0s) by Moose::Exporter::_make_sub_exporter_params at line 281, avg 4µs/call
sub _parse_trait_aliases {
2113700ns my $class = shift;
21232µs my ($package, $aliases) = @_;
213
2143400ns my @ret;
21532µs for my $alias (@$aliases) {
216 my $name;
217 if (ref($alias)) {
218 reftype($alias) eq 'ARRAY'
219 or Moose->throw_error(reftype($alias) . " references are not "
220 . "valid arguments to the 'trait_aliases' "
221 . "option");
222
223 ($alias, $name) = @$alias;
224 }
225 else {
226 ($name = $alias) =~ s/.*:://;
227 }
228 push @ret, subname "${package}::${name}" => sub () { $alias };
229 }
230
23138µs return @ret;
232}
233
234
# spent 454µs (286+168) within Moose::Exporter::_make_sub_exporter_params which was called 3 times, avg 151µs/call: # 3 times (286µs+168µs) by Moose::Exporter::build_import_methods at line 51, avg 151µs/call
sub _make_sub_exporter_params {
23531µs my $class = shift;
2363600ns my $packages = shift;
2373600ns my $export_recorder = shift;
2383600ns my $is_reexport = shift;
23932µs my $meta_lookup_override = shift;
240
2413300ns my %exports;
2423400ns my $current_meta_lookup;
243
24433µs for my $package ( @{$packages} ) {
24532µs my $args = $EXPORT_SPEC{$package}
246 or die "The $package package does not use Moose::Exporter\n";
247
24832µs $current_meta_lookup = $meta_lookup_override || $args->{meta_lookup};
2493300ns $meta_lookup_override = $current_meta_lookup;
250
251 my $meta_lookup = $current_meta_lookup
252633.45ms60212µs
# spent 363µs (151+212) within Moose::Exporter::__ANON__[/Users/dde/perl5/perlbrew/perls/5.18.0t/lib/site_perl/5.18.0/darwin-thread-multi-2level/Moose/Exporter.pm:252] which was called 60 times, avg 6µs/call: # 60 times (151µs+212µs) by Moose::Role::after or Moose::Role::around or Moose::Role::before or Moose::Role::has or Moose::Role::override or Moose::Role::requires or Moose::Role::with or Moose::extends or Moose::has or Moose::with at line 408, avg 6µs/call
|| sub { Class::MOP::class_of(shift) };
# spent 212µs making 60 calls to Class::MOP::class_of, avg 4µs/call
253
25433µs for my $name ( @{ $args->{with_meta} } ) {
2551614µs1638µs my $sub = $class->_sub_from_package( $package, $name )
# spent 38µs making 16 calls to Moose::Exporter::_sub_from_package, avg 2µs/call
256 or next;
257
258165µs my $fq_name = $package . '::' . $name;
259
2601627µs1654µs $exports{$name} = $class->_make_wrapped_sub_with_meta(
# spent 54µs making 16 calls to Moose::Exporter::_make_wrapped_sub_with_meta, avg 3µs/call
261 $fq_name,
262 $sub,
263 $export_recorder,
264 $meta_lookup,
265 ) unless exists $exports{$name};
266 }
267
26833µs for my $name ( @{ $args->{with_caller} } ) {
269 my $sub = $class->_sub_from_package( $package, $name )
270 or next;
271
272 my $fq_name = $package . '::' . $name;
273
274 $exports{$name} = $class->_make_wrapped_sub(
275 $fq_name,
276 $sub,
277 $export_recorder,
278 ) unless exists $exports{$name};
279 }
280
28139µs311µs my @extra_exports = $class->_parse_trait_aliases(
# spent 11µs making 3 calls to Moose::Exporter::_parse_trait_aliases, avg 4µs/call
282 $package, $args->{trait_aliases},
283 );
28437µs for my $name ( @{ $args->{as_is} }, @extra_exports ) {
28529400ns my ( $sub, $coderef_name );
286
287294µs if ( ref $name ) {
2884400ns $sub = $name;
289
2904200ns my $coderef_pkg;
291414µs44µs ( $coderef_pkg, $coderef_name )
# spent 4µs making 4 calls to Class::MOP::get_code_info, avg 1µs/call
292 = Class::MOP::get_code_info($name);
293
29443µs if ( $coderef_pkg ne $package ) {
295 $is_reexport->{$coderef_name} = 1;
296 }
297 }
298 else {
2992521µs2561µs $sub = $class->_sub_from_package( $package, $name )
# spent 61µs making 25 calls to Moose::Exporter::_sub_from_package, avg 2µs/call
300 or next;
301
302255µs $coderef_name = $name;
303 }
304
3052919µs $export_recorder->{$sub} = 1;
306
307184267µs
# spent 149µs within Moose::Exporter::__ANON__[/Users/dde/perl5/perlbrew/perls/5.18.0t/lib/site_perl/5.18.0/darwin-thread-multi-2level/Moose/Exporter.pm:307] which was called 184 times, avg 808ns/call: # 184 times (149µs+0s) by Sub::Exporter::default_generator at line 419 of Sub/Exporter.pm, avg 808ns/call
$exports{$coderef_name} = sub { $sub }
3082950µs unless exists $exports{$coderef_name};
309 }
310 }
311
31238µs return \%exports;
313}
314
315
# spent 99µs within Moose::Exporter::_sub_from_package which was called 41 times, avg 2µs/call: # 25 times (61µs+0s) by Moose::Exporter::_make_sub_exporter_params at line 299, avg 2µs/call # 16 times (38µs+0s) by Moose::Exporter::_make_sub_exporter_params at line 255, avg 2µs/call
sub _sub_from_package {
316415µs my $sclass = shift;
317411µs my $package = shift;
318412µs my $name = shift;
319
320415µs my $sub = do {
32121.43ms226µs
# spent 16µs (6+10) within Moose::Exporter::BEGIN@321 which was called: # once (6µs+10µs) by Moose::BEGIN@18 at line 321
no strict 'refs';
# spent 16µs making 1 call to Moose::Exporter::BEGIN@321 # spent 10µs making 1 call to strict::unimport
3224131µs \&{ $package . '::' . $name };
323 };
324
3254162µs return $sub if defined &$sub;
326
327 Carp::cluck "Trying to export undefined sub ${package}::${name}";
328
329 return;
330}
331
33210sour $CALLER;
333
334sub _make_wrapped_sub {
335 my $self = shift;
336 my $fq_name = shift;
337 my $sub = shift;
338 my $export_recorder = shift;
339
340 # We need to set the package at import time, so that when
341 # package Foo imports has(), we capture "Foo" as the
342 # package. This lets other packages call Foo::has() and get
343 # the right package. This is done for backwards compatibility
344 # with existing production code, not because this is a good
345 # idea ;)
346 return sub {
347 my $caller = $CALLER;
348
349 my $wrapper = $self->_curry_wrapper( $sub, $fq_name, $caller );
350
351 my $sub = subname( $fq_name => $wrapper );
352
353 $export_recorder->{$sub} = 1;
354
355 return $sub;
356 };
357}
358
359
# spent 54µs within Moose::Exporter::_make_wrapped_sub_with_meta which was called 16 times, avg 3µs/call: # 16 times (54µs+0s) by Moose::Exporter::_make_sub_exporter_params at line 260, avg 3µs/call
sub _make_wrapped_sub_with_meta {
360163µs my $self = shift;
361162µs my $fq_name = shift;
362162µs my $sub = shift;
36316500ns my $export_recorder = shift;
36416200ns my $meta_lookup = shift;
365
366
# spent 1.97ms (1.04+932µs) within Moose::Exporter::__ANON__[/Users/dde/perl5/perlbrew/perls/5.18.0t/lib/site_perl/5.18.0/darwin-thread-multi-2level/Moose/Exporter.pm:379] which was called 176 times, avg 11µs/call: # 176 times (1.04ms+932µs) by Sub::Exporter::default_generator at line 419 of Sub/Exporter.pm, avg 11µs/call
return sub {
36717619µs my $caller = $CALLER;
368
369176137µs176644µs my $wrapper = $self->_late_curry_wrapper(
# spent 644µs making 176 calls to Moose::Exporter::_late_curry_wrapper, avg 4µs/call
370 $sub, $fq_name,
371 $meta_lookup => $caller
372 );
373
374176555µs176289µs my $sub = subname( $fq_name => $wrapper );
# spent 289µs making 176 calls to Sub::Name::subname, avg 2µs/call
375
376176138µs $export_recorder->{$sub} = 1;
377
378176298µs return $sub;
3791651µs };
380}
381
382sub _curry_wrapper {
383 my $class = shift;
384 my $sub = shift;
385 my $fq_name = shift;
386 my @extra = @_;
387
388 my $wrapper = sub { $sub->( @extra, @_ ) };
389 if ( my $proto = prototype $sub ) {
390
391 # XXX - Perl's prototype sucks. Use & to make set_prototype
392 # ignore the fact that we're passing "private variables"
393 &Scalar::Util::set_prototype( $wrapper, $proto );
394 }
395 return $wrapper;
396}
397
398
# spent 644µs within Moose::Exporter::_late_curry_wrapper which was called 176 times, avg 4µs/call: # 176 times (644µs+0s) by Moose::Exporter::__ANON__[/Users/dde/perl5/perlbrew/perls/5.18.0t/lib/site_perl/5.18.0/darwin-thread-multi-2level/Moose/Exporter.pm:379] at line 369, avg 4µs/call
sub _late_curry_wrapper {
39917619µs my $class = shift;
40017613µs my $sub = shift;
40117618µs my $fq_name = shift;
4021764µs my $extra = shift;
40317657µs my @ex_args = @_;
404
405 my $wrapper = sub {
406
407 # resolve curried arguments at runtime via this closure
4086077µs60363µs my @curry = ( $extra->(@ex_args) );
# spent 363µs making 60 calls to Moose::Exporter::__ANON__[Moose/Exporter.pm:252], avg 6µs/call
40960207µs60414ms return $sub->( @curry, @_ );
# spent 257ms making 2 calls to Moose::with, avg 129ms/call # spent 121ms making 11 calls to Moose::Role::with, avg 11.0ms/call, recursion: max depth 2, sum of overlapping time 38.0ms # spent 68.5ms making 9 calls to Moose::has, avg 7.61ms/call # spent 4.90ms making 19 calls to Moose::Role::has, avg 258µs/call # spent 533µs making 1 call to Moose::extends # spent 241µs making 6 calls to Moose::Role::requires, avg 40µs/call # spent 154µs making 6 calls to Moose::Role::around, avg 26µs/call # spent 92µs making 3 calls to Moose::Role::override, avg 30µs/call # spent 60µs making 2 calls to Moose::Role::before, avg 30µs/call # spent 28µs making 1 call to Moose::Role::after
410176292µs };
411
41217622µs if ( my $proto = prototype $sub ) {
413
414 # XXX - Perl's prototype sucks. Use & to make set_prototype
415 # ignore the fact that we're passing "private variables"
416 &Scalar::Util::set_prototype( $wrapper, $proto );
417 }
418176334µs return $wrapper;
419}
420
421
# spent 21µs within Moose::Exporter::_make_import_sub which was called 3 times, avg 7µs/call: # 3 times (21µs+0s) by Moose::Exporter::build_import_methods at line 65, avg 7µs/call
sub _make_import_sub {
4223300ns shift;
4233800ns my $exporting_package = shift;
4243800ns my $exporter = shift;
4253300ns my $exports_from = shift;
4263400ns my $is_reexport = shift;
4273300ns my $meta_lookup = shift;
428
429
# spent 69.0ms (845µs+68.2) within Moose::Exporter::__ANON__[/Users/dde/perl5/perlbrew/perls/5.18.0t/lib/site_perl/5.18.0/darwin-thread-multi-2level/Moose/Exporter.pm:519] which was called 26 times, avg 2.66ms/call: # once (29µs+6.14ms) by MooseX::Storage::Engine::BEGIN@8 at line 8 of MooseX/Storage/Engine.pm # once (34µs+6.13ms) by MooseX::Storage::Meta::Attribute::Trait::DoNotSerialize::BEGIN@9 at line 9 of MooseX/Storage/Meta/Attribute/Trait/DoNotSerialize.pm # once (30µs+5.78ms) by Moose::Meta::Method::Accessor::Native::Array::BEGIN@12 at line 12 of Moose/Meta/Method/Accessor/Native/Array.pm # once (34µs+5.49ms) by MooseX::Storage::BEGIN@10 at line 10 of MooseX/Storage.pm # once (32µs+5.47ms) by Moose::Meta::Method::Accessor::Native::Array::Writer::BEGIN@12 at line 12 of Moose/Meta/Method/Accessor/Native/Array/Writer.pm # once (44µs+3.41ms) by Atom::BEGIN@2 at line 2 of lib/HackaMol/Atom.pm # once (30µs+2.78ms) by MooseX::Storage::Meta::Attribute::DoNotSerialize::BEGIN@8 at line 8 of MooseX/Storage/Meta/Attribute/DoNotSerialize.pm # once (43µs+2.15ms) by Moose::Meta::Method::Accessor::Native::Array::clear::BEGIN@12 at line 12 of Moose/Meta/Method/Accessor/Native/Array/clear.pm # once (42µs+2.01ms) by Moose::Meta::Method::Accessor::Native::Array::delete::BEGIN@12 at line 12 of Moose/Meta/Method/Accessor/Native/Array/delete.pm # once (31µs+1.89ms) by Moose::Meta::Method::Accessor::Native::Array::push::BEGIN@12 at line 12 of Moose/Meta/Method/Accessor/Native/Array/push.pm # once (34µs+1.86ms) by Moose::Meta::Attribute::Native::Trait::Array::BEGIN@9 at line 9 of Moose/Meta/Attribute/Native/Trait/Array.pm # once (31µs+1.84ms) by Moose::Meta::Method::Accessor::Native::Array::count::BEGIN@12 at line 12 of Moose/Meta/Method/Accessor/Native/Array/count.pm # once (31µs+1.82ms) by Moose::Meta::Method::Accessor::Native::Array::set::BEGIN@12 at line 12 of Moose/Meta/Method/Accessor/Native/Array/set.pm # once (31µs+1.82ms) by MooseX::Storage::IO::StorableFile::BEGIN@8 at line 8 of MooseX/Storage/IO/StorableFile.pm # once (31µs+1.82ms) by Moose::Meta::Method::Accessor::Native::Array::get::BEGIN@14 at line 14 of Moose/Meta/Method/Accessor/Native/Array/get.pm # once (30µs+1.82ms) by Moose::Meta::Method::Accessor::Native::Array::elements::BEGIN@12 at line 12 of Moose/Meta/Method/Accessor/Native/Array/elements.pm # once (29µs+1.80ms) by Moose::Meta::Method::Accessor::Native::Collection::BEGIN@12 at line 12 of Moose/Meta/Method/Accessor/Native/Collection.pm # once (32µs+1.80ms) by PhysVecRole::BEGIN@3 at line 3 of lib/roles/PhysVecRole.pm # once (29µs+1.79ms) by Moose::Meta::Method::Accessor::Native::Writer::BEGIN@15 at line 15 of Moose/Meta/Method/Accessor/Native/Writer.pm # once (29µs+1.78ms) by Moose::Meta::Method::Accessor::Native::Reader::BEGIN@12 at line 12 of Moose/Meta/Method/Accessor/Native/Reader.pm # once (30µs+1.78ms) by Moose::Meta::Attribute::Native::Trait::BEGIN@9 at line 9 of Moose/Meta/Attribute/Native/Trait.pm # once (30µs+1.76ms) by MooseX::Storage::Basic::BEGIN@8 at line 8 of MooseX/Storage/Basic.pm # once (30µs+1.74ms) by Moose::Meta::Method::Accessor::Native::BEGIN@15 at line 15 of Moose/Meta/Method/Accessor/Native.pm # once (27µs+1.27ms) by Moose::Meta::Attribute::Native::Trait::BEGIN@15 at line 15 of Moose/Meta/Attribute/Native/Trait.pm # once (48µs+1.17ms) by Moose::BEGIN@43 at line 43 of Moose.pm # once (27µs+1.08ms) by Moose::Role::BEGIN@22 at line 22 of Moose/Role.pm
return sub {
430
431 # I think we could use Sub::Exporter's collector feature
432 # to do this, but that would be rather gross, since that
433 # feature isn't really designed to return a value to the
434 # caller of the exporter sub.
435 #
436 # Also, this makes sure we preserve backwards compat for
437 # _get_caller, so it always sees the arguments in the
438 # expected order.
439262µs my $traits;
4402650µs26265µs ( $traits, @_ ) = _strip_traits(@_);
# spent 265µs making 26 calls to Moose::Exporter::_strip_traits, avg 10µs/call
441
442261µs my $metaclass;
4432646µs26167µs ( $metaclass, @_ ) = _strip_metaclass(@_);
# spent 167µs making 26 calls to Moose::Exporter::_strip_metaclass, avg 6µs/call
444264µs $metaclass
445 = Moose::Util::resolve_metaclass_alias( 'Class' => $metaclass )
446 if defined $metaclass && length $metaclass;
447
44826600ns my $meta_name;
4492651µs26157µs ( $meta_name, @_ ) = _strip_meta_name(@_);
# spent 157µs making 26 calls to Moose::Exporter::_strip_meta_name, avg 6µs/call
450
451 # Normally we could look at $_[0], but in some weird cases
452 # (involving goto &Moose::import), $_[0] ends as something
453 # else (like Squirrel).
454265µs my $class = $exporting_package;
455
4562627µs2648µs $CALLER = _get_caller(@_);
# spent 48µs making 26 calls to Moose::Exporter::_get_caller, avg 2µs/call
457
458 # this works because both pragmas set $^H (see perldoc
459 # perlvar) which affects the current compilation -
460 # i.e. the file who use'd us - which is why we don't need
461 # to do anything special to make it affect that file
462 # rather than this one (which is already compiled)
463
4642626µs26240µs strict->import;
# spent 240µs making 26 calls to strict::import, avg 9µs/call
4652623µs26100µs warnings->import;
# spent 100µs making 26 calls to warnings::import, avg 4µs/call
466
467261µs my $did_init_meta;
46852138µs2646µs for my $c ( grep { $_->can('init_meta') } $class, @{$exports_from} ) {
# spent 46µs making 26 calls to UNIVERSAL::can, avg 2µs/call
469
470 # init_meta can apply a role, which when loaded uses
471 # Moose::Exporter, which in turn sets $CALLER, so we need
472 # to protect against that.
473235µs local $CALLER = $CALLER;
4742323µs2336.5ms $c->init_meta(
# spent 21.9ms making 19 calls to Moose::Role::init_meta, avg 1.15ms/call # spent 14.5ms making 4 calls to Moose::init_meta, avg 3.64ms/call
475 for_class => $CALLER,
476 metaclass => $metaclass,
477 meta_name => $meta_name,
478 );
4792318µs $did_init_meta = 1;
480 }
481
482 {
483 # The metaroles will use Moose::Role, which in turn uses
484 # Moose::Exporter, which in turn sets $CALLER, so we need
485 # to protect against that.
4865217µs local $CALLER = $CALLER;
4872639µs26720µs _apply_metaroles(
# spent 720µs making 26 calls to Moose::Exporter::_apply_metaroles, avg 28µs/call
488 $CALLER,
489 [$class, @$exports_from],
490 $meta_lookup
491 );
492 }
493
494269µs if ( $did_init_meta && @{$traits} ) {
495
496 # The traits will use Moose::Role, which in turn uses
497 # Moose::Exporter, which in turn sets $CALLER, so we need
498 # to protect against that.
499 local $CALLER = $CALLER;
500 _apply_meta_traits( $CALLER, $traits, $meta_lookup );
501 }
502 elsif ( @{$traits} ) {
503 require Moose;
504 Moose->throw_error(
505 "Cannot provide traits when $class does not have an init_meta() method"
506 );
507 }
508
5092613µs my ( undef, @args ) = @_;
510267µs my $extra = shift @args if ref $args[0] eq 'HASH';
511
512264µs $extra ||= {};
513268µs if ( !$extra->{into} ) {
5142611µs $extra->{into_level} ||= 0;
515266µs $extra->{into_level}++;
516 }
517
51826129µs2630.0ms $class->$exporter( $extra, @args );
# spent 30.0ms making 26 calls to Sub::Exporter::__ANON__[Sub/Exporter.pm:337], avg 1.15ms/call
519318µs };
520}
521
522
# spent 265µs (181+84) within Moose::Exporter::_strip_traits which was called 26 times, avg 10µs/call: # 26 times (181µs+84µs) by Moose::Exporter::__ANON__[/Users/dde/perl5/perlbrew/perls/5.18.0t/lib/site_perl/5.18.0/darwin-thread-multi-2level/Moose/Exporter.pm:519] at line 440, avg 10µs/call
sub _strip_traits {
52353210µs2684µs my $idx = first_index { ( $_ || '' ) eq '-traits' } @_;
# spent 84µs making 26 calls to List::MoreUtils::firstidx, avg 3µs/call
524
5252675µs return ( [], @_ ) unless $idx >= 0 && $#_ >= $idx + 1;
526
527 my $traits = $_[ $idx + 1 ];
528
529 splice @_, $idx, 2;
530
531 $traits = [$traits] unless ref $traits;
532
533 return ( $traits, @_ );
534}
535
536
# spent 167µs (127+40) within Moose::Exporter::_strip_metaclass which was called 26 times, avg 6µs/call: # 26 times (127µs+40µs) by Moose::Exporter::__ANON__[/Users/dde/perl5/perlbrew/perls/5.18.0t/lib/site_perl/5.18.0/darwin-thread-multi-2level/Moose/Exporter.pm:519] at line 443, avg 6µs/call
sub _strip_metaclass {
53753122µs2640µs my $idx = first_index { ( $_ || '' ) eq '-metaclass' } @_;
# spent 40µs making 26 calls to List::MoreUtils::firstidx, avg 2µs/call
538
5392657µs return ( undef, @_ ) unless $idx >= 0 && $#_ >= $idx + 1;
540
541 my $metaclass = $_[ $idx + 1 ];
542
543 splice @_, $idx, 2;
544
545 return ( $metaclass, @_ );
546}
547
548
# spent 157µs (120+37) within Moose::Exporter::_strip_meta_name which was called 26 times, avg 6µs/call: # 26 times (120µs+37µs) by Moose::Exporter::__ANON__[/Users/dde/perl5/perlbrew/perls/5.18.0t/lib/site_perl/5.18.0/darwin-thread-multi-2level/Moose/Exporter.pm:519] at line 449, avg 6µs/call
sub _strip_meta_name {
54953112µs2637µs my $idx = first_index { ( $_ || '' ) eq '-meta_name' } @_;
# spent 37µs making 26 calls to List::MoreUtils::firstidx, avg 1µs/call
550
5512656µs return ( 'meta', @_ ) unless $idx >= 0 && $#_ >= $idx + 1;
552
553 my $meta_name = $_[ $idx + 1 ];
554
555 splice @_, $idx, 2;
556
557 return ( $meta_name, @_ );
558}
559
560
# spent 720µs (198+522) within Moose::Exporter::_apply_metaroles which was called 26 times, avg 28µs/call: # 26 times (198µs+522µs) by Moose::Exporter::__ANON__[/Users/dde/perl5/perlbrew/perls/5.18.0t/lib/site_perl/5.18.0/darwin-thread-multi-2level/Moose/Exporter.pm:519] at line 487, avg 28µs/call
sub _apply_metaroles {
561267µs my ($class, $exports_from, $meta_lookup) = @_;
562
5632620µs26337µs my $metaroles = _collect_metaroles($exports_from);
# spent 337µs making 26 calls to Moose::Exporter::_collect_metaroles, avg 13µs/call
564266µs my $base_class_roles = delete $metaroles->{base_class_roles};
565
5662627µs26156µs my $meta = $meta_lookup->($class);
# spent 156µs making 26 calls to Moose::Exporter::__ANON__[Moose/Exporter.pm:42], avg 6µs/call
567 # for instance, Moose.pm uses Moose::Util::TypeConstraints
568267µs return unless $meta;
569
570248µs Moose::Util::MetaRole::apply_metaroles(
571 for => $meta,
572 %$metaroles,
573 ) if keys %$metaroles;
574
57524112µs2429µs Moose::Util::MetaRole::apply_base_class_roles(
# spent 29µs making 24 calls to UNIVERSAL::isa, avg 1µs/call
576 for => $meta,
577 roles => $base_class_roles,
578 ) if $meta->isa('Class::MOP::Class')
579 && $base_class_roles && @$base_class_roles;
580}
581
582
# spent 337µs within Moose::Exporter::_collect_metaroles which was called 26 times, avg 13µs/call: # 26 times (337µs+0s) by Moose::Exporter::_apply_metaroles at line 563, avg 13µs/call
sub _collect_metaroles {
583264µs my ($exports_from) = @_;
584
5852697µs my @old_style_role_types = map { "${_}_roles" } qw(
586 metaclass
587 attribute_metaclass
588 method_metaclass
589 wrapped_method_metaclass
590 instance_metaclass
591 constructor_class
592 destructor_class
593 error_class
594 );
595
596262µs my %class_metaroles;
59726900ns my %role_metaroles;
598263µs my @base_class_roles;
59926600ns my %old_style_roles;
600
6012612µs for my $exporter (@$exports_from) {
602268µs my $data = $EXPORT_SPEC{$exporter};
603
604268µs if (exists $data->{class_metaroles}) {
605 for my $type (keys %{ $data->{class_metaroles} }) {
606 push @{ $class_metaroles{$type} ||= [] },
607 @{ $data->{class_metaroles}{$type} };
608 }
609 }
610
611266µs if (exists $data->{role_metaroles}) {
612 for my $type (keys %{ $data->{role_metaroles} }) {
613 push @{ $role_metaroles{$type} ||= [] },
614 @{ $data->{role_metaroles}{$type} };
615 }
616 }
617
618267µs if (exists $data->{base_class_roles}) {
619 push @base_class_roles, @{ $data->{base_class_roles} };
620 }
621
6222615µs for my $type (@old_style_role_types) {
62320834µs if (exists $data->{$type}) {
624 push @{ $old_style_roles{$type} ||= [] },
625 @{ $data->{$type} };
626 }
627 }
628 }
629
630 return {
6312690µs (keys(%class_metaroles)
632 ? (class_metaroles => \%class_metaroles)
633 : ()),
634 (keys(%role_metaroles)
635 ? (role_metaroles => \%role_metaroles)
636 : ()),
637 (@base_class_roles
638 ? (base_class_roles => \@base_class_roles)
639 : ()),
640 %old_style_roles,
641 };
642}
643
644sub _apply_meta_traits {
645 my ( $class, $traits, $meta_lookup ) = @_;
646
647 return unless @{$traits};
648
649 my $meta = $meta_lookup->($class);
650
651 my $type = $meta->isa('Moose::Meta::Role') ? 'Role'
652 : $meta->isa('Class::MOP::Class') ? 'Class'
653 : Moose->throw_error('Cannot determine metaclass type for '
654 . 'trait application. Meta isa '
655 . ref $meta);
656
657 my @resolved_traits = map {
658 ref $_
659 ? $_
660 : Moose::Util::resolve_metatrait_alias( $type => $_ )
661 } @$traits;
662
663 return unless @resolved_traits;
664
665 my %args = ( for => $class );
666
667 if ( $meta->isa('Moose::Meta::Role') ) {
668 $args{role_metaroles} = { role => \@resolved_traits };
669 }
670 else {
671 $args{class_metaroles} = { class => \@resolved_traits };
672 }
673
674 Moose::Util::MetaRole::apply_metaroles(%args);
675}
676
677
# spent 48µs within Moose::Exporter::_get_caller which was called 26 times, avg 2µs/call: # 26 times (48µs+0s) by Moose::Exporter::__ANON__[/Users/dde/perl5/perlbrew/perls/5.18.0t/lib/site_perl/5.18.0/darwin-thread-multi-2level/Moose/Exporter.pm:519] at line 456, avg 2µs/call
sub _get_caller {
678
679 # 1 extra level because it's called by import so there's a layer
680 # of indirection
681263µs my $offset = 1;
682
683 return
6842665µs ( ref $_[1] && defined $_[1]->{into} ) ? $_[1]->{into}
685 : ( ref $_[1] && defined $_[1]->{into_level} )
686 ? caller( $offset + $_[1]->{into_level} )
687 : caller($offset);
688}
689
690
# spent 15µs within Moose::Exporter::_make_unimport_sub which was called 3 times, avg 5µs/call: # 3 times (15µs+0s) by Moose::Exporter::build_import_methods at line 73, avg 5µs/call
sub _make_unimport_sub {
6913500ns shift;
6923600ns my $exporting_package = shift;
69331µs my $exports = shift;
6943500ns my $export_recorder = shift;
6953600ns my $is_reexport = shift;
6963800ns my $meta_lookup = shift;
697
698
# spent 1.29ms (115µs+1.18) within Moose::Exporter::__ANON__[/Users/dde/perl5/perlbrew/perls/5.18.0t/lib/site_perl/5.18.0/darwin-thread-multi-2level/Moose/Exporter.pm:706] which was called 17 times, avg 76µs/call: # once (8µs+84µs) by Moose::Meta::Method::Accessor::Native::Array::clear::BEGIN@31 at line 31 of Moose/Meta/Method/Accessor/Native/Array/clear.pm # once (7µs+81µs) by Moose::Meta::Method::Accessor::Native::Array::delete::BEGIN@53 at line 53 of Moose/Meta/Method/Accessor/Native/Array/delete.pm # once (6µs+76µs) by Moose::Meta::Method::Accessor::Native::Array::push::BEGIN@39 at line 39 of Moose/Meta/Method/Accessor/Native/Array/push.pm # once (6µs+74µs) by Moose::Meta::Method::Accessor::Native::Array::set::BEGIN@67 at line 67 of Moose/Meta/Method/Accessor/Native/Array/set.pm # once (6µs+73µs) by Moose::Meta::Method::Accessor::Native::Array::count::BEGIN@25 at line 25 of Moose/Meta/Method/Accessor/Native/Array/count.pm # once (8µs+71µs) by Moose::Meta::Method::Accessor::Native::Array::BEGIN@30 at line 30 of Moose/Meta/Method/Accessor/Native/Array.pm # once (6µs+72µs) by Moose::Meta::Attribute::Native::Trait::Array::BEGIN@15 at line 15 of Moose/Meta/Attribute/Native/Trait/Array.pm # once (6µs+71µs) by Moose::Meta::Method::Accessor::Native::Collection::BEGIN@168 at line 168 of Moose/Meta/Method/Accessor/Native/Collection.pm # once (6µs+71µs) by Moose::Meta::Method::Accessor::Native::Array::elements::BEGIN@25 at line 25 of Moose/Meta/Method/Accessor/Native/Array/elements.pm # once (8µs+69µs) by Moose::Meta::Method::Accessor::Native::Writer::BEGIN@176 at line 176 of Moose/Meta/Method/Accessor/Native/Writer.pm # once (8µs+68µs) by MooseX::Storage::IO::StorableFile::BEGIN@33 at line 33 of MooseX/Storage/IO/StorableFile.pm # once (6µs+69µs) by Moose::Meta::Method::Accessor::Native::Reader::BEGIN@50 at line 50 of Moose/Meta/Method/Accessor/Native/Reader.pm # once (6µs+65µs) by MooseX::Storage::Basic::BEGIN@61 at line 61 of MooseX/Storage/Basic.pm # once (6µs+65µs) by Moose::Meta::Method::Accessor::Native::BEGIN@164 at line 164 of Moose/Meta/Method/Accessor/Native.pm # once (7µs+62µs) by Moose::Meta::Attribute::Native::Trait::BEGIN@231 at line 231 of Moose/Meta/Attribute/Native/Trait.pm # once (6µs+62µs) by Moose::Meta::Attribute::Native::Trait::BEGIN@230 at line 230 of Moose/Meta/Attribute/Native/Trait.pm # once (10µs+45µs) by MooseX::Storage::Engine::BEGIN@365 at line 365 of MooseX/Storage/Engine.pm
return sub {
6991710µs my $caller = scalar caller();
700 Moose::Exporter->_remove_keywords(
701 $caller,
70217115µs171.18ms [ keys %{$exports} ],
# spent 1.18ms making 17 calls to Moose::Exporter::_remove_keywords, avg 69µs/call
703 $export_recorder,
704 $is_reexport,
705 );
706314µs };
707}
708
709
# spent 1.18ms (1.15+23µs) within Moose::Exporter::_remove_keywords which was called 17 times, avg 69µs/call: # 17 times (1.15ms+23µs) by Moose::Exporter::__ANON__[/Users/dde/perl5/perlbrew/perls/5.18.0t/lib/site_perl/5.18.0/darwin-thread-multi-2level/Moose/Exporter.pm:706] at line 702, avg 69µs/call
sub _remove_keywords {
710171µs shift;
711172µs my $package = shift;
712172µs my $keywords = shift;
71317800ns my $recorded_exports = shift;
71417900ns my $is_reexport = shift;
715
716261µs228µs
# spent 19µs (9+10) within Moose::Exporter::BEGIN@716 which was called: # once (9µs+10µs) by Moose::BEGIN@18 at line 716
no strict 'refs';
# spent 19µs making 1 call to Moose::Exporter::BEGIN@716 # spent 10µs making 1 call to strict::unimport
717
7181743µs foreach my $name ( @{$keywords} ) {
719243207µs if ( defined &{ $package . '::' . $name } ) {
720241167µs my $sub = \&{ $package . '::' . $name };
721
722 # make sure it is from us
72324174µs next unless $recorded_exports->{$sub};
724
72523126µs if ( $is_reexport->{$name} ) {
7262320µs222µs
# spent 14µs (6+8) within Moose::Exporter::BEGIN@726 which was called: # once (6µs+8µs) by Moose::BEGIN@18 at line 726
no strict 'refs';
# spent 14µs making 1 call to Moose::Exporter::BEGIN@726 # spent 8µs making 1 call to strict::unimport
727 next
728 unless _export_is_flagged(
72932118µs3223µs \*{ join q{::} => $package, $name } );
# spent 23µs making 32 calls to Moose::Exporter::_export_is_flagged, avg 725ns/call
730 }
731
732 # and if it is from us, then undef the slot
733229415µs delete ${ $package . '::' }{$name};
734 }
735 }
736}
737
738# maintain this for now for backcompat
739# make sure to return a sub to install in the same circumstances as previously
740# but this functionality now happens at the end of ->import
741
# spent 40µs within Moose::Exporter::_make_init_meta which was called 3 times, avg 13µs/call: # 3 times (40µs+0s) by Moose::Exporter::build_import_methods at line 81, avg 13µs/call
sub _make_init_meta {
7423300ns shift;
7433700ns my $class = shift;
74431µs my $args = shift;
7453500ns my $meta_lookup = shift;
746
7473300ns my %old_style_roles;
748313µs for my $role (
749 map {"${_}_roles"}
750 qw(
751 metaclass
752 attribute_metaclass
753 method_metaclass
754 wrapped_method_metaclass
755 instance_metaclass
756 constructor_class
757 destructor_class
758 error_class
759 )
760 ) {
761245µs $old_style_roles{$role} = $args->{$role}
762 if exists $args->{$role};
763 }
764
7653300ns my %base_class_roles;
76631µs %base_class_roles = ( roles => $args->{base_class_roles} )
767 if exists $args->{base_class_roles};
768
769 my %new_style_roles = map { $_ => $args->{$_} }
77034µs grep { exists $args->{$_} } qw( class_metaroles role_metaroles );
771
77238µs return unless %new_style_roles || %old_style_roles || %base_class_roles;
773
774 return sub {
775 shift;
776 my %opts = @_;
777 $meta_lookup->($opts{for_class});
778 };
779}
780
781
# spent 63µs (22+41) within Moose::Exporter::import which was called 3 times, avg 21µs/call: # once (11µs+15µs) by Moose::BEGIN@18 at line 18 of Moose.pm # once (6µs+14µs) by Moose::Role::BEGIN@20 at line 20 of Moose/Role.pm # once (6µs+12µs) by Moose::Util::TypeConstraints::BEGIN@13 at line 13 of Moose/Util/TypeConstraints.pm
sub import {
78233µs328µs strict->import;
# spent 28µs making 3 calls to strict::import, avg 10µs/call
783311µs313µs warnings->import;
# spent 13µs making 3 calls to warnings::import, avg 4µs/call
784}
785
78613µs1;
787
788# ABSTRACT: make an import() and unimport() just like Moose.pm
789
790__END__
 
# spent 23µs within Moose::Exporter::_export_is_flagged which was called 32 times, avg 725ns/call: # 32 times (23µs+0s) by Moose::Exporter::_remove_keywords at line 729, avg 725ns/call
sub Moose::Exporter::_export_is_flagged; # xsub
# spent 41µs within Moose::Exporter::_flag_as_reexport which was called 43 times, avg 944ns/call: # 43 times (41µs+0s) by Moose::Exporter::__ANON__[/Users/dde/perl5/perlbrew/perls/5.18.0t/lib/site_perl/5.18.0/darwin-thread-multi-2level/Moose/Exporter.pm:137] at line 135, avg 944ns/call
sub Moose::Exporter::_flag_as_reexport; # xsub