diff options
author | sunnyeo <psnyeo88@kaist.ac.kr> | 2019-06-28 16:06:01 +0200 |
---|---|---|
committer | Nikita Popov <nikita.ppv@gmail.com> | 2019-06-28 16:08:44 +0200 |
commit | f7327b62442304707f1c6466782c9f8530b61788 (patch) | |
tree | a03a9744541689974ec86e77d3cf83f09f82f0df | |
parent | 05c00a832c7b395398ef8e60edd8a7ec25439861 (diff) | |
download | php-git-f7327b62442304707f1c6466782c9f8530b61788.tar.gz |
Fix bugs in AST printer
Closes GH-4324.
-rw-r--r-- | Zend/tests/assert/expect_020.phpt | 17 | ||||
-rw-r--r-- | Zend/zend_ast.c | 9 |
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 b7aa87e2c5..6e3447eb73 100644 --- a/Zend/zend_ast.c +++ b/Zend/zend_ast.c @@ -731,6 +731,11 @@ static 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 void zend_ast_export_var(smart_str *str, zend_ast *ast, int priority, int indent) { if (ast->kind == ZEND_AST_ZVAL) { @@ -778,7 +783,7 @@ static void zend_ast_export_encaps_list(smart_str *str, char quote, zend_ast_lis 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); @@ -1390,6 +1395,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: |