ようこそゲストさん
トップ
最新の日記
ユーザー登録
ログイン
ヘルプ
znzの日記
<ENDが使えないところ
|
ENDとat_exitの違い>
2006-10-11
■
ruby
の
ソース
を読んだ編
まず
grep
END
*
.
*
してみたらヒットしすぎ。
grep
END
lex
.c
parse
.yというあたりで探してみるとklENDらしいとわかる。
parse
.yのklENDのところを
ページャー
で見てNEW_POSTEXEが
ポイント
っぽい気がしたので、
grep
NEW_POSTEXE
*
.
*
で「node.h:#define NEW_POSTEXE() NEW_NODE(NODE_POSTEXE,0,0,0)」
grep
NODE_POSTEXE
*
.
*
で
eval
.cを見れば良さそうと気づく。
eval
.cの
case
NODE_POSTEXEでrb_f_END()が実際の処理っぽい。
grep
rb_f_END
*
.
*
してみたら、
eval
.cの中にrb_f_ENDがあった。
肝はrb_set_end_procっぽい。すぐ下にrb_f_at_exit()があって、その中でもrb_set_end_procを呼んでいる。
rb_set_end_procの仲まで見ずに
END
と
at_exit
で登録した
ブロック
は別々の
リスト
ではなく混ざった
リスト
で実行されるらしいとわかる。
コメント
<ENDが使えないところ
|
ENDとat_exitの違い>