]> git.vpit.fr Git - perl/modules/Scope-Context.git/commitdiff
Implement ->yield
authorVincent Pit <vince@profvince.com>
Mon, 5 Nov 2012 14:08:31 +0000 (12:08 -0200)
committerVincent Pit <vince@profvince.com>
Mon, 5 Nov 2012 14:08:31 +0000 (12:08 -0200)
Scope::Upper 0.21 is required.

Makefile.PL
lib/Scope/Context.pm
t/02-can.t
t/12-actions.t
t/13-valid.t

index aff57ea3a0be04dab0f06cb330c6a0a43888f689..13a0c2bb0d5e3fed0e3e8890cedc061364dd0bd7 100644 (file)
@@ -12,7 +12,7 @@ my $dist = 'Scope-Context';
 $file = "lib/$file.pm";
 
 my %PREREQ_PM = (
- 'Scope::Upper' => '0.18',
+ 'Scope::Upper' => '0.21',
  'Scalar::Util' => 0,
 );
 
index f455bf12c7f4794f8f0a0c356cc6e72b5e69e95f..85fd57365e7eeacf839251b86a28d9f7075673ca 100644 (file)
@@ -8,7 +8,7 @@ use warnings;
 use Carp         ();
 use Scalar::Util ();
 
-use Scope::Upper 0.18 ();
+use Scope::Upper 0.21 ();
 
 =head1 NAME
 
@@ -425,6 +425,24 @@ sub unwind {
  Scope::Upper::unwind(@_ => $self->cxt);
 }
 
+=head2 C<yield>
+
+    $cxt->yield(@values);
+
+Immediately returns the scalars listed in C<@values> from the topic context, whatever it may be (except a substitution eval context).
+
+See L<Scope::Upper/yield> for details.
+
+=cut
+
+sub yield {
+ my $self = shift;
+
+ $self->assert_valid;
+
+ Scope::Upper::yield(@_ => $self->cxt);
+}
+
 =head2 C<uplevel>
 
     my @ret = $cxt->uplevel($code, @args);
@@ -448,7 +466,7 @@ sub uplevel {
 
 L<Carp> (core module since perl 5), L<Scalar::Util> (since 5.7.3).
 
-L<Scope::Upper> 0.18.
+L<Scope::Upper> 0.21.
 
 =head1 SEE ALSO
 
index ecae9f4aaf1cfa860b9f4bfd2089293bef8cd7a5..5af4e46100571c6a197dcaf9c969112c3a90439b 100644 (file)
@@ -11,7 +11,9 @@ my @methods = qw<
  uid is_valid assert_valid
  want
  up sub eval
- reap localize localize_elem localize_delete unwind uplevel
+ reap localize localize_elem localize_delete
+ unwind yield
+ uplevel
 >;
 
 plan tests => scalar(@methods);
index a8c4b145b9513e2b1731c8fef546363caedefd13..7aaec9406cf62af725fb900acf698acc7c8586d4 100644 (file)
@@ -3,7 +3,7 @@
 use strict;
 use warnings;
 
-use Test::More tests => 4 * 3 + 2;
+use Test::More tests => 4 * 3 + 3;
 
 use Scope::Context;
 
@@ -86,6 +86,19 @@ use Scope::Context;
  is_deeply \@res, [ 1, 2, 3 ], 'unwind: done';
 }
 
+{
+ my @res = do {
+  sub {
+   my $up = Scope::Context->up;
+   $up->yield(4, 5, 6);
+   fail 'yield: not reached 1';
+  }->();
+  fail 'yield: not reached 2';
+  return qw<x y z t>;
+ };
+ is_deeply \@res, [ 4, 5, 6 ], 'yield: done';
+}
+
 {
  sub outer {
   inner(@_);
index 1a566f08371ebbec0976ac8d81d81c90ee0fd259..fa7d30ea04e96b0996ce7c6b1ab7a4989d31fb17 100644 (file)
@@ -3,7 +3,7 @@
 use strict;
 use warnings;
 
-use Test::More tests => 4 + 9;
+use Test::More tests => 4 + 10;
 
 use Scope::Context;
 
@@ -23,7 +23,9 @@ my $fail_rx = qr/^Context has expired at \Q$0\E line [0-9]+/;
 
  my @methods = qw<
   up sub eval
-  reap localize localize_elem localize_delete unwind uplevel
+  reap localize localize_elem localize_delete
+  unwind yield
+  uplevel
  >;
  for my $action (@methods) {
   local $@;