mirror of
				https://github.com/python/cpython.git
				synced 2025-10-31 21:51:50 +00:00 
			
		
		
		
	bpo-38835: Don't use PyFPE_START_PROTECT and PyFPE_END_PROTECT (GH-17231)
The PyFPE_START_PROTECT() and PyFPE_END_PROTECT() macros are empty:
they have been doing nothing for the last year  (since commit
735ae8d139), so stop using them.
			
			
This commit is contained in:
		
							parent
							
								
									01b1cc12e7
								
							
						
					
					
						commit
						be143ec996
					
				
					 9 changed files with 20 additions and 101 deletions
				
			
		|  | @ -0,0 +1,2 @@ | ||||||
|  | The ``PyFPE_START_PROTECT()`` and ``PyFPE_END_PROTECT()`` macros are empty: | ||||||
|  | they have been doing nothing for the last year, so stop using them. | ||||||
|  | @ -2166,11 +2166,9 @@ _tkinter_tkapp_exprdouble_impl(TkappObject *self, const char *s) | ||||||
| 
 | 
 | ||||||
|     CHECK_STRING_LENGTH(s); |     CHECK_STRING_LENGTH(s); | ||||||
|     CHECK_TCL_APPARTMENT; |     CHECK_TCL_APPARTMENT; | ||||||
|     PyFPE_START_PROTECT("Tkapp_ExprDouble", return 0) |  | ||||||
|     ENTER_TCL |     ENTER_TCL | ||||||
|     retval = Tcl_ExprDouble(Tkapp_Interp(self), s, &v); |     retval = Tcl_ExprDouble(Tkapp_Interp(self), s, &v); | ||||||
|     ENTER_OVERLAP |     ENTER_OVERLAP | ||||||
|     PyFPE_END_PROTECT(retval) |  | ||||||
|     if (retval == TCL_ERROR) |     if (retval == TCL_ERROR) | ||||||
|         res = Tkinter_Error(self); |         res = Tkinter_Error(self); | ||||||
|     else |     else | ||||||
|  |  | ||||||
							
								
								
									
										47
									
								
								Modules/clinic/cmathmodule.c.h
									
										
									
										generated
									
									
									
								
							
							
						
						
									
										47
									
								
								Modules/clinic/cmathmodule.c.h
									
										
									
										generated
									
									
									
								
							|  | @ -26,9 +26,8 @@ cmath_acos(PyObject *module, PyObject *arg) | ||||||
|         goto exit; |         goto exit; | ||||||
|     } |     } | ||||||
|     /* modifications for z */ |     /* modifications for z */ | ||||||
|     errno = 0; PyFPE_START_PROTECT("complex function", goto exit); |     errno = 0; | ||||||
|     _return_value = cmath_acos_impl(module, z); |     _return_value = cmath_acos_impl(module, z); | ||||||
|     PyFPE_END_PROTECT(_return_value); |  | ||||||
|     if (errno == EDOM) { |     if (errno == EDOM) { | ||||||
|         PyErr_SetString(PyExc_ValueError, "math domain error"); |         PyErr_SetString(PyExc_ValueError, "math domain error"); | ||||||
|         goto exit; |         goto exit; | ||||||
|  | @ -69,9 +68,8 @@ cmath_acosh(PyObject *module, PyObject *arg) | ||||||
|         goto exit; |         goto exit; | ||||||
|     } |     } | ||||||
|     /* modifications for z */ |     /* modifications for z */ | ||||||
|     errno = 0; PyFPE_START_PROTECT("complex function", goto exit); |     errno = 0; | ||||||
|     _return_value = cmath_acosh_impl(module, z); |     _return_value = cmath_acosh_impl(module, z); | ||||||
|     PyFPE_END_PROTECT(_return_value); |  | ||||||
|     if (errno == EDOM) { |     if (errno == EDOM) { | ||||||
|         PyErr_SetString(PyExc_ValueError, "math domain error"); |         PyErr_SetString(PyExc_ValueError, "math domain error"); | ||||||
|         goto exit; |         goto exit; | ||||||
|  | @ -112,9 +110,8 @@ cmath_asin(PyObject *module, PyObject *arg) | ||||||
|         goto exit; |         goto exit; | ||||||
|     } |     } | ||||||
|     /* modifications for z */ |     /* modifications for z */ | ||||||
|     errno = 0; PyFPE_START_PROTECT("complex function", goto exit); |     errno = 0; | ||||||
|     _return_value = cmath_asin_impl(module, z); |     _return_value = cmath_asin_impl(module, z); | ||||||
|     PyFPE_END_PROTECT(_return_value); |  | ||||||
|     if (errno == EDOM) { |     if (errno == EDOM) { | ||||||
|         PyErr_SetString(PyExc_ValueError, "math domain error"); |         PyErr_SetString(PyExc_ValueError, "math domain error"); | ||||||
|         goto exit; |         goto exit; | ||||||
|  | @ -155,9 +152,8 @@ cmath_asinh(PyObject *module, PyObject *arg) | ||||||
|         goto exit; |         goto exit; | ||||||
|     } |     } | ||||||
|     /* modifications for z */ |     /* modifications for z */ | ||||||
|     errno = 0; PyFPE_START_PROTECT("complex function", goto exit); |     errno = 0; | ||||||
|     _return_value = cmath_asinh_impl(module, z); |     _return_value = cmath_asinh_impl(module, z); | ||||||
|     PyFPE_END_PROTECT(_return_value); |  | ||||||
|     if (errno == EDOM) { |     if (errno == EDOM) { | ||||||
|         PyErr_SetString(PyExc_ValueError, "math domain error"); |         PyErr_SetString(PyExc_ValueError, "math domain error"); | ||||||
|         goto exit; |         goto exit; | ||||||
|  | @ -198,9 +194,8 @@ cmath_atan(PyObject *module, PyObject *arg) | ||||||
|         goto exit; |         goto exit; | ||||||
|     } |     } | ||||||
|     /* modifications for z */ |     /* modifications for z */ | ||||||
|     errno = 0; PyFPE_START_PROTECT("complex function", goto exit); |     errno = 0; | ||||||
|     _return_value = cmath_atan_impl(module, z); |     _return_value = cmath_atan_impl(module, z); | ||||||
|     PyFPE_END_PROTECT(_return_value); |  | ||||||
|     if (errno == EDOM) { |     if (errno == EDOM) { | ||||||
|         PyErr_SetString(PyExc_ValueError, "math domain error"); |         PyErr_SetString(PyExc_ValueError, "math domain error"); | ||||||
|         goto exit; |         goto exit; | ||||||
|  | @ -241,9 +236,8 @@ cmath_atanh(PyObject *module, PyObject *arg) | ||||||
|         goto exit; |         goto exit; | ||||||
|     } |     } | ||||||
|     /* modifications for z */ |     /* modifications for z */ | ||||||
|     errno = 0; PyFPE_START_PROTECT("complex function", goto exit); |     errno = 0; | ||||||
|     _return_value = cmath_atanh_impl(module, z); |     _return_value = cmath_atanh_impl(module, z); | ||||||
|     PyFPE_END_PROTECT(_return_value); |  | ||||||
|     if (errno == EDOM) { |     if (errno == EDOM) { | ||||||
|         PyErr_SetString(PyExc_ValueError, "math domain error"); |         PyErr_SetString(PyExc_ValueError, "math domain error"); | ||||||
|         goto exit; |         goto exit; | ||||||
|  | @ -284,9 +278,8 @@ cmath_cos(PyObject *module, PyObject *arg) | ||||||
|         goto exit; |         goto exit; | ||||||
|     } |     } | ||||||
|     /* modifications for z */ |     /* modifications for z */ | ||||||
|     errno = 0; PyFPE_START_PROTECT("complex function", goto exit); |     errno = 0; | ||||||
|     _return_value = cmath_cos_impl(module, z); |     _return_value = cmath_cos_impl(module, z); | ||||||
|     PyFPE_END_PROTECT(_return_value); |  | ||||||
|     if (errno == EDOM) { |     if (errno == EDOM) { | ||||||
|         PyErr_SetString(PyExc_ValueError, "math domain error"); |         PyErr_SetString(PyExc_ValueError, "math domain error"); | ||||||
|         goto exit; |         goto exit; | ||||||
|  | @ -327,9 +320,8 @@ cmath_cosh(PyObject *module, PyObject *arg) | ||||||
|         goto exit; |         goto exit; | ||||||
|     } |     } | ||||||
|     /* modifications for z */ |     /* modifications for z */ | ||||||
|     errno = 0; PyFPE_START_PROTECT("complex function", goto exit); |     errno = 0; | ||||||
|     _return_value = cmath_cosh_impl(module, z); |     _return_value = cmath_cosh_impl(module, z); | ||||||
|     PyFPE_END_PROTECT(_return_value); |  | ||||||
|     if (errno == EDOM) { |     if (errno == EDOM) { | ||||||
|         PyErr_SetString(PyExc_ValueError, "math domain error"); |         PyErr_SetString(PyExc_ValueError, "math domain error"); | ||||||
|         goto exit; |         goto exit; | ||||||
|  | @ -370,9 +362,8 @@ cmath_exp(PyObject *module, PyObject *arg) | ||||||
|         goto exit; |         goto exit; | ||||||
|     } |     } | ||||||
|     /* modifications for z */ |     /* modifications for z */ | ||||||
|     errno = 0; PyFPE_START_PROTECT("complex function", goto exit); |     errno = 0; | ||||||
|     _return_value = cmath_exp_impl(module, z); |     _return_value = cmath_exp_impl(module, z); | ||||||
|     PyFPE_END_PROTECT(_return_value); |  | ||||||
|     if (errno == EDOM) { |     if (errno == EDOM) { | ||||||
|         PyErr_SetString(PyExc_ValueError, "math domain error"); |         PyErr_SetString(PyExc_ValueError, "math domain error"); | ||||||
|         goto exit; |         goto exit; | ||||||
|  | @ -413,9 +404,8 @@ cmath_log10(PyObject *module, PyObject *arg) | ||||||
|         goto exit; |         goto exit; | ||||||
|     } |     } | ||||||
|     /* modifications for z */ |     /* modifications for z */ | ||||||
|     errno = 0; PyFPE_START_PROTECT("complex function", goto exit); |     errno = 0; | ||||||
|     _return_value = cmath_log10_impl(module, z); |     _return_value = cmath_log10_impl(module, z); | ||||||
|     PyFPE_END_PROTECT(_return_value); |  | ||||||
|     if (errno == EDOM) { |     if (errno == EDOM) { | ||||||
|         PyErr_SetString(PyExc_ValueError, "math domain error"); |         PyErr_SetString(PyExc_ValueError, "math domain error"); | ||||||
|         goto exit; |         goto exit; | ||||||
|  | @ -456,9 +446,8 @@ cmath_sin(PyObject *module, PyObject *arg) | ||||||
|         goto exit; |         goto exit; | ||||||
|     } |     } | ||||||
|     /* modifications for z */ |     /* modifications for z */ | ||||||
|     errno = 0; PyFPE_START_PROTECT("complex function", goto exit); |     errno = 0; | ||||||
|     _return_value = cmath_sin_impl(module, z); |     _return_value = cmath_sin_impl(module, z); | ||||||
|     PyFPE_END_PROTECT(_return_value); |  | ||||||
|     if (errno == EDOM) { |     if (errno == EDOM) { | ||||||
|         PyErr_SetString(PyExc_ValueError, "math domain error"); |         PyErr_SetString(PyExc_ValueError, "math domain error"); | ||||||
|         goto exit; |         goto exit; | ||||||
|  | @ -499,9 +488,8 @@ cmath_sinh(PyObject *module, PyObject *arg) | ||||||
|         goto exit; |         goto exit; | ||||||
|     } |     } | ||||||
|     /* modifications for z */ |     /* modifications for z */ | ||||||
|     errno = 0; PyFPE_START_PROTECT("complex function", goto exit); |     errno = 0; | ||||||
|     _return_value = cmath_sinh_impl(module, z); |     _return_value = cmath_sinh_impl(module, z); | ||||||
|     PyFPE_END_PROTECT(_return_value); |  | ||||||
|     if (errno == EDOM) { |     if (errno == EDOM) { | ||||||
|         PyErr_SetString(PyExc_ValueError, "math domain error"); |         PyErr_SetString(PyExc_ValueError, "math domain error"); | ||||||
|         goto exit; |         goto exit; | ||||||
|  | @ -542,9 +530,8 @@ cmath_sqrt(PyObject *module, PyObject *arg) | ||||||
|         goto exit; |         goto exit; | ||||||
|     } |     } | ||||||
|     /* modifications for z */ |     /* modifications for z */ | ||||||
|     errno = 0; PyFPE_START_PROTECT("complex function", goto exit); |     errno = 0; | ||||||
|     _return_value = cmath_sqrt_impl(module, z); |     _return_value = cmath_sqrt_impl(module, z); | ||||||
|     PyFPE_END_PROTECT(_return_value); |  | ||||||
|     if (errno == EDOM) { |     if (errno == EDOM) { | ||||||
|         PyErr_SetString(PyExc_ValueError, "math domain error"); |         PyErr_SetString(PyExc_ValueError, "math domain error"); | ||||||
|         goto exit; |         goto exit; | ||||||
|  | @ -585,9 +572,8 @@ cmath_tan(PyObject *module, PyObject *arg) | ||||||
|         goto exit; |         goto exit; | ||||||
|     } |     } | ||||||
|     /* modifications for z */ |     /* modifications for z */ | ||||||
|     errno = 0; PyFPE_START_PROTECT("complex function", goto exit); |     errno = 0; | ||||||
|     _return_value = cmath_tan_impl(module, z); |     _return_value = cmath_tan_impl(module, z); | ||||||
|     PyFPE_END_PROTECT(_return_value); |  | ||||||
|     if (errno == EDOM) { |     if (errno == EDOM) { | ||||||
|         PyErr_SetString(PyExc_ValueError, "math domain error"); |         PyErr_SetString(PyExc_ValueError, "math domain error"); | ||||||
|         goto exit; |         goto exit; | ||||||
|  | @ -628,9 +614,8 @@ cmath_tanh(PyObject *module, PyObject *arg) | ||||||
|         goto exit; |         goto exit; | ||||||
|     } |     } | ||||||
|     /* modifications for z */ |     /* modifications for z */ | ||||||
|     errno = 0; PyFPE_START_PROTECT("complex function", goto exit); |     errno = 0; | ||||||
|     _return_value = cmath_tanh_impl(module, z); |     _return_value = cmath_tanh_impl(module, z); | ||||||
|     PyFPE_END_PROTECT(_return_value); |  | ||||||
|     if (errno == EDOM) { |     if (errno == EDOM) { | ||||||
|         PyErr_SetString(PyExc_ValueError, "math domain error"); |         PyErr_SetString(PyExc_ValueError, "math domain error"); | ||||||
|         goto exit; |         goto exit; | ||||||
|  | @ -968,4 +953,4 @@ skip_optional_kwonly: | ||||||
| exit: | exit: | ||||||
|     return return_value; |     return return_value; | ||||||
| } | } | ||||||
| /*[clinic end generated code: output=3edc4484b10ae752 input=a9049054013a1b77]*/ | /*[clinic end generated code: output=353347db2e808e0d input=a9049054013a1b77]*/ | ||||||
|  |  | ||||||
|  | @ -17,7 +17,7 @@ module cmath | ||||||
| /*[python input]
 | /*[python input]
 | ||||||
| class Py_complex_protected_converter(Py_complex_converter): | class Py_complex_protected_converter(Py_complex_converter): | ||||||
|     def modify(self): |     def modify(self): | ||||||
|         return 'errno = 0; PyFPE_START_PROTECT("complex function", goto exit);' |         return 'errno = 0;' | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| class Py_complex_protected_return_converter(CReturnConverter): | class Py_complex_protected_return_converter(CReturnConverter): | ||||||
|  | @ -26,7 +26,6 @@ class Py_complex_protected_return_converter(CReturnConverter): | ||||||
|     def render(self, function, data): |     def render(self, function, data): | ||||||
|         self.declare(data) |         self.declare(data) | ||||||
|         data.return_conversion.append(""" |         data.return_conversion.append(""" | ||||||
| PyFPE_END_PROTECT(_return_value); |  | ||||||
| if (errno == EDOM) { | if (errno == EDOM) { | ||||||
|     PyErr_SetString(PyExc_ValueError, "math domain error"); |     PyErr_SetString(PyExc_ValueError, "math domain error"); | ||||||
|     goto exit; |     goto exit; | ||||||
|  | @ -40,7 +39,7 @@ else { | ||||||
| } | } | ||||||
| """.strip()) | """.strip()) | ||||||
| [python start generated code]*/ | [python start generated code]*/ | ||||||
| /*[python end generated code: output=da39a3ee5e6b4b0d input=345daa075b1028e7]*/ | /*[python end generated code: output=da39a3ee5e6b4b0d input=8b27adb674c08321]*/ | ||||||
| 
 | 
 | ||||||
| #if (FLT_RADIX != 2 && FLT_RADIX != 16) | #if (FLT_RADIX != 2 && FLT_RADIX != 16) | ||||||
| #error "Modules/cmathmodule.c expects FLT_RADIX to be 2 or 16" | #error "Modules/cmathmodule.c expects FLT_RADIX to be 2 or 16" | ||||||
|  | @ -960,7 +959,6 @@ cmath_log_impl(PyObject *module, Py_complex x, PyObject *y_obj) | ||||||
|     Py_complex y; |     Py_complex y; | ||||||
| 
 | 
 | ||||||
|     errno = 0; |     errno = 0; | ||||||
|     PyFPE_START_PROTECT("complex function", return 0) |  | ||||||
|     x = c_log(x); |     x = c_log(x); | ||||||
|     if (y_obj != NULL) { |     if (y_obj != NULL) { | ||||||
|         y = PyComplex_AsCComplex(y_obj); |         y = PyComplex_AsCComplex(y_obj); | ||||||
|  | @ -970,7 +968,6 @@ cmath_log_impl(PyObject *module, Py_complex x, PyObject *y_obj) | ||||||
|         y = c_log(y); |         y = c_log(y); | ||||||
|         x = _Py_c_quot(x, y); |         x = _Py_c_quot(x, y); | ||||||
|     } |     } | ||||||
|     PyFPE_END_PROTECT(x) |  | ||||||
|     if (errno != 0) |     if (errno != 0) | ||||||
|         return math_error(); |         return math_error(); | ||||||
|     return PyComplex_FromCComplex(x); |     return PyComplex_FromCComplex(x); | ||||||
|  | @ -1008,9 +1005,7 @@ cmath_phase_impl(PyObject *module, Py_complex z) | ||||||
|     double phi; |     double phi; | ||||||
| 
 | 
 | ||||||
|     errno = 0; |     errno = 0; | ||||||
|     PyFPE_START_PROTECT("arg function", return 0) |  | ||||||
|     phi = c_atan2(z); |     phi = c_atan2(z); | ||||||
|     PyFPE_END_PROTECT(phi) |  | ||||||
|     if (errno != 0) |     if (errno != 0) | ||||||
|         return math_error(); |         return math_error(); | ||||||
|     else |     else | ||||||
|  | @ -1035,10 +1030,8 @@ cmath_polar_impl(PyObject *module, Py_complex z) | ||||||
|     double r, phi; |     double r, phi; | ||||||
| 
 | 
 | ||||||
|     errno = 0; |     errno = 0; | ||||||
|     PyFPE_START_PROTECT("polar function", return 0) |  | ||||||
|     phi = c_atan2(z); /* should not cause any exception */ |     phi = c_atan2(z); /* should not cause any exception */ | ||||||
|     r = _Py_c_abs(z); /* sets errno to ERANGE on overflow */ |     r = _Py_c_abs(z); /* sets errno to ERANGE on overflow */ | ||||||
|     PyFPE_END_PROTECT(r) |  | ||||||
|     if (errno != 0) |     if (errno != 0) | ||||||
|         return math_error(); |         return math_error(); | ||||||
|     else |     else | ||||||
|  | @ -1074,7 +1067,6 @@ cmath_rect_impl(PyObject *module, double r, double phi) | ||||||
| { | { | ||||||
|     Py_complex z; |     Py_complex z; | ||||||
|     errno = 0; |     errno = 0; | ||||||
|     PyFPE_START_PROTECT("rect function", return 0) |  | ||||||
| 
 | 
 | ||||||
|     /* deal with special values */ |     /* deal with special values */ | ||||||
|     if (!Py_IS_FINITE(r) || !Py_IS_FINITE(phi)) { |     if (!Py_IS_FINITE(r) || !Py_IS_FINITE(phi)) { | ||||||
|  | @ -1116,7 +1108,6 @@ cmath_rect_impl(PyObject *module, double r, double phi) | ||||||
|         errno = 0; |         errno = 0; | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     PyFPE_END_PROTECT(z) |  | ||||||
|     if (errno != 0) |     if (errno != 0) | ||||||
|         return math_error(); |         return math_error(); | ||||||
|     else |     else | ||||||
|  |  | ||||||
|  | @ -936,9 +936,7 @@ math_1_to_whatever(PyObject *arg, double (*func) (double), | ||||||
|     if (x == -1.0 && PyErr_Occurred()) |     if (x == -1.0 && PyErr_Occurred()) | ||||||
|         return NULL; |         return NULL; | ||||||
|     errno = 0; |     errno = 0; | ||||||
|     PyFPE_START_PROTECT("in math_1", return 0); |  | ||||||
|     r = (*func)(x); |     r = (*func)(x); | ||||||
|     PyFPE_END_PROTECT(r); |  | ||||||
|     if (Py_IS_NAN(r) && !Py_IS_NAN(x)) { |     if (Py_IS_NAN(r) && !Py_IS_NAN(x)) { | ||||||
|         PyErr_SetString(PyExc_ValueError, |         PyErr_SetString(PyExc_ValueError, | ||||||
|                         "math domain error"); /* invalid arg */ |                         "math domain error"); /* invalid arg */ | ||||||
|  | @ -972,9 +970,7 @@ math_1a(PyObject *arg, double (*func) (double)) | ||||||
|     if (x == -1.0 && PyErr_Occurred()) |     if (x == -1.0 && PyErr_Occurred()) | ||||||
|         return NULL; |         return NULL; | ||||||
|     errno = 0; |     errno = 0; | ||||||
|     PyFPE_START_PROTECT("in math_1a", return 0); |  | ||||||
|     r = (*func)(x); |     r = (*func)(x); | ||||||
|     PyFPE_END_PROTECT(r); |  | ||||||
|     if (errno && is_error(r)) |     if (errno && is_error(r)) | ||||||
|         return NULL; |         return NULL; | ||||||
|     return PyFloat_FromDouble(r); |     return PyFloat_FromDouble(r); | ||||||
|  | @ -1025,9 +1021,7 @@ math_2(PyObject *const *args, Py_ssize_t nargs, | ||||||
|     if ((x == -1.0 || y == -1.0) && PyErr_Occurred()) |     if ((x == -1.0 || y == -1.0) && PyErr_Occurred()) | ||||||
|         return NULL; |         return NULL; | ||||||
|     errno = 0; |     errno = 0; | ||||||
|     PyFPE_START_PROTECT("in math_2", return 0); |  | ||||||
|     r = (*func)(x, y); |     r = (*func)(x, y); | ||||||
|     PyFPE_END_PROTECT(r); |  | ||||||
|     if (Py_IS_NAN(r)) { |     if (Py_IS_NAN(r)) { | ||||||
|         if (!Py_IS_NAN(x) && !Py_IS_NAN(y)) |         if (!Py_IS_NAN(x) && !Py_IS_NAN(y)) | ||||||
|             errno = EDOM; |             errno = EDOM; | ||||||
|  | @ -1340,8 +1334,6 @@ math_fsum(PyObject *module, PyObject *seq) | ||||||
|     if (iter == NULL) |     if (iter == NULL) | ||||||
|         return NULL; |         return NULL; | ||||||
| 
 | 
 | ||||||
|     PyFPE_START_PROTECT("fsum", Py_DECREF(iter); return NULL) |  | ||||||
| 
 |  | ||||||
|     for(;;) {           /* for x in iterable */ |     for(;;) {           /* for x in iterable */ | ||||||
|         assert(0 <= n && n <= m); |         assert(0 <= n && n <= m); | ||||||
|         assert((m == NUM_PARTIALS && p == ps) || |         assert((m == NUM_PARTIALS && p == ps) || | ||||||
|  | @ -1436,7 +1428,6 @@ math_fsum(PyObject *module, PyObject *seq) | ||||||
|     sum = PyFloat_FromDouble(hi); |     sum = PyFloat_FromDouble(hi); | ||||||
| 
 | 
 | ||||||
|   _fsum_error: |   _fsum_error: | ||||||
|     PyFPE_END_PROTECT(hi) |  | ||||||
|     Py_DECREF(iter); |     Py_DECREF(iter); | ||||||
|     if (p != ps) |     if (p != ps) | ||||||
|         PyMem_Free(p); |         PyMem_Free(p); | ||||||
|  | @ -2111,9 +2102,7 @@ math_frexp_impl(PyObject *module, double x) | ||||||
|         i = 0; |         i = 0; | ||||||
|     } |     } | ||||||
|     else { |     else { | ||||||
|         PyFPE_START_PROTECT("in math_frexp", return 0); |  | ||||||
|         x = frexp(x, &i); |         x = frexp(x, &i); | ||||||
|         PyFPE_END_PROTECT(x); |  | ||||||
|     } |     } | ||||||
|     return Py_BuildValue("(di)", x, i); |     return Py_BuildValue("(di)", x, i); | ||||||
| } | } | ||||||
|  | @ -2168,9 +2157,7 @@ math_ldexp_impl(PyObject *module, double x, PyObject *i) | ||||||
|         errno = 0; |         errno = 0; | ||||||
|     } else { |     } else { | ||||||
|         errno = 0; |         errno = 0; | ||||||
|         PyFPE_START_PROTECT("in math_ldexp", return 0); |  | ||||||
|         r = ldexp(x, (int)exp); |         r = ldexp(x, (int)exp); | ||||||
|         PyFPE_END_PROTECT(r); |  | ||||||
|         if (Py_IS_INFINITY(r)) |         if (Py_IS_INFINITY(r)) | ||||||
|             errno = ERANGE; |             errno = ERANGE; | ||||||
|     } |     } | ||||||
|  | @ -2207,9 +2194,7 @@ math_modf_impl(PyObject *module, double x) | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     errno = 0; |     errno = 0; | ||||||
|     PyFPE_START_PROTECT("in math_modf", return 0); |  | ||||||
|     x = modf(x, &y); |     x = modf(x, &y); | ||||||
|     PyFPE_END_PROTECT(x); |  | ||||||
|     return Py_BuildValue("(dd)", x, y); |     return Py_BuildValue("(dd)", x, y); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | @ -2356,9 +2341,7 @@ math_fmod_impl(PyObject *module, double x, double y) | ||||||
|     if (Py_IS_INFINITY(y) && Py_IS_FINITE(x)) |     if (Py_IS_INFINITY(y) && Py_IS_FINITE(x)) | ||||||
|         return PyFloat_FromDouble(x); |         return PyFloat_FromDouble(x); | ||||||
|     errno = 0; |     errno = 0; | ||||||
|     PyFPE_START_PROTECT("in math_fmod", return 0); |  | ||||||
|     r = fmod(x, y); |     r = fmod(x, y); | ||||||
|     PyFPE_END_PROTECT(r); |  | ||||||
|     if (Py_IS_NAN(r)) { |     if (Py_IS_NAN(r)) { | ||||||
|         if (!Py_IS_NAN(x) && !Py_IS_NAN(y)) |         if (!Py_IS_NAN(x) && !Py_IS_NAN(y)) | ||||||
|             errno = EDOM; |             errno = EDOM; | ||||||
|  | @ -2646,9 +2629,7 @@ math_pow_impl(PyObject *module, double x, double y) | ||||||
|     else { |     else { | ||||||
|         /* let libm handle finite**finite */ |         /* let libm handle finite**finite */ | ||||||
|         errno = 0; |         errno = 0; | ||||||
|         PyFPE_START_PROTECT("in math_pow", return 0); |  | ||||||
|         r = pow(x, y); |         r = pow(x, y); | ||||||
|         PyFPE_END_PROTECT(r); |  | ||||||
|         /* a NaN result should arise only from (-ve)**(finite
 |         /* a NaN result should arise only from (-ve)**(finite
 | ||||||
|            non-integer); in this case we want to raise ValueError. */ |            non-integer); in this case we want to raise ValueError. */ | ||||||
|         if (!Py_IS_FINITE(r)) { |         if (!Py_IS_FINITE(r)) { | ||||||
|  |  | ||||||
|  | @ -466,9 +466,7 @@ complex_add(PyObject *v, PyObject *w) | ||||||
|     Py_complex a, b; |     Py_complex a, b; | ||||||
|     TO_COMPLEX(v, a); |     TO_COMPLEX(v, a); | ||||||
|     TO_COMPLEX(w, b); |     TO_COMPLEX(w, b); | ||||||
|     PyFPE_START_PROTECT("complex_add", return 0) |  | ||||||
|     result = _Py_c_sum(a, b); |     result = _Py_c_sum(a, b); | ||||||
|     PyFPE_END_PROTECT(result) |  | ||||||
|     return PyComplex_FromCComplex(result); |     return PyComplex_FromCComplex(result); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | @ -479,9 +477,7 @@ complex_sub(PyObject *v, PyObject *w) | ||||||
|     Py_complex a, b; |     Py_complex a, b; | ||||||
|     TO_COMPLEX(v, a); |     TO_COMPLEX(v, a); | ||||||
|     TO_COMPLEX(w, b); |     TO_COMPLEX(w, b); | ||||||
|     PyFPE_START_PROTECT("complex_sub", return 0) |  | ||||||
|     result = _Py_c_diff(a, b); |     result = _Py_c_diff(a, b); | ||||||
|     PyFPE_END_PROTECT(result) |  | ||||||
|     return PyComplex_FromCComplex(result); |     return PyComplex_FromCComplex(result); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | @ -492,9 +488,7 @@ complex_mul(PyObject *v, PyObject *w) | ||||||
|     Py_complex a, b; |     Py_complex a, b; | ||||||
|     TO_COMPLEX(v, a); |     TO_COMPLEX(v, a); | ||||||
|     TO_COMPLEX(w, b); |     TO_COMPLEX(w, b); | ||||||
|     PyFPE_START_PROTECT("complex_mul", return 0) |  | ||||||
|     result = _Py_c_prod(a, b); |     result = _Py_c_prod(a, b); | ||||||
|     PyFPE_END_PROTECT(result) |  | ||||||
|     return PyComplex_FromCComplex(result); |     return PyComplex_FromCComplex(result); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | @ -505,10 +499,8 @@ complex_div(PyObject *v, PyObject *w) | ||||||
|     Py_complex a, b; |     Py_complex a, b; | ||||||
|     TO_COMPLEX(v, a); |     TO_COMPLEX(v, a); | ||||||
|     TO_COMPLEX(w, b); |     TO_COMPLEX(w, b); | ||||||
|     PyFPE_START_PROTECT("complex_div", return 0) |  | ||||||
|     errno = 0; |     errno = 0; | ||||||
|     quot = _Py_c_quot(a, b); |     quot = _Py_c_quot(a, b); | ||||||
|     PyFPE_END_PROTECT(quot) |  | ||||||
|     if (errno == EDOM) { |     if (errno == EDOM) { | ||||||
|         PyErr_SetString(PyExc_ZeroDivisionError, "complex division by zero"); |         PyErr_SetString(PyExc_ZeroDivisionError, "complex division by zero"); | ||||||
|         return NULL; |         return NULL; | ||||||
|  | @ -547,7 +539,6 @@ complex_pow(PyObject *v, PyObject *w, PyObject *z) | ||||||
|         PyErr_SetString(PyExc_ValueError, "complex modulo"); |         PyErr_SetString(PyExc_ValueError, "complex modulo"); | ||||||
|         return NULL; |         return NULL; | ||||||
|     } |     } | ||||||
|     PyFPE_START_PROTECT("complex_pow", return 0) |  | ||||||
|     errno = 0; |     errno = 0; | ||||||
|     exponent = b; |     exponent = b; | ||||||
|     int_exponent = (long)exponent.real; |     int_exponent = (long)exponent.real; | ||||||
|  | @ -556,7 +547,6 @@ complex_pow(PyObject *v, PyObject *w, PyObject *z) | ||||||
|     else |     else | ||||||
|         p = _Py_c_pow(a, exponent); |         p = _Py_c_pow(a, exponent); | ||||||
| 
 | 
 | ||||||
|     PyFPE_END_PROTECT(p) |  | ||||||
|     Py_ADJUST_ERANGE2(p.real, p.imag); |     Py_ADJUST_ERANGE2(p.real, p.imag); | ||||||
|     if (errno == EDOM) { |     if (errno == EDOM) { | ||||||
|         PyErr_SetString(PyExc_ZeroDivisionError, |         PyErr_SetString(PyExc_ZeroDivisionError, | ||||||
|  | @ -604,9 +594,7 @@ complex_abs(PyComplexObject *v) | ||||||
| { | { | ||||||
|     double result; |     double result; | ||||||
| 
 | 
 | ||||||
|     PyFPE_START_PROTECT("complex_abs", return 0) |  | ||||||
|     result = _Py_c_abs(v->cval); |     result = _Py_c_abs(v->cval); | ||||||
|     PyFPE_END_PROTECT(result) |  | ||||||
| 
 | 
 | ||||||
|     if (errno == ERANGE) { |     if (errno == ERANGE) { | ||||||
|         PyErr_SetString(PyExc_OverflowError, |         PyErr_SetString(PyExc_OverflowError, | ||||||
|  |  | ||||||
|  | @ -506,7 +506,6 @@ float_richcompare(PyObject *v, PyObject *w, int op) | ||||||
|         goto Unimplemented; |         goto Unimplemented; | ||||||
| 
 | 
 | ||||||
|  Compare: |  Compare: | ||||||
|     PyFPE_START_PROTECT("richcompare", return NULL) |  | ||||||
|     switch (op) { |     switch (op) { | ||||||
|     case Py_EQ: |     case Py_EQ: | ||||||
|         r = i == j; |         r = i == j; | ||||||
|  | @ -527,7 +526,6 @@ float_richcompare(PyObject *v, PyObject *w, int op) | ||||||
|         r = i > j; |         r = i > j; | ||||||
|         break; |         break; | ||||||
|     } |     } | ||||||
|     PyFPE_END_PROTECT(r) |  | ||||||
|     return PyBool_FromLong(r); |     return PyBool_FromLong(r); | ||||||
| 
 | 
 | ||||||
|  Unimplemented: |  Unimplemented: | ||||||
|  | @ -546,9 +544,7 @@ float_add(PyObject *v, PyObject *w) | ||||||
|     double a,b; |     double a,b; | ||||||
|     CONVERT_TO_DOUBLE(v, a); |     CONVERT_TO_DOUBLE(v, a); | ||||||
|     CONVERT_TO_DOUBLE(w, b); |     CONVERT_TO_DOUBLE(w, b); | ||||||
|     PyFPE_START_PROTECT("add", return 0) |  | ||||||
|     a = a + b; |     a = a + b; | ||||||
|     PyFPE_END_PROTECT(a) |  | ||||||
|     return PyFloat_FromDouble(a); |     return PyFloat_FromDouble(a); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | @ -558,9 +554,7 @@ float_sub(PyObject *v, PyObject *w) | ||||||
|     double a,b; |     double a,b; | ||||||
|     CONVERT_TO_DOUBLE(v, a); |     CONVERT_TO_DOUBLE(v, a); | ||||||
|     CONVERT_TO_DOUBLE(w, b); |     CONVERT_TO_DOUBLE(w, b); | ||||||
|     PyFPE_START_PROTECT("subtract", return 0) |  | ||||||
|     a = a - b; |     a = a - b; | ||||||
|     PyFPE_END_PROTECT(a) |  | ||||||
|     return PyFloat_FromDouble(a); |     return PyFloat_FromDouble(a); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | @ -570,9 +564,7 @@ float_mul(PyObject *v, PyObject *w) | ||||||
|     double a,b; |     double a,b; | ||||||
|     CONVERT_TO_DOUBLE(v, a); |     CONVERT_TO_DOUBLE(v, a); | ||||||
|     CONVERT_TO_DOUBLE(w, b); |     CONVERT_TO_DOUBLE(w, b); | ||||||
|     PyFPE_START_PROTECT("multiply", return 0) |  | ||||||
|     a = a * b; |     a = a * b; | ||||||
|     PyFPE_END_PROTECT(a) |  | ||||||
|     return PyFloat_FromDouble(a); |     return PyFloat_FromDouble(a); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | @ -587,9 +579,7 @@ float_div(PyObject *v, PyObject *w) | ||||||
|                         "float division by zero"); |                         "float division by zero"); | ||||||
|         return NULL; |         return NULL; | ||||||
|     } |     } | ||||||
|     PyFPE_START_PROTECT("divide", return 0) |  | ||||||
|     a = a / b; |     a = a / b; | ||||||
|     PyFPE_END_PROTECT(a) |  | ||||||
|     return PyFloat_FromDouble(a); |     return PyFloat_FromDouble(a); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | @ -605,7 +595,6 @@ float_rem(PyObject *v, PyObject *w) | ||||||
|                         "float modulo"); |                         "float modulo"); | ||||||
|         return NULL; |         return NULL; | ||||||
|     } |     } | ||||||
|     PyFPE_START_PROTECT("modulo", return 0) |  | ||||||
|     mod = fmod(vx, wx); |     mod = fmod(vx, wx); | ||||||
|     if (mod) { |     if (mod) { | ||||||
|         /* ensure the remainder has the same sign as the denominator */ |         /* ensure the remainder has the same sign as the denominator */ | ||||||
|  | @ -619,7 +608,6 @@ float_rem(PyObject *v, PyObject *w) | ||||||
|            it has the same sign as the denominator. */ |            it has the same sign as the denominator. */ | ||||||
|         mod = copysign(0.0, wx); |         mod = copysign(0.0, wx); | ||||||
|     } |     } | ||||||
|     PyFPE_END_PROTECT(mod) |  | ||||||
|     return PyFloat_FromDouble(mod); |     return PyFloat_FromDouble(mod); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | @ -634,7 +622,6 @@ float_divmod(PyObject *v, PyObject *w) | ||||||
|         PyErr_SetString(PyExc_ZeroDivisionError, "float divmod()"); |         PyErr_SetString(PyExc_ZeroDivisionError, "float divmod()"); | ||||||
|         return NULL; |         return NULL; | ||||||
|     } |     } | ||||||
|     PyFPE_START_PROTECT("divmod", return 0) |  | ||||||
|     mod = fmod(vx, wx); |     mod = fmod(vx, wx); | ||||||
|     /* fmod is typically exact, so vx-mod is *mathematically* an
 |     /* fmod is typically exact, so vx-mod is *mathematically* an
 | ||||||
|        exact multiple of wx.  But this is fp arithmetic, and fp |        exact multiple of wx.  But this is fp arithmetic, and fp | ||||||
|  | @ -666,7 +653,6 @@ float_divmod(PyObject *v, PyObject *w) | ||||||
|         /* div is zero - get the same sign as the true quotient */ |         /* div is zero - get the same sign as the true quotient */ | ||||||
|         floordiv = copysign(0.0, vx / wx); /* zero w/ sign of vx/wx */ |         floordiv = copysign(0.0, vx / wx); /* zero w/ sign of vx/wx */ | ||||||
|     } |     } | ||||||
|     PyFPE_END_PROTECT(floordiv) |  | ||||||
|     return Py_BuildValue("(dd)", floordiv, mod); |     return Py_BuildValue("(dd)", floordiv, mod); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | @ -793,9 +779,7 @@ float_pow(PyObject *v, PyObject *w, PyObject *z) | ||||||
|      * the platform pow to step in and do the rest. |      * the platform pow to step in and do the rest. | ||||||
|      */ |      */ | ||||||
|     errno = 0; |     errno = 0; | ||||||
|     PyFPE_START_PROTECT("pow", return NULL) |  | ||||||
|     ix = pow(iv, iw); |     ix = pow(iv, iw); | ||||||
|     PyFPE_END_PROTECT(ix) |  | ||||||
|     Py_ADJUST_ERANGE1(ix); |     Py_ADJUST_ERANGE1(ix); | ||||||
|     if (negate_result) |     if (negate_result) | ||||||
|         ix = -ix; |         ix = -ix; | ||||||
|  | @ -849,9 +833,7 @@ float_is_integer_impl(PyObject *self) | ||||||
|     if (!Py_IS_FINITE(x)) |     if (!Py_IS_FINITE(x)) | ||||||
|         Py_RETURN_FALSE; |         Py_RETURN_FALSE; | ||||||
|     errno = 0; |     errno = 0; | ||||||
|     PyFPE_START_PROTECT("is_integer", return NULL) |  | ||||||
|     o = (floor(x) == x) ? Py_True : Py_False; |     o = (floor(x) == x) ? Py_True : Py_False; | ||||||
|     PyFPE_END_PROTECT(x) |  | ||||||
|     if (errno != 0) { |     if (errno != 0) { | ||||||
|         PyErr_SetFromErrno(errno == ERANGE ? PyExc_OverflowError : |         PyErr_SetFromErrno(errno == ERANGE ? PyExc_OverflowError : | ||||||
|                              PyExc_ValueError); |                              PyExc_ValueError); | ||||||
|  | @ -1567,9 +1549,7 @@ float_as_integer_ratio_impl(PyObject *self) | ||||||
|         return NULL; |         return NULL; | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     PyFPE_START_PROTECT("as_integer_ratio", goto error); |  | ||||||
|     float_part = frexp(self_double, &exponent);        /* self_double == float_part * 2**exponent exactly */ |     float_part = frexp(self_double, &exponent);        /* self_double == float_part * 2**exponent exactly */ | ||||||
|     PyFPE_END_PROTECT(float_part); |  | ||||||
| 
 | 
 | ||||||
|     for (i=0; i<300 && float_part != floor(float_part) ; i++) { |     for (i=0; i<300 && float_part != floor(float_part) ; i++) { | ||||||
|         float_part *= 2.0; |         float_part *= 2.0; | ||||||
|  |  | ||||||
|  | @ -2385,9 +2385,7 @@ builtin_sum_impl(PyObject *module, PyObject *iterable, PyObject *start) | ||||||
|                 return PyFloat_FromDouble(f_result); |                 return PyFloat_FromDouble(f_result); | ||||||
|             } |             } | ||||||
|             if (PyFloat_CheckExact(item)) { |             if (PyFloat_CheckExact(item)) { | ||||||
|                 PyFPE_START_PROTECT("add", Py_DECREF(item); Py_DECREF(iter); return 0) |  | ||||||
|                 f_result += PyFloat_AS_DOUBLE(item); |                 f_result += PyFloat_AS_DOUBLE(item); | ||||||
|                 PyFPE_END_PROTECT(f_result) |  | ||||||
|                 Py_DECREF(item); |                 Py_DECREF(item); | ||||||
|                 continue; |                 continue; | ||||||
|             } |             } | ||||||
|  | @ -2396,9 +2394,7 @@ builtin_sum_impl(PyObject *module, PyObject *iterable, PyObject *start) | ||||||
|                 int overflow; |                 int overflow; | ||||||
|                 value = PyLong_AsLongAndOverflow(item, &overflow); |                 value = PyLong_AsLongAndOverflow(item, &overflow); | ||||||
|                 if (!overflow) { |                 if (!overflow) { | ||||||
|                     PyFPE_START_PROTECT("add", Py_DECREF(item); Py_DECREF(iter); return 0) |  | ||||||
|                     f_result += (double)value; |                     f_result += (double)value; | ||||||
|                     PyFPE_END_PROTECT(f_result) |  | ||||||
|                     Py_DECREF(item); |                     Py_DECREF(item); | ||||||
|                     continue; |                     continue; | ||||||
|                 } |                 } | ||||||
|  |  | ||||||
|  | @ -342,9 +342,7 @@ PyOS_string_to_double(const char *s, | ||||||
|     char *fail_pos; |     char *fail_pos; | ||||||
| 
 | 
 | ||||||
|     errno = 0; |     errno = 0; | ||||||
|     PyFPE_START_PROTECT("PyOS_string_to_double", return -1.0) |  | ||||||
|     x = _PyOS_ascii_strtod(s, &fail_pos); |     x = _PyOS_ascii_strtod(s, &fail_pos); | ||||||
|     PyFPE_END_PROTECT(x) |  | ||||||
| 
 | 
 | ||||||
|     if (errno == ENOMEM) { |     if (errno == ENOMEM) { | ||||||
|         PyErr_NoMemory(); |         PyErr_NoMemory(); | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 Victor Stinner
						Victor Stinner