VALUE rb_iterate(VALUE (*call_proc)(), VALUE date1, VALUE (*block_proc)(), date2)
ブロック付きメソッド(イテレータ)呼び出しを行う関数です.
まず call_proc(data1) を実行します。そしてその関数かその直下のメソッドで yield が発生すると以下が実行されます。
block_proc(VALUE block_arg, VALUE data2, VALUE self)
block_arg はブロック引数(複数なら配列に入っている)、 data2 は rb_iterate() に渡したもの、 self は block_proc 呼び出し時点での self です。