diff options
author | Andi Gutmans <andi@php.net> | 1999-12-31 12:56:48 +0000 |
---|---|---|
committer | Andi Gutmans <andi@php.net> | 1999-12-31 12:56:48 +0000 |
commit | 400ee6caa0353d8b32797dad345be6da1dd07e2f (patch) | |
tree | 682c6b6c76f25eb56129d46aed0e5ef2659461fb | |
parent | a95547478a8f223f475d7c50dda4ba219377bf32 (diff) | |
download | php-git-400ee6caa0353d8b32797dad345be6da1dd07e2f.tar.gz |
- Fix bug #3073. continue in do..while() loops should work now
-rw-r--r-- | Zend/ZendTS.dsp | 8 | ||||
-rw-r--r-- | Zend/zend-parser.y | 2 | ||||
-rw-r--r-- | Zend/zend_compile.c | 4 | ||||
-rw-r--r-- | Zend/zend_compile.h | 2 |
4 files changed, 8 insertions, 8 deletions
diff --git a/Zend/ZendTS.dsp b/Zend/ZendTS.dsp index 1cdc46ffde..48d7be8b4b 100644 --- a/Zend/ZendTS.dsp +++ b/Zend/ZendTS.dsp @@ -230,6 +230,10 @@ SOURCE=.\zend_extensions.h # End Source File
# Begin Source File
+SOURCE=.\zend_fast_cache.h
+# End Source File
+# Begin Source File
+
SOURCE=.\zend_globals.h
# End Source File
# Begin Source File
@@ -272,10 +276,6 @@ SOURCE=.\zend_stack.h SOURCE=.\zend_variables.h
# End Source File
-# Begin Source File
-
-SOURCE=.\zend_fast_cache.h
-# End Source File
# End Group
# Begin Group "Parsers"
diff --git a/Zend/zend-parser.y b/Zend/zend-parser.y index 9131c23b9e..378ab4f276 100644 --- a/Zend/zend-parser.y +++ b/Zend/zend-parser.y @@ -164,7 +164,7 @@ statement: | T_IF '(' expr ')' { do_if_cond(&$3, &$4 CLS_CC); } statement { do_if_after_statement(&$4, 1 CLS_CC); } elseif_list else_single { do_if_end(CLS_C); } | T_IF '(' expr ')' ':' { do_if_cond(&$3, &$4 CLS_CC); } inner_statement_list { do_if_after_statement(&$4, 1 CLS_CC); } new_elseif_list new_else_single T_ENDIF ';' { do_if_end(CLS_C); } | T_WHILE '(' { $1.u.opline_num = get_next_op_number(CG(active_op_array)); } expr ')' { do_while_cond(&$4, &$5 CLS_CC); } while_statement { do_while_end(&$1, &$5 CLS_CC); } - | T_DO { $1.u.opline_num = get_next_op_number(CG(active_op_array)); do_do_while_begin(CLS_C); } statement T_WHILE '(' expr ')' ';' { do_do_while_end(&$1, &$6 CLS_CC); } + | T_DO { $1.u.opline_num = get_next_op_number(CG(active_op_array)); do_do_while_begin(CLS_C); } statement T_WHILE '(' { $5.u.opline_num = get_next_op_number(CG(active_op_array)); } expr ')' ';' { do_do_while_end(&$1, &$5, &$7 CLS_CC); } | T_FOR '(' for_expr diff --git a/Zend/zend_compile.c b/Zend/zend_compile.c index 91afbc80c3..45e6c5372e 100644 --- a/Zend/zend_compile.c +++ b/Zend/zend_compile.c @@ -1220,7 +1220,7 @@ void do_do_while_begin(CLS_D) } -void do_do_while_end(znode *do_token, znode *expr CLS_DC) +void do_do_while_end(znode *do_token, znode *expr_open_bracket, znode *expr CLS_DC) { zend_op *opline = get_next_op(CG(active_op_array) CLS_CC); @@ -1229,7 +1229,7 @@ void do_do_while_end(znode *do_token, znode *expr CLS_DC) opline->op2.u.opline_num = do_token->u.opline_num; SET_UNUSED(opline->op2); - do_end_loop(do_token->u.opline_num CLS_CC); + do_end_loop(expr_open_bracket->u.opline_num CLS_CC); DEC_BPC(CG(active_op_array)); } diff --git a/Zend/zend_compile.h b/Zend/zend_compile.h index d3dfb5dc79..84d9556883 100644 --- a/Zend/zend_compile.h +++ b/Zend/zend_compile.h @@ -237,7 +237,7 @@ ZEND_API void *get_binary_op(int opcode); void do_while_cond(znode *expr, znode *close_bracket_token CLS_DC); void do_while_end(znode *while_token, znode *close_bracket_token CLS_DC); void do_do_while_begin(CLS_D); -void do_do_while_end(znode *do_token, znode *expr CLS_DC); +void do_do_while_end(znode *do_token, znode *expr_open_bracket, znode *expr CLS_DC); void do_if_cond(znode *cond, znode *closing_bracket_token CLS_DC); |