changeset: 76819:0dd0d56bdcc1 parent: 76817:064c2d0483f8 parent: 76818:fc17f70292f6 user: Mark Dickinson date: Mon May 07 12:03:11 2012 +0100 files: Lib/test/test_parser.py Misc/NEWS Modules/parsermodule.c description: Issue #14701: Merge fix from 3.2. diff -r 064c2d0483f8 -r 0dd0d56bdcc1 Lib/test/test_parser.py --- a/Lib/test/test_parser.py Mon May 07 11:20:50 2012 +0100 +++ b/Lib/test/test_parser.py Mon May 07 12:03:11 2012 +0100 @@ -301,6 +301,14 @@ self.check_suite("[*a, *b] = y") self.check_suite("for [*x, b] in x: pass") + def test_raise_statement(self): + self.check_suite("raise\n") + self.check_suite("raise e\n") + self.check_suite("try:\n" + " suite\n" + "except Exception as e:\n" + " raise ValueError from e\n") + # # Second, we take *invalid* trees and make sure we get ParserError diff -r 064c2d0483f8 -r 0dd0d56bdcc1 Misc/NEWS --- a/Misc/NEWS Mon May 07 11:20:50 2012 +0100 +++ b/Misc/NEWS Mon May 07 12:03:11 2012 +0100 @@ -20,6 +20,8 @@ Library ------- +- Issue #14701: Fix missing support for 'raise ... from' in parser module. + - Add support for timeouts to the acquire() methods of multiprocessing's lock/semaphore/condition proxies. diff -r 064c2d0483f8 -r 0dd0d56bdcc1 Modules/parsermodule.c --- a/Modules/parsermodule.c Mon May 07 11:20:50 2012 +0100 +++ b/Modules/parsermodule.c Mon May 07 12:03:11 2012 +0100 @@ -1611,31 +1611,30 @@ } +/* + * raise_stmt: + * + * 'raise' [test ['from' test]] + */ static int validate_raise_stmt(node *tree) { int nch = NCH(tree); int res = (validate_ntype(tree, raise_stmt) - && ((nch == 1) || (nch == 2) || (nch == 4) || (nch == 6))); + && ((nch == 1) || (nch == 2) || (nch == 4))); + + if (!res && !PyErr_Occurred()) + (void) validate_numnodes(tree, 2, "raise"); if (res) { res = validate_name(CHILD(tree, 0), "raise"); if (res && (nch>= 2)) res = validate_test(CHILD(tree, 1)); - if (res && nch> 2) { - res = (validate_comma(CHILD(tree, 2)) + if (res && (nch == 4)) { + res = (validate_name(CHILD(tree, 2), "from") && validate_test(CHILD(tree, 3))); - if (res && (nch> 4)) - res = (validate_comma(CHILD(tree, 4)) - && validate_test(CHILD(tree, 5))); } } - else - (void) validate_numnodes(tree, 2, "raise"); - if (res && (nch == 4)) - res = (validate_comma(CHILD(tree, 2)) - && validate_test(CHILD(tree, 3))); - return (res); }

AltStyle によって変換されたページ (->オリジナル) /