はじめまして。 ymsdと申します。
いきなり長文で失礼いたします。

BeOSのGUIを扱うための拡張ライブラリをつくろうとして
苦しんでいる者です。
WindowなどのGUI部品を表示するだけなら簡単に実現したのですが、
それらから処理が戻ってくるところでつまづいています。
(Gtkでいえば、signal_connectのところ)
たとえば、Windowオブジェクトを
win = BWindow.new(...)
のように生成して、Windowがメッセージ(Gtkでいえばシグナル)
をうけとった時の動作を、特異メソッドを使って

def win.message_received(msg)
   case msg
    when A
    when B
       ...
    else
       self.back_to_parent(msg)
   end
end

のように記述したいのです。
この、最後のback_to_parentというのは、知らないメッセージ
(や、このオブジェクトでは処理したくないメッセージ)が
きたときは、windowの親クラス(BeOSのAPIでの話)のメソッド
を呼び出して処理をするというものです。
(これはBeOSのAPI(C++で書かれている)では一般的な手法なのです。)
ところが、ここまで処理がくると、

[BUG] unexpected local variable

というメッセージが出てとまってしまいます。
rubyのソースを(わからないながらも)みると、
これはどうやら、eval.cが出しているメッセージで
変数のスコープに関係があるらしいとは思うのですが、
その意味するところはまったく理解できていません。

抽象的な質問で申し訳ありませんが、

・どなたか、拡張ライブラリをかいていてこのエラーが出た人は
いらっしゃいますか?そのときはどのように対処なさいましたか?

・一般にこのエラーはどういうときにおきるのでしょうか?
何に気をつければ回避できるのでしょうか?

・このエラーをrubyスクリプトだけで発生させることはできるでしょうか?

・特異メソッドを定義するとそのオブジェクトのもともとのクラス
の下に特殊なクラスがはさまれるということと何か関係があるのでしょうか?

・例外と[BUG]の違いは何でしょうか?

以上、なにかヒントになるようなことがありましたら、よろしく
おねがいいたします。
また、BeOSで同じようなことをしようとしているかたが
いらっしゃいましたら情報交換させていただければありがたいのですが
(はたしてBeOSでrubyな人って何人くらいいるんだろうか...)

--
Masuda Yuichi
ymsd / m-net.ne.jp