[Gauche-devel-jp] 言語ブリッジ間の例外変換

Back to archive index

木谷 洋 ryute****@mac*****
2005年 5月 21日 (土) 08:08:58 JST


木谷です。

いまObjective-Cの言語ブリッジを作成しています(ねるさ 
んのものとは別物です。構造体を使えたりします。もう少し完成度が上 
がったら公開する予定です)。

そこで、GaucheからObjective-Cに向かって 
NSExceptionを投げるための関数があります。生のままこれを呼ぶと暴 
走するので、Scheme界でGuard付きで呼び出すためのユー 
ティリティ(テスト用)として以下のような関数を書きまし 
た。

ScmObj with_guard(proc, args) {
  @try {
   ret = Scm_Apply(proc, args); // @throw e;
  }
  @catch(id e) {
    Scm_VMThrowException( e=>scm_e);
    /*NOTREACHED*/
  }
  return ret;
}


ところがこの関数からエラーを受けとるとGaucheが暴走してしま 
います。stack traceが止まっているようなのでlongjmpが 
入れ子になってるのがまずいと思うんですが、何か対処の方法はあるの 
でしょうか。
#ObjC側からscmを呼んでキャッチする場合は問題ないみ 
たいです。

一応bridge-invoker経由で使えば問題はないんですけど、それだ 
といちいちObjCクラスにメソッドを追加しなければならないのが 
美しくない気がします。

--
木谷 洋



Gauche-devel-jp メーリングリストの案内
Back to archive index