mirror of
https://github.com/python/cpython.git
synced 2025-07-31 23:23:11 +00:00
Issue #15422: get rid of PyCFunction_New macro
This commit is contained in:
parent
914ab8420e
commit
3ba3a3ee56
9 changed files with 20 additions and 23 deletions
|
@ -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 *);
|
||||||
|
|
||||||
|
|
|
@ -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.
|
||||||
|
|
|
@ -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;
|
||||||
|
|
|
@ -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);
|
||||||
|
|
|
@ -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);
|
|
||||||
}
|
|
||||||
|
|
|
@ -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)) {
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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");
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue