最近 Dmitry が元気。
会社の Qiita の organization 見つけたので、混ぜてーと言ったら混ぜてくれた。
2018-08-24
dktapps: mkdist.php: recursively check dll dependencies
- https://github.com/php/php-src/commit/b9bf9ddce6b0813df60b346fca7919735f158cd5
- Windows 用でバイナリ配布物を用意するスクリプトの修正
- PR はこれ
- intl を入れなくても ICU が無条件で配布物へ含められていたのを、標準の DLL 依存検査処理を再帰的に行うようにすることでその枠内で ICU も取り扱えるようにし、ICU を除外できるようにした
- libenchant や libsasl2 のような一部 DLL は、プラグインとして他の DLL をロードしており、DLL へリンクされているわけではなく、無条件のコピーが必要だった
- ICU もかつては同様だったが、現在は再帰的なリンクチェックで解決できるようになっている
dstogov: Keep information about unresolved parent class in zend_class_entry->parent_name
- https://github.com/php/php-src/commit/8050f4a334ca43cc95a977413252fa45d3f3bdc3
- クラス定義のコンパイル時、親クラスの名前をクラスエントリへ保存するよう修正
dstogov: Perform "early-binding" directly during compilation
- https://github.com/php/php-src/commit/b36dbdd1dd431d1a21fdb6f2508c7c41b682466c
- コンパイル時に直接早期バインドを行うよう修正
- 元々、zend_compile() より呼ばれる zend_compile_top_stmt() から AST をたどり、関数/クラス定義をコンパイルする際は ZEND_DECLARE_FUNCTION や ZEND_DECLARE_CLASS などのオペコードを生成、その最後に後処理として zend_do_early_binding() でトップレベルのみ関数/クラス定義をバインド(実際に処理系内へスクリプトから利用できる形でクラス定義を構築)するような作りだった
- 今回の修正で、トップレベルのものについては直接関数やクラス定義のコンパイル時にバインドを行うようになった
- これにより、早期バインドの残骸である ZEND_NOP はコンパイル後の op_array に残らなくなった
dstogov: ZEND_DECLARE_CLASS, ZEND_DECLARE_INHERITED_CLASS and ZEND_DECLARE_INHERITED_CLASS_DELAYED don't need return value anymore.
- https://github.com/php/php-src/commit/6136a20544a3f8a116bb38e404dadd500006b134
- クラス定義系のオペコードで元々定義されたクラスの zend_class_entry を返していたが、不要になったので返さないよう修正された
- いつの何の修正でどうして不要となったのか、そもそも何のために返していたのか、は追えてない