* and allows its reuse. The number of ZEND_CASE instructions
* usually terminated by ZEND_FREE that finally kills the value.
*/
- if (opline->opcode == ZEND_CASE) {
+ if (opline->opcode == ZEND_CASE || opline->opcode == ZEND_FREE) {
zend_op *m, *n;
int brk = op_array->last_brk_cont;
+ zend_bool in_case = 0;
while (brk--) {
if (op_array->brk_cont_array[brk].start <= (opline - op_array->opcodes) &&
op_array->brk_cont_array[brk].brk > (opline - op_array->opcodes)) {
+ in_case = 1;
break;
}
}
+
+ if (!in_case) {
+ MAKE_NOP(opline);
+ zval_dtor(val);
+ break;
+ }
+
m = opline;
n = op_array->opcodes + op_array->brk_cont_array[brk].brk + 1;
while (m < n) {
}
zval_dtor(val);
break;
- } else if (opline->opcode == ZEND_FREE) {
- MAKE_NOP(opline);
- zval_dtor(val);
- break;
} else {
update_op1_const(op_array, opline, val TSRMLS_CC);
break;