php-master-changes 2019-04-11

今日は関数呼び出し処理周りのリファクタリングと JIT でのコード生成の改善、tsrm_env_lock() を返り値 void に変更する修正、sizeof を ZEND_COUNT にコンパイルするようにする修正、各所のコンパイラ警告潰し、JIT がサポートされていないアーキテクチャではビルドしないようにし、phpinfo() で有効/無効と使用不可を出すようにする修正、call_user_func() が static メソッドに $this を渡していた問題の修正、不要コードの削除、libmagic.patch を生成するスクリプトの追加、テストでの期待するエラーメッセージの文言修正、opcache での VirtualProtect() のメモリサイズ指定修正、readdir_r() でなく readdir() を使うようにする修正があった！


# 2019-04-11
## dstogov: Simplify call frame initialization
- https://github.com/php/php-src/commit/cc900edd775dc87e74b5412e7cea324a60a01e74
- コールフレームの初期化を単純化
- object_or_called_scope で 2 引数を 1 引数にまとめたりしてるけど、パッと見よくわかんないな

## dstogov: Removed old constants (they are redeclared as macros)
- https://github.com/php/php-src/commit/77c522062af20a19d02ec9c612721329fce38588
- ↑でマクロ定義に移行した古い enum の削除

## dstogov: Check for ZEND_CALL_RELEASE_THIS only if ZEND_CALL_CLOSURE is not set
- https://github.com/php/php-src/commit/c97e3158ed7dae184ae2a5ae3e08d1d2eccbc3a6
- ZEND_CALL_RELEASE_THIS のチェックを ZEND_CALL_CLOSURE がセットされてないときのみ行うよう修正
- ZEND_CALL_RELEASE_THIS は [$this の参照カウント操作を行うかどうかのフラグ](https://github.com/php/php-src/commit/ab4ccffc4cceb877d2ce3144e5c499bd651886bf)
- シンボルの由来みたいな情報を気付いた時知った時に書き集めていく Wiki っぽいのが欲しくなってきた

## nikic: Make tsrm_env_lock() void
- https://github.com/php/php-src/commit/b213f13a2621ec553beec06d3e2f163c1e7e2282
- [7.4~]
- tsrm_env_lock() を返り値 void に変更
- NTS 版で警告出てたらしい

## nikic: Generate ZEND_COUNT for sizeof()
- https://github.com/php/php-src/commit/30df87f77d87d446afbfa4c9d2e0a1a643cc4bdc
- [7.4~]
- sizeof について count と同様に専用オペコード ZEND_COUNT にコンパイルするよう修正
- 違ってたんかーい、くらいの話

## nikic: Suppress write() warnings in jit_perf_dump.c
- https://github.com/php/php-src/commit/0351552e1eb4b71360dd2f0c77e7aa1942f8346d
- ext/opcache/jit で、jit_perf_dump.c のコンパイラ警告潰し
- ZEND_IGNORE_VALUE は値を使わないときの警告潰し用マクロ

## nikic: Mark zend_jit_print_regset as unused
- https://github.com/php/php-src/commit/d31104faccd8b702cc6c7a365eb70a4ab81d9498
- ext/opcache/jit で、普段使わないデバッグ用関数に ZEND_ATTRIBUTE_UNUSED を足してコンパイラ警告潰し

## nikic: Fix incompatible pointer warning in zend_test
- https://github.com/php/php-src/commit/ee45565a2a6c359d4e80d6e04c8e047c85d6a2af
- ext/zend_test のコンパイラ警告潰し

## nikic: Don't build JIT if the host architecture doesn't support it
- https://github.com/php/php-src/commit/b2fb753e85ce36ffd0141013a6eccbf0043d7392
- ext/opcache で、JIT がサポートされていないアーキテクチャではビルドしないよう修正
- phpinfo() でも有効/無効と使えないのと区別して出すように

## nikic: Suppress warnings using zend_quiet_write
- https://github.com/php/php-src/commit/d087a356feae73f223c5fdccd694d7af4e44601a
- [7.4~]
- zend_quiet_write() を使ってコンパイラの警告潰し
- zend_quiet_write() は ZEND_IGNORE_VALUE の付いた write() に展開されるマクロ

## nikic: Use zend_quiet_write instead of ZEND_IGNORE_VALUE
- https://github.com/php/php-src/commit/9825d68c081fe9a8f3b2cc4a9d08205905277112
- 「そういやこんなのあったわ」的に ZEND_IGNORE_VALUE(write()) を zend_quiet_write() に書き換え

## nikic: Avoid onig match param unused variable warning
- https://github.com/php/php-src/commit/a61d24e4d8350b9bd749ca74bdaed422c6caa830
- [7.3~]
- ext/mbstring で、不使用変数のコンパイラ警告潰し

## nikic: Fix opcache build without JIT
- https://github.com/php/php-src/commit/6dd745042750993ade9426637a2cae71d8078b8d
- ext/opcache で、JIT なし版のビルドができなかったので条件コンパイルの追加

## dstogov: Fixed bug [#77877](https://bugs.php.net/bug.php?id=77877) (call_user_func() passes $this to satatic methods).
- https://github.com/php/php-src/commit/a1b7ccdfc69a1ad9938039f687ad7059ed1bd506
- [7.4~]
- [call_user_func()](https://www.php.net/manual/ja/function.call-user-func.php) が static メソッドに $this を渡していた問題の修正

## sebastianbergmann: Fix typo
- https://github.com/php/php-src/commit/e71cfae41963f66ac4a9f4422f49cec7afde6016
- ↑ の typo を修正

## dstogov: Improved code generated for RETURN in methpods and closures
- https://github.com/php/php-src/commit/6d232eec035baeb940d3a3c706dd830524f1f79f
- ext/opcache/jit で、メソッド/クロージャからの return 用のコード生成を改善
- このアセンブリ言語と C が混じってるこの感じ、をうまいこと読む心の目というか心構えというか前提知識というかの補充が要る気する

## nikic: Avoid curl ssl callback warnings with OpenSSL 1.1
- https://github.com/php/php-src/commit/539a16fdb8a195544656c09282484445af8fe161
- ext/curl で、OpenSSL 1.1 以降では条件コンパイルで使われなくなるコールバック関数に ZEND_ATTRIBUTE_UNUSED を付けてコンパイラ警告潰し

## nikic: Remove unused rcsid variables
- https://github.com/php/php-src/commit/29eb35616af715dffc443f0517e3fcfb8b5e4827
- ext/xmlrpc で、使われていない変数 rcsid の削除
- rcsid ってなんじゃらほいという向きもあろうけど、このへんについては tnozaki さんの *BSD の事例でのとあわせた[解](https://www.hi-matic.org/diary/?20131124#24-1)[説](https://www.hi-matic.org/diary/?20131126)が分かりやすい（し面白い）
- [ident の指定もない](https://github.com/php/php-src/blob/04be076a5d8bf17010299f36bf7315cdd4504983/.gitattributes)のでまあいらねえんだろっていう

## nikic: Fix pointer signedness warning in mysqlnd
- https://github.com/php/php-src/commit/651fd1a96249940412f79352cb10ce61cc83d5c7
- ext/mysqlnd で、ポインタの符号の警告潰し

## nikic: Remove the readline thread-safety warning
- https://github.com/php/php-src/commit/2916ecabe09953af7b3e6cf724a8c61a5058c1f2
- [7.4~]
- ext/readline で、スレッドセーフじゃねえぞという警告を削除
- まあビルトシステム側での対応の方がというのはそうだけれど、対応する前の削除要るのか？これ

## weltling: Avoid code duplication
- https://github.com/php/php-src/commit/853f881bd170e252537f3107ae2202f9832d78d4
- ext/opcache で、JIT 実装との重複コードの除去

## nikic: Add script to generate libmagic.patch
- https://github.com/php/php-src/commit/f6521659ca9c8dc668ea60d3627a2f1a14cd5773
- ext/fileinfo で、libmagic.patch を生成するスクリプトの追加

## nikic: Fix libmagic warnings
- https://github.com/php/php-src/commit/b65cb7e2aa298ef316b5b8a46d918868e5a793a2
- ext/fileinfo で、libmagic のコンパイラ警告潰し

## nikic: Fix error message in spl_autoload test
- https://github.com/php/php-src/commit/2d823cb6811cf51675693d4405b4f16f75acac2b
- [7.4~]
- ext/spl で、テストでの期待するエラーメッセージの文言修正

## nikic: Remove restrict zend_portability define
- https://github.com/php/php-src/commit/c51eafe931464e920c628b9cfa03a26878f352fb
- zend_portability.h で、restrict の条件コンパイルを除去
- 使ってないしコンパイラ警告も出ていたとのこと

## nikic: Remove unused function prototype
- https://github.com/php/php-src/commit/44a1cd4fcdcf3ead6cf412c7fc2d3fd2ca855d5f
- ext/mbstring で、使われていない関数プロトタイプの削除

## weltling: Fix VirtualProtect memory size
- https://github.com/php/php-src/commit/f4628436df9492cd00465ba1f29d3c71dded17cc
- ext/opcache で、[VirtualProtect()](https://docs.microsoft.com/en-us/windows/desktop/api/memoryapi/nf-memoryapi-virtualprotect) のメモリサイズ指定を修正

## nikic: Remove incorrect mbstring includes
- https://github.com/php/php-src/commit/ca47732eee6ed07ac88f427cacb7a27caeaf7845
- ext/mbstring で、不要な include を削除

## nikic: Fix libgd warnings
- https://github.com/php/php-src/commit/9d663cba1abed1697dce5f73a7177ad2d7beaeb7
- [7.4~]
- ext/gd で、libgd のコンパイラ警告の修正

## nikic: Remove curl gnutls locking
- https://github.com/php/php-src/commit/3e0f9c2c94d1511eaf30f8f1de8260f5821c985f
- ext/curl で、gcrypt 用のロックコードを削除
- GnuTLS は [gcrypt から nettle に移行](https://gnutls.org/manual/html_node/Cryptographic-Backend.html)しており、いらねえやということみたい

## nikic: Use readdir() instead of readdir_r()
- https://github.com/php/php-src/commit/2b28f7189144a21e753dbc09efadd571121a82b9
- [readdir_r() でなく readdir() を使う](https://yohhoy.hatenadiary.jp/entry/20160902/p1)よう修正
- 非 glibc でスレッドセーフでない readdir() 実装を持つ環境で PHP のスレッドセーフ版を使うことがありえるか？なんて分からないのでモニョるっちゃモニョる

## staabm: Fixed typo
- https://github.com/php/php-src/commit/7bb22df5cf04a13d3cb78113ec6f416b0088c758
- [7.4~]
- typo の修正