X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FClass%2FC3.pm;h=c86f76dcfb5d979fae3643ae8583ef4de345415b;hb=bad9dc5953e918bfb388c7a7f430493a3e44a8d0;hp=3055c179d4002a8d9012ba25fdeed44330aeedcc;hpb=f7facd7b73c20ba048f0f6c0baea399ba8db10ed;p=gitmo%2FClass-C3.git diff --git a/lib/Class/C3.pm b/lib/Class/C3.pm index 3055c17..c86f76d 100644 --- a/lib/Class/C3.pm +++ b/lib/Class/C3.pm @@ -6,7 +6,7 @@ use warnings; use Scalar::Util 'blessed'; -our $VERSION = '0.07'; +our $VERSION = '0.09'; # this is our global stash of both # MRO's and method dispatch tables @@ -139,7 +139,9 @@ sub _remove_method_dispatch_table { no strict 'refs'; delete ${"${class}::"}{"()"} if $MRO{$class}->{has_overload_fallback}; foreach my $method (keys %{$MRO{$class}->{methods}}) { - delete ${"${class}::"}{$method}; + delete ${"${class}::"}{$method} + if defined *{"${class}::${method}"}{CODE} && + (*{"${class}::${method}"}{CODE} eq $MRO{$class}->{methods}->{$method}->{code}); } } @@ -169,7 +171,7 @@ sub _merge { # jump out as soon as we find one matching # there is no reason not too. However, if # we find one, then just remove the '&& last' - $nothead++ && last if exists $in_tail{$cand}; + ++$nothead && last if exists $in_tail{$cand}; } last unless $nothead; # leave the loop with our canidate ... $reject = $cand; @@ -205,13 +207,20 @@ use warnings; use Scalar::Util 'blessed'; -our $VERSION = '0.04'; +our $VERSION = '0.05'; our %METHOD_CACHE; sub method { - my @label = (split '::', (caller(1))[3]); - my $label = pop @label; + my $level = 1; + my ($method_caller, $label, @label); + while ($method_caller = (caller($level++))[3]) { + @label = (split '::', $method_caller); + $label = pop @label; + last unless + $label eq '(eval)' || + $label eq '__ANON__'; + } my $caller = join '::' => @label; my $self = $_[0]; my $class = blessed($self) || $self; @@ -465,14 +474,15 @@ You can never have enough tests :) =head1 CODE COVERAGE -I use B to test the code coverage of my tests, below is the B report on this module's test suite. +I use B to test the code coverage of my tests, below is the B report on this +module's test suite. ---------------------------- ------ ------ ------ ------ ------ ------ ------ File stmt bran cond sub pod time total ---------------------------- ------ ------ ------ ------ ------ ------ ------ - Class/C3.pm 99.2 93.3 66.7 96.0 100.0 92.8 96.3 + Class/C3.pm 98.6 90.9 73.3 96.0 100.0 96.8 95.3 ---------------------------- ------ ------ ------ ------ ------ ------ ------ - Total 99.2 93.3 66.7 96.0 100.0 92.8 96.3 + Total 98.6 90.9 73.3 96.0 100.0 96.8 95.3 ---------------------------- ------ ------ ------ ------ ------ ------ ------ =head1 SEE ALSO @@ -521,6 +531,18 @@ I use B to test the code coverage of my tests, below is the B +and finding many bugs and providing fixes. + +=item Thanks to Justin Guenther for making C more robust by handling +calls inside C and anon-subs. + +=back + =head1 AUTHOR Stevan Little, Estevan@iinteractive.comE