mirror of
https://github.com/python/cpython.git
synced 2025-12-31 04:23:37 +00:00
gh-116417: Avoid PyFloat_AS_DOUBLE() in AC limited C API (#116568)
Argument Clinic no longer calls PyFloat_AS_DOUBLE() when the usage of the limited C API is requested.
This commit is contained in:
parent
5b2f21faf3
commit
729bfb3105
3 changed files with 155 additions and 19 deletions
|
|
@ -3867,19 +3867,28 @@ class float_converter(CConverter):
|
|||
|
||||
def parse_arg(self, argname: str, displayname: str, *, limited_capi: bool) -> str | None:
|
||||
if self.format_unit == 'f':
|
||||
return self.format_code("""
|
||||
if (PyFloat_CheckExact({argname})) {{{{
|
||||
{paramname} = (float) (PyFloat_AS_DOUBLE({argname}));
|
||||
}}}}
|
||||
else
|
||||
{{{{
|
||||
if not limited_capi:
|
||||
return self.format_code("""
|
||||
if (PyFloat_CheckExact({argname})) {{{{
|
||||
{paramname} = (float) (PyFloat_AS_DOUBLE({argname}));
|
||||
}}}}
|
||||
else
|
||||
{{{{
|
||||
{paramname} = (float) PyFloat_AsDouble({argname});
|
||||
if ({paramname} == -1.0 && PyErr_Occurred()) {{{{
|
||||
goto exit;
|
||||
}}}}
|
||||
}}}}
|
||||
""",
|
||||
argname=argname)
|
||||
else:
|
||||
return self.format_code("""
|
||||
{paramname} = (float) PyFloat_AsDouble({argname});
|
||||
if ({paramname} == -1.0 && PyErr_Occurred()) {{{{
|
||||
goto exit;
|
||||
}}}}
|
||||
}}}}
|
||||
""",
|
||||
argname=argname)
|
||||
""",
|
||||
argname=argname)
|
||||
return super().parse_arg(argname, displayname, limited_capi=limited_capi)
|
||||
|
||||
class double_converter(CConverter):
|
||||
|
|
@ -3890,19 +3899,28 @@ class double_converter(CConverter):
|
|||
|
||||
def parse_arg(self, argname: str, displayname: str, *, limited_capi: bool) -> str | None:
|
||||
if self.format_unit == 'd':
|
||||
return self.format_code("""
|
||||
if (PyFloat_CheckExact({argname})) {{{{
|
||||
{paramname} = PyFloat_AS_DOUBLE({argname});
|
||||
}}}}
|
||||
else
|
||||
{{{{
|
||||
if not limited_capi:
|
||||
return self.format_code("""
|
||||
if (PyFloat_CheckExact({argname})) {{{{
|
||||
{paramname} = PyFloat_AS_DOUBLE({argname});
|
||||
}}}}
|
||||
else
|
||||
{{{{
|
||||
{paramname} = PyFloat_AsDouble({argname});
|
||||
if ({paramname} == -1.0 && PyErr_Occurred()) {{{{
|
||||
goto exit;
|
||||
}}}}
|
||||
}}}}
|
||||
""",
|
||||
argname=argname)
|
||||
else:
|
||||
return self.format_code("""
|
||||
{paramname} = PyFloat_AsDouble({argname});
|
||||
if ({paramname} == -1.0 && PyErr_Occurred()) {{{{
|
||||
goto exit;
|
||||
}}}}
|
||||
}}}}
|
||||
""",
|
||||
argname=argname)
|
||||
""",
|
||||
argname=argname)
|
||||
return super().parse_arg(argname, displayname, limited_capi=limited_capi)
|
||||
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue