@@ -4805,15 +4805,18 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FE_RESET_R_SPEC_CONST_HANDLER(
4805
4805
properties = zobj->handlers->get_properties(zobj);
4806
4806
}
4807
4807
4808
- if (zend_hash_num_elements(properties) == 0) {
4809
- goto fe_reset_r_empty;
4810
- }
4811
-
4812
4808
result = EX_VAR(opline->result.var);
4813
4809
ZVAL_COPY_VALUE(result, array_ptr);
4814
4810
if (IS_CONST != IS_TMP_VAR) {
4815
4811
Z_ADDREF_P(array_ptr);
4816
4812
}
4813
+
4814
+ if (zend_hash_num_elements(properties) == 0) {
4815
+ Z_FE_ITER_P(result) = (uint32_t) -1;
4816
+
4817
+ ZEND_VM_JMP(OP_JMP_ADDR(opline, opline->op2));
4818
+ }
4819
+
4817
4820
Z_FE_ITER_P(result) = zend_hash_iterator_add(properties, 0);
4818
4821
4819
4822
ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
@@ -4830,7 +4833,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FE_RESET_R_SPEC_CONST_HANDLER(
4830
4833
}
4831
4834
} else {
4832
4835
zend_error(E_WARNING, "foreach() argument must be of type array|object, %s given", zend_zval_type_name(array_ptr));
4833
- fe_reset_r_empty:
4834
4836
ZVAL_UNDEF(EX_VAR(opline->result.var));
4835
4837
Z_FE_ITER_P(EX_VAR(opline->result.var)) = (uint32_t)-1;
4836
4838
@@ -4903,6 +4905,7 @@ static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FE_RESET_RW_SPEC_
4903
4905
properties = Z_OBJPROP_P(array_ptr);
4904
4906
if (zend_hash_num_elements(properties) == 0) {
4905
4907
Z_FE_ITER_P(EX_VAR(opline->result.var)) = (uint32_t) -1;
4908
+
4906
4909
ZEND_VM_JMP(OP_JMP_ADDR(opline, opline->op2));
4907
4910
}
4908
4911
@@ -18812,15 +18815,18 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FE_RESET_R_SPEC_TMP_HANDLER(ZE
18812
18815
properties = zobj->handlers->get_properties(zobj);
18813
18816
}
18814
18817
18815
- if (zend_hash_num_elements(properties) == 0) {
18816
- goto fe_reset_r_empty;
18817
- }
18818
-
18819
18818
result = EX_VAR(opline->result.var);
18820
18819
ZVAL_COPY_VALUE(result, array_ptr);
18821
18820
if (IS_TMP_VAR != IS_TMP_VAR) {
18822
18821
Z_ADDREF_P(array_ptr);
18823
18822
}
18823
+
18824
+ if (zend_hash_num_elements(properties) == 0) {
18825
+ Z_FE_ITER_P(result) = (uint32_t) -1;
18826
+
18827
+ ZEND_VM_JMP(OP_JMP_ADDR(opline, opline->op2));
18828
+ }
18829
+
18824
18830
Z_FE_ITER_P(result) = zend_hash_iterator_add(properties, 0);
18825
18831
18826
18832
ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
@@ -18838,7 +18844,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FE_RESET_R_SPEC_TMP_HANDLER(ZE
18838
18844
}
18839
18845
} else {
18840
18846
zend_error(E_WARNING, "foreach() argument must be of type array|object, %s given", zend_zval_type_name(array_ptr));
18841
- fe_reset_r_empty:
18842
18847
ZVAL_UNDEF(EX_VAR(opline->result.var));
18843
18848
Z_FE_ITER_P(EX_VAR(opline->result.var)) = (uint32_t)-1;
18844
18849
zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
@@ -18911,6 +18916,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FE_RESET_RW_SPEC_TMP_HANDLER(Z
18911
18916
properties = Z_OBJPROP_P(array_ptr);
18912
18917
if (zend_hash_num_elements(properties) == 0) {
18913
18918
Z_FE_ITER_P(EX_VAR(opline->result.var)) = (uint32_t) -1;
18919
+
18914
18920
ZEND_VM_JMP(OP_JMP_ADDR(opline, opline->op2));
18915
18921
}
18916
18922
@@ -21374,15 +21380,18 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FE_RESET_R_SPEC_VAR_HANDLER(ZE
21374
21380
properties = zobj->handlers->get_properties(zobj);
21375
21381
}
21376
21382
21377
- if (zend_hash_num_elements(properties) == 0) {
21378
- goto fe_reset_r_empty;
21379
- }
21380
-
21381
21383
result = EX_VAR(opline->result.var);
21382
21384
ZVAL_COPY_VALUE(result, array_ptr);
21383
21385
if (IS_VAR != IS_TMP_VAR) {
21384
21386
Z_ADDREF_P(array_ptr);
21385
21387
}
21388
+
21389
+ if (zend_hash_num_elements(properties) == 0) {
21390
+ Z_FE_ITER_P(result) = (uint32_t) -1;
21391
+ zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
21392
+ ZEND_VM_JMP(OP_JMP_ADDR(opline, opline->op2));
21393
+ }
21394
+
21386
21395
Z_FE_ITER_P(result) = zend_hash_iterator_add(properties, 0);
21387
21396
zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
21388
21397
ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
@@ -21400,7 +21409,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FE_RESET_R_SPEC_VAR_HANDLER(ZE
21400
21409
}
21401
21410
} else {
21402
21411
zend_error(E_WARNING, "foreach() argument must be of type array|object, %s given", zend_zval_type_name(array_ptr));
21403
- fe_reset_r_empty:
21404
21412
ZVAL_UNDEF(EX_VAR(opline->result.var));
21405
21413
Z_FE_ITER_P(EX_VAR(opline->result.var)) = (uint32_t)-1;
21406
21414
zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
@@ -21473,6 +21481,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FE_RESET_RW_SPEC_VAR_HANDLER(Z
21473
21481
properties = Z_OBJPROP_P(array_ptr);
21474
21482
if (zend_hash_num_elements(properties) == 0) {
21475
21483
Z_FE_ITER_P(EX_VAR(opline->result.var)) = (uint32_t) -1;
21484
+ zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
21476
21485
ZEND_VM_JMP(OP_JMP_ADDR(opline, opline->op2));
21477
21486
}
21478
21487
@@ -38086,15 +38095,18 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FE_RESET_R_SPEC_CV_HANDLER(ZEN
38086
38095
properties = zobj->handlers->get_properties(zobj);
38087
38096
}
38088
38097
38089
- if (zend_hash_num_elements(properties) == 0) {
38090
- goto fe_reset_r_empty;
38091
- }
38092
-
38093
38098
result = EX_VAR(opline->result.var);
38094
38099
ZVAL_COPY_VALUE(result, array_ptr);
38095
38100
if (IS_CV != IS_TMP_VAR) {
38096
38101
Z_ADDREF_P(array_ptr);
38097
38102
}
38103
+
38104
+ if (zend_hash_num_elements(properties) == 0) {
38105
+ Z_FE_ITER_P(result) = (uint32_t) -1;
38106
+
38107
+ ZEND_VM_JMP(OP_JMP_ADDR(opline, opline->op2));
38108
+ }
38109
+
38098
38110
Z_FE_ITER_P(result) = zend_hash_iterator_add(properties, 0);
38099
38111
38100
38112
ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
@@ -38111,7 +38123,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FE_RESET_R_SPEC_CV_HANDLER(ZEN
38111
38123
}
38112
38124
} else {
38113
38125
zend_error(E_WARNING, "foreach() argument must be of type array|object, %s given", zend_zval_type_name(array_ptr));
38114
- fe_reset_r_empty:
38115
38126
ZVAL_UNDEF(EX_VAR(opline->result.var));
38116
38127
Z_FE_ITER_P(EX_VAR(opline->result.var)) = (uint32_t)-1;
38117
38128
@@ -38184,6 +38195,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FE_RESET_RW_SPEC_CV_HANDLER(ZE
38184
38195
properties = Z_OBJPROP_P(array_ptr);
38185
38196
if (zend_hash_num_elements(properties) == 0) {
38186
38197
Z_FE_ITER_P(EX_VAR(opline->result.var)) = (uint32_t) -1;
38198
+
38187
38199
ZEND_VM_JMP(OP_JMP_ADDR(opline, opline->op2));
38188
38200
}
38189
38201
0 commit comments