From: Georg Brandl Date: Sat, 30 Sep 2006 08:43:30 +0000 (+0000) Subject: Patch #1567691: super() and new.instancemethod() now don't accept X-Git-Tag: v2.6a1~2627 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=5d59c0983431b0b7d3929dd2851b00e20e1d8c15;p=python Patch #1567691: super() and new.instancemethod() now don't accept keyword arguments any more (previously they accepted them, but didn't use them). --- diff --git a/Lib/test/test_descr.py b/Lib/test/test_descr.py index e9286b0e6a..b108395269 100644 --- a/Lib/test/test_descr.py +++ b/Lib/test/test_descr.py @@ -2142,6 +2142,13 @@ def supers(): veris(Sub.test(), Base.aProp) + # Verify that super() doesn't allow keyword args + try: + super(Base, kw=1) + except TypeError: + pass + else: + raise TestFailed, "super shouldn't accept keyword args" def inherits(): if verbose: print "Testing inheritance from basic types..." diff --git a/Lib/test/test_new.py b/Lib/test/test_new.py index 4aab1e268b..eb7a40792d 100644 --- a/Lib/test/test_new.py +++ b/Lib/test/test_new.py @@ -57,6 +57,14 @@ except TypeError: else: raise TestFailed, "dangerous instance method creation allowed" +# Verify that instancemethod() doesn't allow keyword args +try: + new.instancemethod(break_yolks, c, kw=1) +except TypeError: + pass +else: + raise TestFailed, "instancemethod shouldn't accept keyword args" + # It's unclear what the semantics should be for a code object compiled at # module scope, but bound and run in a function. In CPython, `c' is global # (by accident?) while in Jython, `c' is local. The intent of the test diff --git a/Misc/NEWS b/Misc/NEWS index b28eac6f5d..23b9bbb771 100644 --- a/Misc/NEWS +++ b/Misc/NEWS @@ -12,6 +12,10 @@ What's New in Python 2.6 alpha 1? Core and builtins ----------------- +- Patch #1567691: super() and new.instancemethod() now don't accept + keyword arguments any more (previously they accepted them, but didn't + use them). + - Fix a bug in the parser's future statement handling that led to "with" not being recognized as a keyword after, e.g., this statement: from __future__ import division, with_statement diff --git a/Objects/classobject.c b/Objects/classobject.c index e739cc6141..7680a3d6d0 100644 --- a/Objects/classobject.c +++ b/Objects/classobject.c @@ -2256,6 +2256,8 @@ instancemethod_new(PyTypeObject* type, PyObject* args, PyObject *kw) PyObject *self; PyObject *classObj = NULL; + if (!_PyArg_NoKeywords("instancemethod", kw)) + return NULL; if (!PyArg_UnpackTuple(args, "instancemethod", 2, 3, &func, &self, &classObj)) return NULL; diff --git a/Objects/typeobject.c b/Objects/typeobject.c index 6edd455ffb..4d99f7d67f 100644 --- a/Objects/typeobject.c +++ b/Objects/typeobject.c @@ -5762,6 +5762,8 @@ super_init(PyObject *self, PyObject *args, PyObject *kwds) PyObject *obj = NULL; PyTypeObject *obj_type = NULL; + if (!_PyArg_NoKeywords("super", kwds)) + return -1; if (!PyArg_ParseTuple(args, "O!|O:super", &PyType_Type, &type, &obj)) return -1; if (obj == Py_None)