Split class_constant from constant production

This commit is contained in:
Nikita Popov 2020-01-06 15:03:55 +01:00
parent 24e365f9e2
commit cf5689e961

View file

@ -241,7 +241,7 @@ static YYSIZE_T zend_yytnamerr(char*, const char*);
%type <ast> new_expr anonymous_class class_name class_name_reference simple_variable %type <ast> new_expr anonymous_class class_name class_name_reference simple_variable
%type <ast> internal_functions_in_yacc %type <ast> internal_functions_in_yacc
%type <ast> exit_expr scalar backticks_expr lexical_var function_call member_name property_name %type <ast> exit_expr scalar backticks_expr lexical_var function_call member_name property_name
%type <ast> variable_class_name dereferencable_scalar constant dereferencable %type <ast> variable_class_name dereferencable_scalar constant class_constant dereferencable
%type <ast> callable_expr callable_variable static_member new_variable %type <ast> callable_expr callable_variable static_member new_variable
%type <ast> encaps_var encaps_var_offset isset_variables %type <ast> encaps_var encaps_var_offset isset_variables
%type <ast> top_statement_list use_declarations const_list inner_statement_list if_stmt %type <ast> 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()); } { $$ = zend_ast_create_zval_from_str(ZSTR_EMPTY_ALLOC()); }
| T_START_HEREDOC encaps_list T_END_HEREDOC { $$ = $2; } | T_START_HEREDOC encaps_list T_END_HEREDOC { $$ = $2; }
| dereferencable_scalar { $$ = $1; } | dereferencable_scalar { $$ = $1; }
| constant { $$ = $1; } | constant { $$ = $1; }
| class_constant { $$ = $1; }
; ;
constant: constant:
name { $$ = zend_ast_create(ZEND_AST_CONST, $1); } 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); } { $$ = zend_ast_create_class_const_or_name($1, $3); }
| variable_class_name T_PAAMAYIM_NEKUDOTAYIM identifier | variable_class_name T_PAAMAYIM_NEKUDOTAYIM identifier
{ $$ = zend_ast_create_class_const_or_name($1, $3); } { $$ = zend_ast_create_class_const_or_name($1, $3); }
@ -1160,6 +1164,8 @@ callable_variable:
{ $$ = zend_ast_create(ZEND_AST_DIM, $1, $3); } { $$ = zend_ast_create(ZEND_AST_DIM, $1, $3); }
| constant '[' optional_expr ']' | constant '[' optional_expr ']'
{ $$ = zend_ast_create(ZEND_AST_DIM, $1, $3); } { $$ = zend_ast_create(ZEND_AST_DIM, $1, $3); }
| class_constant '[' optional_expr ']'
{ $$ = zend_ast_create(ZEND_AST_DIM, $1, $3); }
| dereferencable '{' expr '}' | dereferencable '{' expr '}'
{ $$ = zend_ast_create_ex(ZEND_AST_DIM, ZEND_DIM_ALTERNATIVE_SYNTAX, $1, $3); } { $$ = zend_ast_create_ex(ZEND_AST_DIM, ZEND_DIM_ALTERNATIVE_SYNTAX, $1, $3); }
| dereferencable T_OBJECT_OPERATOR property_name argument_list | dereferencable T_OBJECT_OPERATOR property_name argument_list