| Filename | /Users/dde/perl5/perlbrew/perls/5.18.0t/lib/site_perl/5.18.0/darwin-thread-multi-2level/Moose/Meta/Method/Overridden.pm |
| Statements | Executed 407 statements in 746µs |
| Calls | P | F | Exclusive Time |
Inclusive Time |
Subroutine |
|---|---|---|---|---|---|
| 21 | 1 | 1 | 286µs | 1.67ms | Moose::Meta::Method::Overridden::new |
| 1 | 1 | 1 | 26µs | 37µs | Moose::Meta::Method::Overridden::BEGIN@9 |
| 1 | 1 | 1 | 8µs | 8µs | Moose::Meta::Method::Overridden::BEGIN@2 |
| 1 | 1 | 1 | 7µs | 2.14ms | Moose::Meta::Method::Overridden::BEGIN@12 |
| 1 | 1 | 1 | 7µs | 10µs | Moose::Meta::Method::Overridden::BEGIN@10 |
| 0 | 0 | 0 | 0s | 0s | Moose::Meta::Method::Overridden::__ANON__[:39] |
| Line | State ments |
Time on line |
Calls | Time in subs |
Code |
|---|---|---|---|---|---|
| 1 | package Moose::Meta::Method::Overridden; | ||||
| 2 | # spent 8µs within Moose::Meta::Method::Overridden::BEGIN@2 which was called:
# once (8µs+0s) by Moose::Meta::Class::BEGIN@21 at line 4 | ||||
| 3 | 1 | 4µs | $Moose::Meta::Method::Overridden::AUTHORITY = 'cpan:STEVAN'; | ||
| 4 | 1 | 36µs | 1 | 8µs | } # spent 8µs making 1 call to Moose::Meta::Method::Overridden::BEGIN@2 |
| 5 | { | ||||
| 6 | 2 | 900ns | $Moose::Meta::Method::Overridden::VERSION = '2.1005'; | ||
| 7 | } | ||||
| 8 | |||||
| 9 | 2 | 23µs | 2 | 48µs | # spent 37µs (26+11) within Moose::Meta::Method::Overridden::BEGIN@9 which was called:
# once (26µs+11µs) by Moose::Meta::Class::BEGIN@21 at line 9 # spent 37µs making 1 call to Moose::Meta::Method::Overridden::BEGIN@9
# spent 11µs making 1 call to strict::import |
| 10 | 2 | 21µs | 2 | 13µs | # spent 10µs (7+3) within Moose::Meta::Method::Overridden::BEGIN@10 which was called:
# once (7µs+3µs) by Moose::Meta::Class::BEGIN@21 at line 10 # spent 10µs making 1 call to Moose::Meta::Method::Overridden::BEGIN@10
# spent 3µs making 1 call to warnings::import |
| 11 | |||||
| 12 | 2 | 175µs | 2 | 4.28ms | # spent 2.14ms (7µs+2.13) within Moose::Meta::Method::Overridden::BEGIN@12 which was called:
# once (7µs+2.13ms) by Moose::Meta::Class::BEGIN@21 at line 12 # spent 2.14ms making 1 call to Moose::Meta::Method::Overridden::BEGIN@12
# spent 2.13ms making 1 call to base::import |
| 13 | |||||
| 14 | # spent 1.67ms (286µs+1.38) within Moose::Meta::Method::Overridden::new which was called 21 times, avg 80µs/call:
# 21 times (286µs+1.38ms) by Moose::Meta::Class::add_override_method_modifier at line 595 of Moose/Meta/Class.pm, avg 80µs/call | ||||
| 15 | 21 | 26µs | my ( $class, %args ) = @_; | ||
| 16 | |||||
| 17 | # the package can be overridden by roles | ||||
| 18 | # it is really more like body's compilation stash | ||||
| 19 | # this is where we need to override the definition of super() so that the | ||||
| 20 | # body of the code can call the right overridden version | ||||
| 21 | 21 | 8µs | my $super_package = $args{package} || $args{class}->name; | ||
| 22 | |||||
| 23 | 21 | 3µs | my $name = $args{name}; | ||
| 24 | |||||
| 25 | 21 | 20µs | 21 | 909µs | my $super = $args{class}->find_next_method_by_name($name); # spent 909µs making 21 calls to Class::MOP::Class::find_next_method_by_name, avg 43µs/call |
| 26 | |||||
| 27 | 21 | 1µs | (defined $super) | ||
| 28 | || $class->throw_error("You cannot override '$name' because it has no super method", data => $name); | ||||
| 29 | |||||
| 30 | 21 | 44µs | 21 | 11µs | my $super_body = $super->body; # spent 11µs making 21 calls to Class::MOP::Method::body, avg 538ns/call |
| 31 | |||||
| 32 | 21 | 3µs | my $method = $args{method}; | ||
| 33 | |||||
| 34 | my $body = sub { | ||||
| 35 | 52 | 17µs | local $Moose::SUPER_PACKAGE = $super_package; | ||
| 36 | 52 | 37µs | local @Moose::SUPER_ARGS = @_; | ||
| 37 | 52 | 7µs | local $Moose::SUPER_BODY = $super_body; | ||
| 38 | 52 | 152µs | 52 | 3.82ms | return $method->(@_); # spent 2.41ms making 26 calls to Moose::Meta::Method::Accessor::Native::__ANON__[Moose/Meta/Method/Accessor/Native.pm:156], avg 93µs/call
# spent 1.41ms making 26 calls to Moose::Meta::Method::Accessor::Native::__ANON__[Moose/Meta/Method/Accessor/Native.pm:125], avg 54µs/call |
| 39 | 21 | 57µs | }; | ||
| 40 | |||||
| 41 | # FIXME do we need this make sure this works for next::method? | ||||
| 42 | # subname "${super_package}::${name}", $method; | ||||
| 43 | |||||
| 44 | # FIXME store additional attrs | ||||
| 45 | 21 | 107µs | 42 | 464µs | $class->wrap( # spent 454µs making 21 calls to Class::MOP::Method::wrap, avg 22µs/call
# spent 11µs making 21 calls to Class::MOP::Package::name, avg 510ns/call |
| 46 | $body, | ||||
| 47 | package_name => $args{class}->name, | ||||
| 48 | name => $name | ||||
| 49 | ); | ||||
| 50 | } | ||||
| 51 | |||||
| 52 | 1 | 3µs | 1; | ||
| 53 | |||||
| 54 | # ABSTRACT: A Moose Method metaclass for overridden methods | ||||
| 55 | |||||
| 56 | __END__ |