mirror of https://github.com/python/cpython
contains and rich compare slots use fast call
Issue #27128. Modify slot_sq_contains() and slot_tp_richcompare() to use fast call to avoid a temporary tuple to pass a single positional parameter.
This commit is contained in:
parent
8a31c82093
commit
a7720f61aa
|
@ -5853,7 +5853,7 @@ slot_sq_ass_item(PyObject *self, Py_ssize_t index, PyObject *value)
|
||||||
static int
|
static int
|
||||||
slot_sq_contains(PyObject *self, PyObject *value)
|
slot_sq_contains(PyObject *self, PyObject *value)
|
||||||
{
|
{
|
||||||
PyObject *func, *res, *args;
|
PyObject *func, *res;
|
||||||
int result = -1;
|
int result = -1;
|
||||||
_Py_IDENTIFIER(__contains__);
|
_Py_IDENTIFIER(__contains__);
|
||||||
|
|
||||||
|
@ -5866,13 +5866,7 @@ slot_sq_contains(PyObject *self, PyObject *value)
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
if (func != NULL) {
|
if (func != NULL) {
|
||||||
args = PyTuple_Pack(1, value);
|
res = _PyObject_FastCall(func, &value, 1, NULL);
|
||||||
if (args == NULL)
|
|
||||||
res = NULL;
|
|
||||||
else {
|
|
||||||
res = PyObject_Call(func, args, NULL);
|
|
||||||
Py_DECREF(args);
|
|
||||||
}
|
|
||||||
Py_DECREF(func);
|
Py_DECREF(func);
|
||||||
if (res != NULL) {
|
if (res != NULL) {
|
||||||
result = PyObject_IsTrue(res);
|
result = PyObject_IsTrue(res);
|
||||||
|
@ -6225,20 +6219,14 @@ static _Py_Identifier name_op[] = {
|
||||||
static PyObject *
|
static PyObject *
|
||||||
slot_tp_richcompare(PyObject *self, PyObject *other, int op)
|
slot_tp_richcompare(PyObject *self, PyObject *other, int op)
|
||||||
{
|
{
|
||||||
PyObject *func, *args, *res;
|
PyObject *func, *res;
|
||||||
|
|
||||||
func = lookup_method(self, &name_op[op]);
|
func = lookup_method(self, &name_op[op]);
|
||||||
if (func == NULL) {
|
if (func == NULL) {
|
||||||
PyErr_Clear();
|
PyErr_Clear();
|
||||||
Py_RETURN_NOTIMPLEMENTED;
|
Py_RETURN_NOTIMPLEMENTED;
|
||||||
}
|
}
|
||||||
args = PyTuple_Pack(1, other);
|
res = _PyObject_FastCall(func, &other, 1, NULL);
|
||||||
if (args == NULL)
|
|
||||||
res = NULL;
|
|
||||||
else {
|
|
||||||
res = PyObject_Call(func, args, NULL);
|
|
||||||
Py_DECREF(args);
|
|
||||||
}
|
|
||||||
Py_DECREF(func);
|
Py_DECREF(func);
|
||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue