$VERSION = eval $VERSION;
our $AUTHORITY = 'cpan:STEVAN';
-use base 'Moose::Meta::Method::Accessor::Native';
+# This package is really more of a role, so it doesn't inherit from anything.
sub _inline_check_var_is_valid_index {
my ( $self, $var ) = @_;
$VERSION = eval $VERSION;
our $AUTHORITY = 'cpan:STEVAN';
-use base 'Moose::Meta::Method::Accessor::Native::Array';
-
-sub _generate_method {
- my $self = shift;
-
- my $inv = '$self';
-
- my $code = 'sub {';
- $code .= "\n" . $self->_inline_pre_body(@_);
-
- $code .= "\n" . 'my $self = shift;';
- $code .= "\n" . $self->_inline_curried_arguments;
- $code .= "\n" . $self->_inline_check_argument_count;
- $code .= "\n" . $self->_inline_check_arguments;
-
- $code .= "\n" . $self->_inline_check_lazy($inv);
- $code .= "\n" . $self->_inline_post_body(@_);
-
- my $slot_access = $self->_inline_get($inv);
-
- $code .= "\n" . $self->_inline_return_value($slot_access);
- $code .= "\n}";
-
- return $code;
-}
-
-sub _inline_return_value {
- my ( $self, $slot_access ) = @_;
-
- 'return ' . $self->_return_value($slot_access) . ';';
-}
+use base qw(
+ Moose::Meta::Method::Accessor::Native::Array
+ Moose::Meta::Method::Accessor::Native::Reader
+);
1;
$VERSION = eval $VERSION;
our $AUTHORITY = 'cpan:STEVAN';
-use base 'Moose::Meta::Method::Accessor::Native::Array';
+use base qw(
+ Moose::Meta::Method::Accessor::Native::Array
+ Moose::Meta::Method::Accessor::Native::Writer
+);
-sub _generate_method {
- my $self = shift;
-
- my $inv = '$self';
-
- my $slot_access = $self->_inline_get($inv);
-
- my $code = 'sub {';
- $code .= "\n" . $self->_inline_pre_body(@_);
-
- $code .= "\n" . 'my $self = shift;';
-
- $code .= "\n" . $self->_inline_check_lazy($inv);
-
- $code .= "\n" . $self->_inline_curried_arguments;
-
- $code .= "\n" . $self->_inline_check_argument_count;
-
- $code .= "\n" . $self->_inline_process_arguments;
-
- $code .= "\n" . $self->_inline_check_arguments;
-
- my $new_values = $self->_new_values($slot_access);
- my $potential_value = $self->_potential_value($slot_access);
-
- if ( $self->_value_needs_copy ) {
- $code .= "\n" . "my \@potential = $potential_value;";
- $potential_value = '@potential';
- }
+sub _inline_process_arguments {q{}}
- $code .= "\n"
- . $self->_inline_tc_code(
- $new_values,
- $potential_value
- );
+sub _inline_check_arguments {q{}}
- $code .= "\n" . $self->_inline_get_old_value_for_trigger($inv);
- $code .= "\n" . $self->_capture_old_value($slot_access);
+sub _new_value {'@_'}
- $code .= "\n"
- . $self->_inline_store(
- $inv,
- $self->_value_needs_copy
- ? '\\' . $potential_value
- : '[' . $potential_value . ']'
- );
+sub _inline_copy_value {
+ my ( $self, $potential_ref ) = @_;
- $code .= "\n" . $self->_inline_post_body(@_);
- $code .= "\n" . $self->_inline_trigger( $inv, $slot_access, '@old' );
+ return q{} unless $self->_value_needs_copy;
- $code .= "\n" . $self->_return_value( $inv, '@old' );
+ my $code = "my \@potential = ${$potential_ref};";
- $code .= "\n}";
+ ${$potential_ref} = '@potential';
return $code;
}
-sub _inline_process_arguments {q{}}
-
-sub _inline_check_arguments {q{}}
-
-sub _new_values {'@_'}
-
sub _value_needs_copy {
my $self = shift;
}
sub _capture_old_value { return q{} }
+
+sub _inline_set_new_value {
+ my ( $self, $inv, $new ) = @_;
+
+ return $self->SUPER::_inline_store(
+ $inv,
+ $self->_value_needs_copy ? '\\' . $new : '[' . $new . ']'
+ );
+}
+
sub _return_value { return q{} }
sub _eval_environment {
--- /dev/null
+package Moose::Meta::Method::Accessor::Native::Reader;
+
+use strict;
+use warnings;
+
+our $VERSION = '1.13';
+$VERSION = eval $VERSION;
+our $AUTHORITY = 'cpan:STEVAN';
+
+use base 'Moose::Meta::Method::Accessor::Native';
+
+sub _generate_method {
+ my $self = shift;
+
+ my $inv = '$self';
+
+ my $code = 'sub {';
+ $code .= "\n" . $self->_inline_pre_body(@_);
+
+ $code .= "\n" . 'my $self = shift;';
+ $code .= "\n" . $self->_inline_curried_arguments;
+ $code .= "\n" . $self->_inline_check_argument_count;
+ $code .= "\n" . $self->_inline_check_arguments;
+
+ $code .= "\n" . $self->_inline_check_lazy($inv);
+ $code .= "\n" . $self->_inline_post_body(@_);
+
+ my $slot_access = $self->_inline_get($inv);
+
+ $code .= "\n" . $self->_inline_return_value($slot_access);
+ $code .= "\n}";
+
+ return $code;
+}
+
+sub _inline_return_value {
+ my ( $self, $slot_access ) = @_;
+
+ 'return ' . $self->_return_value($slot_access) . ';';
+}
+
+1;
--- /dev/null
+package Moose::Meta::Method::Accessor::Native::Writer;
+
+use strict;
+use warnings;
+
+our $VERSION = '1.13';
+$VERSION = eval $VERSION;
+our $AUTHORITY = 'cpan:STEVAN';
+
+use base 'Moose::Meta::Method::Accessor::Native';
+
+sub _generate_method {
+ my $self = shift;
+
+ my $inv = '$self';
+
+ my $slot_access = $self->_inline_get($inv);
+
+ my $code = 'sub {';
+ $code .= "\n" . $self->_inline_pre_body(@_);
+
+ $code .= "\n" . 'my $self = shift;';
+
+ $code .= "\n" . $self->_inline_check_lazy($inv);
+
+ $code .= "\n" . $self->_inline_curried_arguments;
+
+ $code .= "\n" . $self->_inline_check_argument_count;
+
+ $code .= "\n" . $self->_inline_process_arguments;
+
+ $code .= "\n" . $self->_inline_check_arguments;
+
+ my $new_value = $self->_new_value($slot_access);
+ my $potential_value = $self->_potential_value($slot_access);
+
+ $code .= "\n" . $self->_inline_copy_value( \$potential_value );
+
+ $code .= "\n"
+ . $self->_inline_tc_code(
+ $new_value,
+ $potential_value
+ );
+
+ $code .= "\n" . $self->_inline_get_old_value_for_trigger($inv);
+ $code .= "\n" . $self->_capture_old_value($slot_access);
+
+ $code .= "\n"
+ . $self->_inline_set_new_value(
+ $inv,
+ $potential_value
+ );
+
+ $code .= "\n" . $self->_inline_post_body(@_);
+ $code .= "\n" . $self->_inline_trigger( $inv, $slot_access, '@old' );
+
+ $code .= "\n" . $self->_return_value( $inv, '@old' );
+
+ $code .= "\n}";
+
+ return $code;
+}
+
+sub _inline_process_arguments {q{}}
+
+sub _inline_check_arguments {q{}}
+
+sub _value_needs_copy {0}
+
+sub _inline_tc_code {die}
+
+sub _inline_check_coercion {die}
+
+sub _inline_check_constraint {
+ my $self = shift;
+
+ return q{} unless $self->_constraint_must_be_checked;
+
+ return $self->SUPER::_inline_check_constraint( $_[0] );
+}
+
+sub _constraint_must_be_checked {die}
+
+sub _capture_old_value { return q{} }
+
+sub _inline_set_new_value {
+ my $self = shift;
+
+ return $self->SUPER::_inline_store(@_);
+}
+
+sub _return_value { return q{} }
+
+1;