summaryrefslogtreecommitdiffstats
path: root/Python/bltinmodule.c
diff options
context:
space:
mode:
Diffstat (limited to 'Python/bltinmodule.c')
-rw-r--r--Python/bltinmodule.c27
1 files changed, 12 insertions, 15 deletions
diff --git a/Python/bltinmodule.c b/Python/bltinmodule.c
index f776120..7a12a86 100644
--- a/Python/bltinmodule.c
+++ b/Python/bltinmodule.c
@@ -2537,22 +2537,19 @@ static PyObject *
builtin_round_impl(PyObject *module, PyObject *number, PyObject *ndigits)
/*[clinic end generated code: output=ff0d9dd176c02ede input=275678471d7aca15]*/
{
- PyObject *round, *result;
-
- round = _PyObject_LookupSpecial(number, &_Py_ID(__round__));
- if (round == NULL) {
- if (!PyErr_Occurred())
- PyErr_Format(PyExc_TypeError,
- "type %.100s doesn't define __round__ method",
- Py_TYPE(number)->tp_name);
- return NULL;
+ PyObject *result;
+ if (ndigits == Py_None) {
+ result = _PyObject_MaybeCallSpecialNoArgs(number, &_Py_ID(__round__));
+ }
+ else {
+ result = _PyObject_MaybeCallSpecialOneArg(number, &_Py_ID(__round__),
+ ndigits);
+ }
+ if (result == NULL && !PyErr_Occurred()) {
+ PyErr_Format(PyExc_TypeError,
+ "type %.100s doesn't define __round__ method",
+ Py_TYPE(number)->tp_name);
}
-
- if (ndigits == Py_None)
- result = _PyObject_CallNoArgs(round);
- else
- result = PyObject_CallOneArg(round, ndigits);
- Py_DECREF(round);
return result;
}