felipe                                   Mon, 19 Jul 2010 22:46:45 +0000

Revision: http://svn.php.net/viewvc?view=revision&revision=301406

Log:
- Fixed wrong lineno by fixing the rules

Changed paths:
    U   php/php-src/branches/LEMON/Zend/zend_compile.c
    U   php/php-src/branches/LEMON/Zend/zend_language_parser.y

Modified: php/php-src/branches/LEMON/Zend/zend_compile.c
===================================================================
--- php/php-src/branches/LEMON/Zend/zend_compile.c	2010-07-19 20:22:39 UTC (rev 301405)
+++ php/php-src/branches/LEMON/Zend/zend_compile.c	2010-07-19 22:46:45 UTC (rev 301406)
@@ -6111,7 +6111,7 @@

 int zendparse(TSRMLS_D) /* {{{ */
 {
-	int token, lineno = 0, halting = 0, old_exit_status;
+	int token, halting = 0, old_exit_status;
 	void *pParser;

 	if ((pParser = zend_lang_parseAlloc(_emalloc)) == NULL) {
@@ -6121,7 +6121,6 @@

 	old_exit_status = EG(exit_status);
 	EG(exit_status) = 0;
-	lineno = CG(zend_lineno);

 	while (1) {
 		znode zendlval;
@@ -6132,13 +6131,12 @@
 		if (CG(increment_lineno)) {
 			CG(zend_lineno)++;
 			CG(increment_lineno) = 0;
-			lineno = CG(zend_lineno);
 		}
 again:
 		Z_TYPE(zendlval.u.constant) = IS_LONG;

 		/* Call the scanner */
-		token = lex_scan(&zendlval.u.constant, &lineno TSRMLS_CC);
+		token = lex_scan(&zendlval.u.constant, &CG(zend_lineno) TSRMLS_CC);

 		switch (token) {
 			case T_COMMENT:
@@ -6167,7 +6165,6 @@
 				break;
 		}
 		zend_lang_parse(pParser, token, zendlval TSRMLS_CC);
-		CG(zend_lineno) = lineno;

 		if (token == 0 || EG(exit_status) == 255) {
 			break;

Modified: php/php-src/branches/LEMON/Zend/zend_language_parser.y
===================================================================
--- php/php-src/branches/LEMON/Zend/zend_language_parser.y	2010-07-19 20:22:39 UTC (rev 301405)
+++ php/php-src/branches/LEMON/Zend/zend_language_parser.y	2010-07-19 22:46:45 UTC (rev 301406)
@@ -79,6 +79,10 @@
 %type new_ii {znode_array}
 %type foreach_i {znode_array}
 %type foreach_ii {znode_array}
+%type foreach_i_ns {znode_array}
+%type foreach_ii_ns {znode_array}
+%type foreach2_i_ns {znode_array}
+%type foreach2_ii_ns {znode_array}
 %type foreach2_i {znode_array}
 %type foreach2_ii {znode_array}
 %type bool_or_expr_i {znode_array}
@@ -91,14 +95,18 @@
 %type closure_ii {znode_array}
 %type try_catch_iv {znode_array}
 %type try_catch_iii {znode_array}
+%type try_catch_iv_ns {znode_array}
+%type try_catch_iii_ns {znode_array}
 %type isset_variables_i {znode_array}
 %type unticked_class_declaration_statement_i {znode_array}
 %type unticked_class_declaration_statement_ii {znode_array}
 %type while_cond {znode_array}
+%type while_cond_ns {znode_array}
 %type do_statement {znode_array}
+%type do_statement_ns {znode_array}
 %type for_cont {znode_array}
+%type for_cont_ns {znode_array}

-
 /* Precedences */
 %left INCLUDE INCLUDE_ONCE EVAL REQUIRE REQUIRE_ONCE.
 %left COMMA.
@@ -147,18 +155,21 @@
 namespace_name(A) ::= STRING(B). { A = B; }
 namespace_name(A) ::= namespace_name(B) NS_SEPARATOR STRING(C). { zend_do_build_namespace_name(&A, &B, &C TSRMLS_CC); }

-namespace_start ::= NAMESPACE. { zend_do_begin_namespace(NULL, 1 TSRMLS_CC); }
+namespace_start_i ::= NAMESPACE. { zend_do_begin_namespace(NULL, 1 TSRMLS_CC); }
+namespace_start   ::= namespace_start_i LBRACE.

-namespace_start2 ::= NAMESPACE namespace_name(B). { zend_do_begin_namespace(&B, 1 TSRMLS_CC); }
+namespace_start2_i ::= NAMESPACE namespace_name(B). { zend_do_begin_namespace(&B, 1 TSRMLS_CC); }
+namespace_start2   ::= namespace_start2_i LBRACE.

-top_statement ::= SEMICOLON.                                 { ZEND_DO_TICKS(); }
-top_statement ::= statement.                                 { ZEND_VERIFY_NS(); }
+namespace_start3 ::= NAMESPACE namespace_name(B). { zend_do_begin_namespace(&B, 0 TSRMLS_CC); }
+
+top_statement ::= statement_ns.
 top_statement ::= function_declaration_statement.            { ZEND_VERIFY_NS(); zend_do_early_binding(TSRMLS_C); }
-top_statement ::= class_declaration_statement.               { ZEND_VERIFY_NS(); zend_do_early_binding(TSRMLS_C); }
+top_statement ::= class_declaration_statement_ns.
 top_statement ::= HALT_COMPILER LPAREN RPAREN SEMICOLON.     { zend_do_halt_compiler_register(TSRMLS_C); }
-top_statement ::= NAMESPACE namespace_name(B) SEMICOLON.     { zend_do_begin_namespace(&B, 0 TSRMLS_CC); }
-top_statement ::= namespace_start2 LBRACE top_statement_list RBRACE. { zend_do_end_namespace(TSRMLS_C); }
-top_statement ::= namespace_start  LBRACE top_statement_list RBRACE.   { zend_do_end_namespace(TSRMLS_C); }
+top_statement ::= namespace_start3 SEMICOLON.
+top_statement ::= namespace_start2 top_statement_list RBRACE. { zend_do_end_namespace(TSRMLS_C); }
+top_statement ::= namespace_start top_statement_list RBRACE.  { zend_do_end_namespace(TSRMLS_C); }
 top_statement ::= USE use_declarations SEMICOLON.            { ZEND_VERIFY_NS(); }
 top_statement ::= constant_declaration SEMICOLON.            { ZEND_VERIFY_NS(); }

@@ -189,8 +200,9 @@
 statement ::= unticked_statement.  { ZEND_DO_TICKS(); }
 statement ::= STRING(B) COLON.     { zend_do_label(&B TSRMLS_CC); }

+statement_ns ::= unticked_statement_ns. { ZEND_DO_TICKS(); }
+statement_ns ::= STRING(B) COLON.       { ZEND_VERIFY_NS(); zend_do_label(&B TSRMLS_CC); }

-
 elseif_list_i(A) ::= elseif_list ELSEIF LPAREN expr(B) RPAREN(C). { zend_do_if_cond(&B, &C TSRMLS_CC); A = C; }

 elseif_list ::= .
@@ -204,6 +216,10 @@

 if ::= if_cond_then elseif_list else. { zend_do_if_end(TSRMLS_C); }

+if_cond_ns(A)   ::= IF LPAREN expr(B) RPAREN(C).   { ZEND_VERIFY_NS(); zend_do_if_cond(&B, &C TSRMLS_CC); A = C; }
+if_cond_then_ns ::= if_cond_ns(B) statement.       { zend_do_if_after_statement(&B, 1 TSRMLS_CC); }
+if_ns           ::= if_cond_then_ns elseif_list else. { zend_do_if_end(TSRMLS_C); }
+
 elseif_alt_list_i(A) ::= elseif_alt_list ELSEIF LPAREN expr(B) RPAREN(C) COLON. { zend_do_if_cond(&B, &C TSRMLS_CC); A = C; }

 elseif_alt_list ::= .
@@ -214,9 +230,12 @@

 if_alt_cond(A)   ::= IF LPAREN expr(B) RPAREN(C) COLON.   { zend_do_if_cond(&B, &C TSRMLS_CC); A = C; }
 if_alt_cond_then ::= if_alt_cond(B) inner_statement_list. { zend_do_if_after_statement(&B, 1 TSRMLS_CC); }
-
 if_alt ::= if_alt_cond_then elseif_alt_list else_alt ENDIF SEMICOLON. { zend_do_if_end(TSRMLS_C); }

+if_alt_cond_ns(A)   ::= IF LPAREN expr(B) RPAREN(C) COLON.   { ZEND_VERIFY_NS(); zend_do_if_cond(&B, &C TSRMLS_CC); A = C; }
+if_alt_cond_then_ns ::= if_alt_cond_ns(B) inner_statement_list. { zend_do_if_after_statement(&B, 1 TSRMLS_CC); }
+if_alt_ns ::= if_alt_cond_then_ns elseif_alt_list else_alt ENDIF SEMICOLON. { zend_do_if_end(TSRMLS_C); }
+
 while_statement ::= statement.
 while_statement ::= COLON inner_statement_list ENDWHILE SEMICOLON.

@@ -224,11 +243,19 @@
 while_cond(A)  ::= while_begin(B)  expr(C) RPAREN(D). { zend_do_while_cond(&C, &D TSRMLS_CC); A[0] = B; A[1] = D; }
 while          ::= while_cond(B) while_statement.     { zend_do_while_end(&B[0], &B[1] TSRMLS_CC); }

+while_begin_ns(A) ::= WHILE(B) LPAREN.                   { ZEND_VERIFY_NS(); B.u.op.opline_num = get_next_op_number(CG(active_op_array)); A = B; }
+while_cond_ns(A)  ::= while_begin_ns(B)  expr(C) RPAREN(D). { zend_do_while_cond(&C, &D TSRMLS_CC); A[0] = B; A[1] = D; }
+while_ns          ::= while_cond_ns(B) while_statement.     { zend_do_while_end(&B[0], &B[1] TSRMLS_CC); }

+
 do_start(A)     ::= DO. { A.u.op.opline_num = get_next_op_number(CG(active_op_array));  zend_do_do_while_begin(TSRMLS_C); }
 do_statement(A) ::= do_start(B) statement WHILE LPAREN(C). { C.u.op.opline_num = get_next_op_number(CG(active_op_array)); A[0] = B; A[1] = C; }
 do_while        ::= do_statement(B) expr(C) RPAREN SEMICOLON. { zend_do_do_while_end(&B[0], &B[1], &C TSRMLS_CC); }

+do_start_ns(A)     ::= DO. { ZEND_VERIFY_NS(); A.u.op.opline_num = get_next_op_number(CG(active_op_array));  zend_do_do_while_begin(TSRMLS_C); }
+do_statement_ns(A) ::= do_start_ns(B) statement WHILE LPAREN(C). { C.u.op.opline_num = get_next_op_number(CG(active_op_array)); A[0] = B; A[1] = C; }
+do_while_ns        ::= do_statement_ns(B) expr(C) RPAREN SEMICOLON. { zend_do_do_while_end(&B[0], &B[1], &C TSRMLS_CC); }
+
 for_expr(A) ::= .                      { A.op_type = IS_CONST;  Z_TYPE(A.u.constant) = IS_BOOL;  Z_LVAL(A.u.constant) = 1; }
 for_expr(A) ::= non_empty_for_expr(B). { A = B; }

@@ -245,6 +272,10 @@
 for_cont_2(A) ::= for_cont(B) for_expr(C) RPAREN. { zend_do_free(&C TSRMLS_CC); zend_do_for_before_statement(&B[0], &B[1] TSRMLS_CC); A = B[1]; }
 for           ::= for_cont_2(B) for_statement.             { zend_do_for_end(&B TSRMLS_CC); }

+for_begin_ns(A)  ::= FOR LPAREN for_expr(B) SEMICOLON(C). { zend_do_free(&B TSRMLS_CC); C.u.op.opline_num = get_next_op_number(CG(active_op_array)); A = C; }
+for_cont_ns(A)   ::= for_begin_ns(B) for_expr(C) SEMICOLON(D). { zend_do_extended_info(TSRMLS_C); zend_do_for_cond(&C, &D TSRMLS_CC); A[0] = B; A[1] = D; }
+for_cont_2_ns(A) ::= for_cont_ns(B) for_expr(C) RPAREN. { zend_do_free(&C TSRMLS_CC); zend_do_for_before_statement(&B[0], &B[1] TSRMLS_CC); A = B[1]; }
+for_ns           ::= for_cont_2_ns(B) for_statement.             { zend_do_for_end(&B TSRMLS_CC); }

 switch_case_list(A) ::= LBRACE case_list(B) RBRACE.                       { A = B; }
 switch_case_list(A) ::= LBRACE SEMICOLON case_list(B) RBRACE.             { A = B; }
@@ -261,9 +292,13 @@

 case_separator ::= COLON.
 case_separator ::= SEMICOLON.
+
 switch_i ::=  SWITCH LPAREN expr(B) RPAREN. { zend_do_switch_cond(&B TSRMLS_CC); }
 switch   ::= switch_i switch_case_list(B).  { zend_do_switch_end(&B TSRMLS_CC); }

+switch_i_ns ::=  SWITCH LPAREN expr(B) RPAREN.   { ZEND_VERIFY_NS(); zend_do_switch_cond(&B TSRMLS_CC); }
+switch_ns   ::= switch_i_ns switch_case_list(B). { zend_do_switch_end(&B TSRMLS_CC); }
+
 declare_statement ::= statement.
 declare_statement ::= COLON inner_statement_list ENDDECLARE SEMICOLON.

@@ -273,6 +308,8 @@
 declare_i(A) ::= DECLARE(B). { A.u.op.opline_num = get_next_op_number(CG(active_op_array)); zend_do_declare_begin(TSRMLS_C); A = B; }
 declare      ::= declare_i(B) LPAREN declare_list RPAREN declare_statement. { zend_do_declare_end(&B TSRMLS_CC); }

+declare_i_ns(A) ::= DECLARE(B). { ZEND_VERIFY_NS(); A.u.op.opline_num = get_next_op_number(CG(active_op_array)); zend_do_declare_begin(TSRMLS_C); A = B; }
+declare_ns      ::= declare_i_ns(B) LPAREN declare_list RPAREN declare_statement. { zend_do_declare_end(&B TSRMLS_CC); }

 foreach_optional_arg(A) ::= .                                 { A.op_type = IS_UNUSED; }
 foreach_optional_arg(A) ::= DOUBLE_ARROW foreach_variable(B). { A = B; }
@@ -287,10 +324,17 @@
 foreach_i(A)  ::= foreach_ii(B) foreach_variable(C) foreach_optional_arg(D) RPAREN. { zend_do_foreach_cont(&B[0], &B[1], &B[2], &C, &D TSRMLS_CC); A[0] = B[0]; A[1] = B[2]; }
 foreach       ::= foreach_i(B) foreach_statement. { zend_do_foreach_end(&B[0], &B[1] TSRMLS_CC); }

+foreach_ii_ns(A) ::= FOREACH(B) LPAREN(C) variable(D) AS(E). { ZEND_VERIFY_NS(); zend_do_foreach_begin(&B, &C, &D, &E, 1 TSRMLS_CC); A[0] = B; A[1] = C; A[2] = E; }
+foreach_i_ns(A)  ::= foreach_ii_ns(B) foreach_variable(C) foreach_optional_arg(D) RPAREN. { zend_do_foreach_cont(&B[0], &B[1], &B[2], &C, &D TSRMLS_CC); A[0] = B[0]; A[1] = B[2]; }
+foreach_ns       ::= foreach_i_ns(B) foreach_statement. { zend_do_foreach_end(&B[0], &B[1] TSRMLS_CC); }
+
 foreach2_ii(A) ::= FOREACH(B) LPAREN(C) expr_wo_var(D) AS(E). { zend_do_foreach_begin(&B, &C, &D, &E, 0 TSRMLS_CC); A[0] = B; A[1] = C; A[2] = E; }
 foreach2_i(A)  ::= foreach2_ii(B) variable(C) foreach_optional_arg(D) RPAREN. { zend_check_writable_variable(&C); zend_do_foreach_cont(&B[0], &B[1], &B[2], &C, &D TSRMLS_CC); A[0] = B[0]; A[1] = B[2]; }
 foreach2       ::= foreach2_i(B) foreach_statement. { zend_do_foreach_end(&B[0], &B[1] TSRMLS_CC); }

+foreach2_ii_ns(A) ::= FOREACH(B) LPAREN(C) expr_wo_var(D) AS(E). { ZEND_VERIFY_NS(); zend_do_foreach_begin(&B, &C, &D, &E, 0 TSRMLS_CC); A[0] = B; A[1] = C; A[2] = E; }
+foreach2_i_ns(A)  ::= foreach2_ii_ns(B) variable(C) foreach_optional_arg(D) RPAREN. { zend_check_writable_variable(&C); zend_do_foreach_cont(&B[0], &B[1], &B[2], &C, &D TSRMLS_CC); A[0] = B[0]; A[1] = B[2]; }
+foreach2_ns       ::= foreach2_i_ns(B) foreach_statement. { zend_do_foreach_end(&B[0], &B[1] TSRMLS_CC); }

 additional_catches(A) ::= . { A.u.op.opline_num = -1; }
 additional_catches(A) ::= non_empty_additional_catches(B). { A = B; }
@@ -301,6 +345,7 @@
 additional_catch_i(A)  ::= CATCH(B) LPAREN fully_qualified_class_name(C). { A[0] = B; A[1] = C; A[0].u.op.opline_num = get_next_op_number(CG(active_op_array)); }
 additional_catch_ii(A) ::= additional_catch_i(B) VARIABLE(C) RPAREN. { zend_do_begin_catch(&B[0], &B[1], &C, NULL TSRMLS_CC); A = B[0]; }
 additional_catch       ::= additional_catch_ii(B) LBRACE inner_statement_list RBRACE. { zend_do_end_catch(&B TSRMLS_CC); }
+
 try_catch_v(A)   ::= TRY(B). { zend_do_try(&B TSRMLS_CC); A = B; }
 try_catch_iv(A)  ::= try_catch_v(B) LBRACE inner_statement_list RBRACE CATCH LPAREN(C). { zend_initialize_try_catch_element(&B TSRMLS_CC); A[0] = B; A[1] = C; }
 try_catch_iii(A) ::= try_catch_iv(B) fully_qualified_class_name(C). { zend_do_first_catch(&B[1] TSRMLS_CC); A[0] = B[0]; A[1] = B[1]; A[2] = C; }
@@ -308,48 +353,126 @@
 try_catch_i(A)   ::= try_catch_ii(B) LBRACE inner_statement_list RBRACE. { zend_do_end_catch(&B TSRMLS_CC); A = B; }
 try_catch        ::= try_catch_i(B) additional_catches(C). { zend_do_mark_last_catch(&B, &C TSRMLS_CC); }

-unticked_statement ::= if.
-unticked_statement ::= if_alt.
-unticked_statement ::= switch.
-unticked_statement ::= do_while.
-unticked_statement ::= for.
-unticked_statement ::= while.
+try_catch_v_ns(A)   ::= TRY(B). { ZEND_VERIFY_NS(); zend_do_try(&B TSRMLS_CC); A = B; }
+try_catch_iv_ns(A)  ::= try_catch_v_ns(B) LBRACE inner_statement_list RBRACE CATCH LPAREN(C). { zend_initialize_try_catch_element(&B TSRMLS_CC); A[0] = B; A[1] = C; }
+try_catch_iii_ns(A) ::= try_catch_iv_ns(B) fully_qualified_class_name(C). { zend_do_first_catch(&B[1] TSRMLS_CC); A[0] = B[0]; A[1] = B[1]; A[2] = C; }
+try_catch_ii_ns(A)  ::= try_catch_iii_ns(B) VARIABLE(C) RPAREN. { zend_do_begin_catch(&B[0], &B[2], &C, &B[1] TSRMLS_CC); A = B[0]; }
+try_catch_i_ns(A)   ::= try_catch_ii_ns(B) LBRACE inner_statement_list RBRACE. { zend_do_end_catch(&B TSRMLS_CC); A = B; }
+try_catch_ns        ::= try_catch_i_ns(B) additional_catches(C). { zend_do_mark_last_catch(&B, &C TSRMLS_CC); }
+
+/* Statements without namespace checks */
+unticked_statement ::= LBRACE inner_statement_list RBRACE.
+unticked_statement ::= SEMICOLON.
 unticked_statement ::= foreach.
 unticked_statement ::= foreach2.
 unticked_statement ::= declare.
 unticked_statement ::= try_catch.
-unticked_statement ::= LBRACE inner_statement_list RBRACE.
-unticked_statement ::= GLOBAL global_var_list SEMICOLON.
-unticked_statement ::= STATIC static_var_list SEMICOLON.
-unticked_statement ::= ECHO echo_expr_list SEMICOLON.
-unticked_statement ::= UNSET LPAREN unset_variables RPAREN SEMICOLON.
-unticked_statement ::= SEMICOLON. /* empty statement */
-unticked_statement ::= BREAK SEMICOLON.                               { zend_do_brk_cont(ZEND_BRK, NULL TSRMLS_CC); }
-unticked_statement ::= BREAK expr(B) SEMICOLON.                       { zend_do_brk_cont(ZEND_BRK, &B TSRMLS_CC); }
-unticked_statement ::= CONTINUE SEMICOLON.                            { zend_do_brk_cont(ZEND_CONT, NULL TSRMLS_CC); }
-unticked_statement ::= CONTINUE expr(B) SEMICOLON.                    { zend_do_brk_cont(ZEND_CONT, &B TSRMLS_CC); }
-unticked_statement ::= RETURN SEMICOLON.                              { zend_do_return(NULL, 0 TSRMLS_CC); }
-unticked_statement ::= RETURN expr_wo_var(B) SEMICOLON.     { zend_do_return(&B, 0 TSRMLS_CC); }
-unticked_statement ::= RETURN variable(B) SEMICOLON.                  { zend_do_return(&B, 1 TSRMLS_CC); }
-unticked_statement ::= INLINE_HTML(B).                                { zend_do_echo(&B TSRMLS_CC); }
-unticked_statement ::= expr(B) SEMICOLON.                             { zend_do_free(&B TSRMLS_CC); }
-unticked_statement ::= THROW expr(B) SEMICOLON.                       { zend_do_throw(&B TSRMLS_CC); }
-unticked_statement ::= GOTO STRING(B) SEMICOLON.                      { zend_do_goto(&B TSRMLS_CC); }
+unticked_statement ::= while.
+unticked_statement ::= for.
+unticked_statement ::= do_while.
+unticked_statement ::= switch.
+unticked_statement ::= if.
+unticked_statement ::= if_alt.
+unticked_statement ::= global SEMICOLON.
+unticked_statement ::= static SEMICOLON.
+unticked_statement ::= echo SEMICOLON.
+unticked_statement ::= unset SEMICOLON.
+unticked_statement ::= break SEMICOLON.
+unticked_statement ::= continue SEMICOLON.
+unticked_statement ::= return SEMICOLON.
+unticked_statement ::= INLINE_HTML(B).       { zend_do_echo(&B TSRMLS_CC); }
+unticked_statement ::= expr_expr SEMICOLON.
+unticked_statement ::= throw SEMICOLON.
+unticked_statement ::= goto SEMICOLON.

+/* Statements with namespace checks */
+unticked_statement_ns ::= LBRACE inner_statement_list RBRACE. { ZEND_VERIFY_NS(); }
+unticked_statement_ns ::= SEMICOLON.
+unticked_statement_ns ::= foreach_ns.
+unticked_statement_ns ::= foreach2_ns.
+unticked_statement_ns ::= declare_ns.
+unticked_statement_ns ::= try_catch_ns.
+unticked_statement_ns ::= while_ns.
+unticked_statement_ns ::= for_ns.
+unticked_statement_ns ::= do_while_ns.
+unticked_statement_ns ::= switch_ns.
+unticked_statement_ns ::= if_ns.
+unticked_statement_ns ::= if_alt_ns.
+unticked_statement_ns ::= global_ns SEMICOLON.
+unticked_statement_ns ::= static_ns SEMICOLON.
+unticked_statement_ns ::= echo_ns SEMICOLON.
+unticked_statement_ns ::= unset_ns SEMICOLON.
+unticked_statement_ns ::= break_ns SEMICOLON.
+unticked_statement_ns ::= continue_ns SEMICOLON.
+unticked_statement_ns ::= return_ns SEMICOLON.
+unticked_statement_ns ::= INLINE_HTML(B).    { ZEND_VERIFY_NS(); zend_do_echo(&B TSRMLS_CC); }
+unticked_statement_ns ::= expr_expr_ns SEMICOLON.
+unticked_statement_ns ::= throw_ns SEMICOLON.
+unticked_statement_ns ::= goto_ns SEMICOLON.
+
+global ::= GLOBAL global_var_list.
+
+global_ns ::= GLOBAL global_var_list. { ZEND_VERIFY_NS(); }
+
+static ::= STATIC static_var_list.
+static_ns ::= STATIC static_var_list. { ZEND_VERIFY_NS(); }
+
+unset ::= UNSET LPAREN unset_variables RPAREN.
+
+unset_ns ::= UNSET LPAREN unset_variables RPAREN. { ZEND_VERIFY_NS(); }
+
+break ::= BREAK. { zend_do_brk_cont(ZEND_BRK, NULL TSRMLS_CC); }
+break ::= BREAK expr(B). { zend_do_brk_cont(ZEND_BRK, &B TSRMLS_CC); }
+
+break_ns ::= BREAK. { ZEND_VERIFY_NS(); zend_do_brk_cont(ZEND_BRK, NULL TSRMLS_CC); }
+break_ns ::= BREAK expr(B). { ZEND_VERIFY_NS(); zend_do_brk_cont(ZEND_BRK, &B TSRMLS_CC); }
+
+continue ::= CONTINUE. { ZEND_VERIFY_NS(); zend_do_brk_cont(ZEND_CONT, NULL TSRMLS_CC); }
+continue ::= CONTINUE expr(B). { ZEND_VERIFY_NS(); zend_do_brk_cont(ZEND_CONT, &B TSRMLS_CC); }
+
+continue_ns ::= CONTINUE. { ZEND_VERIFY_NS(); zend_do_brk_cont(ZEND_CONT, NULL TSRMLS_CC); }
+continue_ns ::= CONTINUE expr(B). { ZEND_VERIFY_NS(); zend_do_brk_cont(ZEND_CONT, &B TSRMLS_CC); }
+
+return ::= RETURN. { zend_do_return(NULL, 0 TSRMLS_CC); }
+return ::= return_expr.
+
+return_ns ::= RETURN. { ZEND_VERIFY_NS(); zend_do_return(NULL, 0 TSRMLS_CC); }
+return_ns ::= return_expr. { ZEND_VERIFY_NS(); }
+
+echo ::= ECHO echo_expr_list.
+
+echo_ns ::= ECHO echo_expr_list. { ZEND_VERIFY_NS(); }
+
+throw ::= THROW expr(B). { zend_do_throw(&B TSRMLS_CC); }
+throw_ns ::= THROW expr(B). { ZEND_VERIFY_NS(); zend_do_throw(&B TSRMLS_CC); }
+
+expr_expr ::= expr(B). { zend_do_free(&B TSRMLS_CC); }
+expr_expr_ns ::= expr(B). { ZEND_VERIFY_NS(); zend_do_free(&B TSRMLS_CC); }
+
+return_expr ::= RETURN variable(B). { zend_do_return(&B, 1 TSRMLS_CC); }
+return_expr ::= RETURN expr_wo_var(B). { zend_do_return(&B, 0 TSRMLS_CC); }
+
+goto ::= GOTO STRING(B). { zend_do_goto(&B TSRMLS_CC); }
+goto_ns ::= GOTO STRING(B). { ZEND_VERIFY_NS(); zend_do_goto(&B TSRMLS_CC); }
+
 unset_variables ::= unset_variable.
 unset_variables ::= unset_variables COMMA unset_variable.

 unset_variable(A) ::= variable(B). { zend_do_end_variable_parse(&B, BP_VAR_UNSET, 0 TSRMLS_CC); zend_do_unset(&B TSRMLS_CC); A = B; }

-function_declaration_statement ::= unticked_function_declaration_statement. { ZEND_DO_TICKS(); }
+function_declaration_statement ::= unticked_function_declaration_statement RBRACE. { ZEND_DO_TICKS(); }

-class_declaration_statement ::= unticked_class_declaration_statement. { ZEND_DO_TICKS(); }
+class_declaration_statement ::= unticked_class_declaration_statement RBRACE. { ZEND_DO_TICKS(); }

+class_declaration_statement_ns ::= unticked_class_declaration_statement_ns RBRACE. { ZEND_DO_TICKS(); }
+
 is_reference(A) ::= . { A.op_type = ZEND_RETURN_VAL; }
 is_reference(A) ::= BW_AND. { A.op_type = ZEND_RETURN_REF; }

-unticked_function_declaration_statement_i(A) ::= function(B) is_reference(C) STRING(D). { zend_do_begin_function_declaration(&B, &D, 0, C.op_type, NULL TSRMLS_CC); A = B; }
-unticked_function_declaration_statement ::= unticked_function_declaration_statement_i(B) LPAREN parameters RPAREN LBRACE inner_statement_list RBRACE. { zend_do_end_function_declaration(&B TSRMLS_CC); }
+unticked_function_declaration_statement_iii(A) ::= function(B) is_reference(C) STRING(D). { zend_do_begin_function_declaration(&B, &D, 0, C.op_type, NULL TSRMLS_CC); A = B; }
+unticked_function_declaration_statement_ii(A)  ::= unticked_function_declaration_statement_iii(B) LPAREN parameters RPAREN. { A = B; }
+unticked_function_declaration_statement_i(A)   ::= unticked_function_declaration_statement_ii(B) LBRACE inner_statement_list. { A = B; }
+unticked_function_declaration_statement        ::= unticked_function_declaration_statement_i(B). { zend_do_end_function_declaration(&B TSRMLS_CC); }


 unticked_class_declaration_statement_i(A) ::= class_entry_type(B) STRING(C) extends_from(D). { zend_do_begin_class_declaration(&B, &C, &D TSRMLS_CC); A[0] = B; A[1] = C; }
@@ -358,15 +481,22 @@
 unticked_class_declaration_statement ::= unticked_class_declaration_statement_i(B)
                                          implements_list
                                          LBRACE
-                                             class_statements
-                                         RBRACE. { zend_do_end_class_declaration(&B[0], &B[1] TSRMLS_CC); }
+                                             class_statements. { zend_do_end_class_declaration(&B[0], &B[1] TSRMLS_CC); }

 unticked_class_declaration_statement ::= unticked_class_declaration_statement_ii(B)
                                          interface_extends_list
                                          LBRACE
-                                             class_statements
-                                         RBRACE. { zend_do_end_class_declaration(&B[0], &B[1] TSRMLS_CC); }
+                                             class_statements. { zend_do_end_class_declaration(&B[0], &B[1] TSRMLS_CC); }
+
+unticked_class_declaration_statement_ns ::= unticked_class_declaration_statement_i(B)
+                                         implements_list
+                                         LBRACE
+                                             class_statements. { zend_do_end_class_declaration(&B[0], &B[1] TSRMLS_CC); ZEND_VERIFY_NS(); zend_do_early_binding(TSRMLS_C); }

+unticked_class_declaration_statement_ns ::= unticked_class_declaration_statement_ii(B)
+                                         interface_extends_list
+                                         LBRACE
+                                             class_statements. { zend_do_end_class_declaration(&B[0], &B[1] TSRMLS_CC); ZEND_VERIFY_NS(); zend_do_early_binding(TSRMLS_C); }

 class_entry_type(A) ::= CLASS.          { A.u.op.opline_num = CG(zend_lineno); A.EA = 0; }
 class_entry_type(A) ::= ABSTRACT CLASS. { A.u.op.opline_num = CG(zend_lineno); A.EA = ZEND_ACC_EXPLICIT_ABSTRACT_CLASS; }
-- 
PHP CVS Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to