From 02e3cfccad1cf4925334e1de84d293ac5bf03f77 Mon Sep 17 00:00:00 2001 From: shyouhei Date: Tue, 22 May 2007 17:16:39 +0000 Subject: merge -c 12187 git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_1_8_6@12319 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- ChangeLog | 8 ++++++++ eval.c | 7 +++++-- version.h | 2 +- 3 files changed, 14 insertions(+), 3 deletions(-) diff --git a/ChangeLog b/ChangeLog index 99cd396db4..6caebb42ad 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,11 @@ +Wed May 23 02:09:32 2007 Yukihiro Matsumoto + + * eval.c (rb_yield_0): should not clear state on TAG_NEXT when + it's invoked from within lambda body. [ruby-talk:248136] + + * eval.c (proc_invoke): handle TAG_NEXT which would be caused by + next in the lambda body as well. + Wed May 23 01:55:49 2007 NAKAMURA Usaku * win32/win32.c (rb_w32_fclose, rb_w32_close): need to save errno diff --git a/eval.c b/eval.c index 36af45b6f4..4815717bee 100644 --- a/eval.c +++ b/eval.c @@ -5005,8 +5005,10 @@ rb_yield_0(val, self, klass, flags, avalue) CHECK_INTS; goto redo; case TAG_NEXT: - state = 0; - result = prot_tag->retval; + if (!lambda) { + state = 0; + result = prot_tag->retval; + } break; case TAG_BREAK: if (TAG_DST()) { @@ -8605,6 +8607,7 @@ proc_invoke(proc, args, self, klass) proc_jump_error(TAG_RETRY, Qnil); /* xxx */ JUMP_TAG(state); break; + case TAG_NEXT: case TAG_BREAK: if (!pcall && result != Qundef) { proc_jump_error(state, result); diff --git a/version.h b/version.h index 9122364e5d..454bfb52a2 100644 --- a/version.h +++ b/version.h @@ -2,7 +2,7 @@ #define RUBY_RELEASE_DATE "2007-05-23" #define RUBY_VERSION_CODE 186 #define RUBY_RELEASE_CODE 20070523 -#define RUBY_PATCHLEVEL 12 +#define RUBY_PATCHLEVEL 13 #define RUBY_VERSION_MAJOR 1 #define RUBY_VERSION_MINOR 8 -- cgit v1.2.3