今日はドキュメントの更新、::class まわりの整理修正、親のないクラスでの parent:: 利用エラーのランタイムチェックからコンパイル時チェックへの移動、mysqlnd のコード整理、SOAP 利用時クラッシュするバグの修正があった!
2019-01-04
nikic: Add NEWS entry for bug #77357
- https://github.com/php/php-src/commit/07873fab3c5b591a712f6db68d20f253c0b8aaa8
- [7.3~]
- 昨日の修正 を NEWS へ追記
nikic: Fix self::class inside constant in global scope
- https://github.com/php/php-src/commit/41af1e6781386cf540926ba9d1ff59a3402f8e01
- [7.2~]
-
self::class
をグローバルスコープの const 定義で使うのを許容するよう修正 - 明らかに誤ったコードだが、7.0.1 以降通ってしまっていた
- 7.2 系では今更直すのももう遅いかなという感じで、デバッグモードで ZEND_ASSERT に跳ねられるのを潰してしまい、テストケースも追加して許容ということにしているもよう
nikic: Introduce separate ZEND_AST_CLASS_NAME AST node
- https://github.com/php/php-src/commit/290adc41321a6fb0dfe71f1a8058a87ae4c6cab1
- ZEND_AST_CLASS_NAME の AST ノードを追加
- クラス定数とクラス名をとるための
::class
はどちらもクラス名::hogehoge
のような形で構文を共有するが、表しているものは全然違う - 違うのにどっちも ZEND_AST_CLASS_CONST で表していた
- hogehoge が "class" なら ZEND_AST_CLASS_NAME、そうでなければ ZEND_AST_CLASS_CONST、と分岐するよう、AST ノードを分けてコードを整理した形
nikic: Fix intl build
- https://github.com/php/php-src/commit/6aa55a28b54d6ec56b51d29fe8b65e5e7a444834
- 変数名に使ってた
class
は C++ のキーワードで intl のビルドがコケるのでclass_name
に修正
nikic: Don't replace self::class with __CLASS__ during const eval
- https://github.com/php/php-src/commit/9b3fda43424bb9044afcbf8490e38906c46851a3
- 定数式評価の際に
self::class
を__CLASS__
で置き換えるのをやめた -
self::class
と[self::class]
が違う結果になってしまうようだ - AST_MAGIC_CONST が
__CLASS__
とか__FILE__
とかを持つ用の AST ノードらしい
Andrey Hristov: Revert visibility
- https://github.com/php/php-src/commit/71ffae9605a0b19f4c7a76d317276c934a767a65
- ext/mysqlnd で、4 〜 5 年前になんか消してた PHPAPI の指定を復帰
nikic: Handle self::class separately from __CLASS__ in const eval
- https://github.com/php/php-src/commit/f58846a15d0460d1f2dcee92540c5c639c937ee9
- 定数評価の際、
self::class
を__CLASS__
と区別して扱うよう修正 - master ではグローバルスコープの const 定義で
self::class
を使うとエラーになるように
nikic: Support parent::class inside constexpr contexts
- https://github.com/php/php-src/commit/447b3470de43bf2435ad5a138a964c2f2c4fc4a6
- 定数式を使える箇所で
parent::class
を使えるよう修正 - こらそこ、「出来なかったのかよ」とか言わない、特に HHVM ユーザの君!
nikic: Detect invalid uses of parent:: during compilation
- https://github.com/php/php-src/commit/a9e6667817c38f22f4645ec5b4e5c6b0e4b928fa
- 親のないクラスでの
parent::
をコンパイルエラーとするよう修正 - 以前はランタイムエラーだった
- 実行されないコードだとエラーにならなかったのがエラーになるようになるので、若干後方互換性の崩れる部分となる
nikic: Resolve parent::class at compile-time if possible
- https://github.com/php/php-src/commit/9ca217f506afe86e1e638782474df6c11d0a6380
-
parent::class
を可能ならコンパイル時に解決するよう修正
Andrey Hristov: Add type safety for mysqlnd plugin developers
- https://github.com/php/php-src/commit/4c4216bcab782eb5875c49d61ce591563e0a641b
- ext/mysqlnd で、プラグインで使う用に typedef を追加
- コミットコメントおおげさじゃないの!
nikic: Fix bug #77410
- https://github.com/php/php-src/commit/361d3ede9394d03defba64237628e6b1a0a2a16b
- [7.3~]
- ext/soap で、メソッドを空配列のパラメータで起動しようとすると SEGV が出る問題の修正
Andrey Hristov: const-ify some functions
- https://github.com/php/php-src/commit/f1ede80781e0555e83dec6b160a051c3fc8f6baf
- ext/mysqlnd で、幾つかの宣言に const を足した