void zend_do_declare_begin(TSRMLS_D)
{
zend_stack_push(&CG(declare_stack), &CG(declarables), sizeof(zend_declarables));
+ CG(declarables).beginop = get_next_op_number(CG(active_op_array));
}
zend_declarables *declarables;
zend_stack_top(&CG(declare_stack), (void **) &declarables);
- CG(declarables) = *declarables;
+ /* We should restore if there was more than (current - start) - (ticks?1:0) opcodes */
+ if ((get_next_op_number(CG(active_op_array)) - CG(declarables).beginop) - ((CG(declarables).ticks.value.lval)?1:0)) {
+ CG(declarables) = *declarables;
+ }
}
do_bind_function_or_class(EX(opline), EG(function_table), EG(class_table), 0);
NEXT_OPCODE();
case ZEND_TICKS:
- if (++EG(ticks_count)==EX(opline)->op1.u.constant.value.lval) {
+ if (++EG(ticks_count)>=EX(opline)->op1.u.constant.value.lval) {
EG(ticks_count)=0;
if (zend_ticks_function) {
zend_ticks_function(EX(opline)->op1.u.constant.value.lval);