壊れたメガネ

ホッチキスの達人の意識の高いブログ。

引き続き ZendEngine のコードを読んでます

昨日くらいまではだらだらと zend_language_parser.y あたりを眺めていました。
bison の仕組みを何となくわかった気になったので、意味値に渡されるオブジェクトの znode とか compiler_globals あたりを読んでいます。


compiler_globals は Zend VM のインスタンス内では global って言うくらいだからユニークなのだろう。
いま読んでる感じだと、 CG(active_op_array) が肝っぽい。これはそのまんまオペコード(ZendVM の中間コードってやつかな?)のオブジェクト zend_op のリストなんだろう。

struct _zend_op_array {
	/* ... */

	zend_op *opcodes;

	/* ... */
}

zend_compile.c 内の zend_do_* みたいな意味値を扱う関数で CG(active_op_array)->opcodes (上のプロパティ)を次々と組み立てていくみたいなんだけど、どういうルールで CG を操作しているのかがまだわからない。


さて、今夜も戦場のカルマを挙げるかな。
やる気が残ってれば続き読もうかな。