mirror of https://github.com/python/cpython
bpo-30950: Convert round() to Argument Clinic. (#2740)
This commit is contained in:
parent
00987f6230
commit
aca7f574b0
|
@ -2079,19 +2079,23 @@ builtin_repr(PyObject *module, PyObject *obj)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/* AC: cannot convert yet, as needs PEP 457 group support in inspect
|
/*[clinic input]
|
||||||
* or a semantic change to accept None for "ndigits"
|
round as builtin_round
|
||||||
*/
|
|
||||||
static PyObject *
|
|
||||||
builtin_round(PyObject *self, PyObject *args, PyObject *kwds)
|
|
||||||
{
|
|
||||||
PyObject *ndigits = NULL;
|
|
||||||
static char *kwlist[] = {"number", "ndigits", 0};
|
|
||||||
PyObject *number, *round, *result;
|
|
||||||
|
|
||||||
if (!PyArg_ParseTupleAndKeywords(args, kwds, "O|O:round",
|
number: object
|
||||||
kwlist, &number, &ndigits))
|
ndigits: object = NULL
|
||||||
return NULL;
|
|
||||||
|
Round a number to a given precision in decimal digits.
|
||||||
|
|
||||||
|
The return value is an integer if ndigits is omitted or None. Otherwise
|
||||||
|
the return value has the same type as the number. ndigits may be negative.
|
||||||
|
[clinic start generated code]*/
|
||||||
|
|
||||||
|
static PyObject *
|
||||||
|
builtin_round_impl(PyObject *module, PyObject *number, PyObject *ndigits)
|
||||||
|
/*[clinic end generated code: output=ff0d9dd176c02ede input=854bc3a217530c3d]*/
|
||||||
|
{
|
||||||
|
PyObject *round, *result;
|
||||||
|
|
||||||
if (Py_TYPE(number)->tp_dict == NULL) {
|
if (Py_TYPE(number)->tp_dict == NULL) {
|
||||||
if (PyType_Ready(Py_TYPE(number)) < 0)
|
if (PyType_Ready(Py_TYPE(number)) < 0)
|
||||||
|
@ -2115,13 +2119,6 @@ builtin_round(PyObject *self, PyObject *args, PyObject *kwds)
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
PyDoc_STRVAR(round_doc,
|
|
||||||
"round(number[, ndigits]) -> number\n\
|
|
||||||
\n\
|
|
||||||
Round a number to a given precision in decimal digits (default 0 digits).\n\
|
|
||||||
This returns an int when called with one argument, otherwise the\n\
|
|
||||||
same type as the number. ndigits may be negative.");
|
|
||||||
|
|
||||||
|
|
||||||
/*AC: we need to keep the kwds dict intact to easily call into the
|
/*AC: we need to keep the kwds dict intact to easily call into the
|
||||||
* list.sort method, which isn't currently supported in AC. So we just use
|
* list.sort method, which isn't currently supported in AC. So we just use
|
||||||
|
@ -2679,7 +2676,7 @@ static PyMethodDef builtin_methods[] = {
|
||||||
BUILTIN_POW_METHODDEF
|
BUILTIN_POW_METHODDEF
|
||||||
{"print", (PyCFunction)builtin_print, METH_FASTCALL | METH_KEYWORDS, print_doc},
|
{"print", (PyCFunction)builtin_print, METH_FASTCALL | METH_KEYWORDS, print_doc},
|
||||||
BUILTIN_REPR_METHODDEF
|
BUILTIN_REPR_METHODDEF
|
||||||
{"round", (PyCFunction)builtin_round, METH_VARARGS | METH_KEYWORDS, round_doc},
|
BUILTIN_ROUND_METHODDEF
|
||||||
BUILTIN_SETATTR_METHODDEF
|
BUILTIN_SETATTR_METHODDEF
|
||||||
BUILTIN_SORTED_METHODDEF
|
BUILTIN_SORTED_METHODDEF
|
||||||
BUILTIN_SUM_METHODDEF
|
BUILTIN_SUM_METHODDEF
|
||||||
|
|
|
@ -573,6 +573,40 @@ PyDoc_STRVAR(builtin_repr__doc__,
|
||||||
#define BUILTIN_REPR_METHODDEF \
|
#define BUILTIN_REPR_METHODDEF \
|
||||||
{"repr", (PyCFunction)builtin_repr, METH_O, builtin_repr__doc__},
|
{"repr", (PyCFunction)builtin_repr, METH_O, builtin_repr__doc__},
|
||||||
|
|
||||||
|
PyDoc_STRVAR(builtin_round__doc__,
|
||||||
|
"round($module, /, number, ndigits=None)\n"
|
||||||
|
"--\n"
|
||||||
|
"\n"
|
||||||
|
"Round a number to a given precision in decimal digits.\n"
|
||||||
|
"\n"
|
||||||
|
"The return value is an integer if ndigits is omitted or None. Otherwise\n"
|
||||||
|
"the return value has the same type as the number. ndigits may be negative.");
|
||||||
|
|
||||||
|
#define BUILTIN_ROUND_METHODDEF \
|
||||||
|
{"round", (PyCFunction)builtin_round, METH_FASTCALL|METH_KEYWORDS, builtin_round__doc__},
|
||||||
|
|
||||||
|
static PyObject *
|
||||||
|
builtin_round_impl(PyObject *module, PyObject *number, PyObject *ndigits);
|
||||||
|
|
||||||
|
static PyObject *
|
||||||
|
builtin_round(PyObject *module, PyObject **args, Py_ssize_t nargs, PyObject *kwnames)
|
||||||
|
{
|
||||||
|
PyObject *return_value = NULL;
|
||||||
|
static const char * const _keywords[] = {"number", "ndigits", NULL};
|
||||||
|
static _PyArg_Parser _parser = {"O|O:round", _keywords, 0};
|
||||||
|
PyObject *number;
|
||||||
|
PyObject *ndigits = NULL;
|
||||||
|
|
||||||
|
if (!_PyArg_ParseStackAndKeywords(args, nargs, kwnames, &_parser,
|
||||||
|
&number, &ndigits)) {
|
||||||
|
goto exit;
|
||||||
|
}
|
||||||
|
return_value = builtin_round_impl(module, number, ndigits);
|
||||||
|
|
||||||
|
exit:
|
||||||
|
return return_value;
|
||||||
|
}
|
||||||
|
|
||||||
PyDoc_STRVAR(builtin_sum__doc__,
|
PyDoc_STRVAR(builtin_sum__doc__,
|
||||||
"sum($module, iterable, start=0, /)\n"
|
"sum($module, iterable, start=0, /)\n"
|
||||||
"--\n"
|
"--\n"
|
||||||
|
@ -676,4 +710,4 @@ builtin_issubclass(PyObject *module, PyObject **args, Py_ssize_t nargs)
|
||||||
exit:
|
exit:
|
||||||
return return_value;
|
return return_value;
|
||||||
}
|
}
|
||||||
/*[clinic end generated code: output=09752daa8cdd6ec7 input=a9049054013a1b77]*/
|
/*[clinic end generated code: output=d46a224ac804eef1 input=a9049054013a1b77]*/
|
||||||
|
|
Loading…
Reference in New Issue