Skip to content

Commit de7c7ef

Browse files
committed
Unify array and object dereferencability
1 parent 465e6f5 commit de7c7ef

File tree

2 files changed

+30
-6
lines changed

2 files changed

+30
-6
lines changed
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
--TEST--
2+
Constants can be dereferenced as objects (even though they can't be objects)
3+
--FILE--
4+
<?php
5+
6+
const FOO = "foo";
7+
class Bar { const FOO = "foo"; }
8+
9+
try {
10+
FOO->length();
11+
} catch (Error $e) {
12+
echo $e->getMessage(), "\n";
13+
}
14+
15+
try {
16+
Bar::FOO->length();
17+
} catch (Error $e) {
18+
echo $e->getMessage(), "\n";
19+
}
20+
21+
?>
22+
--EXPECT--
23+
Call to a member function length() on string
24+
Call to a member function length() on string

Zend/zend_language_parser.y

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -242,7 +242,7 @@ static YYSIZE_T zend_yytnamerr(char*, const char*);
242242
%type <ast> internal_functions_in_yacc
243243
%type <ast> exit_expr scalar backticks_expr lexical_var function_call member_name property_name
244244
%type <ast> variable_class_name dereferencable_scalar constant class_constant
245-
%type <ast> fully_dereferencable array_dereferencable
245+
%type <ast> fully_dereferencable array_object_dereferencable
246246
%type <ast> callable_expr callable_variable static_member new_variable
247247
%type <ast> encaps_var encaps_var_offset isset_variables
248248
%type <ast> top_statement_list use_declarations const_list inner_statement_list if_stmt
@@ -1152,7 +1152,7 @@ fully_dereferencable:
11521152
| dereferencable_scalar { $$ = $1; }
11531153
;
11541154

1155-
array_dereferencable:
1155+
array_object_dereferencable:
11561156
fully_dereferencable { $$ = $1; }
11571157
| constant { $$ = $1; }
11581158
| class_constant { $$ = $1; }
@@ -1167,11 +1167,11 @@ callable_expr:
11671167
callable_variable:
11681168
simple_variable
11691169
{ $$ = zend_ast_create(ZEND_AST_VAR, $1); }
1170-
| array_dereferencable '[' optional_expr ']'
1170+
| array_object_dereferencable '[' optional_expr ']'
11711171
{ $$ = zend_ast_create(ZEND_AST_DIM, $1, $3); }
1172-
| array_dereferencable '{' expr '}'
1172+
| array_object_dereferencable '{' expr '}'
11731173
{ $$ = zend_ast_create_ex(ZEND_AST_DIM, ZEND_DIM_ALTERNATIVE_SYNTAX, $1, $3); }
1174-
| fully_dereferencable T_OBJECT_OPERATOR property_name argument_list
1174+
| array_object_dereferencable T_OBJECT_OPERATOR property_name argument_list
11751175
{ $$ = zend_ast_create(ZEND_AST_METHOD_CALL, $1, $3, $4); }
11761176
| function_call { $$ = $1; }
11771177
;
@@ -1181,7 +1181,7 @@ variable:
11811181
{ $$ = $1; }
11821182
| static_member
11831183
{ $$ = $1; }
1184-
| fully_dereferencable T_OBJECT_OPERATOR property_name
1184+
| array_object_dereferencable T_OBJECT_OPERATOR property_name
11851185
{ $$ = zend_ast_create(ZEND_AST_PROP, $1, $3); }
11861186
;
11871187

0 commit comments

Comments
 (0)