summaryrefslogtreecommitdiffstats
path: root/Tools/clinic/clinic.py
diff options
context:
space:
mode:
Diffstat (limited to 'Tools/clinic/clinic.py')
-rwxr-xr-xTools/clinic/clinic.py24
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)