| File | /usr/lib/perl5/vendor_perl/5.10.1/i386-linux-thread-multi/Moose/Meta/Method/Accessor.pm |
| Statements Executed | 5326 |
| Statement Execution Time | 69.6ms |
| Calls | P | F | Exclusive Time |
Inclusive Time |
Subroutine |
|---|---|---|---|---|---|
| 84 | 1 | 1 | 13.8ms | 204ms | Moose::Meta::Method::Accessor::_generate_accessor_method_inline |
| 105 | 2 | 1 | 8.00ms | 74.8ms | Moose::Meta::Method::Accessor::_inline_store |
| 104 | 2 | 1 | 6.83ms | 86.6ms | Moose::Meta::Method::Accessor::_eval_code |
| 104 | 2 | 1 | 6.46ms | 26.6ms | Moose::Meta::Method::Accessor::_inline_get |
| 104 | 2 | 1 | 5.22ms | 16.3ms | Moose::Meta::Method::Accessor::_inline_check_lazy |
| 168 | 2 | 1 | 4.36ms | 6.63ms | Moose::Meta::Method::Accessor::_value_needs_copy |
| 104 | 2 | 1 | 3.48ms | 5.39ms | Moose::Meta::Method::Accessor::_inline_auto_deref |
| 88 | 2 | 1 | 3.18ms | 4.64ms | Moose::Meta::Method::Accessor::_inline_check_constraint |
| 84 | 1 | 1 | 2.86ms | 4.36ms | Moose::Meta::Method::Accessor::_inline_get_old_value_for_trigger |
| 88 | 2 | 1 | 2.72ms | 4.04ms | Moose::Meta::Method::Accessor::_inline_check_coercion |
| 84 | 1 | 1 | 2.64ms | 4.31ms | Moose::Meta::Method::Accessor::_inline_check_required |
| 84 | 1 | 1 | 2.39ms | 3.46ms | Moose::Meta::Method::Accessor::_inline_trigger |
| 20 | 2 | 2 | 2.03ms | 48.3ms | Moose::Meta::Method::Accessor::_generate_reader_method_inline |
| 21 | 1 | 1 | 1.30ms | 3.31ms | Moose::Meta::Method::Accessor::_inline_has |
| 21 | 2 | 1 | 1.14ms | 4.39ms | Moose::Meta::Method::Accessor::_inline_init_slot |
| 84 | 1 | 1 | 1.11ms | 205ms | Moose::Meta::Method::Accessor::_generate_accessor_method |
| 84 | 1 | 1 | 1.04ms | 4.34ms | Moose::Meta::Method::Accessor::_inline_copy_value |
| 104 | 2 | 1 | 856µs | 856µs | Moose::Meta::Method::Accessor::_inline_pre_body |
| 104 | 2 | 1 | 669µs | 669µs | Moose::Meta::Method::Accessor::_inline_post_body |
| 19 | 1 | 1 | 315µs | 46.2ms | Moose::Meta::Method::Accessor::_generate_reader_method |
| 8 | 1 | 1 | 178µs | 2.97ms | Moose::Meta::Method::Accessor::_generate_clearer_method |
| 1 | 1 | 1 | 169µs | 182µs | Moose::Meta::Method::Accessor::BEGIN@4 |
| 10 | 1 | 1 | 166µs | 3.52ms | Moose::Meta::Method::Accessor::_generate_predicate_method |
| 1 | 1 | 1 | 33µs | 416µs | Moose::Meta::Method::Accessor::BEGIN@11 |
| 1 | 1 | 1 | 31µs | 84µs | Moose::Meta::Method::Accessor::BEGIN@5 |
| 0 | 0 | 0 | 0s | 0s | Moose::Meta::Method::Accessor::_error_thrower |
| 0 | 0 | 0 | 0s | 0s | Moose::Meta::Method::Accessor::_generate_writer_method |
| 0 | 0 | 0 | 0s | 0s | Moose::Meta::Method::Accessor::_generate_writer_method_inline |
| 0 | 0 | 0 | 0s | 0s | Moose::Meta::Method::Accessor::_inline_access |
| Line | State ments |
Time on line |
Calls | Time in subs |
Code |
|---|---|---|---|---|---|
| 1 | |||||
| 2 | package Moose::Meta::Method::Accessor; | ||||
| 3 | |||||
| 4 | 3 | 138µs | 2 | 195µs | # spent 182µs (169+13) within Moose::Meta::Method::Accessor::BEGIN@4 which was called
# once (169µs+13µs) by Moose::Meta::Attribute::BEGIN@15 at line 4 # spent 182µs making 1 call to Moose::Meta::Method::Accessor::BEGIN@4
# spent 13µs making 1 call to strict::import |
| 5 | 3 | 286µs | 2 | 138µs | # spent 84µs (31+54) within Moose::Meta::Method::Accessor::BEGIN@5 which was called
# once (31µs+54µs) by Moose::Meta::Attribute::BEGIN@15 at line 5 # spent 84µs making 1 call to Moose::Meta::Method::Accessor::BEGIN@5
# spent 54µs making 1 call to warnings::import |
| 6 | |||||
| 7 | 1 | 3µs | our $VERSION = '1.01'; | ||
| 8 | 1 | 58µs | $VERSION = eval $VERSION; | ||
| 9 | 1 | 3µs | our $AUTHORITY = 'cpan:STEVAN'; | ||
| 10 | |||||
| 11 | # spent 416µs (33+383) within Moose::Meta::Method::Accessor::BEGIN@11 which was called
# once (33µs+383µs) by Moose::Meta::Attribute::BEGIN@15 at line 12 # spent 383µs making 1 call to base::import | ||||
| 12 | 3 | 7.03ms | 1 | 416µs | 'Class::MOP::Method::Accessor'; # spent 416µs making 1 call to Moose::Meta::Method::Accessor::BEGIN@11 |
| 13 | |||||
| 14 | sub _error_thrower { | ||||
| 15 | my $self = shift; | ||||
| 16 | ( ref $self && $self->associated_attribute ) || $self->SUPER::_error_thrower(); | ||||
| 17 | } | ||||
| 18 | |||||
| 19 | # spent 86.6ms (6.83+79.8) within Moose::Meta::Method::Accessor::_eval_code which was called 104 times, avg 833µs/call:
# 84 times (5.14ms+59.3ms) by Moose::Meta::Method::Accessor::_generate_accessor_method_inline at line 52, avg 767µs/call
# 20 times (1.68ms+20.5ms) by Moose::Meta::Method::Accessor::_generate_reader_method_inline at line 95, avg 1.11ms/call | ||||
| 20 | 728 | 5.66ms | my ( $self, $source ) = @_; | ||
| 21 | |||||
| 22 | # NOTE: | ||||
| 23 | # set up the environment | ||||
| 24 | my $attr = $self->associated_attribute; # spent 596µs making 104 calls to Class::MOP::Method::Accessor::associated_attribute, avg 6µs/call | ||||
| 25 | my $type_constraint_obj = $attr->type_constraint; # spent 1.12ms making 104 calls to Moose::Meta::Mixin::AttributeCore::type_constraint, avg 11µs/call | ||||
| 26 | 1 | 204µs | 48 | 2.17ms | my $environment = { # spent 894µs making 6 calls to MooseX::Types::TypeDecorator::AUTOLOAD, avg 149µs/call
# spent 570µs making 18 calls to Moose::Meta::TypeConstraint::__ANON__[Moose/Meta/TypeConstraint.pm:8], avg 32µs/call
# spent 547µs making 6 calls to MooseX::Types::TypeDecorator::__ANON__[MooseX/Types/TypeDecorator.pm:21], avg 91µs/call
# spent 155µs making 18 calls to Moose::Meta::TypeConstraint::_compiled_type_constraint, avg 9µs/call |
| 27 | '$attr' => \$attr, | ||||
| 28 | '$meta' => \$self, | ||||
| 29 | '$type_constraint_obj' => \$type_constraint_obj, | ||||
| 30 | '$type_constraint' => \($type_constraint_obj | ||||
| 31 | ? $type_constraint_obj->_compiled_type_constraint | ||||
| 32 | : undef), | ||||
| 33 | }; | ||||
| 34 | |||||
| 35 | #warn "code for " . $attr->name . " =>\n" . $source . "\n"; | ||||
| 36 | my ( $code, $e ) = $self->_compile_code( environment => $environment, code => $source ); # spent 75.9ms making 104 calls to Class::MOP::Method::Generated::_compile_code, avg 730µs/call | ||||
| 37 | |||||
| 38 | $self->throw_error( | ||||
| 39 | "Could not create writer for '${\$self->associated_attribute->name}' because $e \n code: $source", | ||||
| 40 | error => $e, data => $source ) | ||||
| 41 | if $e; | ||||
| 42 | |||||
| 43 | return $code; | ||||
| 44 | } | ||||
| 45 | |||||
| 46 | # spent 204ms (13.8+190) within Moose::Meta::Method::Accessor::_generate_accessor_method_inline which was called 84 times, avg 2.43ms/call:
# 84 times (13.8ms+190ms) by Moose::Meta::Method::Accessor::_generate_accessor_method at line 116, avg 2.43ms/call | ||||
| 47 | 420 | 10.8ms | my $self = $_[0]; | ||
| 48 | my $attr = $self->associated_attribute; # spent 610µs making 84 calls to Class::MOP::Method::Accessor::associated_attribute, avg 7µs/call | ||||
| 49 | my $inv = '$_[0]'; | ||||
| 50 | my $value_name = $self->_value_needs_copy ? '$val' : '$_[1]'; # spent 3.33ms making 84 calls to Moose::Meta::Method::Accessor::_value_needs_copy, avg 40µs/call | ||||
| 51 | |||||
| 52 | $self->_eval_code('sub { ' . "\n" # spent 71.6ms making 84 calls to Moose::Meta::Method::Accessor::_inline_store, avg 853µs/call
# spent 64.5ms making 84 calls to Moose::Meta::Method::Accessor::_eval_code, avg 767µs/call
# spent 10.8ms making 84 calls to Moose::Meta::Method::Accessor::_inline_get, avg 129µs/call
# spent 10.2ms making 84 calls to Moose::Meta::Method::Accessor::_inline_check_lazy, avg 121µs/call
# spent 4.36ms making 84 calls to Moose::Meta::Method::Accessor::_inline_get_old_value_for_trigger, avg 52µs/call
# spent 4.34ms making 84 calls to Moose::Meta::Method::Accessor::_inline_copy_value, avg 52µs/call
# spent 4.31ms making 84 calls to Moose::Meta::Method::Accessor::_inline_check_required, avg 51µs/call
# spent 4.19ms making 84 calls to Moose::Meta::Method::Accessor::_inline_check_constraint, avg 50µs/call
# spent 3.82ms making 84 calls to Moose::Meta::Method::Accessor::_inline_check_coercion, avg 45µs/call
# spent 3.68ms making 84 calls to Moose::Meta::Method::Accessor::_inline_auto_deref, avg 44µs/call
# spent 3.46ms making 84 calls to Moose::Meta::Method::Accessor::_inline_trigger, avg 41µs/call
# spent 729µs making 84 calls to Moose::Meta::Method::Accessor::_inline_pre_body, avg 9µs/call
# spent 505µs making 84 calls to Moose::Meta::Method::Accessor::_inline_post_body, avg 6µs/call | ||||
| 53 | . $self->_inline_pre_body(@_) . "\n" | ||||
| 54 | . 'if (scalar(@_) >= 2) {' . "\n" | ||||
| 55 | . $self->_inline_copy_value . "\n" | ||||
| 56 | . $self->_inline_check_required . "\n" | ||||
| 57 | . $self->_inline_check_coercion($value_name) . "\n" | ||||
| 58 | . $self->_inline_check_constraint($value_name) . "\n" | ||||
| 59 | . $self->_inline_get_old_value_for_trigger($inv, $value_name) . "\n" | ||||
| 60 | . $self->_inline_store($inv, $value_name) . "\n" | ||||
| 61 | . $self->_inline_trigger($inv, $value_name, '@old') . "\n" | ||||
| 62 | . ' }' . "\n" | ||||
| 63 | . $self->_inline_check_lazy($inv) . "\n" | ||||
| 64 | . $self->_inline_post_body(@_) . "\n" | ||||
| 65 | . 'return ' . $self->_inline_auto_deref($self->_inline_get($inv)) . "\n" | ||||
| 66 | . ' }'); | ||||
| 67 | } | ||||
| 68 | |||||
| 69 | sub _generate_writer_method_inline { | ||||
| 70 | my $self = $_[0]; | ||||
| 71 | my $attr = $self->associated_attribute; | ||||
| 72 | my $inv = '$_[0]'; | ||||
| 73 | my $slot_access = $self->_inline_get($inv); | ||||
| 74 | my $value_name = $self->_value_needs_copy ? '$val' : '$_[1]'; | ||||
| 75 | |||||
| 76 | $self->_eval_code('sub { ' | ||||
| 77 | . $self->_inline_pre_body(@_) | ||||
| 78 | . $self->_inline_copy_value | ||||
| 79 | . $self->_inline_check_required | ||||
| 80 | . $self->_inline_check_coercion($value_name) | ||||
| 81 | . $self->_inline_check_constraint($value_name) | ||||
| 82 | . $self->_inline_get_old_value_for_trigger($inv, $value_name) . "\n" | ||||
| 83 | . $self->_inline_store($inv, $value_name) | ||||
| 84 | . $self->_inline_post_body(@_) | ||||
| 85 | . $self->_inline_trigger($inv, $value_name, '@old') | ||||
| 86 | . ' }'); | ||||
| 87 | } | ||||
| 88 | |||||
| 89 | # spent 48.3ms (2.03+46.3) within Moose::Meta::Method::Accessor::_generate_reader_method_inline which was called 20 times, avg 2.42ms/call:
# 19 times (1.93ms+43.9ms) by Moose::Meta::Method::Accessor::_generate_reader_method at line 114, avg 2.41ms/call
# once (96µs+2.37ms) by Class::MOP::Method::Accessor::_initialize_body at line 87 of Class/MOP/Method/Accessor.pm | ||||
| 90 | 100 | 1.64ms | my $self = $_[0]; | ||
| 91 | my $attr = $self->associated_attribute; # spent 108µs making 20 calls to Class::MOP::Method::Accessor::associated_attribute, avg 5µs/call | ||||
| 92 | my $inv = '$_[0]'; | ||||
| 93 | my $slot_access = $self->_inline_get($inv); # spent 15.7ms making 20 calls to Moose::Meta::Method::Accessor::_inline_get, avg 787µs/call | ||||
| 94 | |||||
| 95 | $self->_eval_code('sub {' # spent 22.1ms making 20 calls to Moose::Meta::Method::Accessor::_eval_code, avg 1.11ms/call
# spent 6.05ms making 20 calls to Moose::Meta::Method::Accessor::_inline_check_lazy, avg 303µs/call
# spent 1.71ms making 20 calls to Moose::Meta::Method::Accessor::_inline_auto_deref, avg 86µs/call
# spent 249µs making 20 calls to Moose::Meta::Method::_inline_throw_error, avg 12µs/call
# spent 164µs making 20 calls to Moose::Meta::Method::Accessor::_inline_post_body, avg 8µs/call
# spent 127µs making 20 calls to Moose::Meta::Method::Accessor::_inline_pre_body, avg 6µs/call | ||||
| 96 | . $self->_inline_pre_body(@_) | ||||
| 97 | . $self->_inline_throw_error('"Cannot assign a value to a read-only accessor"', 'data => \@_') . ' if @_ > 1;' | ||||
| 98 | . $self->_inline_check_lazy($inv) | ||||
| 99 | . $self->_inline_post_body(@_) | ||||
| 100 | . 'return ' . $self->_inline_auto_deref( $slot_access ) . ';' | ||||
| 101 | . '}'); | ||||
| 102 | } | ||||
| 103 | |||||
| 104 | # spent 4.34ms (1.04+3.30) within Moose::Meta::Method::Accessor::_inline_copy_value which was called 84 times, avg 52µs/call:
# 84 times (1.04ms+3.30ms) by Moose::Meta::Method::Accessor::_generate_accessor_method_inline at line 52, avg 52µs/call | ||||
| 105 | 84 | 1.16ms | 84 | 3.30ms | return '' unless shift->_value_needs_copy; # spent 3.30ms making 84 calls to Moose::Meta::Method::Accessor::_value_needs_copy, avg 39µs/call |
| 106 | return 'my $val = $_[1];' | ||||
| 107 | } | ||||
| 108 | |||||
| 109 | # spent 6.63ms (4.36+2.26) within Moose::Meta::Method::Accessor::_value_needs_copy which was called 168 times, avg 39µs/call:
# 84 times (2.18ms+1.14ms) by Moose::Meta::Method::Accessor::_generate_accessor_method_inline at line 50, avg 40µs/call
# 84 times (2.18ms+1.12ms) by Moose::Meta::Method::Accessor::_inline_copy_value at line 105, avg 39µs/call | ||||
| 110 | 336 | 3.28ms | 168 | 752µs | my $attr = (shift)->associated_attribute; # spent 752µs making 168 calls to Class::MOP::Method::Accessor::associated_attribute, avg 4µs/call |
| 111 | return $attr->should_coerce; # spent 1.51ms making 168 calls to Moose::Meta::Mixin::AttributeCore::should_coerce, avg 9µs/call | ||||
| 112 | } | ||||
| 113 | |||||
| 114 | 19 | 505µs | 19 | 45.9ms | # spent 46.2ms (315µs+45.9) within Moose::Meta::Method::Accessor::_generate_reader_method which was called 19 times, avg 2.43ms/call:
# 19 times (315µs+45.9ms) by Class::MOP::Method::Accessor::_initialize_body at line 87 of Class/MOP/Method/Accessor.pm, avg 2.43ms/call # spent 45.9ms making 19 calls to Moose::Meta::Method::Accessor::_generate_reader_method_inline, avg 2.41ms/call |
| 115 | sub _generate_writer_method { shift->_generate_writer_method_inline(@_) } | ||||
| 116 | 84 | 1.02ms | 84 | 204ms | # spent 205ms (1.11+204) within Moose::Meta::Method::Accessor::_generate_accessor_method which was called 84 times, avg 2.44ms/call:
# 84 times (1.11ms+204ms) by Class::MOP::Method::Accessor::_initialize_body at line 87 of Class/MOP/Method/Accessor.pm, avg 2.44ms/call # spent 204ms making 84 calls to Moose::Meta::Method::Accessor::_generate_accessor_method_inline, avg 2.43ms/call |
| 117 | 10 | 156µs | 10 | 3.36ms | # spent 3.52ms (166µs+3.36) within Moose::Meta::Method::Accessor::_generate_predicate_method which was called 10 times, avg 352µs/call:
# 10 times (166µs+3.36ms) by Class::MOP::Method::Accessor::_initialize_body at line 87 of Class/MOP/Method/Accessor.pm, avg 352µs/call # spent 3.36ms making 10 calls to Class::MOP::Method::Accessor::_generate_predicate_method_inline, avg 336µs/call |
| 118 | 8 | 250µs | 8 | 2.79ms | # spent 2.97ms (178µs+2.79) within Moose::Meta::Method::Accessor::_generate_clearer_method which was called 8 times, avg 371µs/call:
# 8 times (178µs+2.79ms) by Class::MOP::Method::Accessor::_initialize_body at line 87 of Class/MOP/Method/Accessor.pm, avg 371µs/call # spent 2.79ms making 8 calls to Class::MOP::Method::Accessor::_generate_clearer_method_inline, avg 349µs/call |
| 119 | |||||
| 120 | 104 | 1.01ms | # spent 856µs within Moose::Meta::Method::Accessor::_inline_pre_body which was called 104 times, avg 8µs/call:
# 84 times (729µs+0s) by Moose::Meta::Method::Accessor::_generate_accessor_method_inline at line 52, avg 9µs/call
# 20 times (127µs+0s) by Moose::Meta::Method::Accessor::_generate_reader_method_inline at line 95, avg 6µs/call | ||
| 121 | 104 | 1.08ms | # spent 669µs within Moose::Meta::Method::Accessor::_inline_post_body which was called 104 times, avg 6µs/call:
# 84 times (505µs+0s) by Moose::Meta::Method::Accessor::_generate_accessor_method_inline at line 52, avg 6µs/call
# 20 times (164µs+0s) by Moose::Meta::Method::Accessor::_generate_reader_method_inline at line 95, avg 8µs/call | ||
| 122 | |||||
| 123 | # spent 4.64ms (3.18+1.46) within Moose::Meta::Method::Accessor::_inline_check_constraint which was called 88 times, avg 53µs/call:
# 84 times (2.83ms+1.35ms) by Moose::Meta::Method::Accessor::_generate_accessor_method_inline at line 52, avg 50µs/call
# 4 times (350µs+107µs) by Moose::Meta::Method::Accessor::_inline_check_lazy at line 178, avg 114µs/call | ||||
| 124 | 298 | 2.64ms | my ($self, $value) = @_; | ||
| 125 | |||||
| 126 | my $attr = $self->associated_attribute; # spent 597µs making 88 calls to Class::MOP::Method::Accessor::associated_attribute, avg 7µs/call | ||||
| 127 | |||||
| 128 | return '' unless $attr->has_type_constraint; # spent 603µs making 88 calls to Moose::Meta::Mixin::AttributeCore::has_type_constraint, avg 7µs/call | ||||
| 129 | |||||
| 130 | my $attr_name = quotemeta( $attr->name ); # spent 68µs making 17 calls to Class::MOP::Mixin::AttributeCore::name, avg 4µs/call | ||||
| 131 | |||||
| 132 | qq{\$type_constraint->($value) || } . $self->_inline_throw_error(qq{"Attribute ($attr_name) does not pass the type constraint because: " . \$type_constraint_obj->get_message($value)}, "data => $value") . ";"; # spent 192µs making 17 calls to Moose::Meta::Method::_inline_throw_error, avg 11µs/call | ||||
| 133 | } | ||||
| 134 | |||||
| 135 | # spent 4.04ms (2.72+1.33) within Moose::Meta::Method::Accessor::_inline_check_coercion which was called 88 times, avg 46µs/call:
# 84 times (2.61ms+1.21ms) by Moose::Meta::Method::Accessor::_generate_accessor_method_inline at line 52, avg 45µs/call
# 4 times (111µs+117µs) by Moose::Meta::Method::Accessor::_inline_check_lazy at line 177, avg 57µs/call | ||||
| 136 | 264 | 2.27ms | my ($self, $value) = @_; | ||
| 137 | |||||
| 138 | my $attr = $self->associated_attribute; # spent 692µs making 88 calls to Class::MOP::Method::Accessor::associated_attribute, avg 8µs/call | ||||
| 139 | |||||
| 140 | return '' unless $attr->should_coerce; # spent 635µs making 88 calls to Moose::Meta::Mixin::AttributeCore::should_coerce, avg 7µs/call | ||||
| 141 | return "$value = \$attr->type_constraint->coerce($value);"; | ||||
| 142 | } | ||||
| 143 | |||||
| 144 | # spent 4.31ms (2.64+1.67) within Moose::Meta::Method::Accessor::_inline_check_required which was called 84 times, avg 51µs/call:
# 84 times (2.64ms+1.67ms) by Moose::Meta::Method::Accessor::_generate_accessor_method_inline at line 52, avg 51µs/call | ||||
| 145 | 290 | 2.44ms | my $self = shift; | ||
| 146 | my $attr = $self->associated_attribute; # spent 474µs making 84 calls to Class::MOP::Method::Accessor::associated_attribute, avg 6µs/call | ||||
| 147 | |||||
| 148 | return '' unless $attr->is_required; # spent 895µs making 84 calls to Moose::Meta::Mixin::AttributeCore::is_required, avg 11µs/call | ||||
| 149 | |||||
| 150 | my $attr_name = quotemeta( $attr->name ); # spent 76µs making 19 calls to Class::MOP::Mixin::AttributeCore::name, avg 4µs/call | ||||
| 151 | |||||
| 152 | return qq{(\@_ >= 2) || } . $self->_inline_throw_error(qq{"Attribute ($attr_name) is required, so cannot be set to undef"}) . ';' # defined $_[1] is not good enough # spent 226µs making 19 calls to Moose::Meta::Method::_inline_throw_error, avg 12µs/call | ||||
| 153 | } | ||||
| 154 | |||||
| 155 | # spent 16.3ms (5.22+11.0) within Moose::Meta::Method::Accessor::_inline_check_lazy which was called 104 times, avg 156µs/call:
# 84 times (3.51ms+6.68ms) by Moose::Meta::Method::Accessor::_generate_accessor_method_inline at line 52, avg 121µs/call
# 20 times (1.71ms+4.35ms) by Moose::Meta::Method::Accessor::_generate_reader_method_inline at line 95, avg 303µs/call | ||||
| 156 | 417 | 3.31ms | my ($self, $instance) = @_; | ||
| 157 | |||||
| 158 | my $attr = $self->associated_attribute; # spent 614µs making 104 calls to Class::MOP::Method::Accessor::associated_attribute, avg 6µs/call | ||||
| 159 | |||||
| 160 | return '' unless $attr->is_lazy; # spent 1.67ms making 104 calls to Moose::Meta::Mixin::AttributeCore::is_lazy, avg 16µs/call | ||||
| 161 | |||||
| 162 | my $slot_exists = $self->_inline_has($instance); # spent 3.31ms making 21 calls to Moose::Meta::Method::Accessor::_inline_has, avg 158µs/call | ||||
| 163 | |||||
| 164 | my $code = 'unless (' . $slot_exists . ') {' . "\n"; | ||||
| 165 | 21 | 373µs | 21 | 152µs | if ($attr->has_type_constraint) { # spent 152µs making 21 calls to Moose::Meta::Mixin::AttributeCore::has_type_constraint, avg 7µs/call |
| 166 | 16 | 201µs | 4 | 28µs | if ($attr->has_default || $attr->has_builder) { # spent 28µs making 4 calls to Class::MOP::Mixin::AttributeCore::has_default, avg 7µs/call |
| 167 | if ($attr->has_default) { # spent 27µs making 4 calls to Class::MOP::Mixin::AttributeCore::has_default, avg 7µs/call | ||||
| 168 | $code .= ' my $default = $attr->default(' . $instance . ');'."\n"; | ||||
| 169 | } | ||||
| 170 | elsif ($attr->has_builder) { | ||||
| 171 | $code .= ' my $default;'."\n". | ||||
| 172 | ' if(my $builder = '.$instance.'->can($attr->builder)){ '."\n". | ||||
| 173 | ' $default = '.$instance.'->$builder; '. "\n } else {\n" . | ||||
| 174 | ' ' . $self->_inline_throw_error(q{sprintf "%s does not support builder method '%s' for attribute '%s'", ref(} . $instance . ') || '.$instance.', $attr->builder, $attr->name') . | ||||
| 175 | ';'. "\n }"; | ||||
| 176 | } | ||||
| 177 | $code .= $self->_inline_check_coercion('$default') . "\n"; # spent 228µs making 4 calls to Moose::Meta::Method::Accessor::_inline_check_coercion, avg 57µs/call | ||||
| 178 | $code .= $self->_inline_check_constraint('$default') . "\n"; # spent 458µs making 4 calls to Moose::Meta::Method::Accessor::_inline_check_constraint, avg 114µs/call | ||||
| 179 | $code .= ' ' . $self->_inline_init_slot($attr, $instance, '$default') . "\n"; # spent 974µs making 4 calls to Moose::Meta::Method::Accessor::_inline_init_slot, avg 244µs/call | ||||
| 180 | } | ||||
| 181 | else { | ||||
| 182 | $code .= ' ' . $self->_inline_init_slot($attr, $instance, 'undef') . "\n"; | ||||
| 183 | } | ||||
| 184 | |||||
| 185 | } else { | ||||
| 186 | if ($attr->has_default) { # spent 3.42ms making 17 calls to Moose::Meta::Method::Accessor::_inline_init_slot, avg 201µs/call
# spent 123µs making 17 calls to Class::MOP::Mixin::AttributeCore::has_default, avg 7µs/call
# spent 19µs making 2 calls to Moose::Meta::Method::_inline_throw_error, avg 10µs/call
# spent 11µs making 2 calls to Class::MOP::Mixin::AttributeCore::has_builder, avg 6µs/call | ||||
| 187 | $code .= ' ' . $self->_inline_init_slot($attr, $instance, ('$attr->default(' . $instance . ')')) . "\n"; | ||||
| 188 | } | ||||
| 189 | elsif ($attr->has_builder) { | ||||
| 190 | $code .= ' if (my $builder = '.$instance.'->can($attr->builder)) { ' . "\n" | ||||
| 191 | . ' ' . $self->_inline_init_slot($attr, $instance, ($instance . '->$builder')) | ||||
| 192 | . "\n } else {\n" | ||||
| 193 | . ' ' . $self->_inline_throw_error(q{sprintf "%s does not support builder method '%s' for attribute '%s'", ref(} . $instance . ') || '.$instance.', $attr->builder, $attr->name') | ||||
| 194 | . ';'. "\n }"; | ||||
| 195 | } | ||||
| 196 | else { | ||||
| 197 | $code .= ' ' . $self->_inline_init_slot($attr, $instance, 'undef') . "\n"; | ||||
| 198 | } | ||||
| 199 | } | ||||
| 200 | $code .= "}\n"; | ||||
| 201 | return $code; | ||||
| 202 | } | ||||
| 203 | |||||
| 204 | # spent 4.39ms (1.14+3.25) within Moose::Meta::Method::Accessor::_inline_init_slot which was called 21 times, avg 209µs/call:
# 17 times (840µs+2.58ms) by Moose::Meta::Method::Accessor::_inline_check_lazy at line 186, avg 201µs/call
# 4 times (296µs+678µs) by Moose::Meta::Method::Accessor::_inline_check_lazy at line 179, avg 244µs/call | ||||
| 205 | 42 | 391µs | my ($self, $attr, $inv, $value) = @_; | ||
| 206 | 21 | 297µs | 21 | 130µs | if ($attr->has_initializer) { # spent 130µs making 21 calls to Class::MOP::Mixin::AttributeCore::has_initializer, avg 6µs/call |
| 207 | return ('$attr->set_initial_value(' . $inv . ', ' . $value . ');'); | ||||
| 208 | } | ||||
| 209 | else { | ||||
| 210 | return $self->_inline_store($inv, $value); # spent 3.12ms making 21 calls to Moose::Meta::Method::Accessor::_inline_store, avg 149µs/call | ||||
| 211 | } | ||||
| 212 | } | ||||
| 213 | |||||
| 214 | # spent 74.8ms (8.00+66.8) within Moose::Meta::Method::Accessor::_inline_store which was called 105 times, avg 712µs/call:
# 84 times (6.50ms+65.1ms) by Moose::Meta::Method::Accessor::_generate_accessor_method_inline at line 52, avg 853µs/call
# 21 times (1.49ms+1.63ms) by Moose::Meta::Method::Accessor::_inline_init_slot at line 210, avg 149µs/call | ||||
| 215 | 630 | 9.04ms | my ($self, $instance, $value) = @_; | ||
| 216 | my $attr = $self->associated_attribute; # spent 592µs making 105 calls to Class::MOP::Method::Accessor::associated_attribute, avg 6µs/call | ||||
| 217 | |||||
| 218 | my $mi = $attr->associated_class->get_meta_instance; # spent 55.7ms making 105 calls to Class::MOP::Class::get_meta_instance, avg 531µs/call
# spent 1.06ms making 105 calls to Class::MOP::Attribute::associated_class, avg 10µs/call | ||||
| 219 | |||||
| 220 | my $code = $mi->inline_set_slot_value($instance, $attr->slots, $value) . ";"; # spent 6.49ms making 105 calls to Class::MOP::Instance::inline_set_slot_value, avg 62µs/call
# spent 1.83ms making 105 calls to Class::MOP::Attribute::slots, avg 17µs/call | ||||
| 221 | $code .= $mi->inline_weaken_slot_value($instance, $attr->slots, $value) . ";" # spent 1.01ms making 105 calls to Moose::Meta::Mixin::AttributeCore::is_weak_ref, avg 10µs/call
# spent 52µs making 2 calls to Class::MOP::Instance::inline_weaken_slot_value, avg 26µs/call
# spent 24µs making 2 calls to Class::MOP::Attribute::slots, avg 12µs/call | ||||
| 222 | if $attr->is_weak_ref; | ||||
| 223 | return $code; | ||||
| 224 | } | ||||
| 225 | |||||
| 226 | # spent 4.36ms (2.86+1.50) within Moose::Meta::Method::Accessor::_inline_get_old_value_for_trigger which was called 84 times, avg 52µs/call:
# 84 times (2.86ms+1.50ms) by Moose::Meta::Method::Accessor::_generate_accessor_method_inline at line 52, avg 52µs/call | ||||
| 227 | 252 | 2.57ms | my ( $self, $instance ) = @_; | ||
| 228 | |||||
| 229 | my $attr = $self->associated_attribute; # spent 891µs making 84 calls to Class::MOP::Method::Accessor::associated_attribute, avg 11µs/call | ||||
| 230 | return '' unless $attr->has_trigger; # spent 609µs making 84 calls to Moose::Meta::Mixin::AttributeCore::has_trigger, avg 7µs/call | ||||
| 231 | |||||
| 232 | my $mi = $attr->associated_class->get_meta_instance; | ||||
| 233 | my $pred = $mi->inline_is_slot_initialized($instance, $attr->name); | ||||
| 234 | |||||
| 235 | return | ||||
| 236 | 'my @old = ' | ||||
| 237 | . $pred . q{ ? } | ||||
| 238 | . $self->_inline_get($instance) . q{ : ()} . ";\n"; | ||||
| 239 | } | ||||
| 240 | |||||
| 241 | # spent 3.46ms (2.39+1.07) within Moose::Meta::Method::Accessor::_inline_trigger which was called 84 times, avg 41µs/call:
# 84 times (2.39ms+1.07ms) by Moose::Meta::Method::Accessor::_generate_accessor_method_inline at line 52, avg 41µs/call | ||||
| 242 | 252 | 2.07ms | my ($self, $instance, $value, $old_value) = @_; | ||
| 243 | my $attr = $self->associated_attribute; # spent 450µs making 84 calls to Class::MOP::Method::Accessor::associated_attribute, avg 5µs/call | ||||
| 244 | return '' unless $attr->has_trigger; # spent 623µs making 84 calls to Moose::Meta::Mixin::AttributeCore::has_trigger, avg 7µs/call | ||||
| 245 | return sprintf('$attr->trigger->(%s, %s, %s);', $instance, $value, $old_value); | ||||
| 246 | } | ||||
| 247 | |||||
| 248 | # spent 26.6ms (6.46+20.1) within Moose::Meta::Method::Accessor::_inline_get which was called 104 times, avg 255µs/call:
# 84 times (5.37ms+5.45ms) by Moose::Meta::Method::Accessor::_generate_accessor_method_inline at line 52, avg 129µs/call
# 20 times (1.09ms+14.7ms) by Moose::Meta::Method::Accessor::_generate_reader_method_inline at line 93, avg 787µs/call | ||||
| 249 | 416 | 5.67ms | my ($self, $instance) = @_; | ||
| 250 | my $attr = $self->associated_attribute; # spent 551µs making 104 calls to Class::MOP::Method::Accessor::associated_attribute, avg 5µs/call | ||||
| 251 | |||||
| 252 | my $mi = $attr->associated_class->get_meta_instance; # spent 13.7ms making 104 calls to Class::MOP::Class::get_meta_instance, avg 132µs/call
# spent 746µs making 104 calls to Class::MOP::Attribute::associated_class, avg 7µs/call | ||||
| 253 | |||||
| 254 | return $mi->inline_get_slot_value($instance, $attr->slots); # spent 3.32ms making 104 calls to Class::MOP::Instance::inline_get_slot_value, avg 32µs/call
# spent 1.75ms making 104 calls to Class::MOP::Attribute::slots, avg 17µs/call | ||||
| 255 | } | ||||
| 256 | |||||
| 257 | sub _inline_access { | ||||
| 258 | my ($self, $instance) = @_; | ||||
| 259 | my $attr = $self->associated_attribute; | ||||
| 260 | |||||
| 261 | my $mi = $attr->associated_class->get_meta_instance; | ||||
| 262 | |||||
| 263 | return $mi->inline_slot_access($instance, $attr->slots); | ||||
| 264 | } | ||||
| 265 | |||||
| 266 | # spent 3.31ms (1.30+2.01) within Moose::Meta::Method::Accessor::_inline_has which was called 21 times, avg 158µs/call:
# 21 times (1.30ms+2.01ms) by Moose::Meta::Method::Accessor::_inline_check_lazy at line 162, avg 158µs/call | ||||
| 267 | 84 | 1.19ms | my ($self, $instance) = @_; | ||
| 268 | my $attr = $self->associated_attribute; # spent 110µs making 21 calls to Class::MOP::Method::Accessor::associated_attribute, avg 5µs/call | ||||
| 269 | |||||
| 270 | my $mi = $attr->associated_class->get_meta_instance; # spent 221µs making 21 calls to Class::MOP::Class::get_meta_instance, avg 11µs/call
# spent 126µs making 21 calls to Class::MOP::Attribute::associated_class, avg 6µs/call | ||||
| 271 | |||||
| 272 | return $mi->inline_is_slot_initialized($instance, $attr->slots); # spent 1.13ms making 21 calls to Class::MOP::Instance::inline_is_slot_initialized, avg 54µs/call
# spent 427µs making 21 calls to Class::MOP::Attribute::slots, avg 20µs/call | ||||
| 273 | } | ||||
| 274 | |||||
| 275 | # spent 5.39ms (3.48+1.91) within Moose::Meta::Method::Accessor::_inline_auto_deref which was called 104 times, avg 52µs/call:
# 84 times (2.31ms+1.37ms) by Moose::Meta::Method::Accessor::_generate_accessor_method_inline at line 52, avg 44µs/call
# 20 times (1.17ms+540µs) by Moose::Meta::Method::Accessor::_generate_reader_method_inline at line 95, avg 86µs/call | ||||
| 276 | 312 | 2.83ms | my ( $self, $ref_value ) = @_; | ||
| 277 | my $attr = $self->associated_attribute; # spent 611µs making 104 calls to Class::MOP::Method::Accessor::associated_attribute, avg 6µs/call | ||||
| 278 | |||||
| 279 | return $ref_value unless $attr->should_auto_deref; # spent 1.30ms making 104 calls to Moose::Meta::Mixin::AttributeCore::should_auto_deref, avg 12µs/call | ||||
| 280 | |||||
| 281 | my $type_constraint = $attr->type_constraint; | ||||
| 282 | |||||
| 283 | my $sigil; | ||||
| 284 | if ($type_constraint->is_a_type_of('ArrayRef')) { | ||||
| 285 | $sigil = '@'; | ||||
| 286 | } | ||||
| 287 | elsif ($type_constraint->is_a_type_of('HashRef')) { | ||||
| 288 | $sigil = '%'; | ||||
| 289 | } | ||||
| 290 | else { | ||||
| 291 | $self->throw_error( "Can not auto de-reference the type constraint '" | ||||
| 292 | . quotemeta( $type_constraint->name ) | ||||
| 293 | . "'", type_constraint => $type_constraint ); | ||||
| 294 | } | ||||
| 295 | |||||
| 296 | "(wantarray() ? $sigil\{ ( $ref_value ) || return } : ( $ref_value ) )"; | ||||
| 297 | } | ||||
| 298 | |||||
| 299 | 1 | 10µs | 1; | ||
| 300 | |||||
| 301 | __END__ | ||||
| 302 | |||||
| 303 | =pod | ||||
| 304 | |||||
| 305 | =head1 NAME | ||||
| 306 | |||||
| 307 | Moose::Meta::Method::Accessor - A Moose Method metaclass for accessors | ||||
| 308 | |||||
| 309 | =head1 DESCRIPTION | ||||
| 310 | |||||
| 311 | This class is a subclass of L<Class::MOP::Method::Accessor> that | ||||
| 312 | provides additional Moose-specific functionality, all of which is | ||||
| 313 | private. | ||||
| 314 | |||||
| 315 | To understand this class, you should read the the | ||||
| 316 | L<Class::MOP::Method::Accessor> documentation. | ||||
| 317 | |||||
| 318 | =head1 BUGS | ||||
| 319 | |||||
| 320 | See L<Moose/BUGS> for details on reporting bugs. | ||||
| 321 | |||||
| 322 | =head1 AUTHOR | ||||
| 323 | |||||
| 324 | Stevan Little E<lt>stevan@iinteractive.comE<gt> | ||||
| 325 | |||||
| 326 | Yuval Kogman E<lt>nothingmuch@woobling.comE<gt> | ||||
| 327 | |||||
| 328 | =head1 COPYRIGHT AND LICENSE | ||||
| 329 | |||||
| 330 | Copyright 2006-2010 by Infinity Interactive, Inc. | ||||
| 331 | |||||
| 332 | L<http://www.iinteractive.com> | ||||
| 333 | |||||
| 334 | This library is free software; you can redistribute it and/or modify | ||||
| 335 | it under the same terms as Perl itself. | ||||
| 336 | |||||
| 337 | =cut |