@@ -241,7 +241,8 @@ static YYSIZE_T zend_yytnamerr(char*, const char*);
241241%type <ast> new_expr anonymous_class class_name class_name_reference simple_variable
242242%type <ast> internal_functions_in_yacc
243243%type <ast> exit_expr scalar backticks_expr lexical_var function_call member_name property_name
244- %type <ast> variable_class_name dereferencable_scalar constant class_constant dereferencable
244+ %type <ast> variable_class_name dereferencable_scalar constant class_constant
245+ %type <ast> fully_dereferencable array_dereferencable
245246%type <ast> callable_expr callable_variable static_member new_variable
246247%type <ast> encaps_var encaps_var_offset isset_variables
247248%type <ast> top_statement_list use_declarations const_list inner_statement_list if_stmt
@@ -1142,15 +1143,21 @@ optional_expr:
11421143;
11431144
11441145variable_class_name :
1145- dereferencable { $$ = $1 ; }
1146+ fully_dereferencable { $$ = $1 ; }
11461147;
11471148
1148- dereferencable :
1149+ fully_dereferencable :
11491150 variable { $$ = $1 ; }
11501151 | ' (' expr ' )' { $$ = $2 ; }
11511152 | dereferencable_scalar { $$ = $1 ; }
11521153;
11531154
1155+ array_dereferencable :
1156+ fully_dereferencable { $$ = $1 ; }
1157+ | constant { $$ = $1 ; }
1158+ | class_constant { $$ = $1 ; }
1159+ ;
1160+
11541161callable_expr :
11551162 callable_variable { $$ = $1 ; }
11561163 | ' (' expr ' )' { $$ = $2 ; }
@@ -1160,15 +1167,11 @@ callable_expr:
11601167callable_variable :
11611168 simple_variable
11621169 { $$ = zend_ast_create(ZEND_AST_VAR, $1 ); }
1163- | dereferencable ' [' optional_expr ' ]'
1164- { $$ = zend_ast_create(ZEND_AST_DIM, $1 , $3 ); }
1165- | constant ' [' optional_expr ' ]'
1166- { $$ = zend_ast_create(ZEND_AST_DIM, $1 , $3 ); }
1167- | class_constant ' [' optional_expr ' ]'
1170+ | array_dereferencable ' [' optional_expr ' ]'
11681171 { $$ = zend_ast_create(ZEND_AST_DIM, $1 , $3 ); }
1169- | dereferencable ' {' expr ' }'
1172+ | array_dereferencable ' {' expr ' }'
11701173 { $$ = zend_ast_create_ex(ZEND_AST_DIM, ZEND_DIM_ALTERNATIVE_SYNTAX, $1 , $3 ); }
1171- | dereferencable T_OBJECT_OPERATOR property_name argument_list
1174+ | fully_dereferencable T_OBJECT_OPERATOR property_name argument_list
11721175 { $$ = zend_ast_create(ZEND_AST_METHOD_CALL, $1 , $3 , $4 ); }
11731176 | function_call { $$ = $1 ; }
11741177;
@@ -1178,7 +1181,7 @@ variable:
11781181 { $$ = $1 ; }
11791182 | static_member
11801183 { $$ = $1 ; }
1181- | dereferencable T_OBJECT_OPERATOR property_name
1184+ | fully_dereferencable T_OBJECT_OPERATOR property_name
11821185 { $$ = zend_ast_create(ZEND_AST_PROP, $1 , $3 ); }
11831186;
11841187
0 commit comments