X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FMethod%2FGenerate%2FAccessor.pm;h=13e6ccc0a5ed01a0c5931da3e493db527192d7a2;hb=edb9977c5fa2b2a737ab19ce83f934253c74611f;hp=65173ef5be2b477b0ee22e2e07b9b36772c62753;hpb=82a5b14633cd191acbfa31c8ace0569baa85183a;p=gitmo%2FRole-Tiny.git diff --git a/lib/Method/Generate/Accessor.pm b/lib/Method/Generate/Accessor.pm index 65173ef..13e6ccc 100644 --- a/lib/Method/Generate/Accessor.pm +++ b/lib/Method/Generate/Accessor.pm @@ -7,9 +7,11 @@ use Sub::Quote; use B 'perlstring'; BEGIN { our $CAN_HAZ_XS = + !$ENV{MOO_XS_DISABLE} + && _maybe_load_module('Class::XSAccessor') && - (Class::XSAccessor->VERSION > 1.06) + (eval { Class::XSAccessor->VERSION('1.07') }) ; } @@ -38,7 +40,8 @@ sub generate_method { $self->{captures} = {}; $methods{$reader} = quote_sub "${into}::${reader}" - => $self->_generate_get($name, $spec) + => ' die "'.$reader.' is a read-only accessor" if @_ > 1;'."\n" + .$self->_generate_get($name, $spec) => delete $self->{captures} ; } @@ -305,6 +308,12 @@ sub _generate_populate_set { .$get_default ."\n${get_indent})" : $get_default; + if ( $spec->{coerce} ) { + $get_value = $self->_generate_coerce( + $name, $me, $get_value, + $spec->{coerce} + ) + } ($spec->{isa} ? " {\n my \$value = ".$get_value.";\n " .$self->_generate_isa_check( @@ -363,7 +372,7 @@ sub _generate_simple_set { my $simple = "${me}->{${name_str}} = ${value}"; if ($spec->{weak_ref}) { - require Scalar::Util; + { local $@; require Scalar::Util; } # Perl < 5.8.3 can't weaken refs to readonly vars # (e.g. string constants). This *can* be solved by: @@ -378,7 +387,7 @@ sub _generate_simple_set { eval { Scalar::Util::weaken($simple); 1 } or do { if( \$@ =~ /Modification of a read-only value attempted/) { - require Carp; + { local $@; require Carp; } Carp::croak( sprintf ( 'Reference to readonly value in "%s" can not be weakened on Perl < 5.8.3', $name_str,