Delay exceptional case check

This commit is contained in:
Dmitry Stogov 2018-11-20 13:06:23 +03:00
parent 93f7cbf29b
commit 1f3a535324
2 changed files with 45 additions and 54 deletions

View file

@ -903,11 +903,6 @@ ZEND_VM_C_LABEL(assign_dim_op_new_array):
if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
ZEND_VM_C_GOTO(assign_dim_op_array);
}
} else if (OP1_TYPE == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(container) == IS_UNDEF)) {
container = GET_OP1_UNDEF_CV(container, BP_VAR_RW);
ZEND_VM_C_LABEL(assign_dim_op_convert_to_array):
ZVAL_ARR(container, zend_new_array(8));
ZEND_VM_C_GOTO(assign_dim_op_new_array);
}
dim = GET_OP2_ZVAL_PTR(BP_VAR_R);
@ -928,7 +923,11 @@ ZEND_VM_C_LABEL(assign_dim_op_convert_to_array):
}
UNDEF_RESULT();
} else if (EXPECTED(Z_TYPE_P(container) <= IS_FALSE)) {
ZEND_VM_C_GOTO(assign_dim_op_convert_to_array);
if (OP1_TYPE == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(container) == IS_UNDEF)) {
container = GET_OP1_UNDEF_CV(container, BP_VAR_RW);
}
ZVAL_ARR(container, zend_new_array(8));
ZEND_VM_C_GOTO(assign_dim_op_new_array);
} else {
if (UNEXPECTED(OP1_TYPE != IS_VAR || EXPECTED(!Z_ISERROR_P(container)))) {
zend_use_scalar_as_array();

View file

@ -21899,11 +21899,6 @@ assign_dim_op_new_array:
if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
goto assign_dim_op_array;
}
} else if (IS_VAR == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(container) == IS_UNDEF)) {
container = GET_OP1_UNDEF_CV(container, BP_VAR_RW);
assign_dim_op_convert_to_array:
ZVAL_ARR(container, zend_new_array(8));
goto assign_dim_op_new_array;
}
dim = RT_CONSTANT(opline, opline->op2);
@ -21924,7 +21919,11 @@ assign_dim_op_convert_to_array:
}
UNDEF_RESULT();
} else if (EXPECTED(Z_TYPE_P(container) <= IS_FALSE)) {
goto assign_dim_op_convert_to_array;
if (IS_VAR == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(container) == IS_UNDEF)) {
container = GET_OP1_UNDEF_CV(container, BP_VAR_RW);
}
ZVAL_ARR(container, zend_new_array(8));
goto assign_dim_op_new_array;
} else {
if (UNEXPECTED(IS_VAR != IS_VAR || EXPECTED(!Z_ISERROR_P(container)))) {
zend_use_scalar_as_array();
@ -24229,11 +24228,6 @@ assign_dim_op_new_array:
if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
goto assign_dim_op_array;
}
} else if (IS_VAR == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(container) == IS_UNDEF)) {
container = GET_OP1_UNDEF_CV(container, BP_VAR_RW);
assign_dim_op_convert_to_array:
ZVAL_ARR(container, zend_new_array(8));
goto assign_dim_op_new_array;
}
dim = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
@ -24254,7 +24248,11 @@ assign_dim_op_convert_to_array:
}
UNDEF_RESULT();
} else if (EXPECTED(Z_TYPE_P(container) <= IS_FALSE)) {
goto assign_dim_op_convert_to_array;
if (IS_VAR == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(container) == IS_UNDEF)) {
container = GET_OP1_UNDEF_CV(container, BP_VAR_RW);
}
ZVAL_ARR(container, zend_new_array(8));
goto assign_dim_op_new_array;
} else {
if (UNEXPECTED(IS_VAR != IS_VAR || EXPECTED(!Z_ISERROR_P(container)))) {
zend_use_scalar_as_array();
@ -26710,11 +26708,6 @@ assign_dim_op_new_array:
if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
goto assign_dim_op_array;
}
} else if (IS_VAR == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(container) == IS_UNDEF)) {
container = GET_OP1_UNDEF_CV(container, BP_VAR_RW);
assign_dim_op_convert_to_array:
ZVAL_ARR(container, zend_new_array(8));
goto assign_dim_op_new_array;
}
dim = NULL;
@ -26735,7 +26728,11 @@ assign_dim_op_convert_to_array:
}
UNDEF_RESULT();
} else if (EXPECTED(Z_TYPE_P(container) <= IS_FALSE)) {
goto assign_dim_op_convert_to_array;
if (IS_VAR == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(container) == IS_UNDEF)) {
container = GET_OP1_UNDEF_CV(container, BP_VAR_RW);
}
ZVAL_ARR(container, zend_new_array(8));
goto assign_dim_op_new_array;
} else {
if (UNEXPECTED(IS_VAR != IS_VAR || EXPECTED(!Z_ISERROR_P(container)))) {
zend_use_scalar_as_array();
@ -28092,11 +28089,6 @@ assign_dim_op_new_array:
if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
goto assign_dim_op_array;
}
} else if (IS_VAR == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(container) == IS_UNDEF)) {
container = GET_OP1_UNDEF_CV(container, BP_VAR_RW);
assign_dim_op_convert_to_array:
ZVAL_ARR(container, zend_new_array(8));
goto assign_dim_op_new_array;
}
dim = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
@ -28117,7 +28109,11 @@ assign_dim_op_convert_to_array:
}
UNDEF_RESULT();
} else if (EXPECTED(Z_TYPE_P(container) <= IS_FALSE)) {
goto assign_dim_op_convert_to_array;
if (IS_VAR == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(container) == IS_UNDEF)) {
container = GET_OP1_UNDEF_CV(container, BP_VAR_RW);
}
ZVAL_ARR(container, zend_new_array(8));
goto assign_dim_op_new_array;
} else {
if (UNEXPECTED(IS_VAR != IS_VAR || EXPECTED(!Z_ISERROR_P(container)))) {
zend_use_scalar_as_array();
@ -38562,11 +38558,6 @@ assign_dim_op_new_array:
if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
goto assign_dim_op_array;
}
} else if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(container) == IS_UNDEF)) {
container = GET_OP1_UNDEF_CV(container, BP_VAR_RW);
assign_dim_op_convert_to_array:
ZVAL_ARR(container, zend_new_array(8));
goto assign_dim_op_new_array;
}
dim = RT_CONSTANT(opline, opline->op2);
@ -38587,7 +38578,11 @@ assign_dim_op_convert_to_array:
}
UNDEF_RESULT();
} else if (EXPECTED(Z_TYPE_P(container) <= IS_FALSE)) {
goto assign_dim_op_convert_to_array;
if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(container) == IS_UNDEF)) {
container = GET_OP1_UNDEF_CV(container, BP_VAR_RW);
}
ZVAL_ARR(container, zend_new_array(8));
goto assign_dim_op_new_array;
} else {
if (UNEXPECTED(IS_CV != IS_VAR || EXPECTED(!Z_ISERROR_P(container)))) {
zend_use_scalar_as_array();
@ -42403,11 +42398,6 @@ assign_dim_op_new_array:
if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
goto assign_dim_op_array;
}
} else if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(container) == IS_UNDEF)) {
container = GET_OP1_UNDEF_CV(container, BP_VAR_RW);
assign_dim_op_convert_to_array:
ZVAL_ARR(container, zend_new_array(8));
goto assign_dim_op_new_array;
}
dim = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
@ -42428,7 +42418,11 @@ assign_dim_op_convert_to_array:
}
UNDEF_RESULT();
} else if (EXPECTED(Z_TYPE_P(container) <= IS_FALSE)) {
goto assign_dim_op_convert_to_array;
if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(container) == IS_UNDEF)) {
container = GET_OP1_UNDEF_CV(container, BP_VAR_RW);
}
ZVAL_ARR(container, zend_new_array(8));
goto assign_dim_op_new_array;
} else {
if (UNEXPECTED(IS_CV != IS_VAR || EXPECTED(!Z_ISERROR_P(container)))) {
zend_use_scalar_as_array();
@ -45632,11 +45626,6 @@ assign_dim_op_new_array:
if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
goto assign_dim_op_array;
}
} else if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(container) == IS_UNDEF)) {
container = GET_OP1_UNDEF_CV(container, BP_VAR_RW);
assign_dim_op_convert_to_array:
ZVAL_ARR(container, zend_new_array(8));
goto assign_dim_op_new_array;
}
dim = NULL;
@ -45657,7 +45646,11 @@ assign_dim_op_convert_to_array:
}
UNDEF_RESULT();
} else if (EXPECTED(Z_TYPE_P(container) <= IS_FALSE)) {
goto assign_dim_op_convert_to_array;
if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(container) == IS_UNDEF)) {
container = GET_OP1_UNDEF_CV(container, BP_VAR_RW);
}
ZVAL_ARR(container, zend_new_array(8));
goto assign_dim_op_new_array;
} else {
if (UNEXPECTED(IS_CV != IS_VAR || EXPECTED(!Z_ISERROR_P(container)))) {
zend_use_scalar_as_array();
@ -48105,11 +48098,6 @@ assign_dim_op_new_array:
if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
goto assign_dim_op_array;
}
} else if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(container) == IS_UNDEF)) {
container = GET_OP1_UNDEF_CV(container, BP_VAR_RW);
assign_dim_op_convert_to_array:
ZVAL_ARR(container, zend_new_array(8));
goto assign_dim_op_new_array;
}
dim = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
@ -48130,7 +48118,11 @@ assign_dim_op_convert_to_array:
}
UNDEF_RESULT();
} else if (EXPECTED(Z_TYPE_P(container) <= IS_FALSE)) {
goto assign_dim_op_convert_to_array;
if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(container) == IS_UNDEF)) {
container = GET_OP1_UNDEF_CV(container, BP_VAR_RW);
}
ZVAL_ARR(container, zend_new_array(8));
goto assign_dim_op_new_array;
} else {
if (UNEXPECTED(IS_CV != IS_VAR || EXPECTED(!Z_ISERROR_P(container)))) {
zend_use_scalar_as_array();