X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FClass%2FMOP%2FMethod%2FAccessor.pm;h=ecc84ad526cc1506807694659f954e34b90be70a;hb=074ec38f9e2ed902a2e82a0fb80fd502f824b17d;hp=427d27b130c110df54a572ab57797634a50f7374;hpb=c6e75cb33bd9fd33d777325cdc3de6d5de614263;p=gitmo%2FClass-MOP.git diff --git a/lib/Class/MOP/Method/Accessor.pm b/lib/Class/MOP/Method/Accessor.pm index 427d27b..ecc84ad 100644 --- a/lib/Class/MOP/Method/Accessor.pm +++ b/lib/Class/MOP/Method/Accessor.pm @@ -7,7 +7,7 @@ use warnings; use Carp 'confess'; use Scalar::Util 'blessed', 'weaken'; -our $VERSION = '0.81'; +our $VERSION = '0.89'; $VERSION = eval $VERSION; our $AUTHORITY = 'cpan:STEVAN'; @@ -73,8 +73,7 @@ sub _initialize_body { ($self->is_inline ? 'inline' : ()) ); - eval { $self->{'body'} = $self->$method_name() }; - die $@ if $@; + $self->{'body'} = $self->$method_name(); } ## generators @@ -160,7 +159,7 @@ sub _generate_accessor_method_inline { my $attr_name = $attr->name; my $meta_instance = $attr->associated_class->instance_metaclass; - my $code = $self->_eval_closure( + my ( $code, $e ) = $self->_eval_closure( {}, 'sub {' . $meta_instance->inline_set_slot_value('$_[0]', $attr_name, '$_[1]') @@ -168,7 +167,7 @@ sub _generate_accessor_method_inline { . $meta_instance->inline_get_slot_value('$_[0]', $attr_name) . '}' ); - confess "Could not generate inline accessor because : $@" if $@; + confess "Could not generate inline accessor because : $e" if $e; return $code; } @@ -185,14 +184,14 @@ sub _generate_reader_method_inline { my $attr_name = $attr->name; my $meta_instance = $attr->associated_class->instance_metaclass; - my $code = $self->_eval_closure( + my ( $code, $e ) = $self->_eval_closure( {}, 'sub {' . 'confess "Cannot assign a value to a read-only accessor" if @_ > 1;' . $meta_instance->inline_get_slot_value('$_[0]', $attr_name) . '}' ); - confess "Could not generate inline reader because : $@" if $@; + confess "Could not generate inline reader because : $e" if $e; return $code; } @@ -209,13 +208,13 @@ sub _generate_writer_method_inline { my $attr_name = $attr->name; my $meta_instance = $attr->associated_class->instance_metaclass; - my $code = $self->_eval_closure( + my ( $code, $e ) = $self->_eval_closure( {}, 'sub {' . $meta_instance->inline_set_slot_value('$_[0]', $attr_name, '$_[1]') . '}' ); - confess "Could not generate inline writer because : $@" if $@; + confess "Could not generate inline writer because : $e" if $e; return $code; } @@ -232,13 +231,13 @@ sub _generate_predicate_method_inline { my $attr_name = $attr->name; my $meta_instance = $attr->associated_class->instance_metaclass; - my $code = $self->_eval_closure( + my ( $code, $e ) = $self->_eval_closure( {}, 'sub {' . $meta_instance->inline_is_slot_initialized('$_[0]', $attr_name) . '}' ); - confess "Could not generate inline predicate because : $@" if $@; + confess "Could not generate inline predicate because : $e" if $e; return $code; } @@ -255,13 +254,13 @@ sub _generate_clearer_method_inline { my $attr_name = $attr->name; my $meta_instance = $attr->associated_class->instance_metaclass; - my $code = $self->_eval_closure( + my ( $code, $e ) = $self->_eval_closure( {}, 'sub {' . $meta_instance->inline_deinitialize_slot('$_[0]', $attr_name) . '}' ); - confess "Could not generate inline clearer because : $@" if $@; + confess "Could not generate inline clearer because : $e" if $e; return $code; }