From: gfx Date: Wed, 30 Sep 2009 12:45:37 +0000 (+0900) Subject: Fix an issue tested in t/040_type_constraints/025_type_coersion_on_lazy_attributes.t X-Git-Tag: 0.37_01~15 X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=commitdiff_plain;h=14d7595ac866dd1bffc2d12a6b4bdaf673393ce6;p=gitmo%2FMouse.git Fix an issue tested in t/040_type_constraints/025_type_coersion_on_lazy_attributes.t --- diff --git a/lib/Mouse/Meta/Method/Accessor.pm b/lib/Mouse/Meta/Method/Accessor.pm index 631fa32..eb9152d 100755 --- a/lib/Mouse/Meta/Method/Accessor.pm +++ b/lib/Mouse/Meta/Method/Accessor.pm @@ -40,9 +40,9 @@ sub _install_accessor{ my $value = '$_[1]'; - if ($constraint) { + if (defined $constraint) { if(!$compiled_type_constraint){ - Carp::confess("[BUG]Missing compiled type constraint for $constraint"); + Carp::confess("[BUG] Missing compiled type constraint for $constraint"); } if ($should_coerce) { $accessor .= @@ -51,21 +51,12 @@ sub _install_accessor{ 'my $val = $constraint->coerce('.$value.');'; $value = '$val'; } - if ($compiled_type_constraint) { - $accessor .= - "\n". - '#line ' . __LINE__ . ' "' . __FILE__ . "\"\n" . - 'unless ($compiled_type_constraint->('.$value.')) { - $attribute->verify_type_constraint_error($name, '.$value.', $attribute->{type_constraint}); - }' . "\n"; - } else { - $accessor .= - "\n". - '#line ' . __LINE__ . ' "' . __FILE__ . "\"\n" . - 'unless ($constraint->check('.$value.')) { - $attribute->verify_type_constraint_error($name, '.$value.', $attribute->{type_constraint}); - }' . "\n"; - } + $accessor .= + "\n". + '#line ' . __LINE__ . ' "' . __FILE__ . "\"\n" . + 'unless ($compiled_type_constraint->('.$value.')) { + $attribute->verify_type_constraint_error($name, '.$value.', $attribute->{type_constraint}); + }' . "\n"; } # if there's nothing left to do for the attribute we can return during @@ -94,11 +85,16 @@ sub _install_accessor{ if ($attribute->is_lazy) { $accessor .= $self.'->{'.$key.'} = '; - $accessor .= $attribute->has_builder - ? $self.'->$builder' - : ref($default) eq 'CODE' - ? '$default->('.$self.')' - : '$default'; + if($should_coerce && defined($constraint)){ + $accessor .= '$attribute->_coerce_and_verify('; + } + $accessor .= $attribute->has_builder ? $self.'->$builder' + : ref($default) eq 'CODE' ? '$default->('.$self.')' + : '$default'; + + if($should_coerce && defined $constraint){ + $accessor .= ')'; + } $accessor .= ' if !exists '.$self.'->{'.$key.'};' . "\n"; }