#define CMATH_RECT_METHODDEF \
{"rect", _PyCFunction_CAST(cmath_rect), METH_FASTCALL, cmath_rect__doc__},
-static PyObject *
+static Py_complex
cmath_rect_impl(PyObject *module, double r, double phi);
static PyObject *
PyObject *return_value = NULL;
double r;
double phi;
+ Py_complex _return_value;
if (!_PyArg_CheckPositional("rect", nargs, 2, 2)) {
goto exit;
goto exit;
}
}
- return_value = cmath_rect_impl(module, r, phi);
+ _return_value = cmath_rect_impl(module, r, phi);
+ if (errno == EDOM) {
+ PyErr_SetString(PyExc_ValueError, "math domain error");
+ goto exit;
+ }
+ else if (errno == ERANGE) {
+ PyErr_SetString(PyExc_OverflowError, "math range error");
+ goto exit;
+ }
+ else {
+ return_value = PyComplex_FromCComplex(_return_value);
+ }
exit:
return return_value;
exit:
return return_value;
}
-/*[clinic end generated code: output=7d5ad4cf258526cd input=a9049054013a1b77]*/
+/*[clinic end generated code: output=89513888cb105a65 input=a9049054013a1b77]*/
};
/*[clinic input]
-cmath.rect
+cmath.rect -> Py_complex_protected
r: double
phi: double
Convert from polar coordinates to rectangular coordinates.
[clinic start generated code]*/
-static PyObject *
+static Py_complex
cmath_rect_impl(PyObject *module, double r, double phi)
-/*[clinic end generated code: output=385a0690925df2d5 input=24c5646d147efd69]*/
+/*[clinic end generated code: output=74ff3d17585f3388 input=50e60c5d28c834e6]*/
{
Py_complex z;
errno = 0;
z.imag = r * sin(phi);
errno = 0;
}
-
- if (errno != 0)
- return math_error();
- else
- return PyComplex_FromCComplex(z);
+ return z;
}
/*[clinic input]