X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FMoose%2FMeta%2FMethod%2FAccessor%2FNative%2FHash%2Faccessor.pm;h=1b8eafd6a1ac1a9e126179080d21bb0274fcf5be;hb=0f4afc62a4744c96758cf21d234b654f5c273828;hp=7bab28d59846b1f045a117f430cd245e30a9f308;hpb=10bd99ecf3f1706d4452fa57e3f08a63b9f92a11;p=gitmo%2FMoose.git diff --git a/lib/Moose/Meta/Method/Accessor/Native/Hash/accessor.pm b/lib/Moose/Meta/Method/Accessor/Native/Hash/accessor.pm index 7bab28d..1b8eafd 100644 --- a/lib/Moose/Meta/Method/Accessor/Native/Hash/accessor.pm +++ b/lib/Moose/Meta/Method/Accessor/Native/Hash/accessor.pm @@ -3,89 +3,58 @@ package Moose::Meta::Method::Accessor::Native::Hash::accessor; use strict; use warnings; -our $VERSION = '1.14'; -$VERSION = eval $VERSION; -our $AUTHORITY = 'cpan:STEVAN'; - -use base qw( - Moose::Meta::Method::Accessor::Native::Hash::set - Moose::Meta::Method::Accessor::Native::Hash::get -); +use Moose::Role; + +with 'Moose::Meta::Method::Accessor::Native::Hash::set' => { + -excludes => [ + qw( + _generate_method + _minimum_arguments + _maximum_arguments + _inline_check_arguments + _return_value + ) + ] + }, + 'Moose::Meta::Method::Accessor::Native::Hash::get' => { + -excludes => [ + qw( + _generate_method + _minimum_arguments + _maximum_arguments + _inline_check_argument_count + _inline_process_arguments + ) + ] + }; 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_lazy($inv); - - my $slot_access = $self->_inline_get($inv); - - # get - $code .= "\n" . 'if ( @_ == 1 ) {'; - - $code .= "\n" . $self->_inline_check_var_is_valid_index('$_[0]'); - - $code - .= "\n" - . 'return ' - . $self - ->Moose::Meta::Method::Accessor::Native::Hash::get::_return_value( - $slot_access) - . ';'; - - # set - $code .= "\n" . '} else {'; - - $code .= "\n" . $self->_inline_check_argument_count; - - $code - .= "\n" - . $self - ->Moose::Meta::Method::Accessor::Native::Hash::set::_inline_check_arguments; - - my $potential_value = $self->_potential_value($slot_access); - - $code .= "\n" - . $self->_inline_tc_code( - $potential_value, - $slot_access, - ); - - $code .= "\n" . $self->_inline_get_old_value_for_trigger($inv); - $code .= "\n" . $self->_inline_capture_return_value($slot_access); - - $code - .= "\n" . $self->_inline_store( $inv, '[' . $potential_value . ']' ); - - $code .= "\n" . $self->_inline_post_body(@_); - $code .= "\n" . $self->_inline_trigger( $inv, $slot_access, '@old' ); - - $code .= "\n}"; - $code .= "\n}"; - - return $code; + my $inv = '$self'; + my $slot_access = $self->_get_value($inv); + + return ( + 'sub {', + 'my ' . $inv . ' = shift;', + $self->_inline_curried_arguments, + $self->_inline_check_lazy($inv, '$type_constraint', '$type_constraint_obj'), + # get + 'if (@_ == 1) {', + $self->_inline_check_var_is_valid_key('$_[0]'), + $self->Moose::Meta::Method::Accessor::Native::Hash::get::_inline_return_value($slot_access), + '}', + # set + 'else {', + $self->_inline_writer_core($inv, $slot_access), + '}', + '}', + ); } -# If we get one argument we won't check the argument count -sub _minimum_arguments {2} -sub _maximum_arguments {2} - -sub _adds_members {1} - -sub _potential_value { - my ( $self, $slot_access ) = @_; - - return "%{ $slot_access, @_ }"; -} +sub _minimum_arguments { 1 } +sub _maximum_arguments { 2 } -sub _new_members {'$_[1]'} +no Moose::Role; 1;