diff options
author | Nikita Popov <nikita.ppv@gmail.com> | 2019-01-04 10:49:23 +0100 |
---|---|---|
committer | Nikita Popov <nikita.ppv@gmail.com> | 2019-01-04 10:49:23 +0100 |
commit | 290adc41321a6fb0dfe71f1a8058a87ae4c6cab1 (patch) | |
tree | 579bd8e22a3251e007f5af47b6f8717e35e536a0 /Zend/zend_ast.c | |
parent | 03094c7af304f6fa48da641e20f91b6ec7f9876f (diff) | |
download | php-git-290adc41321a6fb0dfe71f1a8058a87ae4c6cab1.tar.gz |
Introduce separate ZEND_AST_CLASS_NAME AST node
Instead of representing this as a ZEND_AST_CLASS_CONST with a
"class" constant name.
Class constants and ::class are unrelated features that happen to
share syntax, so represent and handle them separately.
Diffstat (limited to 'Zend/zend_ast.c')
-rw-r--r-- | Zend/zend_ast.c | 14 |
1 files changed, 14 insertions, 0 deletions
diff --git a/Zend/zend_ast.c b/Zend/zend_ast.c index 834696c2ca..b691dce0e0 100644 --- a/Zend/zend_ast.c +++ b/Zend/zend_ast.c @@ -102,6 +102,16 @@ ZEND_API zend_ast * ZEND_FASTCALL zend_ast_create_constant(zend_string *name, ze return (zend_ast *) ast; } +ZEND_API zend_ast * ZEND_FASTCALL zend_ast_create_class_const_or_name(zend_ast *class, zend_ast *name) { + zend_string *name_str = zend_ast_get_str(name); + if (zend_string_equals_literal_ci(name_str, "class")) { + zend_string_release(name_str); + return zend_ast_create(ZEND_AST_CLASS_NAME, class); + } else { + return zend_ast_create(ZEND_AST_CLASS_CONST, class, name); + } +} + ZEND_API zend_ast *zend_ast_create_decl( zend_ast_kind kind, uint32_t flags, uint32_t start_lineno, zend_string *doc_comment, zend_string *name, zend_ast *child0, zend_ast *child1, zend_ast *child2, zend_ast *child3 @@ -1606,6 +1616,10 @@ simple_list: smart_str_appends(str, "::"); zend_ast_export_name(str, ast->child[1], 0, indent); break; + case ZEND_AST_CLASS_NAME: + zend_ast_export_ns_name(str, ast->child[0], 0, indent); + smart_str_appends(str, "::class"); + break; case ZEND_AST_ASSIGN: BINARY_OP(" = ", 90, 91, 90); case ZEND_AST_ASSIGN_REF: BINARY_OP(" =& ", 90, 91, 90); case ZEND_AST_ASSIGN_OP: |