]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
gh-152105: Remove docs snippet that uses internal C API (GH-155122)
authorPetr Viktorin <encukou@gmail.com>
Wed, 5 Aug 2026 12:50:47 +0000 (14:50 +0200)
committerGitHub <noreply@github.com>
Wed, 5 Aug 2026 12:50:47 +0000 (14:50 +0200)
Follow-up to GH-143490.

`_PyInterpreterFrame.f_executable` and `PyStackRef_AsPyObjectBorrow` are undocumented and only available in the internal API.
Docs should not suggest using them, even if `PyUnstable_ExecutableKinds` is unusable without them.

Co-authored-by: Stan Ulbrych <stan@python.org>
Doc/c-api/frame.rst

index a04ef4e422949b98fb2d5ca7b679b1be818a89be..70a610cea82d06a8df3a57dfcfcc569232e015b8 100644 (file)
@@ -269,29 +269,8 @@ Unless using :pep:`523`, you will not need this.
       * - .. c:macro:: PyUnstable_EXECUTABLE_KIND_METHOD_DESCRIPTOR
         - The frame corresponds to a method on a class instance.
 
-   However, Python's C API lacks a function to read the executable kind from
-   a frame. Instead, use this recipe:
-
-   .. code-block:: c
-
-      int
-      get_executable_kind(PyFrameObject *frame)
-      {
-         _PyInterpreterFrame *f = frame->f_frame;
-         PyObject *exec = PyStackRef_AsPyObjectBorrow(f->f_executable);
-
-         if (PyCode_Check(exec)) {
-            return PyUnstable_EXECUTABLE_KIND_PY_FUNCTION;
-         }
-         if (PyMethod_Check(exec)) {
-            return PyUnstable_EXECUTABLE_KIND_BUILTIN_FUNCTION;
-         }
-         if (Py_IS_TYPE(exec, &PyMethodDescr_Type)) {
-            return PyUnstable_EXECUTABLE_KIND_METHOD_DESCRIPTOR;
-         }
-
-         return PyUnstable_EXECUTABLE_KIND_SKIP;
-      }
+   Note that reading the executable kind from a frame is currently only
+   possible with undocumented internal APIs.
 
    .. versionadded:: 3.13