From 5d0ef4c239eb5a2c9e0d267c57bf71f7c562c575 Mon Sep 17 00:00:00 2001 From: Dmitry Stogov Date: Thu, 6 Feb 2020 15:48:54 +0300 Subject: Make opcodes to return de-refereced values of typed references (in the same was as for non-typed) --- Zend/zend_execute.c | 4 ++-- Zend/zend_vm_def.h | 6 +++--- Zend/zend_vm_execute.h | 32 ++++++++++++++++---------------- 3 files changed, 21 insertions(+), 21 deletions(-) (limited to 'Zend') diff --git a/Zend/zend_execute.c b/Zend/zend_execute.c index de00080b5a..e9017ecde9 100644 --- a/Zend/zend_execute.c +++ b/Zend/zend_execute.c @@ -1740,11 +1740,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)) { @@ -1777,11 +1777,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 a6e4c2c337..26679777af 100644 --- a/Zend/zend_vm_def.h +++ b/Zend/zend_vm_def.h @@ -1113,11 +1113,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) { @@ -1174,11 +1174,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(prop_info->type)) { @@ -1302,11 +1302,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 3987d1b945..4da5094a79 100644 --- a/Zend/zend_vm_execute.h +++ b/Zend/zend_vm_execute.h @@ -816,11 +816,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(prop_info->type)) { @@ -22087,11 +22087,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) { @@ -22227,11 +22227,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); @@ -24384,11 +24384,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) { @@ -24525,11 +24525,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); @@ -28078,11 +28078,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) { @@ -28218,11 +28218,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); @@ -30556,11 +30556,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) { @@ -32395,11 +32395,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) { @@ -34919,11 +34919,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) { @@ -39034,11 +39034,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) { @@ -39174,11 +39174,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); @@ -42541,11 +42541,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) { @@ -42682,11 +42682,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); @@ -47639,11 +47639,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) { @@ -47779,11 +47779,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); -- cgit v1.2.1