0.04 0.04
Brandon L Black [Wed, 18 Jul 2007 23:47:26 +0000 (23:47 +0000)]
ChangeLog
Makefile.PL
README
lib/MRO/Compat.pm

index a693fbe..c69dc9d 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,11 @@
 Revision history for Perl extension MRO::Compat.
 
+0.04 - Wed July 18, 2007
+    - Removed doc warning now that 5.9.5 is out
+    - Stopped the code from assuming valid classnames
+      are true in boolean context
+    - Misc small tweaks
+
 0.03 - Mon Jun 4, 2007
     - Bumped C3 requirements
     - Loads mro.pm on 5.9.5+
index fb3b030..69f6513 100644 (file)
@@ -1,20 +1,17 @@
 use inc::Module::Install 0.65;
 
-name           'MRO-Compat';
-all_from       'lib/MRO/Compat.pm';
+name          'MRO-Compat';
+all_from      'lib/MRO/Compat.pm';
 
 test_requires 'Test::More'    => '0.47';
 
 if($] < 5.009_005) {
-    feature  'XS Speedups',
-        'Class::C3::XS' => '0.07';
-    requires 'Class::C3'     => '0.19';
+    feature  'XS Speedups', 'Class::C3::XS' => '0.08';
+    requires 'Class::C3' => '0.19';
 }
 
 # Rebuild README for maintainers
-if(-e 'MANIFEST.SKIP') {
-    system("pod2text lib/MRO/Compat.pm >README");
-}
+system("pod2text lib/MRO/Compat.pm >README") if -e 'MANIFEST.SKIP';
 
 auto_provides;
 auto_install;
diff --git a/README b/README
index cecb019..7ebb099 100644 (file)
--- a/README
+++ b/README
@@ -21,13 +21,17 @@ DESCRIPTION
     This module provides those interfaces for earlier versions of Perl (back
     to 5.6.0 anyways).
 
-    It is a harmless no-op to use this module on 5.9.5+. If you're writing a
-    piece of software that would like to use the parts of 5.9.5+'s mro::
-    interfaces that are supported here, and you want compatibility with
-    older Perls, this is the module for you.
+    It is a harmless no-op to use this module on 5.9.5+. That is to say,
+    code which properly uses MRO::Compat will work unmodified on both older
+    Perls and 5.9.5+.
 
-    Some parts of this interface will work better with Class::C3::XS
-    installed, but it's not a requirement.
+    If you're writing a piece of software that would like to use the parts
+    of 5.9.5+'s mro:: interfaces that are supported here, and you want
+    compatibility with older Perls, this is the module for you.
+
+    Some parts of this code will work better and/or faster with
+    Class::C3::XS installed (which is an optional prereq of Class::C3, which
+    is in turn a prereq of this package), but it's not a requirement.
 
     This module never exports any functions. All calls must be fully
     qualified with the "mro::" prefix.
@@ -38,16 +42,6 @@ DESCRIPTION
     mro are the real interface docs, and contain a lot of other useful
     information.
 
-VERSION 0.02
-    This is the first release of this new module, and on top of that, the
-    Perl 5.9.5 it seeks to provide compatibility with isn't even out yet.
-
-    If you're going to use/depend on this, please keep abreast of possible
-    interface changes in the next few versions. Once Perl 5.9.5 is out the
-    door the interfaces should stabilize on whatever 5.9.5 has to offer. In
-    the meantime, don't be surprised if MRO::Compat and 5.9.5's interfaces
-    aren't perfectly in sync at all times.
-
 Functions
   mro::get_linear_isa($classname[, $type])
     Returns an arrayref which is the linearized MRO of the given class. Uses
@@ -122,14 +116,11 @@ USING C3
     "mro::set_mro("Foo", 'c3')" available on older Perls, it does so merely
     by passing off the work to Class::C3.
 
-    It does not remove the need for you to call Class::C3's "initialize()",
-    "reinitialize()", and/or "uninitialize()" at the appropriate times as
-    documented in the Class::C3 docs.
-
-    Because MRO::Compat has Class::C3 as a pre-requisite, and requires it at
-    "use" time, you can blindly call those functions in code that uses
-    MRO::Compat. Under 5.9.5+ with MRO::Compat, your calls to those
-    functions will become a no-op and everything will work fine.
+    It does not remove the need for you to call "Class::C3::initialize()",
+    "Class::C3::reinitialize()", and/or "Class::C3::uninitialize()" at the
+    appropriate times as documented in the Class::C3 docs. These three
+    functions are always provided by MRO::Compat, either via Class::C3
+    itself on older Perls, or directly as no-ops on 5.9.5+.
 
 SEE ALSO
     Class::C3
index d55f9a9..3ebac2b 100644 (file)
@@ -5,7 +5,7 @@ require 5.006_000;
 
 # Keep this < 1.00, so people can tell the fake
 #  mro.pm from the real one
-our $VERSION = '0.03';
+our $VERSION = '0.04';
 
 BEGIN {
     # Alias our private functions over to
@@ -70,14 +70,19 @@ in Perl 5.9.5 and higher.
 This module provides those interfaces for
 earlier versions of Perl (back to 5.6.0 anyways).
 
-It is a harmless no-op to use this module on 5.9.5+.  If
-you're writing a piece of software that would like to use
+It is a harmless no-op to use this module on 5.9.5+.  That
+is to say, code which properly uses L<MRO::Compat> will work
+unmodified on both older Perls and 5.9.5+.
+
+If you're writing a piece of software that would like to use
 the parts of 5.9.5+'s mro:: interfaces that are supported
 here, and you want compatibility with older Perls, this
 is the module for you.
 
-Some parts of this interface will work better with
-L<Class::C3::XS> installed, but it's not a requirement.
+Some parts of this code will work better and/or faster with
+L<Class::C3::XS> installed (which is an optional prereq
+of L<Class::C3>, which is in turn a prereq of this
+package), but it's not a requirement.
 
 This module never exports any functions.  All calls must
 be fully qualified with the C<mro::> prefix.
@@ -88,19 +93,6 @@ differences between L<MRO::Compat> and 5.9.5+ one should
 look out for.  The main docs in 5.9.5's L<mro> are the real
 interface docs, and contain a lot of other useful information.
 
-=head1 VERSION 0.02
-
-This is the first release of this new module, and on top of that,
-the Perl 5.9.5 it seeks to provide compatibility with isn't even
-out yet.
-
-If you're going to use/depend on this, please keep abreast of
-possible interface changes in the next few versions.  Once Perl
-5.9.5 is out the door the interfaces should stabilize on whatever
-5.9.5 has to offer.  In the meantime, don't be surprised if
-L<MRO::Compat> and 5.9.5's interfaces aren't perfectly in sync
-at all times.
-
 =head1 Functions
 
 =head2 mro::get_linear_isa($classname[, $type])
@@ -140,7 +132,7 @@ sub __get_linear_isa_dfs {
 
 sub __get_linear_isa {
     my ($classname, $type) = @_;
-    die "mro::get_mro requires a classname" if !$classname;
+    die "mro::get_mro requires a classname" if !defined $classname;
 
     $type ||= __get_mro($classname);
     if($type eq 'dfs') {
@@ -178,7 +170,7 @@ section for additional details.
 
 sub __set_mro {
     my ($classname, $type) = @_;
-    if(!$classname || !$type) {
+    if(!defined $classname || !$type) {
         die q{Usage: mro::set_mro($classname, $type)};
     }
     if($type eq 'c3') {
@@ -209,7 +201,7 @@ even before L<Class::C3::initialize()> is called.
 
 sub __get_mro {
     my $classname = shift;
-    die "mro::get_mro requires a classname" if !$classname;
+    die "mro::get_mro requires a classname" if !defined $classname;
     return 'c3' if exists $Class::C3::MRO{$classname};
     return 'dfs';
 }
@@ -248,8 +240,7 @@ sub __get_all_pkgs_with_isas {
     push(@retval, $search) if scalar(@$isa);
 
     foreach my $cand (keys %{"$search\::"}) {
-        if($cand =~ /::$/) {
-            $cand =~ s/::$//;
+        if($cand =~ s/::$//) {
             next if $cand eq $search; # skip self-reference (main?)
             push(@retval, @{__get_all_pkgs_with_isas($pfx . $cand)});
         }
@@ -286,7 +277,7 @@ sub __get_isarev_recurse {
 
 sub __get_isarev {
     my $classname = shift;
-    die "mro::get_isarev requires a classname" if !$classname;
+    die "mro::get_isarev requires a classname" if !defined $classname;
 
     __get_isarev_recurse($classname, __get_all_pkgs_with_isas(), 0);
 }
@@ -305,7 +296,7 @@ inherit methods from it.
 
 sub __is_universal {
     my $classname = shift;
-    die "mro::is_universal requires a classname" if !$classname;
+    die "mro::is_universal requires a classname" if !defined $classname;
 
     my $lin = __get_linear_isa('UNIVERSAL');
     foreach (@$lin) {
@@ -328,7 +319,7 @@ method caching.
 
 sub __invalidate_all_method_caches {
     # Super secret mystery code :)
-    @fedcba98::ISA = @fedcba98::ISA;
+    @f845a9c1ac41be33::ISA = @f845a9c1ac41be33::ISA;
     return;
 }
 
@@ -349,7 +340,7 @@ method caching.
 
 sub __method_changed_in {
     my $classname = shift;
-    die "mro::method_changed_in requires a classname" if !$classname;
+    die "mro::method_changed_in requires a classname" if !defined $classname;
 
     __invalidate_all_method_caches();
 }
@@ -363,16 +354,18 @@ it will probably increment a lot more often than necessary.
 
 =cut
 
-my $__pkg_gen = 2;
-sub __get_pkg_gen_pp {
-    my $classname = shift;
-    die "mro::get_pkg_gen requires a classname" if !$classname;
-    return $__pkg_gen++;
+{
+    my $__pkg_gen = 2;
+    sub __get_pkg_gen_pp {
+        my $classname = shift;
+        die "mro::get_pkg_gen requires a classname" if !defined $classname;
+        return $__pkg_gen++;
+    }
 }
 
 sub __get_pkg_gen_c3xs {
     my $classname = shift;
-    die "mro::get_pkg_gen requires a classname" if !$classname;
+    die "mro::get_pkg_gen requires a classname" if !defined $classname;
 
     return Class::C3::XS::_plsubgen();
 }
@@ -385,15 +378,11 @@ on older Perls, it does so merely by passing off the work
 to L<Class::C3>.
 
 It does not remove the need for you to call
-L<Class::C3>'s C<initialize()>, C<reinitialize()>, and/or
-C<uninitialize()> at the appropriate times
-as documented in the L<Class::C3> docs.
-
-Because L<MRO::Compat> has L<Class::C3> as a pre-requisite,
-and requires it at C<use> time, you can blindly call
-those functions in code that uses L<MRO::Compat>.
-Under 5.9.5+ with L<MRO::Compat>, your calls to those
-functions will become a no-op and everything will work fine.
+C<Class::C3::initialize()>, C<Class::C3::reinitialize()>, and/or
+C<Class::C3::uninitialize()> at the appropriate times
+as documented in the L<Class::C3> docs.  These three functions
+are always provided by L<MRO::Compat>, either via L<Class::C3>
+itself on older Perls, or directly as no-ops on 5.9.5+.
 
 =head1 SEE ALSO