[#26664] refactoring tcltklib.c (deleted ip check) — "H.Yamamoto" <ocean@...2.ccsnet.ne.jp>

山本です。

22 messages 2005/08/01
[#26665] Re: refactoring tcltklib.c (deleted ip check) — "H.Yamamoto" <ocean@...2.ccsnet.ne.jp> 2005/08/01

山本です。

[#26668] Re: refactoring tcltklib.c (deleted ip check) — Hidetoshi NAGAI <nagai@...> 2005/08/01

永井@知能.九工大です.

[#26678] Re: refactoring tcltklib.c (deleted ip check) — "H.Yamamoto" <ocean@...2.ccsnet.ne.jp> 2005/08/01

山本です。

[#26684] Re: refactoring tcltklib.c (deleted ip check) — Hidetoshi NAGAI <nagai@...> 2005/08/01

永井@知能.九工大です.

[#26686] Re: refactoring tcltklib.c (deleted ip check) — "H.Yamamoto" <ocean@...2.ccsnet.ne.jp> 2005/08/01

山本です。

[#26817] test/socket/test_tcp.rb freeze on windows — "H.Yamamoto" <ocean@...2.ccsnet.ne.jp>

山本です。

12 messages 2005/08/18

[#26829] cannot check EOF of pipe on windows — "U.Nakamura" <usa@...>

こんにちは、なかむら(う)です。

19 messages 2005/08/19
[#26830] Re: cannot check EOF of pipe on windows — "H.Yamamoto" <ocean@...2.ccsnet.ne.jp> 2005/08/19

山本です。

[#26831] Re: cannot check EOF of pipe on windows — "U.Nakamura" <usa@...> 2005/08/19

こんにちは、なかむら(う)です。

[#26832] Re: cannot check EOF of pipe on windows — "H.Yamamoto" <ocean@...2.ccsnet.ne.jp> 2005/08/19

山本です。

[#26836] Re: cannot check EOF of pipe on windows — nobuyoshi nakada <nobuyoshi.nakada@...> 2005/08/19

なかだです。

[#26872] irb -I/ruby -Iと$LOAD_PATH — akira yamada / やまだあきら <akira@...>

Debianユーザからruby -Iとirb -Iで

17 messages 2005/08/24
[#26873] Re: irb -I/ruby -Iと$LOAD_PATH — nobuyoshi nakada <nobuyoshi.nakada@...> 2005/08/24

なかだです。

[#26875] Re: irb -I/ruby -Iと$LOAD_PATH — akira yamada / やまだあきら <akira@...> 2005/08/24

nobuyoshi nakada wrote:

[#26885] Re: irb -I/ruby -Iと$LOAD_PATH — keiju@... (石塚圭樹) 2005/08/26

けいじゅ@いしつかです.

[#26897] fail on make install — KIMURA Koichi <kimura.koichi@...>

木村です。

28 messages 2005/08/29
[#26898] Re: fail on make install — "U.Nakamura" <usa@...> 2005/08/29

こんにちは、なかむら(う)です。

[#26903] Re: fail on make install — KIMURA Koichi <kbk@...> 2005/08/29

木村です。

[#26922] Re: fail on make install — KIMURA Koichi <kimura.koichi@...> 2005/08/30

木村です。

[#26926] Re: fail on make install — KIMURA Koichi <kimura.koichi@...> 2005/08/31

木村です。

[#26927] Re: fail on make install — "U.Nakamura" <usa@...> 2005/08/31

こんにちは、なかむら(う)です。

[#26928] Re: fail on make install — KIMURA Koichi <kimura.koichi@...> 2005/08/31

木村です。

[#26929] Re: fail on make install — "U.Nakamura" <usa@...> 2005/08/31

こんにちは、なかむら(う)です。

[#26930] Re: fail on make install — nobuyoshi nakada <nobuyoshi.nakada@...> 2005/08/31

なかだです。

[#26931] Re: fail on make install — "H.Yamamoto" <ocean@...2.ccsnet.ne.jp> 2005/08/31

山本です。

[#26933] Re: fail on make install — nobu@... 2005/08/31

なかだです。

[#26938] Re: fail on make install — nobuyoshi nakada <nobuyoshi.nakada@...> 2005/09/01

なかだです。

[#26939] Re: fail on make install — "H.Yamamoto" <ocean@...2.ccsnet.ne.jp> 2005/09/01

山本です。

[#26900] multiplying empty string — nobuyoshi nakada <nobuyoshi.nakada@...>

19 messages 2005/08/29
[#26904] Re: multiplying empty string — Yukihiro Matsumoto <matz@...> 2005/08/29

まつもと ゆきひろです

[#26907] Re: multiplying empty string — Tanaka Akira <akr@...17n.org> 2005/08/29

In article <1125327516.070646.12845.nullmailer@x31.priv.netlab.jp>,

[#26909] Re: multiplying empty string — Yukihiro Matsumoto <matz@...> 2005/08/29

まつもと ゆきひろです

[ruby-dev:26800] reducing PUSH_TAG in rescue, and useless exceptions

From: nobu@...
Date: 2005-08-14 06:32:22 UTC
List: ruby-dev #26800
なかだです。

[ruby-talk:152099]を見て気づいたんですが、..やRange.newに比較で
きないもの同士を与えると、同じ例外を二回投げています。一回目の
は使われないので無駄になります。

それと、NODE_RESCUEと同じようにrb_rescue2()でもPUSH_TAG()の回数
を減らしてみました。


* eval.c (rb_rescue2): reduce PUSH_TAG().

* range.c (range_check, range_init): reduce uselse exceptions.

Index: eval.c
===================================================================
RCS file: /cvs/ruby/src/ruby/eval.c,v
retrieving revision 1.815
diff -U2 -p -r1.815 eval.c
--- eval.c	13 Aug 2005 09:51:53 -0000	1.815
+++ eval.c	14 Aug 2005 06:07:55 -0000
@@ -5362,15 +5362,21 @@ rb_rescue2(b_proc, data1, r_proc, data2,
     volatile VALUE result;
     volatile VALUE e_info = ruby_errinfo;
+    volatile int handle;
+    VALUE eclass;
     va_list args;
 
     PUSH_TAG(PROT_NONE);
-    if ((state = EXEC_TAG()) == 0) {
-      retry_entry:
+    switch (state = EXEC_TAG()) {
+      case TAG_RETRY:
+	if (!handle) break;
+	handle = Qfalse;
+	state = 0;
+	ruby_errinfo = Qnil;
+      case 0:
 	result = (*b_proc)(data1);
-    }
-    else if (state == TAG_RAISE) {
-	int handle = Qfalse;
-	VALUE eclass;
-
+	break;
+      case TAG_RAISE:
+	if (handle) break;
+	handle = Qfalse;
 	va_init_list(args, data2);
 	while (eclass = va_arg(args, VALUE)) {
@@ -5383,23 +5389,12 @@ rb_rescue2(b_proc, data1, r_proc, data2,
 
 	if (handle) {
+	    state = 0;
 	    if (r_proc) {
-		PUSH_TAG(PROT_NONE);
-		if ((state = EXEC_TAG()) == 0) {
-		    result = (*r_proc)(data2, ruby_errinfo);
-		}
-		POP_TAG();
-		if (state == TAG_RETRY) {
-		    state = 0;
-		    ruby_errinfo = Qnil;
-		    goto retry_entry;
-		}
+		result = (*r_proc)(data2, ruby_errinfo);
 	    }
 	    else {
 		result = Qnil;
-		state = 0;
-	    }
-	    if (state == 0) {
-		ruby_errinfo = e_info;
 	    }
+	    ruby_errinfo = e_info;
 	}
     }
Index: range.c
===================================================================
RCS file: /cvs/ruby/src/ruby/range.c,v
retrieving revision 1.72
diff -U2 -p -r1.72 range.c
--- range.c	4 Aug 2005 11:29:51 -0000	1.72
+++ range.c	14 Aug 2005 05:54:19 -0000
@@ -30,9 +30,5 @@ range_check(args)
     VALUE *args;
 {
-    VALUE v;
-
-    v = rb_funcall(args[0], id_cmp, 1, args[1]);
-    if (NIL_P(v)) range_failed();
-    return Qnil;
+    return rb_funcall(args[0], id_cmp, 1, args[1]);
 }
 
@@ -48,5 +44,8 @@ range_init(range, beg, end, exclude_end)
     
     if (!FIXNUM_P(beg) || !FIXNUM_P(end)) {
-	rb_rescue(range_check, (VALUE)args, range_failed, 0);
+	VALUE v;
+
+	v = rb_rescue(range_check, (VALUE)args, range_failed, 0);
+	if (NIL_P(v)) range_failed();
     }
 


-- 
--- 僕の前にBugはない。
--- 僕の後ろにBugはできる。
    中田 伸悦

In This Thread

Prev Next