diff options
Diffstat (limited to 'Tools/clinic/clinic.py')
-rwxr-xr-x | Tools/clinic/clinic.py | 24 |
1 files changed, 18 insertions, 6 deletions
diff --git a/Tools/clinic/clinic.py b/Tools/clinic/clinic.py index 9880b39..d5863a3 100755 --- a/Tools/clinic/clinic.py +++ b/Tools/clinic/clinic.py @@ -3106,9 +3106,15 @@ class float_converter(CConverter): def parse_arg(self, argname, argnum): if self.format_unit == 'f': return """ - {paramname} = (float) PyFloat_AsDouble({argname}); - if (PyErr_Occurred()) {{{{ - goto exit; + if (PyFloat_CheckExact({argname})) {{{{ + {paramname} = (float) (PyFloat_AS_DOUBLE({argname})); + }}}} + else + {{{{ + {paramname} = (float) PyFloat_AsDouble({argname}); + if ({paramname} == -1.0 && PyErr_Occurred()) {{{{ + goto exit; + }}}} }}}} """.format(argname=argname, paramname=self.name) return super().parse_arg(argname, argnum) @@ -3122,9 +3128,15 @@ class double_converter(CConverter): def parse_arg(self, argname, argnum): if self.format_unit == 'd': return """ - {paramname} = PyFloat_AsDouble({argname}); - if (PyErr_Occurred()) {{{{ - goto exit; + if (PyFloat_CheckExact({argname})) {{{{ + {paramname} = PyFloat_AS_DOUBLE({argname}); + }}}} + else + {{{{ + {paramname} = PyFloat_AsDouble({argname}); + if ({paramname} == -1.0 && PyErr_Occurred()) {{{{ + goto exit; + }}}} }}}} """.format(argname=argname, paramname=self.name) return super().parse_arg(argname, argnum) |