X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FClass%2FMOP%2FClass.pm;h=67baec44873442a6b626d726f20ad92b06fa2a71;hb=2a2b84587843665ec0c541f4635455f490480595;hp=7d47e17dac681be802d4c2a58c1095cab99d97ca;hpb=656ce3ba1bc7daab8237b7a7e0bc05bebaf81c9e;p=gitmo%2FClass-MOP.git diff --git a/lib/Class/MOP/Class.pm b/lib/Class/MOP/Class.pm index 7d47e17..67baec4 100644 --- a/lib/Class/MOP/Class.pm +++ b/lib/Class/MOP/Class.pm @@ -12,7 +12,7 @@ use Carp 'confess'; use Scalar::Util 'blessed', 'reftype', 'weaken'; use Sub::Name 'subname'; -our $VERSION = '0.26'; +our $VERSION = '0.27'; our $AUTHORITY = 'cpan:STEVAN'; use base 'Class::MOP::Module'; @@ -395,7 +395,17 @@ sub clone_instance { sub rebless_instance { my ($self, $instance) = @_; - my $old_metaclass = $instance->meta(); + + my $old_metaclass; + if ($instance->can('meta')) { + ($instance->meta->isa('Class::MOP::Class')) + || confess 'Cannot rebless instance if ->meta is not an instance of Class::MOP::Class'; + $old_metaclass = $instance->meta; + } + else { + $old_metaclass = $self->initialize(blessed($instance)); + } + my $meta_instance = $self->get_meta_instance(); $self->name->isa($old_metaclass->name)