r19251 - in /trunk/libclass-mop-perl: Changes META.yml Makefile.PL README debian/changelog lib/Class/MOP.pm lib/Class/MOP/Class.pm t/200_Class_C3_compatibility.t

eloy at users.alioth.debian.org eloy at users.alioth.debian.org
Wed Apr 30 09:26:51 UTC 2008


Author: eloy
Date: Wed Apr 30 09:26:50 2008
New Revision: 19251

URL: http://svn.debian.org/wsvn/pkg-perl/?sc=1&rev=19251
Log:
new upstream version

Modified:
    trunk/libclass-mop-perl/Changes
    trunk/libclass-mop-perl/META.yml
    trunk/libclass-mop-perl/Makefile.PL
    trunk/libclass-mop-perl/README
    trunk/libclass-mop-perl/debian/changelog
    trunk/libclass-mop-perl/lib/Class/MOP.pm
    trunk/libclass-mop-perl/lib/Class/MOP/Class.pm
    trunk/libclass-mop-perl/t/200_Class_C3_compatibility.t

Modified: trunk/libclass-mop-perl/Changes
URL: http://svn.debian.org/wsvn/pkg-perl/trunk/libclass-mop-perl/Changes?rev=19251&op=diff
==============================================================================
--- trunk/libclass-mop-perl/Changes (original)
+++ trunk/libclass-mop-perl/Changes Wed Apr 30 09:26:50 2008
@@ -1,4 +1,19 @@
 Revision history for Perl extension Class-MOP.
+
+0.55 Mon. April 28, 2008
+    - All classes now have proper C3 MRO support
+      - added MRO::Compat as a dependency to allow
+        for the C3 MRO support to Just Work in all
+        perl versions
+    
+    * Class::MOP::Class
+      - rebless_instance now returns the instance 
+        it has just blessed, this is mostly to 
+        facilitate chaining
+      - set the attr correctly in rebless_instance 
+        when it has no init_arg
+      - tweaked &linear_isa and &class_precedence_list
+        to support c3 classes.
 
 0.54 Fri. March, 14, 2008
     * Class::MOP

Modified: trunk/libclass-mop-perl/META.yml
URL: http://svn.debian.org/wsvn/pkg-perl/trunk/libclass-mop-perl/META.yml?rev=19251&op=diff
==============================================================================
--- trunk/libclass-mop-perl/META.yml (original)
+++ trunk/libclass-mop-perl/META.yml Wed Apr 30 09:26:50 2008
@@ -20,13 +20,13 @@
 provides: 
   Class::MOP: 
     file: lib/Class/MOP.pm
-    version: 0.54
+    version: 0.55
   Class::MOP::Attribute: 
     file: lib/Class/MOP/Attribute.pm
     version: 0.24
   Class::MOP::Class: 
     file: lib/Class/MOP/Class.pm
-    version: 0.29
+    version: 0.30
   Class::MOP::Immutable: 
     file: lib/Class/MOP/Immutable.pm
     version: 0.05
@@ -62,6 +62,7 @@
     version: 0.05
 requires: 
   Carp: 0
+  MRO::Compat: 0.05
   Scalar::Util: 1.18
   Sub::Name: 0.02
-version: 0.54
+version: 0.55

Modified: trunk/libclass-mop-perl/Makefile.PL
URL: http://svn.debian.org/wsvn/pkg-perl/trunk/libclass-mop-perl/Makefile.PL?rev=19251&op=diff
==============================================================================
--- trunk/libclass-mop-perl/Makefile.PL (original)
+++ trunk/libclass-mop-perl/Makefile.PL Wed Apr 30 09:26:50 2008
@@ -8,6 +8,7 @@
 
 requires 'Scalar::Util' => '1.18';
 requires 'Sub::Name'    => '0.02';
+requires 'MRO::Compat'  => '0.05';
 requires 'Carp'         => '0';
 
 build_requires 'Test::More'      => '0.62';

Modified: trunk/libclass-mop-perl/README
URL: http://svn.debian.org/wsvn/pkg-perl/trunk/libclass-mop-perl/README?rev=19251&op=diff
==============================================================================
--- trunk/libclass-mop-perl/README (original)
+++ trunk/libclass-mop-perl/README Wed Apr 30 09:26:50 2008
@@ -1,4 +1,4 @@
-Class::MOP version 0.54
+Class::MOP version 0.55
 ===========================
 
 See the individual module documentation for more information

Modified: trunk/libclass-mop-perl/debian/changelog
URL: http://svn.debian.org/wsvn/pkg-perl/trunk/libclass-mop-perl/debian/changelog?rev=19251&op=diff
==============================================================================
--- trunk/libclass-mop-perl/debian/changelog (original)
+++ trunk/libclass-mop-perl/debian/changelog Wed Apr 30 09:26:50 2008
@@ -1,3 +1,9 @@
+libclass-mop-perl (0.55-1) UNRELEASED; urgency=low
+
+  * (NOT RELEASED YET) New upstream release
+
+ -- Krzysztof Krzyżaniak (eloy) <eloy at debian.org>  Wed, 30 Apr 2008 11:11:32 +0200
+
 libclass-mop-perl (0.54-1) unstable; urgency=low
 
   * New upstream release.

Modified: trunk/libclass-mop-perl/lib/Class/MOP.pm
URL: http://svn.debian.org/wsvn/pkg-perl/trunk/libclass-mop-perl/lib/Class/MOP.pm?rev=19251&op=diff
==============================================================================
--- trunk/libclass-mop-perl/lib/Class/MOP.pm (original)
+++ trunk/libclass-mop-perl/lib/Class/MOP.pm Wed Apr 30 09:26:50 2008
@@ -3,6 +3,8 @@
 
 use strict;
 use warnings;
+
+use MRO::Compat;
 
 use Carp         'confess';
 use Scalar::Util 'weaken';
@@ -14,7 +16,7 @@
 use Class::MOP::Immutable;
 
 BEGIN {
-    our $VERSION   = '0.54';
+    our $VERSION   = '0.55';
     our $AUTHORITY = 'cpan:STEVAN';    
     
     use XSLoader;

Modified: trunk/libclass-mop-perl/lib/Class/MOP/Class.pm
URL: http://svn.debian.org/wsvn/pkg-perl/trunk/libclass-mop-perl/lib/Class/MOP/Class.pm?rev=19251&op=diff
==============================================================================
--- trunk/libclass-mop-perl/lib/Class/MOP/Class.pm (original)
+++ trunk/libclass-mop-perl/lib/Class/MOP/Class.pm Wed Apr 30 09:26:50 2008
@@ -12,7 +12,7 @@
 use Scalar::Util 'blessed', 'reftype', 'weaken';
 use Sub::Name    'subname';
 
-our $VERSION   = '0.29';
+our $VERSION   = '0.30';
 our $AUTHORITY = 'cpan:STEVAN';
 
 use base 'Class::MOP::Module';
@@ -431,7 +431,7 @@
                     unless exists $params{$init_arg};
             } 
             else {
-                $attr->set_value($instance);
+                $attr->set_value($instance, $attr->get_value($instance));
             }
         }
     }
@@ -439,6 +439,8 @@
     foreach my $attr ($self->compute_all_applicable_attributes) {
         $attr->initialize_instance_slot($meta_instance, $instance, \%params);
     }
+    
+    $instance;
 }
 
 # Inheritance
@@ -505,17 +507,12 @@
 
 
 sub linearized_isa {
-    if (Class::MOP::IS_RUNNING_ON_5_10()) {
-        return @{ mro::get_linear_isa( (shift)->name ) };
-    }
-    else {
-        my %seen;
-        return grep { !($seen{$_}++) } (shift)->class_precedence_list;
-    }
+    return @{ mro::get_linear_isa( (shift)->name ) };
 }
 
 sub class_precedence_list {
     my $self = shift;
+    my $name = $self->name;
 
     unless (Class::MOP::IS_RUNNING_ON_5_10()) { 
         # NOTE:
@@ -525,15 +522,26 @@
         # blow up otherwise. Yes, it's an ugly hack, better
         # suggestions are welcome.        
         # - SL
-        ($self->name || return)->isa('This is a test for circular inheritance') 
-    }
-
-    (
-        $self->name,
-        map {
-            $self->initialize($_)->class_precedence_list()
-        } $self->superclasses()
-    );
+        ($name || return)->isa('This is a test for circular inheritance') 
+    }
+
+    # if our mro is c3, we can 
+    # just grab the linear_isa
+    if (mro::get_mro($name) eq 'c3') {
+        return @{ mro::get_linear_isa($name) }
+    }
+    else {
+        # NOTE:
+        # we can't grab the linear_isa for dfs
+        # since it has all the duplicates 
+        # already removed.
+        return (
+            $name,
+            map {
+                $self->initialize($_)->class_precedence_list()
+            } $self->superclasses()
+        );
+    }
 }
 
 ## Methods

Modified: trunk/libclass-mop-perl/t/200_Class_C3_compatibility.t
URL: http://svn.debian.org/wsvn/pkg-perl/trunk/libclass-mop-perl/t/200_Class_C3_compatibility.t?rev=19251&op=diff
==============================================================================
--- trunk/libclass-mop-perl/t/200_Class_C3_compatibility.t (original)
+++ trunk/libclass-mop-perl/t/200_Class_C3_compatibility.t Wed Apr 30 09:26:50 2008
@@ -3,7 +3,7 @@
 use strict;
 use warnings;
 
-use Test::More;
+use Test::More tests => 8;
 
 =pod
 
@@ -14,34 +14,32 @@
 =cut
 
 BEGIN {
-    eval "use Class::C3";
-    plan skip_all => "Class::C3 required for this test" if $@;
-    plan tests => 7;    
+    use_ok('Class::MOP');  
 }
 
 {
     package Diamond_A;
-    Class::C3->import; 
+    use mro 'c3';
     use metaclass; # everyone will just inherit this now :)
     
     sub hello { 'Diamond_A::hello' }
 }
 {
     package Diamond_B;
+    use mro 'c3';    
     use base 'Diamond_A';
-    Class::C3->import; 
 }
 {
     package Diamond_C;
-    Class::C3->import; 
+    use mro 'c3';
     use base 'Diamond_A';     
     
     sub hello { 'Diamond_C::hello' }
 }
 {
     package Diamond_D;
+    use mro 'c3';    
     use base ('Diamond_B', 'Diamond_C');
-    Class::C3->import; 
 }
 
 # we have to manually initialize 
@@ -50,7 +48,8 @@
 Class::C3::initialize();
 
 is_deeply(
-    [ Class::C3::calculateMRO('Diamond_D') ],
+#    [ Class::C3::calculateMRO('Diamond_D') ],
+    [ Diamond_D->meta->class_precedence_list ],
     [ qw(Diamond_D Diamond_B Diamond_C Diamond_A) ],
     '... got the right MRO for Diamond_D');
 




More information about the Pkg-perl-cvs-commits mailing list