[#21058] dRuby failed, ruby 1.8.0 preview7? — Masatoshi SEKI <m_seki@...>
咳といいます。
5 messages
2003/08/01
[#21072] __libc_ia64_register_backing_store_base — akira yamada / やまだあきら <akira@...>
5 messages
2003/08/02
[#21081] conversion from float to string — Yoshiki Wada <ysk@...5.so-net.ne.jp>
和田と申します。
8 messages
2003/08/02
[#21082] Re: conversion from float to string
— matz@... (Yukihiro Matsumoto)
2003/08/02
まつもと ゆきひろです
[#21083] Re: conversion from float to string
— Koji Arai <JCA02266@...>
2003/08/02
新井です。
[#21093] (ary - ary) preserves duplicated values — Koji Arai <JCA02266@...>
新井です。
7 messages
2003/08/03
[#21134] Re: [PATCH] Change configure to use Cygwin net release naming convention (PR#1077) — WATANABE Hirofumi <eban@...>
わたなべです。
4 messages
2003/08/05
[#21137] with-static-linked-ext — nobu.nakada@...
なかだです。
10 messages
2003/08/05
[#21140] Re: with-static-linked-ext
— nobu.nakada@...
2003/08/05
なかだです。
[#21142] Re: with-static-linked-ext
— matz@... (Yukihiro Matsumoto)
2003/08/05
まつもと ゆきひろです
[#21146] Regexp.alt(pat1, pat2, ...) — Tanaka Akira <akr@...17n.org>
提案なのですが、複数の Regexp (や String) を | でつなぐ Regexp.alt
4 messages
2003/08/05
[#21153] ChangeLog — "U.Nakamura" <usa@...>
こんにちは、なかむら(う)です。
12 messages
2003/08/06
[#21154] Re: ChangeLog
— matz@... (Yukihiro Matsumoto)
2003/08/06
まつもと ゆきひろです
[#21159] Re: ChangeLog
— nobu.nakada@...
2003/08/06
なかだです。
[#21160] Re: ChangeLog
— matz@... (Yukihiro Matsumoto)
2003/08/06
まつもと ゆきひろです
[#21170] soap4r to /src/ruby/lib — "NAKAMURA, Hiroshi" <nakahiro@...>
なひです。
11 messages
2003/08/08
[#21176] marshalling ivtbl of Time — "NAKAMURA, Hiroshi" <nakahiro@...>
なひです。
10 messages
2003/08/11
[#21475] Re: marshalling ivtbl of Time
— Tanaka Akira <akr@...17n.org>
2003/10/03
In article <1065144546.011594.19001.nullmailer@picachu.netlab.jp>,
[#21179] [BUG]net/httpでBUG — "yamamoto madoka" <dan@...2.so-net.ne.jp>
こんにちは、山本 円と申します。
8 messages
2003/08/11
[#21183] Process::UID.switch, Process::GID.switch — Kazuhiro NISHIYAMA <zn@...>
西山和広です。
5 messages
2003/08/11
[#21216] [PATCH] reducing PUSH/POP/EXEC_TAG() for retry — nobu.nakada@...
なかだです。
4 messages
2003/08/21
[#21225] Re: [ruby-cvs] ruby: * enum.c (inject_i): use rb_yield_values. — "U.Nakamura" <usa@...>
こんにちは、なかむら(う)です。
14 messages
2003/08/22
[#21227] Re: [ruby-cvs] ruby: * enum.c (inject_i): use rb_yield_values.
— nobu.nakada@...
2003/08/22
なかだです。
[#21228] Re: [ruby-cvs] ruby: * enum.c (inject_i): use rb_yield_values.
— matz@... (Yukihiro Matsumoto)
2003/08/22
まつもと ゆきひろです
[#21229] Re: [ruby-cvs] ruby: * enum.c (inject_i): use rb_yield_values.
— nobu.nakada@...
2003/08/22
なかだです。
[#21231] Re: [ruby-cvs] ruby: * enum.c (inject_i): use rb_yield_values.
— matz@... (Yukihiro Matsumoto)
2003/08/23
まつもと ゆきひろです
[#21232] Re: [ruby-cvs] ruby: * enum.c (inject_i): use rb_yield_values.
— nobu.nakada@...
2003/08/23
なかだです。
[#21233] Re: [ruby-cvs] ruby: * enum.c (inject_i): use rb_yield_values.
— matz@... (Yukihiro Matsumoto)
2003/08/23
まつもと ゆきひろです
[#21234] Re: [ruby-cvs] ruby: * enum.c (inject_i): use rb_yield_values.
— Koji Arai <JCA02266@...>
2003/08/23
新井です。
[#21236] Re: [ruby-cvs] ruby: * enum.c (inject_i): userb_yield_values.
— Koji Arai <JCA02266@...>
2003/08/23
新井です。
[#21237] SEGV — keiju@... (Keiju ISHITSUKA)
けいじゅ@いしつかです.
12 messages
2003/08/23
[#21259] Regexp#initialize が $SAFE==4 で落ちる — Kazuhiro NISHIYAMA <zn@...>
西山和広です。
9 messages
2003/08/25
[#21262] Re: Regexp#initialize が $SAFE==4 で落ちる
— matz@... (Yukihiro Matsumoto)
2003/08/26
まつもと ゆきひろです
[#21264] Re: Regexp#initializeが $SAFE==4 で落ちる
— nobu.nakada@...
2003/08/26
なかだです。
[#21280] スレッド内の例外でRuby停止 — "yamamoto madoka" <dan@...2.so-net.ne.jp>
こんにちは、山本と申します。
9 messages
2003/08/29
[#21281] 大量メモリ消費攻撃に対する対応 — Hidetoshi NAGAI <nagai@...>
永井@知能.九工大です.
16 messages
2003/08/29
[#21285] Re: 大量メモリ消費攻撃に対する対応
— matz@... (Yukihiro Matsumoto)
2003/08/29
まつもと ゆきひろです
[#21288] Re: 大量メモリ消費攻撃に対する対応
— Hidetoshi NAGAI <nagai@...>
2003/08/29
永井@知能.九工大です.
[#21306] Re: 大量メモリ消費攻撃に対する対応
— matz@... (Yukihiro Matsumoto)
2003/09/03
まつもと ゆきひろです
[#21309] Re: 大量メモリ消費攻撃に対する対応
— Hidetoshi NAGAI <nagai@...>
2003/09/03
永井@知能.九工大です.
[ruby-dev:21235] Re: [PATCH] reducing PUSH/POP/EXEC_TAG() for retry
From:
nobu.nakada@...
Date:
2003-08-23 04:46:41 UTC
List:
ruby-dev #21235
なかだです。
At Fri, 22 Aug 2003 00:55:34 +0900,
Yukihiro Matsumoto wrote:
> |retryするときに同じ場所でEXEC_TAG()を繰り返すのを、減らしてみま
> |した。
>
> 採用したいんですが、このパッチを当てるとmakeが
>
> compiling Win32API
> /home/matz/work/ruby/lib/fileutils.rb:415:in `sysread': End of file reached (EOFError)
rescueの後でruby_errinfoを戻してませんでした。忘れてましたが、
そういえばloadって最後にruby_errinfoをチェックするんですよねぇ。
Index: eval.c
===================================================================
RCS file: /cvs/ruby/src/ruby/eval.c,v
retrieving revision 1.520
diff -u -2 -p -r1.520 eval.c
--- eval.c 23 Aug 2003 04:05:38 -0000 1.520
+++ eval.c 23 Aug 2003 04:27:24 -0000
@@ -2711,5 +2711,4 @@ rb_eval(self, n)
case NODE_FOR:
{
- iter_retry:
PUSH_TAG(PROT_FUNC);
PUSH_BLOCK(node->nd_var, node->nd_body);
@@ -2717,4 +2716,5 @@ rb_eval(self, n)
state = EXEC_TAG();
if (state == 0) {
+ iter_retry:
PUSH_ITER(ITER_PRE);
if (nd_type(node) == NODE_ITER) {
@@ -2734,8 +2734,14 @@ rb_eval(self, n)
POP_ITER();
}
- else if (_block.tag->dst == state) {
- state &= TAG_MASK;
- if (state == TAG_RETURN || state == TAG_BREAK) {
- result = prot_tag->retval;
+ else {
+ if (_block.tag->dst == state) {
+ state &= TAG_MASK;
+ if (state == TAG_RETURN || state == TAG_BREAK) {
+ result = prot_tag->retval;
+ }
+ }
+ if (state == TAG_RETRY) {
+ state = 0;
+ goto iter_retry;
}
}
@@ -2746,7 +2752,4 @@ rb_eval(self, n)
break;
- case TAG_RETRY:
- goto iter_retry;
-
case TAG_BREAK:
break;
@@ -2808,7 +2811,7 @@ rb_eval(self, n)
case NODE_RESCUE:
- retry_entry:
{
volatile VALUE e_info = ruby_errinfo;
+ volatile int rescuing = 0;
PUSH_TAG(PROT_NONE);
@@ -2816,7 +2819,16 @@ rb_eval(self, n)
result = rb_eval(self, node->nd_head);
}
- POP_TAG();
- if (state == TAG_RAISE) {
- NODE * volatile resq = node->nd_resq;
+ else if (rescuing) {
+ if (state == TAG_RETRY) {
+ rescuing = state = 0;
+ e_info = ruby_errinfo = Qnil;
+ result = rb_eval(self, node->nd_head);
+ }
+ else if (state != TAG_RAISE) {
+ ruby_errinfo = e_info;
+ }
+ }
+ else if (state == TAG_RAISE) {
+ NODE *resq = node->nd_resq;
while (resq) {
@@ -2824,17 +2836,7 @@ rb_eval(self, n)
if (handle_rescue(self, resq)) {
state = 0;
- PUSH_TAG(PROT_NONE);
- if ((state = EXEC_TAG()) == 0) {
- result = rb_eval(self, resq->nd_body);
- }
- POP_TAG();
- if (state == TAG_RETRY) {
- state = 0;
- ruby_errinfo = Qnil;
- goto retry_entry;
- }
- if (state != TAG_RAISE) {
- ruby_errinfo = e_info;
- }
+ rescuing = 1;
+ result = rb_eval(self, resq->nd_body);
+ ruby_errinfo = e_info;
break;
}
@@ -2842,10 +2844,10 @@ rb_eval(self, n)
}
}
- else if (node->nd_else) { /* else clause given */
- if (!state) { /* no exception raised */
- result = rb_eval(self, node->nd_else);
- }
- }
+ POP_TAG();
if (state) JUMP_TAG(state);
+ /* no exception raised */
+ if (node->nd_else) { /* else clause given */
+ result = rb_eval(self, node->nd_else);
+ }
}
break;
@@ -4436,5 +4438,4 @@ rb_iterate(it_proc, data1, bl_proc, data
VALUE self = ruby_top_self;
- iter_retry:
PUSH_ITER(ITER_PRE);
PUSH_BLOCK(0, node);
@@ -4443,10 +4444,17 @@ rb_iterate(it_proc, data1, bl_proc, data
state = EXEC_TAG();
if (state == 0) {
+ iter_retry:
retval = (*it_proc)(data1);
}
- if (ruby_block->tag->dst == state) {
- state &= TAG_MASK;
- if (state == TAG_RETURN || state == TAG_BREAK) {
- retval = prot_tag->retval;
+ else {
+ if (ruby_block->tag->dst == state) {
+ state &= TAG_MASK;
+ if (state == TAG_RETURN || state == TAG_BREAK) {
+ retval = prot_tag->retval;
+ }
+ }
+ if (state == TAG_RETRY) {
+ state = 0;
+ goto iter_retry;
}
}
@@ -4459,7 +4467,4 @@ rb_iterate(it_proc, data1, bl_proc, data
break;
- case TAG_RETRY:
- goto iter_retry;
-
case TAG_BREAK:
break;
@@ -7046,5 +7051,4 @@ proc_invoke(proc, args, self, klass)
ruby_block = &_block;
- again:
PUSH_ITER(ITER_CUR);
ruby_frame->iter = ITER_CUR;
@@ -7260,5 +7264,4 @@ block_pass(self, node)
orphan = block_orphan(data);
- retry:
/* PUSH BLOCK from data */
old_block = ruby_block;
@@ -7272,4 +7275,5 @@ block_pass(self, node)
state = EXEC_TAG();
if (state == 0) {
+ retry:
proc_set_safe_level(proc);
if (safe > ruby_safe_level)
@@ -7277,6 +7281,4 @@ block_pass(self, node)
result = rb_eval(self, node->nd_iter);
}
- POP_TAG();
- POP_ITER();
if (_block.tag->dst == state) {
if (orphan) {
@@ -7298,4 +7300,10 @@ block_pass(self, node)
}
}
+ if (state == TAG_RETRY) {
+ state = 0;
+ goto retry;
+ }
+ POP_TAG();
+ POP_ITER();
ruby_block = old_block;
ruby_safe_level = safe;
@@ -7307,6 +7315,4 @@ block_pass(self, node)
result = prot_tag->retval;
break;
- case TAG_RETRY:
- goto retry;
case TAG_RETURN:
if (orphan) {
--
--- 僕の前にBugはない。
--- 僕の後ろにBugはできる。
中田 伸悦