removing ->blessed, blessed is not a method *cough* groditi *cough*,.. and making...
Stevan Little [Sun, 18 May 2008 16:23:38 +0000 (16:23 +0000)]
Changes
MOP.xs
lib/Class/MOP.pm
lib/Class/MOP/Immutable.pm
t/019_anon_class_keep_alive.t
t/070_immutable_metaclass.t
t/071_immutable_w_custom_metaclass.t

diff --git a/Changes b/Changes
index 9e97d59..7f47eac 100644 (file)
--- a/Changes
+++ b/Changes
@@ -1,6 +1,10 @@
 Revision history for Perl extension Class-MOP.
 
 0.56
+    * Class::MOP
+      - we now get the &check_package_cache_flag
+        function from MRO::Compat
+
     * Class::MOP::Attribute
       - add has_read_method and has_write_method
      
diff --git a/MOP.xs b/MOP.xs
index 6f1e2f6..53724ff 100644 (file)
--- a/MOP.xs
+++ b/MOP.xs
@@ -5,10 +5,6 @@
 #include "ppport.h"
 
 /*
-check_method_cache_flag:
-  check the PL_sub_generation 
-  ISA/method cache thing
-
 get_code_info:
   Pass in a coderef, returns:
   [ $pkg_name, $coderef_name ] ie:
@@ -19,14 +15,6 @@ MODULE = Class::MOP   PACKAGE = Class::MOP
 
 PROTOTYPES: ENABLE
 
-SV*
-check_package_cache_flag(pkg)
-  SV* pkg
-  CODE:
-    RETVAL = newSViv(PL_sub_generation);
-  OUTPUT:
-    RETVAL
-
 void
 get_code_info(coderef)
   SV* coderef
index db6e3a7..7128954 100644 (file)
@@ -22,15 +22,12 @@ BEGIN {
     use XSLoader;
     XSLoader::load( 'Class::MOP', $VERSION );    
     
-    unless ($] < 5.009_005) {
-        require mro;
-        no warnings 'redefine', 'prototype';
-        *check_package_cache_flag = \&mro::get_pkg_gen;
-        *IS_RUNNING_ON_5_10 = sub () { 1 };
-    }
-    else {
-        *IS_RUNNING_ON_5_10 = sub () { 0 };        
-    }
+    *IS_RUNNING_ON_5_10 = ($] < 5.009_005) 
+        ? sub () { 0 }
+        : sub () { 1 };        
+    
+    # get it from MRO::Compat now ...
+    *check_package_cache_flag = \&mro::get_pkg_gen;    
 }
 
 {
index 284949a..f767e9a 100644 (file)
@@ -171,7 +171,7 @@ sub make_metaclass_mutable {
 
     if ($options{inline_destructor} && $immutable->has_method('DESTROY')) {
         $immutable->remove_method('DESTROY')
-          if $immutable->get_method('DESTROY')->blessed eq $options{destructor_class};
+          if blessed($immutable->get_method('DESTROY')) eq $options{destructor_class};
     }
 
     # NOTE:
@@ -191,10 +191,10 @@ sub make_metaclass_mutable {
     # 14:26 <@stevan> the only user of ::Method::Constructor is immutable
     # 14:27 <@stevan> if someone uses it outside of immutable,.. they are either: mst or groditi
     # 14:27 <@stevan> so I am not worried
-    if ($options{inline_constructor}) {
+    if ($options{inline_constructor}  && $immutable->has_method($options{constructor_name})) {
         my $constructor_class = $options{constructor_class} || 'Class::MOP::Method::Constructor';
         $immutable->remove_method( $options{constructor_name}  )
-          if $immutable->get_method($options{constructor_name})->blessed eq $constructor_class;
+          if blessed($immutable->get_method($options{constructor_name})) eq $constructor_class;
     }
 }
 
index a1663a9..59422be 100644 (file)
@@ -24,7 +24,7 @@ my $anon_meta_name;
 
     my $anon_class = Class::MOP::Class->create_anon_class(superclasses => [$class]);
     $anon_class_name = $anon_class->name;
-    $anon_meta_name = $anon_class->blessed;
+    $anon_meta_name = Scalar::Util::blessed($anon_class);
     $anon_class->add_attribute( $_, reader => $_ ) for qw/bar baz/;
 
     my $obj = $anon_class->new_object(bar => 'a', baz => 'b');
index f81b0dd..af2781d 100644 (file)
@@ -62,7 +62,7 @@ BEGIN {
 
   is_deeply(
             [ $immutable_metaclass->superclasses ],
-            [ $meta->blessed ],
+            [ Scalar::Util::blessed($meta) ],
             '... immutable_metaclass superclasses are correct'
            );
   ok($immutable_metaclass->has_method('get_mutable_metaclass_name'));
index 4d2eba0..ad7638c 100644 (file)
@@ -51,8 +51,8 @@ use lib catdir($FindBin::Bin, 'lib');
 {
     my $meta = Baz->meta;
     ok($meta->is_mutable, '... Baz is mutable');
-    is(Foo->meta->blessed, Bar->meta->blessed, 'Foo and Bar immutable metaclasses match');
-    is($meta->blessed, 'MyMetaClass', 'Baz->meta blessed as MyMetaClass');
+    is(Scalar::Util::blessed(Foo->meta), Scalar::Util::blessed(Bar->meta), 'Foo and Bar immutable metaclasses match');
+    is(Scalar::Util::blessed($meta), 'MyMetaClass', 'Baz->meta blessed as MyMetaClass');
     ok(Baz->can('mymetaclass_attributes'), '... Baz can do method before immutable');
     ok($meta->can('mymetaclass_attributes'), '... meta can do method before immutable');
     lives_ok { $meta->make_immutable } "Baz is now immutable";
@@ -60,7 +60,7 @@ use lib catdir($FindBin::Bin, 'lib');
     isa_ok($meta, 'MyMetaClass', 'Baz->meta');
     ok(Baz->can('mymetaclass_attributes'), '... Baz can do method after imutable');
     ok($meta->can('mymetaclass_attributes'), '... meta can do method after immutable');
-    isnt(Baz->meta->blessed, Bar->meta->blessed, 'Baz and Bar immutable metaclasses are different');
+    isnt(Scalar::Util::blessed(Baz->meta), Scalar::Util::blessed(Bar->meta), 'Baz and Bar immutable metaclasses are different');
     lives_ok { $meta->make_mutable } "Baz is now mutable";
     ok($meta->is_mutable, '... Baz is mutable again');
 }