Improve fix for #76046

Also locate the JMP at the start of the foreach.

Patch suggested by Derick.
This commit is contained in:
Nikita Popov 2018-11-27 19:43:25 +01:00
parent d6595f276f
commit b565c85b9e

View File

@ -4797,6 +4797,10 @@ void zend_compile_foreach(zend_ast *ast) /* {{{ */
zend_compile_stmt(stmt_ast); zend_compile_stmt(stmt_ast);
/* Place JMP and FE_FREE on the line where foreach starts. It would be
* better to use the end line, but this information is not available
* currently. */
CG(zend_lineno) = ast->lineno;
zend_emit_jump(opnum_fetch); zend_emit_jump(opnum_fetch);
opline = &CG(active_op_array)->opcodes[opnum_reset]; opline = &CG(active_op_array)->opcodes[opnum_reset];
@ -4807,7 +4811,6 @@ void zend_compile_foreach(zend_ast *ast) /* {{{ */
zend_end_loop(opnum_fetch, &reset_node); zend_end_loop(opnum_fetch, &reset_node);
CG(zend_lineno) = ast->lineno;
opline = zend_emit_op(NULL, ZEND_FE_FREE, &reset_node, NULL); opline = zend_emit_op(NULL, ZEND_FE_FREE, &reset_node, NULL);
} }
/* }}} */ /* }}} */