← 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:58 2015

Filename/Users/ap13/perl5/lib/perl5/darwin-2level/Class/MOP/Overload.pm
StatementsExecuted 30 statements in 1.30ms
Subroutines
Calls P F Exclusive
Time
Inclusive
Time
Subroutine
11119µs58µsClass::MOP::Overload::::BEGIN@11Class::MOP::Overload::BEGIN@11
11117µs37µsClass::MOP::Overload::::BEGIN@4Class::MOP::Overload::BEGIN@4
11116µs22µsClass::MOP::Overload::::BEGIN@5Class::MOP::Overload::BEGIN@5
11114µs77µsClass::MOP::Overload::::BEGIN@9Class::MOP::Overload::BEGIN@9
11112µs61µsClass::MOP::Overload::::BEGIN@8Class::MOP::Overload::BEGIN@8
1115µs5µsClass::MOP::Overload::::BEGIN@7Class::MOP::Overload::BEGIN@7
0000s0sClass::MOP::Overload::::__ANON__[:48]Class::MOP::Overload::__ANON__[:48]
0000s0sClass::MOP::Overload::::__ANON__[:54]Class::MOP::Overload::__ANON__[:54]
0000s0sClass::MOP::Overload::::_is_equal_toClass::MOP::Overload::_is_equal_to
0000s0sClass::MOP::Overload::::_set_original_overloadClass::MOP::Overload::_set_original_overload
0000s0sClass::MOP::Overload::::attach_to_classClass::MOP::Overload::attach_to_class
0000s0sClass::MOP::Overload::::cloneClass::MOP::Overload::clone
0000s0sClass::MOP::Overload::::is_anonymousClass::MOP::Overload::is_anonymous
0000s0sClass::MOP::Overload::::newClass::MOP::Overload::new
0000s0sClass::MOP::Overload::::original_overloadClass::MOP::Overload::original_overload
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::Overload;
212µsour $VERSION = '2.1403';
3
4244µs257µs
# spent 37µs (17+20) within Class::MOP::Overload::BEGIN@4 which was called: # once (17µs+20µs) by Class::MOP::Mixin::HasOverloads::BEGIN@7 at line 4
use strict;
# spent 37µs making 1 call to Class::MOP::Overload::BEGIN@4 # spent 20µs making 1 call to strict::import
5235µs227µs
# spent 22µs (16+6) within Class::MOP::Overload::BEGIN@5 which was called: # once (16µs+6µs) by Class::MOP::Mixin::HasOverloads::BEGIN@7 at line 5
use warnings;
# spent 22µs making 1 call to Class::MOP::Overload::BEGIN@5 # spent 6µs making 1 call to warnings::import
6
7235µs15µs
# spent 5µs within Class::MOP::Overload::BEGIN@7 which was called: # once (5µs+0s) by Class::MOP::Mixin::HasOverloads::BEGIN@7 at line 7
use overload ();
# spent 5µs making 1 call to Class::MOP::Overload::BEGIN@7
8236µs2109µs
# spent 61µs (12+49) within Class::MOP::Overload::BEGIN@8 which was called: # once (12µs+49µs) by Class::MOP::Mixin::HasOverloads::BEGIN@7 at line 8
use Scalar::Util qw( blessed weaken );
# spent 61µs making 1 call to Class::MOP::Overload::BEGIN@8 # spent 49µs making 1 call to Exporter::import
9248µs2140µs
# spent 77µs (14+63) within Class::MOP::Overload::BEGIN@9 which was called: # once (14µs+63µs) by Class::MOP::Mixin::HasOverloads::BEGIN@7 at line 9
use Try::Tiny;
# spent 77µs making 1 call to Class::MOP::Overload::BEGIN@9 # spent 63µs making 1 call to Exporter::import
10
112943µs297µs
# spent 58µs (19+39) within Class::MOP::Overload::BEGIN@11 which was called: # once (19µs+39µs) by Class::MOP::Mixin::HasOverloads::BEGIN@7 at line 11
use parent 'Class::MOP::Object';
# spent 58µs making 1 call to Class::MOP::Overload::BEGIN@11 # spent 39µs making 1 call to parent::import
12
13my %Operators = (
14 map { $_ => 1 }
151524µs grep { $_ ne 'fallback' }
161117µs map { split /\s+/ } values %overload::ops
17);
18
19sub new {
20 my ( $class, %params ) = @_;
21
22 unless ( defined $params{operator} ) {
23 $class->_throw_exception('OverloadRequiresAnOperator');
24 }
25 unless ( $Operators{ $params{operator} } ) {
26 $class->_throw_exception(
27 'InvalidOverloadOperator',
28 operator => $params{operator},
29 );
30 }
31
32 unless ( defined $params{method_name} || $params{coderef} ) {
33 $class->_throw_exception(
34 'OverloadRequiresAMethodNameOrCoderef',
35 operator => $params{operator},
36 );
37 }
38
39 if ( $params{coderef} ) {
40 unless ( defined $params{coderef_package}
41 && defined $params{coderef_name} ) {
42
43 $class->_throw_exception('OverloadRequiresNamesForCoderef');
44 }
45 }
46
47 if ( $params{method}
48 && !try { $params{method}->isa('Class::MOP::Method') } ) {
49
50 $class->_throw_exception('OverloadRequiresAMetaMethod');
51 }
52
53 if ( $params{associated_metaclass}
54 && !try { $params{associated_metaclass}->isa('Class::MOP::Module') } )
55 {
56
57 $class->_throw_exception('OverloadRequiresAMetaClass');
58 }
59
60 my @optional_attrs
61 = qw( method_name coderef coderef_package coderef_name method associated_metaclass );
62
63 return bless {
64 operator => $params{operator},
65 map { defined $params{$_} ? ( $_ => $params{$_} ) : () }
66 @optional_attrs
67 },
68 $class;
69}
70
71sub operator { $_[0]->{operator} }
72
73sub method_name { $_[0]->{method_name} }
74sub has_method_name { exists $_[0]->{method_name} }
75
76sub method { $_[0]->{method} }
77sub has_method { exists $_[0]->{method} }
78
79sub coderef { $_[0]->{coderef} }
80sub has_coderef { exists $_[0]->{coderef} }
81
82sub coderef_package { $_[0]->{coderef_package} }
83sub has_coderef_package { exists $_[0]->{coderef_package} }
84
85sub coderef_name { $_[0]->{coderef_name} }
86sub has_coderef_name { exists $_[0]->{coderef_name} }
87
88sub associated_metaclass { $_[0]->{associated_metaclass} }
89
90sub is_anonymous {
91 my $self = shift;
92 return $self->has_coderef && $self->coderef_name eq '__ANON__';
93}
94
95sub attach_to_class {
96 my ( $self, $class ) = @_;
97 $self->{associated_metaclass} = $class;
98 weaken $self->{associated_metaclass};
99}
100
101sub clone {
102 my $self = shift;
103
104 my $clone = bless { %{$self}, @_ }, blessed($self);
105 weaken $clone->{associated_metaclass} if $clone->{associated_metaclass};
106
107 $clone->_set_original_overload($self);
108
109 return $clone;
110}
111
112sub original_overload { $_[0]->{original_overload} }
113sub _set_original_overload { $_[0]->{original_overload} = $_[1] }
114
115sub _is_equal_to {
116 my $self = shift;
117 my $other = shift;
118
119 if ( $self->has_coderef ) {
120 return unless $other->has_coderef;
121 return $self->coderef == $other->coderef;
122 }
123 else {
124 return $self->method_name eq $other->method_name;
125 }
126}
127
128117µs1;
129
130# ABSTRACT: Overload Meta Object
131
132__END__