[Lldb-commits] [lldb] [lldb][docs] Generate the Python API enums page from headers (PR #202780)

Jonas Devlieghere via lldb-commits lldb-commits at lists.llvm.org
Wed Jun 10 10:52:47 PDT 2026


https://github.com/JDevlieghere updated https://github.com/llvm/llvm-project/pull/202780

>From 361fe881ac0990630ab60e92a533cf46dc3540cf Mon Sep 17 00:00:00 2001
From: Jonas Devlieghere <jonas at devlieghere.com>
Date: Tue, 9 Jun 2026 15:03:30 -0700
Subject: [PATCH 1/2] [lldb][docs] Generate the Python API enums page from
 headers

The "Python API enumerators and constants" page was added by
3cae8b33297b as an explicit stop-gap: its contents were grepped out
of the headers by hand, with the few available doc strings copied
over manually. That commit noted the real fix would be a tool that
parses the enum/constant headers and emits the page automatically.

Being hand-maintained, the page drifted badly out of sync. By now it was
missing 19 enums and 60+ enumerators, still documented three values that
no longer exist, and carried stale descriptions.

Add gen-python-api-enums.py, which parses lldb-enumerations.h and
lldb-defines.h and emits the page at build time. It is pulled into
python_api_enums.md via the {build-include} directive, the same
mechanism already used for the generated settings page, so the page can
stay in sync with the source.

Enums from the separately generated SBLanguages.h (eLanguageName*) are
still not covered, matching the previous page's scope.

Assisted-by: Claude
---
 lldb/docs/CMakeLists.txt             |   21 +-
 lldb/docs/python_api_enums.md        | 3284 +-------------------------
 lldb/scripts/gen-python-api-enums.py |  309 +++
 3 files changed, 334 insertions(+), 3280 deletions(-)
 create mode 100644 lldb/scripts/gen-python-api-enums.py

diff --git a/lldb/docs/CMakeLists.txt b/lldb/docs/CMakeLists.txt
index 02f0c3ef081a3..a47042621fd2a 100644
--- a/lldb/docs/CMakeLists.txt
+++ b/lldb/docs/CMakeLists.txt
@@ -53,6 +53,24 @@ if (LLDB_ENABLE_PYTHON AND SPHINX_FOUND)
     )
     add_custom_target(LLDBDocsSettingsMd DEPENDS "${CMAKE_CURRENT_BINARY_DIR}/generated-settings.md")
 
+    add_custom_command(
+      OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/generated-python-api-enums.md"
+      COMMAND
+        "${Python3_EXECUTABLE}"
+        "${LLDB_SOURCE_DIR}/scripts/gen-python-api-enums.py"
+        --enumerations
+        "${LLDB_SOURCE_DIR}/include/lldb/lldb-enumerations.h"
+        --defines
+        "${LLDB_SOURCE_DIR}/include/lldb/lldb-defines.h"
+        -o
+        "${CMAKE_CURRENT_BINARY_DIR}/generated-python-api-enums.md"
+      DEPENDS
+        "${LLDB_SOURCE_DIR}/include/lldb/lldb-enumerations.h"
+        "${LLDB_SOURCE_DIR}/include/lldb/lldb-defines.h"
+        "${LLDB_SOURCE_DIR}/scripts/gen-python-api-enums.py"
+    )
+    add_custom_target(LLDBDocsEnumsMd DEPENDS "${CMAKE_CURRENT_BINARY_DIR}/generated-python-api-enums.md")
+
     # FIXME: Don't treat Sphinx warnings as errors. The files generated by
     # automodapi are full of warnings (partly caused by SWIG, our documentation
     # and probably also automodapi itself), so those warnings need to be fixed
@@ -72,7 +90,8 @@ if (LLDB_ENABLE_PYTHON AND SPHINX_FOUND)
     add_custom_target(clean-lldb-html COMMAND "${CMAKE_COMMAND}" -E
       remove_directory ${CMAKE_CURRENT_BINARY_DIR}/html)
     add_dependencies(docs-lldb-html swig_wrapper_python
-                     lldb-python-doc-package clean-lldb-html LLDBDocsSettingsMd)
+                     lldb-python-doc-package clean-lldb-html LLDBDocsSettingsMd
+                     LLDBDocsEnumsMd)
   endif()
 
   if (${SPHINX_OUTPUT_MAN})
diff --git a/lldb/docs/python_api_enums.md b/lldb/docs/python_api_enums.md
index 206745e9e5a8c..8395c9b38b89e 100644
--- a/lldb/docs/python_api_enums.md
+++ b/lldb/docs/python_api_enums.md
@@ -5,3284 +5,10 @@ orphan: true
 % This is a sub page of the Python API docs and linked from the main API page.
 % The page isn't in any toctree, so silence the sphinx warnings by marking it as orphan.
 
-# Python API enumerators and constants
+% The page contents are generated at build time from lldb-enumerations.h and
+% lldb-defines.h by lldb/scripts/gen-python-api-enums.py. Don't edit it by hand;
+% update those headers instead.
 
-```{eval-rst}
-.. py:currentmodule:: lldb
-```
-
-## Constants
-
-### Generic register numbers
-
-```{eval-rst}
-.. py:data:: LLDB_REGNUM_GENERIC_PC
-
-   Program counter.
-```
-
-```{eval-rst}
-.. py:data:: LLDB_REGNUM_GENERIC_SP
-
-   Stack pointer.
-```
-
-```{eval-rst}
-.. py:data:: LLDB_REGNUM_GENERIC_FP
-
-   Frame pointer.
-```
-
-```{eval-rst}
-.. py:data:: LLDB_REGNUM_GENERIC_RA
-
-   Return address.
-```
-
-```{eval-rst}
-.. py:data:: LLDB_REGNUM_GENERIC_FLAGS
-
-   Processor flags register.
-```
-
-```{eval-rst}
-.. py:data:: LLDB_REGNUM_GENERIC_ARG1
-
-   The register that would contain pointer size or less argument 1 (if any).
-```
-
-```{eval-rst}
-.. py:data:: LLDB_REGNUM_GENERIC_ARG2
-
-   The register that would contain pointer size or less argument 2 (if any).
-```
-
-```{eval-rst}
-.. py:data:: LLDB_REGNUM_GENERIC_ARG3
-
-   The register that would contain pointer size or less argument 3 (if any).
-```
-
-```{eval-rst}
-.. py:data:: LLDB_REGNUM_GENERIC_ARG4
-
-   The register that would contain pointer size or less argument 4 (if any).
-```
-
-```{eval-rst}
-.. py:data:: LLDB_REGNUM_GENERIC_ARG5
-
-   The register that would contain pointer size or less argument 5 (if any).
-```
-
-```{eval-rst}
-.. py:data:: LLDB_REGNUM_GENERIC_ARG6
-
-   The register that would contain pointer size or less argument 6 (if any).
-```
-
-```{eval-rst}
-.. py:data:: LLDB_REGNUM_GENERIC_ARG7
-
-   The register that would contain pointer size or less argument 7 (if any).
-```
-
-```{eval-rst}
-.. py:data:: LLDB_REGNUM_GENERIC_ARG8
-
-   The register that would contain pointer size or less argument 8 (if any).
-
-```
-
-### Invalid value definitions
-
-```{eval-rst}
-.. py:data:: LLDB_INVALID_BREAK_ID
-```
-
-```{eval-rst}
-.. py:data:: LLDB_INVALID_WATCH_ID
-```
-
-```{eval-rst}
-.. py:data:: LLDB_INVALID_ADDRESS
-```
-
-```{eval-rst}
-.. py:data:: LLDB_INVALID_INDEX32
-```
-
-```{eval-rst}
-.. py:data:: LLDB_INVALID_IVAR_OFFSET
-```
-
-```{eval-rst}
-.. py:data:: LLDB_INVALID_IMAGE_TOKEN
-```
-
-```{eval-rst}
-.. py:data:: LLDB_INVALID_MODULE_VERSION
-```
-
-```{eval-rst}
-.. py:data:: LLDB_INVALID_REGNUM
-```
-
-```{eval-rst}
-.. py:data:: LLDB_INVALID_UID
-```
-
-```{eval-rst}
-.. py:data:: LLDB_INVALID_PROCESS_ID
-```
-
-```{eval-rst}
-.. py:data:: LLDB_INVALID_THREAD_ID
-```
-
-```{eval-rst}
-.. py:data:: LLDB_INVALID_FRAME_ID
-```
-
-```{eval-rst}
-.. py:data:: LLDB_INVALID_SIGNAL_NUMBER
-```
-
-```{eval-rst}
-.. py:data:: LLDB_INVALID_OFFSET
-```
-
-```{eval-rst}
-.. py:data:: LLDB_INVALID_LINE_NUMBER
-```
-
-```{eval-rst}
-.. py:data:: LLDB_INVALID_QUEUE_ID
-```
-
-### CPU types
-
-```{eval-rst}
-.. py:data:: LLDB_ARCH_DEFAULT
-```
-
-```{eval-rst}
-.. py:data:: LLDB_ARCH_DEFAULT_32BIT
-```
-
-```{eval-rst}
-.. py:data:: LLDB_ARCH_DEFAULT_64BIT
-```
-
-```{eval-rst}
-.. py:data:: LLDB_INVALID_CPUTYPE
-
-```
-
-### Option set definitions
-
-```{eval-rst}
-.. py:data:: LLDB_MAX_NUM_OPTION_SETS
-```
-
-```{eval-rst}
-.. py:data:: LLDB_OPT_SET_ALL
-```
-
-```{eval-rst}
-.. py:data:: LLDB_OPT_SET_1
-```
-
-```{eval-rst}
-.. py:data:: LLDB_OPT_SET_2
-```
-
-```{eval-rst}
-.. py:data:: LLDB_OPT_SET_3
-```
-
-```{eval-rst}
-.. py:data:: LLDB_OPT_SET_4
-```
-
-```{eval-rst}
-.. py:data:: LLDB_OPT_SET_5
-```
-
-```{eval-rst}
-.. py:data:: LLDB_OPT_SET_6
-```
-
-```{eval-rst}
-.. py:data:: LLDB_OPT_SET_7
-```
-
-```{eval-rst}
-.. py:data:: LLDB_OPT_SET_8
-```
-
-```{eval-rst}
-.. py:data:: LLDB_OPT_SET_9
-```
-
-```{eval-rst}
-.. py:data:: LLDB_OPT_SET_10
-```
-
-```{eval-rst}
-.. py:data:: LLDB_OPT_SET_11
-```
-
-### Miscellaneous constants
-
-```{eval-rst}
-.. py:data:: LLDB_GENERIC_ERROR
-```
-
-```{eval-rst}
-.. py:data:: LLDB_DEFAULT_BREAK_SIZE
-```
-
-```{eval-rst}
-.. py:data:: LLDB_WATCH_TYPE_READ
-```
-
-```{eval-rst}
-.. py:data:: LLDB_WATCH_TYPE_WRITE
-
-```
-
-## Enumerators
-
-(state)=
-
-### State
-
-```{eval-rst}
-.. py:data:: eStateInvalid
-```
-
-```{eval-rst}
-.. py:data:: eStateUnloaded
-
-   Process is object is valid, but not currently loaded.
-```
-
-```{eval-rst}
-.. py:data:: eStateConnected
-
-   Process is connected to remote debug services, but not
-   launched or attached to anything yet.
-```
-
-```{eval-rst}
-.. py:data:: eStateAttaching
-
-   Process is in the process of launching.
-```
-
-```{eval-rst}
-.. py:data:: eStateLaunching
-
-   Process is in the process of launching.
-```
-
-```{eval-rst}
-.. py:data:: eStateStopped
-
-   Process or thread is stopped and can be examined.
-```
-
-```{eval-rst}
-.. py:data:: eStateRunning
-
-   Process or thread is running and can't be examined.
-```
-
-```{eval-rst}
-.. py:data:: eStateStepping
-
-   Process or thread is in the process of stepping and can
-   not be examined.
-```
-
-```{eval-rst}
-.. py:data:: eStateCrashed
-
-   Process or thread has crashed and can be examined.
-```
-
-```{eval-rst}
-.. py:data:: eStateDetached
-
-   Process has been detached and can't be examined.
-```
-
-```{eval-rst}
-.. py:data:: eStateExited
-
-   Process has exited and can't be examined.
-```
-
-```{eval-rst}
-.. py:data:: eStateSuspended
-
-   Process or thread is in a suspended state as far
-   as the debugger is concerned while other processes
-   or threads get the chance to run.
-
-```
-
-(launchflag)=
-
-### LaunchFlag
-
-```{eval-rst}
-.. py:data:: eLaunchFlagNone
-```
-
-```{eval-rst}
-.. py:data:: eLaunchFlagExec
-
-   Exec when launching and turn the calling process into a new process.
-```
-
-```{eval-rst}
-.. py:data:: eLaunchFlagDebug
-
-   Stop as soon as the process launches to allow the process to be debugged.
-```
-
-```{eval-rst}
-.. py:data:: eLaunchFlagStopAtEntry
-
-   Stop at the program entry point instead of auto-continuing when launching or attaching at entry point.
-```
-
-```{eval-rst}
-.. py:data:: eLaunchFlagDisableASLR
-
-   Disable Address Space Layout Randomization.
-```
-
-```{eval-rst}
-.. py:data:: eLaunchFlagDisableSTDIO
-
-   Disable stdio for inferior process (e.g. for a GUI app).
-```
-
-```{eval-rst}
-.. py:data:: eLaunchFlagLaunchInTTY
-
-   Launch the process in a new TTY if supported by the host.
-```
-
-```{eval-rst}
-.. py:data:: eLaunchFlagLaunchInShell
-
-   Launch the process inside a shell to get shell expansion.
-```
-
-```{eval-rst}
-.. py:data:: eLaunchFlagLaunchInSeparateProcessGroup
-
-   Launch the process in a separate process group if you are going to hand the process off (e.g. to debugserver)
-```
-
-```{eval-rst}
-.. py:data:: eLaunchFlagDontSetExitStatus
-
-   set this flag so lldb & the handee don't race to set its exit status.
-```
-
-```{eval-rst}
-.. py:data:: eLaunchFlagDetachOnError
-
-   If set, then the client stub should detach rather than killing  the debugee
-   if it loses connection with lldb.
-```
-
-```{eval-rst}
-.. py:data:: eLaunchFlagShellExpandArguments
-
-   Perform shell-style argument expansion
-```
-
-```{eval-rst}
-.. py:data:: eLaunchFlagCloseTTYOnExit
-
-   Close the open TTY on exit
-```
-
-```{eval-rst}
-.. py:data:: eLaunchFlagInheritTCCFromParent
-
-   Don't make the inferior responsible for its own TCC
-   permissions but instead inherit them from its parent.
-
-```
-
-(runmode)=
-
-### RunMode
-
-```{eval-rst}
-.. py:data:: eOnlyThisThread
-```
-
-```{eval-rst}
-.. py:data:: eAllThreads
-```
-
-```{eval-rst}
-.. py:data:: eOnlyDuringStepping
-
-```
-
-(byteorder)=
-
-### ByteOrder
-
-```{eval-rst}
-.. py:data:: eByteOrderInvalid
-```
-
-```{eval-rst}
-.. py:data:: eByteOrderBig
-```
-
-```{eval-rst}
-.. py:data:: eByteOrderPDP
-```
-
-```{eval-rst}
-.. py:data:: eByteOrderLittle
-
-```
-
-(encoding)=
-
-### Encoding
-
-```{eval-rst}
-.. py:data:: eEncodingInvalid
-```
-
-```{eval-rst}
-.. py:data:: eEncodingUint
-```
-
-```{eval-rst}
-.. py:data:: eEncodingSint
-```
-
-```{eval-rst}
-.. py:data:: eEncodingIEEE754
-```
-
-```{eval-rst}
-.. py:data:: eEncodingVector
-
-```
-
-(format)=
-
-### Format
-
-```{eval-rst}
-.. py:data:: eFormatDefault
-```
-
-```{eval-rst}
-.. py:data:: eFormatInvalid
-```
-
-```{eval-rst}
-.. py:data:: eFormatBoolean
-```
-
-```{eval-rst}
-.. py:data:: eFormatBinary
-```
-
-```{eval-rst}
-.. py:data:: eFormatBytes
-```
-
-```{eval-rst}
-.. py:data:: eFormatBytesWithASCII
-```
-
-```{eval-rst}
-.. py:data:: eFormatChar
-```
-
-```{eval-rst}
-.. py:data:: eFormatCharPrintable
-```
-
-```{eval-rst}
-.. py:data:: eFormatComplex
-```
-
-```{eval-rst}
-.. py:data:: eFormatComplexFloat
-```
-
-```{eval-rst}
-.. py:data:: eFormatCString
-```
-
-```{eval-rst}
-.. py:data:: eFormatDecimal
-```
-
-```{eval-rst}
-.. py:data:: eFormatEnum
-```
-
-```{eval-rst}
-.. py:data:: eFormatHex
-```
-
-```{eval-rst}
-.. py:data:: eFormatHexUppercase
-```
-
-```{eval-rst}
-.. py:data:: eFormatFloat
-```
-
-```{eval-rst}
-.. py:data:: eFormatOctal
-```
-
-```{eval-rst}
-.. py:data:: eFormatOSType
-```
-
-```{eval-rst}
-.. py:data:: eFormatUnicode16
-```
-
-```{eval-rst}
-.. py:data:: eFormatUnicode32
-```
-
-```{eval-rst}
-.. py:data:: eFormatUnsigned
-```
-
-```{eval-rst}
-.. py:data:: eFormatPointer
-```
-
-```{eval-rst}
-.. py:data:: eFormatVectorOfChar
-```
-
-```{eval-rst}
-.. py:data:: eFormatVectorOfSInt8
-```
-
-```{eval-rst}
-.. py:data:: eFormatVectorOfUInt8
-```
-
-```{eval-rst}
-.. py:data:: eFormatVectorOfSInt16
-```
-
-```{eval-rst}
-.. py:data:: eFormatVectorOfUInt16
-```
-
-```{eval-rst}
-.. py:data:: eFormatVectorOfSInt32
-```
-
-```{eval-rst}
-.. py:data:: eFormatVectorOfUInt32
-```
-
-```{eval-rst}
-.. py:data:: eFormatVectorOfSInt64
-```
-
-```{eval-rst}
-.. py:data:: eFormatVectorOfUInt64
-```
-
-```{eval-rst}
-.. py:data:: eFormatVectorOfFloat16
-```
-
-```{eval-rst}
-.. py:data:: eFormatVectorOfFloat32
-```
-
-```{eval-rst}
-.. py:data:: eFormatVectorOfFloat64
-```
-
-```{eval-rst}
-.. py:data:: eFormatVectorOfUInt128
-```
-
-```{eval-rst}
-.. py:data:: eFormatComplexInteger
-```
-
-```{eval-rst}
-.. py:data:: eFormatCharArray
-```
-
-```{eval-rst}
-.. py:data:: eFormatAddressInfo
-```
-
-```{eval-rst}
-.. py:data:: eFormatHexFloat
-```
-
-```{eval-rst}
-.. py:data:: eFormatInstruction
-```
-
-```{eval-rst}
-.. py:data:: eFormatVoid
-```
-
-```{eval-rst}
-.. py:data:: eFormatUnicode8
-```
-
-```{eval-rst}
-.. py:data:: eFormatFloat128
-
-```
-
-(descriptionlevel)=
-
-### DescriptionLevel
-
-```{eval-rst}
-.. py:data:: eDescriptionLevelBrief
-```
-
-```{eval-rst}
-.. py:data:: eDescriptionLevelFull
-```
-
-```{eval-rst}
-.. py:data:: eDescriptionLevelVerbose
-```
-
-```{eval-rst}
-.. py:data:: eDescriptionLevelInitial
-
-```
-
-(scriptlanguage)=
-
-### ScriptLanguage
-
-```{eval-rst}
-.. py:data:: eScriptLanguageNone
-```
-
-```{eval-rst}
-.. py:data:: eScriptLanguagePython
-```
-
-```{eval-rst}
-.. py:data:: eScriptLanguageLua
-```
-
-```{eval-rst}
-.. py:data:: eScriptLanguageUnknown
-```
-
-```{eval-rst}
-.. py:data:: eScriptLanguageDefault
-
-```
-
-(registerkind)=
-
-### RegisterKind
-
-```{eval-rst}
-.. py:data:: eRegisterKindEHFrame
-```
-
-```{eval-rst}
-.. py:data:: eRegisterKindDWARF
-```
-
-```{eval-rst}
-.. py:data:: eRegisterKindGeneric
-```
-
-```{eval-rst}
-.. py:data:: eRegisterKindProcessPlugin
-```
-
-```{eval-rst}
-.. py:data:: eRegisterKindLLDB
-
-```
-
-(stopreason)=
-
-### StopReason
-
-```{eval-rst}
-.. py:data:: eStopReasonInvalid
-```
-
-```{eval-rst}
-.. py:data:: eStopReasonNone
-```
-
-```{eval-rst}
-.. py:data:: eStopReasonTrace
-```
-
-```{eval-rst}
-.. py:data:: eStopReasonBreakpoint
-```
-
-```{eval-rst}
-.. py:data:: eStopReasonWatchpoint
-```
-
-```{eval-rst}
-.. py:data:: eStopReasonSignal
-```
-
-```{eval-rst}
-.. py:data:: eStopReasonException
-```
-
-```{eval-rst}
-.. py:data:: eStopReasonExec
-```
-
-```{eval-rst}
-.. py:data:: eStopReasonFork
-```
-
-```{eval-rst}
-.. py:data:: eStopReasonVFork
-```
-
-```{eval-rst}
-.. py:data:: eStopReasonVForkDone
-```
-
-```{eval-rst}
-.. py:data:: eStopReasonPlanComplete
-```
-
-```{eval-rst}
-.. py:data:: eStopReasonThreadExiting
-```
-
-```{eval-rst}
-.. py:data:: eStopReasonInstrumentation
-
-```
-
-(returnstatus)=
-
-### ReturnStatus
-
-```{eval-rst}
-.. py:data:: eReturnStatusInvalid
-```
-
-```{eval-rst}
-.. py:data:: eReturnStatusSuccessFinishNoResult
-```
-
-```{eval-rst}
-.. py:data:: eReturnStatusSuccessFinishResult
-```
-
-```{eval-rst}
-.. py:data:: eReturnStatusSuccessContinuingNoResult
-```
-
-```{eval-rst}
-.. py:data:: eReturnStatusSuccessContinuingResult
-```
-
-```{eval-rst}
-.. py:data:: eReturnStatusStarted
-```
-
-```{eval-rst}
-.. py:data:: eReturnStatusFailed
-```
-
-```{eval-rst}
-.. py:data:: eReturnStatusQuit
-
-```
-
-(expression)=
-
-### Expression
-
-The results of expression evaluation.
-
-```{eval-rst}
-.. py:data:: eExpressionCompleted
-```
-
-```{eval-rst}
-.. py:data:: eExpressionSetupError
-```
-
-```{eval-rst}
-.. py:data:: eExpressionParseError
-```
-
-```{eval-rst}
-.. py:data:: eExpressionDiscarded
-```
-
-```{eval-rst}
-.. py:data:: eExpressionInterrupted
-```
-
-```{eval-rst}
-.. py:data:: eExpressionHitBreakpoint
-```
-
-```{eval-rst}
-.. py:data:: eExpressionTimedOut
-```
-
-```{eval-rst}
-.. py:data:: eExpressionResultUnavailable
-```
-
-```{eval-rst}
-.. py:data:: eExpressionStoppedForDebug
-```
-
-```{eval-rst}
-.. py:data:: eExpressionThreadVanished
-
-```
-
-(searchdepth)=
-
-### SearchDepth
-
-```{eval-rst}
-.. py:data:: eSearchDepthInvalid
-```
-
-```{eval-rst}
-.. py:data:: eSearchDepthTarget
-```
-
-```{eval-rst}
-.. py:data:: eSearchDepthModule
-```
-
-```{eval-rst}
-.. py:data:: eSearchDepthCompUnit
-```
-
-```{eval-rst}
-.. py:data:: eSearchDepthFunction
-```
-
-```{eval-rst}
-.. py:data:: eSearchDepthBlock
-```
-
-```{eval-rst}
-.. py:data:: eSearchDepthAddress
-
-```
-
-(connectionstatus)=
-
-### ConnectionStatus
-
-```{eval-rst}
-.. py:data:: eConnectionStatusSuccess
-
-   Success.
-```
-
-```{eval-rst}
-.. py:data:: eConnectionStatusEndOfFile
-
-   End-of-file encountered.
-```
-
-```{eval-rst}
-.. py:data:: eConnectionStatusError
-
-   Error encountered.
-```
-
-```{eval-rst}
-.. py:data:: eConnectionStatusTimedOut
-
-   Request timed out.
-```
-
-```{eval-rst}
-.. py:data:: eConnectionStatusNoConnection
-
-   No connection.
-```
-
-```{eval-rst}
-.. py:data:: eConnectionStatusLostConnection
-
-   Lost connection while connected to a  valid connection.
-```
-
-```{eval-rst}
-.. py:data:: eConnectionStatusInterrupted
-
-   Interrupted read.
-
-```
-
-(errortype)=
-
-### ErrorType
-
-```{eval-rst}
-.. py:data:: eErrorTypeInvalid
-```
-
-```{eval-rst}
-.. py:data:: eErrorTypeGeneric
-
-   Generic errors that can be any value.
-```
-
-```{eval-rst}
-.. py:data:: eErrorTypeMachKernel
-
-   Mach kernel error codes.
-```
-
-```{eval-rst}
-.. py:data:: eErrorTypePOSIX
-
-   POSIX error codes.
-```
-
-```{eval-rst}
-.. py:data:: eErrorTypeExpression
-
-   These are from the ExpressionResults enum.
-```
-
-```{eval-rst}
-.. py:data:: eErrorTypeWin32
-
-   Standard Win32 error codes.
-
-```
-
-(valuetype)=
-
-### ValueType
-
-```{eval-rst}
-.. py:data:: eValueTypeInvalid
-```
-
-```{eval-rst}
-.. py:data:: eValueTypeVariableGlobal
-
-   Global variable.
-```
-
-```{eval-rst}
-.. py:data:: eValueTypeVariableStatic
-
-   Static variable.
-```
-
-```{eval-rst}
-.. py:data:: eValueTypeVariableArgument
-
-   Function argument variable.
-```
-
-```{eval-rst}
-.. py:data:: eValueTypeVariableLocal
-
-   Function local variable.
-```
-
-```{eval-rst}
-.. py:data:: eValueTypeRegister
-
-   Stack frame register.
-```
-
-```{eval-rst}
-.. py:data:: eValueTypeRegisterSet
-
-   A collection of stack frame register values.
-```
-
-```{eval-rst}
-.. py:data:: eValueTypeConstResult
-
-   Constant result variables.
-```
-
-```{eval-rst}
-.. py:data:: eValueTypeVariableThreadLocal
-
-   Thread local storage variable.
-
-```
-
-(inputreadergranularity)=
-
-### InputReaderGranularity
-
-Token size/granularities for Input Readers.
-
-```{eval-rst}
-.. py:data:: eInputReaderGranularityInvalid
-```
-
-```{eval-rst}
-.. py:data:: eInputReaderGranularityByte
-```
-
-```{eval-rst}
-.. py:data:: eInputReaderGranularityWord
-```
-
-```{eval-rst}
-.. py:data:: eInputReaderGranularityLine
-```
-
-```{eval-rst}
-.. py:data:: eInputReaderGranularityAll
-
-```
-
-(symbolcontextitem)=
-
-### SymbolContextItem
-
-These mask bits allow a common interface for queries that can
-limit the amount of information that gets parsed to only the
-information that is requested. These bits also can indicate what
-actually did get resolved during query function calls.
-
-Each definition corresponds to one of the member variables
-in this class, and requests that that item be resolved, or
-indicates that the member did get resolved.
-
-```{eval-rst}
-.. py:data:: eSymbolContextTarget
-
-   Set when target is requested from a query, or was located
-   in query results.
-```
-
-```{eval-rst}
-.. py:data:: eSymbolContextModule
-
-   Set when module is requested from a query, or was located
-   in query results.
-```
-
-```{eval-rst}
-.. py:data:: eSymbolContextCompUnit
-
-   Set when compilation unit is requested from a query, or was
-   located in query results.
-```
-
-```{eval-rst}
-.. py:data:: eSymbolContextFunction
-
-   Set when function is requested from a query, or was located
-   in query results.
-```
-
-```{eval-rst}
-.. py:data:: eSymbolContextBlock
-
-   Set when the deepest block is requested from a query, or
-   was located in query results.
-```
-
-```{eval-rst}
-.. py:data:: eSymbolContextLineEntry
-
-   Set when line entry is requested from a query, or was
-   located in query results.
-```
-
-```{eval-rst}
-.. py:data:: eSymbolContextSymbol
-
-   Set when symbol is requested from a query, or was located
-   in query results
-```
-
-```{eval-rst}
-.. py:data:: eSymbolContextEverything
-
-   Indicates to try and lookup everything up during a routine
-   symbol context query.
-```
-
-```{eval-rst}
-.. py:data:: eSymbolContextVariable
-
-   Set when global or static variable is requested from a
-   query, or was located in query results.
-   eSymbolContextVariable is potentially expensive to lookup so
-   it isn't included in eSymbolContextEverything which stops it
-   from being used during frame PC lookups and many other
-   potential address to symbol context lookups.
-
-```
-
-(permissions)=
-
-### Permissions
-
-```{eval-rst}
-.. py:data:: ePermissionsWritable
-```
-
-```{eval-rst}
-.. py:data:: ePermissionsReadable
-```
-
-```{eval-rst}
-.. py:data:: ePermissionsExecutable
-
-```
-
-(inputreader)=
-
-### InputReader
-
-```{eval-rst}
-.. py:data:: eInputReaderActivate
-
-   Reader is newly pushed onto the reader stack.
-```
-
-```{eval-rst}
-.. py:data:: eInputReaderAsynchronousOutputWritten
-
-   An async output event occurred; the reader may want to do something.
-```
-
-```{eval-rst}
-.. py:data:: eInputReaderReactivate
-
-   Reader is on top of the stack again after another  reader was popped off.
-```
-
-```{eval-rst}
-.. py:data:: eInputReaderDeactivate
-
-   Another reader was pushed on the stack.
-```
-
-```{eval-rst}
-.. py:data:: eInputReaderGotToken
-
-   Reader got one of its tokens (granularity).
-```
-
-```{eval-rst}
-.. py:data:: eInputReaderInterrupt
-
-   Reader received an interrupt signal (probably from  a control-c).
-```
-
-```{eval-rst}
-.. py:data:: eInputReaderEndOfFile
-
-   Reader received an EOF char (probably from a control-d).
-```
-
-```{eval-rst}
-.. py:data:: eInputReaderDone
-
-   Reader was just popped off the stack and is done.
-
-```
-
-(breakpointeventtype)=
-
-### BreakpointEventType
-
-```{eval-rst}
-.. py:data:: eBreakpointEventTypeInvalidType
-```
-
-```{eval-rst}
-.. py:data:: eBreakpointEventTypeAdded
-```
-
-```{eval-rst}
-.. py:data:: eBreakpointEventTypeRemoved
-```
-
-```{eval-rst}
-.. py:data:: eBreakpointEventTypeLocationsAdded
-```
-
-```{eval-rst}
-.. py:data:: eBreakpointEventTypeLocationsRemoved
-```
-
-```{eval-rst}
-.. py:data:: eBreakpointEventTypeLocationsResolved
-```
-
-```{eval-rst}
-.. py:data:: eBreakpointEventTypeEnabled
-```
-
-```{eval-rst}
-.. py:data:: eBreakpointEventTypeDisabled
-```
-
-```{eval-rst}
-.. py:data:: eBreakpointEventTypeCommandChanged
-```
-
-```{eval-rst}
-.. py:data:: eBreakpointEventTypeConditionChanged
-```
-
-```{eval-rst}
-.. py:data:: eBreakpointEventTypeIgnoreChanged
-```
-
-```{eval-rst}
-.. py:data:: eBreakpointEventTypeThreadChanged
-```
-
-```{eval-rst}
-.. py:data:: eBreakpointEventTypeAutoContinueChanged
-
-```
-
-(watchpointeventtype)=
-
-### WatchpointEventType
-
-```{eval-rst}
-.. py:data:: eWatchpointEventTypeInvalidType
-```
-
-```{eval-rst}
-.. py:data:: eWatchpointEventTypeAdded
-```
-
-```{eval-rst}
-.. py:data:: eWatchpointEventTypeRemoved
-```
-
-```{eval-rst}
-.. py:data:: eWatchpointEventTypeEnabled
-```
-
-```{eval-rst}
-.. py:data:: eWatchpointEventTypeDisabled
-```
-
-```{eval-rst}
-.. py:data:: eWatchpointEventTypeCommandChanged
-```
-
-```{eval-rst}
-.. py:data:: eWatchpointEventTypeConditionChanged
-```
-
-```{eval-rst}
-.. py:data:: eWatchpointEventTypeIgnoreChanged
-```
-
-```{eval-rst}
-.. py:data:: eWatchpointEventTypeThreadChanged
-```
-
-```{eval-rst}
-.. py:data:: eWatchpointEventTypeTypeChanged
-
-```
-
-(languagetype)=
-
-### LanguageType
-
-```{eval-rst}
-.. py:data:: eLanguageTypeUnknown
-```
-
-```{eval-rst}
-.. py:data:: eLanguageTypeC89
-```
-
-```{eval-rst}
-.. py:data:: eLanguageTypeC
-```
-
-```{eval-rst}
-.. py:data:: eLanguageTypeAda83
-```
-
-```{eval-rst}
-.. py:data:: eLanguageTypeC_plus_plus
-```
-
-```{eval-rst}
-.. py:data:: eLanguageTypeCobol74
-```
-
-```{eval-rst}
-.. py:data:: eLanguageTypeCobol85
-```
-
-```{eval-rst}
-.. py:data:: eLanguageTypeFortran77
-```
-
-```{eval-rst}
-.. py:data:: eLanguageTypeFortran90
-```
-
-```{eval-rst}
-.. py:data:: eLanguageTypePascal83
-```
-
-```{eval-rst}
-.. py:data:: eLanguageTypeModula2
-```
-
-```{eval-rst}
-.. py:data:: eLanguageTypeJava
-```
-
-```{eval-rst}
-.. py:data:: eLanguageTypeC99
-```
-
-```{eval-rst}
-.. py:data:: eLanguageTypeAda95
-```
-
-```{eval-rst}
-.. py:data:: eLanguageTypeFortran95
-```
-
-```{eval-rst}
-.. py:data:: eLanguageTypePLI
-```
-
-```{eval-rst}
-.. py:data:: eLanguageTypeObjC
-```
-
-```{eval-rst}
-.. py:data:: eLanguageTypeObjC_plus_plus
-```
-
-```{eval-rst}
-.. py:data:: eLanguageTypeUPC
-```
-
-```{eval-rst}
-.. py:data:: eLanguageTypeD
-```
-
-```{eval-rst}
-.. py:data:: eLanguageTypePython
-```
-
-```{eval-rst}
-.. py:data:: eLanguageTypeOpenCL
-```
-
-```{eval-rst}
-.. py:data:: eLanguageTypeGo
-```
-
-```{eval-rst}
-.. py:data:: eLanguageTypeModula3
-```
-
-```{eval-rst}
-.. py:data:: eLanguageTypeHaskell
-```
-
-```{eval-rst}
-.. py:data:: eLanguageTypeC_plus_plus_03
-```
-
-```{eval-rst}
-.. py:data:: eLanguageTypeC_plus_plus_11
-```
-
-```{eval-rst}
-.. py:data:: eLanguageTypeOCaml
-```
-
-```{eval-rst}
-.. py:data:: eLanguageTypeRust
-```
-
-```{eval-rst}
-.. py:data:: eLanguageTypeC11
-```
-
-```{eval-rst}
-.. py:data:: eLanguageTypeSwift
-```
-
-```{eval-rst}
-.. py:data:: eLanguageTypeJulia
-```
-
-```{eval-rst}
-.. py:data:: eLanguageTypeDylan
-```
-
-```{eval-rst}
-.. py:data:: eLanguageTypeC_plus_plus_14
-```
-
-```{eval-rst}
-.. py:data:: eLanguageTypeFortran03
-```
-
-```{eval-rst}
-.. py:data:: eLanguageTypeFortran08
-```
-
-```{eval-rst}
-.. py:data:: eLanguageTypeMipsAssembler
-```
-
-```{eval-rst}
-.. py:data:: eLanguageTypeMojo
-```
-
-```{eval-rst}
-.. py:data:: eLanguageTypeExtRenderScript
-```
-
-```{eval-rst}
-.. py:data:: eNumLanguageTypes
-
-```
-
-(instrumentationruntimetype)=
-
-### InstrumentationRuntimeType
-
-```{eval-rst}
-.. py:data:: eInstrumentationRuntimeTypeAddressSanitizer
-```
-
-```{eval-rst}
-.. py:data:: eInstrumentationRuntimeTypeThreadSanitizer
-```
-
-```{eval-rst}
-.. py:data:: eInstrumentationRuntimeTypeUndefinedBehaviorSanitizer
-```
-
-```{eval-rst}
-.. py:data:: eInstrumentationRuntimeTypeMainThreadChecker
-```
-
-```{eval-rst}
-.. py:data:: eInstrumentationRuntimeTypeSwiftRuntimeReporting
-```
-
-```{eval-rst}
-.. py:data:: eNumInstrumentationRuntimeTypes
-
-```
-
-(dynamicvaluetype)=
-
-### DynamicValueType
-
-```{eval-rst}
-.. py:data:: eNoDynamicValues
-```
-
-```{eval-rst}
-.. py:data:: eDynamicCanRunTarget
-```
-
-```{eval-rst}
-.. py:data:: eDynamicDontRunTarget
-
-```
-
-(stopshowcolumn)=
-
-### StopShowColumn
-
-```{eval-rst}
-.. py:data:: eStopShowColumnAnsiOrCaret
-```
-
-```{eval-rst}
-.. py:data:: eStopShowColumnAnsi
-```
-
-```{eval-rst}
-.. py:data:: eStopShowColumnCaret
-```
-
-```{eval-rst}
-.. py:data:: eStopShowColumnNone
-
-```
-
-(accesstype)=
-
-### AccessType
-
-```{eval-rst}
-.. py:data:: eAccessNone
-```
-
-```{eval-rst}
-.. py:data:: eAccessPublic
-```
-
-```{eval-rst}
-.. py:data:: eAccessPrivate
-```
-
-```{eval-rst}
-.. py:data:: eAccessProtected
-```
-
-```{eval-rst}
-.. py:data:: eAccessPackage
-
-```
-
-(commandargumenttype)=
-
-### CommandArgumentType
-
-```{eval-rst}
-.. py:data:: eArgTypeAddress
-```
-
-```{eval-rst}
-.. py:data:: eArgTypeAddressOrExpression
-```
-
-```{eval-rst}
-.. py:data:: eArgTypeAliasName
-```
-
-```{eval-rst}
-.. py:data:: eArgTypeAliasOptions
-```
-
-```{eval-rst}
-.. py:data:: eArgTypeArchitecture
-```
-
-```{eval-rst}
-.. py:data:: eArgTypeBoolean
-```
-
-```{eval-rst}
-.. py:data:: eArgTypeBreakpointID
-```
-
-```{eval-rst}
-.. py:data:: eArgTypeBreakpointIDRange
-```
-
-```{eval-rst}
-.. py:data:: eArgTypeBreakpointName
-```
-
-```{eval-rst}
-.. py:data:: eArgTypeByteSize
-```
-
-```{eval-rst}
-.. py:data:: eArgTypeClassName
-```
-
-```{eval-rst}
-.. py:data:: eArgTypeCommandName
-```
-
-```{eval-rst}
-.. py:data:: eArgTypeCount
-```
-
-```{eval-rst}
-.. py:data:: eArgTypeDescriptionVerbosity
-```
-
-```{eval-rst}
-.. py:data:: eArgTypeDirectoryName
-```
-
-```{eval-rst}
-.. py:data:: eArgTypeDisassemblyFlavor
-```
-
-```{eval-rst}
-.. py:data:: eArgTypeEndAddress
-```
-
-```{eval-rst}
-.. py:data:: eArgTypeExpression
-```
-
-```{eval-rst}
-.. py:data:: eArgTypeExpressionPath
-```
-
-```{eval-rst}
-.. py:data:: eArgTypeExprFormat
-```
-
-```{eval-rst}
-.. py:data:: eArgTypeFileLineColumn
-```
-
-```{eval-rst}
-.. py:data:: eArgTypeFilename
-```
-
-```{eval-rst}
-.. py:data:: eArgTypeFormat
-```
-
-```{eval-rst}
-.. py:data:: eArgTypeFrameIndex
-```
-
-```{eval-rst}
-.. py:data:: eArgTypeFullName
-```
-
-```{eval-rst}
-.. py:data:: eArgTypeFunctionName
-```
-
-```{eval-rst}
-.. py:data:: eArgTypeFunctionOrSymbol
-```
-
-```{eval-rst}
-.. py:data:: eArgTypeGDBFormat
-```
-
-```{eval-rst}
-.. py:data:: eArgTypeHelpText
-```
-
-```{eval-rst}
-.. py:data:: eArgTypeIndex
-```
-
-```{eval-rst}
-.. py:data:: eArgTypeLanguage
-```
-
-```{eval-rst}
-.. py:data:: eArgTypeLineNum
-```
-
-```{eval-rst}
-.. py:data:: eArgTypeLogCategory
-```
-
-```{eval-rst}
-.. py:data:: eArgTypeLogChannel
-```
-
-```{eval-rst}
-.. py:data:: eArgTypeMethod
-```
-
-```{eval-rst}
-.. py:data:: eArgTypeName
-```
-
-```{eval-rst}
-.. py:data:: eArgTypeNewPathPrefix
-```
-
-```{eval-rst}
-.. py:data:: eArgTypeNumLines
-```
-
-```{eval-rst}
-.. py:data:: eArgTypeNumberPerLine
-```
-
-```{eval-rst}
-.. py:data:: eArgTypeOffset
-```
-
-```{eval-rst}
-.. py:data:: eArgTypeOldPathPrefix
-```
-
-```{eval-rst}
-.. py:data:: eArgTypeOneLiner
-```
-
-```{eval-rst}
-.. py:data:: eArgTypePath
-```
-
-```{eval-rst}
-.. py:data:: eArgTypePermissionsNumber
-```
-
-```{eval-rst}
-.. py:data:: eArgTypePermissionsString
-```
-
-```{eval-rst}
-.. py:data:: eArgTypePid
-```
-
-```{eval-rst}
-.. py:data:: eArgTypePlugin
-```
-
-```{eval-rst}
-.. py:data:: eArgTypeProcessName
-```
-
-```{eval-rst}
-.. py:data:: eArgTypePythonClass
-```
-
-```{eval-rst}
-.. py:data:: eArgTypePythonFunction
-```
-
-```{eval-rst}
-.. py:data:: eArgTypePythonScript
-```
-
-```{eval-rst}
-.. py:data:: eArgTypeQueueName
-```
-
-```{eval-rst}
-.. py:data:: eArgTypeRegisterName
-```
-
-```{eval-rst}
-.. py:data:: eArgTypeRegularExpression
-```
-
-```{eval-rst}
-.. py:data:: eArgTypeRunArgs
-```
-
-```{eval-rst}
-.. py:data:: eArgTypeRunMode
-```
-
-```{eval-rst}
-.. py:data:: eArgTypeScriptedCommandSynchronicity
-```
-
-```{eval-rst}
-.. py:data:: eArgTypeScriptLang
-```
-
-```{eval-rst}
-.. py:data:: eArgTypeSearchWord
-```
-
-```{eval-rst}
-.. py:data:: eArgTypeSelector
-```
-
-```{eval-rst}
-.. py:data:: eArgTypeSettingIndex
-```
-
-```{eval-rst}
-.. py:data:: eArgTypeSettingKey
-```
-
-```{eval-rst}
-.. py:data:: eArgTypeSettingPrefix
-```
-
-```{eval-rst}
-.. py:data:: eArgTypeSettingVariableName
-```
-
-```{eval-rst}
-.. py:data:: eArgTypeShlibName
-```
-
-```{eval-rst}
-.. py:data:: eArgTypeSourceFile
-```
-
-```{eval-rst}
-.. py:data:: eArgTypeSortOrder
-```
-
-```{eval-rst}
-.. py:data:: eArgTypeStartAddress
-```
-
-```{eval-rst}
-.. py:data:: eArgTypeSummaryString
-```
-
-```{eval-rst}
-.. py:data:: eArgTypeSymbol
-```
-
-```{eval-rst}
-.. py:data:: eArgTypeThreadID
-```
-
-```{eval-rst}
-.. py:data:: eArgTypeThreadIndex
-```
-
-```{eval-rst}
-.. py:data:: eArgTypeThreadName
-```
-
-```{eval-rst}
-.. py:data:: eArgTypeTypeName
-```
-
-```{eval-rst}
-.. py:data:: eArgTypeUnsignedInteger
-```
-
-```{eval-rst}
-.. py:data:: eArgTypeUnixSignal
-```
-
-```{eval-rst}
-.. py:data:: eArgTypeVarName
-```
-
-```{eval-rst}
-.. py:data:: eArgTypeValue
-```
-
-```{eval-rst}
-.. py:data:: eArgTypeWidth
-```
-
-```{eval-rst}
-.. py:data:: eArgTypeNone
-```
-
-```{eval-rst}
-.. py:data:: eArgTypePlatform
-```
-
-```{eval-rst}
-.. py:data:: eArgTypeWatchpointID
-```
-
-```{eval-rst}
-.. py:data:: eArgTypeWatchpointIDRange
-```
-
-```{eval-rst}
-.. py:data:: eArgTypeWatchType
-```
-
-```{eval-rst}
-.. py:data:: eArgRawInput
-```
-
-```{eval-rst}
-.. py:data:: eArgTypeCommand
-```
-
-```{eval-rst}
-.. py:data:: eArgTypeColumnNum
-```
-
-```{eval-rst}
-.. py:data:: eArgTypeModuleUUID
-```
-
-```{eval-rst}
-.. py:data:: eArgTypeLastArg
-```
-
-```{eval-rst}
-.. py:data:: eArgTypeCompletionType
-```
-
-(symboltype)=
-
-### SymbolType
-
-```{eval-rst}
-.. py:data:: eSymbolTypeAny
-```
-
-```{eval-rst}
-.. py:data:: eSymbolTypeInvalid
-```
-
-```{eval-rst}
-.. py:data:: eSymbolTypeAbsolute
-```
-
-```{eval-rst}
-.. py:data:: eSymbolTypeCode
-```
-
-```{eval-rst}
-.. py:data:: eSymbolTypeResolver
-```
-
-```{eval-rst}
-.. py:data:: eSymbolTypeData
-```
-
-```{eval-rst}
-.. py:data:: eSymbolTypeTrampoline
-```
-
-```{eval-rst}
-.. py:data:: eSymbolTypeRuntime
-```
-
-```{eval-rst}
-.. py:data:: eSymbolTypeException
-```
-
-```{eval-rst}
-.. py:data:: eSymbolTypeSourceFile
-```
-
-```{eval-rst}
-.. py:data:: eSymbolTypeHeaderFile
-```
-
-```{eval-rst}
-.. py:data:: eSymbolTypeObjectFile
-```
-
-```{eval-rst}
-.. py:data:: eSymbolTypeCommonBlock
-```
-
-```{eval-rst}
-.. py:data:: eSymbolTypeBlock
-```
-
-```{eval-rst}
-.. py:data:: eSymbolTypeLocal
-```
-
-```{eval-rst}
-.. py:data:: eSymbolTypeParam
-```
-
-```{eval-rst}
-.. py:data:: eSymbolTypeVariable
-```
-
-```{eval-rst}
-.. py:data:: eSymbolTypeVariableType
-```
-
-```{eval-rst}
-.. py:data:: eSymbolTypeLineEntry
-```
-
-```{eval-rst}
-.. py:data:: eSymbolTypeLineHeader
-```
-
-```{eval-rst}
-.. py:data:: eSymbolTypeScopeBegin
-```
-
-```{eval-rst}
-.. py:data:: eSymbolTypeScopeEnd
-```
-
-```{eval-rst}
-.. py:data:: eSymbolTypeAdditional
-```
-
-```{eval-rst}
-.. py:data:: eSymbolTypeCompiler
-```
-
-```{eval-rst}
-.. py:data:: eSymbolTypeInstrumentation
-```
-
-```{eval-rst}
-.. py:data:: eSymbolTypeUndefined
-```
-
-```{eval-rst}
-.. py:data:: eSymbolTypeObjCClass
-```
-
-```{eval-rst}
-.. py:data:: eSymbolTypeObjCMetaClass
-```
-
-```{eval-rst}
-.. py:data:: eSymbolTypeObjCIVar
-```
-
-```{eval-rst}
-.. py:data:: eSymbolTypeReExported
-
-```
-
-(sectiontype)=
-
-### SectionType
-
-```{eval-rst}
-.. py:data:: eSectionTypeInvalid
-```
-
-```{eval-rst}
-.. py:data:: eSectionTypeCode
-```
-
-```{eval-rst}
-.. py:data:: eSectionTypeContainer
-```
-
-```{eval-rst}
-.. py:data:: eSectionTypeData
-```
-
-```{eval-rst}
-.. py:data:: eSectionTypeDataCString
-```
-
-```{eval-rst}
-.. py:data:: eSectionTypeDataCStringPointers
-```
-
-```{eval-rst}
-.. py:data:: eSectionTypeDataSymbolAddress
-```
-
-```{eval-rst}
-.. py:data:: eSectionTypeData4
-```
-
-```{eval-rst}
-.. py:data:: eSectionTypeData8
-```
-
-```{eval-rst}
-.. py:data:: eSectionTypeData16
-```
-
-```{eval-rst}
-.. py:data:: eSectionTypeDataPointers
-```
-
-```{eval-rst}
-.. py:data:: eSectionTypeDebug
-```
-
-```{eval-rst}
-.. py:data:: eSectionTypeZeroFill
-```
-
-```{eval-rst}
-.. py:data:: eSectionTypeDataObjCMessageRefs
-```
-
-```{eval-rst}
-.. py:data:: eSectionTypeDataObjCCFStrings
-```
-
-```{eval-rst}
-.. py:data:: eSectionTypeDWARFDebugAbbrev
-```
-
-```{eval-rst}
-.. py:data:: eSectionTypeDWARFDebugAddr
-```
-
-```{eval-rst}
-.. py:data:: eSectionTypeDWARFDebugAranges
-```
-
-```{eval-rst}
-.. py:data:: eSectionTypeDWARFDebugCuIndex
-```
-
-```{eval-rst}
-.. py:data:: eSectionTypeDWARFDebugFrame
-```
-
-```{eval-rst}
-.. py:data:: eSectionTypeDWARFDebugInfo
-```
-
-```{eval-rst}
-.. py:data:: eSectionTypeDWARFDebugLine
-```
-
-```{eval-rst}
-.. py:data:: eSectionTypeDWARFDebugLoc
-```
-
-```{eval-rst}
-.. py:data:: eSectionTypeDWARFDebugMacInfo
-```
-
-```{eval-rst}
-.. py:data:: eSectionTypeDWARFDebugMacro
-```
-
-```{eval-rst}
-.. py:data:: eSectionTypeDWARFDebugPubNames
-```
-
-```{eval-rst}
-.. py:data:: eSectionTypeDWARFDebugPubTypes
-```
-
-```{eval-rst}
-.. py:data:: eSectionTypeDWARFDebugRanges
-```
-
-```{eval-rst}
-.. py:data:: eSectionTypeDWARFDebugStr
-```
-
-```{eval-rst}
-.. py:data:: eSectionTypeDWARFDebugStrOffsets
-```
-
-```{eval-rst}
-.. py:data:: eSectionTypeDWARFAppleNames
-```
-
-```{eval-rst}
-.. py:data:: eSectionTypeDWARFAppleTypes
-```
-
-```{eval-rst}
-.. py:data:: eSectionTypeDWARFAppleNamespaces
-```
-
-```{eval-rst}
-.. py:data:: eSectionTypeDWARFAppleObjC
-```
-
-```{eval-rst}
-.. py:data:: eSectionTypeELFSymbolTable
-```
-
-```{eval-rst}
-.. py:data:: eSectionTypeELFDynamicSymbols
-```
-
-```{eval-rst}
-.. py:data:: eSectionTypeELFRelocationEntries
-```
-
-```{eval-rst}
-.. py:data:: eSectionTypeELFDynamicLinkInfo
-```
-
-```{eval-rst}
-.. py:data:: eSectionTypeEHFrame
-```
-
-```{eval-rst}
-.. py:data:: eSectionTypeARMexidx
-```
-
-```{eval-rst}
-.. py:data:: eSectionTypeARMextab
-```
-
-```{eval-rst}
-.. py:data:: eSectionTypeCompactUnwind
-```
-
-```{eval-rst}
-.. py:data:: eSectionTypeGoSymtab
-```
-
-```{eval-rst}
-.. py:data:: eSectionTypeAbsoluteAddress
-```
-
-```{eval-rst}
-.. py:data:: eSectionTypeDWARFGNUDebugAltLink
-```
-
-```{eval-rst}
-.. py:data:: eSectionTypeDWARFDebugTypes
-```
-
-```{eval-rst}
-.. py:data:: eSectionTypeDWARFDebugNames
-```
-
-```{eval-rst}
-.. py:data:: eSectionTypeOther
-```
-
-```{eval-rst}
-.. py:data:: eSectionTypeDWARFDebugLineStr
-```
-
-```{eval-rst}
-.. py:data:: eSectionTypeDWARFDebugRngLists
-```
-
-```{eval-rst}
-.. py:data:: eSectionTypeDWARFDebugLocLists
-```
-
-```{eval-rst}
-.. py:data:: eSectionTypeDWARFDebugAbbrevDwo
-```
-
-```{eval-rst}
-.. py:data:: eSectionTypeDWARFDebugInfoDwo
-```
-
-```{eval-rst}
-.. py:data:: eSectionTypeDWARFDebugStrDwo
-```
-
-```{eval-rst}
-.. py:data:: eSectionTypeDWARFDebugStrOffsetsDwo
-```
-
-```{eval-rst}
-.. py:data:: eSectionTypeDWARFDebugTypesDwo
-```
-
-```{eval-rst}
-.. py:data:: eSectionTypeDWARFDebugRngListsDwo
-```
-
-```{eval-rst}
-.. py:data:: eSectionTypeDWARFDebugLocDwo
-```
-
-```{eval-rst}
-.. py:data:: eSectionTypeDWARFDebugLocListsDwo
-```
-
-```{eval-rst}
-.. py:data:: eSectionTypeDWARFDebugTuIndex
-
-```
-
-(emulatorinstructionoption)=
-
-### EmulatorInstructionOption
-
-```{eval-rst}
-.. py:data:: eEmulateInstructionOptionNone
-```
-
-```{eval-rst}
-.. py:data:: eEmulateInstructionOptionAutoAdvancePC
-```
-
-```{eval-rst}
-.. py:data:: eEmulateInstructionOptionIgnoreConditions
-
-```
-
-(functionnametype)=
-
-### FunctionNameType
-
-```{eval-rst}
-.. py:data:: eFunctionNameTypeNone
-```
-
-```{eval-rst}
-.. py:data:: eFunctionNameTypeAuto
-```
-
-```{eval-rst}
-.. py:data:: eFunctionNameTypeFull
-```
-
-```{eval-rst}
-.. py:data:: eFunctionNameTypeBase
-```
-
-```{eval-rst}
-.. py:data:: eFunctionNameTypeMethod
-```
-
-```{eval-rst}
-.. py:data:: eFunctionNameTypeSelector
-```
-
-```{eval-rst}
-.. py:data:: eFunctionNameTypeAny
-
-```
-
-(basictype)=
-
-### BasicType
-
-```{eval-rst}
-.. py:data:: eBasicTypeInvalid
-```
-
-```{eval-rst}
-.. py:data:: eBasicTypeVoid
-```
-
-```{eval-rst}
-.. py:data:: eBasicTypeChar
-```
-
-```{eval-rst}
-.. py:data:: eBasicTypeSignedChar
-```
-
-```{eval-rst}
-.. py:data:: eBasicTypeUnsignedChar
-```
-
-```{eval-rst}
-.. py:data:: eBasicTypeWChar
-```
-
-```{eval-rst}
-.. py:data:: eBasicTypeSignedWChar
-```
-
-```{eval-rst}
-.. py:data:: eBasicTypeUnsignedWChar
-```
-
-```{eval-rst}
-.. py:data:: eBasicTypeChar16
-```
-
-```{eval-rst}
-.. py:data:: eBasicTypeChar32
-```
-
-```{eval-rst}
-.. py:data:: eBasicTypeChar8
-```
-
-```{eval-rst}
-.. py:data:: eBasicTypeShort
-```
-
-```{eval-rst}
-.. py:data:: eBasicTypeUnsignedShort
-```
-
-```{eval-rst}
-.. py:data:: eBasicTypeInt
-```
-
-```{eval-rst}
-.. py:data:: eBasicTypeUnsignedInt
-```
-
-```{eval-rst}
-.. py:data:: eBasicTypeLong
-```
-
-```{eval-rst}
-.. py:data:: eBasicTypeUnsignedLong
-```
-
-```{eval-rst}
-.. py:data:: eBasicTypeLongLong
-```
-
-```{eval-rst}
-.. py:data:: eBasicTypeUnsignedLongLong
-```
-
-```{eval-rst}
-.. py:data:: eBasicTypeInt128
-```
-
-```{eval-rst}
-.. py:data:: eBasicTypeUnsignedInt128
-```
-
-```{eval-rst}
-.. py:data:: eBasicTypeBool
-```
-
-```{eval-rst}
-.. py:data:: eBasicTypeHalf
-```
-
-```{eval-rst}
-.. py:data:: eBasicTypeFloat
-```
-
-```{eval-rst}
-.. py:data:: eBasicTypeDouble
-```
-
-```{eval-rst}
-.. py:data:: eBasicTypeLongDouble
-```
-
-```{eval-rst}
-.. py:data:: eBasicTypeFloatComplex
-```
-
-```{eval-rst}
-.. py:data:: eBasicTypeDoubleComplex
-```
-
-```{eval-rst}
-.. py:data:: eBasicTypeLongDoubleComplex
-```
-
-```{eval-rst}
-.. py:data:: eBasicTypeObjCID
-```
-
-```{eval-rst}
-.. py:data:: eBasicTypeObjCClass
-```
-
-```{eval-rst}
-.. py:data:: eBasicTypeObjCSel
-```
-
-```{eval-rst}
-.. py:data:: eBasicTypeNullPtr
-```
-
-```{eval-rst}
-.. py:data:: eBasicTypeOther
-```
-
-```{eval-rst}
-.. py:data:: eBasicTypeFloat128
-
-```
-
-(tracetype)=
-
-### TraceType
-
-```{eval-rst}
-.. py:data:: eTraceTypeNone
-```
-
-```{eval-rst}
-.. py:data:: eTraceTypeProcessorTrace
-
-```
-
-(structureddatatype)=
-
-### StructuredDataType
-
-```{eval-rst}
-.. py:data:: eStructuredDataTypeInvalid
-```
-
-```{eval-rst}
-.. py:data:: eStructuredDataTypeNull
-```
-
-```{eval-rst}
-.. py:data:: eStructuredDataTypeGeneric
-```
-
-```{eval-rst}
-.. py:data:: eStructuredDataTypeArray
-```
-
-```{eval-rst}
-.. py:data:: eStructuredDataTypeInteger
-```
-
-```{eval-rst}
-.. py:data:: eStructuredDataTypeFloat
-```
-
-```{eval-rst}
-.. py:data:: eStructuredDataTypeBoolean
-```
-
-```{eval-rst}
-.. py:data:: eStructuredDataTypeString
-```
-
-```{eval-rst}
-.. py:data:: eStructuredDataTypeDictionary
-
-```
-
-(typeclass)=
-
-### TypeClass
-
-```{eval-rst}
-.. py:data:: eTypeClassInvalid
-```
-
-```{eval-rst}
-.. py:data:: eTypeClassArray
-```
-
-```{eval-rst}
-.. py:data:: eTypeClassBlockPointer
-```
-
-```{eval-rst}
-.. py:data:: eTypeClassBuiltin
-```
-
-```{eval-rst}
-.. py:data:: eTypeClassClass
-```
-
-```{eval-rst}
-.. py:data:: eTypeClassFloat
-```
-
-```{eval-rst}
-.. py:data:: eTypeClassComplexInteger
-```
-
-```{eval-rst}
-.. py:data:: eTypeClassComplexFloat
-```
-
-```{eval-rst}
-.. py:data:: eTypeClassFunction
-```
-
-```{eval-rst}
-.. py:data:: eTypeClassMemberPointer
-```
-
-```{eval-rst}
-.. py:data:: eTypeClassObjCObject
-```
-
-```{eval-rst}
-.. py:data:: eTypeClassObjCInterface
-```
-
-```{eval-rst}
-.. py:data:: eTypeClassObjCObjectPointer
-```
-
-```{eval-rst}
-.. py:data:: eTypeClassPointer
-```
-
-```{eval-rst}
-.. py:data:: eTypeClassReference
-```
-
-```{eval-rst}
-.. py:data:: eTypeClassStruct
-```
-
-```{eval-rst}
-.. py:data:: eTypeClassTypedef
-```
-
-```{eval-rst}
-.. py:data:: eTypeClassUnion
-```
-
-```{eval-rst}
-.. py:data:: eTypeClassVector
-```
-
-```{eval-rst}
-.. py:data:: eTypeClassOther
-```
-
-```{eval-rst}
-.. py:data:: eTypeClassAny
-
-```
-
-(templateargument)=
-
-### TemplateArgument
-
-```{eval-rst}
-.. py:data:: eTemplateArgumentKindNull
-```
-
-```{eval-rst}
-.. py:data:: eTemplateArgumentKindType
-```
-
-```{eval-rst}
-.. py:data:: eTemplateArgumentKindDeclaration
-```
-
-```{eval-rst}
-.. py:data:: eTemplateArgumentKindIntegral
-```
-
-```{eval-rst}
-.. py:data:: eTemplateArgumentKindTemplate
-```
-
-```{eval-rst}
-.. py:data:: eTemplateArgumentKindTemplateExpansion
-```
-
-```{eval-rst}
-.. py:data:: eTemplateArgumentKindExpression
-```
-
-```{eval-rst}
-.. py:data:: eTemplateArgumentKindPack
-```
-
-```{eval-rst}
-.. py:data:: eTemplateArgumentKindNullPtr
-```
-
-```{eval-rst}
-.. py:data:: eTemplateArgumentKindUncommonValue
-
-```
-
-(typeoption)=
-
-### TypeOption
-
-Options that can be set for a formatter to alter its behavior. Not
-all of these are applicable to all formatter types.
-
-```{eval-rst}
-.. py:data:: eTypeOptionNone
-```
-
-```{eval-rst}
-.. py:data:: eTypeOptionCascade
-```
-
-```{eval-rst}
-.. py:data:: eTypeOptionSkipPointers
-```
-
-```{eval-rst}
-.. py:data:: eTypeOptionSkipReferences
-```
-
-```{eval-rst}
-.. py:data:: eTypeOptionHideChildren
-```
-
-```{eval-rst}
-.. py:data:: eTypeOptionHideValue
-```
-
-```{eval-rst}
-.. py:data:: eTypeOptionShowOneLiner
-```
-
-```{eval-rst}
-.. py:data:: eTypeOptionHideNames
-```
-
-```{eval-rst}
-.. py:data:: eTypeOptionNonCacheable
-```
-
-```{eval-rst}
-.. py:data:: eTypeOptionHideEmptyAggregates
-```
-
-```{eval-rst}
-.. py:data:: eTypeOptionFrontEndWantsDereference
-
-
-```
-
-(framecompare)=
-
-### FrameCompare
-
-This is the return value for frame comparisons. If you are comparing frame
-A to frame B the following cases arise:
-
-> 1. When frame A pushes frame B (or a frame that ends up pushing
->    B) A is Older than B.
-> 2. When frame A pushed frame B (or if frameA is on the stack
->    but B is not) A is Younger than B.
-> 3. When frame A and frame B have the same StackID, they are
->    Equal.
-> 4. When frame A and frame B have the same immediate parent
->    frame, but are not equal, the comparison yields SameParent.
-> 5. If the two frames are on different threads or processes the
->    comparison is Invalid.
-> 6. If for some reason we can't figure out what went on, we
->    return Unknown.
-
-```{eval-rst}
-.. py:data:: eFrameCompareInvalid
-```
-
-```{eval-rst}
-.. py:data:: eFrameCompareUnknown
-```
-
-```{eval-rst}
-.. py:data:: eFrameCompareEqual
-```
-
-```{eval-rst}
-.. py:data:: eFrameCompareSameParent
-```
-
-```{eval-rst}
-.. py:data:: eFrameCompareYounger
-```
-
-```{eval-rst}
-.. py:data:: eFrameCompareOlder
-
-```
-
-(filepermissions)=
-
-### FilePermissions
-
-```{eval-rst}
-.. py:data:: eFilePermissionsUserRead
-```
-
-```{eval-rst}
-.. py:data:: eFilePermissionsUserWrite
-```
-
-```{eval-rst}
-.. py:data:: eFilePermissionsUserExecute
-```
-
-```{eval-rst}
-.. py:data:: eFilePermissionsGroupRead
-```
-
-```{eval-rst}
-.. py:data:: eFilePermissionsGroupWrite
-```
-
-```{eval-rst}
-.. py:data:: eFilePermissionsGroupExecute
-```
-
-```{eval-rst}
-.. py:data:: eFilePermissionsWorldRead
-```
-
-```{eval-rst}
-.. py:data:: eFilePermissionsWorldWrite
-```
-
-```{eval-rst}
-.. py:data:: eFilePermissionsWorldExecute
-```
-
-```{eval-rst}
-.. py:data:: eFilePermissionsUserRW
-```
-
-```{eval-rst}
-.. py:data:: eFileFilePermissionsUserRX
-```
-
-```{eval-rst}
-.. py:data:: eFilePermissionsUserRWX
-```
-
-```{eval-rst}
-.. py:data:: eFilePermissionsGroupRW
-```
-
-```{eval-rst}
-.. py:data:: eFilePermissionsGroupRX
-```
-
-```{eval-rst}
-.. py:data:: eFilePermissionsGroupRWX
-```
-
-```{eval-rst}
-.. py:data:: eFilePermissionsWorldRW
-```
-
-```{eval-rst}
-.. py:data:: eFilePermissionsWorldRX
-```
-
-```{eval-rst}
-.. py:data:: eFilePermissionsWorldRWX
-```
-
-```{eval-rst}
-.. py:data:: eFilePermissionsEveryoneR
-```
-
-```{eval-rst}
-.. py:data:: eFilePermissionsEveryoneW
-```
-
-```{eval-rst}
-.. py:data:: eFilePermissionsEveryoneX
-```
-
-```{eval-rst}
-.. py:data:: eFilePermissionsEveryoneRW
-```
-
-```{eval-rst}
-.. py:data:: eFilePermissionsEveryoneRX
-```
-
-```{eval-rst}
-.. py:data:: eFilePermissionsEveryoneRWX
-```
-
-```{eval-rst}
-.. py:data:: eFilePermissionsFileDefault = eFilePermissionsUserRW,
-```
-
-```{eval-rst}
-.. py:data:: eFilePermissionsDirectoryDefault
-
-```
-
-(queueitem)=
-
-### QueueItem
-
-```{eval-rst}
-.. py:data:: eQueueItemKindUnknown
-```
-
-```{eval-rst}
-.. py:data:: eQueueItemKindFunction
-```
-
-```{eval-rst}
-.. py:data:: eQueueItemKindBlock
-
-```
-
-(queuekind)=
-
-### QueueKind
-
-libdispatch aka Grand Central Dispatch (GCD) queues can be either
-serial (executing on one thread) or concurrent (executing on
-multiple threads).
-
-```{eval-rst}
-.. py:data:: eQueueKindUnknown
-```
-
-```{eval-rst}
-.. py:data:: eQueueKindSerial
-```
-
-```{eval-rst}
-.. py:data:: eQueueKindConcurrent
-
-```
-
-(expressionevaluationphase)=
-
-### ExpressionEvaluationPhase
-
-These are the cancellable stages of expression evaluation, passed
-to the expression evaluation callback, so that you can interrupt
-expression evaluation at the various points in its lifecycle.
-
-```{eval-rst}
-.. py:data:: eExpressionEvaluationParse
-```
-
-```{eval-rst}
-.. py:data:: eExpressionEvaluationIRGen
-```
-
-```{eval-rst}
-.. py:data:: eExpressionEvaluationExecution
-```
-
-```{eval-rst}
-.. py:data:: eExpressionEvaluationComplete
-
-```
-
-(watchpointkind)=
-
-### WatchpointKind
-
-Indicates what types of events cause the watchpoint to fire. Used by Native
--Protocol-related classes.
-
-```{eval-rst}
-.. py:data:: eWatchpointKindWrite
-```
-
-```{eval-rst}
-.. py:data:: eWatchpointKindRead
-
-```
-
-(gdbsignal)=
-
-### GdbSignal
-
-```{eval-rst}
-.. py:data:: eGdbSignalBadAccess
-```
-
-```{eval-rst}
-.. py:data:: eGdbSignalBadInstruction
-```
-
-```{eval-rst}
-.. py:data:: eGdbSignalArithmetic
-```
-
-```{eval-rst}
-.. py:data:: eGdbSignalEmulation
-```
-
-```{eval-rst}
-.. py:data:: eGdbSignalSoftware
-```
-
-```{eval-rst}
-.. py:data:: eGdbSignalBreakpoint
-```
-
-(pathtype)=
-
-### PathType
-
-Used with {any}`SBHostOS.GetLLDBPath` to find files that are
-related to LLDB on the current host machine. Most files are
-relative to LLDB or are in known locations.
-
-```{eval-rst}
-.. py:data:: ePathTypeLLDBShlibDir
-
-   The directory where the lldb.so (unix) or LLDB mach-o file in
-   LLDB.framework (MacOSX) exists.
-```
-
-```{eval-rst}
-.. py:data:: ePathTypeSupportExecutableDir
-
-   Find LLDB support executable directory (debugserver, etc).
-```
-
-```{eval-rst}
-.. py:data:: ePathTypeHeaderDir
-
-   Find LLDB header file directory.
-```
-
-```{eval-rst}
-.. py:data:: ePathTypePythonDir
-
-   Find Python modules (PYTHONPATH) directory.
-```
-
-```{eval-rst}
-.. py:data:: ePathTypeLLDBSystemPlugins
-
-   System plug-ins directory
-```
-
-```{eval-rst}
-.. py:data:: ePathTypeLLDBUserPlugins
-
-   User plug-ins directory
-```
-
-```{eval-rst}
-.. py:data:: ePathTypeLLDBTempSystemDir
-
-   The LLDB temp directory for this system that will be cleaned up on exit.
-```
-
-```{eval-rst}
-.. py:data:: ePathTypeGlobalLLDBTempSystemDir
-
-   The LLDB temp directory for this system, NOT cleaned up on a process
-   exit.
-```
-
-```{eval-rst}
-.. py:data:: ePathTypeClangDir
-
-   Find path to Clang builtin headers.
-
-```
-
-(memberfunctionkind)=
-
-### MemberFunctionKind
-
-```{eval-rst}
-.. py:data:: eMemberFunctionKindUnknown
-```
-
-```{eval-rst}
-.. py:data:: eMemberFunctionKindConstructor
-
-   A function used to create instances.
-```
-
-```{eval-rst}
-.. py:data:: eMemberFunctionKindDestructor
-
-   A function used to tear down existing instances.
-```
-
-```{eval-rst}
-.. py:data:: eMemberFunctionKindInstanceMethod
-
-   A function that applies to a specific instance.
-```
-
-```{eval-rst}
-.. py:data:: eMemberFunctionKindStaticMethod
-
-   A function that applies to a type rather than any instance,
-
-```
-
-(typeflags)=
-
-### TypeFlags
-
-```{eval-rst}
-.. py:data:: eTypeHasChildren
-```
-
-```{eval-rst}
-.. py:data:: eTypeIsArray
-```
-
-```{eval-rst}
-.. py:data:: eTypeIsBuiltIn
-```
-
-```{eval-rst}
-.. py:data:: eTypeIsCPlusPlus
-```
-
-```{eval-rst}
-.. py:data:: eTypeIsFuncPrototype
-```
-
-```{eval-rst}
-.. py:data:: eTypeIsObjC
-```
-
-```{eval-rst}
-.. py:data:: eTypeIsReference
-```
-
-```{eval-rst}
-.. py:data:: eTypeIsTemplate
-```
-
-```{eval-rst}
-.. py:data:: eTypeIsVector
-```
-
-```{eval-rst}
-.. py:data:: eTypeIsInteger
-```
-
-```{eval-rst}
-.. py:data:: eTypeIsComplex
-```
-
-```{eval-rst}
-.. py:data:: eTypeInstanceIsPointer
-
-```
-
-(commandflags)=
-
-### CommandFlags
-
-```{eval-rst}
-.. py:data:: eCommandRequiresTarget
-```
-
-```{eval-rst}
-.. py:data:: eCommandRequiresProcess
-```
-
-```{eval-rst}
-.. py:data:: eCommandRequiresThread
-```
-
-```{eval-rst}
-.. py:data:: eCommandRequiresFrame
-```
-
-```{eval-rst}
-.. py:data:: eCommandRequiresRegContext
-```
-
-```{eval-rst}
-.. py:data:: eCommandTryTargetAPILock
-```
-
-```{eval-rst}
-.. py:data:: eCommandProcessMustBeLaunched
-```
-
-```{eval-rst}
-.. py:data:: eCommandProcessMustBePaused
-```
-
-```{eval-rst}
-.. py:data:: eCommandProcessMustBeTraced
-
-```
-
-(typesummary)=
-
-### TypeSummary
-
-Whether a summary should cap how much data it returns to users or not.
-
-```{eval-rst}
-.. py:data:: eTypeSummaryCapped
-```
-
-```{eval-rst}
-.. py:data:: eTypeSummaryUncapped
-
-```
-
-(commandinterpreterresult)=
-
-### CommandInterpreterResult
-
-The result from a command interpreter run.
-
-```{eval-rst}
-.. py:data:: eCommandInterpreterResultSuccess
-
-   Command interpreter finished successfully.
-```
-
-```{eval-rst}
-.. py:data:: eCommandInterpreterResultInferiorCrash
-
-   Stopped because the corresponding option was set and the inferior
-   crashed.
-```
-
-```{eval-rst}
-.. py:data:: eCommandInterpreterResultCommandError
-
-   Stopped because the corresponding option was set and a command returned
-   an error.
-```
-
-```{eval-rst}
-.. py:data:: eCommandInterpreterResultQuitRequested
-
-   Stopped because quit was requested.
-
-```
-
-(watchpointvaluekind)=
-
-### WatchPointValueKind
-
-The type of value that the watchpoint was created to monitor.
-
-```{eval-rst}
-.. py:data:: eWatchPointValueKindInvalid
-
-   Invalid kind.
-```
-
-```{eval-rst}
-.. py:data:: eWatchPointValueKindVariable
-
-   Watchpoint was created watching a variable
-```
-
-```{eval-rst}
-.. py:data:: eWatchPointValueKindExpression
-
-   Watchpoint was created watching the result of an expression that was
-   evaluated at creation time.
+```{build-include} generated-python-api-enums.md
+:parser: myst_parser.sphinx_
 ```
diff --git a/lldb/scripts/gen-python-api-enums.py b/lldb/scripts/gen-python-api-enums.py
new file mode 100644
index 0000000000000..86f43e2325cdd
--- /dev/null
+++ b/lldb/scripts/gen-python-api-enums.py
@@ -0,0 +1,309 @@
+"""Generate the "Python API enumerators and constants" documentation page.
+
+LLDB exposes the enumerators from `lldb-enumerations.h` and the constants from
+`lldb-defines.h` as attributes of the `lldb` Python module. This script parses
+those two headers and emits a Markdown page documenting every public value, so
+the page can no longer drift out of sync with the source the way a
+hand-maintained copy does.
+
+The page is generated at build time and pulled into `python_api_enums.md` via
+the `{build-include}` directive (see `lldb/docs/_ext/build_include.py`).
+"""
+
+import argparse
+import re
+from dataclasses import dataclass, field
+
+# Matches the start of an enum declaration up to and including the opening
+# brace, capturing the enum name. Covers plain `enum Name {`, scoped
+# `enum Name : type {`, and the `FLAGS_ENUM(Name){` / `FLAGS_ANONYMOUS_ENUM()`
+# macros from lldb-enumerations.h. Enum bodies never contain nested braces, so
+# the matching `}` is simply the next one in the text.
+ENUM_RE = re.compile(
+    r"(?:enum\s+(?P<name>\w+)\s*(?::\s*[\w:]+\s*)?"
+    r"|FLAGS_ENUM\(\s*(?P<flags_name>\w+)\s*\)"
+    r"|FLAGS_ANONYMOUS_ENUM\(\s*\))\s*\{"
+)
+
+# Doxygen inline commands that wrap a following word for emphasis or reference.
+# We drop the command itself and keep its argument.
+DOXYGEN_CMD_RE = re.compile(r"\\(?:a|b|c|e|p|ref|see|link|endlink)\b\s?")
+
+# Constants are grouped editorially to match the long-standing layout of the
+# page. The classifier is prefix-based so new constants land in a sensible
+# group without further maintenance; anything unrecognized falls into
+# "Miscellaneous constants".
+CONSTANT_GROUP_ORDER = [
+    "Generic register numbers",
+    "Invalid value definitions",
+    "CPU types",
+    "Option set definitions",
+    "Miscellaneous constants",
+]
+
+
+def slugify(text):
+    return re.sub(r"[^a-z0-9]+", "-", text.lower()).strip("-")
+
+
+def clean_comment(text):
+    """Strip a doc-comment fragment down to its prose."""
+    return DOXYGEN_CMD_RE.sub("", text).rstrip()
+
+
+ at dataclass
+class Member:
+    name: str
+    desc: list = field(default_factory=list)  # lines; "" marks a paragraph break
+
+
+def parse_enum_body(body):
+    """Parse the body of an enum into a list of documented members.
+
+    Comment association follows Doxygen conventions, with one accommodation for
+    the header's occasional misuse of `///<` on its own line as a *leading*
+    comment (see WatchpointValueKind): a trailing `///<` documents the member on
+    its own line, while a standalone doc comment that isn't continuing a
+    trailing comment is treated as a leading comment for the next member.
+    """
+    members = []
+    pending_lead = []  # leading doc lines awaiting the next member
+    current = None  # most recently named member (target of trailing comments)
+    in_trailing = False  # currently extending a member's trailing comment
+    awaiting_name = True  # next identifier starts a new member
+    depth = 0  # parenthesis nesting, to find top-level commas
+
+    def attach_lead(member):
+        # Drop a leading line that merely repeats the member name (the style
+        # used by CommandFlags) along with its trailing blank.
+        lead = pending_lead[:]
+        while lead and lead[0] == "":
+            lead.pop(0)
+        if lead and lead[0] == member.name:
+            lead.pop(0)
+            while lead and lead[0] == "":
+                lead.pop(0)
+        member.desc.extend(lead)
+
+    for line in body.splitlines():
+        comment_start = line.find("//")
+        if comment_start == -1:
+            code, comment = line, None
+        else:
+            code, comment = line[:comment_start], line[comment_start:]
+
+        # Walk the code, picking out member names and top-level commas.
+        i = 0
+        while i < len(code):
+            ch = code[i]
+            if ch == "(":
+                depth += 1
+            elif ch == ")":
+                depth -= 1
+            elif ch == "," and depth == 0:
+                awaiting_name = True
+            elif awaiting_name and (ch.isalpha() or ch == "_"):
+                j = i
+                while j < len(code) and (code[j].isalnum() or code[j] == "_"):
+                    j += 1
+                name = code[i:j]
+                current = Member(name)
+                attach_lead(current)
+                pending_lead = []
+                in_trailing = False
+                awaiting_name = False
+                # Only public enumerators (the `e` prefix) are documented;
+                # `k`-prefixed sentinels like kNumFormats are internal.
+                if name.startswith("e"):
+                    members.append(current)
+                i = j
+                continue
+            i += 1
+
+        if comment is not None:
+            has_code = bool(code.strip())
+            if comment.startswith("///<"):
+                text = clean_comment(comment[4:].lstrip())
+                if has_code and current is not None:
+                    current.desc.append(text)
+                    in_trailing = True
+                elif in_trailing and current is not None:
+                    current.desc.append(text)
+                else:
+                    pending_lead.append(text)
+            elif comment.startswith("///"):
+                text = clean_comment(comment[3:].lstrip())
+                if has_code and current is not None:
+                    current.desc.append(text)
+                    in_trailing = True
+                elif in_trailing and current is not None:
+                    current.desc.append(text)
+                else:
+                    pending_lead.append(text)
+            # A plain `//` comment is an internal note; ignore it.
+        elif not code.strip():
+            # Blank line: ends any trailing-comment continuation and separates
+            # paragraphs in an accumulating leading comment.
+            in_trailing = False
+            if pending_lead and pending_lead[-1] != "":
+                pending_lead.append("")
+
+    return members
+
+
+def parse_enums(text):
+    """Yield (name, description_lines, members) for each enum in the header."""
+    for match in ENUM_RE.finditer(text):
+        name = match.group("name") or match.group("flags_name")
+        if name is None:
+            continue  # anonymous flag enums have no name to document
+        close = text.index("}", match.end())
+        members = parse_enum_body(text[match.end() : close])
+        if not members:
+            continue
+        yield name, leading_description(text[: match.start()]), members
+
+
+def leading_description(preceding_text):
+    """Collect the `///` doc comment immediately above a declaration."""
+    lines = []
+    for line in reversed(preceding_text.splitlines()):
+        if not line.strip().startswith("//"):
+            break
+        lines.append(line)
+    lines.reverse()
+
+    desc = []
+    for line in lines:
+        stripped = line.strip()
+        if stripped.startswith("///"):
+            desc.append(clean_comment(stripped[3:].lstrip()))
+    while desc and desc[0] == "":
+        desc.pop(0)
+    while desc and desc[-1] == "":
+        desc.pop()
+    return desc
+
+
+def classify_constant(name):
+    if name.startswith("LLDB_REGNUM_GENERIC_"):
+        return "Generic register numbers"
+    if name == "LLDB_INVALID_CPUTYPE" or name.startswith("LLDB_ARCH_"):
+        return "CPU types"
+    if name.startswith("LLDB_INVALID_"):
+        return "Invalid value definitions"
+    if name == "LLDB_MAX_NUM_OPTION_SETS" or name.startswith("LLDB_OPT_SET_"):
+        return "Option set definitions"
+    return "Miscellaneous constants"
+
+
+def parse_constants(text):
+    """Parse value `#define LLDB_*` constants grouped for presentation."""
+    # Join backslash line continuations so a define and its trailing comment
+    # form a single logical line.
+    logical = re.sub(r"\\\n", " ", text)
+
+    groups = {name: [] for name in CONSTANT_GROUP_ORDER}
+    # A `(` immediately after the name (no space) marks a function-like macro;
+    # a `(` after whitespace is just a parenthesized value like `(1u << 0)`.
+    define_re = re.compile(r"^#define\s+(LLDB_\w+)(\()?(.*)$")
+    for line in logical.splitlines():
+        match = define_re.match(line.strip())
+        if not match:
+            continue
+        name, is_macro, rest = match.groups()
+        if is_macro:
+            continue  # function-like macro, not a Python-visible constant
+        if not rest.strip():
+            continue  # value-less define such as the include guard
+        desc = ""
+        comment_start = rest.find("//")
+        if comment_start != -1:
+            desc = clean_comment(rest[comment_start:].lstrip("/").lstrip())
+        groups[classify_constant(name)].append(Member(name, [desc] if desc else []))
+    return groups
+
+
+def format_directive(out, member):
+    out.append("```{eval-rst}")
+    out.append(f".. py:data:: {member.name}")
+    desc = member.desc[:]
+    while desc and desc[0] == "":
+        desc.pop(0)
+    while desc and desc[-1] == "":
+        desc.pop()
+    if desc:
+        out.append("")
+        for line in desc:
+            out.append(f"   {line}" if line else "")
+    out.append("```")
+    out.append("")
+
+
+def format_paragraphs(out, lines):
+    for line in lines:
+        out.append(line)
+    if lines:
+        out.append("")
+
+
+def generate(enums_text, defines_text):
+    out = []
+    out.append("# Python API enumerators and constants")
+    out.append("")
+    out.append("```{eval-rst}")
+    out.append(".. py:currentmodule:: lldb")
+    out.append("```")
+    out.append("")
+
+    out.append("## Constants")
+    out.append("")
+    groups = parse_constants(defines_text)
+    for group in CONSTANT_GROUP_ORDER:
+        members = groups[group]
+        if not members:
+            continue
+        out.append(f"({slugify(group)})=")
+        out.append("")
+        out.append(f"### {group}")
+        out.append("")
+        for member in members:
+            format_directive(out, member)
+
+    out.append("## Enumerators")
+    out.append("")
+    for name, desc, members in parse_enums(enums_text):
+        out.append(f"({name.lower()})=")
+        out.append("")
+        out.append(f"### {name}")
+        out.append("")
+        format_paragraphs(out, desc)
+        for member in members:
+            format_directive(out, member)
+
+    return "\n".join(out).rstrip() + "\n"
+
+
+def main():
+    parser = argparse.ArgumentParser(
+        prog="gen-python-api-enums",
+        description="Generate the Python API enums/constants doc from headers",
+    )
+    parser.add_argument(
+        "--enumerations", required=True, help="Path to lldb-enumerations.h"
+    )
+    parser.add_argument("--defines", required=True, help="Path to lldb-defines.h")
+    parser.add_argument("-o", "--output", required=True, help="Path to output file")
+    args = parser.parse_args()
+
+    with open(args.enumerations, encoding="utf-8") as f:
+        enums_text = f.read()
+    with open(args.defines, encoding="utf-8") as f:
+        defines_text = f.read()
+
+    with open(args.output, "w", encoding="utf-8") as f:
+        f.write(generate(enums_text, defines_text))
+
+
+if __name__ == "__main__":
+    main()

>From a8975715791ac1bd0542006cca4d157870b3cd93 Mon Sep 17 00:00:00 2001
From: Jonas Devlieghere <jonas at devlieghere.com>
Date: Wed, 10 Jun 2026 10:52:17 -0700
Subject: [PATCH 2/2] Address review feedback

---
 lldb/scripts/gen-python-api-enums.py | 34 +++++++++++++++-------------
 1 file changed, 18 insertions(+), 16 deletions(-)

diff --git a/lldb/scripts/gen-python-api-enums.py b/lldb/scripts/gen-python-api-enums.py
index 86f43e2325cdd..b3e1ddd183290 100644
--- a/lldb/scripts/gen-python-api-enums.py
+++ b/lldb/scripts/gen-python-api-enums.py
@@ -12,6 +12,7 @@
 
 import argparse
 import re
+from collections.abc import Iterator
 from dataclasses import dataclass, field
 
 # Matches the start of an enum declaration up to and including the opening
@@ -42,11 +43,11 @@
 ]
 
 
-def slugify(text):
+def slugify(text: str) -> str:
     return re.sub(r"[^a-z0-9]+", "-", text.lower()).strip("-")
 
 
-def clean_comment(text):
+def clean_comment(text: str) -> str:
     """Strip a doc-comment fragment down to its prose."""
     return DOXYGEN_CMD_RE.sub("", text).rstrip()
 
@@ -54,10 +55,10 @@ def clean_comment(text):
 @dataclass
 class Member:
     name: str
-    desc: list = field(default_factory=list)  # lines; "" marks a paragraph break
+    desc: list[str] = field(default_factory=list)  # lines; "" marks a paragraph break
 
 
-def parse_enum_body(body):
+def parse_enum_body(body: str) -> list[Member]:
     """Parse the body of an enum into a list of documented members.
 
     Comment association follows Doxygen conventions, with one accommodation for
@@ -73,7 +74,7 @@ def parse_enum_body(body):
     awaiting_name = True  # next identifier starts a new member
     depth = 0  # parenthesis nesting, to find top-level commas
 
-    def attach_lead(member):
+    def attach_lead(member: Member) -> None:
         # Drop a leading line that merely repeats the member name (the style
         # used by CommandFlags) along with its trailing blank.
         lead = pending_lead[:]
@@ -100,6 +101,7 @@ def attach_lead(member):
                 depth += 1
             elif ch == ")":
                 depth -= 1
+                assert depth >= 0
             elif ch == "," and depth == 0:
                 awaiting_name = True
             elif awaiting_name and (ch.isalpha() or ch == "_"):
@@ -123,7 +125,7 @@ def attach_lead(member):
         if comment is not None:
             has_code = bool(code.strip())
             if comment.startswith("///<"):
-                text = clean_comment(comment[4:].lstrip())
+                text = clean_comment(comment.removeprefix("///<").lstrip())
                 if has_code and current is not None:
                     current.desc.append(text)
                     in_trailing = True
@@ -132,7 +134,7 @@ def attach_lead(member):
                 else:
                     pending_lead.append(text)
             elif comment.startswith("///"):
-                text = clean_comment(comment[3:].lstrip())
+                text = clean_comment(comment.removeprefix("///").lstrip())
                 if has_code and current is not None:
                     current.desc.append(text)
                     in_trailing = True
@@ -151,7 +153,7 @@ def attach_lead(member):
     return members
 
 
-def parse_enums(text):
+def parse_enums(text: str) -> Iterator[tuple[str, list[str], list[Member]]]:
     """Yield (name, description_lines, members) for each enum in the header."""
     for match in ENUM_RE.finditer(text):
         name = match.group("name") or match.group("flags_name")
@@ -164,7 +166,7 @@ def parse_enums(text):
         yield name, leading_description(text[: match.start()]), members
 
 
-def leading_description(preceding_text):
+def leading_description(preceding_text: str) -> list[str]:
     """Collect the `///` doc comment immediately above a declaration."""
     lines = []
     for line in reversed(preceding_text.splitlines()):
@@ -177,7 +179,7 @@ def leading_description(preceding_text):
     for line in lines:
         stripped = line.strip()
         if stripped.startswith("///"):
-            desc.append(clean_comment(stripped[3:].lstrip()))
+            desc.append(clean_comment(stripped.removeprefix("///").lstrip()))
     while desc and desc[0] == "":
         desc.pop(0)
     while desc and desc[-1] == "":
@@ -185,7 +187,7 @@ def leading_description(preceding_text):
     return desc
 
 
-def classify_constant(name):
+def classify_constant(name: str) -> str:
     if name.startswith("LLDB_REGNUM_GENERIC_"):
         return "Generic register numbers"
     if name == "LLDB_INVALID_CPUTYPE" or name.startswith("LLDB_ARCH_"):
@@ -197,7 +199,7 @@ def classify_constant(name):
     return "Miscellaneous constants"
 
 
-def parse_constants(text):
+def parse_constants(text: str) -> dict[str, list[Member]]:
     """Parse value `#define LLDB_*` constants grouped for presentation."""
     # Join backslash line continuations so a define and its trailing comment
     # form a single logical line.
@@ -224,7 +226,7 @@ def parse_constants(text):
     return groups
 
 
-def format_directive(out, member):
+def format_directive(out: list[str], member: Member) -> None:
     out.append("```{eval-rst}")
     out.append(f".. py:data:: {member.name}")
     desc = member.desc[:]
@@ -240,14 +242,14 @@ def format_directive(out, member):
     out.append("")
 
 
-def format_paragraphs(out, lines):
+def format_paragraphs(out: list[str], lines: list[str]) -> None:
     for line in lines:
         out.append(line)
     if lines:
         out.append("")
 
 
-def generate(enums_text, defines_text):
+def generate(enums_text: str, defines_text: str) -> str:
     out = []
     out.append("# Python API enumerators and constants")
     out.append("")
@@ -284,7 +286,7 @@ def generate(enums_text, defines_text):
     return "\n".join(out).rstrip() + "\n"
 
 
-def main():
+def main() -> None:
     parser = argparse.ArgumentParser(
         prog="gen-python-api-enums",
         description="Generate the Python API enums/constants doc from headers",



More information about the lldb-commits mailing list