handle role reinitialization too
[gitmo/Moose.git] / lib / Moose / Meta / Attribute.pm
index 443b31a..aebca6f 100644 (file)
@@ -17,9 +17,12 @@ use Moose::Meta::Method::Accessor;
 use Moose::Meta::Method::Delegation;
 use Moose::Util ();
 use Moose::Util::TypeConstraints ();
+use Class::MOP::MiniTrait;
 
 use base 'Class::MOP::Attribute', 'Moose::Meta::Mixin::AttributeCore';
 
+Class::MOP::MiniTrait::apply(__PACKAGE__, 'Moose::Meta::Object::Trait');
+
 __PACKAGE__->meta->add_attribute('traits' => (
     reader    => 'applied_traits',
     predicate => 'has_applied_traits',
@@ -577,31 +580,7 @@ sub remove_accessors {
     return;
 }
 
-sub inline_get {
-    my $self = shift;
-    my ($instance) = @_;
-
-    return $self->associated_class->get_meta_instance->inline_get_slot_value(
-        $instance, $self->slots );
-}
-
-sub inline_access {
-    my $self = shift;
-    my ($instance) = @_;
-
-    return $self->associated_class->get_meta_instance->inline_slot_access(
-        $instance, $self->slots );
-}
-
-sub inline_has {
-    my $self = shift;
-    my ($instance) = @_;
-
-    $self->associated_class->get_meta_instance->inline_is_slot_initialized(
-        $instance, $self->slots );
-}
-
-sub inline_store {
+sub inline_set {
     my $self = shift;
     my ( $instance, $value ) = @_;
 
@@ -611,7 +590,7 @@ sub inline_store {
         = $mi->inline_set_slot_value( $instance, $self->slots, $value ) . ";";
     $code
         .= $mi->inline_weaken_slot_value( $instance, $self->slots, $value )
-        . ";"
+        . "    if ref $value;"
         if $self->is_weak_ref;
 
     return $code;
@@ -1003,13 +982,11 @@ methods is almost always an error.)
 
 This method overrides the parent to also remove delegation methods.
 
-=item B<< $attr->inline_get >>
-
-=item B<< $attr->inline_access >>
-
-=item B<< $attr->inline_has >>
+=item B<< $attr->inline_set($instance_var, $value_var) >>
 
-=item B<< $attr->inline_store >>
+This method return a code snippet suitable for inlining the relevant
+operation. It expect strings containing variable names to be used in the
+inlining, like C<'$self'> or C<'$_[1]'>.
 
 =item B<< $attr->install_delegation >>