summaryrefslogtreecommitdiff
path: root/Zend/zend_execute.c
diff options
context:
space:
mode:
authorRasmus Lerdorf <rasmus@lerdorf.com>2015-01-30 22:57:40 -0800
committerRasmus Lerdorf <rasmus@lerdorf.com>2015-01-30 22:57:40 -0800
commit74b85316ea06c17256e102483daa472f4b638221 (patch)
treeabe0618e15fcfc93158b4239889485ffc70c4c1c /Zend/zend_execute.c
parent130d7320b160443ca160ee6b3a19a034ee2c5ef1 (diff)
parent1e41295097576dbce6c197ddb7507c07ccae3cbe (diff)
downloadphp-git-dstogov-foreach.tar.gz
Merge branch 'foreach' of https://github.com/dstogov/php-src into dstogov-foreachdstogov-foreach
Diffstat (limited to 'Zend/zend_execute.c')
-rw-r--r--Zend/zend_execute.c8
1 files changed, 8 insertions, 0 deletions
diff --git a/Zend/zend_execute.c b/Zend/zend_execute.c
index 7a79defb05..1a81c298a8 100644
--- a/Zend/zend_execute.c
+++ b/Zend/zend_execute.c
@@ -1584,6 +1584,14 @@ static inline zend_brk_cont_element* zend_brk_cont(int nest_levels, int array_of
if (!(brk_opline->extended_value & EXT_TYPE_FREE_ON_RETURN)) {
zval_ptr_dtor_nogc(EX_VAR(brk_opline->op1.var));
}
+ } else if (brk_opline->opcode == ZEND_FE_FREE) {
+ if (!(brk_opline->extended_value & EXT_TYPE_FREE_ON_RETURN)) {
+ zval *var = EX_VAR(brk_opline->op1.var);
+ if (Z_TYPE_P(var) != IS_ARRAY && Z_FE_ITER_P(var) != (uint32_t)-1) {
+ zend_hash_iterator_del(Z_FE_ITER_P(var));
+ }
+ zval_ptr_dtor_nogc(var);
+ }
}
}
array_offset = jmp_to->parent;