mirror of
https://github.com/python/cpython.git
synced 2025-10-17 12:18:23 +00:00
Issue #14701: Add missing support for 'raise ... from' in parser module.
This commit is contained in:
parent
640335c61f
commit
cf360b9209
3 changed files with 21 additions and 12 deletions
|
@ -297,6 +297,14 @@ class RoundtripLegalSyntaxTestCase(unittest.TestCase):
|
|||
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
|
||||
|
|
|
@ -61,6 +61,8 @@ Core and Builtins
|
|||
Library
|
||||
-------
|
||||
|
||||
- Issue #14701: Fix missing support for 'raise ... from' in parser module.
|
||||
|
||||
- Issue #13183: Fix pdb skipping frames after hitting a breakpoint and running
|
||||
step. Patch by Xavier de Gaye.
|
||||
|
||||
|
|
|
@ -1608,31 +1608,30 @@ validate_return_stmt(node *tree)
|
|||
}
|
||||
|
||||
|
||||
/*
|
||||
* 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);
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue