summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Grammar/Grammar2
-rw-r--r--Lib/test/test_genexps.py16
-rw-r--r--Python/graminit.c22
3 files changed, 30 insertions, 10 deletions
diff --git a/Grammar/Grammar b/Grammar/Grammar
index 01e4afd..d8106e9 100644
--- a/Grammar/Grammar
+++ b/Grammar/Grammar
@@ -102,7 +102,7 @@ dictmaker: test ':' test (',' test ':' test)* [',']
classdef: 'class' NAME ['(' [testlist] ')'] ':' suite
arglist: (argument ',')* (argument [',']| '*' test [',' '**' test] | '**' test)
-argument: [test '='] test [gen_for] # Really [keyword '='] test
+argument: test [gen_for] | test '=' test ['(' gen_for ')'] # Really [keyword '='] test
list_iter: list_for | list_if
list_for: 'for' exprlist 'in' testlist_safe [list_iter]
diff --git a/Lib/test/test_genexps.py b/Lib/test/test_genexps.py
index 894ce6a..7af3ac3 100644
--- a/Lib/test/test_genexps.py
+++ b/Lib/test/test_genexps.py
@@ -82,6 +82,18 @@ Verify that parenthesis are required in a statement
...
SyntaxError: invalid syntax
+Verify that parenthesis are required when used as a keyword argument value
+
+ >>> dict(a = i for i in xrange(10))
+ Traceback (most recent call last):
+ ...
+ SyntaxError: invalid syntax
+
+Verify that parenthesis are required when used as a keyword argument value
+
+ >>> dict(a = (i for i in xrange(10))) #doctest: +ELLIPSIS
+ {'a': <generator object at ...>}
+
Verify early binding for the outermost for-expression
>>> x=10
@@ -125,12 +137,12 @@ Verify that syntax error's are raised for genexps used as lvalues
>>> (y for y in (1,2)) = 10
Traceback (most recent call last):
...
- SyntaxError: assignment to generator expression not possible (<doctest test.test_genexps.__test__.doctests[38]>, line 1)
+ SyntaxError: assignment to generator expression not possible (<doctest test.test_genexps.__test__.doctests[40]>, line 1)
>>> (y for y in (1,2)) += 10
Traceback (most recent call last):
...
- SyntaxError: augmented assignment to generator expression not possible (<doctest test.test_genexps.__test__.doctests[39]>, line 1)
+ SyntaxError: augmented assignment to generator expression not possible (<doctest test.test_genexps.__test__.doctests[41]>, line 1)
########### Tests borrowed from or inspired by test_generators.py ############
diff --git a/Python/graminit.c b/Python/graminit.c
index 91d20f2..769532a 100644
--- a/Python/graminit.c
+++ b/Python/graminit.c
@@ -1496,26 +1496,34 @@ static arc arcs_69_0[1] = {
{26, 1},
};
static arc arcs_69_1[3] = {
- {25, 2},
- {147, 3},
+ {147, 2},
+ {25, 3},
{0, 1},
};
static arc arcs_69_2[1] = {
- {26, 4},
+ {0, 2},
};
static arc arcs_69_3[1] = {
- {0, 3},
+ {26, 4},
};
static arc arcs_69_4[2] = {
- {147, 3},
+ {13, 5},
{0, 4},
};
-static state states_69[5] = {
+static arc arcs_69_5[1] = {
+ {147, 6},
+};
+static arc arcs_69_6[1] = {
+ {15, 2},
+};
+static state states_69[7] = {
{1, arcs_69_0},
{3, arcs_69_1},
{1, arcs_69_2},
{1, arcs_69_3},
{2, arcs_69_4},
+ {1, arcs_69_5},
+ {1, arcs_69_6},
};
static arc arcs_70_0[2] = {
{146, 1},
@@ -1806,7 +1814,7 @@ static dfa dfas[79] = {
"\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000"},
{324, "arglist", 0, 8, states_68,
"\000\040\010\060\000\000\000\000\000\000\000\000\000\002\000\140\010\111\023\000\000"},
- {325, "argument", 0, 5, states_69,
+ {325, "argument", 0, 7, states_69,
"\000\040\010\000\000\000\000\000\000\000\000\000\000\002\000\140\010\111\023\000\000"},
{326, "list_iter", 0, 2, states_70,
"\000\000\000\000\000\000\000\000\000\000\000\042\000\000\000\000\000\000\000\000\000"},