]> granicus.if.org Git - php/commitdiff
Delay exceptional case check
authorDmitry Stogov <dmitry@zend.com>
Tue, 20 Nov 2018 10:06:23 +0000 (13:06 +0300)
committerDmitry Stogov <dmitry@zend.com>
Tue, 20 Nov 2018 10:06:23 +0000 (13:06 +0300)
Zend/zend_vm_def.h
Zend/zend_vm_execute.h

index 3cdd3d66192780a3e2a85a505c473fa81ecb4ec8..ecb8064efef2d09c634d6c165ecbd7e70d6ba1a2 100644 (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();
index a7ce7d1f170f087175dd249ea523267c5fb832a1..31fdb9b32d801f7c600b26961d2aea5bc98b5b76 100644 (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();