Skip to content

Commit 71092b7

Browse files
committed
Make FE_FETCH and following assignments to be a part of a loop.
1 parent 86a96f2 commit 71092b7

File tree

3 files changed

+2
-18
lines changed

3 files changed

+2
-18
lines changed

Zend/zend_compile.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3952,6 +3952,8 @@ void zend_compile_foreach(zend_ast *ast) /* {{{ */
39523952
opnum_reset = get_next_op_number(CG(active_op_array));
39533953
opline = zend_emit_op(&reset_node, by_ref ? ZEND_FE_RESET_RW : ZEND_FE_RESET_R, &expr_node, NULL);
39543954

3955+
zend_begin_loop(ZEND_FE_FREE, &reset_node);
3956+
39553957
opnum_fetch = get_next_op_number(CG(active_op_array));
39563958
opline = zend_emit_op(NULL, by_ref ? ZEND_FE_FETCH_RW : ZEND_FE_FETCH_R, &reset_node, NULL);
39573959

@@ -3975,8 +3977,6 @@ void zend_compile_foreach(zend_ast *ast) /* {{{ */
39753977
zend_emit_assign_znode(key_ast, &key_node);
39763978
}
39773979

3978-
zend_begin_loop(ZEND_FE_FREE, &reset_node);
3979-
39803980
zend_compile_stmt(stmt_ast);
39813981

39823982
zend_emit_jump(opnum_fetch);

Zend/zend_vm_def.h

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -6221,21 +6221,18 @@ ZEND_VM_HANDLER(78, ZEND_FE_FETCH_R, VAR, ANY, JMP_ADDR)
62216221
* In case that ever happens we need an additional flag. */
62226222
iter->funcs->move_forward(iter);
62236223
if (UNEXPECTED(EG(exception) != NULL)) {
6224-
zval_ptr_dtor(array);
62256224
HANDLE_EXCEPTION();
62266225
}
62276226
if (UNEXPECTED(iter->funcs->valid(iter) == FAILURE)) {
62286227
/* reached end of iteration */
62296228
if (UNEXPECTED(EG(exception) != NULL)) {
6230-
zval_ptr_dtor(array);
62316229
HANDLE_EXCEPTION();
62326230
}
62336231
ZEND_VM_C_GOTO(fe_fetch_r_exit);
62346232
}
62356233
}
62366234
value = iter->funcs->get_current_data(iter);
62376235
if (UNEXPECTED(EG(exception) != NULL)) {
6238-
zval_ptr_dtor(array);
62396236
HANDLE_EXCEPTION();
62406237
}
62416238
if (!value) {
@@ -6246,7 +6243,6 @@ ZEND_VM_HANDLER(78, ZEND_FE_FETCH_R, VAR, ANY, JMP_ADDR)
62466243
if (iter->funcs->get_current_key) {
62476244
iter->funcs->get_current_key(iter, EX_VAR(opline->result.var));
62486245
if (UNEXPECTED(EG(exception) != NULL)) {
6249-
zval_ptr_dtor(array);
62506246
HANDLE_EXCEPTION();
62516247
}
62526248
} else {
@@ -6413,21 +6409,18 @@ ZEND_VM_HANDLER(126, ZEND_FE_FETCH_RW, VAR, ANY, JMP_ADDR)
64136409
* In case that ever happens we need an additional flag. */
64146410
iter->funcs->move_forward(iter);
64156411
if (UNEXPECTED(EG(exception) != NULL)) {
6416-
zval_ptr_dtor(array);
64176412
HANDLE_EXCEPTION();
64186413
}
64196414
if (UNEXPECTED(iter->funcs->valid(iter) == FAILURE)) {
64206415
/* reached end of iteration */
64216416
if (UNEXPECTED(EG(exception) != NULL)) {
6422-
zval_ptr_dtor(array);
64236417
HANDLE_EXCEPTION();
64246418
}
64256419
ZEND_VM_C_GOTO(fe_fetch_w_exit);
64266420
}
64276421
}
64286422
value = iter->funcs->get_current_data(iter);
64296423
if (UNEXPECTED(EG(exception) != NULL)) {
6430-
zval_ptr_dtor(array);
64316424
HANDLE_EXCEPTION();
64326425
}
64336426
if (!value) {
@@ -6438,7 +6431,6 @@ ZEND_VM_HANDLER(126, ZEND_FE_FETCH_RW, VAR, ANY, JMP_ADDR)
64386431
if (iter->funcs->get_current_key) {
64396432
iter->funcs->get_current_key(iter, EX_VAR(opline->result.var));
64406433
if (UNEXPECTED(EG(exception) != NULL)) {
6441-
zval_ptr_dtor(array);
64426434
HANDLE_EXCEPTION();
64436435
}
64446436
} else {

Zend/zend_vm_execute.h

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -15771,21 +15771,18 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FE_FETCH_R_SPEC_VAR_HANDLER(ZE
1577115771
* In case that ever happens we need an additional flag. */
1577215772
iter->funcs->move_forward(iter);
1577315773
if (UNEXPECTED(EG(exception) != NULL)) {
15774-
zval_ptr_dtor(array);
1577515774
HANDLE_EXCEPTION();
1577615775
}
1577715776
if (UNEXPECTED(iter->funcs->valid(iter) == FAILURE)) {
1577815777
/* reached end of iteration */
1577915778
if (UNEXPECTED(EG(exception) != NULL)) {
15780-
zval_ptr_dtor(array);
1578115779
HANDLE_EXCEPTION();
1578215780
}
1578315781
goto fe_fetch_r_exit;
1578415782
}
1578515783
}
1578615784
value = iter->funcs->get_current_data(iter);
1578715785
if (UNEXPECTED(EG(exception) != NULL)) {
15788-
zval_ptr_dtor(array);
1578915786
HANDLE_EXCEPTION();
1579015787
}
1579115788
if (!value) {
@@ -15796,7 +15793,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FE_FETCH_R_SPEC_VAR_HANDLER(ZE
1579615793
if (iter->funcs->get_current_key) {
1579715794
iter->funcs->get_current_key(iter, EX_VAR(opline->result.var));
1579815795
if (UNEXPECTED(EG(exception) != NULL)) {
15799-
zval_ptr_dtor(array);
1580015796
HANDLE_EXCEPTION();
1580115797
}
1580215798
} else {
@@ -15963,21 +15959,18 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FE_FETCH_RW_SPEC_VAR_HANDLER(Z
1596315959
* In case that ever happens we need an additional flag. */
1596415960
iter->funcs->move_forward(iter);
1596515961
if (UNEXPECTED(EG(exception) != NULL)) {
15966-
zval_ptr_dtor(array);
1596715962
HANDLE_EXCEPTION();
1596815963
}
1596915964
if (UNEXPECTED(iter->funcs->valid(iter) == FAILURE)) {
1597015965
/* reached end of iteration */
1597115966
if (UNEXPECTED(EG(exception) != NULL)) {
15972-
zval_ptr_dtor(array);
1597315967
HANDLE_EXCEPTION();
1597415968
}
1597515969
goto fe_fetch_w_exit;
1597615970
}
1597715971
}
1597815972
value = iter->funcs->get_current_data(iter);
1597915973
if (UNEXPECTED(EG(exception) != NULL)) {
15980-
zval_ptr_dtor(array);
1598115974
HANDLE_EXCEPTION();
1598215975
}
1598315976
if (!value) {
@@ -15988,7 +15981,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FE_FETCH_RW_SPEC_VAR_HANDLER(Z
1598815981
if (iter->funcs->get_current_key) {
1598915982
iter->funcs->get_current_key(iter, EX_VAR(opline->result.var));
1599015983
if (UNEXPECTED(EG(exception) != NULL)) {
15991-
zval_ptr_dtor(array);
1599215984
HANDLE_EXCEPTION();
1599315985
}
1599415986
} else {

0 commit comments

Comments
 (0)