felipe Fri, 09 Jul 2010 00:02:33 +0000
Revision: http://svn.php.net/viewvc?view=revision&revision=301102
Log:
- Added switch rule
Changed paths:
U php/php-src/branches/LEMON/Zend/zend_language_parser.y
Modified: php/php-src/branches/LEMON/Zend/zend_language_parser.y
===================================================================
--- php/php-src/branches/LEMON/Zend/zend_language_parser.y 2010-07-08
23:22:41 UTC (rev 301101)
+++ php/php-src/branches/LEMON/Zend/zend_language_parser.y 2010-07-09
00:02:33 UTC (rev 301102)
@@ -305,9 +305,9 @@
for_expr
RPAREN { zend_do_free(&$9 TSRMLS_CC);
zend_do_for_before_statement(&$4, &$7 TSRMLS_CC); }
for_statement { zend_do_for_end(&$7 TSRMLS_CC); }
-unticked_statement ::= SWITCH LPAREN expr RPAREN {
zend_do_switch_cond(&$3 TSRMLS_CC); } switch_case_list { zend_do_switch_end(&$6
TSRMLS_CC); }
*/
+unticked_statement ::= switch.
unticked_statement ::= LBRACE inner_statement_list RBRACE.
unticked_statement ::= if_cond_then elseif_list else_single. {
zend_do_if_end(TSRMLS_C); }
unticked_statement ::= if_alt_cond_then elseif_alt_list else_alt_single ENDIF
SEMICOLON. { zend_do_if_end(TSRMLS_C); }
@@ -328,6 +328,9 @@
unticked_statement ::= foreach2.
// unticked_statement ::= DECLARE { $1.u.op.opline_num =
get_next_op_number(CG(active_op_array)); zend_do_declare_begin(TSRMLS_C); }
LPAREN declare_list RPAREN declare_statement { zend_do_declare_end(&$1
TSRMLS_CC); }
+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); }
+
foreach_ii(A) ::= FOREACH(B) LPAREN(C) variable(D) AS(E). {
zend_do_foreach_begin(&B, &C, &D, &E, 1 TSRMLS_CC); A[0] = B; A[1] = C; A[2] =
E; }
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); }
@@ -346,7 +349,7 @@
// additional_catches { zend_do_mark_last_catch(&$7, &$18
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(C) LPAREN(D). { zend_initialize_try_catch_element(&B TSRMLS_CC); A[0] =
B; A[1] = D; }
+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 TSRMLS_CC); A[0] = B[0]; A[1] = B[1]; A[2] = C; }
try_catch_ii(A) ::= try_catch_iii(B) VARIABLE(C) RPAREN. {
zend_do_begin_catch(&B[0], &B[2], &C, &B[1] TSRMLS_CC); A = B[0]; }
try_catch_i(A) ::= try_catch_ii(B) LBRACE inner_statement_list RBRACE. {
zend_do_end_catch(&B TSRMLS_CC); A = B; }
@@ -556,15 +559,25 @@
// | COLON case_list ENDSWITCH SEMICOLON { $$ = $2; }
// | COLON SEMICOLON case_list ENDSWITCH SEMICOLON { $$ = $3; }
//;
-//
-//
+
+switch_case_list(A) ::= LBRACE case_list(B) RBRACE. { A = B; }
+switch_case_list(A) ::= LBRACE SEMICOLON case_list(B) RBRACE. { A = B; }
+switch_case_list(A) ::= COLON case_list(B) ENDSWITCH SEMICOLON. { A =
B; }
+switch_case_list(A) ::= COLON SEMICOLON case_list(B) ENDSWITCH
SEMICOLON. { A = B; }
+
//case_list:
// /* empty */ { $$.op_type = IS_UNUSED; }
// | case_list CASE expr case_separator {
zend_do_extended_info(TSRMLS_C); zend_do_case_before_statement(&$1, &$2, &$3
TSRMLS_CC); } inner_statement_list { zend_do_case_after_statement(&$$, &$2
TSRMLS_CC); $$.op_type = IS_CONST; }
// | case_list DEFAULT case_separator {
zend_do_extended_info(TSRMLS_C); zend_do_default_before_statement(&$1, &$2
TSRMLS_CC); } inner_statement_list { zend_do_case_after_statement(&$$, &$2
TSRMLS_CC); $$.op_type = IS_CONST; }
//;
-//
-//
+
+case_list_i(A) ::= case_list(B) CASE(C) expr(D) case_separator. {
zend_do_extended_info(TSRMLS_C); zend_do_case_before_statement(&B, &C, &D
TSRMLS_CC); A = C;}
+case_list_ii(A) ::= case_list(B) DEFAULT(C) case_separator. {
zend_do_extended_info(TSRMLS_C); zend_do_default_before_statement(&B, &C
TSRMLS_CC); A = C; }
+
+case_list(A) ::= . { A.op_type = IS_UNUSED; }
+case_list(A) ::= case_list_i(B) inner_statement_list. {
zend_do_case_after_statement(&A, &B TSRMLS_CC); A.op_type = IS_CONST; }
+case_list(A) ::= case_list_ii(B) inner_statement_list. {
zend_do_case_after_statement(&A, &B TSRMLS_CC); A.op_type = IS_CONST; }
+
//case_separator:
// COLON
// | SEMICOLON
--
PHP CVS Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php