summaryrefslogtreecommitdiff
path: root/Zend
diff options
context:
space:
mode:
authorNikita Popov <nikita.ppv@gmail.com>2019-06-28 16:11:37 +0200
committerNikita Popov <nikita.ppv@gmail.com>2019-06-28 16:11:37 +0200
commit0588c38a2c3b4a104c7cbcb8d6fab13593415d90 (patch)
treed37b160436b38f879bec2cb5fc04bdd9e5aee6d5 /Zend
parentb98c148f78de02b1baa865003373136191483d7f (diff)
parent345a3b277cf2edb37c8235bf18371bf37ab3b121 (diff)
downloadphp-git-0588c38a2c3b4a104c7cbcb8d6fab13593415d90.tar.gz
Merge branch 'PHP-7.4'
Diffstat (limited to 'Zend')
-rw-r--r--Zend/tests/assert/expect_020.phpt17
-rw-r--r--Zend/zend_ast.c9
2 files changed, 25 insertions, 1 deletions
diff --git a/Zend/tests/assert/expect_020.phpt b/Zend/tests/assert/expect_020.phpt
new file mode 100644
index 0000000000..ef8fd5ec12
--- /dev/null
+++ b/Zend/tests/assert/expect_020.phpt
@@ -0,0 +1,17 @@
+--TEST--
+AST pretty-printer
+--INI--
+zend.assertions=1
+assert.exception=0
+--FILE--
+<?php
+assert(0 && ($a = function () {
+ $var = 'test';
+ $str = "$var, $var[1], {$var}[], {$var[1]}[], ${var}[], ${var[1]}[]";
+}));
+?>
+--EXPECTF--
+Warning: assert(): assert(0 && ($a = function () {
+ $var = 'test';
+ $str = "$var, {$var[1]}, {$var}[], {$var[1]}[], {$var}[], {$var[1]}[]";
+})) failed in %sexpect_020.php on line %d
diff --git a/Zend/zend_ast.c b/Zend/zend_ast.c
index ee9c9dd326..7a68554ce4 100644
--- a/Zend/zend_ast.c
+++ b/Zend/zend_ast.c
@@ -1062,6 +1062,11 @@ static ZEND_COLD int zend_ast_valid_var_name(const char *s, size_t len)
return 1;
}
+static ZEND_COLD int zend_ast_var_needs_braces(char ch)
+{
+ return ch == '[' || zend_ast_valid_var_char(ch);
+}
+
static ZEND_COLD void zend_ast_export_var(smart_str *str, zend_ast *ast, int priority, int indent)
{
if (ast->kind == ZEND_AST_ZVAL) {
@@ -1109,7 +1114,7 @@ static ZEND_COLD void zend_ast_export_encaps_list(smart_str *str, char quote, ze
ast->child[0]->kind == ZEND_AST_ZVAL &&
(i + 1 == list->children ||
list->child[i + 1]->kind != ZEND_AST_ZVAL ||
- !zend_ast_valid_var_char(
+ !zend_ast_var_needs_braces(
*Z_STRVAL_P(
zend_ast_get_zval(list->child[i + 1]))))) {
zend_ast_export_ex(str, ast, 0, indent);
@@ -1759,6 +1764,8 @@ simple_list:
zend_ast_export_ex(str, ast->child[1], 80, indent);
smart_str_appends(str, " => ");
}
+ if (ast->attr)
+ smart_str_appendc(str, '&');
zend_ast_export_ex(str, ast->child[0], 80, indent);
break;
case ZEND_AST_NEW: