From: Nobuyoshi Nakada Date: 2010-02-22T14:37:53+09:00 Subject: [ruby-dev:40455] Re: [Bug #2776] can't return from lambda with outer block なかだです。 At Mon, 22 Feb 2010 13:13:47 +0900, Shyouhei Urabe wrote in [ruby-dev:40454]: > 異なっているのは事実ですが、どちらが正しいか(あるいは両方間違い)は議論の余地がありそうです。 > > # lambda(&proc) でprocをlambdaに変換できるかどうかの違い? そういうことですね。1.9を1.8に合わせるならこんな感じ。 Index: proc.c =================================================================== --- proc.c (revision 26728) +++ proc.c (working copy) @@ -401,12 +401,15 @@ proc_new(VALUE klass, int is_lambda) if (procval) { + rb_proc_t *proc; if (RBASIC(procval)->klass == klass) { - return procval; - } - else { - VALUE newprocval = proc_dup(procval); - RBASIC(newprocval)->klass = klass; - return newprocval; + GetProcPtr(procval, proc); + if ((proc->is_lambda != 0) == (is_lambda != 0)) + return procval; } + procval = proc_dup(procval); + RBASIC(procval)->klass = klass; + GetProcPtr(procval, proc); + proc->is_lambda = is_lambda ? TRUE : FALSE; + return procval; } -- --- 僕の前にBugはない。 --- 僕の後ろにBugはできる。 中田 伸悦