← Index
NYTProf Performance Profile   « block view • line view • sub view »
For bin/pan_genome_post_analysis
  Run on Fri Mar 27 11:43:32 2015
Reported on Fri Mar 27 11:45:33 2015

Filename/Users/ap13/perl5/lib/perl5/darwin-2level/Class/MOP/Mixin/HasOverloads.pm
StatementsExecuted 28 statements in 1.53ms
Subroutines
Calls P F Exclusive
Time
Inclusive
Time
Subroutine
1111.42ms1.68msClass::MOP::Mixin::HasOverloads::::BEGIN@7Class::MOP::Mixin::HasOverloads::BEGIN@7
111726µs4.78msClass::MOP::Mixin::HasOverloads::::BEGIN@9Class::MOP::Mixin::HasOverloads::BEGIN@9
11129µs56µsClass::MOP::Mixin::HasOverloads::::BEGIN@4Class::MOP::Mixin::HasOverloads::BEGIN@4
41129µs133µsClass::MOP::Mixin::HasOverloads::::is_overloadedClass::MOP::Mixin::HasOverloads::is_overloaded
11118µs53µsClass::MOP::Mixin::HasOverloads::::BEGIN@10Class::MOP::Mixin::HasOverloads::BEGIN@10
11117µs95µsClass::MOP::Mixin::HasOverloads::::BEGIN@50Class::MOP::Mixin::HasOverloads::BEGIN@50
11113µs51µsClass::MOP::Mixin::HasOverloads::::BEGIN@11Class::MOP::Mixin::HasOverloads::BEGIN@11
11113µs23µsClass::MOP::Mixin::HasOverloads::::BEGIN@5Class::MOP::Mixin::HasOverloads::BEGIN@5
11112µs55µsClass::MOP::Mixin::HasOverloads::::BEGIN@15Class::MOP::Mixin::HasOverloads::BEGIN@15
1116µs6µsClass::MOP::Mixin::HasOverloads::::BEGIN@13Class::MOP::Mixin::HasOverloads::BEGIN@13
0000s0sClass::MOP::Mixin::HasOverloads::::_overload_forClass::MOP::Mixin::HasOverloads::_overload_for
0000s0sClass::MOP::Mixin::HasOverloads::::_overload_infoClass::MOP::Mixin::HasOverloads::_overload_info
0000s0sClass::MOP::Mixin::HasOverloads::::add_overloaded_operatorClass::MOP::Mixin::HasOverloads::add_overloaded_operator
0000s0sClass::MOP::Mixin::HasOverloads::::get_all_overloaded_operatorsClass::MOP::Mixin::HasOverloads::get_all_overloaded_operators
0000s0sClass::MOP::Mixin::HasOverloads::::get_overload_fallback_valueClass::MOP::Mixin::HasOverloads::get_overload_fallback_value
0000s0sClass::MOP::Mixin::HasOverloads::::get_overload_listClass::MOP::Mixin::HasOverloads::get_overload_list
0000s0sClass::MOP::Mixin::HasOverloads::::get_overloaded_operatorClass::MOP::Mixin::HasOverloads::get_overloaded_operator
0000s0sClass::MOP::Mixin::HasOverloads::::has_overloaded_operatorClass::MOP::Mixin::HasOverloads::has_overloaded_operator
0000s0sClass::MOP::Mixin::HasOverloads::::remove_overloaded_operatorClass::MOP::Mixin::HasOverloads::remove_overloaded_operator
0000s0sClass::MOP::Mixin::HasOverloads::::set_overload_fallback_valueClass::MOP::Mixin::HasOverloads::set_overload_fallback_value
Call graph for these subroutines as a Graphviz dot language file.
Line State
ments
Time
on line
Calls Time
in subs
Code
1package Class::MOP::Mixin::HasOverloads;
211µsour $VERSION = '2.1403';
3
4240µs284µs
# spent 56µs (29+27) within Class::MOP::Mixin::HasOverloads::BEGIN@4 which was called: # once (29µs+27µs) by Class::MOP::BEGIN@17 at line 4
use strict;
# spent 56µs making 1 call to Class::MOP::Mixin::HasOverloads::BEGIN@4 # spent 27µs making 1 call to strict::import
5236µs233µs
# spent 23µs (13+10) within Class::MOP::Mixin::HasOverloads::BEGIN@5 which was called: # once (13µs+10µs) by Class::MOP::BEGIN@17 at line 5
use warnings;
# spent 23µs making 1 call to Class::MOP::Mixin::HasOverloads::BEGIN@5 # spent 10µs making 1 call to warnings::import
6
72220µs11.68ms
# spent 1.68ms (1.42+260µs) within Class::MOP::Mixin::HasOverloads::BEGIN@7 which was called: # once (1.42ms+260µs) by Class::MOP::BEGIN@17 at line 7
use Class::MOP::Overload;
# spent 1.68ms making 1 call to Class::MOP::Mixin::HasOverloads::BEGIN@7
8
92206µs24.85ms
# spent 4.78ms (726µs+4.06) within Class::MOP::Mixin::HasOverloads::BEGIN@9 which was called: # once (726µs+4.06ms) by Class::MOP::BEGIN@17 at line 9
use Devel::OverloadInfo 'overload_info';
# spent 4.78ms making 1 call to Class::MOP::Mixin::HasOverloads::BEGIN@9 # spent 69µs making 1 call to Exporter::import
10246µs288µs
# spent 53µs (18+35) within Class::MOP::Mixin::HasOverloads::BEGIN@10 which was called: # once (18µs+35µs) by Class::MOP::BEGIN@17 at line 10
use Scalar::Util 'blessed';
# spent 53µs making 1 call to Class::MOP::Mixin::HasOverloads::BEGIN@10 # spent 35µs making 1 call to Exporter::import
11238µs288µs
# spent 51µs (13+37) within Class::MOP::Mixin::HasOverloads::BEGIN@11 which was called: # once (13µs+37µs) by Class::MOP::BEGIN@17 at line 11
use Sub::Identify 'sub_name', 'stash_name';
# spent 51µs making 1 call to Class::MOP::Mixin::HasOverloads::BEGIN@11 # spent 37µs making 1 call to Exporter::import
12
13234µs16µs
# spent 6µs within Class::MOP::Mixin::HasOverloads::BEGIN@13 which was called: # once (6µs+0s) by Class::MOP::BEGIN@17 at line 13
use overload ();
# spent 6µs making 1 call to Class::MOP::Mixin::HasOverloads::BEGIN@13
14
152332µs298µs
# spent 55µs (12+43) within Class::MOP::Mixin::HasOverloads::BEGIN@15 which was called: # once (12µs+43µs) by Class::MOP::BEGIN@17 at line 15
use parent 'Class::MOP::Mixin';
# spent 55µs making 1 call to Class::MOP::Mixin::HasOverloads::BEGIN@15 # spent 43µs making 1 call to parent::import
16
17
# spent 133µs (29+104) within Class::MOP::Mixin::HasOverloads::is_overloaded which was called 4 times, avg 33µs/call: # 4 times (29µs+104µs) by Moose::Meta::Role::Application::apply_overloading at line 85 of Moose/Meta/Role/Application.pm, avg 33µs/call
sub is_overloaded {
18842µs my $self = shift;
198104µs return overload::Overloaded($self->name);
# spent 101µs making 4 calls to overload::Overloaded, avg 25µs/call # spent 2µs making 4 calls to Class::MOP::Package::name, avg 600ns/call
20}
21
22sub get_overload_list {
23 my $self = shift;
24
25 my $info = $self->_overload_info;
26 return grep { $_ ne 'fallback' } keys %{$info}
27}
28
29sub get_all_overloaded_operators {
30 my $self = shift;
31 return map { $self->_overload_for($_) } $self->get_overload_list;
32}
33
34sub has_overloaded_operator {
35 my $self = shift;
36 my ($op) = @_;
37 return defined $self->_overload_info->{$op};
38}
39
40sub _overload_map {
41 $_[0]->{_overload_map} ||= {};
42}
43
44sub get_overloaded_operator {
45 my $self = shift;
46 my ($op) = @_;
47 return $self->_overload_map->{$op} ||= $self->_overload_for($op);
48}
49
502525µs2172µs
# spent 95µs (17+78) within Class::MOP::Mixin::HasOverloads::BEGIN@50 which was called: # once (17µs+78µs) by Class::MOP::BEGIN@17 at line 50
use constant _SET_FALLBACK_EACH_TIME => $] < 5.120;
# spent 95µs making 1 call to Class::MOP::Mixin::HasOverloads::BEGIN@50 # spent 78µs making 1 call to constant::import
51
52sub add_overloaded_operator {
53 my $self = shift;
54 my ( $op, $overload ) = @_;
55
56 my %p = ( associated_metaclass => $self );
57 if ( !ref $overload ) {
58 %p = (
59 %p,
60 operator => $op,
61 method_name => $overload,
62 associated_metaclass => $self,
63 );
64 $p{method} = $self->get_method($overload)
65 if $self->has_method($overload);
66 $overload = Class::MOP::Overload->new(%p);
67 }
68 elsif ( !blessed $overload) {
69 $overload = Class::MOP::Overload->new(
70 operator => $op,
71 coderef => $overload,
72 coderef_name => sub_name($overload),
73 coderef_package => stash_name($overload),
74 %p,
75 );
76 }
77
78 $overload->attach_to_class($self);
79 $self->_overload_map->{$op} = $overload;
80
81 my %overload = (
82 $op => $overload->has_coderef
83 ? $overload->coderef
84 : $overload->method_name
85 );
86
87 # Perl 5.10 and earlier appear to have a bug where setting a new
88 # overloading operator wipes out the fallback value unless we pass it each
89 # time.
90 if (_SET_FALLBACK_EACH_TIME) {
91 $overload{fallback} = $self->get_overload_fallback_value;
92 }
93
94 $self->name->overload::OVERLOAD(%overload);
95}
96
97sub remove_overloaded_operator {
98 my $self = shift;
99 my ($op) = @_;
100
101 delete $self->_overload_map->{$op};
102
103 # overload.pm provides no api for this - but the problem that makes this
104 # necessary has been fixed in 5.18
105 $self->get_or_add_package_symbol('%OVERLOAD')->{dummy}++
106 if $] < 5.017000;
107
108 $self->remove_package_symbol('&(' . $op);
109}
110
111sub get_overload_fallback_value {
112 my $self = shift;
113 return $self->_overload_info->{fallback}{value};
114}
115
116sub set_overload_fallback_value {
117 my $self = shift;
118 my $value = shift;
119
120 $self->name->overload::OVERLOAD( fallback => $value );
121}
122
123# We could cache this but we'd need some logic to clear it at all the right
124# times, which seems more tedious than it's worth.
125sub _overload_info {
126 my $self = shift;
127 return overload_info( $self->name ) || {};
128}
129
130sub _overload_for {
131 my $self = shift;
132 my $op = shift;
133
134 my $map = $self->_overload_map;
135 return $map->{$op} if $map->{$op};
136
137 my $info = $self->_overload_info->{$op};
138 return unless $info;
139
140 my %p = (
141 operator => $op,
142 associated_metaclass => $self,
143 );
144
145 if ( $info->{code} && !$info->{method_name} ) {
146 $p{coderef} = $info->{code};
147 @p{ 'coderef_package', 'coderef_name' }
148 = $info->{code_name} =~ /(.+)::([^:]+)/;
149 }
150 else {
151 $p{method_name} = $info->{method_name};
152 if ( $self->has_method( $p{method_name} ) ) {
153 $p{method} = $self->get_method( $p{method_name} );
154 }
155 }
156
157 return $map->{$op} = Class::MOP::Overload->new(%p);
158}
159
16015µs1;
161
162# ABSTRACT: Methods for metaclasses which have overloads
163
164__END__