stop using excludes within moose, since it's no longer necessary
[gitmo/Moose.git] / lib / Moose / Meta / Method / Accessor / Native / Array / insert.pm
1 package Moose::Meta::Method::Accessor::Native::Array::insert;
2
3 use strict;
4 use warnings;
5
6 use Moose::Role;
7
8 with 'Moose::Meta::Method::Accessor::Native::Array::Writer';
9
10 sub _minimum_arguments { 2 }
11
12 sub _maximum_arguments { 2 }
13
14 sub _adds_members { 1 }
15
16 sub _potential_value {
17     my $self = shift;
18     my ($slot_access) = @_;
19
20     return '(do { '
21              . 'my @potential = @{ (' . $slot_access . ') }; '
22              . 'splice @potential, $_[0], 0, $_[1]; '
23              . '\@potential; '
24          . '})';
25 }
26
27 # We need to override this because while @_ can be written to, we cannot write
28 # directly to $_[1].
29 sub _inline_coerce_new_values {
30     my $self = shift;
31
32     return unless $self->associated_attribute->should_coerce;
33
34     return unless $self->_tc_member_type_can_coerce;
35
36     return '@_ = ($_[0], $member_coercion->($_[1]));';
37 };
38
39 sub _new_members { '$_[1]' }
40
41 sub _inline_optimized_set_new_value {
42     my $self = shift;
43     my ($inv, $new, $slot_access) = @_;
44
45     return 'splice @{ (' . $slot_access . ') }, $_[0], 0, $_[1];';
46 }
47
48 sub _return_value {
49     my $self = shift;
50     my ($slot_access) = @_;
51
52     return $slot_access . '->[ $_[0] ]';
53 }
54
55 no Moose::Role;
56
57 1;