Version 1.12
[gitmo/Class-MOP.git] / lib / Class / MOP / Class.pm
index 8426d14..d54fdf9 100644 (file)
@@ -17,7 +17,7 @@ use Devel::GlobalDestruction 'in_global_destruction';
 use Try::Tiny;
 use List::MoreUtils 'all';
 
-our $VERSION   = '1.10';
+our $VERSION   = '1.12';
 $VERSION = eval $VERSION;
 our $AUTHORITY = 'cpan:STEVAN';
 
@@ -602,17 +602,8 @@ sub _construct_instance {
     foreach my $attr ($class->get_all_attributes()) {
         $attr->initialize_instance_slot($meta_instance, $instance, $params);
     }
-    # NOTE:
-    # this will only work for a HASH instance type
     if (Class::MOP::metaclass_is_weak($class->name)) {
-        (reftype($instance) eq 'HASH')
-            || confess "Currently only HASH based instances are supported with instance of anon-classes";
-        # NOTE:
-        # At some point we should make this official
-        # as a reserved slot name, but right now I am
-        # going to keep it here.
-        # my $RESERVED_MOP_SLOT = '__MOP__';
-        $instance->{'__MOP__'} = $class;
+        $meta_instance->_set_mop_slot($instance, $class);
     }
     return $instance;
 }
@@ -649,6 +640,24 @@ sub inline_rebless_instance {
     return $self->get_meta_instance->inline_rebless_instance_structure(@_);
 }
 
+sub _inline_get_mop_slot {
+    my $self = shift;
+
+    return $self->get_meta_instance->_inline_get_mop_slot(@_);
+}
+
+sub _inline_set_mop_slot {
+    my $self = shift;
+
+    return $self->get_meta_instance->_inline_set_mop_slot(@_);
+}
+
+sub _inline_clear_mop_slot {
+    my $self = shift;
+
+    return $self->get_meta_instance->_inline_clear_mop_slot(@_);
+}
+
 sub clone_object {
     my $class    = shift;
     my $instance = shift;
@@ -686,29 +695,20 @@ sub _force_rebless_instance {
     $old_metaclass->rebless_instance_away($instance, $self, %params)
         if $old_metaclass;
 
+    my $meta_instance = $self->get_meta_instance;
+
     if (Class::MOP::metaclass_is_weak($old_metaclass->name)) {
-        delete $instance->{__MOP__};
+        $meta_instance->_clear_mop_slot($instance);
     }
 
-    my $meta_instance = $self->get_meta_instance;
-
     # rebless!
     # we use $_[1] here because of t/306_rebless_overload.t regressions on 5.8.8
     $meta_instance->rebless_instance_structure($_[1], $self);
 
     $self->_fixup_attributes_after_rebless($instance, $old_metaclass, %params);
 
-    # NOTE:
-    # this will only work for a HASH instance type
     if (Class::MOP::metaclass_is_weak($self->name)) {
-        (reftype($instance) eq 'HASH')
-            || confess "Currently only HASH based instances are supported with instance of anon-classes";
-        # NOTE:
-        # At some point we should make this official
-        # as a reserved slot name, but right now I am
-        # going to keep it here.
-        # my $RESERVED_MOP_SLOT = '__MOP__';
-        $instance->{'__MOP__'} = $self;
+        $meta_instance->_set_mop_slot($instance, $self);
     }
 }