Skip to content

Commit

Permalink
* eval_jump.c (rb_f_catch): Resotre cfp if catched thrown object.
Browse files Browse the repository at this point in the history
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@14870 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
  • Loading branch information
ko1 committed Jan 3, 2008
1 parent 37d1059 commit a0350e5
Show file tree
Hide file tree
Showing 2 changed files with 6 additions and 0 deletions.
4 changes: 4 additions & 0 deletions ChangeLog
Original file line number Diff line number Diff line change
@@ -1,3 +1,7 @@
Thu Jan 3 20:24:48 2008 Koichi Sasada <[email protected]>

* eval_jump.c (rb_f_catch): Resotre cfp if catched thrown object.

Thu Jan 3 19:45:57 2008 Koichi Sasada <[email protected]>

* bootstraptest/test_eval.rb, test_knownbug.rb: move a fixed test.
Expand Down
2 changes: 2 additions & 0 deletions eval_jump.c
Original file line number Diff line number Diff line change
Expand Up @@ -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) {
Expand All @@ -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;
Expand Down

0 comments on commit a0350e5

Please sign in to comment.