Issue #15422: get rid of PyCFunction_New macro

This commit is contained in:
Andrew Svetlov 2012-12-25 13:32:35 +02:00
parent 914ab8420e
commit 3ba3a3ee56
9 changed files with 20 additions and 23 deletions

View file

@ -46,7 +46,7 @@ struct PyMethodDef {
}; };
typedef struct PyMethodDef PyMethodDef; typedef struct PyMethodDef PyMethodDef;
#define PyCFunction_New(ML, SELF) PyCFunction_NewEx((ML), (SELF), NULL) PyAPI_FUNC(PyObject *) PyCFunction_New(PyMethodDef *, PyObject *);
PyAPI_FUNC(PyObject *) PyCFunction_NewEx(PyMethodDef *, PyObject *, PyAPI_FUNC(PyObject *) PyCFunction_NewEx(PyMethodDef *, PyObject *,
PyObject *); PyObject *);

View file

@ -10,6 +10,9 @@ What's New in Python 3.4.0 Alpha 1?
Core and Builtins Core and Builtins
----------------- -----------------
- Issue #15422: Get rid of PyCFunction_New macro. Use PyCFunction_NewEx
function (PyCFunction_New func is still present for backward compatibility).
- Issue #16672: Improve performance tracing performance - Issue #16672: Improve performance tracing performance
- Issue #14470: Remove w9xpopen support per PEP 11. - Issue #14470: Remove w9xpopen support per PEP 11.

View file

@ -741,7 +741,7 @@ local_new(PyTypeObject *type, PyObject *args, PyObject *kw)
wr = PyWeakref_NewRef((PyObject *) self, NULL); wr = PyWeakref_NewRef((PyObject *) self, NULL);
if (wr == NULL) if (wr == NULL)
goto err; goto err;
self->wr_callback = PyCFunction_New(&wr_callback_def, wr); self->wr_callback = PyCFunction_NewEx(&wr_callback_def, wr, NULL);
Py_DECREF(wr); Py_DECREF(wr);
if (self->wr_callback == NULL) if (self->wr_callback == NULL)
goto err; goto err;

View file

@ -115,7 +115,7 @@ classmethod_get(PyMethodDescrObject *descr, PyObject *obj, PyObject *type)
((PyTypeObject *)type)->tp_name); ((PyTypeObject *)type)->tp_name);
return NULL; return NULL;
} }
return PyCFunction_New(descr->d_method, type); return PyCFunction_NewEx(descr->d_method, type, NULL);
} }
static PyObject * static PyObject *
@ -125,7 +125,7 @@ method_get(PyMethodDescrObject *descr, PyObject *obj, PyObject *type)
if (descr_check((PyDescrObject *)descr, obj, &res)) if (descr_check((PyDescrObject *)descr, obj, &res))
return res; return res;
return PyCFunction_New(descr->d_method, obj); return PyCFunction_NewEx(descr->d_method, obj, NULL);
} }
static PyObject * static PyObject *
@ -239,7 +239,7 @@ methoddescr_call(PyMethodDescrObject *descr, PyObject *args, PyObject *kwds)
return NULL; return NULL;
} }
func = PyCFunction_New(descr->d_method, self); func = PyCFunction_NewEx(descr->d_method, self, NULL);
if (func == NULL) if (func == NULL)
return NULL; return NULL;
args = PyTuple_GetSlice(args, 1, argc); args = PyTuple_GetSlice(args, 1, argc);
@ -292,7 +292,7 @@ classmethoddescr_call(PyMethodDescrObject *descr, PyObject *args,
return NULL; return NULL;
} }
func = PyCFunction_New(descr->d_method, self); func = PyCFunction_NewEx(descr->d_method, self, NULL);
if (func == NULL) if (func == NULL)
return NULL; return NULL;
args = PyTuple_GetSlice(args, 1, argc); args = PyTuple_GetSlice(args, 1, argc);

View file

@ -13,6 +13,12 @@ static int numfree = 0;
#define PyCFunction_MAXFREELIST 256 #define PyCFunction_MAXFREELIST 256
#endif #endif
PyObject *
PyCFunction_New(PyMethodDef *ml, PyObject *self)
{
return PyCFunction_NewEx(ml, self, NULL);
}
PyObject * PyObject *
PyCFunction_NewEx(PyMethodDef *ml, PyObject *self, PyObject *module) PyCFunction_NewEx(PyMethodDef *ml, PyObject *self, PyObject *module)
{ {
@ -346,17 +352,3 @@ _PyCFunction_DebugMallocStats(FILE *out)
"free PyCFunction", "free PyCFunction",
numfree, sizeof(PyCFunction)); numfree, sizeof(PyCFunction));
} }
/* PyCFunction_New() is now just a macro that calls PyCFunction_NewEx(),
but it's part of the API so we need to keep a function around that
existing C extensions can call.
*/
#undef PyCFunction_New
PyAPI_FUNC(PyObject *) PyCFunction_New(PyMethodDef *, PyObject *);
PyObject *
PyCFunction_New(PyMethodDef *ml, PyObject *self)
{
return PyCFunction_NewEx(ml, self, NULL);
}

View file

@ -3811,7 +3811,7 @@ add_methods(PyTypeObject *type, PyMethodDef *meth)
descr = PyDescr_NewClassMethod(type, meth); descr = PyDescr_NewClassMethod(type, meth);
} }
else if (meth->ml_flags & METH_STATIC) { else if (meth->ml_flags & METH_STATIC) {
PyObject *cfunc = PyCFunction_New(meth, (PyObject*)type); PyObject *cfunc = PyCFunction_NewEx(meth, (PyObject*)type, NULL);
if (cfunc == NULL) if (cfunc == NULL)
return -1; return -1;
descr = PyStaticMethod_New(cfunc); descr = PyStaticMethod_New(cfunc);
@ -4879,7 +4879,7 @@ add_tp_new_wrapper(PyTypeObject *type)
if (_PyDict_GetItemId(type->tp_dict, &PyId___new__) != NULL) if (_PyDict_GetItemId(type->tp_dict, &PyId___new__) != NULL)
return 0; return 0;
func = PyCFunction_New(tp_new_methoddef, (PyObject *)type); func = PyCFunction_NewEx(tp_new_methoddef, (PyObject *)type, NULL);
if (func == NULL) if (func == NULL)
return -1; return -1;
if (_PyDict_SetItemId(type->tp_dict, &PyId___new__, func)) { if (_PyDict_SetItemId(type->tp_dict, &PyId___new__, func)) {

View file

@ -38,6 +38,7 @@ EXPORTS
PyCFunction_GetFlags=python34.PyCFunction_GetFlags PyCFunction_GetFlags=python34.PyCFunction_GetFlags
PyCFunction_GetFunction=python34.PyCFunction_GetFunction PyCFunction_GetFunction=python34.PyCFunction_GetFunction
PyCFunction_GetSelf=python34.PyCFunction_GetSelf PyCFunction_GetSelf=python34.PyCFunction_GetSelf
PyCFunction_New=python34.PyCFunction_New
PyCFunction_NewEx=python34.PyCFunction_NewEx PyCFunction_NewEx=python34.PyCFunction_NewEx
PyCFunction_Type=python34.PyCFunction_Type DATA PyCFunction_Type=python34.PyCFunction_Type DATA
PyCallIter_New=python34.PyCallIter_New PyCallIter_New=python34.PyCallIter_New

View file

@ -37,6 +37,7 @@ PyCFunction_ClearFreeList
PyCFunction_GetFlags PyCFunction_GetFlags
PyCFunction_GetFunction PyCFunction_GetFunction
PyCFunction_GetSelf PyCFunction_GetSelf
PyCFunction_New
PyCFunction_NewEx PyCFunction_NewEx
PyCFunction_Type PyCFunction_Type
PyCallIter_New PyCallIter_New

View file

@ -1026,7 +1026,7 @@ static int _PyCodecRegistry_Init(void)
if (interp->codec_error_registry) { if (interp->codec_error_registry) {
for (i = 0; i < Py_ARRAY_LENGTH(methods); ++i) { for (i = 0; i < Py_ARRAY_LENGTH(methods); ++i) {
PyObject *func = PyCFunction_New(&methods[i].def, NULL); PyObject *func = PyCFunction_NewEx(&methods[i].def, NULL, NULL);
int res; int res;
if (!func) if (!func)
Py_FatalError("can't initialize codec error registry"); Py_FatalError("can't initialize codec error registry");