my ($self, $name, $type, $values, $sub) = @_;
if (my $quoted = quoted_from_sub($sub)) {
my $code = $quoted->[1];
- my $at_ = '@_ = ('.$values.');';
if (my $captures = $quoted->[2]) {
my $cap_name = qq{\$${type}_captures_for_${name}};
$self->{captures}->{$cap_name} = \$captures;
Sub::Quote::inlinify(
- $code, $values, Sub::Quote::capture_unroll($cap_name, $captures, 6)
+ $code, $values, Sub::Quote::capture_unroll($cap_name, $captures, 6), 1
);
} else {
- Sub::Quote::inlinify($code, $values);
+ Sub::Quote::inlinify($code, $values, undef, 1);
}
} else {
my $cap_name = qq{\$${type}_for_${name}};
run_for 'Baz';
+my $lt3;
+
{
package LazyFoo;
+ use Sub::Quote;
use Moo;
has less_than_three => (
is => 'lazy',
- isa => sub { die "$_[0] is not less than three" unless $_[0] < 3 }
+ isa => quote_sub(q{ die "$_[0] is not less than three" unless $_[0] < 3 })
);
- sub _build_less_than_three { 4 }
+ sub _build_less_than_three { $lt3 }
}
+$lt3 = 4;
+
like(
exception { LazyFoo->new->less_than_three },
qr/isa check for "less_than_three" failed: 4 is not less than three/,
"exception thrown on bad builder return value (LazyFoo)"
);
+$lt3 = 2;
+
+is(LazyFoo->new->less_than_three, 2, 'Correct builder value returned ok');
+
done_testing;