まつもと ゆきひろです

In message "[ruby-list:9775] Re: ruby-jed SEGV"
    on 98/09/30, MAEDA Shugo <shugo / aianet.ne.jp> writes:
|前田です。

||Jed/Rubyのソースを見るとトップレベルの環境を積まずにRubyのコー
||ドを呼んでますから,例外が起きると落ちますね.
|
|これはruby_init()以外にしなければならない処理があるということ
|でしょうか。

いやあ,この辺がRuby側で対応すべき内容なんですが.

というのも,トップレベルの環境が積んでない状態で例外が発生す
ると落ちるという現象があるんです.これは簡単な修正で対応でき
ますが,それでもプログラムが落ちてしまうのでJed/Rubyにとって
望ましい動作ではないでしょう.

んで,環境を積むには

  * rb_eval_string(), rb_load()などを使う
  * rb_rescue()でくくる

のいずれかがよろしいのではないかと思います.rb_intern()が例
外を発生するのがそもそもけしからんという考えもあるでしょうが.
便利なのであんまり変更したくないです.

|とりあえず、rb_internを呼ぶ前に、
|
|if (!rb_is_valid_id(name)) return FALSE;
|
|などとすればよさそうですが、このような関数はありますか?

ないです.判断基準としては

  * 先頭が記号([^a-zA-Z_$@])ではじまり,Rubyの演算子でない

文字列をrb_intern()に渡すと例外が発生します.

なんか良いアイディアがありますかね.

                                まつもと ゆきひろ /:|)