| Filename | /home/doy/perl5/perlbrew/perls/perl-5.10.1/lib/site_perl/5.10.1/x86_64-linux/Moose/Meta/Method/Overridden.pm |
| Statements | Executed 530 statements in 7.57ms |
| Calls | P | F | Exclusive Time |
Inclusive Time |
Subroutine |
|---|---|---|---|---|---|
| 45 | 1 | 1 | 4.81ms | 36.5ms | Moose::Meta::Method::Overridden::new |
| 1 | 1 | 1 | 75µs | 94µs | Moose::Meta::Method::Overridden::BEGIN@3 |
| 1 | 1 | 1 | 38µs | 106µs | Moose::Meta::Method::Overridden::BEGIN@4 |
| 1 | 1 | 1 | 38µs | 14.5ms | Moose::Meta::Method::Overridden::BEGIN@10 |
| 0 | 0 | 0 | 0s | 0s | Moose::Meta::Method::Overridden::__ANON__[:37] |
| Line | State ments |
Time on line |
Calls | Time in subs |
Code |
|---|---|---|---|---|---|
| 1 | package Moose::Meta::Method::Overridden; | ||||
| 2 | |||||
| 3 | 3 | 130µs | 2 | 112µs | # spent 94µs (75+19) within Moose::Meta::Method::Overridden::BEGIN@3 which was called:
# once (75µs+19µs) by Moose::Meta::Class::BEGIN@19 at line 3 # spent 94µs making 1 call to Moose::Meta::Method::Overridden::BEGIN@3
# spent 19µs making 1 call to strict::import |
| 4 | 3 | 225µs | 2 | 173µs | # spent 106µs (38+68) within Moose::Meta::Method::Overridden::BEGIN@4 which was called:
# once (38µs+68µs) by Moose::Meta::Class::BEGIN@19 at line 4 # spent 106µs making 1 call to Moose::Meta::Method::Overridden::BEGIN@4
# spent 68µs making 1 call to warnings::import |
| 5 | |||||
| 6 | 1 | 4µs | our $VERSION = '1.19'; | ||
| 7 | 1 | 70µs | $VERSION = eval $VERSION; # spent 10µs executing statements in string eval | ||
| 8 | 1 | 3µs | our $AUTHORITY = 'cpan:STEVAN'; | ||
| 9 | |||||
| 10 | 3 | 655µs | 2 | 28.9ms | # spent 14.5ms (38µs+14.4) within Moose::Meta::Method::Overridden::BEGIN@10 which was called:
# once (38µs+14.4ms) by Moose::Meta::Class::BEGIN@19 at line 10 # spent 14.5ms making 1 call to Moose::Meta::Method::Overridden::BEGIN@10
# spent 14.4ms making 1 call to base::import |
| 11 | |||||
| 12 | # spent 36.5ms (4.81+31.7) within Moose::Meta::Method::Overridden::new which was called 45 times, avg 812µs/call:
# 45 times (4.81ms+31.7ms) by Moose::Meta::Class::add_override_method_modifier at line 319 of Moose/Meta/Class.pm, avg 812µs/call | ||||
| 13 | 405 | 5.26ms | my ( $class, %args ) = @_; | ||
| 14 | |||||
| 15 | # the package can be overridden by roles | ||||
| 16 | # it is really more like body's compilation stash | ||||
| 17 | # this is where we need to override the definition of super() so that the | ||||
| 18 | # body of the code can call the right overridden version | ||||
| 19 | my $super_package = $args{package} || $args{class}->name; | ||||
| 20 | |||||
| 21 | my $name = $args{name}; | ||||
| 22 | |||||
| 23 | 45 | 23.7ms | my $super = $args{class}->find_next_method_by_name($name); # spent 23.7ms making 45 calls to Class::MOP::Class::find_next_method_by_name, avg 526µs/call | ||
| 24 | |||||
| 25 | (defined $super) | ||||
| 26 | || $class->throw_error("You cannot override '$name' because it has no super method", data => $name); | ||||
| 27 | |||||
| 28 | 45 | 268µs | my $super_body = $super->body; # spent 268µs making 45 calls to Class::MOP::Method::body, avg 6µs/call | ||
| 29 | |||||
| 30 | my $method = $args{method}; | ||||
| 31 | |||||
| 32 | my $body = sub { | ||||
| 33 | 112 | 1.21ms | local $Moose::SUPER_PACKAGE = $super_package; | ||
| 34 | local @Moose::SUPER_ARGS = @_; | ||||
| 35 | local $Moose::SUPER_BODY = $super_body; | ||||
| 36 | 28 | 14.7ms | return $method->(@_); # spent 7.54ms making 14 calls to Moose::Meta::Method::Accessor::Native::__ANON__[Moose/Meta/Method/Accessor/Native.pm:136], avg 538µs/call
# spent 7.13ms making 14 calls to Moose::Meta::Method::Accessor::Native::__ANON__[Moose/Meta/Method/Accessor/Native.pm:106], avg 509µs/call | ||
| 37 | }; | ||||
| 38 | |||||
| 39 | # FIXME do we need this make sure this works for next::method? | ||||
| 40 | # subname "${super_package}::${name}", $method; | ||||
| 41 | |||||
| 42 | # FIXME store additional attrs | ||||
| 43 | 90 | 7.79ms | $class->wrap( # spent 7.54ms making 45 calls to Class::MOP::Method::wrap, avg 168µs/call
# spent 249µs making 45 calls to Class::MOP::Package::name, avg 6µs/call | ||
| 44 | $body, | ||||
| 45 | package_name => $args{class}->name, | ||||
| 46 | name => $name | ||||
| 47 | ); | ||||
| 48 | } | ||||
| 49 | |||||
| 50 | 1 | 10µs | 1; | ||
| 51 | |||||
| 52 | __END__ |