Cからすでに存在するRubyのブロックを付けてRubyのメソッドを呼ぶにはrb_iterate、
またはtrunkにあるrb_block_callを使うしか方法はありませんか?

Rubyで書いた例:
  def method(argblk, &block)
    method_deep(&argblk)
    method_deep(&block)
  end

Cで次のように記述したい:
  VALUE func(VALUE self, VALUE argblk)
  {
    <ブロック付きメソッドを呼ぶAPI>(self, argblk, rb_intern("method_deep"), 0, 0);
    <ブロック付きメソッドを呼ぶAPI>(self, rb_block_proc(), rb_intern("method_deep"), 0, 0);
  }

rb_yieldの方がrb_funcall(... "call" ...)よりも実行コストが遥かに低く、rb_iterateや
rb_block_callは毎回新しいProcインスタンスを生成するので、再帰処理を
行うとき実行コストが馬鹿になりません。

どなたかおいしいAPIや、うまい方法があればご教授ください。