]> granicus.if.org Git - php/commitdiff
- Fix bug #3073. continue in do..while() loops should work now
authorAndi Gutmans <andi@php.net>
Fri, 31 Dec 1999 12:56:48 +0000 (12:56 +0000)
committerAndi Gutmans <andi@php.net>
Fri, 31 Dec 1999 12:56:48 +0000 (12:56 +0000)
Zend/ZendTS.dsp
Zend/zend-parser.y
Zend/zend_compile.c
Zend/zend_compile.h

index 1cdc46ffdeb719cd6037c8bd55a76da48646b009..48d7be8b4b35b22e89c32b5bbd8b1155764a240e 100644 (file)
@@ -230,6 +230,10 @@ SOURCE=.\zend_extensions.h
 # End Source File\r
 # Begin Source File\r
 \r
+SOURCE=.\zend_fast_cache.h\r
+# End Source File\r
+# Begin Source File\r
+\r
 SOURCE=.\zend_globals.h\r
 # End Source File\r
 # Begin Source File\r
@@ -272,10 +276,6 @@ SOURCE=.\zend_stack.h
 \r
 SOURCE=.\zend_variables.h\r
 # End Source File\r
-# Begin Source File\r
-\r
-SOURCE=.\zend_fast_cache.h\r
-# End Source File\r
 # End Group\r
 # Begin Group "Parsers"\r
 \r
index 9131c23b9eb117fde5fd646a42dccb143b65f8f7..378ab4f276731d0777e7f26cae2b07984bc92223 100644 (file)
@@ -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
index 91afbc80c3a13d35aaa62dff1f505221b44be709..45e6c5372e5aade93d2923845853c57e8eeb6d7d 100644 (file)
@@ -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));
 }
index d3dfb5dc79a7c64b62c7070f2b9334713f00b072..84d9556883831a2e6122757135adbb49982c3afb 100644 (file)
@@ -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);