mirror of
https://github.com/php/php-src.git
synced 2024-12-18 22:41:20 +08:00
Restore "avoid exception check" optimization and add EG(exception) check only on slow path.
This commit is contained in:
parent
1cde9e8528
commit
9372b6876d
@ -6881,12 +6881,24 @@ ZEND_VM_C_LABEL(num_index_prop):
|
||||
ZEND_VM_C_GOTO(isset_again);
|
||||
} else {
|
||||
value = zend_find_array_dim_slow(ht, offset EXECUTE_DATA_CC);
|
||||
if (UNEXPECTED(EG(exception))) {
|
||||
result = 0;
|
||||
ZEND_VM_C_GOTO(isset_dim_obj_exit);
|
||||
}
|
||||
}
|
||||
|
||||
if (!(opline->extended_value & ZEND_ISEMPTY)) {
|
||||
/* > IS_NULL means not IS_UNDEF and not IS_NULL */
|
||||
result = value != NULL && Z_TYPE_P(value) > IS_NULL &&
|
||||
(!Z_ISREF_P(value) || Z_TYPE_P(Z_REFVAL_P(value)) != IS_NULL);
|
||||
|
||||
if (OP1_TYPE & (IS_CONST|IS_CV)) {
|
||||
/* avoid exception check */
|
||||
FREE_OP2();
|
||||
ZEND_VM_SMART_BRANCH(result, 0);
|
||||
ZVAL_BOOL(EX_VAR(opline->result.var), result);
|
||||
ZEND_VM_NEXT_OPCODE();
|
||||
}
|
||||
} else {
|
||||
result = (value == NULL || !i_zend_is_true(value));
|
||||
}
|
||||
|
@ -6199,12 +6199,24 @@ num_index_prop:
|
||||
goto isset_again;
|
||||
} else {
|
||||
value = zend_find_array_dim_slow(ht, offset EXECUTE_DATA_CC);
|
||||
if (UNEXPECTED(EG(exception))) {
|
||||
result = 0;
|
||||
goto isset_dim_obj_exit;
|
||||
}
|
||||
}
|
||||
|
||||
if (!(opline->extended_value & ZEND_ISEMPTY)) {
|
||||
/* > IS_NULL means not IS_UNDEF and not IS_NULL */
|
||||
result = value != NULL && Z_TYPE_P(value) > IS_NULL &&
|
||||
(!Z_ISREF_P(value) || Z_TYPE_P(Z_REFVAL_P(value)) != IS_NULL);
|
||||
|
||||
if (IS_CONST & (IS_CONST|IS_CV)) {
|
||||
/* avoid exception check */
|
||||
|
||||
ZEND_VM_SMART_BRANCH(result, 0);
|
||||
ZVAL_BOOL(EX_VAR(opline->result.var), result);
|
||||
ZEND_VM_NEXT_OPCODE();
|
||||
}
|
||||
} else {
|
||||
result = (value == NULL || !i_zend_is_true(value));
|
||||
}
|
||||
@ -8367,12 +8379,24 @@ num_index_prop:
|
||||
goto isset_again;
|
||||
} else {
|
||||
value = zend_find_array_dim_slow(ht, offset EXECUTE_DATA_CC);
|
||||
if (UNEXPECTED(EG(exception))) {
|
||||
result = 0;
|
||||
goto isset_dim_obj_exit;
|
||||
}
|
||||
}
|
||||
|
||||
if (!(opline->extended_value & ZEND_ISEMPTY)) {
|
||||
/* > IS_NULL means not IS_UNDEF and not IS_NULL */
|
||||
result = value != NULL && Z_TYPE_P(value) > IS_NULL &&
|
||||
(!Z_ISREF_P(value) || Z_TYPE_P(Z_REFVAL_P(value)) != IS_NULL);
|
||||
|
||||
if (IS_CONST & (IS_CONST|IS_CV)) {
|
||||
/* avoid exception check */
|
||||
zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
|
||||
ZEND_VM_SMART_BRANCH(result, 0);
|
||||
ZVAL_BOOL(EX_VAR(opline->result.var), result);
|
||||
ZEND_VM_NEXT_OPCODE();
|
||||
}
|
||||
} else {
|
||||
result = (value == NULL || !i_zend_is_true(value));
|
||||
}
|
||||
@ -10790,12 +10814,24 @@ num_index_prop:
|
||||
goto isset_again;
|
||||
} else {
|
||||
value = zend_find_array_dim_slow(ht, offset EXECUTE_DATA_CC);
|
||||
if (UNEXPECTED(EG(exception))) {
|
||||
result = 0;
|
||||
goto isset_dim_obj_exit;
|
||||
}
|
||||
}
|
||||
|
||||
if (!(opline->extended_value & ZEND_ISEMPTY)) {
|
||||
/* > IS_NULL means not IS_UNDEF and not IS_NULL */
|
||||
result = value != NULL && Z_TYPE_P(value) > IS_NULL &&
|
||||
(!Z_ISREF_P(value) || Z_TYPE_P(Z_REFVAL_P(value)) != IS_NULL);
|
||||
|
||||
if (IS_CONST & (IS_CONST|IS_CV)) {
|
||||
/* avoid exception check */
|
||||
|
||||
ZEND_VM_SMART_BRANCH(result, 0);
|
||||
ZVAL_BOOL(EX_VAR(opline->result.var), result);
|
||||
ZEND_VM_NEXT_OPCODE();
|
||||
}
|
||||
} else {
|
||||
result = (value == NULL || !i_zend_is_true(value));
|
||||
}
|
||||
@ -14792,12 +14828,24 @@ num_index_prop:
|
||||
goto isset_again;
|
||||
} else {
|
||||
value = zend_find_array_dim_slow(ht, offset EXECUTE_DATA_CC);
|
||||
if (UNEXPECTED(EG(exception))) {
|
||||
result = 0;
|
||||
goto isset_dim_obj_exit;
|
||||
}
|
||||
}
|
||||
|
||||
if (!(opline->extended_value & ZEND_ISEMPTY)) {
|
||||
/* > IS_NULL means not IS_UNDEF and not IS_NULL */
|
||||
result = value != NULL && Z_TYPE_P(value) > IS_NULL &&
|
||||
(!Z_ISREF_P(value) || Z_TYPE_P(Z_REFVAL_P(value)) != IS_NULL);
|
||||
|
||||
if ((IS_TMP_VAR|IS_VAR) & (IS_CONST|IS_CV)) {
|
||||
/* avoid exception check */
|
||||
|
||||
ZEND_VM_SMART_BRANCH(result, 0);
|
||||
ZVAL_BOOL(EX_VAR(opline->result.var), result);
|
||||
ZEND_VM_NEXT_OPCODE();
|
||||
}
|
||||
} else {
|
||||
result = (value == NULL || !i_zend_is_true(value));
|
||||
}
|
||||
@ -16217,12 +16265,24 @@ num_index_prop:
|
||||
goto isset_again;
|
||||
} else {
|
||||
value = zend_find_array_dim_slow(ht, offset EXECUTE_DATA_CC);
|
||||
if (UNEXPECTED(EG(exception))) {
|
||||
result = 0;
|
||||
goto isset_dim_obj_exit;
|
||||
}
|
||||
}
|
||||
|
||||
if (!(opline->extended_value & ZEND_ISEMPTY)) {
|
||||
/* > IS_NULL means not IS_UNDEF and not IS_NULL */
|
||||
result = value != NULL && Z_TYPE_P(value) > IS_NULL &&
|
||||
(!Z_ISREF_P(value) || Z_TYPE_P(Z_REFVAL_P(value)) != IS_NULL);
|
||||
|
||||
if ((IS_TMP_VAR|IS_VAR) & (IS_CONST|IS_CV)) {
|
||||
/* avoid exception check */
|
||||
zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
|
||||
ZEND_VM_SMART_BRANCH(result, 0);
|
||||
ZVAL_BOOL(EX_VAR(opline->result.var), result);
|
||||
ZEND_VM_NEXT_OPCODE();
|
||||
}
|
||||
} else {
|
||||
result = (value == NULL || !i_zend_is_true(value));
|
||||
}
|
||||
@ -17516,12 +17576,24 @@ num_index_prop:
|
||||
goto isset_again;
|
||||
} else {
|
||||
value = zend_find_array_dim_slow(ht, offset EXECUTE_DATA_CC);
|
||||
if (UNEXPECTED(EG(exception))) {
|
||||
result = 0;
|
||||
goto isset_dim_obj_exit;
|
||||
}
|
||||
}
|
||||
|
||||
if (!(opline->extended_value & ZEND_ISEMPTY)) {
|
||||
/* > IS_NULL means not IS_UNDEF and not IS_NULL */
|
||||
result = value != NULL && Z_TYPE_P(value) > IS_NULL &&
|
||||
(!Z_ISREF_P(value) || Z_TYPE_P(Z_REFVAL_P(value)) != IS_NULL);
|
||||
|
||||
if ((IS_TMP_VAR|IS_VAR) & (IS_CONST|IS_CV)) {
|
||||
/* avoid exception check */
|
||||
|
||||
ZEND_VM_SMART_BRANCH(result, 0);
|
||||
ZVAL_BOOL(EX_VAR(opline->result.var), result);
|
||||
ZEND_VM_NEXT_OPCODE();
|
||||
}
|
||||
} else {
|
||||
result = (value == NULL || !i_zend_is_true(value));
|
||||
}
|
||||
@ -41663,12 +41735,24 @@ num_index_prop:
|
||||
goto isset_again;
|
||||
} else {
|
||||
value = zend_find_array_dim_slow(ht, offset EXECUTE_DATA_CC);
|
||||
if (UNEXPECTED(EG(exception))) {
|
||||
result = 0;
|
||||
goto isset_dim_obj_exit;
|
||||
}
|
||||
}
|
||||
|
||||
if (!(opline->extended_value & ZEND_ISEMPTY)) {
|
||||
/* > IS_NULL means not IS_UNDEF and not IS_NULL */
|
||||
result = value != NULL && Z_TYPE_P(value) > IS_NULL &&
|
||||
(!Z_ISREF_P(value) || Z_TYPE_P(Z_REFVAL_P(value)) != IS_NULL);
|
||||
|
||||
if (IS_CV & (IS_CONST|IS_CV)) {
|
||||
/* avoid exception check */
|
||||
|
||||
ZEND_VM_SMART_BRANCH(result, 0);
|
||||
ZVAL_BOOL(EX_VAR(opline->result.var), result);
|
||||
ZEND_VM_NEXT_OPCODE();
|
||||
}
|
||||
} else {
|
||||
result = (value == NULL || !i_zend_is_true(value));
|
||||
}
|
||||
@ -45182,12 +45266,24 @@ num_index_prop:
|
||||
goto isset_again;
|
||||
} else {
|
||||
value = zend_find_array_dim_slow(ht, offset EXECUTE_DATA_CC);
|
||||
if (UNEXPECTED(EG(exception))) {
|
||||
result = 0;
|
||||
goto isset_dim_obj_exit;
|
||||
}
|
||||
}
|
||||
|
||||
if (!(opline->extended_value & ZEND_ISEMPTY)) {
|
||||
/* > IS_NULL means not IS_UNDEF and not IS_NULL */
|
||||
result = value != NULL && Z_TYPE_P(value) > IS_NULL &&
|
||||
(!Z_ISREF_P(value) || Z_TYPE_P(Z_REFVAL_P(value)) != IS_NULL);
|
||||
|
||||
if (IS_CV & (IS_CONST|IS_CV)) {
|
||||
/* avoid exception check */
|
||||
zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
|
||||
ZEND_VM_SMART_BRANCH(result, 0);
|
||||
ZVAL_BOOL(EX_VAR(opline->result.var), result);
|
||||
ZEND_VM_NEXT_OPCODE();
|
||||
}
|
||||
} else {
|
||||
result = (value == NULL || !i_zend_is_true(value));
|
||||
}
|
||||
@ -50401,12 +50497,24 @@ num_index_prop:
|
||||
goto isset_again;
|
||||
} else {
|
||||
value = zend_find_array_dim_slow(ht, offset EXECUTE_DATA_CC);
|
||||
if (UNEXPECTED(EG(exception))) {
|
||||
result = 0;
|
||||
goto isset_dim_obj_exit;
|
||||
}
|
||||
}
|
||||
|
||||
if (!(opline->extended_value & ZEND_ISEMPTY)) {
|
||||
/* > IS_NULL means not IS_UNDEF and not IS_NULL */
|
||||
result = value != NULL && Z_TYPE_P(value) > IS_NULL &&
|
||||
(!Z_ISREF_P(value) || Z_TYPE_P(Z_REFVAL_P(value)) != IS_NULL);
|
||||
|
||||
if (IS_CV & (IS_CONST|IS_CV)) {
|
||||
/* avoid exception check */
|
||||
|
||||
ZEND_VM_SMART_BRANCH(result, 0);
|
||||
ZVAL_BOOL(EX_VAR(opline->result.var), result);
|
||||
ZEND_VM_NEXT_OPCODE();
|
||||
}
|
||||
} else {
|
||||
result = (value == NULL || !i_zend_is_true(value));
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user