Kaydet (Commit) cf360b92 authored tarafından Mark Dickinson's avatar Mark Dickinson

Issue #14701: Add missing support for 'raise ... from' in parser module.

üst 640335c6
...@@ -297,6 +297,14 @@ class RoundtripLegalSyntaxTestCase(unittest.TestCase): ...@@ -297,6 +297,14 @@ class RoundtripLegalSyntaxTestCase(unittest.TestCase):
self.check_suite("[*a, *b] = y") self.check_suite("[*a, *b] = y")
self.check_suite("for [*x, b] in x: pass") 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 # Second, we take *invalid* trees and make sure we get ParserError
......
...@@ -61,6 +61,8 @@ Core and Builtins ...@@ -61,6 +61,8 @@ Core and Builtins
Library Library
------- -------
- Issue #14701: Fix missing support for 'raise ... from' in parser module.
- Issue #13183: Fix pdb skipping frames after hitting a breakpoint and running - Issue #13183: Fix pdb skipping frames after hitting a breakpoint and running
step. Patch by Xavier de Gaye. step. Patch by Xavier de Gaye.
......
...@@ -1608,31 +1608,30 @@ validate_return_stmt(node *tree) ...@@ -1608,31 +1608,30 @@ validate_return_stmt(node *tree)
} }
/*
* raise_stmt:
*
* 'raise' [test ['from' test]]
*/
static int static int
validate_raise_stmt(node *tree) validate_raise_stmt(node *tree)
{ {
int nch = NCH(tree); int nch = NCH(tree);
int res = (validate_ntype(tree, raise_stmt) 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) { if (res) {
res = validate_name(CHILD(tree, 0), "raise"); res = validate_name(CHILD(tree, 0), "raise");
if (res && (nch >= 2)) if (res && (nch >= 2))
res = validate_test(CHILD(tree, 1)); res = validate_test(CHILD(tree, 1));
if (res && nch > 2) { if (res && (nch == 4)) {
res = (validate_comma(CHILD(tree, 2)) res = (validate_name(CHILD(tree, 2), "from")
&& validate_test(CHILD(tree, 3))); && 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); return (res);
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment