X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FClass%2FC3.pm;h=c86f76dcfb5d979fae3643ae8583ef4de345415b;hb=bad9dc5953e918bfb388c7a7f430493a3e44a8d0;hp=9d5a1d7338b0e0532aeb191a6f11fa6fe7cc5124;hpb=e90e14cb0690b0c97f42e73cf6b31a694154f774;p=gitmo%2FClass-C3.git diff --git a/lib/Class/C3.pm b/lib/Class/C3.pm index 9d5a1d7..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.08'; +our $VERSION = '0.09'; # this is our global stash of both # MRO's and method dispatch tables @@ -139,9 +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}; - #if defined ${"${class}::"}{$method}{CODE} && - # ${"${class}::"}{$method}{CODE} eq $MRO{$class}->{methods}->{$method}->{code}; + delete ${"${class}::"}{$method} + if defined *{"${class}::${method}"}{CODE} && + (*{"${class}::${method}"}{CODE} eq $MRO{$class}->{methods}->{$method}->{code}); } } @@ -213,13 +213,14 @@ our %METHOD_CACHE; sub method { my $level = 1; - my $method_caller; + my ($method_caller, $label, @label); while ($method_caller = (caller($level++))[3]) { - last unless $method_caller eq '(eval)'; + @label = (split '::', $method_caller); + $label = pop @label; + last unless + $label eq '(eval)' || + $label eq '__ANON__'; } - my @label = (split '::', $method_caller); - #my @label = (split '::', (caller(1))[3]); - my $label = pop @label; my $caller = join '::' => @label; my $self = $_[0]; my $class = blessed($self) || $self; @@ -479,9 +480,9 @@ module's test suite. ---------------------------- ------ ------ ------ ------ ------ ------ ------ File stmt bran cond sub pod time total ---------------------------- ------ ------ ------ ------ ------ ------ ------ - Class/C3.pm 98.6 88.6 75.0 96.0 100.0 70.4 95.2 + Class/C3.pm 98.6 90.9 73.3 96.0 100.0 96.8 95.3 ---------------------------- ------ ------ ------ ------ ------ ------ ------ - Total 98.6 88.6 75.0 96.0 100.0 70.4 95.2 + Total 98.6 90.9 73.3 96.0 100.0 96.8 95.3 ---------------------------- ------ ------ ------ ------ ------ ------ ------ =head1 SEE ALSO @@ -530,6 +531,18 @@ module's test suite. =back +=head1 ACKNOWLEGEMENTS + +=over 4 + +=item Thanks to Matt S. Trout for using this module in his module L +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