From e43f57e2153bd0fa3a2fc866a50165ff72348451 Mon Sep 17 00:00:00 2001 From: Dmitry Stogov Date: Mon, 24 Feb 2014 11:23:25 +0400 Subject: [PATCH] Fixed ++/-- of references --- Zend/zend_vm_def.h | 26 ++++++++++++++++---- Zend/zend_vm_execute.h | 54 ++++++++++++++++++++++++++++++++---------- 2 files changed, 63 insertions(+), 17 deletions(-) diff --git a/Zend/zend_vm_def.h b/Zend/zend_vm_def.h index 2f8a5bde7e..fd01c217c1 100644 --- a/Zend/zend_vm_def.h +++ b/Zend/zend_vm_def.h @@ -789,7 +789,11 @@ ZEND_VM_HANDLER(34, ZEND_PRE_INC, VAR|CV, ANY) ZEND_VM_NEXT_OPCODE(); } - SEPARATE_ZVAL_IF_NOT_REF(var_ptr); + if (Z_TYPE_P(var_ptr) == IS_REFERENCE) { + var_ptr = Z_REFVAL_P(var_ptr); + } else { + SEPARATE_ZVAL(var_ptr); + } if (UNEXPECTED(Z_TYPE_P(var_ptr) == IS_OBJECT) && Z_OBJ_HANDLER_P(var_ptr, get) @@ -834,7 +838,11 @@ ZEND_VM_HANDLER(35, ZEND_PRE_DEC, VAR|CV, ANY) ZEND_VM_NEXT_OPCODE(); } - SEPARATE_ZVAL_IF_NOT_REF(var_ptr); + if (Z_TYPE_P(var_ptr) == IS_REFERENCE) { + var_ptr = Z_REFVAL_P(var_ptr); + } else { + SEPARATE_ZVAL(var_ptr); + } if (UNEXPECTED(Z_TYPE_P(var_ptr) == IS_OBJECT) && Z_OBJ_HANDLER_P(var_ptr, get) @@ -880,7 +888,11 @@ ZEND_VM_HANDLER(36, ZEND_POST_INC, VAR|CV, ANY) retval = EX_VAR(opline->result.var); ZVAL_DUP(retval, var_ptr); - SEPARATE_ZVAL_IF_NOT_REF(var_ptr); + if (Z_TYPE_P(var_ptr) == IS_REFERENCE) { + var_ptr = Z_REFVAL_P(var_ptr); + } else { + SEPARATE_ZVAL(var_ptr); + } if (UNEXPECTED(Z_TYPE_P(var_ptr) == IS_OBJECT) && Z_OBJ_HANDLER_P(var_ptr, get) @@ -922,7 +934,11 @@ ZEND_VM_HANDLER(37, ZEND_POST_DEC, VAR|CV, ANY) retval = EX_VAR(opline->result.var); ZVAL_DUP(retval, var_ptr); - SEPARATE_ZVAL_IF_NOT_REF(var_ptr); + if (Z_TYPE_P(var_ptr) == IS_REFERENCE) { + var_ptr = Z_REFVAL_P(var_ptr); + } else { + SEPARATE_ZVAL(var_ptr); + } if (UNEXPECTED(Z_TYPE_P(var_ptr) == IS_OBJECT) && Z_OBJ_HANDLER_P(var_ptr, get) @@ -1746,7 +1762,7 @@ ZEND_VM_HANDLER(39, ZEND_ASSIGN_REF, VAR|CV, VAR|CV) } //??? FREE_OP1_VAR_PTR(); -//??? FREE_OP2_VAR_PTR(); + FREE_OP2_VAR_PTR(); CHECK_EXCEPTION(); ZEND_VM_NEXT_OPCODE(); diff --git a/Zend/zend_vm_execute.h b/Zend/zend_vm_execute.h index 4ef089571a..ec9057b431 100644 --- a/Zend/zend_vm_execute.h +++ b/Zend/zend_vm_execute.h @@ -12124,7 +12124,11 @@ static int ZEND_FASTCALL ZEND_PRE_INC_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS ZEND_VM_NEXT_OPCODE(); } - SEPARATE_ZVAL_IF_NOT_REF(var_ptr); + if (Z_TYPE_P(var_ptr) == IS_REFERENCE) { + var_ptr = Z_REFVAL_P(var_ptr); + } else { + SEPARATE_ZVAL(var_ptr); + } if (UNEXPECTED(Z_TYPE_P(var_ptr) == IS_OBJECT) && Z_OBJ_HANDLER_P(var_ptr, get) @@ -12169,7 +12173,11 @@ static int ZEND_FASTCALL ZEND_PRE_DEC_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS ZEND_VM_NEXT_OPCODE(); } - SEPARATE_ZVAL_IF_NOT_REF(var_ptr); + if (Z_TYPE_P(var_ptr) == IS_REFERENCE) { + var_ptr = Z_REFVAL_P(var_ptr); + } else { + SEPARATE_ZVAL(var_ptr); + } if (UNEXPECTED(Z_TYPE_P(var_ptr) == IS_OBJECT) && Z_OBJ_HANDLER_P(var_ptr, get) @@ -12215,7 +12223,11 @@ static int ZEND_FASTCALL ZEND_POST_INC_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARG retval = EX_VAR(opline->result.var); ZVAL_DUP(retval, var_ptr); - SEPARATE_ZVAL_IF_NOT_REF(var_ptr); + if (Z_TYPE_P(var_ptr) == IS_REFERENCE) { + var_ptr = Z_REFVAL_P(var_ptr); + } else { + SEPARATE_ZVAL(var_ptr); + } if (UNEXPECTED(Z_TYPE_P(var_ptr) == IS_OBJECT) && Z_OBJ_HANDLER_P(var_ptr, get) @@ -12257,7 +12269,11 @@ static int ZEND_FASTCALL ZEND_POST_DEC_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARG retval = EX_VAR(opline->result.var); ZVAL_DUP(retval, var_ptr); - SEPARATE_ZVAL_IF_NOT_REF(var_ptr); + if (Z_TYPE_P(var_ptr) == IS_REFERENCE) { + var_ptr = Z_REFVAL_P(var_ptr); + } else { + SEPARATE_ZVAL(var_ptr); + } if (UNEXPECTED(Z_TYPE_P(var_ptr) == IS_OBJECT) && Z_OBJ_HANDLER_P(var_ptr, get) @@ -19222,7 +19238,7 @@ static int ZEND_FASTCALL ZEND_ASSIGN_REF_SPEC_VAR_VAR_HANDLER(ZEND_OPCODE_HANDL } //??? if (free_op1.var) {zval_ptr_dtor_nogc(free_op1.var);}; -//??? if (free_op2.var) {zval_ptr_dtor_nogc(free_op2.var);}; + if (free_op2.var) {zval_ptr_dtor_nogc(free_op2.var);}; CHECK_EXCEPTION(); ZEND_VM_NEXT_OPCODE(); @@ -22483,7 +22499,6 @@ static int ZEND_FASTCALL ZEND_ASSIGN_REF_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLE } //??? if (free_op1.var) {zval_ptr_dtor_nogc(free_op1.var);}; -//??? ; CHECK_EXCEPTION(); ZEND_VM_NEXT_OPCODE(); @@ -28817,7 +28832,11 @@ static int ZEND_FASTCALL ZEND_PRE_INC_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) ZEND_VM_NEXT_OPCODE(); } - SEPARATE_ZVAL_IF_NOT_REF(var_ptr); + if (Z_TYPE_P(var_ptr) == IS_REFERENCE) { + var_ptr = Z_REFVAL_P(var_ptr); + } else { + SEPARATE_ZVAL(var_ptr); + } if (UNEXPECTED(Z_TYPE_P(var_ptr) == IS_OBJECT) && Z_OBJ_HANDLER_P(var_ptr, get) @@ -28861,7 +28880,11 @@ static int ZEND_FASTCALL ZEND_PRE_DEC_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) ZEND_VM_NEXT_OPCODE(); } - SEPARATE_ZVAL_IF_NOT_REF(var_ptr); + if (Z_TYPE_P(var_ptr) == IS_REFERENCE) { + var_ptr = Z_REFVAL_P(var_ptr); + } else { + SEPARATE_ZVAL(var_ptr); + } if (UNEXPECTED(Z_TYPE_P(var_ptr) == IS_OBJECT) && Z_OBJ_HANDLER_P(var_ptr, get) @@ -28906,7 +28929,11 @@ static int ZEND_FASTCALL ZEND_POST_INC_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS retval = EX_VAR(opline->result.var); ZVAL_DUP(retval, var_ptr); - SEPARATE_ZVAL_IF_NOT_REF(var_ptr); + if (Z_TYPE_P(var_ptr) == IS_REFERENCE) { + var_ptr = Z_REFVAL_P(var_ptr); + } else { + SEPARATE_ZVAL(var_ptr); + } if (UNEXPECTED(Z_TYPE_P(var_ptr) == IS_OBJECT) && Z_OBJ_HANDLER_P(var_ptr, get) @@ -28947,7 +28974,11 @@ static int ZEND_FASTCALL ZEND_POST_DEC_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS retval = EX_VAR(opline->result.var); ZVAL_DUP(retval, var_ptr); - SEPARATE_ZVAL_IF_NOT_REF(var_ptr); + if (Z_TYPE_P(var_ptr) == IS_REFERENCE) { + var_ptr = Z_REFVAL_P(var_ptr); + } else { + SEPARATE_ZVAL(var_ptr); + } if (UNEXPECTED(Z_TYPE_P(var_ptr) == IS_OBJECT) && Z_OBJ_HANDLER_P(var_ptr, get) @@ -35399,7 +35430,7 @@ static int ZEND_FASTCALL ZEND_ASSIGN_REF_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLE } //??? ; -//??? if (free_op2.var) {zval_ptr_dtor_nogc(free_op2.var);}; + if (free_op2.var) {zval_ptr_dtor_nogc(free_op2.var);}; CHECK_EXCEPTION(); ZEND_VM_NEXT_OPCODE(); @@ -38401,7 +38432,6 @@ static int ZEND_FASTCALL ZEND_ASSIGN_REF_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER ZVAL_COPY(EX_VAR(opline->result.var), variable_ptr); } -//??? ; //??? ; CHECK_EXCEPTION(); -- 2.40.0