summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Zend/zend_compile.c1
-rw-r--r--Zend/zend_language_parser.y6
2 files changed, 3 insertions, 4 deletions
diff --git a/Zend/zend_compile.c b/Zend/zend_compile.c
index 545b840672..b9b06f019e 100644
--- a/Zend/zend_compile.c
+++ b/Zend/zend_compile.c
@@ -3879,6 +3879,7 @@ void zend_compile_assign_ref(znode *result, zend_ast *ast TSRMLS_DC) {
if (zend_is_call(source_ast)) {
opline->extended_value = ZEND_RETURNS_FUNCTION;
} else if (source_ast->kind == ZEND_AST_NEW) {
+ zend_error(E_DEPRECATED, "Assigning the return value of new by reference is deprecated");
opline->extended_value = ZEND_RETURNS_NEW;
}
}
diff --git a/Zend/zend_language_parser.y b/Zend/zend_language_parser.y
index 00ebeca557..e86e5e2fa1 100644
--- a/Zend/zend_language_parser.y
+++ b/Zend/zend_language_parser.y
@@ -760,10 +760,8 @@ expr_without_variable:
{ $$ = zend_ast_create(ZEND_AST_ASSIGN, $1, $3); }
| variable '=' '&' variable
{ $$ = zend_ast_create(ZEND_AST_ASSIGN_REF, $1, $4); }
- | variable '=' '&' T_NEW class_name_reference ctor_arguments
- { zend_error(E_DEPRECATED, "Assigning the return value of new by reference is deprecated");
- $$ = zend_ast_create(ZEND_AST_ASSIGN_REF, $1,
- zend_ast_create(ZEND_AST_NEW, $5, $6)); }
+ | variable '=' '&' new_expr
+ { $$ = zend_ast_create(ZEND_AST_ASSIGN_REF, $1, $4); }
| T_CLONE expr { $$ = zend_ast_create(ZEND_AST_CLONE, $2); }
| variable T_PLUS_EQUAL expr
{ $$ = zend_ast_create_assign_op(ZEND_ASSIGN_ADD, $1, $3); }