From 5a1fa79086c4f1c6e11a78d5d0ff8d58cc3e238a Mon Sep 17 00:00:00 2001 From: yugui Date: Sun, 25 Oct 2009 14:46:36 +0000 Subject: [PATCH] merges r24530 from trunk into ruby_1_9_1. -- * vm.c (vm_exec): returning from lambda runs ensure section. [Bug #1729] git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_1_9_1@25480 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- ChangeLog | 5 +++++ version.h | 2 +- vm.c | 21 +++++++++++++++++---- 3 files changed, 23 insertions(+), 5 deletions(-) diff --git a/ChangeLog b/ChangeLog index d691f1b807..3d38c6cc33 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +Thu Aug 13 21:01:03 2009 wanabe + + * vm.c (vm_exec): returning from lambda runs ensure section. + [Bug #1729] + Wed Aug 12 15:52:04 2009 NARUSE, Yui * class.c (rb_define_module_id_under): fix the name. diff --git a/version.h b/version.h index 84ea39245e..6949bb5420 100644 --- a/version.h +++ b/version.h @@ -1,5 +1,5 @@ #define RUBY_VERSION "1.9.1" -#define RUBY_PATCHLEVEL 286 +#define RUBY_PATCHLEVEL 287 #define RUBY_VERSION_MAJOR 1 #define RUBY_VERSION_MINOR 9 #define RUBY_VERSION_TEENY 1 diff --git a/vm.c b/vm.c index c39048b497..3efab55f85 100644 --- a/vm.c +++ b/vm.c @@ -1114,10 +1114,23 @@ vm_exec(rb_thread_t *th) SET_THROWOBJ_STATE(err, state = TAG_BREAK); } else { - result = GET_THROWOBJ_VAL(err); - th->errinfo = Qnil; - th->cfp += 2; - goto finish_vme; + for (i = 0; i < cfp->iseq->catch_table_size; i++) { + entry = &cfp->iseq->catch_table[i]; + if (entry->start < epc && entry->end >= epc) { + if (entry->type == CATCH_TYPE_ENSURE) { + catch_iseqval = entry->iseq; + cont_pc = entry->cont; + cont_sp = entry->sp; + break; + } + } + } + if (!catch_iseqval) { + result = GET_THROWOBJ_VAL(err); + th->errinfo = Qnil; + th->cfp += 2; + goto finish_vme; + } } /* through */ }