From: Jason Greene Date: Tue, 30 Jul 2002 22:19:50 +0000 (+0000) Subject: MFZE1 global declare X-Git-Tag: dev~91 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=b0cf6c31122f31d9f4ac2c03263e1a2db6252dda;p=php MFZE1 global declare --- diff --git a/Zend/zend_compile.c b/Zend/zend_compile.c index e1cac9175e..99aa9709a7 100644 --- a/Zend/zend_compile.c +++ b/Zend/zend_compile.c @@ -2864,6 +2864,7 @@ void zend_do_foreach_end(znode *foreach_token, znode *open_brackets_token TSRMLS 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)); } @@ -2884,7 +2885,10 @@ void zend_do_declare_end(TSRMLS_D) 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; + } } diff --git a/Zend/zend_execute.c b/Zend/zend_execute.c index 3b1f98299a..573e2c384d 100644 --- a/Zend/zend_execute.c +++ b/Zend/zend_execute.c @@ -3108,7 +3108,7 @@ send_by_ref: 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); diff --git a/Zend/zend_globals.h b/Zend/zend_globals.h index fa9cde9cf1..969222e082 100644 --- a/Zend/zend_globals.h +++ b/Zend/zend_globals.h @@ -58,6 +58,7 @@ END_EXTERN_C() typedef struct _zend_declarables { zval ticks; + zend_uint beginop; } zend_declarables;