diff options
author | ko1 <ko1@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2008-01-03 11:26:48 +0000 |
---|---|---|
committer | ko1 <ko1@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2008-01-03 11:26:48 +0000 |
commit | a0350e5964c1edba90bf6cf4bd7e2d5b64eaa386 (patch) | |
tree | 407db6355cceb12c3323b1c6eb152d08c112a994 | |
parent | 37d1059f49bb817234dcab8ddba69f7ebe5ba2cb (diff) |
* eval_jump.c (rb_f_catch): Resotre cfp if catched thrown object.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@14870 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
-rw-r--r-- | ChangeLog | 4 | ||||
-rw-r--r-- | eval_jump.c | 2 |
2 files changed, 6 insertions, 0 deletions
@@ -1,3 +1,7 @@ +Thu Jan 3 20:24:48 2008 Koichi Sasada <ko1@atdot.net> + + * eval_jump.c (rb_f_catch): Resotre cfp if catched thrown object. + Thu Jan 3 19:45:57 2008 Koichi Sasada <ko1@atdot.net> * bootstraptest/test_eval.rb, test_knownbug.rb: move a fixed test. diff --git a/eval_jump.c b/eval_jump.c index 948ac635be..dbc3794a59 100644 --- a/eval_jump.c +++ b/eval_jump.c @@ -105,6 +105,7 @@ rb_f_catch(int argc, VALUE *argv) int state; VALUE val = Qnil; /* OK */ rb_thread_t *th = GET_THREAD(); + rb_control_frame_t *saved_cfp = th->cfp; rb_scan_args(argc, argv, "01", &tag); if (argc == 0) { @@ -118,6 +119,7 @@ rb_f_catch(int argc, VALUE *argv) val = rb_yield_0(1, &tag); } else if (state == TAG_THROW && RNODE(th->errinfo)->u1.value == tag) { + th->cfp = saved_cfp; val = th->tag->retval; th->errinfo = Qnil; state = 0; |