summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBrett Cannon <bcannon@gmail.com>2005-03-05 06:47:57 (GMT)
committerBrett Cannon <bcannon@gmail.com>2005-03-05 06:47:57 (GMT)
commit409d8f2ebdf597837c593a40659949e5b15f457d (patch)
tree65efd1daca556adb53a28d3957ba57dc801e0dda
parent653a5adcca68d445b21dd2a640627f0f0185204a (diff)
downloadcpython-409d8f2ebdf597837c593a40659949e5b15f457d.zip
cpython-409d8f2ebdf597837c593a40659949e5b15f457d.tar.gz
cpython-409d8f2ebdf597837c593a40659949e5b15f457d.tar.bz2
Allow classes to be defined with empty parentheses. This means that
``class C(): pass`` is no longer a syntax error.
-rw-r--r--Grammar/Grammar2
-rw-r--r--Misc/NEWS3
-rw-r--r--Python/compile.c5
-rw-r--r--Python/graminit.c13
4 files changed, 14 insertions, 9 deletions
diff --git a/Grammar/Grammar b/Grammar/Grammar
index 9e4dad8..7b6acf7 100644
--- a/Grammar/Grammar
+++ b/Grammar/Grammar
@@ -99,7 +99,7 @@ testlist: test (',' test)* [',']
testlist_safe: test [(',' test)+ [',']]
dictmaker: test ':' test (',' test ':' test)* [',']
-classdef: 'class' NAME ['(' testlist ')'] ':' suite
+classdef: 'class' NAME ['(' [testlist] ')'] ':' suite
arglist: (argument ',')* (argument [',']| '*' test [',' '**' test] | '**' test)
argument: [test '='] test [gen_for] # Really [keyword '='] test
diff --git a/Misc/NEWS b/Misc/NEWS
index 86d3677..08a8f43 100644
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -10,6 +10,9 @@ What's New in Python 2.5 alpha 1?
Core and builtins
-----------------
+- Defining a class with empty parentheses is now allowed
+ (e.g., ``class C(): pass`` is no longer a syntax error)
+
- Patch #1115086: Support PY_LONGLONG in structmember.
- Bug #1155938: new style classes did not check that __init__() was
diff --git a/Python/compile.c b/Python/compile.c
index 16bf291..5781b21 100644
--- a/Python/compile.c
+++ b/Python/compile.c
@@ -4624,7 +4624,7 @@ com_classdef(struct compiling *c, node *n)
char *name;
REQ(n, classdef);
- /* classdef: class NAME ['(' testlist ')'] ':' suite */
+ /* classdef: class NAME ['(' [testlist] ')'] ':' suite */
if ((v = PyString_InternFromString(STR(CHILD(n, 1)))) == NULL) {
c->c_errors++;
return;
@@ -4635,7 +4635,8 @@ com_classdef(struct compiling *c, node *n)
com_push(c, 1);
Py_DECREF(v);
/* Push the tuple of base classes on the stack */
- if (TYPE(CHILD(n, 2)) != LPAR) {
+ if (TYPE(CHILD(n, 2)) != LPAR ||
+ TYPE(CHILD(n, 3)) == RPAR) {
com_addoparg(c, BUILD_TUPLE, 0);
com_push(c, 1);
}
diff --git a/Python/graminit.c b/Python/graminit.c
index c4fe661..464f0ae 100644
--- a/Python/graminit.c
+++ b/Python/graminit.c
@@ -1426,26 +1426,27 @@ static arc arcs_67_2[2] = {
{13, 3},
{21, 4},
};
-static arc arcs_67_3[1] = {
+static arc arcs_67_3[2] = {
{9, 5},
+ {15, 6},
};
static arc arcs_67_4[1] = {
- {22, 6},
+ {22, 7},
};
static arc arcs_67_5[1] = {
- {15, 7},
+ {15, 6},
};
static arc arcs_67_6[1] = {
- {0, 6},
+ {21, 4},
};
static arc arcs_67_7[1] = {
- {21, 4},
+ {0, 7},
};
static state states_67[8] = {
{1, arcs_67_0},
{1, arcs_67_1},
{2, arcs_67_2},
- {1, arcs_67_3},
+ {2, arcs_67_3},
{1, arcs_67_4},
{1, arcs_67_5},
{1, arcs_67_6},