More Related Content
Similar to PHP7を魔改造した話 (20)
More from Moriyoshi Koizumi (19)
PHP7を魔改造した話
- 3. 他のサンプル
<?php
$db = new PDO('...');
$rows = $db->query('SELECT hoge, fuga FROM foo;');
foreach ($rows as [$hoge, $fuga]) {
// ...
}
- 5. zend_language_parser.y
• 最初は T_LIST ’(’ assignment_list ’)’ をパースしている部分に
’[’ assignment_list ’]’ をカジュアルに突っ込んでみた
• reduce / reduce conflict が発生する
• [$a, $b, $c] = [$a, $b, $c] = [$a, $b, $c]
のようなケースでの曖昧さ
• ZEND_AST_LIST を生成するルールを取り除き ZEND_AST_ARRAY を生
成するルールに一本化することで曖昧さを回避
• 代入として正しくない構文は AST の解析時にエラーを出す
• PHP7でとてもやりやすくなった部分
- 6. zend_compile.c
• ZEND_AST_LIST を扱っているところを ZEND_AST_ARRAY に書き換え
て回る
• ZEND_AST_LIST と ZEND_AST_ARRAY とでは木構造が異なるので、そ
の部分も修正
ZEND_AST_LIST
ZEND_AST_VAR ZEND_AST_VAR
ZEND_AST_ARRAY
ZEND_AST_ARRAY_ELEM ZEND_AST_ARRAY_ELEM
ZEND_AST_EXPRZEND_AST_EXPR ZEND_AST_EXPR ZEND_AST_EXPR