This is an automated email from the git hooks/post-receive script. js pushed a commit to tag 0.043_01 in repository libtype-tiny-perl.
commit 35e7b9b44c83b462a47414fdb3de5dccac70261f Author: Toby Inkster <m...@tobyinkster.co.uk> Date: Sat Apr 5 11:57:36 2014 +0100 to_TypeTiny($coderef) wraps calls to the coderef in an eval and another layer of sub; this prevented Type::Tiny from spotting Sub::Quote quoted subs. to_TypeTiny can now handle quoted subs explicitly, inlining the eval. --- lib/Types/TypeTiny.pm | 17 +++++++++++++++++ t/30-integration/Sub-Quote/basic.t | 12 +++++++++++- 2 files changed, 28 insertions(+), 1 deletion(-) diff --git a/lib/Types/TypeTiny.pm b/lib/Types/TypeTiny.pm index bcc4afd..3d5667a 100644 --- a/lib/Types/TypeTiny.pm +++ b/lib/Types/TypeTiny.pm @@ -275,6 +275,7 @@ sub _TypeTinyFromGeneric return $new; } +my $QFS; sub _TypeTinyFromCodeRef { my $t = $_[0]; @@ -289,6 +290,22 @@ sub _TypeTinyFromCodeRef return sprintf('%s did not pass type constraint', Type::Tiny::_dd($_)); }, ); + + if ($QFS ||= "Sub::Quote"->can("quoted_from_sub")) + { + my (undef, $perlstring, $captures) = @{ $QFS->($t) || [] }; + $perlstring = "!!eval{ $perlstring }"; + $opts{inlined} = sub + { + my $var = $_[1]; + Sub::Quote::inlinify( + $perlstring, + $var, + $var eq q($_) ? '' : "local \$_ = $var;", + 1, + ); + } if $perlstring && !$captures; + } require Type::Tiny; my $new = "Type::Tiny"->new(%opts); diff --git a/t/30-integration/Sub-Quote/basic.t b/t/30-integration/Sub-Quote/basic.t index bfb8245..0040d8f 100644 --- a/t/30-integration/Sub-Quote/basic.t +++ b/t/30-integration/Sub-Quote/basic.t @@ -33,7 +33,7 @@ use Test::TypeTiny; use Sub::Quote; use Type::Tiny; -use Types::Standard qw(Int); +use Types::Standard qw( ArrayRef Int ); my $Type1 = "Type::Tiny"->new( name => "Type1", @@ -105,4 +105,14 @@ should_pass(43, $Type6); should_fail(44.4, $Type6); ok(!$Type6->can_be_inlined, 'constraint built using quote_sub and non-inlinable parent cannot be inlined'); +my $Type7 = ArrayRef([Int]) & quote_sub q{ @$_ > 1 and @$_ < 4 }; + +should_pass([1,2,3], $Type7); +should_fail([1,2.1,3], $Type7); +should_fail([1], $Type7); +should_fail([1,2,3,4], $Type7); +ok($Type7->can_be_inlined, 'constraint built as an intersection of an inlinable type constraint and a quoted sub can be inlined'); + +note($Type7->inline_check('$VAR')); + done_testing; -- Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-perl/packages/libtype-tiny-perl.git _______________________________________________ Pkg-perl-cvs-commits mailing list Pkg-perl-cvs-commits@lists.alioth.debian.org http://lists.alioth.debian.org/cgi-bin/mailman/listinfo/pkg-perl-cvs-commits