From: Nobuhiro IMAI Date: 2010-05-22T00:59:29+09:00 Subject: [ruby-dev:41387] Re: [Bug #3316] Kernel#caller returns nil as well いまいです。 From: Yusuke ENDOH Date: Thu, 20 May 2010 21:58:42 +0900 > 遠藤です。 > > 2010年5月20日4:47 Nobuhiro IMAI : >> が、これだと、caller(0) で返る配列のサイズを越える数を引数として渡して >> も空配列が返るようになってしまっているようです。 > > ぐああ、問題を誤解していました。nil が帰ることがあるのは元からなんですね。 > 以下のパッチで再挑戦します。それから頂いたパッチは取り込んでおきます。 トップレベル云々の話で混乱させてしまったかもしれません。ごめんなさい。 これで、1.8 と同じ挙動になっていると思います。という訳で、せっかくパッ チを取り込んでいただいたのに、RDoc の方が間違いになってしまいました。 以下のパッチで正しい記述になると思います。ついでに、 * 他の場所に合わせて s/Array/array/ * 実際の出力に合わせて in `
' を追加 * caller(4) を修正、caller(5) を追加 という変更を加えています。合わせて取捨選択してください。 -- Nobuhiro IMAI Key fingerprint = F39E D552 545D 7C64 D690 F644 5A15 746C BD8E 7106 diff --git a/vm_eval.c b/vm_eval.c index cff05a0..e609ca0 100644 --- a/vm_eval.c +++ b/vm_eval.c @@ -1536,7 +1536,7 @@ rb_catch_obj(VALUE tag, VALUE (*func)(), VALUE data) /* * call-seq: - * caller(start=1) -> Array or nil + * caller(start=1) -> array or nil * * Returns the current execution stack---an array containing strings in * the form ``file:line'' or ``file:line: in @@ -1544,7 +1544,7 @@ rb_catch_obj(VALUE tag, VALUE (*func)(), VALUE data) * determines the number of initial stack entries to omit from the * result. * - * Returns +nil+ if _start_ is greater than or equal to the size of + * Returns +nil+ if _start_ is greater than the size of * current execution stack. * * def a(skip) @@ -1556,11 +1556,12 @@ rb_catch_obj(VALUE tag, VALUE (*func)(), VALUE data) * def c(skip) * b(skip) * end - * c(0) #=> ["prog:2:in `a'", "prog:5:in `b'", "prog:8:in `c'", "prog:10"] - * c(1) #=> ["prog:5:in `b'", "prog:8:in `c'", "prog:11"] - * c(2) #=> ["prog:8:in `c'", "prog:12"] - * c(3) #=> ["prog:13"] - * c(4) #=> nil + * c(0) #=> ["prog:2:in `a'", "prog:5:in `b'", "prog:8:in `c'", "prog:10:in `
'"] + * c(1) #=> ["prog:5:in `b'", "prog:8:in `c'", "prog:11:in `
'"] + * c(2) #=> ["prog:8:in `c'", "prog:12:in `
'"] + * c(3) #=> ["prog:13:in `
'"] + * c(4) #=> [] + * c(5) #=> nil */ static VALUE