summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Include/pymacro.h6
-rw-r--r--Misc/NEWS5
-rw-r--r--Modules/_pickle.c140
-rw-r--r--Modules/zlibmodule.c17
-rwxr-xr-xTools/clinic/clinic.py13
5 files changed, 150 insertions, 31 deletions
diff --git a/Include/pymacro.h b/Include/pymacro.h
index 793f67d..7997c55 100644
--- a/Include/pymacro.h
+++ b/Include/pymacro.h
@@ -69,4 +69,10 @@
/* Check if pointer "p" is aligned to "a"-bytes boundary. */
#define _Py_IS_ALIGNED(p, a) (!((Py_uintptr_t)(p) & (Py_uintptr_t)((a) - 1)))
+#ifdef __GNUC__
+#define Py_UNUSED(name) _unused_ ## name __attribute__((unused))
+#else
+#define Py_UNUSED(name) _unused_ ## name
+#endif
+
#endif /* Py_PYMACRO_H */
diff --git a/Misc/NEWS b/Misc/NEWS
index b63b60e..feeace5 100644
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -342,6 +342,11 @@ Documentation
- Issue #19795: Improved markup of True/False constants.
+Tools/Demos
+-----------
+
+- Issue #19976: Argument Clinic METH_NOARGS functions now always
+ take two parameters.
What's New in Python 3.4.0 Beta 1?
==================================
diff --git a/Modules/_pickle.c b/Modules/_pickle.c
index c52f945..04a9837 100644
--- a/Modules/_pickle.c
+++ b/Modules/_pickle.c
@@ -3901,8 +3901,21 @@ PyDoc_STRVAR(_pickle_Pickler_clear_memo__doc__,
{"clear_memo", (PyCFunction)_pickle_Pickler_clear_memo, METH_NOARGS, _pickle_Pickler_clear_memo__doc__},
static PyObject *
-_pickle_Pickler_clear_memo(PicklerObject *self)
-/*[clinic checksum: 9c32be7e7a17ff82a81aae409d0d4f469033a5b2]*/
+_pickle_Pickler_clear_memo_impl(PicklerObject *self);
+
+static PyObject *
+_pickle_Pickler_clear_memo(PyObject *self, PyObject *Py_UNUSED(ignored))
+{
+ PyObject *return_value = NULL;
+
+ return_value = _pickle_Pickler_clear_memo_impl((PicklerObject *)self);
+
+ return return_value;
+}
+
+static PyObject *
+_pickle_Pickler_clear_memo_impl(PicklerObject *self)
+/*[clinic checksum: 0574593b102fffb8e781d7bb9b536ceffc525ac1]*/
{
if (self->memo)
PyMemoTable_Clear(self->memo);
@@ -4176,8 +4189,21 @@ PyDoc_STRVAR(_pickle_PicklerMemoProxy_clear__doc__,
{"clear", (PyCFunction)_pickle_PicklerMemoProxy_clear, METH_NOARGS, _pickle_PicklerMemoProxy_clear__doc__},
static PyObject *
-_pickle_PicklerMemoProxy_clear(PicklerMemoProxyObject *self)
-/*[clinic checksum: 507f13938721992e175a3e58b5ad02620045a1cc]*/
+_pickle_PicklerMemoProxy_clear_impl(PicklerMemoProxyObject *self);
+
+static PyObject *
+_pickle_PicklerMemoProxy_clear(PyObject *self, PyObject *Py_UNUSED(ignored))
+{
+ PyObject *return_value = NULL;
+
+ return_value = _pickle_PicklerMemoProxy_clear_impl((PicklerMemoProxyObject *)self);
+
+ return return_value;
+}
+
+static PyObject *
+_pickle_PicklerMemoProxy_clear_impl(PicklerMemoProxyObject *self)
+/*[clinic checksum: c6ca252530ccb3ea2f4b33507b51b183f23b24c7]*/
{
if (self->pickler->memo)
PyMemoTable_Clear(self->pickler->memo);
@@ -4200,8 +4226,21 @@ PyDoc_STRVAR(_pickle_PicklerMemoProxy_copy__doc__,
{"copy", (PyCFunction)_pickle_PicklerMemoProxy_copy, METH_NOARGS, _pickle_PicklerMemoProxy_copy__doc__},
static PyObject *
-_pickle_PicklerMemoProxy_copy(PicklerMemoProxyObject *self)
-/*[clinic checksum: 73a5117ab354290ebdbe07bd0bf7232d0936a69d]*/
+_pickle_PicklerMemoProxy_copy_impl(PicklerMemoProxyObject *self);
+
+static PyObject *
+_pickle_PicklerMemoProxy_copy(PyObject *self, PyObject *Py_UNUSED(ignored))
+{
+ PyObject *return_value = NULL;
+
+ return_value = _pickle_PicklerMemoProxy_copy_impl((PicklerMemoProxyObject *)self);
+
+ return return_value;
+}
+
+static PyObject *
+_pickle_PicklerMemoProxy_copy_impl(PicklerMemoProxyObject *self)
+/*[clinic checksum: 808c4d5a37359ed5fb2efe81dbe5ff480719f470]*/
{
Py_ssize_t i;
PyMemoTable *memo;
@@ -4254,11 +4293,24 @@ PyDoc_STRVAR(_pickle_PicklerMemoProxy___reduce____doc__,
{"__reduce__", (PyCFunction)_pickle_PicklerMemoProxy___reduce__, METH_NOARGS, _pickle_PicklerMemoProxy___reduce____doc__},
static PyObject *
-_pickle_PicklerMemoProxy___reduce__(PicklerMemoProxyObject *self)
-/*[clinic checksum: 40f0bf7a9b161e77130674f0481bda0a0184dcce]*/
+_pickle_PicklerMemoProxy___reduce___impl(PicklerMemoProxyObject *self);
+
+static PyObject *
+_pickle_PicklerMemoProxy___reduce__(PyObject *self, PyObject *Py_UNUSED(ignored))
+{
+ PyObject *return_value = NULL;
+
+ return_value = _pickle_PicklerMemoProxy___reduce___impl((PicklerMemoProxyObject *)self);
+
+ return return_value;
+}
+
+static PyObject *
+_pickle_PicklerMemoProxy___reduce___impl(PicklerMemoProxyObject *self)
+/*[clinic checksum: 2293152bdf53951a012d430767b608f5fb4213b5]*/
{
PyObject *reduce_value, *dict_args;
- PyObject *contents = _pickle_PicklerMemoProxy_copy(self);
+ PyObject *contents = _pickle_PicklerMemoProxy_copy_impl(self);
if (contents == NULL)
return NULL;
@@ -6288,8 +6340,21 @@ PyDoc_STRVAR(_pickle_Unpickler_load__doc__,
{"load", (PyCFunction)_pickle_Unpickler_load, METH_NOARGS, _pickle_Unpickler_load__doc__},
static PyObject *
-_pickle_Unpickler_load(PyObject *self)
-/*[clinic checksum: c2ae1263f0dd000f34ccf0fe59d7c544464babc4]*/
+_pickle_Unpickler_load_impl(PyObject *self);
+
+static PyObject *
+_pickle_Unpickler_load(PyObject *self, PyObject *Py_UNUSED(ignored))
+{
+ PyObject *return_value = NULL;
+
+ return_value = _pickle_Unpickler_load_impl(self);
+
+ return return_value;
+}
+
+static PyObject *
+_pickle_Unpickler_load_impl(PyObject *self)
+/*[clinic checksum: 55f35fcaf034817e75c355ec50b7878577355899]*/
{
UnpicklerObject *unpickler = (UnpicklerObject*)self;
@@ -6688,8 +6753,21 @@ PyDoc_STRVAR(_pickle_UnpicklerMemoProxy_clear__doc__,
{"clear", (PyCFunction)_pickle_UnpicklerMemoProxy_clear, METH_NOARGS, _pickle_UnpicklerMemoProxy_clear__doc__},
static PyObject *
-_pickle_UnpicklerMemoProxy_clear(UnpicklerMemoProxyObject *self)
-/*[clinic checksum: 46fecf4e33c0c873124f845edf6cc3a2e9864bd5]*/
+_pickle_UnpicklerMemoProxy_clear_impl(UnpicklerMemoProxyObject *self);
+
+static PyObject *
+_pickle_UnpicklerMemoProxy_clear(PyObject *self, PyObject *Py_UNUSED(ignored))
+{
+ PyObject *return_value = NULL;
+
+ return_value = _pickle_UnpicklerMemoProxy_clear_impl((UnpicklerMemoProxyObject *)self);
+
+ return return_value;
+}
+
+static PyObject *
+_pickle_UnpicklerMemoProxy_clear_impl(UnpicklerMemoProxyObject *self)
+/*[clinic checksum: e0f99c26d48444a3f58f598bec3190c66595fce7]*/
{
_Unpickler_MemoCleanup(self->unpickler);
self->unpickler->memo = _Unpickler_NewMemo(self->unpickler->memo_size);
@@ -6714,8 +6792,21 @@ PyDoc_STRVAR(_pickle_UnpicklerMemoProxy_copy__doc__,
{"copy", (PyCFunction)_pickle_UnpicklerMemoProxy_copy, METH_NOARGS, _pickle_UnpicklerMemoProxy_copy__doc__},
static PyObject *
-_pickle_UnpicklerMemoProxy_copy(UnpicklerMemoProxyObject *self)
-/*[clinic checksum: f8856c4e8a33540886dfbb245f286af3008fa0ad]*/
+_pickle_UnpicklerMemoProxy_copy_impl(UnpicklerMemoProxyObject *self);
+
+static PyObject *
+_pickle_UnpicklerMemoProxy_copy(PyObject *self, PyObject *Py_UNUSED(ignored))
+{
+ PyObject *return_value = NULL;
+
+ return_value = _pickle_UnpicklerMemoProxy_copy_impl((UnpicklerMemoProxyObject *)self);
+
+ return return_value;
+}
+
+static PyObject *
+_pickle_UnpicklerMemoProxy_copy_impl(UnpicklerMemoProxyObject *self)
+/*[clinic checksum: 8c0ab91c0b694ea71a1774650898a760d1ab4765]*/
{
Py_ssize_t i;
PyObject *new_memo = PyDict_New();
@@ -6761,12 +6852,25 @@ PyDoc_STRVAR(_pickle_UnpicklerMemoProxy___reduce____doc__,
{"__reduce__", (PyCFunction)_pickle_UnpicklerMemoProxy___reduce__, METH_NOARGS, _pickle_UnpicklerMemoProxy___reduce____doc__},
static PyObject *
-_pickle_UnpicklerMemoProxy___reduce__(UnpicklerMemoProxyObject *self)
-/*[clinic checksum: ab5516a77659144e1191c7dd70a0c6c7455660bc]*/
+_pickle_UnpicklerMemoProxy___reduce___impl(UnpicklerMemoProxyObject *self);
+
+static PyObject *
+_pickle_UnpicklerMemoProxy___reduce__(PyObject *self, PyObject *Py_UNUSED(ignored))
+{
+ PyObject *return_value = NULL;
+
+ return_value = _pickle_UnpicklerMemoProxy___reduce___impl((UnpicklerMemoProxyObject *)self);
+
+ return return_value;
+}
+
+static PyObject *
+_pickle_UnpicklerMemoProxy___reduce___impl(UnpicklerMemoProxyObject *self)
+/*[clinic checksum: 4ee76a65511291f0de2e9e63db395d2e5d6d8df6]*/
{
PyObject *reduce_value;
PyObject *constructor_args;
- PyObject *contents = _pickle_UnpicklerMemoProxy_copy(self);
+ PyObject *contents = _pickle_UnpicklerMemoProxy_copy_impl(self);
if (contents == NULL)
return NULL;
diff --git a/Modules/zlibmodule.c b/Modules/zlibmodule.c
index 28ed3cd..72137db 100644
--- a/Modules/zlibmodule.c
+++ b/Modules/zlibmodule.c
@@ -1045,8 +1045,21 @@ PyDoc_STRVAR(zlib_Compress_copy__doc__,
{"copy", (PyCFunction)zlib_Compress_copy, METH_NOARGS, zlib_Compress_copy__doc__},
static PyObject *
-zlib_Compress_copy(compobject *self)
-/*[clinic checksum: 0b37c07f8f27deb7d4769951fbecf600a1006ef8]*/
+zlib_Compress_copy_impl(compobject *self);
+
+static PyObject *
+zlib_Compress_copy(PyObject *self, PyObject *Py_UNUSED(ignored))
+{
+ PyObject *return_value = NULL;
+
+ return_value = zlib_Compress_copy_impl((compobject *)self);
+
+ return return_value;
+}
+
+static PyObject *
+zlib_Compress_copy_impl(compobject *self)
+/*[clinic checksum: 2f454ee15be3bc53cfb4e845c3f891f68be4c8e4]*/
{
compobject *retval = NULL;
int err;
diff --git a/Tools/clinic/clinic.py b/Tools/clinic/clinic.py
index c332b0c..7dd6215 100755
--- a/Tools/clinic/clinic.py
+++ b/Tools/clinic/clinic.py
@@ -400,19 +400,13 @@ PyDoc_STRVAR({c_basename}__doc__,
{{"{name}", (PyCFunction){c_basename}, {methoddef_flags}, {c_basename}__doc__}},
""".replace('{methoddef_flags}', flags)
- def meth_noargs_pyobject_template(self, methoddef_flags=""):
- return self.template_base("METH_NOARGS", methoddef_flags) + """
-static PyObject *
-{c_basename}({impl_parameters})
-"""
-
def meth_noargs_template(self, methoddef_flags=""):
return self.template_base("METH_NOARGS", methoddef_flags) + """
static {impl_return_type}
{impl_prototype};
static PyObject *
-{c_basename}({self_type}{self_name})
+{c_basename}({self_type}{self_name}, PyObject *Py_UNUSED(ignored))
{{
PyObject *return_value = NULL;
{declarations}
@@ -713,10 +707,7 @@ static {impl_return_type}
f.return_converter.type == 'PyObject *')
if not parameters:
- if default_return_converter:
- template = self.meth_noargs_pyobject_template(f.methoddef_flags)
- else:
- template = self.meth_noargs_template(f.methoddef_flags)
+ template = self.meth_noargs_template(f.methoddef_flags)
elif (len(parameters) == 1 and
parameters[0].kind == inspect.Parameter.POSITIONAL_ONLY and
not converters[0].is_optional() and