use Scalar::Util 'blessed', 'weaken';
use Try::Tiny;
-our $VERSION = '0.97_01';
+our $VERSION = '1.11';
$VERSION = eval $VERSION;
our $AUTHORITY = 'cpan:STEVAN';
'clearer' => $options->{clearer},
'builder' => $options->{builder},
'init_arg' => $options->{init_arg},
- 'default' => $options->{default},
+ exists $options->{default}
+ ? ('default' => $options->{default})
+ : (),
'initializer' => $options->{initializer},
'definition_context' => $options->{definition_context},
# keep a weakened link to the
$params->{$init_arg},
);
}
- elsif (defined $self->{'default'}) {
+ elsif (exists $self->{'default'}) {
$self->_set_initial_slot_value(
$meta_instance,
$instance,
$instance->$initializer($value, $callback, $self);
}
-sub associated_class { $_[0]->{'associated_class'} }
-sub associated_methods { $_[0]->{'associated_methods'} }
-
sub get_read_method {
my $self = shift;
my $reader = $self->reader || $self->accessor;
}
+sub inline_get {
+ my $self = shift;
+ my ($instance) = @_;
+
+ return $self->associated_class->get_meta_instance->inline_get_slot_value(
+ $instance, $self->name );
+}
+
+sub inline_set {
+ my $self = shift;
+ my ( $instance, $value ) = @_;
+
+ return $self->associated_class->get_meta_instance->inline_set_slot_value(
+ $instance, $self->name, $value );
+}
+
+sub inline_has {
+ my $self = shift;
+ my ($instance) = @_;
+
+ return
+ $self->associated_class->get_meta_instance
+ ->inline_is_slot_initialized( $instance, $self->name );
+}
+
+sub inline_clear {
+ my $self = shift;
+ my ($instance) = @_;
+
+ return
+ $self->associated_class->get_meta_instance
+ ->inline_deinitialize_slot( $instance, $self->name );
+}
+
1;
__END__
Returns the value without going through the accessor. Note that this
works even with write-only accessors.
-=item B<< $sttr->get_raw_value($instance) >>
+=item B<< $attr->get_raw_value($instance) >>
Returns the value without any side effects such as lazy attributes.
This does not currently remove methods from the list returned by
C<associated_methods>.
+=item B<< $attr->inline_get >>
+
+=item B<< $attr->inline_set >>
+
+=item B<< $attr->inline_has >>
+
+=item B<< $attr->inline_clear >>
+
+These methods return a code snippet suitable for inlining the relevant
+operation. They expect strings containing variable names to be used in the
+inlining, like C<'$self'> or C<'$_[1]'>.
+
=back
=head2 Introspection