5767663e084ed4146aa2fe5e9c02364d8570c9a3
[gitmo/Moose.git] / lib / Moose / Meta / Method / Accessor / Native / Array / accessor.pm
1 package Moose::Meta::Method::Accessor::Native::Array::accessor;
2
3 use strict;
4 use warnings;
5
6 use Moose::Role;
7
8 with 'Moose::Meta::Method::Accessor::Native::Array::set',
9      'Moose::Meta::Method::Accessor::Native::Array::get';
10
11 sub _inline_process_arguments {
12     my $self = shift;
13     $self->Moose::Meta::Method::Accessor::Native::Array::get::_inline_process_arguments(@_);
14 }
15
16 sub _inline_check_arguments {
17     my $self = shift;
18     $self->Moose::Meta::Method::Accessor::Native::Array::get::_inline_check_arguments(@_);
19 }
20
21 sub _return_value {
22     my $self = shift;
23     $self->Moose::Meta::Method::Accessor::Native::Array::get::_return_value(@_);
24 }
25
26 sub _generate_method {
27     my $self = shift;
28
29     my $inv         = '$self';
30     my $slot_access = $self->_get_value($inv);
31
32     return (
33         'sub {',
34             'my ' . $inv . ' = shift;',
35             $self->_inline_curried_arguments,
36             $self->_inline_check_lazy($inv, '$type_constraint', '$type_coercion', '$type_message'),
37             # get
38             'if (@_ == 1) {',
39                 $self->_inline_check_var_is_valid_index('$_[0]'),
40                 $self->Moose::Meta::Method::Accessor::Native::Array::get::_inline_return_value($slot_access),
41             '}',
42             # set
43             'else {',
44                 $self->_inline_writer_core($inv, $slot_access),
45             '}',
46         '}',
47     );
48 }
49
50 sub _minimum_arguments { 1 }
51 sub _maximum_arguments { 2 }
52
53 no Moose::Role;
54
55 1;