山本です。

現在 tcltklib.c をリファクタリングしていますが、tcl_protect と tcl_check_result を
統合しようとして問題につきあたりました。

1. ip_ruby_cmd_body に下のような部分があるのですが、これを残したまま統合するのは
   難しそうです。rb_rescue2 は例外をブロックしませんし、例外を通してしまうと
   tcl 環境をまたいでスタック破壊してしまうことがわかった以上、もはやこのコードは
   安全ではなく、残していてもしかたないと思います。消してもいいでしょうか?
  (できれば tcl_check_result の #if 0 (SystemExit) も消したいです)

#if 0
    ret = rb_rescue2(ip_ruby_cmd_core, (VALUE)arg, 
                     ip_ruby_cmd_rescue, arg->failed,
                     rb_eStandardError, rb_eScriptError, rb_eSystemExit, 
                     (VALUE)0);
#else

2. tcl_protect に下のような部分があるのですが、rb_jump_tag で例外を発生してしまうと、
   上述の理由でスタック破壊につながります。ここはどう対処すべきでしょうか。

        case TAG_RETRY:
        case TAG_REDO:
            if (NIL_P(ruby_errinfo)) {
                rb_jump_tag(status); /* danger */

以上の二点です。よろしくお願いします。