From: Xinchen Hui Date: Fri, 21 Feb 2014 13:39:02 +0000 (+0800) Subject: Fixed test tests/classes/__call_007.php X-Git-Tag: POST_PHPNG_MERGE~412^2~597^2~3 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=92450f9d6c6247a5e8891c1bbed4b21b407df870;p=php Fixed test tests/classes/__call_007.php --- diff --git a/Zend/zend_API.c b/Zend/zend_API.c index f1ba871712..58f5eccdbe 100644 --- a/Zend/zend_API.c +++ b/Zend/zend_API.c @@ -3149,7 +3149,7 @@ ZEND_API zend_bool zend_is_callable_ex(zval *callable, zval *object_ptr, uint ch } } else { - if (!!EG(objects_store).object_buckets || + if (!EG(objects_store).object_buckets || !IS_VALID(EG(objects_store).object_buckets[Z_OBJ_HANDLE_P(obj)])) { return 0; } diff --git a/Zend/zend_vm_def.h b/Zend/zend_vm_def.h index 8c0971195c..75acee396d 100644 --- a/Zend/zend_vm_def.h +++ b/Zend/zend_vm_def.h @@ -1025,7 +1025,9 @@ ZEND_VM_HELPER_EX(zend_fetch_var_address_helper, CONST|TMP|VAR|CV, UNUSED|CONST| zend_error(E_NOTICE,"Undefined variable: %s", Z_STRVAL_P(varname)); /* break missing intentionally */ case BP_VAR_IS: - ZVAL_NULL(retval); + //??? + //ZVAL_NULL(retval); + ZVAL_NULL(EX_VAR(opline->result.var)); break; case BP_VAR_RW: zend_error(E_NOTICE,"Undefined variable: %s", Z_STRVAL_P(varname)); @@ -1060,30 +1062,33 @@ ZEND_VM_HELPER_EX(zend_fetch_var_address_helper, CONST|TMP|VAR|CV, UNUSED|CONST| if (OP1_TYPE != IS_CONST && varname == &tmp_varname) { zval_dtor(&tmp_varname); } + if (opline->extended_value & ZEND_FETCH_MAKE_REF) { SEPARATE_ZVAL_TO_MAKE_IS_REF(retval); } - if (IS_REFCOUNTED(Z_TYPE_P(retval))) Z_ADDREF_P(retval); - switch (type) { - case BP_VAR_R: - case BP_VAR_IS: - ZVAL_COPY_VALUE(EX_VAR(opline->result.var), retval); - break; - case BP_VAR_UNSET: { -//??? zend_free_op free_res; -//??? -//??? PZVAL_UNLOCK(*retval, &free_res); -//??? if (retval != &EG(uninitialized_zval_ptr)) { -//??? SEPARATE_ZVAL_IF_NOT_REF(retval); -//??? } -//??? PZVAL_LOCK(*retval); -//??? FREE_OP_VAR_PTR(free_res); - } - /* break missing intentionally */ - default: - ZVAL_INDIRECT(EX_VAR(opline->result.var), retval); - break; + if (EXPECTED(retval)) { + if (IS_REFCOUNTED(Z_TYPE_P(retval))) Z_ADDREF_P(retval); + switch (type) { + case BP_VAR_R: + case BP_VAR_IS: + ZVAL_COPY_VALUE(EX_VAR(opline->result.var), retval); + break; + case BP_VAR_UNSET: { + //??? zend_free_op free_res; + //??? + //??? PZVAL_UNLOCK(*retval, &free_res); + //??? if (retval != &EG(uninitialized_zval_ptr)) { + //??? SEPARATE_ZVAL_IF_NOT_REF(retval); + //??? } + //??? PZVAL_LOCK(*retval); + //??? FREE_OP_VAR_PTR(free_res); + } + /* break missing intentionally */ + default: + ZVAL_INDIRECT(EX_VAR(opline->result.var), retval); + break; + } } CHECK_EXCEPTION(); ZEND_VM_NEXT_OPCODE(); diff --git a/Zend/zend_vm_execute.h b/Zend/zend_vm_execute.h index be5c464ff8..9aaa17c484 100644 --- a/Zend/zend_vm_execute.h +++ b/Zend/zend_vm_execute.h @@ -3544,7 +3544,9 @@ static int ZEND_FASTCALL zend_fetch_var_address_helper_SPEC_CONST_CONST(int type zend_error(E_NOTICE,"Undefined variable: %s", Z_STRVAL_P(varname)); /* break missing intentionally */ case BP_VAR_IS: - ZVAL_NULL(retval); + //??? + //ZVAL_NULL(retval); + ZVAL_NULL(EX_VAR(opline->result.var)); break; case BP_VAR_RW: zend_error(E_NOTICE,"Undefined variable: %s", Z_STRVAL_P(varname)); @@ -3579,30 +3581,33 @@ static int ZEND_FASTCALL zend_fetch_var_address_helper_SPEC_CONST_CONST(int type if (IS_CONST != IS_CONST && varname == &tmp_varname) { zval_dtor(&tmp_varname); } + if (opline->extended_value & ZEND_FETCH_MAKE_REF) { SEPARATE_ZVAL_TO_MAKE_IS_REF(retval); } - if (IS_REFCOUNTED(Z_TYPE_P(retval))) Z_ADDREF_P(retval); - switch (type) { - case BP_VAR_R: - case BP_VAR_IS: - ZVAL_COPY_VALUE(EX_VAR(opline->result.var), retval); - break; - case BP_VAR_UNSET: { -//??? zend_free_op free_res; -//??? -//??? PZVAL_UNLOCK(*retval, &free_res); -//??? if (retval != &EG(uninitialized_zval_ptr)) { -//??? SEPARATE_ZVAL_IF_NOT_REF(retval); -//??? } -//??? PZVAL_LOCK(*retval); -//??? FREE_OP_VAR_PTR(free_res); + if (EXPECTED(retval)) { + if (IS_REFCOUNTED(Z_TYPE_P(retval))) Z_ADDREF_P(retval); + switch (type) { + case BP_VAR_R: + case BP_VAR_IS: + ZVAL_COPY_VALUE(EX_VAR(opline->result.var), retval); + break; + case BP_VAR_UNSET: { + //??? zend_free_op free_res; + //??? + //??? PZVAL_UNLOCK(*retval, &free_res); + //??? if (retval != &EG(uninitialized_zval_ptr)) { + //??? SEPARATE_ZVAL_IF_NOT_REF(retval); + //??? } + //??? PZVAL_LOCK(*retval); + //??? FREE_OP_VAR_PTR(free_res); + } + /* break missing intentionally */ + default: + ZVAL_INDIRECT(EX_VAR(opline->result.var), retval); + break; } - /* break missing intentionally */ - default: - ZVAL_INDIRECT(EX_VAR(opline->result.var), retval); - break; } CHECK_EXCEPTION(); ZEND_VM_NEXT_OPCODE(); @@ -5296,7 +5301,9 @@ static int ZEND_FASTCALL zend_fetch_var_address_helper_SPEC_CONST_VAR(int type, zend_error(E_NOTICE,"Undefined variable: %s", Z_STRVAL_P(varname)); /* break missing intentionally */ case BP_VAR_IS: - ZVAL_NULL(retval); + //??? + //ZVAL_NULL(retval); + ZVAL_NULL(EX_VAR(opline->result.var)); break; case BP_VAR_RW: zend_error(E_NOTICE,"Undefined variable: %s", Z_STRVAL_P(varname)); @@ -5331,30 +5338,33 @@ static int ZEND_FASTCALL zend_fetch_var_address_helper_SPEC_CONST_VAR(int type, if (IS_CONST != IS_CONST && varname == &tmp_varname) { zval_dtor(&tmp_varname); } + if (opline->extended_value & ZEND_FETCH_MAKE_REF) { SEPARATE_ZVAL_TO_MAKE_IS_REF(retval); } - if (IS_REFCOUNTED(Z_TYPE_P(retval))) Z_ADDREF_P(retval); - switch (type) { - case BP_VAR_R: - case BP_VAR_IS: - ZVAL_COPY_VALUE(EX_VAR(opline->result.var), retval); - break; - case BP_VAR_UNSET: { -//??? zend_free_op free_res; -//??? -//??? PZVAL_UNLOCK(*retval, &free_res); -//??? if (retval != &EG(uninitialized_zval_ptr)) { -//??? SEPARATE_ZVAL_IF_NOT_REF(retval); -//??? } -//??? PZVAL_LOCK(*retval); -//??? FREE_OP_VAR_PTR(free_res); + if (EXPECTED(retval)) { + if (IS_REFCOUNTED(Z_TYPE_P(retval))) Z_ADDREF_P(retval); + switch (type) { + case BP_VAR_R: + case BP_VAR_IS: + ZVAL_COPY_VALUE(EX_VAR(opline->result.var), retval); + break; + case BP_VAR_UNSET: { + //??? zend_free_op free_res; + //??? + //??? PZVAL_UNLOCK(*retval, &free_res); + //??? if (retval != &EG(uninitialized_zval_ptr)) { + //??? SEPARATE_ZVAL_IF_NOT_REF(retval); + //??? } + //??? PZVAL_LOCK(*retval); + //??? FREE_OP_VAR_PTR(free_res); + } + /* break missing intentionally */ + default: + ZVAL_INDIRECT(EX_VAR(opline->result.var), retval); + break; } - /* break missing intentionally */ - default: - ZVAL_INDIRECT(EX_VAR(opline->result.var), retval); - break; } CHECK_EXCEPTION(); ZEND_VM_NEXT_OPCODE(); @@ -5979,7 +5989,9 @@ static int ZEND_FASTCALL zend_fetch_var_address_helper_SPEC_CONST_UNUSED(int typ zend_error(E_NOTICE,"Undefined variable: %s", Z_STRVAL_P(varname)); /* break missing intentionally */ case BP_VAR_IS: - ZVAL_NULL(retval); + //??? + //ZVAL_NULL(retval); + ZVAL_NULL(EX_VAR(opline->result.var)); break; case BP_VAR_RW: zend_error(E_NOTICE,"Undefined variable: %s", Z_STRVAL_P(varname)); @@ -6014,30 +6026,33 @@ static int ZEND_FASTCALL zend_fetch_var_address_helper_SPEC_CONST_UNUSED(int typ if (IS_CONST != IS_CONST && varname == &tmp_varname) { zval_dtor(&tmp_varname); } + if (opline->extended_value & ZEND_FETCH_MAKE_REF) { SEPARATE_ZVAL_TO_MAKE_IS_REF(retval); } - if (IS_REFCOUNTED(Z_TYPE_P(retval))) Z_ADDREF_P(retval); - switch (type) { - case BP_VAR_R: - case BP_VAR_IS: - ZVAL_COPY_VALUE(EX_VAR(opline->result.var), retval); - break; - case BP_VAR_UNSET: { -//??? zend_free_op free_res; -//??? -//??? PZVAL_UNLOCK(*retval, &free_res); -//??? if (retval != &EG(uninitialized_zval_ptr)) { -//??? SEPARATE_ZVAL_IF_NOT_REF(retval); -//??? } -//??? PZVAL_LOCK(*retval); -//??? FREE_OP_VAR_PTR(free_res); + if (EXPECTED(retval)) { + if (IS_REFCOUNTED(Z_TYPE_P(retval))) Z_ADDREF_P(retval); + switch (type) { + case BP_VAR_R: + case BP_VAR_IS: + ZVAL_COPY_VALUE(EX_VAR(opline->result.var), retval); + break; + case BP_VAR_UNSET: { + //??? zend_free_op free_res; + //??? + //??? PZVAL_UNLOCK(*retval, &free_res); + //??? if (retval != &EG(uninitialized_zval_ptr)) { + //??? SEPARATE_ZVAL_IF_NOT_REF(retval); + //??? } + //??? PZVAL_LOCK(*retval); + //??? FREE_OP_VAR_PTR(free_res); + } + /* break missing intentionally */ + default: + ZVAL_INDIRECT(EX_VAR(opline->result.var), retval); + break; } - /* break missing intentionally */ - default: - ZVAL_INDIRECT(EX_VAR(opline->result.var), retval); - break; } CHECK_EXCEPTION(); ZEND_VM_NEXT_OPCODE(); @@ -8574,7 +8589,9 @@ static int ZEND_FASTCALL zend_fetch_var_address_helper_SPEC_TMP_CONST(int type, zend_error(E_NOTICE,"Undefined variable: %s", Z_STRVAL_P(varname)); /* break missing intentionally */ case BP_VAR_IS: - ZVAL_NULL(retval); + //??? + //ZVAL_NULL(retval); + ZVAL_NULL(EX_VAR(opline->result.var)); break; case BP_VAR_RW: zend_error(E_NOTICE,"Undefined variable: %s", Z_STRVAL_P(varname)); @@ -8609,30 +8626,33 @@ static int ZEND_FASTCALL zend_fetch_var_address_helper_SPEC_TMP_CONST(int type, if (IS_TMP_VAR != IS_CONST && varname == &tmp_varname) { zval_dtor(&tmp_varname); } + if (opline->extended_value & ZEND_FETCH_MAKE_REF) { SEPARATE_ZVAL_TO_MAKE_IS_REF(retval); } - if (IS_REFCOUNTED(Z_TYPE_P(retval))) Z_ADDREF_P(retval); - switch (type) { - case BP_VAR_R: - case BP_VAR_IS: - ZVAL_COPY_VALUE(EX_VAR(opline->result.var), retval); - break; - case BP_VAR_UNSET: { -//??? zend_free_op free_res; -//??? -//??? PZVAL_UNLOCK(*retval, &free_res); -//??? if (retval != &EG(uninitialized_zval_ptr)) { -//??? SEPARATE_ZVAL_IF_NOT_REF(retval); -//??? } -//??? PZVAL_LOCK(*retval); -//??? FREE_OP_VAR_PTR(free_res); + if (EXPECTED(retval)) { + if (IS_REFCOUNTED(Z_TYPE_P(retval))) Z_ADDREF_P(retval); + switch (type) { + case BP_VAR_R: + case BP_VAR_IS: + ZVAL_COPY_VALUE(EX_VAR(opline->result.var), retval); + break; + case BP_VAR_UNSET: { + //??? zend_free_op free_res; + //??? + //??? PZVAL_UNLOCK(*retval, &free_res); + //??? if (retval != &EG(uninitialized_zval_ptr)) { + //??? SEPARATE_ZVAL_IF_NOT_REF(retval); + //??? } + //??? PZVAL_LOCK(*retval); + //??? FREE_OP_VAR_PTR(free_res); + } + /* break missing intentionally */ + default: + ZVAL_INDIRECT(EX_VAR(opline->result.var), retval); + break; } - /* break missing intentionally */ - default: - ZVAL_INDIRECT(EX_VAR(opline->result.var), retval); - break; } CHECK_EXCEPTION(); ZEND_VM_NEXT_OPCODE(); @@ -10207,7 +10227,9 @@ static int ZEND_FASTCALL zend_fetch_var_address_helper_SPEC_TMP_VAR(int type, ZE zend_error(E_NOTICE,"Undefined variable: %s", Z_STRVAL_P(varname)); /* break missing intentionally */ case BP_VAR_IS: - ZVAL_NULL(retval); + //??? + //ZVAL_NULL(retval); + ZVAL_NULL(EX_VAR(opline->result.var)); break; case BP_VAR_RW: zend_error(E_NOTICE,"Undefined variable: %s", Z_STRVAL_P(varname)); @@ -10242,30 +10264,33 @@ static int ZEND_FASTCALL zend_fetch_var_address_helper_SPEC_TMP_VAR(int type, ZE if (IS_TMP_VAR != IS_CONST && varname == &tmp_varname) { zval_dtor(&tmp_varname); } + if (opline->extended_value & ZEND_FETCH_MAKE_REF) { SEPARATE_ZVAL_TO_MAKE_IS_REF(retval); } - if (IS_REFCOUNTED(Z_TYPE_P(retval))) Z_ADDREF_P(retval); - switch (type) { - case BP_VAR_R: - case BP_VAR_IS: - ZVAL_COPY_VALUE(EX_VAR(opline->result.var), retval); - break; - case BP_VAR_UNSET: { -//??? zend_free_op free_res; -//??? -//??? PZVAL_UNLOCK(*retval, &free_res); -//??? if (retval != &EG(uninitialized_zval_ptr)) { -//??? SEPARATE_ZVAL_IF_NOT_REF(retval); -//??? } -//??? PZVAL_LOCK(*retval); -//??? FREE_OP_VAR_PTR(free_res); + if (EXPECTED(retval)) { + if (IS_REFCOUNTED(Z_TYPE_P(retval))) Z_ADDREF_P(retval); + switch (type) { + case BP_VAR_R: + case BP_VAR_IS: + ZVAL_COPY_VALUE(EX_VAR(opline->result.var), retval); + break; + case BP_VAR_UNSET: { + //??? zend_free_op free_res; + //??? + //??? PZVAL_UNLOCK(*retval, &free_res); + //??? if (retval != &EG(uninitialized_zval_ptr)) { + //??? SEPARATE_ZVAL_IF_NOT_REF(retval); + //??? } + //??? PZVAL_LOCK(*retval); + //??? FREE_OP_VAR_PTR(free_res); + } + /* break missing intentionally */ + default: + ZVAL_INDIRECT(EX_VAR(opline->result.var), retval); + break; } - /* break missing intentionally */ - default: - ZVAL_INDIRECT(EX_VAR(opline->result.var), retval); - break; } CHECK_EXCEPTION(); ZEND_VM_NEXT_OPCODE(); @@ -10898,7 +10923,9 @@ static int ZEND_FASTCALL zend_fetch_var_address_helper_SPEC_TMP_UNUSED(int type, zend_error(E_NOTICE,"Undefined variable: %s", Z_STRVAL_P(varname)); /* break missing intentionally */ case BP_VAR_IS: - ZVAL_NULL(retval); + //??? + //ZVAL_NULL(retval); + ZVAL_NULL(EX_VAR(opline->result.var)); break; case BP_VAR_RW: zend_error(E_NOTICE,"Undefined variable: %s", Z_STRVAL_P(varname)); @@ -10933,30 +10960,33 @@ static int ZEND_FASTCALL zend_fetch_var_address_helper_SPEC_TMP_UNUSED(int type, if (IS_TMP_VAR != IS_CONST && varname == &tmp_varname) { zval_dtor(&tmp_varname); } + if (opline->extended_value & ZEND_FETCH_MAKE_REF) { SEPARATE_ZVAL_TO_MAKE_IS_REF(retval); } - if (IS_REFCOUNTED(Z_TYPE_P(retval))) Z_ADDREF_P(retval); - switch (type) { - case BP_VAR_R: - case BP_VAR_IS: - ZVAL_COPY_VALUE(EX_VAR(opline->result.var), retval); - break; - case BP_VAR_UNSET: { -//??? zend_free_op free_res; -//??? -//??? PZVAL_UNLOCK(*retval, &free_res); -//??? if (retval != &EG(uninitialized_zval_ptr)) { -//??? SEPARATE_ZVAL_IF_NOT_REF(retval); -//??? } -//??? PZVAL_LOCK(*retval); -//??? FREE_OP_VAR_PTR(free_res); + if (EXPECTED(retval)) { + if (IS_REFCOUNTED(Z_TYPE_P(retval))) Z_ADDREF_P(retval); + switch (type) { + case BP_VAR_R: + case BP_VAR_IS: + ZVAL_COPY_VALUE(EX_VAR(opline->result.var), retval); + break; + case BP_VAR_UNSET: { + //??? zend_free_op free_res; + //??? + //??? PZVAL_UNLOCK(*retval, &free_res); + //??? if (retval != &EG(uninitialized_zval_ptr)) { + //??? SEPARATE_ZVAL_IF_NOT_REF(retval); + //??? } + //??? PZVAL_LOCK(*retval); + //??? FREE_OP_VAR_PTR(free_res); + } + /* break missing intentionally */ + default: + ZVAL_INDIRECT(EX_VAR(opline->result.var), retval); + break; } - /* break missing intentionally */ - default: - ZVAL_INDIRECT(EX_VAR(opline->result.var), retval); - break; } CHECK_EXCEPTION(); ZEND_VM_NEXT_OPCODE(); @@ -14130,7 +14160,9 @@ static int ZEND_FASTCALL zend_fetch_var_address_helper_SPEC_VAR_CONST(int type, zend_error(E_NOTICE,"Undefined variable: %s", Z_STRVAL_P(varname)); /* break missing intentionally */ case BP_VAR_IS: - ZVAL_NULL(retval); + //??? + //ZVAL_NULL(retval); + ZVAL_NULL(EX_VAR(opline->result.var)); break; case BP_VAR_RW: zend_error(E_NOTICE,"Undefined variable: %s", Z_STRVAL_P(varname)); @@ -14165,30 +14197,33 @@ static int ZEND_FASTCALL zend_fetch_var_address_helper_SPEC_VAR_CONST(int type, if (IS_VAR != IS_CONST && varname == &tmp_varname) { zval_dtor(&tmp_varname); } + if (opline->extended_value & ZEND_FETCH_MAKE_REF) { SEPARATE_ZVAL_TO_MAKE_IS_REF(retval); } - if (IS_REFCOUNTED(Z_TYPE_P(retval))) Z_ADDREF_P(retval); - switch (type) { - case BP_VAR_R: - case BP_VAR_IS: - ZVAL_COPY_VALUE(EX_VAR(opline->result.var), retval); - break; - case BP_VAR_UNSET: { -//??? zend_free_op free_res; -//??? -//??? PZVAL_UNLOCK(*retval, &free_res); -//??? if (retval != &EG(uninitialized_zval_ptr)) { -//??? SEPARATE_ZVAL_IF_NOT_REF(retval); -//??? } -//??? PZVAL_LOCK(*retval); -//??? FREE_OP_VAR_PTR(free_res); + if (EXPECTED(retval)) { + if (IS_REFCOUNTED(Z_TYPE_P(retval))) Z_ADDREF_P(retval); + switch (type) { + case BP_VAR_R: + case BP_VAR_IS: + ZVAL_COPY_VALUE(EX_VAR(opline->result.var), retval); + break; + case BP_VAR_UNSET: { + //??? zend_free_op free_res; + //??? + //??? PZVAL_UNLOCK(*retval, &free_res); + //??? if (retval != &EG(uninitialized_zval_ptr)) { + //??? SEPARATE_ZVAL_IF_NOT_REF(retval); + //??? } + //??? PZVAL_LOCK(*retval); + //??? FREE_OP_VAR_PTR(free_res); + } + /* break missing intentionally */ + default: + ZVAL_INDIRECT(EX_VAR(opline->result.var), retval); + break; } - /* break missing intentionally */ - default: - ZVAL_INDIRECT(EX_VAR(opline->result.var), retval); - break; } CHECK_EXCEPTION(); ZEND_VM_NEXT_OPCODE(); @@ -18473,7 +18508,9 @@ static int ZEND_FASTCALL zend_fetch_var_address_helper_SPEC_VAR_VAR(int type, ZE zend_error(E_NOTICE,"Undefined variable: %s", Z_STRVAL_P(varname)); /* break missing intentionally */ case BP_VAR_IS: - ZVAL_NULL(retval); + //??? + //ZVAL_NULL(retval); + ZVAL_NULL(EX_VAR(opline->result.var)); break; case BP_VAR_RW: zend_error(E_NOTICE,"Undefined variable: %s", Z_STRVAL_P(varname)); @@ -18508,30 +18545,33 @@ static int ZEND_FASTCALL zend_fetch_var_address_helper_SPEC_VAR_VAR(int type, ZE if (IS_VAR != IS_CONST && varname == &tmp_varname) { zval_dtor(&tmp_varname); } + if (opline->extended_value & ZEND_FETCH_MAKE_REF) { SEPARATE_ZVAL_TO_MAKE_IS_REF(retval); } - if (IS_REFCOUNTED(Z_TYPE_P(retval))) Z_ADDREF_P(retval); - switch (type) { - case BP_VAR_R: - case BP_VAR_IS: - ZVAL_COPY_VALUE(EX_VAR(opline->result.var), retval); - break; - case BP_VAR_UNSET: { -//??? zend_free_op free_res; -//??? -//??? PZVAL_UNLOCK(*retval, &free_res); -//??? if (retval != &EG(uninitialized_zval_ptr)) { -//??? SEPARATE_ZVAL_IF_NOT_REF(retval); -//??? } -//??? PZVAL_LOCK(*retval); -//??? FREE_OP_VAR_PTR(free_res); + if (EXPECTED(retval)) { + if (IS_REFCOUNTED(Z_TYPE_P(retval))) Z_ADDREF_P(retval); + switch (type) { + case BP_VAR_R: + case BP_VAR_IS: + ZVAL_COPY_VALUE(EX_VAR(opline->result.var), retval); + break; + case BP_VAR_UNSET: { + //??? zend_free_op free_res; + //??? + //??? PZVAL_UNLOCK(*retval, &free_res); + //??? if (retval != &EG(uninitialized_zval_ptr)) { + //??? SEPARATE_ZVAL_IF_NOT_REF(retval); + //??? } + //??? PZVAL_LOCK(*retval); + //??? FREE_OP_VAR_PTR(free_res); + } + /* break missing intentionally */ + default: + ZVAL_INDIRECT(EX_VAR(opline->result.var), retval); + break; } - /* break missing intentionally */ - default: - ZVAL_INDIRECT(EX_VAR(opline->result.var), retval); - break; } CHECK_EXCEPTION(); ZEND_VM_NEXT_OPCODE(); @@ -20340,7 +20380,9 @@ static int ZEND_FASTCALL zend_fetch_var_address_helper_SPEC_VAR_UNUSED(int type, zend_error(E_NOTICE,"Undefined variable: %s", Z_STRVAL_P(varname)); /* break missing intentionally */ case BP_VAR_IS: - ZVAL_NULL(retval); + //??? + //ZVAL_NULL(retval); + ZVAL_NULL(EX_VAR(opline->result.var)); break; case BP_VAR_RW: zend_error(E_NOTICE,"Undefined variable: %s", Z_STRVAL_P(varname)); @@ -20375,30 +20417,33 @@ static int ZEND_FASTCALL zend_fetch_var_address_helper_SPEC_VAR_UNUSED(int type, if (IS_VAR != IS_CONST && varname == &tmp_varname) { zval_dtor(&tmp_varname); } + if (opline->extended_value & ZEND_FETCH_MAKE_REF) { SEPARATE_ZVAL_TO_MAKE_IS_REF(retval); } - if (IS_REFCOUNTED(Z_TYPE_P(retval))) Z_ADDREF_P(retval); - switch (type) { - case BP_VAR_R: - case BP_VAR_IS: - ZVAL_COPY_VALUE(EX_VAR(opline->result.var), retval); - break; - case BP_VAR_UNSET: { -//??? zend_free_op free_res; -//??? -//??? PZVAL_UNLOCK(*retval, &free_res); -//??? if (retval != &EG(uninitialized_zval_ptr)) { -//??? SEPARATE_ZVAL_IF_NOT_REF(retval); -//??? } -//??? PZVAL_LOCK(*retval); -//??? FREE_OP_VAR_PTR(free_res); + if (EXPECTED(retval)) { + if (IS_REFCOUNTED(Z_TYPE_P(retval))) Z_ADDREF_P(retval); + switch (type) { + case BP_VAR_R: + case BP_VAR_IS: + ZVAL_COPY_VALUE(EX_VAR(opline->result.var), retval); + break; + case BP_VAR_UNSET: { + //??? zend_free_op free_res; + //??? + //??? PZVAL_UNLOCK(*retval, &free_res); + //??? if (retval != &EG(uninitialized_zval_ptr)) { + //??? SEPARATE_ZVAL_IF_NOT_REF(retval); + //??? } + //??? PZVAL_LOCK(*retval); + //??? FREE_OP_VAR_PTR(free_res); + } + /* break missing intentionally */ + default: + ZVAL_INDIRECT(EX_VAR(opline->result.var), retval); + break; } - /* break missing intentionally */ - default: - ZVAL_INDIRECT(EX_VAR(opline->result.var), retval); - break; } CHECK_EXCEPTION(); ZEND_VM_NEXT_OPCODE(); @@ -30637,7 +30682,9 @@ static int ZEND_FASTCALL zend_fetch_var_address_helper_SPEC_CV_CONST(int type, Z zend_error(E_NOTICE,"Undefined variable: %s", Z_STRVAL_P(varname)); /* break missing intentionally */ case BP_VAR_IS: - ZVAL_NULL(retval); + //??? + //ZVAL_NULL(retval); + ZVAL_NULL(EX_VAR(opline->result.var)); break; case BP_VAR_RW: zend_error(E_NOTICE,"Undefined variable: %s", Z_STRVAL_P(varname)); @@ -30672,30 +30719,33 @@ static int ZEND_FASTCALL zend_fetch_var_address_helper_SPEC_CV_CONST(int type, Z if (IS_CV != IS_CONST && varname == &tmp_varname) { zval_dtor(&tmp_varname); } + if (opline->extended_value & ZEND_FETCH_MAKE_REF) { SEPARATE_ZVAL_TO_MAKE_IS_REF(retval); } - if (IS_REFCOUNTED(Z_TYPE_P(retval))) Z_ADDREF_P(retval); - switch (type) { - case BP_VAR_R: - case BP_VAR_IS: - ZVAL_COPY_VALUE(EX_VAR(opline->result.var), retval); - break; - case BP_VAR_UNSET: { -//??? zend_free_op free_res; -//??? -//??? PZVAL_UNLOCK(*retval, &free_res); -//??? if (retval != &EG(uninitialized_zval_ptr)) { -//??? SEPARATE_ZVAL_IF_NOT_REF(retval); -//??? } -//??? PZVAL_LOCK(*retval); -//??? FREE_OP_VAR_PTR(free_res); + if (EXPECTED(retval)) { + if (IS_REFCOUNTED(Z_TYPE_P(retval))) Z_ADDREF_P(retval); + switch (type) { + case BP_VAR_R: + case BP_VAR_IS: + ZVAL_COPY_VALUE(EX_VAR(opline->result.var), retval); + break; + case BP_VAR_UNSET: { + //??? zend_free_op free_res; + //??? + //??? PZVAL_UNLOCK(*retval, &free_res); + //??? if (retval != &EG(uninitialized_zval_ptr)) { + //??? SEPARATE_ZVAL_IF_NOT_REF(retval); + //??? } + //??? PZVAL_LOCK(*retval); + //??? FREE_OP_VAR_PTR(free_res); + } + /* break missing intentionally */ + default: + ZVAL_INDIRECT(EX_VAR(opline->result.var), retval); + break; } - /* break missing intentionally */ - default: - ZVAL_INDIRECT(EX_VAR(opline->result.var), retval); - break; } CHECK_EXCEPTION(); ZEND_VM_NEXT_OPCODE(); @@ -34635,7 +34685,9 @@ static int ZEND_FASTCALL zend_fetch_var_address_helper_SPEC_CV_VAR(int type, ZEN zend_error(E_NOTICE,"Undefined variable: %s", Z_STRVAL_P(varname)); /* break missing intentionally */ case BP_VAR_IS: - ZVAL_NULL(retval); + //??? + //ZVAL_NULL(retval); + ZVAL_NULL(EX_VAR(opline->result.var)); break; case BP_VAR_RW: zend_error(E_NOTICE,"Undefined variable: %s", Z_STRVAL_P(varname)); @@ -34670,30 +34722,33 @@ static int ZEND_FASTCALL zend_fetch_var_address_helper_SPEC_CV_VAR(int type, ZEN if (IS_CV != IS_CONST && varname == &tmp_varname) { zval_dtor(&tmp_varname); } + if (opline->extended_value & ZEND_FETCH_MAKE_REF) { SEPARATE_ZVAL_TO_MAKE_IS_REF(retval); } - if (IS_REFCOUNTED(Z_TYPE_P(retval))) Z_ADDREF_P(retval); - switch (type) { - case BP_VAR_R: - case BP_VAR_IS: - ZVAL_COPY_VALUE(EX_VAR(opline->result.var), retval); - break; - case BP_VAR_UNSET: { -//??? zend_free_op free_res; -//??? -//??? PZVAL_UNLOCK(*retval, &free_res); -//??? if (retval != &EG(uninitialized_zval_ptr)) { -//??? SEPARATE_ZVAL_IF_NOT_REF(retval); -//??? } -//??? PZVAL_LOCK(*retval); -//??? FREE_OP_VAR_PTR(free_res); + if (EXPECTED(retval)) { + if (IS_REFCOUNTED(Z_TYPE_P(retval))) Z_ADDREF_P(retval); + switch (type) { + case BP_VAR_R: + case BP_VAR_IS: + ZVAL_COPY_VALUE(EX_VAR(opline->result.var), retval); + break; + case BP_VAR_UNSET: { + //??? zend_free_op free_res; + //??? + //??? PZVAL_UNLOCK(*retval, &free_res); + //??? if (retval != &EG(uninitialized_zval_ptr)) { + //??? SEPARATE_ZVAL_IF_NOT_REF(retval); + //??? } + //??? PZVAL_LOCK(*retval); + //??? FREE_OP_VAR_PTR(free_res); + } + /* break missing intentionally */ + default: + ZVAL_INDIRECT(EX_VAR(opline->result.var), retval); + break; } - /* break missing intentionally */ - default: - ZVAL_INDIRECT(EX_VAR(opline->result.var), retval); - break; } CHECK_EXCEPTION(); ZEND_VM_NEXT_OPCODE(); @@ -36376,7 +36431,9 @@ static int ZEND_FASTCALL zend_fetch_var_address_helper_SPEC_CV_UNUSED(int type, zend_error(E_NOTICE,"Undefined variable: %s", Z_STRVAL_P(varname)); /* break missing intentionally */ case BP_VAR_IS: - ZVAL_NULL(retval); + //??? + //ZVAL_NULL(retval); + ZVAL_NULL(EX_VAR(opline->result.var)); break; case BP_VAR_RW: zend_error(E_NOTICE,"Undefined variable: %s", Z_STRVAL_P(varname)); @@ -36411,30 +36468,33 @@ static int ZEND_FASTCALL zend_fetch_var_address_helper_SPEC_CV_UNUSED(int type, if (IS_CV != IS_CONST && varname == &tmp_varname) { zval_dtor(&tmp_varname); } + if (opline->extended_value & ZEND_FETCH_MAKE_REF) { SEPARATE_ZVAL_TO_MAKE_IS_REF(retval); } - if (IS_REFCOUNTED(Z_TYPE_P(retval))) Z_ADDREF_P(retval); - switch (type) { - case BP_VAR_R: - case BP_VAR_IS: - ZVAL_COPY_VALUE(EX_VAR(opline->result.var), retval); - break; - case BP_VAR_UNSET: { -//??? zend_free_op free_res; -//??? -//??? PZVAL_UNLOCK(*retval, &free_res); -//??? if (retval != &EG(uninitialized_zval_ptr)) { -//??? SEPARATE_ZVAL_IF_NOT_REF(retval); -//??? } -//??? PZVAL_LOCK(*retval); -//??? FREE_OP_VAR_PTR(free_res); + if (EXPECTED(retval)) { + if (IS_REFCOUNTED(Z_TYPE_P(retval))) Z_ADDREF_P(retval); + switch (type) { + case BP_VAR_R: + case BP_VAR_IS: + ZVAL_COPY_VALUE(EX_VAR(opline->result.var), retval); + break; + case BP_VAR_UNSET: { + //??? zend_free_op free_res; + //??? + //??? PZVAL_UNLOCK(*retval, &free_res); + //??? if (retval != &EG(uninitialized_zval_ptr)) { + //??? SEPARATE_ZVAL_IF_NOT_REF(retval); + //??? } + //??? PZVAL_LOCK(*retval); + //??? FREE_OP_VAR_PTR(free_res); + } + /* break missing intentionally */ + default: + ZVAL_INDIRECT(EX_VAR(opline->result.var), retval); + break; } - /* break missing intentionally */ - default: - ZVAL_INDIRECT(EX_VAR(opline->result.var), retval); - break; } CHECK_EXCEPTION(); ZEND_VM_NEXT_OPCODE();