← Index
NYTProf Performance Profile   « block view • line view • sub view »
For xt/tapper-mcp-scheduler-with-db-longrun.t
  Run on Tue May 22 17:18:39 2012
Reported on Tue May 22 17:22:35 2012

Filename/2home/ss5/perl5/perlbrew/perls/perl-5.12.3/lib/site_perl/5.12.3/x86_64-linux/Moose/Meta/TypeCoercion.pm
StatementsExecuted 22 statements in 812µs
Subroutines
Calls P F Exclusive
Time
Inclusive
Time
Subroutine
1115.05ms91.8msMoose::Meta::TypeCoercion::::BEGIN@14Moose::Meta::TypeCoercion::BEGIN@14
1119µs9µsMoose::Meta::TypeCoercion::::BEGIN@3Moose::Meta::TypeCoercion::BEGIN@3
1119µs14µsMoose::Meta::TypeCoercion::::BEGIN@10Moose::Meta::TypeCoercion::BEGIN@10
1118µs25µsMoose::Meta::TypeCoercion::::BEGIN@11Moose::Meta::TypeCoercion::BEGIN@11
1118µs686µsMoose::Meta::TypeCoercion::::BEGIN@12Moose::Meta::TypeCoercion::BEGIN@12
1117µs7µsMoose::Meta::TypeCoercion::::BEGIN@15Moose::Meta::TypeCoercion::BEGIN@15
0000s0sMoose::Meta::TypeCoercion::::__ANON__[:19]Moose::Meta::TypeCoercion::__ANON__[:19]
0000s0sMoose::Meta::TypeCoercion::::__ANON__[:72]Moose::Meta::TypeCoercion::__ANON__[:72]
0000s0sMoose::Meta::TypeCoercion::::add_type_coercionsMoose::Meta::TypeCoercion::add_type_coercions
0000s0sMoose::Meta::TypeCoercion::::coerceMoose::Meta::TypeCoercion::coerce
0000s0sMoose::Meta::TypeCoercion::::compile_type_coercionMoose::Meta::TypeCoercion::compile_type_coercion
0000s0sMoose::Meta::TypeCoercion::::has_coercion_for_typeMoose::Meta::TypeCoercion::has_coercion_for_type
0000s0sMoose::Meta::TypeCoercion::::newMoose::Meta::TypeCoercion::new
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::TypeCoercion;
3
# spent 9µs within Moose::Meta::TypeCoercion::BEGIN@3 which was called: # once (9µs+0s) by Moose::BEGIN@30 at line 5
BEGIN {
418µs $Moose::Meta::TypeCoercion::AUTHORITY = 'cpan:STEVAN';
5125µs19µs}
# spent 9µs making 1 call to Moose::Meta::TypeCoercion::BEGIN@3
6{
721µs $Moose::Meta::TypeCoercion::VERSION = '2.0602';
8}
9
10319µs219µs
# spent 14µs (9+5) within Moose::Meta::TypeCoercion::BEGIN@10 which was called: # once (9µs+5µs) by Moose::BEGIN@30 at line 10
use strict;
# spent 14µs making 1 call to Moose::Meta::TypeCoercion::BEGIN@10 # spent 5µs making 1 call to strict::import
11319µs242µs
# spent 25µs (8+17) within Moose::Meta::TypeCoercion::BEGIN@11 which was called: # once (8µs+17µs) by Moose::BEGIN@30 at line 11
use warnings;
# spent 25µs making 1 call to Moose::Meta::TypeCoercion::BEGIN@11 # spent 17µs making 1 call to warnings::import
12328µs21.36ms
# spent 686µs (8+678) within Moose::Meta::TypeCoercion::BEGIN@12 which was called: # once (8µs+678µs) by Moose::BEGIN@30 at line 12
use metaclass;
# spent 686µs making 1 call to Moose::Meta::TypeCoercion::BEGIN@12 # spent 678µs making 1 call to metaclass::import
13
143150µs191.8ms
# spent 91.8ms (5.05+86.8) within Moose::Meta::TypeCoercion::BEGIN@14 which was called: # once (5.05ms+86.8ms) by Moose::BEGIN@30 at line 14
use Moose::Meta::Attribute;
# spent 91.8ms making 1 call to Moose::Meta::TypeCoercion::BEGIN@14
153516µs17µs
# spent 7µs within Moose::Meta::TypeCoercion::BEGIN@15 which was called: # once (7µs+0s) by Moose::BEGIN@30 at line 15
use Moose::Util::TypeConstraints ();
# spent 7µs making 1 call to Moose::Meta::TypeCoercion::BEGIN@15
16
17__PACKAGE__->meta->add_attribute('type_coercion_map' => (
18 reader => 'type_coercion_map',
19 default => sub { [] },
2018µs3429µs Class::MOP::_definition_context(),
# spent 395µs making 1 call to Class::MOP::Mixin::HasAttributes::add_attribute # spent 24µs making 1 call to Moose::Meta::TypeCoercion::meta # spent 10µs making 1 call to Class::MOP::_definition_context
21));
22
23111µs43.88ms__PACKAGE__->meta->add_attribute(
# spent 2.85ms making 1 call to Class::MOP::Mixin::HasAttributes::add_attribute # spent 1.02ms making 1 call to Moose::Meta::Attribute::new # spent 11µs making 1 call to Moose::Meta::TypeCoercion::meta # spent 5µs making 1 call to Class::MOP::_definition_context
24 Moose::Meta::Attribute->new('type_constraint' => (
25 reader => 'type_constraint',
26 weak_ref => 1,
27 Class::MOP::_definition_context(),
28 ))
29);
30
31# private accessor
3219µs3401µs__PACKAGE__->meta->add_attribute('compiled_type_coercion' => (
# spent 376µs making 1 call to Class::MOP::Mixin::HasAttributes::add_attribute # spent 14µs making 1 call to Moose::Meta::TypeCoercion::meta # spent 11µs making 1 call to Class::MOP::_definition_context
33 accessor => '_compiled_type_coercion',
34 Class::MOP::_definition_context(),
35));
36
37sub new {
38 my $class = shift;
39 my $self = Class::MOP::class_of($class)->new_object(@_);
40 $self->compile_type_coercion;
41 return $self;
42}
43
44sub compile_type_coercion {
45 my $self = shift;
46 my @coercion_map = @{$self->type_coercion_map};
47 my @coercions;
48 while (@coercion_map) {
49 my ($constraint_name, $action) = splice(@coercion_map, 0, 2);
50 my $type_constraint = ref $constraint_name ? $constraint_name : Moose::Util::TypeConstraints::find_or_parse_type_constraint($constraint_name);
51
52 unless ( defined $type_constraint ) {
53 require Moose;
54 Moose->throw_error("Could not find the type constraint ($constraint_name) to coerce from");
55 }
56
57 push @coercions => [
58 $type_constraint->_compiled_type_constraint,
59 $action
60 ];
61 }
62 $self->_compiled_type_coercion(sub {
63 my $thing = shift;
64 foreach my $coercion (@coercions) {
65 my ($constraint, $converter) = @$coercion;
66 if ($constraint->($thing)) {
67 local $_ = $thing;
68 return $converter->($thing);
69 }
70 }
71 return $thing;
72 });
73}
74
75sub has_coercion_for_type {
76 my ($self, $type_name) = @_;
77 my %coercion_map = @{$self->type_coercion_map};
78 exists $coercion_map{$type_name} ? 1 : 0;
79}
80
81sub add_type_coercions {
82 my ($self, @new_coercion_map) = @_;
83
84 my $coercion_map = $self->type_coercion_map;
85 my %has_coercion = @$coercion_map;
86
87 while (@new_coercion_map) {
88 my ($constraint_name, $action) = splice(@new_coercion_map, 0, 2);
89
90 if ( exists $has_coercion{$constraint_name} ) {
91 require Moose;
92 Moose->throw_error("A coercion action already exists for '$constraint_name'")
93 }
94
95 push @{$coercion_map} => ($constraint_name, $action);
96 }
97
98 # and re-compile ...
99 $self->compile_type_coercion;
100}
101
102sub coerce { $_[0]->_compiled_type_coercion->($_[1]) }
103
104
105119µs1;
106
107# ABSTRACT: The Moose Type Coercion metaclass
108
- -
111=pod
112
113=head1 NAME
114
115Moose::Meta::TypeCoercion - The Moose Type Coercion metaclass
116
117=head1 VERSION
118
119version 2.0602
120
121=head1 DESCRIPTION
122
123A type coercion object is basically a mapping of one or more type
124constraints and the associated coercions subroutines.
125
126It's unlikely that you will need to instantiate an object of this
127class directly, as it's part of the deep internals of Moose.
128
129=head1 METHODS
130
131=over 4
132
133=item B<< Moose::Meta::TypeCoercion->new(%options) >>
134
135Creates a new type coercion object, based on the options provided.
136
137=over 8
138
139=item * type_constraint
140
141This is the L<Moose::Meta::TypeConstraint> object for the type that is
142being coerced I<to>.
143
144=back
145
146=item B<< $coercion->type_coercion_map >>
147
148This returns the map of type constraints to coercions as an array
149reference. The values of the array alternate between type names and
150subroutine references which implement the coercion.
151
152The value is an array reference because coercions are tried in the
153order they are added.
154
155=item B<< $coercion->type_constraint >>
156
157This returns the L<Moose::Meta::TypeConstraint> that was passed to the
158constructor.
159
160=item B<< $coercion->has_coercion_for_type($type_name) >>
161
162Returns true if the coercion can coerce the named type.
163
164=item B<< $coercion->add_type_coercions( $type_name => $sub, ... ) >>
165
166This method takes a list of type names and subroutine references. If
167the coercion already has a mapping for a given type, it throws an
168exception.
169
170Coercions are actually
171
172=item B<< $coercion->coerce($value) >>
173
174This method takes a value and applies the first valid coercion it
175finds.
176
177This means that if the value could belong to more than type in the
178coercion object, the first coercion added is used.
179
180=item B<< Moose::Meta::TypeCoercion->meta >>
181
182This will return a L<Class::MOP::Class> instance for this class.
183
184=back
185
186=head1 BUGS
187
188See L<Moose/BUGS> for details on reporting bugs.
189
190=head1 AUTHOR
191
192Moose is maintained by the Moose Cabal, along with the help of many contributors. See L<Moose/CABAL> and L<Moose/CONTRIBUTORS> for details.
193
194=head1 COPYRIGHT AND LICENSE
195
196This software is copyright (c) 2012 by Infinity Interactive, Inc..
197
198This is free software; you can redistribute it and/or modify it under
199the same terms as the Perl 5 programming language system itself.
200
201=cut
202
203
204__END__