[#14922] alias $gvar — Koji Arai <JCA02266@...>

新井です。

19 messages 2001/10/14

[#15006] Re: eval.c (rb_stack_check): prohibit recursive raising error — WATANABE Hirofumi <eban@...>

わたなべです。

13 messages 2001/10/26
[#15008] Re: eval.c (rb_stack_check): prohibit recursive raising error — Shugo Maeda <shugo@...> 2001/10/26

前田です。

[ruby-dev:14898] Re: allocation framework(Re: custom marshal)

From: nobu.nakada@...
Date: 2001-10-05 02:48:00 UTC
List: ruby-dev #14898
なかだです。

At Thu, 4 Oct 2001 01:38:26 +0900,
matz@ruby-lang.org (Yukihiro Matsumoto) wrote:
> |* Regexp.new(str)が無限に再帰してスタックオーバーフロー
> 
> これはおっしゃる通りです。

 これ、ChangeLogだけでre.cの方がコミットされてませんが。

> |* メソッド内のProc.newがwithout blockでArgumentError
> |
> | こんなかなぁ。Regexp.newはまぁ見ての通りなんですが、Procの方
> |はProc.allocateの中からブロックにうまくアクセスできなかったんで、
> |Proc#initializeとに分けてみました。あとは初期化されてないProcの
> |ためにいくらか修正。
> 
> こっちは(わたしのツモリとしては)、Thread同様Procはallocateを
> 使わないつもりだったのです。undef allocateするつもりで、なに
> を間違ったかnewをallocateにrenameしてしまいました。

 proc_s_new()を復活させてこういう感じでしょうか。re.cと合わせ
て入れちゃっていいでしょうか。


Index: eval.c
===================================================================
RCS file: /cvs/ruby/src/ruby/eval.c,v
retrieving revision 1.208
diff -u -2 -p -r1.208 eval.c
--- eval.c	2001/10/03 07:19:10	1.208
+++ eval.c	2001/10/05 02:40:22
@@ -6365,4 +6365,16 @@ proc_new(klass)
 }
 
+static VALUE
+proc_s_new(argc, argv, klass)
+    int argc;
+    VALUE *argv;
+    VALUE klass;
+{
+    VALUE proc = proc_new(klass);
+
+    rb_obj_call_init(proc, argc, argv);
+    return proc;
+}
+
 VALUE
 rb_f_lambda()
@@ -6970,5 +6982,6 @@ Init_Proc()
 
     rb_cProc = rb_define_class("Proc", rb_cObject);
-    rb_define_singleton_method(rb_cProc, "allocate", proc_new, 0);
+    rb_undef_method(CLASS_OF(rb_cProc), "allocate");
+    rb_define_singleton_method(rb_cProc, "new", proc_s_new, -1);
 
     rb_define_method(rb_cProc, "call", proc_call, -2);


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

In This Thread