mirror of
https://github.com/python/cpython.git
synced 2025-08-02 16:13:13 +00:00
bpo-43795: Don't list private names in the limited API (GH-26740)
* Remove struct _node from the stable ABI list This struct was removed along with the old parser in Python 3.9 (PEP 617) * Stable ABI list: Use the public name "PyFrameObject" rather than "_frame" * Ensure limited API doesn't contain private names Names prefixed by an underscore are private by definition. * Add a blurb
This commit is contained in:
parent
741b8ae1cf
commit
7cad9cb51b
4 changed files with 17 additions and 5 deletions
|
@ -272,6 +272,7 @@ function,PyFloat_GetInfo,3.2,
|
||||||
function,PyFloat_GetMax,3.2,
|
function,PyFloat_GetMax,3.2,
|
||||||
function,PyFloat_GetMin,3.2,
|
function,PyFloat_GetMin,3.2,
|
||||||
var,PyFloat_Type,3.2,
|
var,PyFloat_Type,3.2,
|
||||||
|
type,PyFrameObject,3.2,
|
||||||
function,PyFrame_GetCode,3.10,
|
function,PyFrame_GetCode,3.10,
|
||||||
function,PyFrame_GetLineNumber,3.10,
|
function,PyFrame_GetLineNumber,3.10,
|
||||||
function,PyFrozenSet_New,3.2,
|
function,PyFrozenSet_New,3.2,
|
||||||
|
@ -825,8 +826,6 @@ function,Py_XNewRef,3.10,
|
||||||
type,Py_intptr_t,3.2,
|
type,Py_intptr_t,3.2,
|
||||||
type,Py_ssize_t,3.2,
|
type,Py_ssize_t,3.2,
|
||||||
type,Py_uintptr_t,3.2,
|
type,Py_uintptr_t,3.2,
|
||||||
type,_frame,3.2,
|
|
||||||
type,_node,3.2,
|
|
||||||
type,allocfunc,3.2,
|
type,allocfunc,3.2,
|
||||||
type,binaryfunc,3.2,
|
type,binaryfunc,3.2,
|
||||||
type,descrgetfunc,3.2,
|
type,descrgetfunc,3.2,
|
||||||
|
|
|
@ -0,0 +1,3 @@
|
||||||
|
The list in :ref:`stable-abi-list` now shows the public name
|
||||||
|
:c:struct:`PyFrameObject` rather than ``_frame``. The non-existing
|
||||||
|
entry ``_node`` no longer appears in the list.
|
|
@ -38,12 +38,10 @@ struct PyThreadState
|
||||||
added 3.2
|
added 3.2
|
||||||
struct PyInterpreterState
|
struct PyInterpreterState
|
||||||
added 3.2
|
added 3.2
|
||||||
struct _frame
|
struct PyFrameObject
|
||||||
added 3.2
|
added 3.2
|
||||||
struct symtable
|
struct symtable
|
||||||
added 3.2
|
added 3.2
|
||||||
struct _node
|
|
||||||
added 3.2
|
|
||||||
struct PyWeakReference
|
struct PyWeakReference
|
||||||
added 3.2
|
added 3.2
|
||||||
struct PyLongObject
|
struct PyLongObject
|
||||||
|
|
|
@ -492,6 +492,16 @@ def gcc_get_limited_api_definitions(headers):
|
||||||
)
|
)
|
||||||
return stable_data | stable_exported_data | stable_functions
|
return stable_data | stable_exported_data | stable_functions
|
||||||
|
|
||||||
|
def check_private_names(manifest):
|
||||||
|
"""Ensure limited API doesn't contain private names
|
||||||
|
|
||||||
|
Names prefixed by an underscore are private by definition.
|
||||||
|
"""
|
||||||
|
for name, item in manifest.contents.items():
|
||||||
|
if name.startswith('_') and not item.abi_only:
|
||||||
|
raise ValueError(
|
||||||
|
f'`{name}` is private (underscore-prefixed) and should be '
|
||||||
|
+ 'removed from the stable ABI list or or marked `abi_only`')
|
||||||
|
|
||||||
def main():
|
def main():
|
||||||
parser = argparse.ArgumentParser(
|
parser = argparse.ArgumentParser(
|
||||||
|
@ -557,6 +567,8 @@ def main():
|
||||||
with args.file.open() as file:
|
with args.file.open() as file:
|
||||||
manifest = parse_manifest(file)
|
manifest = parse_manifest(file)
|
||||||
|
|
||||||
|
check_private_names(manifest)
|
||||||
|
|
||||||
# Remember results of all actions (as booleans).
|
# Remember results of all actions (as booleans).
|
||||||
# At the end we'll check that at least one action was run,
|
# At the end we'll check that at least one action was run,
|
||||||
# and also fail if any are false.
|
# and also fail if any are false.
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue