From: Brandon L Black Date: Wed, 18 Jul 2007 23:47:26 +0000 (+0000) Subject: 0.04 X-Git-Tag: 0.04^0 X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?p=gitmo%2FMRO-Compat.git;a=commitdiff_plain;h=813500299856210e9f73eff73b176437738da38c 0.04 --- diff --git a/ChangeLog b/ChangeLog index a693fbe..c69dc9d 100644 --- 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+ diff --git a/Makefile.PL b/Makefile.PL index fb3b030..69f6513 100644 --- a/Makefile.PL +++ b/Makefile.PL @@ -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 --- 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 diff --git a/lib/MRO/Compat.pm b/lib/MRO/Compat.pm index d55f9a9..3ebac2b 100644 --- a/lib/MRO/Compat.pm +++ b/lib/MRO/Compat.pm @@ -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 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 installed, but it's not a requirement. +Some parts of this code will work better and/or faster with +L installed (which is an optional prereq +of L, 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 prefix. @@ -88,19 +93,6 @@ differences between L and 5.9.5+ one should look out for. The main docs in 5.9.5's L 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 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 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. It does not remove the need for you to call -L's C, C, and/or -C at the appropriate times -as documented in the L docs. - -Because L has L as a pre-requisite, -and requires it at C time, you can blindly call -those functions in code that uses L. -Under 5.9.5+ with L, your calls to those -functions will become a no-op and everything will work fine. +C, C, and/or +C at the appropriate times +as documented in the L docs. These three functions +are always provided by L, either via L +itself on older Perls, or directly as no-ops on 5.9.5+. =head1 SEE ALSO