| Filename | /home/doy/coding/src/Moose/blib/lib//Moose/Meta/Method/Overridden.pm |
| Statements | Executed 449 statements in 6.52ms |
| Calls | P | F | Exclusive Time |
Inclusive Time |
Subroutine |
|---|---|---|---|---|---|
| 36 | 1 | 1 | 3.88ms | 23.9ms | Moose::Meta::Method::Overridden::new |
| 1 | 1 | 1 | 82µs | 105µs | Moose::Meta::Method::Overridden::BEGIN@3 |
| 1 | 1 | 1 | 59µs | 13.1ms | Moose::Meta::Method::Overridden::BEGIN@10 |
| 1 | 1 | 1 | 40µs | 108µs | Moose::Meta::Method::Overridden::BEGIN@4 |
| 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 | 139µs | 2 | 128µs | # spent 105µs (82+23) within Moose::Meta::Method::Overridden::BEGIN@3 which was called:
# once (82µs+23µs) by Moose::Meta::Class::BEGIN@19 at line 3 # spent 105µs making 1 call to Moose::Meta::Method::Overridden::BEGIN@3
# spent 23µs making 1 call to strict::import |
| 4 | 3 | 215µs | 2 | 177µs | # spent 108µs (40+69) within Moose::Meta::Method::Overridden::BEGIN@4 which was called:
# once (40µs+69µs) by Moose::Meta::Class::BEGIN@19 at line 4 # spent 108µs making 1 call to Moose::Meta::Method::Overridden::BEGIN@4
# spent 69µs making 1 call to warnings::import |
| 5 | |||||
| 6 | 1 | 4µs | our $VERSION = '1.19'; | ||
| 7 | 1 | 53µs | $VERSION = eval $VERSION; # spent 11µs executing statements in string eval | ||
| 8 | 1 | 3µs | our $AUTHORITY = 'cpan:STEVAN'; | ||
| 9 | |||||
| 10 | 3 | 663µs | 2 | 26.2ms | # spent 13.1ms (59µs+13.1) within Moose::Meta::Method::Overridden::BEGIN@10 which was called:
# once (59µs+13.1ms) by Moose::Meta::Class::BEGIN@19 at line 10 # spent 13.1ms making 1 call to Moose::Meta::Method::Overridden::BEGIN@10
# spent 13.1ms making 1 call to base::import |
| 11 | |||||
| 12 | # spent 23.9ms (3.88+20.0) within Moose::Meta::Method::Overridden::new which was called 36 times, avg 663µs/call:
# 36 times (3.88ms+20.0ms) by Moose::Meta::Class::add_override_method_modifier at line 503 of Moose/Meta/Class.pm, avg 663µs/call | ||||
| 13 | 324 | 4.22ms | 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 | 36 | 12.9ms | my $super = $args{class}->find_next_method_by_name($name); # spent 12.9ms making 36 calls to Class::MOP::Class::find_next_method_by_name, avg 358µs/call | ||
| 24 | |||||
| 25 | (defined $super) | ||||
| 26 | || $class->throw_error("You cannot override '$name' because it has no super method", data => $name); | ||||
| 27 | |||||
| 28 | 36 | 218µs | my $super_body = $super->body; # spent 218µs making 36 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 | 12.6ms | return $method->(@_); # spent 6.96ms making 14 calls to Moose::Meta::Method::Accessor::Native::__ANON__[Moose/Meta/Method/Accessor/Native.pm:145], avg 497µs/call
# spent 5.68ms making 14 calls to Moose::Meta::Method::Accessor::Native::__ANON__[Moose/Meta/Method/Accessor/Native.pm:114], avg 406µ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 | 72 | 6.89ms | $class->wrap( # spent 6.69ms making 36 calls to Class::MOP::Method::wrap, avg 186µs/call
# spent 198µs making 36 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 | 11µs | 1; | ||
| 51 | |||||
| 52 | __END__ |