[前][次][番号順一覧][スレッド一覧]

ruby-changes:3377

From: ko1@a...
Date: 3 Jan 2008 20:27:03 +0900
Subject: [ruby-changes:3377] ko1 - Ruby:r14870 (trunk): * eval_jump.c (rb_f_catch): Resotre cfp if catched thrown object.

ko1	2008-01-03 20:26:48 +0900 (Thu, 03 Jan 2008)

  New Revision: 14870

  Modified files:
    trunk/ChangeLog
    trunk/eval_jump.c

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


  http://svn.ruby-lang.org/cgi-bin/viewvc.cgi/trunk/ChangeLog?r1=14870&r2=14869&diff_format=u
  http://svn.ruby-lang.org/cgi-bin/viewvc.cgi/trunk/eval_jump.c?r1=14870&r2=14869&diff_format=u

Index: ChangeLog
===================================================================
--- ChangeLog	(revision 14869)
+++ ChangeLog	(revision 14870)
@@ -1,3 +1,7 @@
+Thu Jan  3 20:24:48 2008  Koichi Sasada  <ko1@a...>
+
+	* eval_jump.c (rb_f_catch): Resotre cfp if catched thrown object.
+
 Thu Jan  3 19:45:57 2008  Koichi Sasada  <ko1@a...>
 
 	* bootstraptest/test_eval.rb, test_knownbug.rb: move a fixed test.
Index: eval_jump.c
===================================================================
--- eval_jump.c	(revision 14869)
+++ eval_jump.c	(revision 14870)
@@ -105,6 +105,7 @@
     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 @@
 	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;

--
ML: ruby-changes@q...
Info: http://www.atdot.net/~ko1/quickml

[前][次][番号順一覧][スレッド一覧]