]> granicus.if.org Git - php/commitdiff
Split into fully_dereferencable and array_dereferencable
authorNikita Popov <nikita.ppv@gmail.com>
Mon, 6 Jan 2020 14:10:06 +0000 (15:10 +0100)
committerNikita Popov <nikita.ppv@gmail.com>
Tue, 11 Feb 2020 11:33:23 +0000 (12:33 +0100)
Zend/zend_language_parser.y

index 02d907c7fc92b1f7f957605c362feacdfa3d6a9e..4b1a5f99419a794387522a43a14b0b37534766a6 100644 (file)
@@ -241,7 +241,8 @@ static YYSIZE_T zend_yytnamerr(char*, const char*);
 %type <ast> new_expr anonymous_class class_name class_name_reference simple_variable
 %type <ast> internal_functions_in_yacc
 %type <ast> exit_expr scalar backticks_expr lexical_var function_call member_name property_name
-%type <ast> variable_class_name dereferencable_scalar constant class_constant dereferencable
+%type <ast> variable_class_name dereferencable_scalar constant class_constant
+%type <ast> fully_dereferencable array_dereferencable
 %type <ast> callable_expr callable_variable static_member new_variable
 %type <ast> encaps_var encaps_var_offset isset_variables
 %type <ast> top_statement_list use_declarations const_list inner_statement_list if_stmt
@@ -1142,15 +1143,21 @@ optional_expr:
 ;
 
 variable_class_name:
-       dereferencable { $$ = $1; }
+               fully_dereferencable { $$ = $1; }
 ;
 
-dereferencable:
+fully_dereferencable:
                variable                                { $$ = $1; }
        |       '(' expr ')'                    { $$ = $2; }
        |       dereferencable_scalar   { $$ = $1; }
 ;
 
+array_dereferencable:
+               fully_dereferencable    { $$ = $1; }
+       |       constant                                { $$ = $1; }
+       |       class_constant                  { $$ = $1; }
+;
+
 callable_expr:
                callable_variable               { $$ = $1; }
        |       '(' expr ')'                    { $$ = $2; }
@@ -1160,15 +1167,11 @@ callable_expr:
 callable_variable:
                simple_variable
                        { $$ = zend_ast_create(ZEND_AST_VAR, $1); }
-       |       dereferencable '[' optional_expr ']'
-                       { $$ = zend_ast_create(ZEND_AST_DIM, $1, $3); }
-       |       constant '[' optional_expr ']'
-                       { $$ = zend_ast_create(ZEND_AST_DIM, $1, $3); }
-       |       class_constant '[' optional_expr ']'
+       |       array_dereferencable '[' optional_expr ']'
                        { $$ = zend_ast_create(ZEND_AST_DIM, $1, $3); }
-       |       dereferencable '{' expr '}'
+       |       array_dereferencable '{' expr '}'
                        { $$ = zend_ast_create_ex(ZEND_AST_DIM, ZEND_DIM_ALTERNATIVE_SYNTAX, $1, $3); }
-       |       dereferencable T_OBJECT_OPERATOR property_name argument_list
+       |       fully_dereferencable T_OBJECT_OPERATOR property_name argument_list
                        { $$ = zend_ast_create(ZEND_AST_METHOD_CALL, $1, $3, $4); }
        |       function_call { $$ = $1; }
 ;
@@ -1178,7 +1181,7 @@ variable:
                        { $$ = $1; }
        |       static_member
                        { $$ = $1; }
-       |       dereferencable T_OBJECT_OPERATOR property_name
+       |       fully_dereferencable T_OBJECT_OPERATOR property_name
                        { $$ = zend_ast_create(ZEND_AST_PROP, $1, $3); }
 ;