stop the redefine warnings?
[gitmo/Class-C3.git] / lib / Class / C3.pm
index 45babf4..8b4e75a 100644 (file)
@@ -4,25 +4,27 @@ package Class::C3;
 use strict;
 use warnings;
 
-our $VERSION = '0.15_05';
+our $VERSION = '0.19';
 
 our $C3_IN_CORE;
 our $C3_XS;
 
 BEGIN {
-    if($^V < 5.009005) {
+    if($] > 5.009_004) {
+        $C3_IN_CORE = 1;
+        require mro;
+    }
+    else {
         eval "require Class::C3::XS";
-        if(my $error = $@) {
+        my $error = $@;
+        if(!$error) {
+            $C3_XS = 1;
+        }
+        else {
             die $error if $error !~ /\blocate\b/;
             require Algorithm::C3;
             require Class::C3::next;
         }
-        else {
-            $C3_XS = 1;
-        }
-    }
-    else {
-        $C3_IN_CORE = 1;
     }
 }
 
@@ -65,6 +67,11 @@ sub import {
 
 ## initializers
 
+# This prevents silly warnings when Class::C3 is
+#  used explicitly along with MRO::Compat under 5.9.5+
+
+{ no warnings 'redefine';
+
 sub initialize {
     %next::METHOD_CACHE = ();
     # why bother if we don't have anything ...
@@ -98,6 +105,8 @@ sub uninitialize {
 
 sub reinitialize { goto &initialize }
 
+} # end of "no warnings 'redefine'"
+
 ## functions for applying C3 to classes
 
 sub _calculate_method_dispatch_tables {
@@ -191,7 +200,9 @@ sub calculateMRO {
     }, $merge_cache);
 }
 
-sub _core_calculateMRO { @{mro::get_linear_isa($_[0])} }
+# Method overrides to support 5.9.5+ or Class::C3::XS
+
+sub _core_calculateMRO { @{mro::get_linear_isa($_[0], 'c3')} }
 
 if($C3_IN_CORE) {
     no warnings 'redefine';
@@ -254,17 +265,6 @@ Class::C3 - A pragma to use the C3 method resolution order algortihm
     D->can('hello')->();          # can() also works correctly
     UNIVERSAL::can('D', 'hello'); # as does UNIVERSAL::can()
 
-=head1 SPECIAL NOTE FOR 0.15_05
-
-To try this with the new perl core c3 support,
-download the most recent copy perl-current:
-
-http://mirrors.develooper.com/perl/APC/perl-current-snap/
-
-sh Configure -Dusedevel -Dprefix=/where/I/want/it -d -e && make && make test && make install
-
-then try your C3-using software against this perl + Class::C3 0.15_05.
-
 =head1 DESCRIPTION
 
 This is pragma to change Perl 5's standard method resolution order from depth-first left-to-right 
@@ -485,7 +485,7 @@ limitation of this module.
 
 =head1 COMPATIBILITY
 
-If your software requires Perl 5.9.5 or higher, you do not need L<Class::C3>, you can simple C<use mro 'c3'>, and not worry about C<initialize()>, avoid some of the above caveats, and get the best possible performance.  See L<mro> for more details.
+If your software requires Perl 5.9.5 or higher, you do not need L<Class::C3>, you can simply C<use mro 'c3'>, and not worry about C<initialize()>, avoid some of the above caveats, and get the best possible performance.  See L<mro> for more details.
 
 If your software is meant to work on earlier Perls, use L<Class::C3> as documented here.  L<Class::C3> will detect Perl 5.9.5+ and take advantage of the core support when available.
 
@@ -495,16 +495,7 @@ This module will load L<Class::C3::XS> if it's installed and you are running on
 
 =head1 CODE COVERAGE
 
-I use B<Devel::Cover> to test the code coverage of my tests, below is the B<Devel::Cover> report on this 
-module's test suite.
-
- ---------------------------- ------ ------ ------ ------ ------ ------ ------
- File                           stmt   bran   cond    sub    pod   time  total
- ---------------------------- ------ ------ ------ ------ ------ ------ ------
- Class/C3.pm                    98.3   84.4   80.0   96.2  100.0   98.4   94.4
- ---------------------------- ------ ------ ------ ------ ------ ------ ------
- Total                          98.3   84.4   80.0   96.2  100.0   98.4   94.4
- ---------------------------- ------ ------ ------ ------ ------ ------ ------
+L<Devel::Cover> was reporting 94.4% overall test coverage earlier in this module's life.  Currently, the test suite does things that break under coverage testing, but it is fair to assume the coverage is still close to that value.
 
 =head1 SEE ALSO