build_struct_time() uses Py_BuildValue()
Issue #28915: Avoid calling _PyObject_CallMethodId() with "(...)" format to avoid the creation of a temporary tuple: use Py_BuildValue() with _PyObject_CallMethodIdObjArgs().
This commit is contained in:
parent
7e42541d08
commit
2b635971e7
@ -1385,21 +1385,30 @@ static PyObject *
|
|||||||
build_struct_time(int y, int m, int d, int hh, int mm, int ss, int dstflag)
|
build_struct_time(int y, int m, int d, int hh, int mm, int ss, int dstflag)
|
||||||
{
|
{
|
||||||
PyObject *time;
|
PyObject *time;
|
||||||
PyObject *result = NULL;
|
PyObject *result;
|
||||||
|
_Py_IDENTIFIER(struct_time);
|
||||||
|
PyObject *args;
|
||||||
|
|
||||||
|
|
||||||
time = PyImport_ImportModuleNoBlock("time");
|
time = PyImport_ImportModuleNoBlock("time");
|
||||||
if (time != NULL) {
|
if (time == NULL) {
|
||||||
_Py_IDENTIFIER(struct_time);
|
return NULL;
|
||||||
|
|
||||||
result = _PyObject_CallMethodId(time, &PyId_struct_time,
|
|
||||||
"((iiiiiiiii))",
|
|
||||||
y, m, d,
|
|
||||||
hh, mm, ss,
|
|
||||||
weekday(y, m, d),
|
|
||||||
days_before_month(y, m) + d,
|
|
||||||
dstflag);
|
|
||||||
Py_DECREF(time);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
args = Py_BuildValue("iiiiiiiii",
|
||||||
|
y, m, d,
|
||||||
|
hh, mm, ss,
|
||||||
|
weekday(y, m, d),
|
||||||
|
days_before_month(y, m) + d,
|
||||||
|
dstflag);
|
||||||
|
if (args == NULL) {
|
||||||
|
Py_DECREF(time);
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
result = _PyObject_CallMethodIdObjArgs(time, &PyId_struct_time,
|
||||||
|
args, NULL);
|
||||||
|
Py_DECREF(time);
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user