summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Zend/zend_vm_def.h62
-rw-r--r--Zend/zend_vm_execute.h862
2 files changed, 407 insertions, 517 deletions
diff --git a/Zend/zend_vm_def.h b/Zend/zend_vm_def.h
index ae2f0e7161..fad4d5b99c 100644
--- a/Zend/zend_vm_def.h
+++ b/Zend/zend_vm_def.h
@@ -4848,18 +4848,22 @@ ZEND_VM_HANDLER(114, ZEND_ISSET_ISEMPTY_VAR, CONST|TMP|VAR|CV, UNUSED|CONST|VAR)
{
USE_OPLINE
zval *value;
- zend_bool isset = 1;
SAVE_OPLINE();
if (OP1_TYPE == IS_CV &&
OP2_TYPE == IS_UNUSED &&
(opline->extended_value & ZEND_QUICK_SET)) {
- if (Z_TYPE_P(EX_VAR(opline->op1.var)) != IS_UNDEF) {
- value = EX_VAR(opline->op1.var);
- ZVAL_DEREF(value);
- } else {
- isset = 0;
+ value = EX_VAR(opline->op1.var);
+ if (opline->extended_value & ZEND_ISSET) {
+ ZVAL_BOOL(EX_VAR(opline->result.var),
+ Z_TYPE_P(value) > IS_NULL &&
+ (!Z_ISREF_P(value) || Z_TYPE_P(Z_REFVAL_P(value)) != IS_NULL));
+ } else /* if (opline->extended_value & ZEND_ISEMPTY) */ {
+ ZVAL_BOOL(EX_VAR(opline->result.var),
+ !i_zend_is_true(value TSRMLS_CC));
+ CHECK_EXCEPTION();
}
+ ZEND_VM_NEXT_OPCODE();
} else {
zend_free_op free_op1;
zval tmp, *varname = GET_OP1_ZVAL_PTR(BP_VAR_IS);
@@ -4887,40 +4891,28 @@ ZEND_VM_HANDLER(114, ZEND_ISSET_ISEMPTY_VAR, CONST|TMP|VAR|CV, UNUSED|CONST|VAR)
ce = Z_CE_P(EX_VAR(opline->op2.var));
}
value = zend_std_get_static_property(ce, Z_STR_P(varname), 1, ((OP1_TYPE == IS_CONST) ? (EX(run_time_cache) + Z_CACHE_SLOT_P(varname)) : NULL) TSRMLS_CC);
- if (!value) {
- isset = 0;
- }
} else {
HashTable *target_symbol_table = zend_get_target_symbol_table(execute_data, opline->extended_value & ZEND_FETCH_TYPE_MASK TSRMLS_CC);
value = zend_hash_find_ind(target_symbol_table, Z_STR_P(varname));
- if (!value || Z_ISUNDEF_P(value)) {
- isset = 0;
- }
}
if (OP1_TYPE != IS_CONST && varname == &tmp) {
zval_dtor(&tmp);
}
FREE_OP1();
- }
- if (opline->extended_value & ZEND_ISSET) {
- if (isset && Z_TYPE_P(value) != IS_NULL &&
- (!Z_ISREF_P(value) || Z_TYPE_P(Z_REFVAL_P(value)) != IS_NULL)) {
- ZVAL_BOOL(EX_VAR(opline->result.var), 1);
- } else {
- ZVAL_BOOL(EX_VAR(opline->result.var), 0);
- }
- } else /* if (opline->extended_value & ZEND_ISEMPTY) */ {
- if (!isset || !i_zend_is_true(value TSRMLS_CC)) {
- ZVAL_BOOL(EX_VAR(opline->result.var), 1);
- } else {
- ZVAL_BOOL(EX_VAR(opline->result.var), 0);
+ if (opline->extended_value & ZEND_ISSET) {
+ ZVAL_BOOL(EX_VAR(opline->result.var),
+ value && Z_TYPE_P(value) > IS_NULL &&
+ (!Z_ISREF_P(value) || Z_TYPE_P(Z_REFVAL_P(value)) != IS_NULL));
+ } else /* if (opline->extended_value & ZEND_ISEMPTY) */ {
+ ZVAL_BOOL(EX_VAR(opline->result.var),
+ !value || !i_zend_is_true(value TSRMLS_CC));
}
- }
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ CHECK_EXCEPTION();
+ ZEND_VM_NEXT_OPCODE();
+ }
}
ZEND_VM_HANDLER(115, ZEND_ISSET_ISEMPTY_DIM_OBJ, CONST|TMP|VAR|UNUSED|CV, CONST|TMP|VAR|CV)
@@ -4936,7 +4928,7 @@ ZEND_VM_HANDLER(115, ZEND_ISSET_ISEMPTY_DIM_OBJ, CONST|TMP|VAR|UNUSED|CV, CONST|
container = GET_OP1_OBJ_ZVAL_PTR_DEREF(BP_VAR_IS);
offset = GET_OP2_ZVAL_PTR(BP_VAR_R);
- if (OP1_TYPE != IS_UNUSED && Z_TYPE_P(container) == IS_ARRAY) {
+ if (OP1_TYPE != IS_UNUSED && EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
HashTable *ht = Z_ARRVAL_P(container);
zval *value;
zend_string *str;
@@ -4989,8 +4981,8 @@ ZEND_VM_C_LABEL(num_index_prop):
} else /* if (opline->extended_value & ZEND_ISEMPTY) */ {
result = (value == NULL || !i_zend_is_true(value TSRMLS_CC));
}
- } else if (OP1_TYPE == IS_UNUSED || Z_TYPE_P(container) == IS_OBJECT) {
- if (Z_OBJ_HT_P(container)->has_dimension) {
+ } else if (OP1_TYPE == IS_UNUSED || EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
+ if (EXPECTED(Z_OBJ_HT_P(container)->has_dimension)) {
result = Z_OBJ_HT_P(container)->has_dimension(container, offset, (opline->extended_value & ZEND_ISSET) == 0 TSRMLS_CC);
} else {
zend_error(E_NOTICE, "Trying to check element of non-array");
@@ -4999,7 +4991,7 @@ ZEND_VM_C_LABEL(num_index_prop):
if ((opline->extended_value & ZEND_ISSET) == 0) {
result = !result;
}
- } else if (Z_TYPE_P(container) == IS_STRING) { /* string offsets */
+ } else if (EXPECTED(Z_TYPE_P(container) == IS_STRING)) { /* string offsets */
zval tmp;
result = 0;
@@ -5015,7 +5007,7 @@ ZEND_VM_C_LABEL(num_index_prop):
offset = &tmp;
}
}
- if (Z_TYPE_P(offset) == IS_LONG) {
+ if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) {
if (offset->value.lval >= 0 && (size_t)offset->value.lval < Z_STRLEN_P(container)) {
if ((opline->extended_value & ZEND_ISSET) ||
Z_STRVAL_P(container)[offset->value.lval] != '0') {
@@ -5049,8 +5041,8 @@ ZEND_VM_HANDLER(148, ZEND_ISSET_ISEMPTY_PROP_OBJ, CONST|TMP|VAR|UNUSED|CV, CONST
container = GET_OP1_OBJ_ZVAL_PTR_DEREF(BP_VAR_IS);
offset = GET_OP2_ZVAL_PTR(BP_VAR_R);
- if (OP1_TYPE == IS_UNUSED || Z_TYPE_P(container) == IS_OBJECT) {
- if (Z_OBJ_HT_P(container)->has_property) {
+ if (OP1_TYPE == IS_UNUSED || EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
+ if (EXPECTED(Z_OBJ_HT_P(container)->has_property)) {
result = Z_OBJ_HT_P(container)->has_property(container, offset, (opline->extended_value & ZEND_ISSET) == 0, ((OP2_TYPE == IS_CONST) ? (EX(run_time_cache) + Z_CACHE_SLOT_P(offset)) : NULL) TSRMLS_CC);
} else {
zend_error(E_NOTICE, "Trying to check property of non-object");
diff --git a/Zend/zend_vm_execute.h b/Zend/zend_vm_execute.h
index 5d448c34d4..4b58d95618 100644
--- a/Zend/zend_vm_execute.h
+++ b/Zend/zend_vm_execute.h
@@ -4565,18 +4565,22 @@ static int ZEND_FASTCALL ZEND_ISSET_ISEMPTY_VAR_SPEC_CONST_CONST_HANDLER(ZEND_O
{
USE_OPLINE
zval *value;
- zend_bool isset = 1;
SAVE_OPLINE();
if (IS_CONST == IS_CV &&
IS_CONST == IS_UNUSED &&
(opline->extended_value & ZEND_QUICK_SET)) {
- if (Z_TYPE_P(EX_VAR(opline->op1.var)) != IS_UNDEF) {
- value = EX_VAR(opline->op1.var);
- ZVAL_DEREF(value);
- } else {
- isset = 0;
+ value = EX_VAR(opline->op1.var);
+ if (opline->extended_value & ZEND_ISSET) {
+ ZVAL_BOOL(EX_VAR(opline->result.var),
+ Z_TYPE_P(value) > IS_NULL &&
+ (!Z_ISREF_P(value) || Z_TYPE_P(Z_REFVAL_P(value)) != IS_NULL));
+ } else /* if (opline->extended_value & ZEND_ISEMPTY) */ {
+ ZVAL_BOOL(EX_VAR(opline->result.var),
+ !i_zend_is_true(value TSRMLS_CC));
+ CHECK_EXCEPTION();
}
+ ZEND_VM_NEXT_OPCODE();
} else {
zval tmp, *varname = opline->op1.zv;
@@ -4604,40 +4608,27 @@ static int ZEND_FASTCALL ZEND_ISSET_ISEMPTY_VAR_SPEC_CONST_CONST_HANDLER(ZEND_O
ce = Z_CE_P(EX_VAR(opline->op2.var));
}
value = zend_std_get_static_property(ce, Z_STR_P(varname), 1, ((IS_CONST == IS_CONST) ? (EX(run_time_cache) + Z_CACHE_SLOT_P(varname)) : NULL) TSRMLS_CC);
- if (!value) {
- isset = 0;
- }
} else {
HashTable *target_symbol_table = zend_get_target_symbol_table(execute_data, opline->extended_value & ZEND_FETCH_TYPE_MASK TSRMLS_CC);
value = zend_hash_find_ind(target_symbol_table, Z_STR_P(varname));
- if (!value || Z_ISUNDEF_P(value)) {
- isset = 0;
- }
}
if (IS_CONST != IS_CONST && varname == &tmp) {
zval_dtor(&tmp);
}
- }
-
- if (opline->extended_value & ZEND_ISSET) {
- if (isset && Z_TYPE_P(value) != IS_NULL &&
- (!Z_ISREF_P(value) || Z_TYPE_P(Z_REFVAL_P(value)) != IS_NULL)) {
- ZVAL_BOOL(EX_VAR(opline->result.var), 1);
- } else {
- ZVAL_BOOL(EX_VAR(opline->result.var), 0);
- }
- } else /* if (opline->extended_value & ZEND_ISEMPTY) */ {
- if (!isset || !i_zend_is_true(value TSRMLS_CC)) {
- ZVAL_BOOL(EX_VAR(opline->result.var), 1);
- } else {
- ZVAL_BOOL(EX_VAR(opline->result.var), 0);
+ if (opline->extended_value & ZEND_ISSET) {
+ ZVAL_BOOL(EX_VAR(opline->result.var),
+ value && Z_TYPE_P(value) > IS_NULL &&
+ (!Z_ISREF_P(value) || Z_TYPE_P(Z_REFVAL_P(value)) != IS_NULL));
+ } else /* if (opline->extended_value & ZEND_ISEMPTY) */ {
+ ZVAL_BOOL(EX_VAR(opline->result.var),
+ !value || !i_zend_is_true(value TSRMLS_CC));
}
- }
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ CHECK_EXCEPTION();
+ ZEND_VM_NEXT_OPCODE();
+ }
}
static int ZEND_FASTCALL ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -4653,7 +4644,7 @@ static int ZEND_FASTCALL ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CONST_CONST_HANDLER(ZE
container = opline->op1.zv;
offset = opline->op2.zv;
- if (IS_CONST != IS_UNUSED && Z_TYPE_P(container) == IS_ARRAY) {
+ if (IS_CONST != IS_UNUSED && EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
HashTable *ht = Z_ARRVAL_P(container);
zval *value;
zend_string *str;
@@ -4706,8 +4697,8 @@ num_index_prop:
} else /* if (opline->extended_value & ZEND_ISEMPTY) */ {
result = (value == NULL || !i_zend_is_true(value TSRMLS_CC));
}
- } else if (IS_CONST == IS_UNUSED || Z_TYPE_P(container) == IS_OBJECT) {
- if (Z_OBJ_HT_P(container)->has_dimension) {
+ } else if (IS_CONST == IS_UNUSED || EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
+ if (EXPECTED(Z_OBJ_HT_P(container)->has_dimension)) {
result = Z_OBJ_HT_P(container)->has_dimension(container, offset, (opline->extended_value & ZEND_ISSET) == 0 TSRMLS_CC);
} else {
zend_error(E_NOTICE, "Trying to check element of non-array");
@@ -4716,7 +4707,7 @@ num_index_prop:
if ((opline->extended_value & ZEND_ISSET) == 0) {
result = !result;
}
- } else if (Z_TYPE_P(container) == IS_STRING) { /* string offsets */
+ } else if (EXPECTED(Z_TYPE_P(container) == IS_STRING)) { /* string offsets */
zval tmp;
result = 0;
@@ -4732,7 +4723,7 @@ num_index_prop:
offset = &tmp;
}
}
- if (Z_TYPE_P(offset) == IS_LONG) {
+ if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) {
if (offset->value.lval >= 0 && (size_t)offset->value.lval < Z_STRLEN_P(container)) {
if ((opline->extended_value & ZEND_ISSET) ||
Z_STRVAL_P(container)[offset->value.lval] != '0') {
@@ -4765,8 +4756,8 @@ static int ZEND_FASTCALL ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CONST_CONST_HANDLER(Z
container = opline->op1.zv;
offset = opline->op2.zv;
- if (IS_CONST == IS_UNUSED || Z_TYPE_P(container) == IS_OBJECT) {
- if (Z_OBJ_HT_P(container)->has_property) {
+ if (IS_CONST == IS_UNUSED || EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
+ if (EXPECTED(Z_OBJ_HT_P(container)->has_property)) {
result = Z_OBJ_HT_P(container)->has_property(container, offset, (opline->extended_value & ZEND_ISSET) == 0, ((IS_CONST == IS_CONST) ? (EX(run_time_cache) + Z_CACHE_SLOT_P(offset)) : NULL) TSRMLS_CC);
} else {
zend_error(E_NOTICE, "Trying to check property of non-object");
@@ -5727,7 +5718,7 @@ static int ZEND_FASTCALL ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CONST_TMP_HANDLER(ZEND
container = opline->op1.zv;
offset = _get_zval_ptr_tmp(opline->op2.var, execute_data, &free_op2 TSRMLS_CC);
- if (IS_CONST != IS_UNUSED && Z_TYPE_P(container) == IS_ARRAY) {
+ if (IS_CONST != IS_UNUSED && EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
HashTable *ht = Z_ARRVAL_P(container);
zval *value;
zend_string *str;
@@ -5780,8 +5771,8 @@ num_index_prop:
} else /* if (opline->extended_value & ZEND_ISEMPTY) */ {
result = (value == NULL || !i_zend_is_true(value TSRMLS_CC));
}
- } else if (IS_CONST == IS_UNUSED || Z_TYPE_P(container) == IS_OBJECT) {
- if (Z_OBJ_HT_P(container)->has_dimension) {
+ } else if (IS_CONST == IS_UNUSED || EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
+ if (EXPECTED(Z_OBJ_HT_P(container)->has_dimension)) {
result = Z_OBJ_HT_P(container)->has_dimension(container, offset, (opline->extended_value & ZEND_ISSET) == 0 TSRMLS_CC);
} else {
zend_error(E_NOTICE, "Trying to check element of non-array");
@@ -5790,7 +5781,7 @@ num_index_prop:
if ((opline->extended_value & ZEND_ISSET) == 0) {
result = !result;
}
- } else if (Z_TYPE_P(container) == IS_STRING) { /* string offsets */
+ } else if (EXPECTED(Z_TYPE_P(container) == IS_STRING)) { /* string offsets */
zval tmp;
result = 0;
@@ -5806,7 +5797,7 @@ num_index_prop:
offset = &tmp;
}
}
- if (Z_TYPE_P(offset) == IS_LONG) {
+ if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) {
if (offset->value.lval >= 0 && (size_t)offset->value.lval < Z_STRLEN_P(container)) {
if ((opline->extended_value & ZEND_ISSET) ||
Z_STRVAL_P(container)[offset->value.lval] != '0') {
@@ -5840,8 +5831,8 @@ static int ZEND_FASTCALL ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CONST_TMP_HANDLER(ZEN
container = opline->op1.zv;
offset = _get_zval_ptr_tmp(opline->op2.var, execute_data, &free_op2 TSRMLS_CC);
- if (IS_CONST == IS_UNUSED || Z_TYPE_P(container) == IS_OBJECT) {
- if (Z_OBJ_HT_P(container)->has_property) {
+ if (IS_CONST == IS_UNUSED || EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
+ if (EXPECTED(Z_OBJ_HT_P(container)->has_property)) {
result = Z_OBJ_HT_P(container)->has_property(container, offset, (opline->extended_value & ZEND_ISSET) == 0, ((IS_TMP_VAR == IS_CONST) ? (EX(run_time_cache) + Z_CACHE_SLOT_P(offset)) : NULL) TSRMLS_CC);
} else {
zend_error(E_NOTICE, "Trying to check property of non-object");
@@ -6987,18 +6978,22 @@ static int ZEND_FASTCALL ZEND_ISSET_ISEMPTY_VAR_SPEC_CONST_VAR_HANDLER(ZEND_OPC
{
USE_OPLINE
zval *value;
- zend_bool isset = 1;
SAVE_OPLINE();
if (IS_CONST == IS_CV &&
IS_VAR == IS_UNUSED &&
(opline->extended_value & ZEND_QUICK_SET)) {
- if (Z_TYPE_P(EX_VAR(opline->op1.var)) != IS_UNDEF) {
- value = EX_VAR(opline->op1.var);
- ZVAL_DEREF(value);
- } else {
- isset = 0;
+ value = EX_VAR(opline->op1.var);
+ if (opline->extended_value & ZEND_ISSET) {
+ ZVAL_BOOL(EX_VAR(opline->result.var),
+ Z_TYPE_P(value) > IS_NULL &&
+ (!Z_ISREF_P(value) || Z_TYPE_P(Z_REFVAL_P(value)) != IS_NULL));
+ } else /* if (opline->extended_value & ZEND_ISEMPTY) */ {
+ ZVAL_BOOL(EX_VAR(opline->result.var),
+ !i_zend_is_true(value TSRMLS_CC));
+ CHECK_EXCEPTION();
}
+ ZEND_VM_NEXT_OPCODE();
} else {
zval tmp, *varname = opline->op1.zv;
@@ -7026,40 +7021,27 @@ static int ZEND_FASTCALL ZEND_ISSET_ISEMPTY_VAR_SPEC_CONST_VAR_HANDLER(ZEND_OPC
ce = Z_CE_P(EX_VAR(opline->op2.var));
}
value = zend_std_get_static_property(ce, Z_STR_P(varname), 1, ((IS_CONST == IS_CONST) ? (EX(run_time_cache) + Z_CACHE_SLOT_P(varname)) : NULL) TSRMLS_CC);
- if (!value) {
- isset = 0;
- }
} else {
HashTable *target_symbol_table = zend_get_target_symbol_table(execute_data, opline->extended_value & ZEND_FETCH_TYPE_MASK TSRMLS_CC);
value = zend_hash_find_ind(target_symbol_table, Z_STR_P(varname));
- if (!value || Z_ISUNDEF_P(value)) {
- isset = 0;
- }
}
if (IS_CONST != IS_CONST && varname == &tmp) {
zval_dtor(&tmp);
}
- }
-
- if (opline->extended_value & ZEND_ISSET) {
- if (isset && Z_TYPE_P(value) != IS_NULL &&
- (!Z_ISREF_P(value) || Z_TYPE_P(Z_REFVAL_P(value)) != IS_NULL)) {
- ZVAL_BOOL(EX_VAR(opline->result.var), 1);
- } else {
- ZVAL_BOOL(EX_VAR(opline->result.var), 0);
- }
- } else /* if (opline->extended_value & ZEND_ISEMPTY) */ {
- if (!isset || !i_zend_is_true(value TSRMLS_CC)) {
- ZVAL_BOOL(EX_VAR(opline->result.var), 1);
- } else {
- ZVAL_BOOL(EX_VAR(opline->result.var), 0);
+ if (opline->extended_value & ZEND_ISSET) {
+ ZVAL_BOOL(EX_VAR(opline->result.var),
+ value && Z_TYPE_P(value) > IS_NULL &&
+ (!Z_ISREF_P(value) || Z_TYPE_P(Z_REFVAL_P(value)) != IS_NULL));
+ } else /* if (opline->extended_value & ZEND_ISEMPTY) */ {
+ ZVAL_BOOL(EX_VAR(opline->result.var),
+ !value || !i_zend_is_true(value TSRMLS_CC));
}
- }
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ CHECK_EXCEPTION();
+ ZEND_VM_NEXT_OPCODE();
+ }
}
static int ZEND_FASTCALL ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CONST_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -7075,7 +7057,7 @@ static int ZEND_FASTCALL ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CONST_VAR_HANDLER(ZEND
container = opline->op1.zv;
offset = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2 TSRMLS_CC);
- if (IS_CONST != IS_UNUSED && Z_TYPE_P(container) == IS_ARRAY) {
+ if (IS_CONST != IS_UNUSED && EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
HashTable *ht = Z_ARRVAL_P(container);
zval *value;
zend_string *str;
@@ -7128,8 +7110,8 @@ num_index_prop:
} else /* if (opline->extended_value & ZEND_ISEMPTY) */ {
result = (value == NULL || !i_zend_is_true(value TSRMLS_CC));
}
- } else if (IS_CONST == IS_UNUSED || Z_TYPE_P(container) == IS_OBJECT) {
- if (Z_OBJ_HT_P(container)->has_dimension) {
+ } else if (IS_CONST == IS_UNUSED || EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
+ if (EXPECTED(Z_OBJ_HT_P(container)->has_dimension)) {
result = Z_OBJ_HT_P(container)->has_dimension(container, offset, (opline->extended_value & ZEND_ISSET) == 0 TSRMLS_CC);
} else {
zend_error(E_NOTICE, "Trying to check element of non-array");
@@ -7138,7 +7120,7 @@ num_index_prop:
if ((opline->extended_value & ZEND_ISSET) == 0) {
result = !result;
}
- } else if (Z_TYPE_P(container) == IS_STRING) { /* string offsets */
+ } else if (EXPECTED(Z_TYPE_P(container) == IS_STRING)) { /* string offsets */
zval tmp;
result = 0;
@@ -7154,7 +7136,7 @@ num_index_prop:
offset = &tmp;
}
}
- if (Z_TYPE_P(offset) == IS_LONG) {
+ if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) {
if (offset->value.lval >= 0 && (size_t)offset->value.lval < Z_STRLEN_P(container)) {
if ((opline->extended_value & ZEND_ISSET) ||
Z_STRVAL_P(container)[offset->value.lval] != '0') {
@@ -7188,8 +7170,8 @@ static int ZEND_FASTCALL ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CONST_VAR_HANDLER(ZEN
container = opline->op1.zv;
offset = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2 TSRMLS_CC);
- if (IS_CONST == IS_UNUSED || Z_TYPE_P(container) == IS_OBJECT) {
- if (Z_OBJ_HT_P(container)->has_property) {
+ if (IS_CONST == IS_UNUSED || EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
+ if (EXPECTED(Z_OBJ_HT_P(container)->has_property)) {
result = Z_OBJ_HT_P(container)->has_property(container, offset, (opline->extended_value & ZEND_ISSET) == 0, ((IS_VAR == IS_CONST) ? (EX(run_time_cache) + Z_CACHE_SLOT_P(offset)) : NULL) TSRMLS_CC);
} else {
zend_error(E_NOTICE, "Trying to check property of non-object");
@@ -7862,18 +7844,22 @@ static int ZEND_FASTCALL ZEND_ISSET_ISEMPTY_VAR_SPEC_CONST_UNUSED_HANDLER(ZEND_
{
USE_OPLINE
zval *value;
- zend_bool isset = 1;
SAVE_OPLINE();
if (IS_CONST == IS_CV &&
IS_UNUSED == IS_UNUSED &&
(opline->extended_value & ZEND_QUICK_SET)) {
- if (Z_TYPE_P(EX_VAR(opline->op1.var)) != IS_UNDEF) {
- value = EX_VAR(opline->op1.var);
- ZVAL_DEREF(value);
- } else {
- isset = 0;
+ value = EX_VAR(opline->op1.var);
+ if (opline->extended_value & ZEND_ISSET) {
+ ZVAL_BOOL(EX_VAR(opline->result.var),
+ Z_TYPE_P(value) > IS_NULL &&
+ (!Z_ISREF_P(value) || Z_TYPE_P(Z_REFVAL_P(value)) != IS_NULL));
+ } else /* if (opline->extended_value & ZEND_ISEMPTY) */ {
+ ZVAL_BOOL(EX_VAR(opline->result.var),
+ !i_zend_is_true(value TSRMLS_CC));
+ CHECK_EXCEPTION();
}
+ ZEND_VM_NEXT_OPCODE();
} else {
zval tmp, *varname = opline->op1.zv;
@@ -7901,40 +7887,27 @@ static int ZEND_FASTCALL ZEND_ISSET_ISEMPTY_VAR_SPEC_CONST_UNUSED_HANDLER(ZEND_
ce = Z_CE_P(EX_VAR(opline->op2.var));
}
value = zend_std_get_static_property(ce, Z_STR_P(varname), 1, ((IS_CONST == IS_CONST) ? (EX(run_time_cache) + Z_CACHE_SLOT_P(varname)) : NULL) TSRMLS_CC);
- if (!value) {
- isset = 0;
- }
} else {
HashTable *target_symbol_table = zend_get_target_symbol_table(execute_data, opline->extended_value & ZEND_FETCH_TYPE_MASK TSRMLS_CC);
value = zend_hash_find_ind(target_symbol_table, Z_STR_P(varname));
- if (!value || Z_ISUNDEF_P(value)) {
- isset = 0;
- }
}
if (IS_CONST != IS_CONST && varname == &tmp) {
zval_dtor(&tmp);
}
- }
-
- if (opline->extended_value & ZEND_ISSET) {
- if (isset && Z_TYPE_P(value) != IS_NULL &&
- (!Z_ISREF_P(value) || Z_TYPE_P(Z_REFVAL_P(value)) != IS_NULL)) {
- ZVAL_BOOL(EX_VAR(opline->result.var), 1);
- } else {
- ZVAL_BOOL(EX_VAR(opline->result.var), 0);
- }
- } else /* if (opline->extended_value & ZEND_ISEMPTY) */ {
- if (!isset || !i_zend_is_true(value TSRMLS_CC)) {
- ZVAL_BOOL(EX_VAR(opline->result.var), 1);
- } else {
- ZVAL_BOOL(EX_VAR(opline->result.var), 0);
+ if (opline->extended_value & ZEND_ISSET) {
+ ZVAL_BOOL(EX_VAR(opline->result.var),
+ value && Z_TYPE_P(value) > IS_NULL &&
+ (!Z_ISREF_P(value) || Z_TYPE_P(Z_REFVAL_P(value)) != IS_NULL));
+ } else /* if (opline->extended_value & ZEND_ISEMPTY) */ {
+ ZVAL_BOOL(EX_VAR(opline->result.var),
+ !value || !i_zend_is_true(value TSRMLS_CC));
}
- }
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ CHECK_EXCEPTION();
+ ZEND_VM_NEXT_OPCODE();
+ }
}
static int ZEND_FASTCALL ZEND_DECLARE_LAMBDA_FUNCTION_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -8905,7 +8878,7 @@ static int ZEND_FASTCALL ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CONST_CV_HANDLER(ZEND_
container = opline->op1.zv;
offset = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var TSRMLS_CC);
- if (IS_CONST != IS_UNUSED && Z_TYPE_P(container) == IS_ARRAY) {
+ if (IS_CONST != IS_UNUSED && EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
HashTable *ht = Z_ARRVAL_P(container);
zval *value;
zend_string *str;
@@ -8958,8 +8931,8 @@ num_index_prop:
} else /* if (opline->extended_value & ZEND_ISEMPTY) */ {
result = (value == NULL || !i_zend_is_true(value TSRMLS_CC));
}
- } else if (IS_CONST == IS_UNUSED || Z_TYPE_P(container) == IS_OBJECT) {
- if (Z_OBJ_HT_P(container)->has_dimension) {
+ } else if (IS_CONST == IS_UNUSED || EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
+ if (EXPECTED(Z_OBJ_HT_P(container)->has_dimension)) {
result = Z_OBJ_HT_P(container)->has_dimension(container, offset, (opline->extended_value & ZEND_ISSET) == 0 TSRMLS_CC);
} else {
zend_error(E_NOTICE, "Trying to check element of non-array");
@@ -8968,7 +8941,7 @@ num_index_prop:
if ((opline->extended_value & ZEND_ISSET) == 0) {
result = !result;
}
- } else if (Z_TYPE_P(container) == IS_STRING) { /* string offsets */
+ } else if (EXPECTED(Z_TYPE_P(container) == IS_STRING)) { /* string offsets */
zval tmp;
result = 0;
@@ -8984,7 +8957,7 @@ num_index_prop:
offset = &tmp;
}
}
- if (Z_TYPE_P(offset) == IS_LONG) {
+ if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) {
if (offset->value.lval >= 0 && (size_t)offset->value.lval < Z_STRLEN_P(container)) {
if ((opline->extended_value & ZEND_ISSET) ||
Z_STRVAL_P(container)[offset->value.lval] != '0') {
@@ -9017,8 +8990,8 @@ static int ZEND_FASTCALL ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CONST_CV_HANDLER(ZEND
container = opline->op1.zv;
offset = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var TSRMLS_CC);
- if (IS_CONST == IS_UNUSED || Z_TYPE_P(container) == IS_OBJECT) {
- if (Z_OBJ_HT_P(container)->has_property) {
+ if (IS_CONST == IS_UNUSED || EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
+ if (EXPECTED(Z_OBJ_HT_P(container)->has_property)) {
result = Z_OBJ_HT_P(container)->has_property(container, offset, (opline->extended_value & ZEND_ISSET) == 0, ((IS_CV == IS_CONST) ? (EX(run_time_cache) + Z_CACHE_SLOT_P(offset)) : NULL) TSRMLS_CC);
} else {
zend_error(E_NOTICE, "Trying to check property of non-object");
@@ -11266,18 +11239,22 @@ static int ZEND_FASTCALL ZEND_ISSET_ISEMPTY_VAR_SPEC_TMP_CONST_HANDLER(ZEND_OPC
{
USE_OPLINE
zval *value;
- zend_bool isset = 1;
SAVE_OPLINE();
if (IS_TMP_VAR == IS_CV &&
IS_CONST == IS_UNUSED &&
(opline->extended_value & ZEND_QUICK_SET)) {
- if (Z_TYPE_P(EX_VAR(opline->op1.var)) != IS_UNDEF) {
- value = EX_VAR(opline->op1.var);
- ZVAL_DEREF(value);
- } else {
- isset = 0;
+ value = EX_VAR(opline->op1.var);
+ if (opline->extended_value & ZEND_ISSET) {
+ ZVAL_BOOL(EX_VAR(opline->result.var),
+ Z_TYPE_P(value) > IS_NULL &&
+ (!Z_ISREF_P(value) || Z_TYPE_P(Z_REFVAL_P(value)) != IS_NULL));
+ } else /* if (opline->extended_value & ZEND_ISEMPTY) */ {
+ ZVAL_BOOL(EX_VAR(opline->result.var),
+ !i_zend_is_true(value TSRMLS_CC));
+ CHECK_EXCEPTION();
}
+ ZEND_VM_NEXT_OPCODE();
} else {
zend_free_op free_op1;
zval tmp, *varname = _get_zval_ptr_tmp(opline->op1.var, execute_data, &free_op1 TSRMLS_CC);
@@ -11305,40 +11282,28 @@ static int ZEND_FASTCALL ZEND_ISSET_ISEMPTY_VAR_SPEC_TMP_CONST_HANDLER(ZEND_OPC
ce = Z_CE_P(EX_VAR(opline->op2.var));
}
value = zend_std_get_static_property(ce, Z_STR_P(varname), 1, ((IS_TMP_VAR == IS_CONST) ? (EX(run_time_cache) + Z_CACHE_SLOT_P(varname)) : NULL) TSRMLS_CC);
- if (!value) {
- isset = 0;
- }
} else {
HashTable *target_symbol_table = zend_get_target_symbol_table(execute_data, opline->extended_value & ZEND_FETCH_TYPE_MASK TSRMLS_CC);
value = zend_hash_find_ind(target_symbol_table, Z_STR_P(varname));
- if (!value || Z_ISUNDEF_P(value)) {
- isset = 0;
- }
}
if (IS_TMP_VAR != IS_CONST && varname == &tmp) {
zval_dtor(&tmp);
}
zval_ptr_dtor_nogc(free_op1.var);
- }
- if (opline->extended_value & ZEND_ISSET) {
- if (isset && Z_TYPE_P(value) != IS_NULL &&
- (!Z_ISREF_P(value) || Z_TYPE_P(Z_REFVAL_P(value)) != IS_NULL)) {
- ZVAL_BOOL(EX_VAR(opline->result.var), 1);
- } else {
- ZVAL_BOOL(EX_VAR(opline->result.var), 0);
- }
- } else /* if (opline->extended_value & ZEND_ISEMPTY) */ {
- if (!isset || !i_zend_is_true(value TSRMLS_CC)) {
- ZVAL_BOOL(EX_VAR(opline->result.var), 1);
- } else {
- ZVAL_BOOL(EX_VAR(opline->result.var), 0);
+ if (opline->extended_value & ZEND_ISSET) {
+ ZVAL_BOOL(EX_VAR(opline->result.var),
+ value && Z_TYPE_P(value) > IS_NULL &&
+ (!Z_ISREF_P(value) || Z_TYPE_P(Z_REFVAL_P(value)) != IS_NULL));
+ } else /* if (opline->extended_value & ZEND_ISEMPTY) */ {
+ ZVAL_BOOL(EX_VAR(opline->result.var),
+ !value || !i_zend_is_true(value TSRMLS_CC));
}
- }
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ CHECK_EXCEPTION();
+ ZEND_VM_NEXT_OPCODE();
+ }
}
static int ZEND_FASTCALL ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_TMP_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -11354,7 +11319,7 @@ static int ZEND_FASTCALL ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_TMP_CONST_HANDLER(ZEND
container = _get_zval_ptr_tmp(opline->op1.var, execute_data, &free_op1 TSRMLS_CC);
offset = opline->op2.zv;
- if (IS_TMP_VAR != IS_UNUSED && Z_TYPE_P(container) == IS_ARRAY) {
+ if (IS_TMP_VAR != IS_UNUSED && EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
HashTable *ht = Z_ARRVAL_P(container);
zval *value;
zend_string *str;
@@ -11407,8 +11372,8 @@ num_index_prop:
} else /* if (opline->extended_value & ZEND_ISEMPTY) */ {
result = (value == NULL || !i_zend_is_true(value TSRMLS_CC));
}
- } else if (IS_TMP_VAR == IS_UNUSED || Z_TYPE_P(container) == IS_OBJECT) {
- if (Z_OBJ_HT_P(container)->has_dimension) {
+ } else if (IS_TMP_VAR == IS_UNUSED || EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
+ if (EXPECTED(Z_OBJ_HT_P(container)->has_dimension)) {
result = Z_OBJ_HT_P(container)->has_dimension(container, offset, (opline->extended_value & ZEND_ISSET) == 0 TSRMLS_CC);
} else {
zend_error(E_NOTICE, "Trying to check element of non-array");
@@ -11417,7 +11382,7 @@ num_index_prop:
if ((opline->extended_value & ZEND_ISSET) == 0) {
result = !result;
}
- } else if (Z_TYPE_P(container) == IS_STRING) { /* string offsets */
+ } else if (EXPECTED(Z_TYPE_P(container) == IS_STRING)) { /* string offsets */
zval tmp;
result = 0;
@@ -11433,7 +11398,7 @@ num_index_prop:
offset = &tmp;
}
}
- if (Z_TYPE_P(offset) == IS_LONG) {
+ if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) {
if (offset->value.lval >= 0 && (size_t)offset->value.lval < Z_STRLEN_P(container)) {
if ((opline->extended_value & ZEND_ISSET) ||
Z_STRVAL_P(container)[offset->value.lval] != '0') {
@@ -11466,8 +11431,8 @@ static int ZEND_FASTCALL ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_TMP_CONST_HANDLER(ZEN
container = _get_zval_ptr_tmp(opline->op1.var, execute_data, &free_op1 TSRMLS_CC);
offset = opline->op2.zv;
- if (IS_TMP_VAR == IS_UNUSED || Z_TYPE_P(container) == IS_OBJECT) {
- if (Z_OBJ_HT_P(container)->has_property) {
+ if (IS_TMP_VAR == IS_UNUSED || EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
+ if (EXPECTED(Z_OBJ_HT_P(container)->has_property)) {
result = Z_OBJ_HT_P(container)->has_property(container, offset, (opline->extended_value & ZEND_ISSET) == 0, ((IS_CONST == IS_CONST) ? (EX(run_time_cache) + Z_CACHE_SLOT_P(offset)) : NULL) TSRMLS_CC);
} else {
zend_error(E_NOTICE, "Trying to check property of non-object");
@@ -12368,7 +12333,7 @@ static int ZEND_FASTCALL ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_TMP_TMP_HANDLER(ZEND_O
container = _get_zval_ptr_tmp(opline->op1.var, execute_data, &free_op1 TSRMLS_CC);
offset = _get_zval_ptr_tmp(opline->op2.var, execute_data, &free_op2 TSRMLS_CC);
- if (IS_TMP_VAR != IS_UNUSED && Z_TYPE_P(container) == IS_ARRAY) {
+ if (IS_TMP_VAR != IS_UNUSED && EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
HashTable *ht = Z_ARRVAL_P(container);
zval *value;
zend_string *str;
@@ -12421,8 +12386,8 @@ num_index_prop:
} else /* if (opline->extended_value & ZEND_ISEMPTY) */ {
result = (value == NULL || !i_zend_is_true(value TSRMLS_CC));
}
- } else if (IS_TMP_VAR == IS_UNUSED || Z_TYPE_P(container) == IS_OBJECT) {
- if (Z_OBJ_HT_P(container)->has_dimension) {
+ } else if (IS_TMP_VAR == IS_UNUSED || EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
+ if (EXPECTED(Z_OBJ_HT_P(container)->has_dimension)) {
result = Z_OBJ_HT_P(container)->has_dimension(container, offset, (opline->extended_value & ZEND_ISSET) == 0 TSRMLS_CC);
} else {
zend_error(E_NOTICE, "Trying to check element of non-array");
@@ -12431,7 +12396,7 @@ num_index_prop:
if ((opline->extended_value & ZEND_ISSET) == 0) {
result = !result;
}
- } else if (Z_TYPE_P(container) == IS_STRING) { /* string offsets */
+ } else if (EXPECTED(Z_TYPE_P(container) == IS_STRING)) { /* string offsets */
zval tmp;
result = 0;
@@ -12447,7 +12412,7 @@ num_index_prop:
offset = &tmp;
}
}
- if (Z_TYPE_P(offset) == IS_LONG) {
+ if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) {
if (offset->value.lval >= 0 && (size_t)offset->value.lval < Z_STRLEN_P(container)) {
if ((opline->extended_value & ZEND_ISSET) ||
Z_STRVAL_P(container)[offset->value.lval] != '0') {
@@ -12481,8 +12446,8 @@ static int ZEND_FASTCALL ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_TMP_TMP_HANDLER(ZEND_
container = _get_zval_ptr_tmp(opline->op1.var, execute_data, &free_op1 TSRMLS_CC);
offset = _get_zval_ptr_tmp(opline->op2.var, execute_data, &free_op2 TSRMLS_CC);
- if (IS_TMP_VAR == IS_UNUSED || Z_TYPE_P(container) == IS_OBJECT) {
- if (Z_OBJ_HT_P(container)->has_property) {
+ if (IS_TMP_VAR == IS_UNUSED || EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
+ if (EXPECTED(Z_OBJ_HT_P(container)->has_property)) {
result = Z_OBJ_HT_P(container)->has_property(container, offset, (opline->extended_value & ZEND_ISSET) == 0, ((IS_TMP_VAR == IS_CONST) ? (EX(run_time_cache) + Z_CACHE_SLOT_P(offset)) : NULL) TSRMLS_CC);
} else {
zend_error(E_NOTICE, "Trying to check property of non-object");
@@ -13601,18 +13566,22 @@ static int ZEND_FASTCALL ZEND_ISSET_ISEMPTY_VAR_SPEC_TMP_VAR_HANDLER(ZEND_OPCOD
{
USE_OPLINE
zval *value;
- zend_bool isset = 1;
SAVE_OPLINE();
if (IS_TMP_VAR == IS_CV &&
IS_VAR == IS_UNUSED &&
(opline->extended_value & ZEND_QUICK_SET)) {
- if (Z_TYPE_P(EX_VAR(opline->op1.var)) != IS_UNDEF) {
- value = EX_VAR(opline->op1.var);
- ZVAL_DEREF(value);
- } else {
- isset = 0;
+ value = EX_VAR(opline->op1.var);
+ if (opline->extended_value & ZEND_ISSET) {
+ ZVAL_BOOL(EX_VAR(opline->result.var),
+ Z_TYPE_P(value) > IS_NULL &&
+ (!Z_ISREF_P(value) || Z_TYPE_P(Z_REFVAL_P(value)) != IS_NULL));
+ } else /* if (opline->extended_value & ZEND_ISEMPTY) */ {
+ ZVAL_BOOL(EX_VAR(opline->result.var),
+ !i_zend_is_true(value TSRMLS_CC));
+ CHECK_EXCEPTION();
}
+ ZEND_VM_NEXT_OPCODE();
} else {
zend_free_op free_op1;
zval tmp, *varname = _get_zval_ptr_tmp(opline->op1.var, execute_data, &free_op1 TSRMLS_CC);
@@ -13640,40 +13609,28 @@ static int ZEND_FASTCALL ZEND_ISSET_ISEMPTY_VAR_SPEC_TMP_VAR_HANDLER(ZEND_OPCOD
ce = Z_CE_P(EX_VAR(opline->op2.var));
}
value = zend_std_get_static_property(ce, Z_STR_P(varname), 1, ((IS_TMP_VAR == IS_CONST) ? (EX(run_time_cache) + Z_CACHE_SLOT_P(varname)) : NULL) TSRMLS_CC);
- if (!value) {
- isset = 0;
- }
} else {
HashTable *target_symbol_table = zend_get_target_symbol_table(execute_data, opline->extended_value & ZEND_FETCH_TYPE_MASK TSRMLS_CC);
value = zend_hash_find_ind(target_symbol_table, Z_STR_P(varname));
- if (!value || Z_ISUNDEF_P(value)) {
- isset = 0;
- }
}
if (IS_TMP_VAR != IS_CONST && varname == &tmp) {
zval_dtor(&tmp);
}
zval_ptr_dtor_nogc(free_op1.var);
- }
- if (opline->extended_value & ZEND_ISSET) {
- if (isset && Z_TYPE_P(value) != IS_NULL &&
- (!Z_ISREF_P(value) || Z_TYPE_P(Z_REFVAL_P(value)) != IS_NULL)) {
- ZVAL_BOOL(EX_VAR(opline->result.var), 1);
- } else {
- ZVAL_BOOL(EX_VAR(opline->result.var), 0);
- }
- } else /* if (opline->extended_value & ZEND_ISEMPTY) */ {
- if (!isset || !i_zend_is_true(value TSRMLS_CC)) {
- ZVAL_BOOL(EX_VAR(opline->result.var), 1);
- } else {
- ZVAL_BOOL(EX_VAR(opline->result.var), 0);
+ if (opline->extended_value & ZEND_ISSET) {
+ ZVAL_BOOL(EX_VAR(opline->result.var),
+ value && Z_TYPE_P(value) > IS_NULL &&
+ (!Z_ISREF_P(value) || Z_TYPE_P(Z_REFVAL_P(value)) != IS_NULL));
+ } else /* if (opline->extended_value & ZEND_ISEMPTY) */ {
+ ZVAL_BOOL(EX_VAR(opline->result.var),
+ !value || !i_zend_is_true(value TSRMLS_CC));
}
- }
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ CHECK_EXCEPTION();
+ ZEND_VM_NEXT_OPCODE();
+ }
}
static int ZEND_FASTCALL ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_TMP_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -13689,7 +13646,7 @@ static int ZEND_FASTCALL ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_TMP_VAR_HANDLER(ZEND_O
container = _get_zval_ptr_tmp(opline->op1.var, execute_data, &free_op1 TSRMLS_CC);
offset = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2 TSRMLS_CC);
- if (IS_TMP_VAR != IS_UNUSED && Z_TYPE_P(container) == IS_ARRAY) {
+ if (IS_TMP_VAR != IS_UNUSED && EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
HashTable *ht = Z_ARRVAL_P(container);
zval *value;
zend_string *str;
@@ -13742,8 +13699,8 @@ num_index_prop:
} else /* if (opline->extended_value & ZEND_ISEMPTY) */ {
result = (value == NULL || !i_zend_is_true(value TSRMLS_CC));
}
- } else if (IS_TMP_VAR == IS_UNUSED || Z_TYPE_P(container) == IS_OBJECT) {
- if (Z_OBJ_HT_P(container)->has_dimension) {
+ } else if (IS_TMP_VAR == IS_UNUSED || EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
+ if (EXPECTED(Z_OBJ_HT_P(container)->has_dimension)) {
result = Z_OBJ_HT_P(container)->has_dimension(container, offset, (opline->extended_value & ZEND_ISSET) == 0 TSRMLS_CC);
} else {
zend_error(E_NOTICE, "Trying to check element of non-array");
@@ -13752,7 +13709,7 @@ num_index_prop:
if ((opline->extended_value & ZEND_ISSET) == 0) {
result = !result;
}
- } else if (Z_TYPE_P(container) == IS_STRING) { /* string offsets */
+ } else if (EXPECTED(Z_TYPE_P(container) == IS_STRING)) { /* string offsets */
zval tmp;
result = 0;
@@ -13768,7 +13725,7 @@ num_index_prop:
offset = &tmp;
}
}
- if (Z_TYPE_P(offset) == IS_LONG) {
+ if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) {
if (offset->value.lval >= 0 && (size_t)offset->value.lval < Z_STRLEN_P(container)) {
if ((opline->extended_value & ZEND_ISSET) ||
Z_STRVAL_P(container)[offset->value.lval] != '0') {
@@ -13802,8 +13759,8 @@ static int ZEND_FASTCALL ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_TMP_VAR_HANDLER(ZEND_
container = _get_zval_ptr_tmp(opline->op1.var, execute_data, &free_op1 TSRMLS_CC);
offset = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2 TSRMLS_CC);
- if (IS_TMP_VAR == IS_UNUSED || Z_TYPE_P(container) == IS_OBJECT) {
- if (Z_OBJ_HT_P(container)->has_property) {
+ if (IS_TMP_VAR == IS_UNUSED || EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
+ if (EXPECTED(Z_OBJ_HT_P(container)->has_property)) {
result = Z_OBJ_HT_P(container)->has_property(container, offset, (opline->extended_value & ZEND_ISSET) == 0, ((IS_VAR == IS_CONST) ? (EX(run_time_cache) + Z_CACHE_SLOT_P(offset)) : NULL) TSRMLS_CC);
} else {
zend_error(E_NOTICE, "Trying to check property of non-object");
@@ -14352,18 +14309,22 @@ static int ZEND_FASTCALL ZEND_ISSET_ISEMPTY_VAR_SPEC_TMP_UNUSED_HANDLER(ZEND_OP
{
USE_OPLINE
zval *value;
- zend_bool isset = 1;
SAVE_OPLINE();
if (IS_TMP_VAR == IS_CV &&
IS_UNUSED == IS_UNUSED &&
(opline->extended_value & ZEND_QUICK_SET)) {
- if (Z_TYPE_P(EX_VAR(opline->op1.var)) != IS_UNDEF) {
- value = EX_VAR(opline->op1.var);
- ZVAL_DEREF(value);
- } else {
- isset = 0;
+ value = EX_VAR(opline->op1.var);
+ if (opline->extended_value & ZEND_ISSET) {
+ ZVAL_BOOL(EX_VAR(opline->result.var),
+ Z_TYPE_P(value) > IS_NULL &&
+ (!Z_ISREF_P(value) || Z_TYPE_P(Z_REFVAL_P(value)) != IS_NULL));
+ } else /* if (opline->extended_value & ZEND_ISEMPTY) */ {
+ ZVAL_BOOL(EX_VAR(opline->result.var),
+ !i_zend_is_true(value TSRMLS_CC));
+ CHECK_EXCEPTION();
}
+ ZEND_VM_NEXT_OPCODE();
} else {
zend_free_op free_op1;
zval tmp, *varname = _get_zval_ptr_tmp(opline->op1.var, execute_data, &free_op1 TSRMLS_CC);
@@ -14391,40 +14352,28 @@ static int ZEND_FASTCALL ZEND_ISSET_ISEMPTY_VAR_SPEC_TMP_UNUSED_HANDLER(ZEND_OP
ce = Z_CE_P(EX_VAR(opline->op2.var));
}
value = zend_std_get_static_property(ce, Z_STR_P(varname), 1, ((IS_TMP_VAR == IS_CONST) ? (EX(run_time_cache) + Z_CACHE_SLOT_P(varname)) : NULL) TSRMLS_CC);
- if (!value) {
- isset = 0;
- }
} else {
HashTable *target_symbol_table = zend_get_target_symbol_table(execute_data, opline->extended_value & ZEND_FETCH_TYPE_MASK TSRMLS_CC);
value = zend_hash_find_ind(target_symbol_table, Z_STR_P(varname));
- if (!value || Z_ISUNDEF_P(value)) {
- isset = 0;
- }
}
if (IS_TMP_VAR != IS_CONST && varname == &tmp) {
zval_dtor(&tmp);
}
zval_ptr_dtor_nogc(free_op1.var);
- }
- if (opline->extended_value & ZEND_ISSET) {
- if (isset && Z_TYPE_P(value) != IS_NULL &&
- (!Z_ISREF_P(value) || Z_TYPE_P(Z_REFVAL_P(value)) != IS_NULL)) {
- ZVAL_BOOL(EX_VAR(opline->result.var), 1);
- } else {
- ZVAL_BOOL(EX_VAR(opline->result.var), 0);
- }
- } else /* if (opline->extended_value & ZEND_ISEMPTY) */ {
- if (!isset || !i_zend_is_true(value TSRMLS_CC)) {
- ZVAL_BOOL(EX_VAR(opline->result.var), 1);
- } else {
- ZVAL_BOOL(EX_VAR(opline->result.var), 0);
+ if (opline->extended_value & ZEND_ISSET) {
+ ZVAL_BOOL(EX_VAR(opline->result.var),
+ value && Z_TYPE_P(value) > IS_NULL &&
+ (!Z_ISREF_P(value) || Z_TYPE_P(Z_REFVAL_P(value)) != IS_NULL));
+ } else /* if (opline->extended_value & ZEND_ISEMPTY) */ {
+ ZVAL_BOOL(EX_VAR(opline->result.var),
+ !value || !i_zend_is_true(value TSRMLS_CC));
}
- }
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ CHECK_EXCEPTION();
+ ZEND_VM_NEXT_OPCODE();
+ }
}
static int ZEND_FASTCALL ZEND_YIELD_SPEC_TMP_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -15289,7 +15238,7 @@ static int ZEND_FASTCALL ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_TMP_CV_HANDLER(ZEND_OP
container = _get_zval_ptr_tmp(opline->op1.var, execute_data, &free_op1 TSRMLS_CC);
offset = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var TSRMLS_CC);
- if (IS_TMP_VAR != IS_UNUSED && Z_TYPE_P(container) == IS_ARRAY) {
+ if (IS_TMP_VAR != IS_UNUSED && EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
HashTable *ht = Z_ARRVAL_P(container);
zval *value;
zend_string *str;
@@ -15342,8 +15291,8 @@ num_index_prop:
} else /* if (opline->extended_value & ZEND_ISEMPTY) */ {
result = (value == NULL || !i_zend_is_true(value TSRMLS_CC));
}
- } else if (IS_TMP_VAR == IS_UNUSED || Z_TYPE_P(container) == IS_OBJECT) {
- if (Z_OBJ_HT_P(container)->has_dimension) {
+ } else if (IS_TMP_VAR == IS_UNUSED || EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
+ if (EXPECTED(Z_OBJ_HT_P(container)->has_dimension)) {
result = Z_OBJ_HT_P(container)->has_dimension(container, offset, (opline->extended_value & ZEND_ISSET) == 0 TSRMLS_CC);
} else {
zend_error(E_NOTICE, "Trying to check element of non-array");
@@ -15352,7 +15301,7 @@ num_index_prop:
if ((opline->extended_value & ZEND_ISSET) == 0) {
result = !result;
}
- } else if (Z_TYPE_P(container) == IS_STRING) { /* string offsets */
+ } else if (EXPECTED(Z_TYPE_P(container) == IS_STRING)) { /* string offsets */
zval tmp;
result = 0;
@@ -15368,7 +15317,7 @@ num_index_prop:
offset = &tmp;
}
}
- if (Z_TYPE_P(offset) == IS_LONG) {
+ if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) {
if (offset->value.lval >= 0 && (size_t)offset->value.lval < Z_STRLEN_P(container)) {
if ((opline->extended_value & ZEND_ISSET) ||
Z_STRVAL_P(container)[offset->value.lval] != '0') {
@@ -15401,8 +15350,8 @@ static int ZEND_FASTCALL ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_TMP_CV_HANDLER(ZEND_O
container = _get_zval_ptr_tmp(opline->op1.var, execute_data, &free_op1 TSRMLS_CC);
offset = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var TSRMLS_CC);
- if (IS_TMP_VAR == IS_UNUSED || Z_TYPE_P(container) == IS_OBJECT) {
- if (Z_OBJ_HT_P(container)->has_property) {
+ if (IS_TMP_VAR == IS_UNUSED || EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
+ if (EXPECTED(Z_OBJ_HT_P(container)->has_property)) {
result = Z_OBJ_HT_P(container)->has_property(container, offset, (opline->extended_value & ZEND_ISSET) == 0, ((IS_CV == IS_CONST) ? (EX(run_time_cache) + Z_CACHE_SLOT_P(offset)) : NULL) TSRMLS_CC);
} else {
zend_error(E_NOTICE, "Trying to check property of non-object");
@@ -19307,18 +19256,22 @@ static int ZEND_FASTCALL ZEND_ISSET_ISEMPTY_VAR_SPEC_VAR_CONST_HANDLER(ZEND_OPC
{
USE_OPLINE
zval *value;
- zend_bool isset = 1;
SAVE_OPLINE();
if (IS_VAR == IS_CV &&
IS_CONST == IS_UNUSED &&
(opline->extended_value & ZEND_QUICK_SET)) {
- if (Z_TYPE_P(EX_VAR(opline->op1.var)) != IS_UNDEF) {
- value = EX_VAR(opline->op1.var);
- ZVAL_DEREF(value);
- } else {
- isset = 0;
+ value = EX_VAR(opline->op1.var);
+ if (opline->extended_value & ZEND_ISSET) {
+ ZVAL_BOOL(EX_VAR(opline->result.var),
+ Z_TYPE_P(value) > IS_NULL &&
+ (!Z_ISREF_P(value) || Z_TYPE_P(Z_REFVAL_P(value)) != IS_NULL));
+ } else /* if (opline->extended_value & ZEND_ISEMPTY) */ {
+ ZVAL_BOOL(EX_VAR(opline->result.var),
+ !i_zend_is_true(value TSRMLS_CC));
+ CHECK_EXCEPTION();
}
+ ZEND_VM_NEXT_OPCODE();
} else {
zend_free_op free_op1;
zval tmp, *varname = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1 TSRMLS_CC);
@@ -19346,40 +19299,28 @@ static int ZEND_FASTCALL ZEND_ISSET_ISEMPTY_VAR_SPEC_VAR_CONST_HANDLER(ZEND_OPC
ce = Z_CE_P(EX_VAR(opline->op2.var));
}
value = zend_std_get_static_property(ce, Z_STR_P(varname), 1, ((IS_VAR == IS_CONST) ? (EX(run_time_cache) + Z_CACHE_SLOT_P(varname)) : NULL) TSRMLS_CC);
- if (!value) {
- isset = 0;
- }
} else {
HashTable *target_symbol_table = zend_get_target_symbol_table(execute_data, opline->extended_value & ZEND_FETCH_TYPE_MASK TSRMLS_CC);
value = zend_hash_find_ind(target_symbol_table, Z_STR_P(varname));
- if (!value || Z_ISUNDEF_P(value)) {
- isset = 0;
- }
}
if (IS_VAR != IS_CONST && varname == &tmp) {
zval_dtor(&tmp);
}
zval_ptr_dtor_nogc(free_op1.var);
- }
- if (opline->extended_value & ZEND_ISSET) {
- if (isset && Z_TYPE_P(value) != IS_NULL &&
- (!Z_ISREF_P(value) || Z_TYPE_P(Z_REFVAL_P(value)) != IS_NULL)) {
- ZVAL_BOOL(EX_VAR(opline->result.var), 1);
- } else {
- ZVAL_BOOL(EX_VAR(opline->result.var), 0);
- }
- } else /* if (opline->extended_value & ZEND_ISEMPTY) */ {
- if (!isset || !i_zend_is_true(value TSRMLS_CC)) {
- ZVAL_BOOL(EX_VAR(opline->result.var), 1);
- } else {
- ZVAL_BOOL(EX_VAR(opline->result.var), 0);
+ if (opline->extended_value & ZEND_ISSET) {
+ ZVAL_BOOL(EX_VAR(opline->result.var),
+ value && Z_TYPE_P(value) > IS_NULL &&
+ (!Z_ISREF_P(value) || Z_TYPE_P(Z_REFVAL_P(value)) != IS_NULL));
+ } else /* if (opline->extended_value & ZEND_ISEMPTY) */ {
+ ZVAL_BOOL(EX_VAR(opline->result.var),
+ !value || !i_zend_is_true(value TSRMLS_CC));
}
- }
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ CHECK_EXCEPTION();
+ ZEND_VM_NEXT_OPCODE();
+ }
}
static int ZEND_FASTCALL ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -19395,7 +19336,7 @@ static int ZEND_FASTCALL ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_VAR_CONST_HANDLER(ZEND
container = _get_zval_ptr_var_deref(opline->op1.var, execute_data, &free_op1 TSRMLS_CC);
offset = opline->op2.zv;
- if (IS_VAR != IS_UNUSED && Z_TYPE_P(container) == IS_ARRAY) {
+ if (IS_VAR != IS_UNUSED && EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
HashTable *ht = Z_ARRVAL_P(container);
zval *value;
zend_string *str;
@@ -19448,8 +19389,8 @@ num_index_prop:
} else /* if (opline->extended_value & ZEND_ISEMPTY) */ {
result = (value == NULL || !i_zend_is_true(value TSRMLS_CC));
}
- } else if (IS_VAR == IS_UNUSED || Z_TYPE_P(container) == IS_OBJECT) {
- if (Z_OBJ_HT_P(container)->has_dimension) {
+ } else if (IS_VAR == IS_UNUSED || EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
+ if (EXPECTED(Z_OBJ_HT_P(container)->has_dimension)) {
result = Z_OBJ_HT_P(container)->has_dimension(container, offset, (opline->extended_value & ZEND_ISSET) == 0 TSRMLS_CC);
} else {
zend_error(E_NOTICE, "Trying to check element of non-array");
@@ -19458,7 +19399,7 @@ num_index_prop:
if ((opline->extended_value & ZEND_ISSET) == 0) {
result = !result;
}
- } else if (Z_TYPE_P(container) == IS_STRING) { /* string offsets */
+ } else if (EXPECTED(Z_TYPE_P(container) == IS_STRING)) { /* string offsets */
zval tmp;
result = 0;
@@ -19474,7 +19415,7 @@ num_index_prop:
offset = &tmp;
}
}
- if (Z_TYPE_P(offset) == IS_LONG) {
+ if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) {
if (offset->value.lval >= 0 && (size_t)offset->value.lval < Z_STRLEN_P(container)) {
if ((opline->extended_value & ZEND_ISSET) ||
Z_STRVAL_P(container)[offset->value.lval] != '0') {
@@ -19507,8 +19448,8 @@ static int ZEND_FASTCALL ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_VAR_CONST_HANDLER(ZEN
container = _get_zval_ptr_var_deref(opline->op1.var, execute_data, &free_op1 TSRMLS_CC);
offset = opline->op2.zv;
- if (IS_VAR == IS_UNUSED || Z_TYPE_P(container) == IS_OBJECT) {
- if (Z_OBJ_HT_P(container)->has_property) {
+ if (IS_VAR == IS_UNUSED || EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
+ if (EXPECTED(Z_OBJ_HT_P(container)->has_property)) {
result = Z_OBJ_HT_P(container)->has_property(container, offset, (opline->extended_value & ZEND_ISSET) == 0, ((IS_CONST == IS_CONST) ? (EX(run_time_cache) + Z_CACHE_SLOT_P(offset)) : NULL) TSRMLS_CC);
} else {
zend_error(E_NOTICE, "Trying to check property of non-object");
@@ -21405,7 +21346,7 @@ static int ZEND_FASTCALL ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_VAR_TMP_HANDLER(ZEND_O
container = _get_zval_ptr_var_deref(opline->op1.var, execute_data, &free_op1 TSRMLS_CC);
offset = _get_zval_ptr_tmp(opline->op2.var, execute_data, &free_op2 TSRMLS_CC);
- if (IS_VAR != IS_UNUSED && Z_TYPE_P(container) == IS_ARRAY) {
+ if (IS_VAR != IS_UNUSED && EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
HashTable *ht = Z_ARRVAL_P(container);
zval *value;
zend_string *str;
@@ -21458,8 +21399,8 @@ num_index_prop:
} else /* if (opline->extended_value & ZEND_ISEMPTY) */ {
result = (value == NULL || !i_zend_is_true(value TSRMLS_CC));
}
- } else if (IS_VAR == IS_UNUSED || Z_TYPE_P(container) == IS_OBJECT) {
- if (Z_OBJ_HT_P(container)->has_dimension) {
+ } else if (IS_VAR == IS_UNUSED || EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
+ if (EXPECTED(Z_OBJ_HT_P(container)->has_dimension)) {
result = Z_OBJ_HT_P(container)->has_dimension(container, offset, (opline->extended_value & ZEND_ISSET) == 0 TSRMLS_CC);
} else {
zend_error(E_NOTICE, "Trying to check element of non-array");
@@ -21468,7 +21409,7 @@ num_index_prop:
if ((opline->extended_value & ZEND_ISSET) == 0) {
result = !result;
}
- } else if (Z_TYPE_P(container) == IS_STRING) { /* string offsets */
+ } else if (EXPECTED(Z_TYPE_P(container) == IS_STRING)) { /* string offsets */
zval tmp;
result = 0;
@@ -21484,7 +21425,7 @@ num_index_prop:
offset = &tmp;
}
}
- if (Z_TYPE_P(offset) == IS_LONG) {
+ if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) {
if (offset->value.lval >= 0 && (size_t)offset->value.lval < Z_STRLEN_P(container)) {
if ((opline->extended_value & ZEND_ISSET) ||
Z_STRVAL_P(container)[offset->value.lval] != '0') {
@@ -21518,8 +21459,8 @@ static int ZEND_FASTCALL ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_VAR_TMP_HANDLER(ZEND_
container = _get_zval_ptr_var_deref(opline->op1.var, execute_data, &free_op1 TSRMLS_CC);
offset = _get_zval_ptr_tmp(opline->op2.var, execute_data, &free_op2 TSRMLS_CC);
- if (IS_VAR == IS_UNUSED || Z_TYPE_P(container) == IS_OBJECT) {
- if (Z_OBJ_HT_P(container)->has_property) {
+ if (IS_VAR == IS_UNUSED || EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
+ if (EXPECTED(Z_OBJ_HT_P(container)->has_property)) {
result = Z_OBJ_HT_P(container)->has_property(container, offset, (opline->extended_value & ZEND_ISSET) == 0, ((IS_TMP_VAR == IS_CONST) ? (EX(run_time_cache) + Z_CACHE_SLOT_P(offset)) : NULL) TSRMLS_CC);
} else {
zend_error(E_NOTICE, "Trying to check property of non-object");
@@ -23698,18 +23639,22 @@ static int ZEND_FASTCALL ZEND_ISSET_ISEMPTY_VAR_SPEC_VAR_VAR_HANDLER(ZEND_OPCOD
{
USE_OPLINE
zval *value;
- zend_bool isset = 1;
SAVE_OPLINE();
if (IS_VAR == IS_CV &&
IS_VAR == IS_UNUSED &&
(opline->extended_value & ZEND_QUICK_SET)) {
- if (Z_TYPE_P(EX_VAR(opline->op1.var)) != IS_UNDEF) {
- value = EX_VAR(opline->op1.var);
- ZVAL_DEREF(value);
- } else {
- isset = 0;
+ value = EX_VAR(opline->op1.var);
+ if (opline->extended_value & ZEND_ISSET) {
+ ZVAL_BOOL(EX_VAR(opline->result.var),
+ Z_TYPE_P(value) > IS_NULL &&
+ (!Z_ISREF_P(value) || Z_TYPE_P(Z_REFVAL_P(value)) != IS_NULL));
+ } else /* if (opline->extended_value & ZEND_ISEMPTY) */ {
+ ZVAL_BOOL(EX_VAR(opline->result.var),
+ !i_zend_is_true(value TSRMLS_CC));
+ CHECK_EXCEPTION();
}
+ ZEND_VM_NEXT_OPCODE();
} else {
zend_free_op free_op1;
zval tmp, *varname = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1 TSRMLS_CC);
@@ -23737,40 +23682,28 @@ static int ZEND_FASTCALL ZEND_ISSET_ISEMPTY_VAR_SPEC_VAR_VAR_HANDLER(ZEND_OPCOD
ce = Z_CE_P(EX_VAR(opline->op2.var));
}
value = zend_std_get_static_property(ce, Z_STR_P(varname), 1, ((IS_VAR == IS_CONST) ? (EX(run_time_cache) + Z_CACHE_SLOT_P(varname)) : NULL) TSRMLS_CC);
- if (!value) {
- isset = 0;
- }
} else {
HashTable *target_symbol_table = zend_get_target_symbol_table(execute_data, opline->extended_value & ZEND_FETCH_TYPE_MASK TSRMLS_CC);
value = zend_hash_find_ind(target_symbol_table, Z_STR_P(varname));
- if (!value || Z_ISUNDEF_P(value)) {
- isset = 0;
- }
}
if (IS_VAR != IS_CONST && varname == &tmp) {
zval_dtor(&tmp);
}
zval_ptr_dtor_nogc(free_op1.var);
- }
- if (opline->extended_value & ZEND_ISSET) {
- if (isset && Z_TYPE_P(value) != IS_NULL &&
- (!Z_ISREF_P(value) || Z_TYPE_P(Z_REFVAL_P(value)) != IS_NULL)) {
- ZVAL_BOOL(EX_VAR(opline->result.var), 1);
- } else {
- ZVAL_BOOL(EX_VAR(opline->result.var), 0);
- }
- } else /* if (opline->extended_value & ZEND_ISEMPTY) */ {
- if (!isset || !i_zend_is_true(value TSRMLS_CC)) {
- ZVAL_BOOL(EX_VAR(opline->result.var), 1);
- } else {
- ZVAL_BOOL(EX_VAR(opline->result.var), 0);
+ if (opline->extended_value & ZEND_ISSET) {
+ ZVAL_BOOL(EX_VAR(opline->result.var),
+ value && Z_TYPE_P(value) > IS_NULL &&
+ (!Z_ISREF_P(value) || Z_TYPE_P(Z_REFVAL_P(value)) != IS_NULL));
+ } else /* if (opline->extended_value & ZEND_ISEMPTY) */ {
+ ZVAL_BOOL(EX_VAR(opline->result.var),
+ !value || !i_zend_is_true(value TSRMLS_CC));
}
- }
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ CHECK_EXCEPTION();
+ ZEND_VM_NEXT_OPCODE();
+ }
}
static int ZEND_FASTCALL ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_VAR_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -23786,7 +23719,7 @@ static int ZEND_FASTCALL ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_VAR_VAR_HANDLER(ZEND_O
container = _get_zval_ptr_var_deref(opline->op1.var, execute_data, &free_op1 TSRMLS_CC);
offset = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2 TSRMLS_CC);
- if (IS_VAR != IS_UNUSED && Z_TYPE_P(container) == IS_ARRAY) {
+ if (IS_VAR != IS_UNUSED && EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
HashTable *ht = Z_ARRVAL_P(container);
zval *value;
zend_string *str;
@@ -23839,8 +23772,8 @@ num_index_prop:
} else /* if (opline->extended_value & ZEND_ISEMPTY) */ {
result = (value == NULL || !i_zend_is_true(value TSRMLS_CC));
}
- } else if (IS_VAR == IS_UNUSED || Z_TYPE_P(container) == IS_OBJECT) {
- if (Z_OBJ_HT_P(container)->has_dimension) {
+ } else if (IS_VAR == IS_UNUSED || EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
+ if (EXPECTED(Z_OBJ_HT_P(container)->has_dimension)) {
result = Z_OBJ_HT_P(container)->has_dimension(container, offset, (opline->extended_value & ZEND_ISSET) == 0 TSRMLS_CC);
} else {
zend_error(E_NOTICE, "Trying to check element of non-array");
@@ -23849,7 +23782,7 @@ num_index_prop:
if ((opline->extended_value & ZEND_ISSET) == 0) {
result = !result;
}
- } else if (Z_TYPE_P(container) == IS_STRING) { /* string offsets */
+ } else if (EXPECTED(Z_TYPE_P(container) == IS_STRING)) { /* string offsets */
zval tmp;
result = 0;
@@ -23865,7 +23798,7 @@ num_index_prop:
offset = &tmp;
}
}
- if (Z_TYPE_P(offset) == IS_LONG) {
+ if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) {
if (offset->value.lval >= 0 && (size_t)offset->value.lval < Z_STRLEN_P(container)) {
if ((opline->extended_value & ZEND_ISSET) ||
Z_STRVAL_P(container)[offset->value.lval] != '0') {
@@ -23899,8 +23832,8 @@ static int ZEND_FASTCALL ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_VAR_VAR_HANDLER(ZEND_
container = _get_zval_ptr_var_deref(opline->op1.var, execute_data, &free_op1 TSRMLS_CC);
offset = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2 TSRMLS_CC);
- if (IS_VAR == IS_UNUSED || Z_TYPE_P(container) == IS_OBJECT) {
- if (Z_OBJ_HT_P(container)->has_property) {
+ if (IS_VAR == IS_UNUSED || EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
+ if (EXPECTED(Z_OBJ_HT_P(container)->has_property)) {
result = Z_OBJ_HT_P(container)->has_property(container, offset, (opline->extended_value & ZEND_ISSET) == 0, ((IS_VAR == IS_CONST) ? (EX(run_time_cache) + Z_CACHE_SLOT_P(offset)) : NULL) TSRMLS_CC);
} else {
zend_error(E_NOTICE, "Trying to check property of non-object");
@@ -25040,18 +24973,22 @@ static int ZEND_FASTCALL ZEND_ISSET_ISEMPTY_VAR_SPEC_VAR_UNUSED_HANDLER(ZEND_OP
{
USE_OPLINE
zval *value;
- zend_bool isset = 1;
SAVE_OPLINE();
if (IS_VAR == IS_CV &&
IS_UNUSED == IS_UNUSED &&
(opline->extended_value & ZEND_QUICK_SET)) {
- if (Z_TYPE_P(EX_VAR(opline->op1.var)) != IS_UNDEF) {
- value = EX_VAR(opline->op1.var);
- ZVAL_DEREF(value);
- } else {
- isset = 0;
+ value = EX_VAR(opline->op1.var);
+ if (opline->extended_value & ZEND_ISSET) {
+ ZVAL_BOOL(EX_VAR(opline->result.var),
+ Z_TYPE_P(value) > IS_NULL &&
+ (!Z_ISREF_P(value) || Z_TYPE_P(Z_REFVAL_P(value)) != IS_NULL));
+ } else /* if (opline->extended_value & ZEND_ISEMPTY) */ {
+ ZVAL_BOOL(EX_VAR(opline->result.var),
+ !i_zend_is_true(value TSRMLS_CC));
+ CHECK_EXCEPTION();
}
+ ZEND_VM_NEXT_OPCODE();
} else {
zend_free_op free_op1;
zval tmp, *varname = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1 TSRMLS_CC);
@@ -25079,40 +25016,28 @@ static int ZEND_FASTCALL ZEND_ISSET_ISEMPTY_VAR_SPEC_VAR_UNUSED_HANDLER(ZEND_OP
ce = Z_CE_P(EX_VAR(opline->op2.var));
}
value = zend_std_get_static_property(ce, Z_STR_P(varname), 1, ((IS_VAR == IS_CONST) ? (EX(run_time_cache) + Z_CACHE_SLOT_P(varname)) : NULL) TSRMLS_CC);
- if (!value) {
- isset = 0;
- }
} else {
HashTable *target_symbol_table = zend_get_target_symbol_table(execute_data, opline->extended_value & ZEND_FETCH_TYPE_MASK TSRMLS_CC);
value = zend_hash_find_ind(target_symbol_table, Z_STR_P(varname));
- if (!value || Z_ISUNDEF_P(value)) {
- isset = 0;
- }
}
if (IS_VAR != IS_CONST && varname == &tmp) {
zval_dtor(&tmp);
}
zval_ptr_dtor_nogc(free_op1.var);
- }
- if (opline->extended_value & ZEND_ISSET) {
- if (isset && Z_TYPE_P(value) != IS_NULL &&
- (!Z_ISREF_P(value) || Z_TYPE_P(Z_REFVAL_P(value)) != IS_NULL)) {
- ZVAL_BOOL(EX_VAR(opline->result.var), 1);
- } else {
- ZVAL_BOOL(EX_VAR(opline->result.var), 0);
- }
- } else /* if (opline->extended_value & ZEND_ISEMPTY) */ {
- if (!isset || !i_zend_is_true(value TSRMLS_CC)) {
- ZVAL_BOOL(EX_VAR(opline->result.var), 1);
- } else {
- ZVAL_BOOL(EX_VAR(opline->result.var), 0);
+ if (opline->extended_value & ZEND_ISSET) {
+ ZVAL_BOOL(EX_VAR(opline->result.var),
+ value && Z_TYPE_P(value) > IS_NULL &&
+ (!Z_ISREF_P(value) || Z_TYPE_P(Z_REFVAL_P(value)) != IS_NULL));
+ } else /* if (opline->extended_value & ZEND_ISEMPTY) */ {
+ ZVAL_BOOL(EX_VAR(opline->result.var),
+ !value || !i_zend_is_true(value TSRMLS_CC));
}
- }
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ CHECK_EXCEPTION();
+ ZEND_VM_NEXT_OPCODE();
+ }
}
static int ZEND_FASTCALL ZEND_SEPARATE_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -27051,7 +26976,7 @@ static int ZEND_FASTCALL ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_VAR_CV_HANDLER(ZEND_OP
container = _get_zval_ptr_var_deref(opline->op1.var, execute_data, &free_op1 TSRMLS_CC);
offset = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var TSRMLS_CC);
- if (IS_VAR != IS_UNUSED && Z_TYPE_P(container) == IS_ARRAY) {
+ if (IS_VAR != IS_UNUSED && EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
HashTable *ht = Z_ARRVAL_P(container);
zval *value;
zend_string *str;
@@ -27104,8 +27029,8 @@ num_index_prop:
} else /* if (opline->extended_value & ZEND_ISEMPTY) */ {
result = (value == NULL || !i_zend_is_true(value TSRMLS_CC));
}
- } else if (IS_VAR == IS_UNUSED || Z_TYPE_P(container) == IS_OBJECT) {
- if (Z_OBJ_HT_P(container)->has_dimension) {
+ } else if (IS_VAR == IS_UNUSED || EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
+ if (EXPECTED(Z_OBJ_HT_P(container)->has_dimension)) {
result = Z_OBJ_HT_P(container)->has_dimension(container, offset, (opline->extended_value & ZEND_ISSET) == 0 TSRMLS_CC);
} else {
zend_error(E_NOTICE, "Trying to check element of non-array");
@@ -27114,7 +27039,7 @@ num_index_prop:
if ((opline->extended_value & ZEND_ISSET) == 0) {
result = !result;
}
- } else if (Z_TYPE_P(container) == IS_STRING) { /* string offsets */
+ } else if (EXPECTED(Z_TYPE_P(container) == IS_STRING)) { /* string offsets */
zval tmp;
result = 0;
@@ -27130,7 +27055,7 @@ num_index_prop:
offset = &tmp;
}
}
- if (Z_TYPE_P(offset) == IS_LONG) {
+ if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) {
if (offset->value.lval >= 0 && (size_t)offset->value.lval < Z_STRLEN_P(container)) {
if ((opline->extended_value & ZEND_ISSET) ||
Z_STRVAL_P(container)[offset->value.lval] != '0') {
@@ -27163,8 +27088,8 @@ static int ZEND_FASTCALL ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_VAR_CV_HANDLER(ZEND_O
container = _get_zval_ptr_var_deref(opline->op1.var, execute_data, &free_op1 TSRMLS_CC);
offset = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var TSRMLS_CC);
- if (IS_VAR == IS_UNUSED || Z_TYPE_P(container) == IS_OBJECT) {
- if (Z_OBJ_HT_P(container)->has_property) {
+ if (IS_VAR == IS_UNUSED || EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
+ if (EXPECTED(Z_OBJ_HT_P(container)->has_property)) {
result = Z_OBJ_HT_P(container)->has_property(container, offset, (opline->extended_value & ZEND_ISSET) == 0, ((IS_CV == IS_CONST) ? (EX(run_time_cache) + Z_CACHE_SLOT_P(offset)) : NULL) TSRMLS_CC);
} else {
zend_error(E_NOTICE, "Trying to check property of non-object");
@@ -28537,7 +28462,7 @@ static int ZEND_FASTCALL ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_UNUSED_CONST_HANDLER(Z
container = _get_obj_zval_ptr_unused(execute_data TSRMLS_CC);
offset = opline->op2.zv;
- if (IS_UNUSED != IS_UNUSED && Z_TYPE_P(container) == IS_ARRAY) {
+ if (IS_UNUSED != IS_UNUSED && EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
HashTable *ht = Z_ARRVAL_P(container);
zval *value;
zend_string *str;
@@ -28590,8 +28515,8 @@ num_index_prop:
} else /* if (opline->extended_value & ZEND_ISEMPTY) */ {
result = (value == NULL || !i_zend_is_true(value TSRMLS_CC));
}
- } else if (IS_UNUSED == IS_UNUSED || Z_TYPE_P(container) == IS_OBJECT) {
- if (Z_OBJ_HT_P(container)->has_dimension) {
+ } else if (IS_UNUSED == IS_UNUSED || EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
+ if (EXPECTED(Z_OBJ_HT_P(container)->has_dimension)) {
result = Z_OBJ_HT_P(container)->has_dimension(container, offset, (opline->extended_value & ZEND_ISSET) == 0 TSRMLS_CC);
} else {
zend_error(E_NOTICE, "Trying to check element of non-array");
@@ -28600,7 +28525,7 @@ num_index_prop:
if ((opline->extended_value & ZEND_ISSET) == 0) {
result = !result;
}
- } else if (Z_TYPE_P(container) == IS_STRING) { /* string offsets */
+ } else if (EXPECTED(Z_TYPE_P(container) == IS_STRING)) { /* string offsets */
zval tmp;
result = 0;
@@ -28616,7 +28541,7 @@ num_index_prop:
offset = &tmp;
}
}
- if (Z_TYPE_P(offset) == IS_LONG) {
+ if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) {
if (offset->value.lval >= 0 && (size_t)offset->value.lval < Z_STRLEN_P(container)) {
if ((opline->extended_value & ZEND_ISSET) ||
Z_STRVAL_P(container)[offset->value.lval] != '0') {
@@ -28649,8 +28574,8 @@ static int ZEND_FASTCALL ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_UNUSED_CONST_HANDLER(
container = _get_obj_zval_ptr_unused(execute_data TSRMLS_CC);
offset = opline->op2.zv;
- if (IS_UNUSED == IS_UNUSED || Z_TYPE_P(container) == IS_OBJECT) {
- if (Z_OBJ_HT_P(container)->has_property) {
+ if (IS_UNUSED == IS_UNUSED || EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
+ if (EXPECTED(Z_OBJ_HT_P(container)->has_property)) {
result = Z_OBJ_HT_P(container)->has_property(container, offset, (opline->extended_value & ZEND_ISSET) == 0, ((IS_CONST == IS_CONST) ? (EX(run_time_cache) + Z_CACHE_SLOT_P(offset)) : NULL) TSRMLS_CC);
} else {
zend_error(E_NOTICE, "Trying to check property of non-object");
@@ -29843,7 +29768,7 @@ static int ZEND_FASTCALL ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_UNUSED_TMP_HANDLER(ZEN
container = _get_obj_zval_ptr_unused(execute_data TSRMLS_CC);
offset = _get_zval_ptr_tmp(opline->op2.var, execute_data, &free_op2 TSRMLS_CC);
- if (IS_UNUSED != IS_UNUSED && Z_TYPE_P(container) == IS_ARRAY) {
+ if (IS_UNUSED != IS_UNUSED && EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
HashTable *ht = Z_ARRVAL_P(container);
zval *value;
zend_string *str;
@@ -29896,8 +29821,8 @@ num_index_prop:
} else /* if (opline->extended_value & ZEND_ISEMPTY) */ {
result = (value == NULL || !i_zend_is_true(value TSRMLS_CC));
}
- } else if (IS_UNUSED == IS_UNUSED || Z_TYPE_P(container) == IS_OBJECT) {
- if (Z_OBJ_HT_P(container)->has_dimension) {
+ } else if (IS_UNUSED == IS_UNUSED || EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
+ if (EXPECTED(Z_OBJ_HT_P(container)->has_dimension)) {
result = Z_OBJ_HT_P(container)->has_dimension(container, offset, (opline->extended_value & ZEND_ISSET) == 0 TSRMLS_CC);
} else {
zend_error(E_NOTICE, "Trying to check element of non-array");
@@ -29906,7 +29831,7 @@ num_index_prop:
if ((opline->extended_value & ZEND_ISSET) == 0) {
result = !result;
}
- } else if (Z_TYPE_P(container) == IS_STRING) { /* string offsets */
+ } else if (EXPECTED(Z_TYPE_P(container) == IS_STRING)) { /* string offsets */
zval tmp;
result = 0;
@@ -29922,7 +29847,7 @@ num_index_prop:
offset = &tmp;
}
}
- if (Z_TYPE_P(offset) == IS_LONG) {
+ if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) {
if (offset->value.lval >= 0 && (size_t)offset->value.lval < Z_STRLEN_P(container)) {
if ((opline->extended_value & ZEND_ISSET) ||
Z_STRVAL_P(container)[offset->value.lval] != '0') {
@@ -29956,8 +29881,8 @@ static int ZEND_FASTCALL ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_UNUSED_TMP_HANDLER(ZE
container = _get_obj_zval_ptr_unused(execute_data TSRMLS_CC);
offset = _get_zval_ptr_tmp(opline->op2.var, execute_data, &free_op2 TSRMLS_CC);
- if (IS_UNUSED == IS_UNUSED || Z_TYPE_P(container) == IS_OBJECT) {
- if (Z_OBJ_HT_P(container)->has_property) {
+ if (IS_UNUSED == IS_UNUSED || EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
+ if (EXPECTED(Z_OBJ_HT_P(container)->has_property)) {
result = Z_OBJ_HT_P(container)->has_property(container, offset, (opline->extended_value & ZEND_ISSET) == 0, ((IS_TMP_VAR == IS_CONST) ? (EX(run_time_cache) + Z_CACHE_SLOT_P(offset)) : NULL) TSRMLS_CC);
} else {
zend_error(E_NOTICE, "Trying to check property of non-object");
@@ -31151,7 +31076,7 @@ static int ZEND_FASTCALL ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_UNUSED_VAR_HANDLER(ZEN
container = _get_obj_zval_ptr_unused(execute_data TSRMLS_CC);
offset = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2 TSRMLS_CC);
- if (IS_UNUSED != IS_UNUSED && Z_TYPE_P(container) == IS_ARRAY) {
+ if (IS_UNUSED != IS_UNUSED && EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
HashTable *ht = Z_ARRVAL_P(container);
zval *value;
zend_string *str;
@@ -31204,8 +31129,8 @@ num_index_prop:
} else /* if (opline->extended_value & ZEND_ISEMPTY) */ {
result = (value == NULL || !i_zend_is_true(value TSRMLS_CC));
}
- } else if (IS_UNUSED == IS_UNUSED || Z_TYPE_P(container) == IS_OBJECT) {
- if (Z_OBJ_HT_P(container)->has_dimension) {
+ } else if (IS_UNUSED == IS_UNUSED || EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
+ if (EXPECTED(Z_OBJ_HT_P(container)->has_dimension)) {
result = Z_OBJ_HT_P(container)->has_dimension(container, offset, (opline->extended_value & ZEND_ISSET) == 0 TSRMLS_CC);
} else {
zend_error(E_NOTICE, "Trying to check element of non-array");
@@ -31214,7 +31139,7 @@ num_index_prop:
if ((opline->extended_value & ZEND_ISSET) == 0) {
result = !result;
}
- } else if (Z_TYPE_P(container) == IS_STRING) { /* string offsets */
+ } else if (EXPECTED(Z_TYPE_P(container) == IS_STRING)) { /* string offsets */
zval tmp;
result = 0;
@@ -31230,7 +31155,7 @@ num_index_prop:
offset = &tmp;
}
}
- if (Z_TYPE_P(offset) == IS_LONG) {
+ if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) {
if (offset->value.lval >= 0 && (size_t)offset->value.lval < Z_STRLEN_P(container)) {
if ((opline->extended_value & ZEND_ISSET) ||
Z_STRVAL_P(container)[offset->value.lval] != '0') {
@@ -31264,8 +31189,8 @@ static int ZEND_FASTCALL ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_UNUSED_VAR_HANDLER(ZE
container = _get_obj_zval_ptr_unused(execute_data TSRMLS_CC);
offset = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2 TSRMLS_CC);
- if (IS_UNUSED == IS_UNUSED || Z_TYPE_P(container) == IS_OBJECT) {
- if (Z_OBJ_HT_P(container)->has_property) {
+ if (IS_UNUSED == IS_UNUSED || EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
+ if (EXPECTED(Z_OBJ_HT_P(container)->has_property)) {
result = Z_OBJ_HT_P(container)->has_property(container, offset, (opline->extended_value & ZEND_ISSET) == 0, ((IS_VAR == IS_CONST) ? (EX(run_time_cache) + Z_CACHE_SLOT_P(offset)) : NULL) TSRMLS_CC);
} else {
zend_error(E_NOTICE, "Trying to check property of non-object");
@@ -32971,7 +32896,7 @@ static int ZEND_FASTCALL ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_UNUSED_CV_HANDLER(ZEND
container = _get_obj_zval_ptr_unused(execute_data TSRMLS_CC);
offset = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var TSRMLS_CC);
- if (IS_UNUSED != IS_UNUSED && Z_TYPE_P(container) == IS_ARRAY) {
+ if (IS_UNUSED != IS_UNUSED && EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
HashTable *ht = Z_ARRVAL_P(container);
zval *value;
zend_string *str;
@@ -33024,8 +32949,8 @@ num_index_prop:
} else /* if (opline->extended_value & ZEND_ISEMPTY) */ {
result = (value == NULL || !i_zend_is_true(value TSRMLS_CC));
}
- } else if (IS_UNUSED == IS_UNUSED || Z_TYPE_P(container) == IS_OBJECT) {
- if (Z_OBJ_HT_P(container)->has_dimension) {
+ } else if (IS_UNUSED == IS_UNUSED || EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
+ if (EXPECTED(Z_OBJ_HT_P(container)->has_dimension)) {
result = Z_OBJ_HT_P(container)->has_dimension(container, offset, (opline->extended_value & ZEND_ISSET) == 0 TSRMLS_CC);
} else {
zend_error(E_NOTICE, "Trying to check element of non-array");
@@ -33034,7 +32959,7 @@ num_index_prop:
if ((opline->extended_value & ZEND_ISSET) == 0) {
result = !result;
}
- } else if (Z_TYPE_P(container) == IS_STRING) { /* string offsets */
+ } else if (EXPECTED(Z_TYPE_P(container) == IS_STRING)) { /* string offsets */
zval tmp;
result = 0;
@@ -33050,7 +32975,7 @@ num_index_prop:
offset = &tmp;
}
}
- if (Z_TYPE_P(offset) == IS_LONG) {
+ if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) {
if (offset->value.lval >= 0 && (size_t)offset->value.lval < Z_STRLEN_P(container)) {
if ((opline->extended_value & ZEND_ISSET) ||
Z_STRVAL_P(container)[offset->value.lval] != '0') {
@@ -33083,8 +33008,8 @@ static int ZEND_FASTCALL ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_UNUSED_CV_HANDLER(ZEN
container = _get_obj_zval_ptr_unused(execute_data TSRMLS_CC);
offset = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var TSRMLS_CC);
- if (IS_UNUSED == IS_UNUSED || Z_TYPE_P(container) == IS_OBJECT) {
- if (Z_OBJ_HT_P(container)->has_property) {
+ if (IS_UNUSED == IS_UNUSED || EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
+ if (EXPECTED(Z_OBJ_HT_P(container)->has_property)) {
result = Z_OBJ_HT_P(container)->has_property(container, offset, (opline->extended_value & ZEND_ISSET) == 0, ((IS_CV == IS_CONST) ? (EX(run_time_cache) + Z_CACHE_SLOT_P(offset)) : NULL) TSRMLS_CC);
} else {
zend_error(E_NOTICE, "Trying to check property of non-object");
@@ -36482,18 +36407,22 @@ static int ZEND_FASTCALL ZEND_ISSET_ISEMPTY_VAR_SPEC_CV_CONST_HANDLER(ZEND_OPCO
{
USE_OPLINE
zval *value;
- zend_bool isset = 1;
SAVE_OPLINE();
if (IS_CV == IS_CV &&
IS_CONST == IS_UNUSED &&
(opline->extended_value & ZEND_QUICK_SET)) {
- if (Z_TYPE_P(EX_VAR(opline->op1.var)) != IS_UNDEF) {
- value = EX_VAR(opline->op1.var);
- ZVAL_DEREF(value);
- } else {
- isset = 0;
+ value = EX_VAR(opline->op1.var);
+ if (opline->extended_value & ZEND_ISSET) {
+ ZVAL_BOOL(EX_VAR(opline->result.var),
+ Z_TYPE_P(value) > IS_NULL &&
+ (!Z_ISREF_P(value) || Z_TYPE_P(Z_REFVAL_P(value)) != IS_NULL));
+ } else /* if (opline->extended_value & ZEND_ISEMPTY) */ {
+ ZVAL_BOOL(EX_VAR(opline->result.var),
+ !i_zend_is_true(value TSRMLS_CC));
+ CHECK_EXCEPTION();
}
+ ZEND_VM_NEXT_OPCODE();
} else {
zval tmp, *varname = _get_zval_ptr_cv_BP_VAR_IS(execute_data, opline->op1.var TSRMLS_CC);
@@ -36521,40 +36450,27 @@ static int ZEND_FASTCALL ZEND_ISSET_ISEMPTY_VAR_SPEC_CV_CONST_HANDLER(ZEND_OPCO
ce = Z_CE_P(EX_VAR(opline->op2.var));
}
value = zend_std_get_static_property(ce, Z_STR_P(varname), 1, ((IS_CV == IS_CONST) ? (EX(run_time_cache) + Z_CACHE_SLOT_P(varname)) : NULL) TSRMLS_CC);
- if (!value) {
- isset = 0;
- }
} else {
HashTable *target_symbol_table = zend_get_target_symbol_table(execute_data, opline->extended_value & ZEND_FETCH_TYPE_MASK TSRMLS_CC);
value = zend_hash_find_ind(target_symbol_table, Z_STR_P(varname));
- if (!value || Z_ISUNDEF_P(value)) {
- isset = 0;
- }
}
if (IS_CV != IS_CONST && varname == &tmp) {
zval_dtor(&tmp);
}
- }
-
- if (opline->extended_value & ZEND_ISSET) {
- if (isset && Z_TYPE_P(value) != IS_NULL &&
- (!Z_ISREF_P(value) || Z_TYPE_P(Z_REFVAL_P(value)) != IS_NULL)) {
- ZVAL_BOOL(EX_VAR(opline->result.var), 1);
- } else {
- ZVAL_BOOL(EX_VAR(opline->result.var), 0);
- }
- } else /* if (opline->extended_value & ZEND_ISEMPTY) */ {
- if (!isset || !i_zend_is_true(value TSRMLS_CC)) {
- ZVAL_BOOL(EX_VAR(opline->result.var), 1);
- } else {
- ZVAL_BOOL(EX_VAR(opline->result.var), 0);
+ if (opline->extended_value & ZEND_ISSET) {
+ ZVAL_BOOL(EX_VAR(opline->result.var),
+ value && Z_TYPE_P(value) > IS_NULL &&
+ (!Z_ISREF_P(value) || Z_TYPE_P(Z_REFVAL_P(value)) != IS_NULL));
+ } else /* if (opline->extended_value & ZEND_ISEMPTY) */ {
+ ZVAL_BOOL(EX_VAR(opline->result.var),
+ !value || !i_zend_is_true(value TSRMLS_CC));
}
- }
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ CHECK_EXCEPTION();
+ ZEND_VM_NEXT_OPCODE();
+ }
}
static int ZEND_FASTCALL ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -36570,7 +36486,7 @@ static int ZEND_FASTCALL ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CV_CONST_HANDLER(ZEND_
container = _get_zval_ptr_cv_deref_BP_VAR_IS(execute_data, opline->op1.var TSRMLS_CC);
offset = opline->op2.zv;
- if (IS_CV != IS_UNUSED && Z_TYPE_P(container) == IS_ARRAY) {
+ if (IS_CV != IS_UNUSED && EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
HashTable *ht = Z_ARRVAL_P(container);
zval *value;
zend_string *str;
@@ -36623,8 +36539,8 @@ num_index_prop:
} else /* if (opline->extended_value & ZEND_ISEMPTY) */ {
result = (value == NULL || !i_zend_is_true(value TSRMLS_CC));
}
- } else if (IS_CV == IS_UNUSED || Z_TYPE_P(container) == IS_OBJECT) {
- if (Z_OBJ_HT_P(container)->has_dimension) {
+ } else if (IS_CV == IS_UNUSED || EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
+ if (EXPECTED(Z_OBJ_HT_P(container)->has_dimension)) {
result = Z_OBJ_HT_P(container)->has_dimension(container, offset, (opline->extended_value & ZEND_ISSET) == 0 TSRMLS_CC);
} else {
zend_error(E_NOTICE, "Trying to check element of non-array");
@@ -36633,7 +36549,7 @@ num_index_prop:
if ((opline->extended_value & ZEND_ISSET) == 0) {
result = !result;
}
- } else if (Z_TYPE_P(container) == IS_STRING) { /* string offsets */
+ } else if (EXPECTED(Z_TYPE_P(container) == IS_STRING)) { /* string offsets */
zval tmp;
result = 0;
@@ -36649,7 +36565,7 @@ num_index_prop:
offset = &tmp;
}
}
- if (Z_TYPE_P(offset) == IS_LONG) {
+ if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) {
if (offset->value.lval >= 0 && (size_t)offset->value.lval < Z_STRLEN_P(container)) {
if ((opline->extended_value & ZEND_ISSET) ||
Z_STRVAL_P(container)[offset->value.lval] != '0') {
@@ -36682,8 +36598,8 @@ static int ZEND_FASTCALL ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CV_CONST_HANDLER(ZEND
container = _get_zval_ptr_cv_deref_BP_VAR_IS(execute_data, opline->op1.var TSRMLS_CC);
offset = opline->op2.zv;
- if (IS_CV == IS_UNUSED || Z_TYPE_P(container) == IS_OBJECT) {
- if (Z_OBJ_HT_P(container)->has_property) {
+ if (IS_CV == IS_UNUSED || EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
+ if (EXPECTED(Z_OBJ_HT_P(container)->has_property)) {
result = Z_OBJ_HT_P(container)->has_property(container, offset, (opline->extended_value & ZEND_ISSET) == 0, ((IS_CONST == IS_CONST) ? (EX(run_time_cache) + Z_CACHE_SLOT_P(offset)) : NULL) TSRMLS_CC);
} else {
zend_error(E_NOTICE, "Trying to check property of non-object");
@@ -38509,7 +38425,7 @@ static int ZEND_FASTCALL ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CV_TMP_HANDLER(ZEND_OP
container = _get_zval_ptr_cv_deref_BP_VAR_IS(execute_data, opline->op1.var TSRMLS_CC);
offset = _get_zval_ptr_tmp(opline->op2.var, execute_data, &free_op2 TSRMLS_CC);
- if (IS_CV != IS_UNUSED && Z_TYPE_P(container) == IS_ARRAY) {
+ if (IS_CV != IS_UNUSED && EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
HashTable *ht = Z_ARRVAL_P(container);
zval *value;
zend_string *str;
@@ -38562,8 +38478,8 @@ num_index_prop:
} else /* if (opline->extended_value & ZEND_ISEMPTY) */ {
result = (value == NULL || !i_zend_is_true(value TSRMLS_CC));
}
- } else if (IS_CV == IS_UNUSED || Z_TYPE_P(container) == IS_OBJECT) {
- if (Z_OBJ_HT_P(container)->has_dimension) {
+ } else if (IS_CV == IS_UNUSED || EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
+ if (EXPECTED(Z_OBJ_HT_P(container)->has_dimension)) {
result = Z_OBJ_HT_P(container)->has_dimension(container, offset, (opline->extended_value & ZEND_ISSET) == 0 TSRMLS_CC);
} else {
zend_error(E_NOTICE, "Trying to check element of non-array");
@@ -38572,7 +38488,7 @@ num_index_prop:
if ((opline->extended_value & ZEND_ISSET) == 0) {
result = !result;
}
- } else if (Z_TYPE_P(container) == IS_STRING) { /* string offsets */
+ } else if (EXPECTED(Z_TYPE_P(container) == IS_STRING)) { /* string offsets */
zval tmp;
result = 0;
@@ -38588,7 +38504,7 @@ num_index_prop:
offset = &tmp;
}
}
- if (Z_TYPE_P(offset) == IS_LONG) {
+ if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) {
if (offset->value.lval >= 0 && (size_t)offset->value.lval < Z_STRLEN_P(container)) {
if ((opline->extended_value & ZEND_ISSET) ||
Z_STRVAL_P(container)[offset->value.lval] != '0') {
@@ -38622,8 +38538,8 @@ static int ZEND_FASTCALL ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CV_TMP_HANDLER(ZEND_O
container = _get_zval_ptr_cv_deref_BP_VAR_IS(execute_data, opline->op1.var TSRMLS_CC);
offset = _get_zval_ptr_tmp(opline->op2.var, execute_data, &free_op2 TSRMLS_CC);
- if (IS_CV == IS_UNUSED || Z_TYPE_P(container) == IS_OBJECT) {
- if (Z_OBJ_HT_P(container)->has_property) {
+ if (IS_CV == IS_UNUSED || EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
+ if (EXPECTED(Z_OBJ_HT_P(container)->has_property)) {
result = Z_OBJ_HT_P(container)->has_property(container, offset, (opline->extended_value & ZEND_ISSET) == 0, ((IS_TMP_VAR == IS_CONST) ? (EX(run_time_cache) + Z_CACHE_SLOT_P(offset)) : NULL) TSRMLS_CC);
} else {
zend_error(E_NOTICE, "Trying to check property of non-object");
@@ -40673,18 +40589,22 @@ static int ZEND_FASTCALL ZEND_ISSET_ISEMPTY_VAR_SPEC_CV_VAR_HANDLER(ZEND_OPCODE
{
USE_OPLINE
zval *value;
- zend_bool isset = 1;
SAVE_OPLINE();
if (IS_CV == IS_CV &&
IS_VAR == IS_UNUSED &&
(opline->extended_value & ZEND_QUICK_SET)) {
- if (Z_TYPE_P(EX_VAR(opline->op1.var)) != IS_UNDEF) {
- value = EX_VAR(opline->op1.var);
- ZVAL_DEREF(value);
- } else {
- isset = 0;
+ value = EX_VAR(opline->op1.var);
+ if (opline->extended_value & ZEND_ISSET) {
+ ZVAL_BOOL(EX_VAR(opline->result.var),
+ Z_TYPE_P(value) > IS_NULL &&
+ (!Z_ISREF_P(value) || Z_TYPE_P(Z_REFVAL_P(value)) != IS_NULL));
+ } else /* if (opline->extended_value & ZEND_ISEMPTY) */ {
+ ZVAL_BOOL(EX_VAR(opline->result.var),
+ !i_zend_is_true(value TSRMLS_CC));
+ CHECK_EXCEPTION();
}
+ ZEND_VM_NEXT_OPCODE();
} else {
zval tmp, *varname = _get_zval_ptr_cv_BP_VAR_IS(execute_data, opline->op1.var TSRMLS_CC);
@@ -40712,40 +40632,27 @@ static int ZEND_FASTCALL ZEND_ISSET_ISEMPTY_VAR_SPEC_CV_VAR_HANDLER(ZEND_OPCODE
ce = Z_CE_P(EX_VAR(opline->op2.var));
}
value = zend_std_get_static_property(ce, Z_STR_P(varname), 1, ((IS_CV == IS_CONST) ? (EX(run_time_cache) + Z_CACHE_SLOT_P(varname)) : NULL) TSRMLS_CC);
- if (!value) {
- isset = 0;
- }
} else {
HashTable *target_symbol_table = zend_get_target_symbol_table(execute_data, opline->extended_value & ZEND_FETCH_TYPE_MASK TSRMLS_CC);
value = zend_hash_find_ind(target_symbol_table, Z_STR_P(varname));
- if (!value || Z_ISUNDEF_P(value)) {
- isset = 0;
- }
}
if (IS_CV != IS_CONST && varname == &tmp) {
zval_dtor(&tmp);
}
- }
-
- if (opline->extended_value & ZEND_ISSET) {
- if (isset && Z_TYPE_P(value) != IS_NULL &&
- (!Z_ISREF_P(value) || Z_TYPE_P(Z_REFVAL_P(value)) != IS_NULL)) {
- ZVAL_BOOL(EX_VAR(opline->result.var), 1);
- } else {
- ZVAL_BOOL(EX_VAR(opline->result.var), 0);
- }
- } else /* if (opline->extended_value & ZEND_ISEMPTY) */ {
- if (!isset || !i_zend_is_true(value TSRMLS_CC)) {
- ZVAL_BOOL(EX_VAR(opline->result.var), 1);
- } else {
- ZVAL_BOOL(EX_VAR(opline->result.var), 0);
+ if (opline->extended_value & ZEND_ISSET) {
+ ZVAL_BOOL(EX_VAR(opline->result.var),
+ value && Z_TYPE_P(value) > IS_NULL &&
+ (!Z_ISREF_P(value) || Z_TYPE_P(Z_REFVAL_P(value)) != IS_NULL));
+ } else /* if (opline->extended_value & ZEND_ISEMPTY) */ {
+ ZVAL_BOOL(EX_VAR(opline->result.var),
+ !value || !i_zend_is_true(value TSRMLS_CC));
}
- }
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ CHECK_EXCEPTION();
+ ZEND_VM_NEXT_OPCODE();
+ }
}
static int ZEND_FASTCALL ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -40761,7 +40668,7 @@ static int ZEND_FASTCALL ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CV_VAR_HANDLER(ZEND_OP
container = _get_zval_ptr_cv_deref_BP_VAR_IS(execute_data, opline->op1.var TSRMLS_CC);
offset = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2 TSRMLS_CC);
- if (IS_CV != IS_UNUSED && Z_TYPE_P(container) == IS_ARRAY) {
+ if (IS_CV != IS_UNUSED && EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
HashTable *ht = Z_ARRVAL_P(container);
zval *value;
zend_string *str;
@@ -40814,8 +40721,8 @@ num_index_prop:
} else /* if (opline->extended_value & ZEND_ISEMPTY) */ {
result = (value == NULL || !i_zend_is_true(value TSRMLS_CC));
}
- } else if (IS_CV == IS_UNUSED || Z_TYPE_P(container) == IS_OBJECT) {
- if (Z_OBJ_HT_P(container)->has_dimension) {
+ } else if (IS_CV == IS_UNUSED || EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
+ if (EXPECTED(Z_OBJ_HT_P(container)->has_dimension)) {
result = Z_OBJ_HT_P(container)->has_dimension(container, offset, (opline->extended_value & ZEND_ISSET) == 0 TSRMLS_CC);
} else {
zend_error(E_NOTICE, "Trying to check element of non-array");
@@ -40824,7 +40731,7 @@ num_index_prop:
if ((opline->extended_value & ZEND_ISSET) == 0) {
result = !result;
}
- } else if (Z_TYPE_P(container) == IS_STRING) { /* string offsets */
+ } else if (EXPECTED(Z_TYPE_P(container) == IS_STRING)) { /* string offsets */
zval tmp;
result = 0;
@@ -40840,7 +40747,7 @@ num_index_prop:
offset = &tmp;
}
}
- if (Z_TYPE_P(offset) == IS_LONG) {
+ if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) {
if (offset->value.lval >= 0 && (size_t)offset->value.lval < Z_STRLEN_P(container)) {
if ((opline->extended_value & ZEND_ISSET) ||
Z_STRVAL_P(container)[offset->value.lval] != '0') {
@@ -40874,8 +40781,8 @@ static int ZEND_FASTCALL ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CV_VAR_HANDLER(ZEND_O
container = _get_zval_ptr_cv_deref_BP_VAR_IS(execute_data, opline->op1.var TSRMLS_CC);
offset = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2 TSRMLS_CC);
- if (IS_CV == IS_UNUSED || Z_TYPE_P(container) == IS_OBJECT) {
- if (Z_OBJ_HT_P(container)->has_property) {
+ if (IS_CV == IS_UNUSED || EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
+ if (EXPECTED(Z_OBJ_HT_P(container)->has_property)) {
result = Z_OBJ_HT_P(container)->has_property(container, offset, (opline->extended_value & ZEND_ISSET) == 0, ((IS_VAR == IS_CONST) ? (EX(run_time_cache) + Z_CACHE_SLOT_P(offset)) : NULL) TSRMLS_CC);
} else {
zend_error(E_NOTICE, "Trying to check property of non-object");
@@ -41889,18 +41796,22 @@ static int ZEND_FASTCALL ZEND_ISSET_ISEMPTY_VAR_SPEC_CV_UNUSED_HANDLER(ZEND_OPC
{
USE_OPLINE
zval *value;
- zend_bool isset = 1;
SAVE_OPLINE();
if (IS_CV == IS_CV &&
IS_UNUSED == IS_UNUSED &&
(opline->extended_value & ZEND_QUICK_SET)) {
- if (Z_TYPE_P(EX_VAR(opline->op1.var)) != IS_UNDEF) {
- value = EX_VAR(opline->op1.var);
- ZVAL_DEREF(value);
- } else {
- isset = 0;
+ value = EX_VAR(opline->op1.var);
+ if (opline->extended_value & ZEND_ISSET) {
+ ZVAL_BOOL(EX_VAR(opline->result.var),
+ Z_TYPE_P(value) > IS_NULL &&
+ (!Z_ISREF_P(value) || Z_TYPE_P(Z_REFVAL_P(value)) != IS_NULL));
+ } else /* if (opline->extended_value & ZEND_ISEMPTY) */ {
+ ZVAL_BOOL(EX_VAR(opline->result.var),
+ !i_zend_is_true(value TSRMLS_CC));
+ CHECK_EXCEPTION();
}
+ ZEND_VM_NEXT_OPCODE();
} else {
zval tmp, *varname = _get_zval_ptr_cv_BP_VAR_IS(execute_data, opline->op1.var TSRMLS_CC);
@@ -41928,40 +41839,27 @@ static int ZEND_FASTCALL ZEND_ISSET_ISEMPTY_VAR_SPEC_CV_UNUSED_HANDLER(ZEND_OPC
ce = Z_CE_P(EX_VAR(opline->op2.var));
}
value = zend_std_get_static_property(ce, Z_STR_P(varname), 1, ((IS_CV == IS_CONST) ? (EX(run_time_cache) + Z_CACHE_SLOT_P(varname)) : NULL) TSRMLS_CC);
- if (!value) {
- isset = 0;
- }
} else {
HashTable *target_symbol_table = zend_get_target_symbol_table(execute_data, opline->extended_value & ZEND_FETCH_TYPE_MASK TSRMLS_CC);
value = zend_hash_find_ind(target_symbol_table, Z_STR_P(varname));
- if (!value || Z_ISUNDEF_P(value)) {
- isset = 0;
- }
}
if (IS_CV != IS_CONST && varname == &tmp) {
zval_dtor(&tmp);
}
- }
-
- if (opline->extended_value & ZEND_ISSET) {
- if (isset && Z_TYPE_P(value) != IS_NULL &&
- (!Z_ISREF_P(value) || Z_TYPE_P(Z_REFVAL_P(value)) != IS_NULL)) {
- ZVAL_BOOL(EX_VAR(opline->result.var), 1);
- } else {
- ZVAL_BOOL(EX_VAR(opline->result.var), 0);
- }
- } else /* if (opline->extended_value & ZEND_ISEMPTY) */ {
- if (!isset || !i_zend_is_true(value TSRMLS_CC)) {
- ZVAL_BOOL(EX_VAR(opline->result.var), 1);
- } else {
- ZVAL_BOOL(EX_VAR(opline->result.var), 0);
+ if (opline->extended_value & ZEND_ISSET) {
+ ZVAL_BOOL(EX_VAR(opline->result.var),
+ value && Z_TYPE_P(value) > IS_NULL &&
+ (!Z_ISREF_P(value) || Z_TYPE_P(Z_REFVAL_P(value)) != IS_NULL));
+ } else /* if (opline->extended_value & ZEND_ISEMPTY) */ {
+ ZVAL_BOOL(EX_VAR(opline->result.var),
+ !value || !i_zend_is_true(value TSRMLS_CC));
}
- }
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ CHECK_EXCEPTION();
+ ZEND_VM_NEXT_OPCODE();
+ }
}
static int ZEND_FASTCALL ZEND_YIELD_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -43753,7 +43651,7 @@ static int ZEND_FASTCALL ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CV_CV_HANDLER(ZEND_OPC
container = _get_zval_ptr_cv_deref_BP_VAR_IS(execute_data, opline->op1.var TSRMLS_CC);
offset = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var TSRMLS_CC);
- if (IS_CV != IS_UNUSED && Z_TYPE_P(container) == IS_ARRAY) {
+ if (IS_CV != IS_UNUSED && EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
HashTable *ht = Z_ARRVAL_P(container);
zval *value;
zend_string *str;
@@ -43806,8 +43704,8 @@ num_index_prop:
} else /* if (opline->extended_value & ZEND_ISEMPTY) */ {
result = (value == NULL || !i_zend_is_true(value TSRMLS_CC));
}
- } else if (IS_CV == IS_UNUSED || Z_TYPE_P(container) == IS_OBJECT) {
- if (Z_OBJ_HT_P(container)->has_dimension) {
+ } else if (IS_CV == IS_UNUSED || EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
+ if (EXPECTED(Z_OBJ_HT_P(container)->has_dimension)) {
result = Z_OBJ_HT_P(container)->has_dimension(container, offset, (opline->extended_value & ZEND_ISSET) == 0 TSRMLS_CC);
} else {
zend_error(E_NOTICE, "Trying to check element of non-array");
@@ -43816,7 +43714,7 @@ num_index_prop:
if ((opline->extended_value & ZEND_ISSET) == 0) {
result = !result;
}
- } else if (Z_TYPE_P(container) == IS_STRING) { /* string offsets */
+ } else if (EXPECTED(Z_TYPE_P(container) == IS_STRING)) { /* string offsets */
zval tmp;
result = 0;
@@ -43832,7 +43730,7 @@ num_index_prop:
offset = &tmp;
}
}
- if (Z_TYPE_P(offset) == IS_LONG) {
+ if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) {
if (offset->value.lval >= 0 && (size_t)offset->value.lval < Z_STRLEN_P(container)) {
if ((opline->extended_value & ZEND_ISSET) ||
Z_STRVAL_P(container)[offset->value.lval] != '0') {
@@ -43865,8 +43763,8 @@ static int ZEND_FASTCALL ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CV_CV_HANDLER(ZEND_OP
container = _get_zval_ptr_cv_deref_BP_VAR_IS(execute_data, opline->op1.var TSRMLS_CC);
offset = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var TSRMLS_CC);
- if (IS_CV == IS_UNUSED || Z_TYPE_P(container) == IS_OBJECT) {
- if (Z_OBJ_HT_P(container)->has_property) {
+ if (IS_CV == IS_UNUSED || EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
+ if (EXPECTED(Z_OBJ_HT_P(container)->has_property)) {
result = Z_OBJ_HT_P(container)->has_property(container, offset, (opline->extended_value & ZEND_ISSET) == 0, ((IS_CV == IS_CONST) ? (EX(run_time_cache) + Z_CACHE_SLOT_P(offset)) : NULL) TSRMLS_CC);
} else {
zend_error(E_NOTICE, "Trying to check property of non-object");