From: Bob Weinand Date: Thu, 21 Apr 2016 00:50:14 +0000 (+0200) Subject: Merge remote-tracking branch 'origin/PHP-7.0' X-Git-Tag: php-7.1.0alpha1~289^2 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=ecf6392243b90e6c8f5597076b11b4959bac9dc1;p=php Merge remote-tracking branch 'origin/PHP-7.0' --- ecf6392243b90e6c8f5597076b11b4959bac9dc1 diff --cc Zend/zend_compile.c index 842fa64563,20575360c3..af2d2e95cb --- a/Zend/zend_compile.c +++ b/Zend/zend_compile.c @@@ -7862,10 -7385,28 +7864,30 @@@ void zend_eval_const_expr(zend_ast **as return; } - zend_ct_eval_unary_pm(&result, ast->kind, zend_ast_get_zval(ast->child[0])); + if (!zend_try_ct_eval_unary_pm(&result, ast->kind, zend_ast_get_zval(ast->child[0]))) { + return; + } break; + case ZEND_AST_COALESCE: + zend_eval_const_expr(&ast->child[0]); + + if (ast->child[0]->kind != ZEND_AST_ZVAL) { + /* ensure everything was compile-time evaluated at least once */ + zend_eval_const_expr(&ast->child[1]); + return; + } + + if (Z_TYPE_P(zend_ast_get_zval(ast->child[0])) == IS_NULL) { + zend_eval_const_expr(&ast->child[1]); + *ast_ptr = ast->child[1]; + ast->child[1] = NULL; + zend_ast_destroy(ast); + } else { + *ast_ptr = ast->child[0]; + ast->child[0] = NULL; + zend_ast_destroy(ast); + } + return; case ZEND_AST_CONDITIONAL: { zend_ast **child, *child_ast;