[#38563] [Bug #1556] irb does not save history from 1.8.7-p83 and later — Nobuhiro IMAI <redmine@...>

Bug #1556: irb does not save history from 1.8.7-p83 and later

11 messages 2009/06/02

[#38571] [Bug #1582] IO.new Raises Other Errors between 1.8 and 1.9 — "ujihisa ." <redmine@...>

Bug #1582: IO.new Raises Other Errors between 1.8 and 1.9

15 messages 2009/06/05

[#38607] [Feature: trunk] GC.stat — SASADA Koichi <ko1@...>

 ささだです.

21 messages 2009/06/14

[#38608] Fixnum#fdiv — Tadayoshi Funaba <tadf@...>

Bignum#fdiv には大きな数である場合の配慮があるようですが、Fixnum ではな

23 messages 2009/06/14
[#38636] Re: Fixnum#fdiv — Tadayoshi Funaba <tadf@...> 2009/06/15

fdiv では2つの異る解釈が混在しているように見えます。

[#38638] Re: Fixnum#fdiv — Yukihiro Matsumoto <matz@...> 2009/06/15

まつもと ゆきひろです

[#38639] Re: Fixnum#fdiv — Tadayoshi Funaba <tadf@...> 2009/06/15

> えーと、設計者は「fdivは結果がfloatになるdiv」くらいしか考え

[#38640] Re: Fixnum#fdiv — Yukihiro Matsumoto <matz@...> 2009/06/15

まつもと ゆきひろです

[#38641] Re: Fixnum#fdiv — Tadayoshi Funaba <tadf@...> 2009/06/15

> ふむ。「中途半端」というのはfixnumとbignumで食い違うと言う意

[#38657] Re: Fixnum#fdiv — Tadayoshi Funaba <tadf@...> 2009/06/16

> > ふむ。「中途半端」というのはfixnumとbignumで食い違うと言う意

[#38659] Re: Fixnum#fdiv — Yukihiro Matsumoto <matz@...> 2009/06/16

まつもと ゆきひろです

[#38660] Re: Fixnum#fdiv — Tadayoshi Funaba <tadf@...> 2009/06/16

> 私が気にしているのは「挙動の理解しやすさ」ですね。

[#38701] [Bug #1676] only last "return" is traced by set_trace_func — _ wanabe <redmine@...>

Bug #1676: only last "return" is traced by set_trace_func

10 messages 2009/06/22

[ruby-dev:38710] 例外発生時のRUBY_EVENT_C_RETURNのフック

From: wanabe <s.wanabe@...>
Date: 2009-06-24 00:48:09 UTC
List: ruby-dev #38710
ワナベと申します。
メソッド中で例外が発生したときも RUBY_EVENT_C_RETURN が
フックされたほうがありがたいのですがどうでしょうか。
パッチを添付します。

Index: vm_eval.c
===================================================================
--- vm_eval.c	(revision 23834)
+++ vm_eval.c	(working copy)
@@ -59,12 +59,16 @@
 	break;
       }
       case NODE_CFUNC: {
-	EXEC_EVENT_HOOK(th, RUBY_EVENT_C_CALL, recv, id, klass);
-	{
+	int state;
+
+	TH_PUSH_TAG(th);
+	state = TH_EXEC_TAG();
+	if (state == 0) {
 	    rb_control_frame_t *reg_cfp = th->cfp;
 	    rb_control_frame_t *cfp =
 		vm_push_frame(th, 0, VM_FRAME_MAGIC_CFUNC,
 			      recv, (VALUE)blockptr, 0, reg_cfp->sp, 0, 1);
+	    EXEC_EVENT_HOOK(th, RUBY_EVENT_C_CALL, recv, id, klass);

 	    cfp->method_id = oid;
 	    cfp->method_class = klass;
@@ -79,7 +83,9 @@
 	    }
 	    vm_pop_frame(th);
 	}
+	TH_POP_TAG();
 	EXEC_EVENT_HOOK(th, RUBY_EVENT_C_RETURN, recv, id, klass);
+	if (state) TH_JUMP_TAG(th, state);
 	break;
       }
       case NODE_ATTRSET:{
Index: vm_insnhelper.c
===================================================================
--- vm_insnhelper.c	(revision 23834)
+++ vm_insnhelper.c	(working copy)
@@ -360,13 +360,16 @@
 	      int num, ID id, ID oid, VALUE recv, VALUE klass,
 	      VALUE flag, const NODE *mn, const rb_block_t *blockptr)
 {
-    VALUE val;
+    VALUE val = 0;
+    int state;

-    EXEC_EVENT_HOOK(th, RUBY_EVENT_C_CALL, recv, id, klass);
-    {
+    TH_PUSH_TAG(th);
+    state = TH_EXEC_TAG();
+    if (state == 0) {
 	rb_control_frame_t *cfp =
 	    vm_push_frame(th, 0, VM_FRAME_MAGIC_CFUNC,
 			  recv, (VALUE) blockptr, 0, reg_cfp->sp, 0, 1);
+	EXEC_EVENT_HOOK(th, RUBY_EVENT_C_CALL, recv, id, klass);

 	cfp->method_id = oid;
 	cfp->method_class = klass;
@@ -381,7 +384,9 @@

 	vm_pop_frame(th);
     }
+    TH_POP_TAG();
     EXEC_EVENT_HOOK(th, RUBY_EVENT_C_RETURN, recv, id, klass);
+    if (state) TH_JUMP_TAG(th, state);

     return val;
 }

-- 
ワナベ

In This Thread

Prev Next