Issue #27809: tzinfo_reduce() uses fast call
This commit is contained in:
parent
f45a56150b
commit
d1584d3e7e
|
@ -3133,37 +3133,34 @@ Fail:
|
||||||
static PyObject *
|
static PyObject *
|
||||||
tzinfo_reduce(PyObject *self)
|
tzinfo_reduce(PyObject *self)
|
||||||
{
|
{
|
||||||
PyObject *args, *state, *tmp;
|
PyObject *args, *state;
|
||||||
PyObject *getinitargs, *getstate;
|
PyObject *getinitargs, *getstate;
|
||||||
_Py_IDENTIFIER(__getinitargs__);
|
_Py_IDENTIFIER(__getinitargs__);
|
||||||
_Py_IDENTIFIER(__getstate__);
|
_Py_IDENTIFIER(__getstate__);
|
||||||
|
|
||||||
tmp = PyTuple_New(0);
|
|
||||||
if (tmp == NULL)
|
|
||||||
return NULL;
|
|
||||||
|
|
||||||
getinitargs = _PyObject_GetAttrId(self, &PyId___getinitargs__);
|
getinitargs = _PyObject_GetAttrId(self, &PyId___getinitargs__);
|
||||||
if (getinitargs != NULL) {
|
if (getinitargs != NULL) {
|
||||||
args = PyObject_CallObject(getinitargs, tmp);
|
args = _PyObject_CallNoArg(getinitargs);
|
||||||
Py_DECREF(getinitargs);
|
Py_DECREF(getinitargs);
|
||||||
if (args == NULL) {
|
if (args == NULL) {
|
||||||
Py_DECREF(tmp);
|
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
PyErr_Clear();
|
PyErr_Clear();
|
||||||
args = tmp;
|
|
||||||
Py_INCREF(args);
|
args = PyTuple_New(0);
|
||||||
|
if (args == NULL) {
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
getstate = _PyObject_GetAttrId(self, &PyId___getstate__);
|
getstate = _PyObject_GetAttrId(self, &PyId___getstate__);
|
||||||
if (getstate != NULL) {
|
if (getstate != NULL) {
|
||||||
state = PyObject_CallObject(getstate, tmp);
|
state = _PyObject_CallNoArg(getstate);
|
||||||
Py_DECREF(getstate);
|
Py_DECREF(getstate);
|
||||||
if (state == NULL) {
|
if (state == NULL) {
|
||||||
Py_DECREF(args);
|
Py_DECREF(args);
|
||||||
Py_DECREF(tmp);
|
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -3172,13 +3169,12 @@ tzinfo_reduce(PyObject *self)
|
||||||
PyErr_Clear();
|
PyErr_Clear();
|
||||||
state = Py_None;
|
state = Py_None;
|
||||||
dictptr = _PyObject_GetDictPtr(self);
|
dictptr = _PyObject_GetDictPtr(self);
|
||||||
if (dictptr && *dictptr && PyDict_Size(*dictptr))
|
if (dictptr && *dictptr && PyDict_Size(*dictptr)) {
|
||||||
state = *dictptr;
|
state = *dictptr;
|
||||||
|
}
|
||||||
Py_INCREF(state);
|
Py_INCREF(state);
|
||||||
}
|
}
|
||||||
|
|
||||||
Py_DECREF(tmp);
|
|
||||||
|
|
||||||
if (state == Py_None) {
|
if (state == Py_None) {
|
||||||
Py_DECREF(state);
|
Py_DECREF(state);
|
||||||
return Py_BuildValue("(ON)", Py_TYPE(self), args);
|
return Py_BuildValue("(ON)", Py_TYPE(self), args);
|
||||||
|
|
Loading…
Reference in New Issue