summaryrefslogtreecommitdiffstats
path: root/Modules
diff options
context:
space:
mode:
authorGuido van Rossum <guido@python.org>2001-10-15 15:44:05 (GMT)
committerGuido van Rossum <guido@python.org>2001-10-15 15:44:05 (GMT)
commit1c917072ca2895a196de7f397d4e96bcc577e13d (patch)
tree866e2babdb9b21e5869012c583a191898ac68a92 /Modules
parent69c0ff38362dff3b0a90828b8d787dfb3eb14bc3 (diff)
downloadcpython-1c917072ca2895a196de7f397d4e96bcc577e13d.zip
cpython-1c917072ca2895a196de7f397d4e96bcc577e13d.tar.gz
cpython-1c917072ca2895a196de7f397d4e96bcc577e13d.tar.bz2
Very subtle syntax change: in a list comprehension, the testlist in
"for <var> in <testlist> may no longer be a single test followed by a comma. This solves SF bug #431886. Note that if the testlist contains more than one test, a trailing comma is still allowed, for maximum backward compatibility; but this example is not: [(x, y) for x in range(10), for y in range(10)] ^ The fix involved creating a new nonterminal 'testlist_safe' whose definition doesn't allow the trailing comma if there's only one test: testlist_safe: test [(',' test)+ [',']]
Diffstat (limited to 'Modules')
-rw-r--r--Modules/parsermodule.c10
1 files changed, 9 insertions, 1 deletions
diff --git a/Modules/parsermodule.c b/Modules/parsermodule.c
index bc82ce5..000e639 100644
--- a/Modules/parsermodule.c
+++ b/Modules/parsermodule.c
@@ -1039,6 +1039,14 @@ validate_testlist(node *tree)
}
+static int
+validate_testlist_safe(node *tree)
+{
+ return (validate_repeating_list(tree, testlist_safe,
+ validate_test, "testlist_safe"));
+}
+
+
/* '*' NAME [',' '**' NAME] | '**' NAME
*/
static int
@@ -1218,7 +1226,7 @@ validate_list_for(node *tree)
res = (validate_name(CHILD(tree, 0), "for")
&& validate_exprlist(CHILD(tree, 1))
&& validate_name(CHILD(tree, 2), "in")
- && validate_testlist(CHILD(tree, 3)));
+ && validate_testlist_safe(CHILD(tree, 3)));
return res;
}