← Index
NYTProf Performance Profile   « block view • line view • sub view »
For mentat.storage.mongo.pl
  Run on Tue Jun 24 09:58:41 2014
Reported on Tue Jun 24 09:59:35 2014

Filename/usr/local/lib/perl/5.14.2/Moose/Meta/TypeConstraint/Union.pm
StatementsExecuted 99 statements in 1.27ms
Subroutines
Calls P F Exclusive
Time
Inclusive
Time
Subroutine
111374µs897µsMoose::Meta::TypeConstraint::Union::::BEGIN@14Moose::Meta::TypeConstraint::Union::BEGIN@14
11144µs215µsMoose::Meta::TypeConstraint::Union::::newMoose::Meta::TypeConstraint::Union::new
42137µs124µsMoose::Meta::TypeConstraint::Union::::can_be_inlinedMoose::Meta::TypeConstraint::Union::can_be_inlined
31136µs491µsMoose::Meta::TypeConstraint::Union::::_inline_checkMoose::Meta::TypeConstraint::Union::_inline_check
22219µs58µsMoose::Meta::TypeConstraint::Union::::inline_environmentMoose::Meta::TypeConstraint::Union::inline_environment
21114µs17µsMoose::Meta::TypeConstraint::Union::::coercionMoose::Meta::TypeConstraint::Union::coercion
11110µs12µsMoose::Meta::TypeConstraint::Union::::_actually_compile_type_constraintMoose::Meta::TypeConstraint::Union::_actually_compile_type_constraint
1119µs37µsMoose::Meta::TypeConstraint::Union::::BEGIN@17Moose::Meta::TypeConstraint::Union::BEGIN@17
1119µs417µsMoose::Meta::TypeConstraint::Union::::BEGIN@12Moose::Meta::TypeConstraint::Union::BEGIN@12
1118µs8µsMoose::Meta::TypeConstraint::Union::::BEGIN@3Moose::Meta::TypeConstraint::Union::BEGIN@3
2228µs25µsMoose::Meta::TypeConstraint::Union::::has_coercionMoose::Meta::TypeConstraint::Union::has_coercion
1118µs10µsMoose::Meta::TypeConstraint::Union::::BEGIN@10Moose::Meta::TypeConstraint::Union::BEGIN@10
1117µs33µsMoose::Meta::TypeConstraint::Union::::BEGIN@16Moose::Meta::TypeConstraint::Union::BEGIN@16
1117µs11µsMoose::Meta::TypeConstraint::Union::::BEGIN@11Moose::Meta::TypeConstraint::Union::BEGIN@11
1116µs44µsMoose::Meta::TypeConstraint::Union::::BEGIN@19Moose::Meta::TypeConstraint::Union::BEGIN@19
1115µs5µsMoose::Meta::TypeConstraint::Union::::CORE:sortMoose::Meta::TypeConstraint::Union::CORE:sort (opcode)
0000s0sMoose::Meta::TypeConstraint::Union::::__ANON__[:143]Moose::Meta::TypeConstraint::Union::__ANON__[:143]
0000s0sMoose::Meta::TypeConstraint::Union::::__ANON__[:164]Moose::Meta::TypeConstraint::Union::__ANON__[:164]
0000s0sMoose::Meta::TypeConstraint::Union::::__ANON__[:170]Moose::Meta::TypeConstraint::Union::__ANON__[:170]
0000s0sMoose::Meta::TypeConstraint::Union::::__ANON__[:176]Moose::Meta::TypeConstraint::Union::__ANON__[:176]
0000s0sMoose::Meta::TypeConstraint::Union::::__ANON__[:23]Moose::Meta::TypeConstraint::Union::__ANON__[:23]
0000s0sMoose::Meta::TypeConstraint::Union::::__ANON__[:78]Moose::Meta::TypeConstraint::Union::__ANON__[:78]
0000s0sMoose::Meta::TypeConstraint::Union::::create_child_typeMoose::Meta::TypeConstraint::Union::create_child_type
0000s0sMoose::Meta::TypeConstraint::Union::::equalsMoose::Meta::TypeConstraint::Union::equals
0000s0sMoose::Meta::TypeConstraint::Union::::find_type_forMoose::Meta::TypeConstraint::Union::find_type_for
0000s0sMoose::Meta::TypeConstraint::Union::::is_a_type_ofMoose::Meta::TypeConstraint::Union::is_a_type_of
0000s0sMoose::Meta::TypeConstraint::Union::::is_subtype_ofMoose::Meta::TypeConstraint::Union::is_subtype_of
0000s0sMoose::Meta::TypeConstraint::Union::::parentMoose::Meta::TypeConstraint::Union::parent
0000s0sMoose::Meta::TypeConstraint::Union::::validateMoose::Meta::TypeConstraint::Union::validate
Call graph for these subroutines as a Graphviz dot language file.
Line State
ments
Time
on line
Calls Time
in subs
Code
1
2package Moose::Meta::TypeConstraint::Union;
3
# spent 8µs within Moose::Meta::TypeConstraint::Union::BEGIN@3 which was called: # once (8µs+0s) by Moose::Util::TypeConstraints::BEGIN@33 at line 5
BEGIN {
417µs $Moose::Meta::TypeConstraint::Union::AUTHORITY = 'cpan:STEVAN';
5129µs18µs}
# spent 8µs making 1 call to Moose::Meta::TypeConstraint::Union::BEGIN@3
6{
721µs $Moose::Meta::TypeConstraint::Union::VERSION = '2.1005';
8}
9
10223µs213µs
# spent 10µs (8+3) within Moose::Meta::TypeConstraint::Union::BEGIN@10 which was called: # once (8µs+3µs) by Moose::Util::TypeConstraints::BEGIN@33 at line 10
use strict;
# spent 10µs making 1 call to Moose::Meta::TypeConstraint::Union::BEGIN@10 # spent 3µs making 1 call to strict::import
11220µs216µs
# spent 11µs (7+5) within Moose::Meta::TypeConstraint::Union::BEGIN@11 which was called: # once (7µs+5µs) by Moose::Util::TypeConstraints::BEGIN@33 at line 11
use warnings;
# spent 11µs making 1 call to Moose::Meta::TypeConstraint::Union::BEGIN@11 # spent 5µs making 1 call to warnings::import
12228µs2825µs
# spent 417µs (9+408) within Moose::Meta::TypeConstraint::Union::BEGIN@12 which was called: # once (9µs+408µs) by Moose::Util::TypeConstraints::BEGIN@33 at line 12
use metaclass;
# spent 417µs making 1 call to Moose::Meta::TypeConstraint::Union::BEGIN@12 # spent 408µs making 1 call to metaclass::import
13
142101µs1897µs
# spent 897µs (374+523) within Moose::Meta::TypeConstraint::Union::BEGIN@14 which was called: # once (374µs+523µs) by Moose::Util::TypeConstraints::BEGIN@33 at line 14
use Moose::Meta::TypeCoercion::Union;
# spent 897µs making 1 call to Moose::Meta::TypeConstraint::Union::BEGIN@14
15
16225µs258µs
# spent 33µs (7+25) within Moose::Meta::TypeConstraint::Union::BEGIN@16 which was called: # once (7µs+25µs) by Moose::Util::TypeConstraints::BEGIN@33 at line 16
use List::MoreUtils qw(all);
# spent 33µs making 1 call to Moose::Meta::TypeConstraint::Union::BEGIN@16 # spent 25µs making 1 call to Exporter::import
17224µs245µs
# spent 37µs (9+28) within Moose::Meta::TypeConstraint::Union::BEGIN@17 which was called: # once (9µs+28µs) by Moose::Util::TypeConstraints::BEGIN@33 at line 17
use List::Util qw(first);
# spent 37µs making 1 call to Moose::Meta::TypeConstraint::Union::BEGIN@17 # spent 8µs making 1 call to List::Util::import
18
192849µs281µs
# spent 44µs (6+38) within Moose::Meta::TypeConstraint::Union::BEGIN@19 which was called: # once (6µs+38µs) by Moose::Util::TypeConstraints::BEGIN@33 at line 19
use base 'Moose::Meta::TypeConstraint';
# spent 44µs making 1 call to Moose::Meta::TypeConstraint::Union::BEGIN@19 # spent 38µs making 1 call to base::import
20
21__PACKAGE__->meta->add_attribute('type_constraints' => (
22 accessor => 'type_constraints',
23 default => sub { [] },
2417µs3367µs Class::MOP::_definition_context(),
# spent 342µs making 1 call to Class::MOP::Mixin::HasAttributes::add_attribute # spent 19µs making 1 call to Moose::Meta::TypeConstraint::Union::meta # spent 6µs making 1 call to Class::MOP::_definition_context
25));
26
27
# spent 215µs (44+171) within Moose::Meta::TypeConstraint::Union::new which was called: # once (44µs+171µs) by Moose::Util::TypeConstraints::_create_type_constraint_union at line 115 of Moose/Util/TypeConstraints.pm
sub new {
2811µs my ($class, %options) = @_;
29
3038µs23µs my $name = join '|' => sort { $a cmp $b }
# spent 3µs making 2 calls to Moose::Meta::TypeConstraint::name, avg 2µs/call
3127µs15µs map { $_->name } @{ $options{type_constraints} };
# spent 5µs making 1 call to Moose::Meta::TypeConstraint::Union::CORE:sort
32
33119µs1160µs my $self = $class->SUPER::new(
# spent 160µs making 1 call to Moose::Meta::TypeConstraint::new
34 name => $name,
35 %options,
36 );
37
3814µs23µs $self->_set_constraint( $self->_compiled_type_constraint );
39
4013µs return $self;
41}
42
43# XXX - this is a rather gross implementation of laziness for the benefit of
44# MX::Types. If we try to call ->has_coercion on the objects during object
45# construction, this does not work when defining a recursive constraint with
46# MX::Types.
47
# spent 17µs (14+3) within Moose::Meta::TypeConstraint::Union::coercion which was called 2 times, avg 8µs/call: # 2 times (14µs+3µs) by Moose::Meta::TypeConstraint::Union::has_coercion at line 64, avg 8µs/call
sub coercion {
4821µs my $self = shift;
49
5023µs return $self->{coercion} if exists $self->{coercion};
51
52 # Using any instead of grep here causes a weird error with some corner
53 # cases when MX::Types is in use. See RT #61001.
5445µs34µs if ( grep { $_->has_coercion } @{ $self->type_constraints } ) {
# spent 2µs making 2 calls to Moose::Meta::TypeConstraint::has_coercion, avg 1µs/call # spent 1µs making 1 call to Moose::Meta::TypeConstraint::Union::type_constraints
55 return $self->{coercion} = Moose::Meta::TypeCoercion::Union->new(
56 type_constraint => $self );
57 }
58 else {
5914µs return $self->{coercion} = undef;
60 }
61}
62
63
# spent 25µs (8+17) within Moose::Meta::TypeConstraint::Union::has_coercion which was called 2 times, avg 12µs/call: # once (5µs+15µs) by Moose::Meta::Attribute::_eval_environment at line 793 of Moose/Meta/Attribute.pm # once (3µs+2µs) by Moose::Meta::Class::_eval_environment at line 529 of Moose/Meta/Class.pm
sub has_coercion {
6428µs217µs return defined $_[0]->coercion;
# spent 17µs making 2 calls to Moose::Meta::TypeConstraint::Union::coercion, avg 8µs/call
65}
66
67
# spent 12µs (10+2) within Moose::Meta::TypeConstraint::Union::_actually_compile_type_constraint which was called: # once (10µs+2µs) by Moose::Meta::TypeConstraint::compile_type_constraint at line 300 of Moose/Meta/TypeConstraint.pm
sub _actually_compile_type_constraint {
681500ns my $self = shift;
69
7023µs12µs my @constraints = @{ $self->type_constraints };
71
72 return sub {
73 my $value = shift;
74 foreach my $type (@constraints) {
75 return 1 if $type->check($value);
76 }
77 return undef;
7816µs };
79}
80
81
# spent 124µs (37+87) within Moose::Meta::TypeConstraint::Union::can_be_inlined which was called 4 times, avg 31µs/call: # 3 times (29µs+62µs) by Moose::Meta::Attribute::_inline_check_constraint at line 711 of Moose/Meta/Attribute.pm, avg 30µs/call # once (8µs+25µs) by Moose::Meta::Attribute::_eval_environment at line 789 of Moose/Meta/Attribute.pm
sub can_be_inlined {
8242µs my $self = shift;
83
84 # This was originally done with all() from List::MoreUtils, but that
85 # caused some sort of bizarro parsing failure under 5.10.
8688µs45µs for my $tc ( @{ $self->type_constraints } ) {
# spent 5µs making 4 calls to Moose::Meta::TypeConstraint::Union::type_constraints, avg 1µs/call
87811µs882µs return 0 unless $tc->can_be_inlined;
# spent 82µs making 8 calls to Moose::Meta::TypeConstraint::can_be_inlined, avg 10µs/call
88 }
89
9049µs return 1;
91}
92
93
# spent 491µs (36+455) within Moose::Meta::TypeConstraint::Union::_inline_check which was called 3 times, avg 164µs/call: # 3 times (36µs+455µs) by Moose::Meta::Attribute::_inline_check_constraint at line 713 of Moose/Meta/Attribute.pm, avg 164µs/call
sub _inline_check {
9431µs my $self = shift;
953900ns my $val = shift;
96
9769µs6451µs return '('
# spent 451µs making 6 calls to Moose::Meta::TypeConstraint::_inline_check, avg 75µs/call
98 . (
9933µs33µs join ' || ', map { '(' . $_->_inline_check($val) . ')' }
# spent 3µs making 3 calls to Moose::Meta::TypeConstraint::Union::type_constraints, avg 1µs/call
100318µs @{ $self->type_constraints }
101 )
102 . ')';
103}
104
105
# spent 58µs (19+39) within Moose::Meta::TypeConstraint::Union::inline_environment which was called 2 times, avg 29µs/call: # once (11µs+20µs) by Moose::Meta::Attribute::_eval_environment at line 800 of Moose/Meta/Attribute.pm # once (8µs+20µs) by Moose::Meta::Class::_eval_environment at line 543 of Moose/Meta/Class.pm
sub inline_environment {
1062700ns my $self = shift;
107
108107µs640µs return { map { %{ $_->inline_environment } }
# spent 37µs making 4 calls to Moose::Meta::TypeConstraint::inline_environment, avg 9µs/call # spent 2µs making 2 calls to Moose::Meta::TypeConstraint::Union::type_constraints, avg 1µs/call
10927µs @{ $self->type_constraints } };
110}
111
112sub equals {
113 my ( $self, $type_or_name ) = @_;
114
115 my $other = Moose::Util::TypeConstraints::find_type_constraint($type_or_name);
116
117 return unless $other->isa(__PACKAGE__);
118
119 my @self_constraints = @{ $self->type_constraints };
120 my @other_constraints = @{ $other->type_constraints };
121
122 return unless @self_constraints == @other_constraints;
123
124 # FIXME presort type constraints for efficiency?
125 constraint: foreach my $constraint ( @self_constraints ) {
126 for ( my $i = 0; $i < @other_constraints; $i++ ) {
127 if ( $constraint->equals($other_constraints[$i]) ) {
128 splice @other_constraints, $i, 1;
129 next constraint;
130 }
131 }
132 }
133
134 return @other_constraints == 0;
135}
136
137sub parent {
138 my $self = shift;
139
140 my ($first, @rest) = @{ $self->type_constraints };
141
142 for my $parent ( $first->_collect_all_parents ) {
143 return $parent if all { $_->is_a_type_of($parent) } @rest;
144 }
145
146 return;
147}
148
149sub validate {
150 my ($self, $value) = @_;
151 my $message;
152 foreach my $type (@{$self->type_constraints}) {
153 my $err = $type->validate($value);
154 return unless defined $err;
155 $message .= ($message ? ' and ' : '') . $err
156 if defined $err;
157 }
158 return ($message . ' in (' . $self->name . ')') ;
159}
160
161sub find_type_for {
162 my ($self, $value) = @_;
163
164 return first { $_->check($value) } @{ $self->type_constraints };
165}
166
167sub is_a_type_of {
168 my ($self, $type_name) = @_;
169
170 return all { $_->is_a_type_of($type_name) } @{ $self->type_constraints };
171}
172
173sub is_subtype_of {
174 my ($self, $type_name) = @_;
175
176 return all { $_->is_subtype_of($type_name) } @{ $self->type_constraints };
177}
178
179sub create_child_type {
180 my ( $self, %opts ) = @_;
181
182 my $constraint
183 = Moose::Meta::TypeConstraint->new( %opts, parent => $self );
184
185 # if we have a type constraint union, and no
186 # type check, this means we are just aliasing
187 # the union constraint, which means we need to
188 # handle this differently.
189 # - SL
190 if ( not( defined $opts{constraint} )
191 && $self->has_coercion ) {
192 $constraint->coercion(
193 Moose::Meta::TypeCoercion::Union->new(
194 type_constraint => $self,
195 )
196 );
197 }
198
199 return $constraint;
200}
201
20215µs1;
203
204# ABSTRACT: A union of Moose type constraints
205
206__END__
 
# spent 5µs within Moose::Meta::TypeConstraint::Union::CORE:sort which was called: # once (5µs+0s) by Moose::Meta::TypeConstraint::Union::new at line 31
sub Moose::Meta::TypeConstraint::Union::CORE:sort; # opcode