[#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:18511] Re: How to raise LocalJumpError with next and redo?

From: nobu.nakada@...
Date: 2002-10-12 17:57:18 UTC
List: ruby-dev #18511
なかだです。

At Sun, 13 Oct 2002 01:37:31 +0900,
Tanaka Akira wrote:
> > $ ruby -e next
> > -e:1: unexpected next
> > 
> > とか。
> 
> こっちは試したんですが、これって LocalJumpError なんでしょうか?
> 
> % ruby -e 'next rescue p $!'
> -e:1: unexpected next
> % ruby -e 'eval("next") rescue p $!' 
> -e:1: unexpected next
> 
> というように rescue できないようですし。

LocalJumpErrorが発生するのは、stackをrewindして該当するTAGが見
付からずにスコープから出ちゃったところですから、この場合はトッ
プレベルのスコープを出たところ、つまり既にrescueは抜けた後です。
このfooのスコープをトップレベルのスコープと考えれば分かりやすい
かも。

def foo; next; end; foo rescue p $!	# 捕まえられる
def foo; next rescue p $!; end; foo	# 捕まえられない

> > Procからじゃないですが。
> 
> Proc から出す方法はあるんでしょうか?

eval.cをざっと見て確認しましたがnext/redoではなさそうな感じ。

> あと、ある場所の next/redo が LocalJumpError を出すことも出さないこと
> もある場合はあるんでしょうか?

うーん、evalはともかく、スコープは静的に決まるんでないような気
がします。パーサで跳ねることもできるのかも知れませんが、確認し
てません。

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

In This Thread