[#18440] racc segv revisited — "Akinori MUSHA" <knu@...>

 次のバグの件なんですが、現時点では原因究明を含めて未解決という

24 messages 2002/10/02
[#18617] Re: racc segv revisited — "Akinori MUSHA" <knu@...> 2002/11/02

At Wed, 2 Oct 2002 23:19:59 +0900,

[ruby-dev:18500] Re: break from proc-closure

From: nobu.nakada@...
Date: 2002-10-12 05:50:27 UTC
List: ruby-dev #18500
なかだです。

At Sat, 12 Oct 2002 12:36:02 +0900,
Nobuyoshi-Nakada wrote:
> え、[ruby-dev:18457]のコードは1.6.7の最新でも例外が発生するんで
> すが…。そっちでもdRubyは失敗しますか?

つーか最初からそう書かれてますね。間抜けすぎ。

これでどうでしょう。1.6と1.7両方です。


Index: eval.c
===================================================================
RCS file: /cvs/ruby/src/ruby/eval.c,v
retrieving revision 1.137.2.132
diff -u -2 -p -r1.137.2.132 eval.c
--- eval.c	10 Oct 2002 07:01:10 -0000	1.137.2.132
+++ eval.c	12 Oct 2002 05:47:55 -0000
@@ -6374,8 +6374,6 @@ blk_orphan(data)
     struct BLOCK *data;
 {
-    if (!(data->scope->flag & SCOPE_NOSTACK)) {
-	return 0;
-    }
-    if ((data->tag->flags & BLOCK_ORPHAN)) {
+    if ((data->tag->flags & BLOCK_ORPHAN) &&
+	(data->scope->flag & SCOPE_NOSTACK)) {
 	return 1;
     }

Index: eval.c
===================================================================
RCS file: /cvs/ruby/src/ruby/eval.c,v
retrieving revision 1.341
diff -u -2 -p -r1.341 eval.c
--- eval.c	5 Oct 2002 15:46:24 -0000	1.341
+++ eval.c	12 Oct 2002 05:44:13 -0000
@@ -6471,8 +6471,6 @@ blk_orphan(data)
     struct BLOCK *data;
 {
-    if (!(data->scope->flags & SCOPE_NOSTACK)) {
-	return 0;
-    }
-    if ((data->tag->flags & BLOCK_ORPHAN)) {
+    if ((data->tag->flags & BLOCK_ORPHAN) &&
+	(data->scope->flags & SCOPE_NOSTACK)) {
 	return 1;
     }
@@ -6757,4 +6755,7 @@ block_pass(self, node)
 	break;
       case TAG_BREAK:
+	if (orphan) {
+	    localjump_error("break from proc-closure", prot_tag->retval);
+	}
 	result = prot_tag->retval;
 	break;


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

In This Thread