cpython: 419ceb531bab (original) (raw)

--- a/Doc/reference/compound_stmts.rst +++ b/Doc/reference/compound_stmts.rst @@ -471,10 +471,10 @@ A function definition defines a user-def decorators: decorator+ decorator: "@" dotted_name ["(" [parameter_list [","]] ")"] NEWLINE dotted_name: identifier ("." identifier)*

--- a/Grammar/Grammar +++ b/Grammar/Grammar @@ -27,13 +27,18 @@ async_funcdef: ASYNC funcdef funcdef: 'def' NAME parameters ['->' test] ':' suite parameters: '(' [typedargslist] ')' -typedargslist: (tfpdef ['=' test] (',' tfpdef ['=' test])* [','

+typedargslist: (tfpdef ['=' test] (',' tfpdef ['=' test])* [',' [

+varargslist: (vfpdef ['=' test] (',' vfpdef ['=' test])* [',' [

--- a/Lib/test/test_grammar.py +++ b/Lib/test/test_grammar.py @@ -295,6 +295,10 @@ class GrammarTests(unittest.TestCase): pos2key2dict(1,2,k2=100,tokwarg1=100,tokwarg2=200) pos2key2dict(1,2,tokwarg1=100,tokwarg2=200, k2=100)

+ # keyword arguments after *arglist def f(*args, **kwargs): return args, kwargs @@ -352,6 +356,23 @@ class GrammarTests(unittest.TestCase): check_syntax_error(self, "f(*g(1=2))") check_syntax_error(self, "f(**g(1=2))")

+ def test_lambdef(self): ### lambdef: 'lambda' [varargslist] ':' test l1 = lambda : 0 @@ -370,6 +391,23 @@ class GrammarTests(unittest.TestCase): self.assertEqual(l6(1,2), 1+2+20) self.assertEqual(l6(1,2,k=10), 1+2+10)

+ ### stmt: simple_stmt | compound_stmt # Tested below

--- a/Misc/NEWS +++ b/Misc/NEWS @@ -10,6 +10,10 @@ Release date: XXXX-XX-XX Core and Builtins ----------------- +- Issue #9232: Modify Python's grammar to allow trailing commas in the

--- a/Python/ast.c +++ b/Python/ast.c @@ -1260,16 +1260,20 @@ ast_for_arguments(struct compiling *c, c and varargslist (lambda definition). parameters: '(' [typedargslist] ')'

+ */ int i, j, k, nposargs = 0, nkwonlyargs = 0; int nposdefaults = 0, found_default = 0; @@ -1371,7 +1375,8 @@ ast_for_arguments(struct compiling c, c i += 2; / the name and the comma */ break; case STAR:

--- a/Python/graminit.c +++ b/Python/graminit.c @@ -204,11 +204,13 @@ static arc arcs_9_6[2] = { {32, 7}, {0, 6}, }; -static arc arcs_9_7[2] = { +static arc arcs_9_7[3] = { {30, 12}, {34, 3}, -}; -static arc arcs_9_8[1] = {

+}; +static arc arcs_9_8[2] = {

+static arc arcs_9_13[1] = { {0, 13}, }; static arc arcs_9_14[2] = {

+}; +static arc arcs_9_15[3] = {

+}; +static arc arcs_9_16[1] = { {26, 6}, }; -static arc arcs_9_16[3] = {

-}; -static arc arcs_9_17[1] = {

-}; -static state states_9[18] = { +static arc arcs_9_17[3] = {

+}; +static arc arcs_9_18[1] = {

+}; +static state states_9[19] = { {3, arcs_9_0}, {3, arcs_9_1}, {3, arcs_9_2}, @@ -257,17 +263,18 @@ static state states_9[18] = { {1, arcs_9_4}, {4, arcs_9_5}, {2, arcs_9_6},

}; static arc arcs_10_0[1] = { {23, 1}, @@ -319,11 +326,13 @@ static arc arcs_11_6[2] = { {32, 7}, {0, 6}, }; -static arc arcs_11_7[2] = { +static arc arcs_11_7[3] = { {36, 12}, {34, 3}, -}; -static arc arcs_11_8[1] = {

+}; +static arc arcs_11_8[2] = {

+static arc arcs_11_13[1] = { {0, 13}, }; static arc arcs_11_14[2] = {

+}; +static arc arcs_11_15[3] = {

+}; +static arc arcs_11_16[1] = { {26, 6}, }; -static arc arcs_11_16[3] = {

-}; -static arc arcs_11_17[1] = {

-}; -static state states_11[18] = { +static arc arcs_11_17[3] = {

+}; +static arc arcs_11_18[1] = {

+}; +static state states_11[19] = { {3, arcs_11_0}, {3, arcs_11_1}, {3, arcs_11_2}, @@ -372,17 +385,18 @@ static state states_11[18] = { {1, arcs_11_4}, {4, arcs_11_5}, {2, arcs_11_6},

}; static arc arcs_12_0[1] = { {23, 1}, @@ -1879,11 +1893,11 @@ static dfa dfas[85] = { "\000\000\100\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"}, {264, "parameters", 0, 4, states_8, "\000\040\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"},