From cf5689e96181df81ed9e4fce954aa94f6a8697f8 Mon Sep 17 00:00:00 2001 From: Nikita Popov Date: Mon, 6 Jan 2020 15:03:55 +0100 Subject: [PATCH] Split class_constant from constant production --- Zend/zend_language_parser.y | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/Zend/zend_language_parser.y b/Zend/zend_language_parser.y index 22e0ebfa58f..02d907c7fc9 100644 --- a/Zend/zend_language_parser.y +++ b/Zend/zend_language_parser.y @@ -241,7 +241,7 @@ static YYSIZE_T zend_yytnamerr(char*, const char*); %type new_expr anonymous_class class_name class_name_reference simple_variable %type internal_functions_in_yacc %type exit_expr scalar backticks_expr lexical_var function_call member_name property_name -%type variable_class_name dereferencable_scalar constant dereferencable +%type variable_class_name dereferencable_scalar constant class_constant dereferencable %type callable_expr callable_variable static_member new_variable %type encaps_var encaps_var_offset isset_variables %type top_statement_list use_declarations const_list inner_statement_list if_stmt @@ -1121,12 +1121,16 @@ scalar: { $$ = zend_ast_create_zval_from_str(ZSTR_EMPTY_ALLOC()); } | T_START_HEREDOC encaps_list T_END_HEREDOC { $$ = $2; } | dereferencable_scalar { $$ = $1; } - | constant { $$ = $1; } + | constant { $$ = $1; } + | class_constant { $$ = $1; } ; constant: name { $$ = zend_ast_create(ZEND_AST_CONST, $1); } - | class_name T_PAAMAYIM_NEKUDOTAYIM identifier +; + +class_constant: + class_name T_PAAMAYIM_NEKUDOTAYIM identifier { $$ = zend_ast_create_class_const_or_name($1, $3); } | variable_class_name T_PAAMAYIM_NEKUDOTAYIM identifier { $$ = zend_ast_create_class_const_or_name($1, $3); } @@ -1160,6 +1164,8 @@ callable_variable: { $$ = zend_ast_create(ZEND_AST_DIM, $1, $3); } | constant '[' optional_expr ']' { $$ = zend_ast_create(ZEND_AST_DIM, $1, $3); } + | class_constant '[' optional_expr ']' + { $$ = zend_ast_create(ZEND_AST_DIM, $1, $3); } | dereferencable '{' expr '}' { $$ = zend_ast_create_ex(ZEND_AST_DIM, ZEND_DIM_ALTERNATIVE_SYNTAX, $1, $3); } | dereferencable T_OBJECT_OPERATOR property_name argument_list