2022-03-31

[php-src勉強録]レンジオペレータの実装

レンジオペレータを追加してみよう的な記事を見てやってみたので備忘録。 https://phpinternals.net/articles/implementing_a_range_operator_into_php

わりとコピペなので深堀り(各関数が何やってるかとか)は別途やる予定。

PHPのビルド方法

だいたいこんな感じでビルドできる。

git clone git@github.com:php/php-src.git
cd php-src
./buildconf
./configure --with-iconv=/path/to/libiconv --enable-opcache
make -j4

このあとに、make installしても良いが面倒?な場合はsapi/cli/php が作られるのでそれを実行して動作確認するでも良さそう。 拡張モジュールは modules/ にある。

設定変えたりブランチ変えて再ビルドしたいときはこんな感じで

make clean
./buildconf --force
./config.nice
make -j4

詳細はPHP Internals Book にめっちゃ書かれているので参照すると良さそう

レンジオペレータの追加

実装したものはこちら

php internalsの記事 にあるように、 以下を実装していけばOK

1. Lexerの修正

2. Parserの修正

3. ASTからVMコードの出力

4. VMの変更(オペレータ追加)

zend_vm_def.hを修正して make すると以下のファイルが自動生成される。 (PHPでCを生成しているの凄い。これも後で深堀りしたい

Zend/zend_vm_gen.php を使って生成しているのでこのスクリプトを実行するのでもOK(試してない

echoの改変例

https://github.com/tzmfreedom/php-src/commit/71f330a36f6863af382df0d774c7803f95e4d489

とりあえずwrite()しまくる wei ステートメントを追加してみた。 echoのコピペ。 coreの変更なのでmod_phpでもCLIでも wei が使えるようになる。

このエントリーをはてなブックマークに追加