From 1f3a535324d4e1e6283f8b6b27d8a151c9f6983c Mon Sep 17 00:00:00 2001 From: Dmitry Stogov Date: Tue, 20 Nov 2018 13:06:23 +0300 Subject: [PATCH] Delay exceptional case check --- Zend/zend_vm_def.h | 11 +++--- Zend/zend_vm_execute.h | 88 +++++++++++++++++++----------------------- 2 files changed, 45 insertions(+), 54 deletions(-) diff --git a/Zend/zend_vm_def.h b/Zend/zend_vm_def.h index 3cdd3d6619..ecb8064efe 100644 --- a/Zend/zend_vm_def.h +++ b/Zend/zend_vm_def.h @@ -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(); diff --git a/Zend/zend_vm_execute.h b/Zend/zend_vm_execute.h index a7ce7d1f17..31fdb9b32d 100644 --- a/Zend/zend_vm_execute.h +++ b/Zend/zend_vm_execute.h @@ -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(); -- 2.49.0