summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Zend/zend_API.c2
-rw-r--r--Zend/zend_vm_def.h47
-rw-r--r--Zend/zend_vm_execute.h540
3 files changed, 327 insertions, 262 deletions
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();