Mercurial > cpython-lru_cache-weakref
diff Modules/parsermodule.c @ 20432:56141b86a7f2 legacy-trunk
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)+ [',']]
| author | Guido van Rossum <guido@python.org> |
|---|---|
| date | Mon, 15 Oct 2001 15:44:05 +0000 |
| parents | 5501958edc36 |
| children | 42d0819546d6 |
line wrap: on
line diff
--- a/Modules/parsermodule.c Mon Oct 15 14:34:42 2001 +0000 +++ b/Modules/parsermodule.c Mon Oct 15 15:44:05 2001 +0000 @@ -1039,6 +1039,14 @@ } +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 @@ 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; }
