felipe Thu, 08 Jul 2010 23:22:41 +0000
Revision: http://svn.php.net/viewvc?view=revision&revision=301101
Log:
- Added try_catch, isset_variables 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
22:46:56 UTC (rev 301100)
+++ php/php-src/branches/LEMON/Zend/zend_language_parser.y 2010-07-08
23:22:41 UTC (rev 301101)
@@ -61,6 +61,9 @@
%type foreach2_ii {znode_array}
%type closure_i {znode_array}
%type closure_ii {znode_array}
+%type try_catch_iv {znode_array}
+%type try_catch_iii {znode_array}
+%type isset_variables_i {znode_array}
%type unticked_class_declaration_statement_i {znode_array}
%type unticked_class_declaration_statement_ii {znode_array}
@@ -203,7 +206,6 @@
constant_declaration ::= constant_declaration COMMA STRING(B) EQUAL
static_scalar(C). { zend_do_declare_constant(&B, &C TSRMLS_CC); }
constant_declaration ::= CONST STRING(B) EQUAL static_scalar(C).
{ zend_do_declare_constant(&B, &C TSRMLS_CC); }
-//
//inner_statement_list:
// inner_statement_list { zend_do_extended_info(TSRMLS_C); }
inner_statement { HANDLE_INTERACTIVE(); }
// | /* empty */
@@ -335,15 +337,23 @@
foreach2 ::= foreach2_i(B) foreach_statement. {
zend_do_foreach_end(&B[0], &B[1] TSRMLS_CC); }
unticked_statement ::= SEMICOLON. /* empty statement */
-/* FIXME
-try ::= TRY(B). { zend_do_try(&B TSRMLS_CC); }
-unticked_statement ::= try LBRACE inner_statement_list RBRACE.
- CATCH(B) LPAREN. { zend_initialize_try_catch_element(&B
TSRMLS_CC); }
- fully_qualified_class_name. { zend_do_first_catch(&$7
TSRMLS_CC); }
- VARIABLE RPAREN { zend_do_begin_catch(&$1, &$9, &$11,
&$7 TSRMLS_CC); }
- LBRACE inner_statement_list RBRACE {
zend_do_end_catch(&$1 TSRMLS_CC); }
- additional_catches { zend_do_mark_last_catch(&$7, &$18
TSRMLS_CC); }
-*/
+
+// TRY { zend_do_try(&$1 TSRMLS_CC); } LBRACE inner_statement_list RBRACE
+// CATCH LPAREN { zend_initialize_try_catch_element(&$1
TSRMLS_CC); }
+// fully_qualified_class_name { zend_do_first_catch(&$7
TSRMLS_CC); }
+// VARIABLE RPAREN { zend_do_begin_catch(&$1, &$9, &$11, &$7
TSRMLS_CC); }
+// LBRACE inner_statement_list RBRACE { zend_do_end_catch(&$1
TSRMLS_CC); }
+// 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_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; }
+try_catch ::= try_catch_i(B) additional_catches(C). {
zend_do_mark_last_catch(&B, &C TSRMLS_CC); }
+
+unticked_statement ::= try_catch.
+
unticked_statement ::= THROW expr(B) SEMICOLON. { zend_do_throw(&B TSRMLS_CC);
}
unticked_statement ::= GOTO STRING(B) SEMICOLON. { zend_do_goto(&B TSRMLS_CC);
}
@@ -1680,7 +1690,15 @@
// variable {
zend_do_isset_or_isempty(ZEND_ISSET, &$$, &$1 TSRMLS_CC); }
// | isset_variables COMMA { zend_do_boolean_and_begin(&$1, &$2
TSRMLS_CC); } variable { znode tmp; zend_do_isset_or_isempty(ZEND_ISSET, &tmp,
&$4 TSRMLS_CC); zend_do_boolean_and_end(&$$, &$1, &tmp, &$2 TSRMLS_CC); }
//;
-//
+
+isset_variables_i(A) ::= isset_variables(B) COMMA(C). {
zend_do_boolean_and_begin(&B, &C TSRMLS_CC); A[0] = B; A[1] = C; }
+
+isset_variables(A) ::= variable(B). { zend_do_isset_or_isempty(ZEND_ISSET,
&A, &B TSRMLS_CC); }
+isset_variables(A) ::= isset_variables_i(B) variable(C). {
+ znode tmp; zend_do_isset_or_isempty(ZEND_ISSET, &tmp, &C TSRMLS_CC);
+ zend_do_boolean_and_end(&A, &B[0], &tmp, &B[1] TSRMLS_CC);
+}
+
//class_constant:
// class_name PAAMAYIM_NEKUDOTAYIM STRING {
zend_do_fetch_constant(&$$, &$1, &$3, ZEND_RT, 0 TSRMLS_CC); }
// | variable_class_name PAAMAYIM_NEKUDOTAYIM STRING {
zend_do_fetch_constant(&$$, &$1, &$3, ZEND_RT, 0 TSRMLS_CC); }
--
PHP CVS Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php