← Index
NYTProf Performance Profile   « line view »
For /home/ss5/perl5/perlbrew/perls/perl-5.22.0/bin/benchmarkanything-storage
  Run on Mon Jan 29 16:55:34 2018
Reported on Mon Jan 29 16:57:06 2018

Filename/home/ss5/perl5/perlbrew/perls/perl-5.22.0/lib/site_perl/5.22.0/x86_64-linux/Class/MOP/Overload.pm
StatementsExecuted 30 statements in 554µs
Subroutines
Calls P F Exclusive
Time
Inclusive
Time
Subroutine
1118µs9µsClass::MOP::Overload::::BEGIN@4Class::MOP::Overload::BEGIN@4
1117µs9µsClass::MOP::Overload::::BEGIN@5Class::MOP::Overload::BEGIN@5
1115µs27µsClass::MOP::Overload::::BEGIN@9Class::MOP::Overload::BEGIN@9
1115µs18µsClass::MOP::Overload::::BEGIN@11Class::MOP::Overload::BEGIN@11
1114µs26µsClass::MOP::Overload::::BEGIN@8Class::MOP::Overload::BEGIN@8
1113µs3µ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;
21300nsour $VERSION = '2.1605';
3
4213µs210µs
# spent 9µs (8+1) within Class::MOP::Overload::BEGIN@4 which was called: # once (8µs+1µs) by Class::MOP::Mixin::HasOverloads::BEGIN@7 at line 4
use strict;
# spent 9µs making 1 call to Class::MOP::Overload::BEGIN@4 # spent 1µs making 1 call to strict::import
5213µs212µs
# spent 9µs (7+2) within Class::MOP::Overload::BEGIN@5 which was called: # once (7µs+2µs) by Class::MOP::Mixin::HasOverloads::BEGIN@7 at line 5
use warnings;
# spent 9µs making 1 call to Class::MOP::Overload::BEGIN@5 # spent 2µs making 1 call to warnings::import
6
7213µs13µs
# spent 3µs within Class::MOP::Overload::BEGIN@7 which was called: # once (3µs+0s) by Class::MOP::Mixin::HasOverloads::BEGIN@7 at line 7
use overload ();
# spent 3µs making 1 call to Class::MOP::Overload::BEGIN@7
8218µs247µs
# spent 26µs (4+22) within Class::MOP::Overload::BEGIN@8 which was called: # once (4µs+22µs) by Class::MOP::Mixin::HasOverloads::BEGIN@7 at line 8
use Scalar::Util qw( blessed weaken );
# spent 26µs making 1 call to Class::MOP::Overload::BEGIN@8 # spent 22µs making 1 call to Exporter::import
9215µs248µs
# spent 27µs (5+21) within Class::MOP::Overload::BEGIN@9 which was called: # once (5µs+21µs) by Class::MOP::Mixin::HasOverloads::BEGIN@7 at line 9
use Try::Tiny;
# spent 27µs making 1 call to Class::MOP::Overload::BEGIN@9 # spent 22µs making 1 call to Exporter::import
10
112414µs232µs
# spent 18µs (5+13) within Class::MOP::Overload::BEGIN@11 which was called: # once (5µs+13µs) by Class::MOP::Mixin::HasOverloads::BEGIN@7 at line 11
use parent 'Class::MOP::Object';
# spent 18µs making 1 call to Class::MOP::Overload::BEGIN@11 # spent 13µs making 1 call to parent::import
12
13my %Operators = (
14 map { $_ => 1 }
15 grep { $_ ne 'fallback' }
161662µ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
12815µs1;
129
130# ABSTRACT: Overload Meta Object
131
132__END__