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 | new | Moose::Meta::Method::Overridden::
1 | 1 | 1 | 26µs | 37µs | BEGIN@9 | Moose::Meta::Method::Overridden::
1 | 1 | 1 | 8µs | 8µs | BEGIN@2 | Moose::Meta::Method::Overridden::
1 | 1 | 1 | 7µs | 2.14ms | BEGIN@12 | Moose::Meta::Method::Overridden::
1 | 1 | 1 | 7µs | 10µs | BEGIN@10 | Moose::Meta::Method::Overridden::
0 | 0 | 0 | 0s | 0s | __ANON__[:39] | Moose::Meta::Method::Overridden::
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__ |