Unverified Kaydet (Commit) aca7f574 authored tarafından Serhiy Storchaka's avatar Serhiy Storchaka Kaydeden (comit) GitHub

bpo-30950: Convert round() to Argument Clinic. (#2740)

üst 00987f62
...@@ -2079,19 +2079,23 @@ builtin_repr(PyObject *module, PyObject *obj) ...@@ -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
*/
number: object
ndigits: object = 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 * static PyObject *
builtin_round(PyObject *self, PyObject *args, PyObject *kwds) builtin_round_impl(PyObject *module, PyObject *number, PyObject *ndigits)
/*[clinic end generated code: output=ff0d9dd176c02ede input=854bc3a217530c3d]*/
{ {
PyObject *ndigits = NULL; PyObject *round, *result;
static char *kwlist[] = {"number", "ndigits", 0};
PyObject *number, *round, *result;
if (!PyArg_ParseTupleAndKeywords(args, kwds, "O|O:round",
kwlist, &number, &ndigits))
return NULL;
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) ...@@ -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[] = { ...@@ -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__, ...@@ -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) ...@@ -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]*/
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment