summaryrefslogtreecommitdiff
path: root/Zend
diff options
context:
space:
mode:
authorDmitry Stogov <dmitry@zend.com>2020-02-06 15:57:29 +0300
committerDmitry Stogov <dmitry@zend.com>2020-02-06 15:57:29 +0300
commitb53445422afcc9b55f03161f56e91193e1287d1a (patch)
tree33f8a725815c1ee4c685d76ee620c1ed6a7ab9ba /Zend
parentc3e65d90690be1ad201c05d5b635a41479c9e8a0 (diff)
parent5d0ef4c239eb5a2c9e0d267c57bf71f7c562c575 (diff)
downloadphp-git-b53445422afcc9b55f03161f56e91193e1287d1a.tar.gz
Merge branch 'PHP-7.4'
* PHP-7.4: Make opcodes to return de-refereced values of typed references (in the same was as for non-typed)
Diffstat (limited to 'Zend')
-rw-r--r--Zend/zend_execute.c4
-rw-r--r--Zend/zend_vm_def.h6
-rw-r--r--Zend/zend_vm_execute.h32
3 files changed, 21 insertions, 21 deletions
diff --git a/Zend/zend_execute.c b/Zend/zend_execute.c
index 3d82501efb..460f59e5d1 100644
--- a/Zend/zend_execute.c
+++ b/Zend/zend_execute.c
@@ -1770,11 +1770,11 @@ static void zend_pre_incdec_property_zval(zval *prop, zend_property_info *prop_i
do {
if (Z_ISREF_P(prop)) {
zend_reference *ref = Z_REF_P(prop);
+ prop = Z_REFVAL_P(prop);
if (UNEXPECTED(ZEND_REF_HAS_TYPE_SOURCES(ref))) {
zend_incdec_typed_ref(ref, NULL OPLINE_CC EXECUTE_DATA_CC);
break;
}
- prop = Z_REFVAL_P(prop);
}
if (UNEXPECTED(prop_info)) {
@@ -1808,11 +1808,11 @@ static void zend_post_incdec_property_zval(zval *prop, zend_property_info *prop_
} else {
if (Z_ISREF_P(prop)) {
zend_reference *ref = Z_REF_P(prop);
+ prop = Z_REFVAL_P(prop);
if (ZEND_REF_HAS_TYPE_SOURCES(ref)) {
zend_incdec_typed_ref(ref, EX_VAR(opline->result.var) OPLINE_CC EXECUTE_DATA_CC);
return;
}
- prop = Z_REFVAL_P(prop);
}
if (UNEXPECTED(prop_info)) {
diff --git a/Zend/zend_vm_def.h b/Zend/zend_vm_def.h
index 29c214bb55..a2127f80b3 100644
--- a/Zend/zend_vm_def.h
+++ b/Zend/zend_vm_def.h
@@ -1046,11 +1046,11 @@ ZEND_VM_C_LABEL(assign_op_object):
do {
if (UNEXPECTED(Z_ISREF_P(zptr))) {
ref = Z_REF_P(zptr);
+ zptr = Z_REFVAL_P(zptr);
if (UNEXPECTED(ZEND_REF_HAS_TYPE_SOURCES(ref))) {
zend_binary_assign_op_typed_ref(ref, value OPLINE_CC EXECUTE_DATA_CC);
break;
}
- zptr = Z_REFVAL_P(zptr);
}
if (OP2_TYPE == IS_CONST) {
@@ -1109,11 +1109,11 @@ ZEND_VM_HANDLER(29, ZEND_ASSIGN_STATIC_PROP_OP, ANY, ANY, OP)
do {
if (UNEXPECTED(Z_ISREF_P(prop))) {
ref = Z_REF_P(prop);
+ prop = Z_REFVAL_P(prop);
if (UNEXPECTED(ZEND_REF_HAS_TYPE_SOURCES(ref))) {
zend_binary_assign_op_typed_ref(ref, value OPLINE_CC EXECUTE_DATA_CC);
break;
}
- prop = Z_REFVAL_P(prop);
}
if (UNEXPECTED(ZEND_TYPE_IS_SET(prop_info->type))) {
@@ -1230,11 +1230,11 @@ ZEND_VM_HANDLER(26, ZEND_ASSIGN_OP, VAR|CV, CONST|TMPVAR|CV, OP)
do {
if (UNEXPECTED(Z_TYPE_P(var_ptr) == IS_REFERENCE)) {
zend_reference *ref = Z_REF_P(var_ptr);
+ var_ptr = Z_REFVAL_P(var_ptr);
if (UNEXPECTED(ZEND_REF_HAS_TYPE_SOURCES(ref))) {
zend_binary_assign_op_typed_ref(ref, value OPLINE_CC EXECUTE_DATA_CC);
break;
}
- var_ptr = Z_REFVAL_P(var_ptr);
}
zend_binary_op(var_ptr, var_ptr, value OPLINE_CC);
} while (0);
diff --git a/Zend/zend_vm_execute.h b/Zend/zend_vm_execute.h
index 2b05a0138e..15232d8dab 100644
--- a/Zend/zend_vm_execute.h
+++ b/Zend/zend_vm_execute.h
@@ -788,11 +788,11 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_STATIC_PROP_OP_SPEC_HAN
do {
if (UNEXPECTED(Z_ISREF_P(prop))) {
ref = Z_REF_P(prop);
+ prop = Z_REFVAL_P(prop);
if (UNEXPECTED(ZEND_REF_HAS_TYPE_SOURCES(ref))) {
zend_binary_assign_op_typed_ref(ref, value OPLINE_CC EXECUTE_DATA_CC);
break;
}
- prop = Z_REFVAL_P(prop);
}
if (UNEXPECTED(ZEND_TYPE_IS_SET(prop_info->type))) {
@@ -20967,11 +20967,11 @@ assign_op_object:
do {
if (UNEXPECTED(Z_ISREF_P(zptr))) {
ref = Z_REF_P(zptr);
+ zptr = Z_REFVAL_P(zptr);
if (UNEXPECTED(ZEND_REF_HAS_TYPE_SOURCES(ref))) {
zend_binary_assign_op_typed_ref(ref, value OPLINE_CC EXECUTE_DATA_CC);
break;
}
- zptr = Z_REFVAL_P(zptr);
}
if (IS_CONST == IS_CONST) {
@@ -21103,11 +21103,11 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OP_SPEC_VAR_CONST_HANDL
do {
if (UNEXPECTED(Z_TYPE_P(var_ptr) == IS_REFERENCE)) {
zend_reference *ref = Z_REF_P(var_ptr);
+ var_ptr = Z_REFVAL_P(var_ptr);
if (UNEXPECTED(ZEND_REF_HAS_TYPE_SOURCES(ref))) {
zend_binary_assign_op_typed_ref(ref, value OPLINE_CC EXECUTE_DATA_CC);
break;
}
- var_ptr = Z_REFVAL_P(var_ptr);
}
zend_binary_op(var_ptr, var_ptr, value OPLINE_CC);
} while (0);
@@ -23232,11 +23232,11 @@ assign_op_object:
do {
if (UNEXPECTED(Z_ISREF_P(zptr))) {
ref = Z_REF_P(zptr);
+ zptr = Z_REFVAL_P(zptr);
if (UNEXPECTED(ZEND_REF_HAS_TYPE_SOURCES(ref))) {
zend_binary_assign_op_typed_ref(ref, value OPLINE_CC EXECUTE_DATA_CC);
break;
}
- zptr = Z_REFVAL_P(zptr);
}
if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
@@ -23369,11 +23369,11 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OP_SPEC_VAR_TMPVAR_HAND
do {
if (UNEXPECTED(Z_TYPE_P(var_ptr) == IS_REFERENCE)) {
zend_reference *ref = Z_REF_P(var_ptr);
+ var_ptr = Z_REFVAL_P(var_ptr);
if (UNEXPECTED(ZEND_REF_HAS_TYPE_SOURCES(ref))) {
zend_binary_assign_op_typed_ref(ref, value OPLINE_CC EXECUTE_DATA_CC);
break;
}
- var_ptr = Z_REFVAL_P(var_ptr);
}
zend_binary_op(var_ptr, var_ptr, value OPLINE_CC);
} while (0);
@@ -26688,11 +26688,11 @@ assign_op_object:
do {
if (UNEXPECTED(Z_ISREF_P(zptr))) {
ref = Z_REF_P(zptr);
+ zptr = Z_REFVAL_P(zptr);
if (UNEXPECTED(ZEND_REF_HAS_TYPE_SOURCES(ref))) {
zend_binary_assign_op_typed_ref(ref, value OPLINE_CC EXECUTE_DATA_CC);
break;
}
- zptr = Z_REFVAL_P(zptr);
}
if (IS_CV == IS_CONST) {
@@ -26824,11 +26824,11 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OP_SPEC_VAR_CV_HANDLER(
do {
if (UNEXPECTED(Z_TYPE_P(var_ptr) == IS_REFERENCE)) {
zend_reference *ref = Z_REF_P(var_ptr);
+ var_ptr = Z_REFVAL_P(var_ptr);
if (UNEXPECTED(ZEND_REF_HAS_TYPE_SOURCES(ref))) {
zend_binary_assign_op_typed_ref(ref, value OPLINE_CC EXECUTE_DATA_CC);
break;
}
- var_ptr = Z_REFVAL_P(var_ptr);
}
zend_binary_op(var_ptr, var_ptr, value OPLINE_CC);
} while (0);
@@ -29129,11 +29129,11 @@ assign_op_object:
do {
if (UNEXPECTED(Z_ISREF_P(zptr))) {
ref = Z_REF_P(zptr);
+ zptr = Z_REFVAL_P(zptr);
if (UNEXPECTED(ZEND_REF_HAS_TYPE_SOURCES(ref))) {
zend_binary_assign_op_typed_ref(ref, value OPLINE_CC EXECUTE_DATA_CC);
break;
}
- zptr = Z_REFVAL_P(zptr);
}
if (IS_CONST == IS_CONST) {
@@ -30999,11 +30999,11 @@ assign_op_object:
do {
if (UNEXPECTED(Z_ISREF_P(zptr))) {
ref = Z_REF_P(zptr);
+ zptr = Z_REFVAL_P(zptr);
if (UNEXPECTED(ZEND_REF_HAS_TYPE_SOURCES(ref))) {
zend_binary_assign_op_typed_ref(ref, value OPLINE_CC EXECUTE_DATA_CC);
break;
}
- zptr = Z_REFVAL_P(zptr);
}
if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
@@ -33396,11 +33396,11 @@ assign_op_object:
do {
if (UNEXPECTED(Z_ISREF_P(zptr))) {
ref = Z_REF_P(zptr);
+ zptr = Z_REFVAL_P(zptr);
if (UNEXPECTED(ZEND_REF_HAS_TYPE_SOURCES(ref))) {
zend_binary_assign_op_typed_ref(ref, value OPLINE_CC EXECUTE_DATA_CC);
break;
}
- zptr = Z_REFVAL_P(zptr);
}
if (IS_CV == IS_CONST) {
@@ -37415,11 +37415,11 @@ assign_op_object:
do {
if (UNEXPECTED(Z_ISREF_P(zptr))) {
ref = Z_REF_P(zptr);
+ zptr = Z_REFVAL_P(zptr);
if (UNEXPECTED(ZEND_REF_HAS_TYPE_SOURCES(ref))) {
zend_binary_assign_op_typed_ref(ref, value OPLINE_CC EXECUTE_DATA_CC);
break;
}
- zptr = Z_REFVAL_P(zptr);
}
if (IS_CONST == IS_CONST) {
@@ -37551,11 +37551,11 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OP_SPEC_CV_CONST_HANDLE
do {
if (UNEXPECTED(Z_TYPE_P(var_ptr) == IS_REFERENCE)) {
zend_reference *ref = Z_REF_P(var_ptr);
+ var_ptr = Z_REFVAL_P(var_ptr);
if (UNEXPECTED(ZEND_REF_HAS_TYPE_SOURCES(ref))) {
zend_binary_assign_op_typed_ref(ref, value OPLINE_CC EXECUTE_DATA_CC);
break;
}
- var_ptr = Z_REFVAL_P(var_ptr);
}
zend_binary_op(var_ptr, var_ptr, value OPLINE_CC);
} while (0);
@@ -40894,11 +40894,11 @@ assign_op_object:
do {
if (UNEXPECTED(Z_ISREF_P(zptr))) {
ref = Z_REF_P(zptr);
+ zptr = Z_REFVAL_P(zptr);
if (UNEXPECTED(ZEND_REF_HAS_TYPE_SOURCES(ref))) {
zend_binary_assign_op_typed_ref(ref, value OPLINE_CC EXECUTE_DATA_CC);
break;
}
- zptr = Z_REFVAL_P(zptr);
}
if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
@@ -41031,11 +41031,11 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OP_SPEC_CV_TMPVAR_HANDL
do {
if (UNEXPECTED(Z_TYPE_P(var_ptr) == IS_REFERENCE)) {
zend_reference *ref = Z_REF_P(var_ptr);
+ var_ptr = Z_REFVAL_P(var_ptr);
if (UNEXPECTED(ZEND_REF_HAS_TYPE_SOURCES(ref))) {
zend_binary_assign_op_typed_ref(ref, value OPLINE_CC EXECUTE_DATA_CC);
break;
}
- var_ptr = Z_REFVAL_P(var_ptr);
}
zend_binary_op(var_ptr, var_ptr, value OPLINE_CC);
} while (0);
@@ -45706,11 +45706,11 @@ assign_op_object:
do {
if (UNEXPECTED(Z_ISREF_P(zptr))) {
ref = Z_REF_P(zptr);
+ zptr = Z_REFVAL_P(zptr);
if (UNEXPECTED(ZEND_REF_HAS_TYPE_SOURCES(ref))) {
zend_binary_assign_op_typed_ref(ref, value OPLINE_CC EXECUTE_DATA_CC);
break;
}
- zptr = Z_REFVAL_P(zptr);
}
if (IS_CV == IS_CONST) {
@@ -45842,11 +45842,11 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OP_SPEC_CV_CV_HANDLER(Z
do {
if (UNEXPECTED(Z_TYPE_P(var_ptr) == IS_REFERENCE)) {
zend_reference *ref = Z_REF_P(var_ptr);
+ var_ptr = Z_REFVAL_P(var_ptr);
if (UNEXPECTED(ZEND_REF_HAS_TYPE_SOURCES(ref))) {
zend_binary_assign_op_typed_ref(ref, value OPLINE_CC EXECUTE_DATA_CC);
break;
}
- var_ptr = Z_REFVAL_P(var_ptr);
}
zend_binary_op(var_ptr, var_ptr, value OPLINE_CC);
} while (0);