summaryrefslogtreecommitdiffstats
path: root/Misc
diff options
context:
space:
mode:
authorWilliam Woodruff <william@yossarian.net>2022-10-04 13:05:53 (GMT)
committerGitHub <noreply@github.com>2022-10-04 13:05:53 (GMT)
commit6e533088290b909df324615df24286489603989f (patch)
tree74aca77e26d37d310535814045c805efd99afa6c /Misc
parent6cbbc26a73879f17df8896ea4feb40c61b085775 (diff)
downloadcpython-6e533088290b909df324615df24286489603989f.zip
cpython-6e533088290b909df324615df24286489603989f.tar.gz
cpython-6e533088290b909df324615df24286489603989f.tar.bz2
Adjust stable ABI internal documentation (GH-96896)
I was perusing this file, and noticed that this part of the documentation is slightly out of date: the `struct` items in this TOML file currently contain `struct_abi_kind` members, which distinguish between the different types of ABI compatibility described in the comment. I've updated the comment to reflect this.
Diffstat (limited to 'Misc')
-rw-r--r--Misc/stable_abi.toml21
1 files changed, 14 insertions, 7 deletions
diff --git a/Misc/stable_abi.toml b/Misc/stable_abi.toml
index 4da002a..a8920d9 100644
--- a/Misc/stable_abi.toml
+++ b/Misc/stable_abi.toml
@@ -13,13 +13,8 @@
# The current format is TOML.
# There are these kinds of top-level "items":
-# - struct: A C struct. Currently this file does not distinguish between:
-# - opaque structs, which the Limited API only handles via pointers
-# (so these can change at any time)
-# - structs where only certain members are part of the stable ABI (e.g.
-# PyObject)
-# - structs which must not be changed at all (e.g. PyType_Slot, which is
-# fully defined and used in arrays)
+# - struct: A C struct. See `struct_abi_kind` for how much of the struct is
+# exposed.
# - function: A function that must be kept available (and exported, i.e. not
# converted to a macro).
# - const: A simple value, defined with `#define`.
@@ -42,6 +37,18 @@
# of the stable ABI.
# - a combination of the above (functions that were called by macros that
# were public in the past)
+# - struct_abi_kind: for `struct`, defines how much of the struct is exposed:
+# - 'full-abi': All of the struct is part of the ABI, including the size
+# (users may define arrays of these structs).
+# Typically used for initalization, rather than at runtime.
+# - 'opaque': No members are part of the ABI, nor is the size. The Limited
+# API only handles these via pointers. The C definition should be
+# incomplete (opaque).
+# - 'members': Only specific members are part of the stable ABI.
+# The struct's size may change, so it can't be used in arrays.
+# Do not add new structs of this kind without an extremely good reason.
+# - members: For `struct` with struct_abi_kind = 'members', a list of the
+# exposed members.
# - doc: for `feature_macro`, the blurb added in documentation
# - windows: for `feature_macro`, this macro is defined on Windows.
# (This info is used to generate the DLL manifest and needs to be available