@@ -4805,15 +4805,18 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FE_RESET_R_SPEC_CONST_HANDLER(
48054805 properties = zobj->handlers->get_properties(zobj);
48064806 }
48074807
4808- if (zend_hash_num_elements(properties) == 0) {
4809- goto fe_reset_r_empty;
4810- }
4811-
48124808 result = EX_VAR(opline->result.var);
48134809 ZVAL_COPY_VALUE(result, array_ptr);
48144810 if (IS_CONST != IS_TMP_VAR) {
48154811 Z_ADDREF_P(array_ptr);
48164812 }
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+
48174820 Z_FE_ITER_P(result) = zend_hash_iterator_add(properties, 0);
48184821
48194822 ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
@@ -4830,7 +4833,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FE_RESET_R_SPEC_CONST_HANDLER(
48304833 }
48314834 } else {
48324835 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:
48344836 ZVAL_UNDEF(EX_VAR(opline->result.var));
48354837 Z_FE_ITER_P(EX_VAR(opline->result.var)) = (uint32_t)-1;
48364838
@@ -4903,6 +4905,7 @@ static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FE_RESET_RW_SPEC_
49034905 properties = Z_OBJPROP_P(array_ptr);
49044906 if (zend_hash_num_elements(properties) == 0) {
49054907 Z_FE_ITER_P(EX_VAR(opline->result.var)) = (uint32_t) -1;
4908+
49064909 ZEND_VM_JMP(OP_JMP_ADDR(opline, opline->op2));
49074910 }
49084911
@@ -18812,15 +18815,18 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FE_RESET_R_SPEC_TMP_HANDLER(ZE
1881218815 properties = zobj->handlers->get_properties(zobj);
1881318816 }
1881418817
18815- if (zend_hash_num_elements(properties) == 0) {
18816- goto fe_reset_r_empty;
18817- }
18818-
1881918818 result = EX_VAR(opline->result.var);
1882018819 ZVAL_COPY_VALUE(result, array_ptr);
1882118820 if (IS_TMP_VAR != IS_TMP_VAR) {
1882218821 Z_ADDREF_P(array_ptr);
1882318822 }
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+
1882418830 Z_FE_ITER_P(result) = zend_hash_iterator_add(properties, 0);
1882518831
1882618832 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
1883818844 }
1883918845 } else {
1884018846 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:
1884218847 ZVAL_UNDEF(EX_VAR(opline->result.var));
1884318848 Z_FE_ITER_P(EX_VAR(opline->result.var)) = (uint32_t)-1;
1884418849 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
1891118916 properties = Z_OBJPROP_P(array_ptr);
1891218917 if (zend_hash_num_elements(properties) == 0) {
1891318918 Z_FE_ITER_P(EX_VAR(opline->result.var)) = (uint32_t) -1;
18919+
1891418920 ZEND_VM_JMP(OP_JMP_ADDR(opline, opline->op2));
1891518921 }
1891618922
@@ -21374,15 +21380,18 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FE_RESET_R_SPEC_VAR_HANDLER(ZE
2137421380 properties = zobj->handlers->get_properties(zobj);
2137521381 }
2137621382
21377- if (zend_hash_num_elements(properties) == 0) {
21378- goto fe_reset_r_empty;
21379- }
21380-
2138121383 result = EX_VAR(opline->result.var);
2138221384 ZVAL_COPY_VALUE(result, array_ptr);
2138321385 if (IS_VAR != IS_TMP_VAR) {
2138421386 Z_ADDREF_P(array_ptr);
2138521387 }
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+
2138621395 Z_FE_ITER_P(result) = zend_hash_iterator_add(properties, 0);
2138721396 zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
2138821397 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
2140021409 }
2140121410 } else {
2140221411 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:
2140421412 ZVAL_UNDEF(EX_VAR(opline->result.var));
2140521413 Z_FE_ITER_P(EX_VAR(opline->result.var)) = (uint32_t)-1;
2140621414 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
2147321481 properties = Z_OBJPROP_P(array_ptr);
2147421482 if (zend_hash_num_elements(properties) == 0) {
2147521483 Z_FE_ITER_P(EX_VAR(opline->result.var)) = (uint32_t) -1;
21484+ zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
2147621485 ZEND_VM_JMP(OP_JMP_ADDR(opline, opline->op2));
2147721486 }
2147821487
@@ -38086,15 +38095,18 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FE_RESET_R_SPEC_CV_HANDLER(ZEN
3808638095 properties = zobj->handlers->get_properties(zobj);
3808738096 }
3808838097
38089- if (zend_hash_num_elements(properties) == 0) {
38090- goto fe_reset_r_empty;
38091- }
38092-
3809338098 result = EX_VAR(opline->result.var);
3809438099 ZVAL_COPY_VALUE(result, array_ptr);
3809538100 if (IS_CV != IS_TMP_VAR) {
3809638101 Z_ADDREF_P(array_ptr);
3809738102 }
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+
3809838110 Z_FE_ITER_P(result) = zend_hash_iterator_add(properties, 0);
3809938111
3810038112 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
3811138123 }
3811238124 } else {
3811338125 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:
3811538126 ZVAL_UNDEF(EX_VAR(opline->result.var));
3811638127 Z_FE_ITER_P(EX_VAR(opline->result.var)) = (uint32_t)-1;
3811738128
@@ -38184,6 +38195,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FE_RESET_RW_SPEC_CV_HANDLER(ZE
3818438195 properties = Z_OBJPROP_P(array_ptr);
3818538196 if (zend_hash_num_elements(properties) == 0) {
3818638197 Z_FE_ITER_P(EX_VAR(opline->result.var)) = (uint32_t) -1;
38198+
3818738199 ZEND_VM_JMP(OP_JMP_ADDR(opline, opline->op2));
3818838200 }
3818938201
0 commit comments