summaryrefslogtreecommitdiffstats
path: root/Modules
diff options
context:
space:
mode:
authorRaymond Hettinger <rhettinger@users.noreply.github.com>2019-08-25 02:10:39 (GMT)
committerGitHub <noreply@github.com>2019-08-25 02:10:39 (GMT)
commitaef9ad82f7f667cd001a7112d3bc636e918626f7 (patch)
tree71bc842de3236a77c6084e951ecf6061693705c0 /Modules
parent805f8f9afea116c5d4d000570e3d02ae84502f43 (diff)
downloadcpython-aef9ad82f7f667cd001a7112d3bc636e918626f7.zip
cpython-aef9ad82f7f667cd001a7112d3bc636e918626f7.tar.gz
cpython-aef9ad82f7f667cd001a7112d3bc636e918626f7.tar.bz2
bpo-37942: Improve argument clinic float converter (GH-15470)
Diffstat (limited to 'Modules')
-rw-r--r--Modules/clinic/_ssl.c.h14
-rw-r--r--Modules/clinic/_statisticsmodule.c.h38
-rw-r--r--Modules/clinic/audioop.c.h62
-rw-r--r--Modules/clinic/cmathmodule.c.h50
-rw-r--r--Modules/clinic/mathmodule.c.h194
5 files changed, 266 insertions, 92 deletions
diff --git a/Modules/clinic/_ssl.c.h b/Modules/clinic/_ssl.c.h
index b1012f7..adef7db 100644
--- a/Modules/clinic/_ssl.c.h
+++ b/Modules/clinic/_ssl.c.h
@@ -1093,9 +1093,15 @@ _ssl_RAND_add(PyObject *module, PyObject *const *args, Py_ssize_t nargs)
goto exit;
}
}
- entropy = PyFloat_AsDouble(args[1]);
- if (PyErr_Occurred()) {
- goto exit;
+ if (PyFloat_CheckExact(args[1])) {
+ entropy = PyFloat_AS_DOUBLE(args[1]);
+ }
+ else
+ {
+ entropy = PyFloat_AsDouble(args[1]);
+ if (entropy == -1.0 && PyErr_Occurred()) {
+ goto exit;
+ }
}
return_value = _ssl_RAND_add_impl(module, &view, entropy);
@@ -1476,4 +1482,4 @@ exit:
#ifndef _SSL_ENUM_CRLS_METHODDEF
#define _SSL_ENUM_CRLS_METHODDEF
#endif /* !defined(_SSL_ENUM_CRLS_METHODDEF) */
-/*[clinic end generated code: output=a399d0eb393b6fab input=a9049054013a1b77]*/
+/*[clinic end generated code: output=5003112e167cd948 input=a9049054013a1b77]*/
diff --git a/Modules/clinic/_statisticsmodule.c.h b/Modules/clinic/_statisticsmodule.c.h
index f5a2e46..5ff01ef 100644
--- a/Modules/clinic/_statisticsmodule.c.h
+++ b/Modules/clinic/_statisticsmodule.c.h
@@ -26,17 +26,35 @@ _statistics__normal_dist_inv_cdf(PyObject *module, PyObject *const *args, Py_ssi
if (!_PyArg_CheckPositional("_normal_dist_inv_cdf", nargs, 3, 3)) {
goto exit;
}
- p = PyFloat_AsDouble(args[0]);
- if (PyErr_Occurred()) {
- goto exit;
+ if (PyFloat_CheckExact(args[0])) {
+ p = PyFloat_AS_DOUBLE(args[0]);
}
- mu = PyFloat_AsDouble(args[1]);
- if (PyErr_Occurred()) {
- goto exit;
+ else
+ {
+ p = PyFloat_AsDouble(args[0]);
+ if (p == -1.0 && PyErr_Occurred()) {
+ goto exit;
+ }
}
- sigma = PyFloat_AsDouble(args[2]);
- if (PyErr_Occurred()) {
- goto exit;
+ if (PyFloat_CheckExact(args[1])) {
+ mu = PyFloat_AS_DOUBLE(args[1]);
+ }
+ else
+ {
+ mu = PyFloat_AsDouble(args[1]);
+ if (mu == -1.0 && PyErr_Occurred()) {
+ goto exit;
+ }
+ }
+ if (PyFloat_CheckExact(args[2])) {
+ sigma = PyFloat_AS_DOUBLE(args[2]);
+ }
+ else
+ {
+ sigma = PyFloat_AsDouble(args[2]);
+ if (sigma == -1.0 && PyErr_Occurred()) {
+ goto exit;
+ }
}
_return_value = _statistics__normal_dist_inv_cdf_impl(module, p, mu, sigma);
if ((_return_value == -1.0) && PyErr_Occurred()) {
@@ -47,4 +65,4 @@ _statistics__normal_dist_inv_cdf(PyObject *module, PyObject *const *args, Py_ssi
exit:
return return_value;
}
-/*[clinic end generated code: output=ba6af124acd34732 input=a9049054013a1b77]*/
+/*[clinic end generated code: output=c5826928a238326c input=a9049054013a1b77]*/
diff --git a/Modules/clinic/audioop.c.h b/Modules/clinic/audioop.c.h
index 4ea7155..aa17696 100644
--- a/Modules/clinic/audioop.c.h
+++ b/Modules/clinic/audioop.c.h
@@ -615,9 +615,15 @@ audioop_mul(PyObject *module, PyObject *const *args, Py_ssize_t nargs)
if (width == -1 && PyErr_Occurred()) {
goto exit;
}
- factor = PyFloat_AsDouble(args[2]);
- if (PyErr_Occurred()) {
- goto exit;
+ if (PyFloat_CheckExact(args[2])) {
+ factor = PyFloat_AS_DOUBLE(args[2]);
+ }
+ else
+ {
+ factor = PyFloat_AsDouble(args[2]);
+ if (factor == -1.0 && PyErr_Occurred()) {
+ goto exit;
+ }
}
return_value = audioop_mul_impl(module, &fragment, width, factor);
@@ -671,13 +677,25 @@ audioop_tomono(PyObject *module, PyObject *const *args, Py_ssize_t nargs)
if (width == -1 && PyErr_Occurred()) {
goto exit;
}
- lfactor = PyFloat_AsDouble(args[2]);
- if (PyErr_Occurred()) {
- goto exit;
+ if (PyFloat_CheckExact(args[2])) {
+ lfactor = PyFloat_AS_DOUBLE(args[2]);
}
- rfactor = PyFloat_AsDouble(args[3]);
- if (PyErr_Occurred()) {
- goto exit;
+ else
+ {
+ lfactor = PyFloat_AsDouble(args[2]);
+ if (lfactor == -1.0 && PyErr_Occurred()) {
+ goto exit;
+ }
+ }
+ if (PyFloat_CheckExact(args[3])) {
+ rfactor = PyFloat_AS_DOUBLE(args[3]);
+ }
+ else
+ {
+ rfactor = PyFloat_AsDouble(args[3]);
+ if (rfactor == -1.0 && PyErr_Occurred()) {
+ goto exit;
+ }
}
return_value = audioop_tomono_impl(module, &fragment, width, lfactor, rfactor);
@@ -731,13 +749,25 @@ audioop_tostereo(PyObject *module, PyObject *const *args, Py_ssize_t nargs)
if (width == -1 && PyErr_Occurred()) {
goto exit;
}
- lfactor = PyFloat_AsDouble(args[2]);
- if (PyErr_Occurred()) {
- goto exit;
+ if (PyFloat_CheckExact(args[2])) {
+ lfactor = PyFloat_AS_DOUBLE(args[2]);
}
- rfactor = PyFloat_AsDouble(args[3]);
- if (PyErr_Occurred()) {
- goto exit;
+ else
+ {
+ lfactor = PyFloat_AsDouble(args[2]);
+ if (lfactor == -1.0 && PyErr_Occurred()) {
+ goto exit;
+ }
+ }
+ if (PyFloat_CheckExact(args[3])) {
+ rfactor = PyFloat_AS_DOUBLE(args[3]);
+ }
+ else
+ {
+ rfactor = PyFloat_AsDouble(args[3]);
+ if (rfactor == -1.0 && PyErr_Occurred()) {
+ goto exit;
+ }
}
return_value = audioop_tostereo_impl(module, &fragment, width, lfactor, rfactor);
@@ -1439,4 +1469,4 @@ exit:
return return_value;
}
-/*[clinic end generated code: output=2b173a25726252e9 input=a9049054013a1b77]*/
+/*[clinic end generated code: output=af32f4bce9c934fa input=a9049054013a1b77]*/
diff --git a/Modules/clinic/cmathmodule.c.h b/Modules/clinic/cmathmodule.c.h
index 83c498c..3350987 100644
--- a/Modules/clinic/cmathmodule.c.h
+++ b/Modules/clinic/cmathmodule.c.h
@@ -766,13 +766,25 @@ cmath_rect(PyObject *module, PyObject *const *args, Py_ssize_t nargs)
if (!_PyArg_CheckPositional("rect", nargs, 2, 2)) {
goto exit;
}
- r = PyFloat_AsDouble(args[0]);
- if (PyErr_Occurred()) {
- goto exit;
+ if (PyFloat_CheckExact(args[0])) {
+ r = PyFloat_AS_DOUBLE(args[0]);
}
- phi = PyFloat_AsDouble(args[1]);
- if (PyErr_Occurred()) {
- goto exit;
+ else
+ {
+ r = PyFloat_AsDouble(args[0]);
+ if (r == -1.0 && PyErr_Occurred()) {
+ goto exit;
+ }
+ }
+ if (PyFloat_CheckExact(args[1])) {
+ phi = PyFloat_AS_DOUBLE(args[1]);
+ }
+ else
+ {
+ phi = PyFloat_AsDouble(args[1]);
+ if (phi == -1.0 && PyErr_Occurred()) {
+ goto exit;
+ }
}
return_value = cmath_rect_impl(module, r, phi);
@@ -922,17 +934,29 @@ cmath_isclose(PyObject *module, PyObject *const *args, Py_ssize_t nargs, PyObjec
goto skip_optional_kwonly;
}
if (args[2]) {
- rel_tol = PyFloat_AsDouble(args[2]);
- if (PyErr_Occurred()) {
- goto exit;
+ if (PyFloat_CheckExact(args[2])) {
+ rel_tol = PyFloat_AS_DOUBLE(args[2]);
+ }
+ else
+ {
+ rel_tol = PyFloat_AsDouble(args[2]);
+ if (rel_tol == -1.0 && PyErr_Occurred()) {
+ goto exit;
+ }
}
if (!--noptargs) {
goto skip_optional_kwonly;
}
}
- abs_tol = PyFloat_AsDouble(args[3]);
- if (PyErr_Occurred()) {
- goto exit;
+ if (PyFloat_CheckExact(args[3])) {
+ abs_tol = PyFloat_AS_DOUBLE(args[3]);
+ }
+ else
+ {
+ abs_tol = PyFloat_AsDouble(args[3]);
+ if (abs_tol == -1.0 && PyErr_Occurred()) {
+ goto exit;
+ }
}
skip_optional_kwonly:
_return_value = cmath_isclose_impl(module, a, b, rel_tol, abs_tol);
@@ -944,4 +968,4 @@ skip_optional_kwonly:
exit:
return return_value;
}
-/*[clinic end generated code: output=c7afb866e593fa45 input=a9049054013a1b77]*/
+/*[clinic end generated code: output=3ab228947d1709cc input=a9049054013a1b77]*/
diff --git a/Modules/clinic/mathmodule.c.h b/Modules/clinic/mathmodule.c.h
index 84561b9..95d68ee 100644
--- a/Modules/clinic/mathmodule.c.h
+++ b/Modules/clinic/mathmodule.c.h
@@ -117,9 +117,15 @@ math_frexp(PyObject *module, PyObject *arg)
PyObject *return_value = NULL;
double x;
- x = PyFloat_AsDouble(arg);
- if (PyErr_Occurred()) {
- goto exit;
+ if (PyFloat_CheckExact(arg)) {
+ x = PyFloat_AS_DOUBLE(arg);
+ }
+ else
+ {
+ x = PyFloat_AsDouble(arg);
+ if (x == -1.0 && PyErr_Occurred()) {
+ goto exit;
+ }
}
return_value = math_frexp_impl(module, x);
@@ -151,9 +157,15 @@ math_ldexp(PyObject *module, PyObject *const *args, Py_ssize_t nargs)
if (!_PyArg_CheckPositional("ldexp", nargs, 2, 2)) {
goto exit;
}
- x = PyFloat_AsDouble(args[0]);
- if (PyErr_Occurred()) {
- goto exit;
+ if (PyFloat_CheckExact(args[0])) {
+ x = PyFloat_AS_DOUBLE(args[0]);
+ }
+ else
+ {
+ x = PyFloat_AsDouble(args[0]);
+ if (x == -1.0 && PyErr_Occurred()) {
+ goto exit;
+ }
}
i = args[1];
return_value = math_ldexp_impl(module, x, i);
@@ -182,9 +194,15 @@ math_modf(PyObject *module, PyObject *arg)
PyObject *return_value = NULL;
double x;
- x = PyFloat_AsDouble(arg);
- if (PyErr_Occurred()) {
- goto exit;
+ if (PyFloat_CheckExact(arg)) {
+ x = PyFloat_AS_DOUBLE(arg);
+ }
+ else
+ {
+ x = PyFloat_AsDouble(arg);
+ if (x == -1.0 && PyErr_Occurred()) {
+ goto exit;
+ }
}
return_value = math_modf_impl(module, x);
@@ -277,13 +295,25 @@ math_fmod(PyObject *module, PyObject *const *args, Py_ssize_t nargs)
if (!_PyArg_CheckPositional("fmod", nargs, 2, 2)) {
goto exit;
}
- x = PyFloat_AsDouble(args[0]);
- if (PyErr_Occurred()) {
- goto exit;
+ if (PyFloat_CheckExact(args[0])) {
+ x = PyFloat_AS_DOUBLE(args[0]);
}
- y = PyFloat_AsDouble(args[1]);
- if (PyErr_Occurred()) {
- goto exit;
+ else
+ {
+ x = PyFloat_AsDouble(args[0]);
+ if (x == -1.0 && PyErr_Occurred()) {
+ goto exit;
+ }
+ }
+ if (PyFloat_CheckExact(args[1])) {
+ y = PyFloat_AS_DOUBLE(args[1]);
+ }
+ else
+ {
+ y = PyFloat_AsDouble(args[1]);
+ if (y == -1.0 && PyErr_Occurred()) {
+ goto exit;
+ }
}
return_value = math_fmod_impl(module, x, y);
@@ -349,13 +379,25 @@ math_pow(PyObject *module, PyObject *const *args, Py_ssize_t nargs)
if (!_PyArg_CheckPositional("pow", nargs, 2, 2)) {
goto exit;
}
- x = PyFloat_AsDouble(args[0]);
- if (PyErr_Occurred()) {
- goto exit;
+ if (PyFloat_CheckExact(args[0])) {
+ x = PyFloat_AS_DOUBLE(args[0]);
}
- y = PyFloat_AsDouble(args[1]);
- if (PyErr_Occurred()) {
- goto exit;
+ else
+ {
+ x = PyFloat_AsDouble(args[0]);
+ if (x == -1.0 && PyErr_Occurred()) {
+ goto exit;
+ }
+ }
+ if (PyFloat_CheckExact(args[1])) {
+ y = PyFloat_AS_DOUBLE(args[1]);
+ }
+ else
+ {
+ y = PyFloat_AsDouble(args[1]);
+ if (y == -1.0 && PyErr_Occurred()) {
+ goto exit;
+ }
}
return_value = math_pow_impl(module, x, y);
@@ -381,9 +423,15 @@ math_degrees(PyObject *module, PyObject *arg)
PyObject *return_value = NULL;
double x;
- x = PyFloat_AsDouble(arg);
- if (PyErr_Occurred()) {
- goto exit;
+ if (PyFloat_CheckExact(arg)) {
+ x = PyFloat_AS_DOUBLE(arg);
+ }
+ else
+ {
+ x = PyFloat_AsDouble(arg);
+ if (x == -1.0 && PyErr_Occurred()) {
+ goto exit;
+ }
}
return_value = math_degrees_impl(module, x);
@@ -409,9 +457,15 @@ math_radians(PyObject *module, PyObject *arg)
PyObject *return_value = NULL;
double x;
- x = PyFloat_AsDouble(arg);
- if (PyErr_Occurred()) {
- goto exit;
+ if (PyFloat_CheckExact(arg)) {
+ x = PyFloat_AS_DOUBLE(arg);
+ }
+ else
+ {
+ x = PyFloat_AsDouble(arg);
+ if (x == -1.0 && PyErr_Occurred()) {
+ goto exit;
+ }
}
return_value = math_radians_impl(module, x);
@@ -437,9 +491,15 @@ math_isfinite(PyObject *module, PyObject *arg)
PyObject *return_value = NULL;
double x;
- x = PyFloat_AsDouble(arg);
- if (PyErr_Occurred()) {
- goto exit;
+ if (PyFloat_CheckExact(arg)) {
+ x = PyFloat_AS_DOUBLE(arg);
+ }
+ else
+ {
+ x = PyFloat_AsDouble(arg);
+ if (x == -1.0 && PyErr_Occurred()) {
+ goto exit;
+ }
}
return_value = math_isfinite_impl(module, x);
@@ -465,9 +525,15 @@ math_isnan(PyObject *module, PyObject *arg)
PyObject *return_value = NULL;
double x;
- x = PyFloat_AsDouble(arg);
- if (PyErr_Occurred()) {
- goto exit;
+ if (PyFloat_CheckExact(arg)) {
+ x = PyFloat_AS_DOUBLE(arg);
+ }
+ else
+ {
+ x = PyFloat_AsDouble(arg);
+ if (x == -1.0 && PyErr_Occurred()) {
+ goto exit;
+ }
}
return_value = math_isnan_impl(module, x);
@@ -493,9 +559,15 @@ math_isinf(PyObject *module, PyObject *arg)
PyObject *return_value = NULL;
double x;
- x = PyFloat_AsDouble(arg);
- if (PyErr_Occurred()) {
- goto exit;
+ if (PyFloat_CheckExact(arg)) {
+ x = PyFloat_AS_DOUBLE(arg);
+ }
+ else
+ {
+ x = PyFloat_AsDouble(arg);
+ if (x == -1.0 && PyErr_Occurred()) {
+ goto exit;
+ }
}
return_value = math_isinf_impl(module, x);
@@ -550,29 +622,53 @@ math_isclose(PyObject *module, PyObject *const *args, Py_ssize_t nargs, PyObject
if (!args) {
goto exit;
}
- a = PyFloat_AsDouble(args[0]);
- if (PyErr_Occurred()) {
- goto exit;
+ if (PyFloat_CheckExact(args[0])) {
+ a = PyFloat_AS_DOUBLE(args[0]);
}
- b = PyFloat_AsDouble(args[1]);
- if (PyErr_Occurred()) {
- goto exit;
+ else
+ {
+ a = PyFloat_AsDouble(args[0]);
+ if (a == -1.0 && PyErr_Occurred()) {
+ goto exit;
+ }
+ }
+ if (PyFloat_CheckExact(args[1])) {
+ b = PyFloat_AS_DOUBLE(args[1]);
+ }
+ else
+ {
+ b = PyFloat_AsDouble(args[1]);
+ if (b == -1.0 && PyErr_Occurred()) {
+ goto exit;
+ }
}
if (!noptargs) {
goto skip_optional_kwonly;
}
if (args[2]) {
- rel_tol = PyFloat_AsDouble(args[2]);
- if (PyErr_Occurred()) {
- goto exit;
+ if (PyFloat_CheckExact(args[2])) {
+ rel_tol = PyFloat_AS_DOUBLE(args[2]);
+ }
+ else
+ {
+ rel_tol = PyFloat_AsDouble(args[2]);
+ if (rel_tol == -1.0 && PyErr_Occurred()) {
+ goto exit;
+ }
}
if (!--noptargs) {
goto skip_optional_kwonly;
}
}
- abs_tol = PyFloat_AsDouble(args[3]);
- if (PyErr_Occurred()) {
- goto exit;
+ if (PyFloat_CheckExact(args[3])) {
+ abs_tol = PyFloat_AS_DOUBLE(args[3]);
+ }
+ else
+ {
+ abs_tol = PyFloat_AsDouble(args[3]);
+ if (abs_tol == -1.0 && PyErr_Occurred()) {
+ goto exit;
+ }
}
skip_optional_kwonly:
_return_value = math_isclose_impl(module, a, b, rel_tol, abs_tol);
@@ -712,4 +808,4 @@ math_comb(PyObject *module, PyObject *const *args, Py_ssize_t nargs)
exit:
return return_value;
}
-/*[clinic end generated code: output=f93cfe13ab2fdb4e input=a9049054013a1b77]*/
+/*[clinic end generated code: output=9a2b3dc91eb9aadd input=a9049054013a1b77]*/