error if we have a lazy attr with no default or builder
[gitmo/Moose.git] / lib / Moose / Meta / Method / Accessor / Native / Array / shift.pm
CommitLineData
a7821be5 1package Moose::Meta::Method::Accessor::Native::Array::shift;
2
3use strict;
4use warnings;
5
245478d5 6our $VERSION = '1.19';
a7821be5 7$VERSION = eval $VERSION;
8our $AUTHORITY = 'cpan:STEVAN';
9
8b9641b8 10use Moose::Role;
11
12with 'Moose::Meta::Method::Accessor::Native::Array::Writer' => {
13 -excludes => [
14 qw(
15 _maximum_arguments
16 _inline_capture_return_value
53a4677c 17 _optimized_set_new_value
8b9641b8 18 _return_value
19 )
20 ]
21};
a7821be5 22
23sub _maximum_arguments { 0 }
24
25sub _adds_members { 0 }
26
27sub _potential_value {
53a4677c 28 my $self = shift;
29 my ($slot_access) = @_;
a7821be5 30
53a4677c 31 return '[ @{ (' . $slot_access . ') } > 1 '
32 . '? @{ (' . $slot_access . ') }[1..$#{ (' . $slot_access . ') }] '
33 . ': () ]';
a7821be5 34}
35
e32b7489 36sub _inline_capture_return_value {
53a4677c 37 my $self = shift;
38 my ($slot_access) = @_;
a7821be5 39
53a4677c 40 return 'my $old = ' . $slot_access . '->[0];';
e32b7489 41}
42
53a4677c 43sub _optimized_set_new_value {
44 my $self = shift;
45 my ($inv, $new, $slot_access) = @_;
e32b7489 46
53a4677c 47 return 'shift @{ (' . $slot_access . ') }';
a7821be5 48}
49
50sub _return_value {
53a4677c 51 my $self = shift;
52 my ($slot_access) = @_;
a7821be5 53
53a4677c 54 return '$old';
a7821be5 55}
56
8b9641b8 57no Moose::Role;
58
a7821be5 591;