diff options
author | Andi Gutmans <andi@php.net> | 2002-03-01 14:04:51 +0000 |
---|---|---|
committer | Andi Gutmans <andi@php.net> | 2002-03-01 14:04:51 +0000 |
commit | d1eea3de9c9a1e92a5cd0813c4608b9defef4927 (patch) | |
tree | df42216da86dfeb33d74245e2d27d5d89568c1bb /Zend/zend_language_parser.y | |
parent | 6f6c4ec7c7a24f98a646c1a485fcac39ea24defd (diff) | |
download | php-git-d1eea3de9c9a1e92a5cd0813c4608b9defef4927.tar.gz |
- Fix bug in nested try/catch's
- Infrastructure for implementing imports of methods.
Diffstat (limited to 'Zend/zend_language_parser.y')
-rw-r--r-- | Zend/zend_language_parser.y | 14 |
1 files changed, 10 insertions, 4 deletions
diff --git a/Zend/zend_language_parser.y b/Zend/zend_language_parser.y index 8975871f37..2c0d78c0d1 100644 --- a/Zend/zend_language_parser.y +++ b/Zend/zend_language_parser.y @@ -207,14 +207,20 @@ unticked_statement: | T_DECLARE { zend_do_declare_begin(TSRMLS_C); } '(' declare_list ')' declare_statement { zend_do_declare_end(TSRMLS_C); } | ';' /* empty statement */ | T_TRY { zend_do_try(&$1 TSRMLS_CC); } '{' inner_statement_list '}' - catches + T_CATCH '(' catch_class_entry T_VARIABLE ')' { zend_do_begin_catch(&$1, &$8, &$9, 1 TSRMLS_CC); } '{' inner_statement_list '}' { zend_do_end_catch(&$1 TSRMLS_CC); } + additional_catches | T_THROW expr ';' { zend_do_throw(&$2 TSRMLS_CC); } | T_DELETE cvar ';' { zend_do_end_variable_parse(BP_VAR_UNSET, 0 TSRMLS_CC); zend_do_unset(&$1, ZEND_UNSET_OBJ TSRMLS_CC); } ; -catches: - catches T_CATCH '(' catch_class_entry T_VARIABLE ')' { zend_do_begin_catch(&$2, &$4, &$5, 0 TSRMLS_CC); } '{' inner_statement_list '}' { zend_do_end_catch(&$2 TSRMLS_CC); } - | T_CATCH '(' catch_class_entry T_VARIABLE ')' { zend_do_begin_catch(&$1, &$3, &$4, 1 TSRMLS_CC); } '{' inner_statement_list '}' { zend_do_end_catch(&$1 TSRMLS_CC); } +additional_catches: + non_empty_additional_catches + | /* empty */ +; + +non_empty_additional_catches: + non_empty_additional_catches T_CATCH '(' catch_class_entry T_VARIABLE ')' { zend_do_begin_catch(&$2, &$4, &$5, 0 TSRMLS_CC); } '{' inner_statement_list '}' { zend_do_end_catch(&$2 TSRMLS_CC); } + | T_CATCH '(' catch_class_entry T_VARIABLE ')' { zend_do_begin_catch(&$1, &$3, &$4, 0 TSRMLS_CC); } '{' inner_statement_list '}' { zend_do_end_catch(&$1 TSRMLS_CC); } ; |