mirror of
https://github.com/python/cpython.git
synced 2025-07-24 11:44:31 +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_GetMin,3.2,
|
||||
var,PyFloat_Type,3.2,
|
||||
type,PyFrameObject,3.2,
|
||||
function,PyFrame_GetCode,3.10,
|
||||
function,PyFrame_GetLineNumber,3.10,
|
||||
function,PyFrozenSet_New,3.2,
|
||||
|
@ -825,8 +826,6 @@ function,Py_XNewRef,3.10,
|
|||
type,Py_intptr_t,3.2,
|
||||
type,Py_ssize_t,3.2,
|
||||
type,Py_uintptr_t,3.2,
|
||||
type,_frame,3.2,
|
||||
type,_node,3.2,
|
||||
type,allocfunc,3.2,
|
||||
type,binaryfunc,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
|
||||
struct PyInterpreterState
|
||||
added 3.2
|
||||
struct _frame
|
||||
struct PyFrameObject
|
||||
added 3.2
|
||||
struct symtable
|
||||
added 3.2
|
||||
struct _node
|
||||
added 3.2
|
||||
struct PyWeakReference
|
||||
added 3.2
|
||||
struct PyLongObject
|
||||
|
|
|
@ -492,6 +492,16 @@ def gcc_get_limited_api_definitions(headers):
|
|||
)
|
||||
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():
|
||||
parser = argparse.ArgumentParser(
|
||||
|
@ -557,6 +567,8 @@ def main():
|
|||
with args.file.open() as file:
|
||||
manifest = parse_manifest(file)
|
||||
|
||||
check_private_names(manifest)
|
||||
|
||||
# Remember results of all actions (as booleans).
|
||||
# At the end we'll check that at least one action was run,
|
||||
# and also fail if any are false.
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue