Skip to content

Commit 1f3a535

Browse files
committed
Delay exceptional case check
1 parent 93f7cbf commit 1f3a535

File tree

2 files changed

+45
-54
lines changed

2 files changed

+45
-54
lines changed

Zend/zend_vm_def.h

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -903,11 +903,6 @@ ZEND_VM_C_LABEL(assign_dim_op_new_array):
903903
if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
904904
ZEND_VM_C_GOTO(assign_dim_op_array);
905905
}
906-
} else if (OP1_TYPE == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(container) == IS_UNDEF)) {
907-
container = GET_OP1_UNDEF_CV(container, BP_VAR_RW);
908-
ZEND_VM_C_LABEL(assign_dim_op_convert_to_array):
909-
ZVAL_ARR(container, zend_new_array(8));
910-
ZEND_VM_C_GOTO(assign_dim_op_new_array);
911906
}
912907

913908
dim = GET_OP2_ZVAL_PTR(BP_VAR_R);
@@ -928,7 +923,11 @@ ZEND_VM_C_LABEL(assign_dim_op_convert_to_array):
928923
}
929924
UNDEF_RESULT();
930925
} else if (EXPECTED(Z_TYPE_P(container) <= IS_FALSE)) {
931-
ZEND_VM_C_GOTO(assign_dim_op_convert_to_array);
926+
if (OP1_TYPE == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(container) == IS_UNDEF)) {
927+
container = GET_OP1_UNDEF_CV(container, BP_VAR_RW);
928+
}
929+
ZVAL_ARR(container, zend_new_array(8));
930+
ZEND_VM_C_GOTO(assign_dim_op_new_array);
932931
} else {
933932
if (UNEXPECTED(OP1_TYPE != IS_VAR || EXPECTED(!Z_ISERROR_P(container)))) {
934933
zend_use_scalar_as_array();

Zend/zend_vm_execute.h

Lines changed: 40 additions & 48 deletions
Original file line numberDiff line numberDiff line change
@@ -21899,11 +21899,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_binary_assign_op_dim_helper_SP
2189921899
if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
2190021900
goto assign_dim_op_array;
2190121901
}
21902-
} else if (IS_VAR == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(container) == IS_UNDEF)) {
21903-
container = GET_OP1_UNDEF_CV(container, BP_VAR_RW);
21904-
assign_dim_op_convert_to_array:
21905-
ZVAL_ARR(container, zend_new_array(8));
21906-
goto assign_dim_op_new_array;
2190721902
}
2190821903

2190921904
dim = RT_CONSTANT(opline, opline->op2);
@@ -21924,7 +21919,11 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_binary_assign_op_dim_helper_SP
2192421919
}
2192521920
UNDEF_RESULT();
2192621921
} else if (EXPECTED(Z_TYPE_P(container) <= IS_FALSE)) {
21927-
goto assign_dim_op_convert_to_array;
21922+
if (IS_VAR == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(container) == IS_UNDEF)) {
21923+
container = GET_OP1_UNDEF_CV(container, BP_VAR_RW);
21924+
}
21925+
ZVAL_ARR(container, zend_new_array(8));
21926+
goto assign_dim_op_new_array;
2192821927
} else {
2192921928
if (UNEXPECTED(IS_VAR != IS_VAR || EXPECTED(!Z_ISERROR_P(container)))) {
2193021929
zend_use_scalar_as_array();
@@ -24229,11 +24228,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_binary_assign_op_dim_helper_SP
2422924228
if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
2423024229
goto assign_dim_op_array;
2423124230
}
24232-
} else if (IS_VAR == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(container) == IS_UNDEF)) {
24233-
container = GET_OP1_UNDEF_CV(container, BP_VAR_RW);
24234-
assign_dim_op_convert_to_array:
24235-
ZVAL_ARR(container, zend_new_array(8));
24236-
goto assign_dim_op_new_array;
2423724231
}
2423824232

2423924233
dim = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
@@ -24254,7 +24248,11 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_binary_assign_op_dim_helper_SP
2425424248
}
2425524249
UNDEF_RESULT();
2425624250
} else if (EXPECTED(Z_TYPE_P(container) <= IS_FALSE)) {
24257-
goto assign_dim_op_convert_to_array;
24251+
if (IS_VAR == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(container) == IS_UNDEF)) {
24252+
container = GET_OP1_UNDEF_CV(container, BP_VAR_RW);
24253+
}
24254+
ZVAL_ARR(container, zend_new_array(8));
24255+
goto assign_dim_op_new_array;
2425824256
} else {
2425924257
if (UNEXPECTED(IS_VAR != IS_VAR || EXPECTED(!Z_ISERROR_P(container)))) {
2426024258
zend_use_scalar_as_array();
@@ -26710,11 +26708,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_binary_assign_op_dim_helper_SP
2671026708
if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
2671126709
goto assign_dim_op_array;
2671226710
}
26713-
} else if (IS_VAR == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(container) == IS_UNDEF)) {
26714-
container = GET_OP1_UNDEF_CV(container, BP_VAR_RW);
26715-
assign_dim_op_convert_to_array:
26716-
ZVAL_ARR(container, zend_new_array(8));
26717-
goto assign_dim_op_new_array;
2671826711
}
2671926712

2672026713
dim = NULL;
@@ -26735,7 +26728,11 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_binary_assign_op_dim_helper_SP
2673526728
}
2673626729
UNDEF_RESULT();
2673726730
} else if (EXPECTED(Z_TYPE_P(container) <= IS_FALSE)) {
26738-
goto assign_dim_op_convert_to_array;
26731+
if (IS_VAR == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(container) == IS_UNDEF)) {
26732+
container = GET_OP1_UNDEF_CV(container, BP_VAR_RW);
26733+
}
26734+
ZVAL_ARR(container, zend_new_array(8));
26735+
goto assign_dim_op_new_array;
2673926736
} else {
2674026737
if (UNEXPECTED(IS_VAR != IS_VAR || EXPECTED(!Z_ISERROR_P(container)))) {
2674126738
zend_use_scalar_as_array();
@@ -28092,11 +28089,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_binary_assign_op_dim_helper_SP
2809228089
if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
2809328090
goto assign_dim_op_array;
2809428091
}
28095-
} else if (IS_VAR == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(container) == IS_UNDEF)) {
28096-
container = GET_OP1_UNDEF_CV(container, BP_VAR_RW);
28097-
assign_dim_op_convert_to_array:
28098-
ZVAL_ARR(container, zend_new_array(8));
28099-
goto assign_dim_op_new_array;
2810028092
}
2810128093

2810228094
dim = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
@@ -28117,7 +28109,11 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_binary_assign_op_dim_helper_SP
2811728109
}
2811828110
UNDEF_RESULT();
2811928111
} else if (EXPECTED(Z_TYPE_P(container) <= IS_FALSE)) {
28120-
goto assign_dim_op_convert_to_array;
28112+
if (IS_VAR == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(container) == IS_UNDEF)) {
28113+
container = GET_OP1_UNDEF_CV(container, BP_VAR_RW);
28114+
}
28115+
ZVAL_ARR(container, zend_new_array(8));
28116+
goto assign_dim_op_new_array;
2812128117
} else {
2812228118
if (UNEXPECTED(IS_VAR != IS_VAR || EXPECTED(!Z_ISERROR_P(container)))) {
2812328119
zend_use_scalar_as_array();
@@ -38562,11 +38558,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_binary_assign_op_dim_helper_SP
3856238558
if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
3856338559
goto assign_dim_op_array;
3856438560
}
38565-
} else if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(container) == IS_UNDEF)) {
38566-
container = GET_OP1_UNDEF_CV(container, BP_VAR_RW);
38567-
assign_dim_op_convert_to_array:
38568-
ZVAL_ARR(container, zend_new_array(8));
38569-
goto assign_dim_op_new_array;
3857038561
}
3857138562

3857238563
dim = RT_CONSTANT(opline, opline->op2);
@@ -38587,7 +38578,11 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_binary_assign_op_dim_helper_SP
3858738578
}
3858838579
UNDEF_RESULT();
3858938580
} else if (EXPECTED(Z_TYPE_P(container) <= IS_FALSE)) {
38590-
goto assign_dim_op_convert_to_array;
38581+
if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(container) == IS_UNDEF)) {
38582+
container = GET_OP1_UNDEF_CV(container, BP_VAR_RW);
38583+
}
38584+
ZVAL_ARR(container, zend_new_array(8));
38585+
goto assign_dim_op_new_array;
3859138586
} else {
3859238587
if (UNEXPECTED(IS_CV != IS_VAR || EXPECTED(!Z_ISERROR_P(container)))) {
3859338588
zend_use_scalar_as_array();
@@ -42403,11 +42398,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_binary_assign_op_dim_helper_SP
4240342398
if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
4240442399
goto assign_dim_op_array;
4240542400
}
42406-
} else if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(container) == IS_UNDEF)) {
42407-
container = GET_OP1_UNDEF_CV(container, BP_VAR_RW);
42408-
assign_dim_op_convert_to_array:
42409-
ZVAL_ARR(container, zend_new_array(8));
42410-
goto assign_dim_op_new_array;
4241142401
}
4241242402

4241342403
dim = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
@@ -42428,7 +42418,11 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_binary_assign_op_dim_helper_SP
4242842418
}
4242942419
UNDEF_RESULT();
4243042420
} else if (EXPECTED(Z_TYPE_P(container) <= IS_FALSE)) {
42431-
goto assign_dim_op_convert_to_array;
42421+
if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(container) == IS_UNDEF)) {
42422+
container = GET_OP1_UNDEF_CV(container, BP_VAR_RW);
42423+
}
42424+
ZVAL_ARR(container, zend_new_array(8));
42425+
goto assign_dim_op_new_array;
4243242426
} else {
4243342427
if (UNEXPECTED(IS_CV != IS_VAR || EXPECTED(!Z_ISERROR_P(container)))) {
4243442428
zend_use_scalar_as_array();
@@ -45632,11 +45626,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_binary_assign_op_dim_helper_SP
4563245626
if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
4563345627
goto assign_dim_op_array;
4563445628
}
45635-
} else if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(container) == IS_UNDEF)) {
45636-
container = GET_OP1_UNDEF_CV(container, BP_VAR_RW);
45637-
assign_dim_op_convert_to_array:
45638-
ZVAL_ARR(container, zend_new_array(8));
45639-
goto assign_dim_op_new_array;
4564045629
}
4564145630

4564245631
dim = NULL;
@@ -45657,7 +45646,11 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_binary_assign_op_dim_helper_SP
4565745646
}
4565845647
UNDEF_RESULT();
4565945648
} else if (EXPECTED(Z_TYPE_P(container) <= IS_FALSE)) {
45660-
goto assign_dim_op_convert_to_array;
45649+
if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(container) == IS_UNDEF)) {
45650+
container = GET_OP1_UNDEF_CV(container, BP_VAR_RW);
45651+
}
45652+
ZVAL_ARR(container, zend_new_array(8));
45653+
goto assign_dim_op_new_array;
4566145654
} else {
4566245655
if (UNEXPECTED(IS_CV != IS_VAR || EXPECTED(!Z_ISERROR_P(container)))) {
4566345656
zend_use_scalar_as_array();
@@ -48105,11 +48098,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_binary_assign_op_dim_helper_SP
4810548098
if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
4810648099
goto assign_dim_op_array;
4810748100
}
48108-
} else if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(container) == IS_UNDEF)) {
48109-
container = GET_OP1_UNDEF_CV(container, BP_VAR_RW);
48110-
assign_dim_op_convert_to_array:
48111-
ZVAL_ARR(container, zend_new_array(8));
48112-
goto assign_dim_op_new_array;
4811348101
}
4811448102

4811548103
dim = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
@@ -48130,7 +48118,11 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_binary_assign_op_dim_helper_SP
4813048118
}
4813148119
UNDEF_RESULT();
4813248120
} else if (EXPECTED(Z_TYPE_P(container) <= IS_FALSE)) {
48133-
goto assign_dim_op_convert_to_array;
48121+
if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(container) == IS_UNDEF)) {
48122+
container = GET_OP1_UNDEF_CV(container, BP_VAR_RW);
48123+
}
48124+
ZVAL_ARR(container, zend_new_array(8));
48125+
goto assign_dim_op_new_array;
4813448126
} else {
4813548127
if (UNEXPECTED(IS_CV != IS_VAR || EXPECTED(!Z_ISERROR_P(container)))) {
4813648128
zend_use_scalar_as_array();

0 commit comments

Comments
 (0)