]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
[3.14] gh-132775: Make _PyXI_session Opaque (gh-134522)
authorMiss Islington (bot) <31488909+miss-islington@users.noreply.github.com>
Thu, 22 May 2025 17:12:52 +0000 (19:12 +0200)
committerGitHub <noreply@github.com>
Thu, 22 May 2025 17:12:52 +0000 (17:12 +0000)
This is mostly a refactor to clean things up a bit, most notably the "XI namespace" code.

Making the session opaque requires adding the following internal-only functions:

* _PyXI_NewSession()
* _PyXI_FreeSession()
* _PyXI_GetMainNamespace()

(cherry picked from commit 4a4ac3ab4d, gh-134452)

Co-authored-by: Eric Snow <ericsnowcurrently@gmail.com>
Doc/data/python3.14.abi
Include/internal/pycore_crossinterp.h
Modules/_interpretersmodule.c
Python/crossinterp.c

index decb2ce3c6f39ef1b0d5f1ecc19a6ec4eae9cc6e..64f4d473b72def23d60d44229c8712b12141dd21 100644 (file)
     <elf-symbol name='_PyErr_FormatFromCause' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>\r
     <elf-symbol name='_PyErr_FormatNote' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>\r
     <elf-symbol name='_PyErr_FormatV' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>\r
+    <elf-symbol name='_PyErr_GetRaisedException' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>\r
     <elf-symbol name='_PyErr_ProgramDecodedTextObject' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>\r
     <elf-symbol name='_PyErr_SetFromPyStatus' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>\r
     <elf-symbol name='_PyErr_SetInterpreterAlreadyRunning' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>\r
     <elf-symbol name='_PyErr_SetKeyError' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>\r
     <elf-symbol name='_PyErr_SetLocaleString' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>\r
+    <elf-symbol name='_PyErr_SetRaisedException' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>\r
     <elf-symbol name='_PyErr_SetString' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>\r
     <elf-symbol name='_PyEvalFramePushAndInit' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>\r
     <elf-symbol name='_PyEval_AddPendingCall' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>\r
     <elf-symbol name='_PyXIData_UnregisterClass' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>\r
     <elf-symbol name='_PyXI_ApplyCapturedException' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>\r
     <elf-symbol name='_PyXI_ApplyError' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>\r
-    <elf-symbol name='_PyXI_ApplyNamespace' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>\r
     <elf-symbol name='_PyXI_ClearExcInfo' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>\r
     <elf-symbol name='_PyXI_EndInterpreter' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>\r
     <elf-symbol name='_PyXI_Enter' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>\r
     <elf-symbol name='_PyXI_ExcInfoAsObject' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>\r
     <elf-symbol name='_PyXI_Exit' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>\r
-    <elf-symbol name='_PyXI_FillNamespaceFromDict' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>\r
     <elf-symbol name='_PyXI_FormatExcInfo' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>\r
-    <elf-symbol name='_PyXI_FreeNamespace' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>\r
+    <elf-symbol name='_PyXI_FreeSession' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>\r
+    <elf-symbol name='_PyXI_GetMainNamespace' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>\r
     <elf-symbol name='_PyXI_HasCapturedException' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>\r
     <elf-symbol name='_PyXI_InitExcInfo' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>\r
-    <elf-symbol name='_PyXI_NamespaceFromNames' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>\r
     <elf-symbol name='_PyXI_NewInterpreter' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>\r
+    <elf-symbol name='_PyXI_NewSession' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>\r
     <elf-symbol name='_Py_BreakPoint' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>\r
     <elf-symbol name='_Py_BuildValue_SizeT' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>\r
     <elf-symbol name='_Py_CheckFunctionResult' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>\r
       <parameter type-id='type-id-5'/>\r
       <return type-id='type-id-5'/>\r
     </function-decl>\r
-    <function-decl name='Py_RunMain' mangled-name='Py_RunMain' filepath='Modules/main.c' line='761' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='Py_RunMain'>\r
+    <function-decl name='Py_RunMain' mangled-name='Py_RunMain' filepath='Modules/main.c' line='769' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='Py_RunMain'>\r
       <return type-id='type-id-5'/>\r
     </function-decl>\r
-    <function-decl name='Py_Main' mangled-name='Py_Main' filepath='Modules/main.c' line='802' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='Py_Main'>\r
-      <parameter type-id='type-id-5' name='argc' filepath='Modules/main.c' line='802' column='1'/>\r
-      <parameter type-id='type-id-244' name='argv' filepath='Modules/main.c' line='802' column='1'/>\r
+    <function-decl name='Py_Main' mangled-name='Py_Main' filepath='Modules/main.c' line='810' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='Py_Main'>\r
+      <parameter type-id='type-id-5' name='argc' filepath='Modules/main.c' line='810' column='1'/>\r
+      <parameter type-id='type-id-244' name='argv' filepath='Modules/main.c' line='810' column='1'/>\r
       <return type-id='type-id-5'/>\r
     </function-decl>\r
-    <function-decl name='Py_BytesMain' mangled-name='Py_BytesMain' filepath='Modules/main.c' line='814' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='Py_BytesMain'>\r
-      <parameter type-id='type-id-5' name='argc' filepath='Modules/main.c' line='814' column='1'/>\r
-      <parameter type-id='type-id-251' name='argv' filepath='Modules/main.c' line='814' column='1'/>\r
+    <function-decl name='Py_BytesMain' mangled-name='Py_BytesMain' filepath='Modules/main.c' line='822' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='Py_BytesMain'>\r
+      <parameter type-id='type-id-5' name='argc' filepath='Modules/main.c' line='822' column='1'/>\r
+      <parameter type-id='type-id-251' name='argv' filepath='Modules/main.c' line='822' column='1'/>\r
       <return type-id='type-id-5'/>\r
     </function-decl>\r
   </abi-instr>\r
       <parameter type-id='type-id-6'/>\r
       <return type-id='type-id-241'/>\r
     </function-decl>\r
-    <function-decl name='_PyErr_GetRaisedException' filepath='./Include/internal/pycore_pyerrors.h' line='97' column='1' visibility='default' binding='global' size-in-bits='64'>\r
+    <function-decl name='_PyErr_GetRaisedException' mangled-name='_PyErr_GetRaisedException' filepath='./Include/internal/pycore_pyerrors.h' line='97' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='_PyErr_GetRaisedException'>\r
       <parameter type-id='type-id-31'/>\r
       <return type-id='type-id-6'/>\r
     </function-decl>\r
       <parameter type-id='type-id-35'/>\r
       <return type-id='type-id-6'/>\r
     </function-decl>\r
-    <function-decl name='_PyErr_SetRaisedException' filepath='./Include/internal/pycore_pyerrors.h' line='103' column='1' visibility='default' binding='global' size-in-bits='64'>\r
+    <function-decl name='_PyErr_SetRaisedException' mangled-name='_PyErr_SetRaisedException' filepath='./Include/internal/pycore_pyerrors.h' line='103' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='_PyErr_SetRaisedException'>\r
       <parameter type-id='type-id-31'/>\r
       <parameter type-id='type-id-6'/>\r
       <return type-id='type-id-3'/>\r
       </data-member>\r
     </class-decl>\r
     <typedef-decl name='_PyXI_error' type-id='type-id-1674' filepath='./Include/internal/pycore_crossinterp.h' line='333' column='1' id='type-id-1675'/>\r
-    <typedef-decl name='_PyXI_session' type-id='type-id-1676' filepath='./Include/internal/pycore_crossinterp.h' line='338' column='1' id='type-id-1677'/>\r
-    <typedef-decl name='_PyXI_namespace' type-id='type-id-1678' filepath='./Include/internal/pycore_crossinterp.h' line='339' column='1' id='type-id-1679'/>\r
-    <class-decl name='xi_session' size-in-bits='960' is-struct='yes' visibility='default' filepath='./Include/internal/pycore_crossinterp.h' line='363' column='1' id='type-id-1676'>\r
+    <typedef-decl name='_PyXI_session' type-id='type-id-1676' filepath='./Include/internal/pycore_crossinterp.h' line='348' column='1' id='type-id-1677'/>\r
+    <class-decl name='xi_session' size-in-bits='1024' is-struct='yes' visibility='default' filepath='Python/crossinterp.c' line='2215' column='1' id='type-id-1676'>\r
       <data-member access='public' layout-offset-in-bits='0'>\r
-        <var-decl name='prev_tstate' type-id='type-id-31' visibility='default' filepath='./Include/internal/pycore_crossinterp.h' line='368' column='1'/>\r
+        <var-decl name='status' type-id='type-id-5' visibility='default' filepath='Python/crossinterp.c' line='2218' column='1'/>\r
+      </data-member>\r
+      <data-member access='public' layout-offset-in-bits='32'>\r
+        <var-decl name='switched' type-id='type-id-5' visibility='default' filepath='Python/crossinterp.c' line='2219' column='1'/>\r
       </data-member>\r
       <data-member access='public' layout-offset-in-bits='64'>\r
-        <var-decl name='init_tstate' type-id='type-id-31' visibility='default' filepath='./Include/internal/pycore_crossinterp.h' line='371' column='1'/>\r
+        <var-decl name='prev_tstate' type-id='type-id-31' visibility='default' filepath='Python/crossinterp.c' line='2225' column='1'/>\r
       </data-member>\r
       <data-member access='public' layout-offset-in-bits='128'>\r
-        <var-decl name='own_init_tstate' type-id='type-id-5' visibility='default' filepath='./Include/internal/pycore_crossinterp.h' line='373' column='1'/>\r
-      </data-member>\r
-      <data-member access='public' layout-offset-in-bits='160'>\r
-        <var-decl name='running' type-id='type-id-5' visibility='default' filepath='./Include/internal/pycore_crossinterp.h' line='380' column='1'/>\r
+        <var-decl name='init_tstate' type-id='type-id-31' visibility='default' filepath='Python/crossinterp.c' line='2228' column='1'/>\r
       </data-member>\r
       <data-member access='public' layout-offset-in-bits='192'>\r
-        <var-decl name='main_ns' type-id='type-id-6' visibility='default' filepath='./Include/internal/pycore_crossinterp.h' line='384' column='1'/>\r
+        <var-decl name='own_init_tstate' type-id='type-id-5' visibility='default' filepath='Python/crossinterp.c' line='2230' column='1'/>\r
+      </data-member>\r
+      <data-member access='public' layout-offset-in-bits='224'>\r
+        <var-decl name='running' type-id='type-id-5' visibility='default' filepath='Python/crossinterp.c' line='2237' column='1'/>\r
       </data-member>\r
       <data-member access='public' layout-offset-in-bits='256'>\r
-        <var-decl name='error_override' type-id='type-id-1680' visibility='default' filepath='./Include/internal/pycore_crossinterp.h' line='388' column='1'/>\r
+        <var-decl name='main_ns' type-id='type-id-6' visibility='default' filepath='Python/crossinterp.c' line='2241' column='1'/>\r
       </data-member>\r
       <data-member access='public' layout-offset-in-bits='320'>\r
-        <var-decl name='error' type-id='type-id-1681' visibility='default' filepath='./Include/internal/pycore_crossinterp.h' line='390' column='1'/>\r
+        <var-decl name='error_override' type-id='type-id-1678' visibility='default' filepath='Python/crossinterp.c' line='2245' column='1'/>\r
       </data-member>\r
       <data-member access='public' layout-offset-in-bits='384'>\r
-        <var-decl name='_error' type-id='type-id-1675' visibility='default' filepath='./Include/internal/pycore_crossinterp.h' line='393' column='1'/>\r
-      </data-member>\r
-      <data-member access='public' layout-offset-in-bits='896'>\r
-        <var-decl name='_error_override' type-id='type-id-1673' visibility='default' filepath='./Include/internal/pycore_crossinterp.h' line='394' column='1'/>\r
+        <var-decl name='error' type-id='type-id-1679' visibility='default' filepath='Python/crossinterp.c' line='2247' column='1'/>\r
       </data-member>\r
-    </class-decl>\r
-    <class-decl name='_sharednsitem' size-in-bits='128' is-struct='yes' visibility='default' filepath='Python/crossinterp.c' line='1788' column='1' id='type-id-1682'>\r
-      <data-member access='public' layout-offset-in-bits='0'>\r
-        <var-decl name='name' type-id='type-id-4' visibility='default' filepath='Python/crossinterp.c' line='1789' column='1'/>\r
-      </data-member>\r
-      <data-member access='public' layout-offset-in-bits='64'>\r
-        <var-decl name='xidata' type-id='type-id-1501' visibility='default' filepath='Python/crossinterp.c' line='1790' column='1'/>\r
-      </data-member>\r
-    </class-decl>\r
-    <typedef-decl name='_PyXI_namespace_item' type-id='type-id-1682' filepath='Python/crossinterp.c' line='1796' column='1' id='type-id-1683'/>\r
-    <class-decl name='_sharedns' size-in-bits='128' is-struct='yes' visibility='default' filepath='Python/crossinterp.c' line='1916' column='1' id='type-id-1678'>\r
-      <data-member access='public' layout-offset-in-bits='0'>\r
-        <var-decl name='len' type-id='type-id-7' visibility='default' filepath='Python/crossinterp.c' line='1917' column='1'/>\r
-      </data-member>\r
-      <data-member access='public' layout-offset-in-bits='64'>\r
-        <var-decl name='items' type-id='type-id-1684' visibility='default' filepath='Python/crossinterp.c' line='1918' column='1'/>\r
+      <data-member access='public' layout-offset-in-bits='448'>\r
+        <var-decl name='_error' type-id='type-id-1675' visibility='default' filepath='Python/crossinterp.c' line='2250' column='1'/>\r
       </data-member>\r
-    </class-decl>\r
-    <pointer-type-def type-id='type-id-1664' size-in-bits='64' id='type-id-1685'/>\r
-    <pointer-type-def type-id='type-id-31' size-in-bits='64' id='type-id-1686'/>\r
-    <pointer-type-def type-id='type-id-1667' size-in-bits='64' id='type-id-1687'/>\r
-    <pointer-type-def type-id='type-id-1673' size-in-bits='64' id='type-id-1680'/>\r
-    <pointer-type-def type-id='type-id-1675' size-in-bits='64' id='type-id-1681'/>\r
-    <pointer-type-def type-id='type-id-1671' size-in-bits='64' id='type-id-1688'/>\r
-    <pointer-type-def type-id='type-id-1679' size-in-bits='64' id='type-id-1689'/>\r
-    <pointer-type-def type-id='type-id-1683' size-in-bits='64' id='type-id-1684'/>\r
-    <pointer-type-def type-id='type-id-1677' size-in-bits='64' id='type-id-1690'/>\r
-    <qualified-type-def type-id='type-id-1664' const='yes' id='type-id-1691'/>\r
-    <pointer-type-def type-id='type-id-1691' size-in-bits='64' id='type-id-1692'/>\r
+      <data-member access='public' layout-offset-in-bits='960'>\r
+        <var-decl name='_error_override' type-id='type-id-1673' visibility='default' filepath='Python/crossinterp.c' line='2251' column='1'/>\r
+      </data-member>\r
+    </class-decl>\r
+    <pointer-type-def type-id='type-id-1664' size-in-bits='64' id='type-id-1680'/>\r
+    <pointer-type-def type-id='type-id-31' size-in-bits='64' id='type-id-1681'/>\r
+    <pointer-type-def type-id='type-id-1667' size-in-bits='64' id='type-id-1682'/>\r
+    <pointer-type-def type-id='type-id-1673' size-in-bits='64' id='type-id-1678'/>\r
+    <pointer-type-def type-id='type-id-1675' size-in-bits='64' id='type-id-1679'/>\r
+    <pointer-type-def type-id='type-id-1671' size-in-bits='64' id='type-id-1683'/>\r
+    <pointer-type-def type-id='type-id-1677' size-in-bits='64' id='type-id-1684'/>\r
+    <qualified-type-def type-id='type-id-1664' const='yes' id='type-id-1685'/>\r
+    <pointer-type-def type-id='type-id-1685' size-in-bits='64' id='type-id-1686'/>\r
     <pointer-type-def type-id='type-id-184' size-in-bits='64' id='type-id-170'/>\r
     <function-decl name='PyStatus_Exception' mangled-name='PyStatus_Exception' filepath='./Include/cpython/initconfig.h' line='27' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='PyStatus_Exception'>\r
       <parameter type-id='type-id-66'/>\r
       <return type-id='type-id-5'/>\r
     </function-decl>\r
     <function-decl name='Py_NewInterpreterFromConfig' mangled-name='Py_NewInterpreterFromConfig' filepath='./Include/cpython/pylifecycle.h' line='83' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='Py_NewInterpreterFromConfig'>\r
+      <parameter type-id='type-id-1681'/>\r
       <parameter type-id='type-id-1686'/>\r
-      <parameter type-id='type-id-1692'/>\r
       <return type-id='type-id-66'/>\r
     </function-decl>\r
     <function-decl name='Py_CompileStringExFlags' mangled-name='Py_CompileStringExFlags' filepath='./Include/cpython/pythonrun.h' line='43' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='Py_CompileStringExFlags'>\r
       <return type-id='type-id-5'/>\r
     </function-decl>\r
     <function-decl name='_PyXI_InitExcInfo' mangled-name='_PyXI_InitExcInfo' filepath='Python/crossinterp.c' line='1616' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='_PyXI_InitExcInfo'>\r
-      <parameter type-id='type-id-1688' name='info' filepath='Python/crossinterp.c' line='1616' column='1'/>\r
+      <parameter type-id='type-id-1683' name='info' filepath='Python/crossinterp.c' line='1616' column='1'/>\r
       <parameter type-id='type-id-6' name='exc' filepath='Python/crossinterp.c' line='1616' column='1'/>\r
       <return type-id='type-id-5'/>\r
     </function-decl>\r
     <function-decl name='_PyXI_FormatExcInfo' mangled-name='_PyXI_FormatExcInfo' filepath='Python/crossinterp.c' line='1638' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='_PyXI_FormatExcInfo'>\r
-      <parameter type-id='type-id-1688' name='info' filepath='Python/crossinterp.c' line='1638' column='1'/>\r
+      <parameter type-id='type-id-1683' name='info' filepath='Python/crossinterp.c' line='1638' column='1'/>\r
       <return type-id='type-id-6'/>\r
     </function-decl>\r
     <function-decl name='_PyXI_ExcInfoAsObject' mangled-name='_PyXI_ExcInfoAsObject' filepath='Python/crossinterp.c' line='1644' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='_PyXI_ExcInfoAsObject'>\r
-      <parameter type-id='type-id-1688' name='info' filepath='Python/crossinterp.c' line='1644' column='1'/>\r
+      <parameter type-id='type-id-1683' name='info' filepath='Python/crossinterp.c' line='1644' column='1'/>\r
       <return type-id='type-id-6'/>\r
     </function-decl>\r
     <function-decl name='_PyXI_ClearExcInfo' mangled-name='_PyXI_ClearExcInfo' filepath='Python/crossinterp.c' line='1650' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='_PyXI_ClearExcInfo'>\r
-      <parameter type-id='type-id-1688' name='info' filepath='Python/crossinterp.c' line='1650' column='1'/>\r
+      <parameter type-id='type-id-1683' name='info' filepath='Python/crossinterp.c' line='1650' column='1'/>\r
       <return type-id='type-id-3'/>\r
     </function-decl>\r
     <function-decl name='_PyXI_ApplyError' mangled-name='_PyXI_ApplyError' filepath='Python/crossinterp.c' line='1745' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='_PyXI_ApplyError'>\r
-      <parameter type-id='type-id-1681' name='error' filepath='Python/crossinterp.c' line='1745' column='1'/>\r
+      <parameter type-id='type-id-1679' name='error' filepath='Python/crossinterp.c' line='1745' column='1'/>\r
       <return type-id='type-id-6'/>\r
     </function-decl>\r
-    <function-decl name='_PyXI_FreeNamespace' mangled-name='_PyXI_FreeNamespace' filepath='Python/crossinterp.c' line='2089' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='_PyXI_FreeNamespace'>\r
-      <parameter type-id='type-id-1689' name='ns' filepath='Python/crossinterp.c' line='2089' column='1'/>\r
-      <return type-id='type-id-3'/>\r
-    </function-decl>\r
-    <function-decl name='_PyXI_NamespaceFromNames' mangled-name='_PyXI_NamespaceFromNames' filepath='Python/crossinterp.c' line='2114' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='_PyXI_NamespaceFromNames'>\r
-      <parameter type-id='type-id-6' name='names' filepath='Python/crossinterp.c' line='2114' column='1'/>\r
-      <return type-id='type-id-1689'/>\r
-    </function-decl>\r
-    <function-decl name='_PyXI_FillNamespaceFromDict' mangled-name='_PyXI_FillNamespaceFromDict' filepath='Python/crossinterp.c' line='2142' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='_PyXI_FillNamespaceFromDict'>\r
-      <parameter type-id='type-id-1689' name='ns' filepath='Python/crossinterp.c' line='2142' column='1'/>\r
-      <parameter type-id='type-id-6' name='nsobj' filepath='Python/crossinterp.c' line='2142' column='1'/>\r
-      <parameter type-id='type-id-1690' name='session' filepath='Python/crossinterp.c' line='2143' column='1'/>\r
-      <return type-id='type-id-5'/>\r
+    <function-decl name='_PyXI_NewSession' mangled-name='_PyXI_NewSession' filepath='Python/crossinterp.c' line='2256' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='_PyXI_NewSession'>\r
+      <return type-id='type-id-1684'/>\r
     </function-decl>\r
-    <function-decl name='_PyXI_ApplyNamespace' mangled-name='_PyXI_ApplyNamespace' filepath='Python/crossinterp.c' line='2204' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='_PyXI_ApplyNamespace'>\r
-      <parameter type-id='type-id-1689' name='ns' filepath='Python/crossinterp.c' line='2204' column='1'/>\r
-      <parameter type-id='type-id-6' name='nsobj' filepath='Python/crossinterp.c' line='2204' column='1'/>\r
-      <parameter type-id='type-id-6' name='dflt' filepath='Python/crossinterp.c' line='2204' column='1'/>\r
-      <return type-id='type-id-5'/>\r
+    <function-decl name='_PyXI_FreeSession' mangled-name='_PyXI_FreeSession' filepath='Python/crossinterp.c' line='2267' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='_PyXI_FreeSession'>\r
+      <parameter type-id='type-id-1684' name='session' filepath='Python/crossinterp.c' line='2267' column='1'/>\r
+      <return type-id='type-id-3'/>\r
     </function-decl>\r
-    <function-decl name='_PyXI_ApplyCapturedException' mangled-name='_PyXI_ApplyCapturedException' filepath='Python/crossinterp.c' line='2378' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='_PyXI_ApplyCapturedException'>\r
-      <parameter type-id='type-id-1690' name='session' filepath='Python/crossinterp.c' line='2378' column='1'/>\r
+    <function-decl name='_PyXI_ApplyCapturedException' mangled-name='_PyXI_ApplyCapturedException' filepath='Python/crossinterp.c' line='2383' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='_PyXI_ApplyCapturedException'>\r
+      <parameter type-id='type-id-1684' name='session' filepath='Python/crossinterp.c' line='2383' column='1'/>\r
       <return type-id='type-id-6'/>\r
     </function-decl>\r
-    <function-decl name='_PyXI_HasCapturedException' mangled-name='_PyXI_HasCapturedException' filepath='Python/crossinterp.c' line='2389' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='_PyXI_HasCapturedException'>\r
-      <parameter type-id='type-id-1690' name='session' filepath='Python/crossinterp.c' line='2389' column='1'/>\r
+    <function-decl name='_PyXI_HasCapturedException' mangled-name='_PyXI_HasCapturedException' filepath='Python/crossinterp.c' line='2394' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='_PyXI_HasCapturedException'>\r
+      <parameter type-id='type-id-1684' name='session' filepath='Python/crossinterp.c' line='2394' column='1'/>\r
       <return type-id='type-id-5'/>\r
     </function-decl>\r
-    <function-decl name='_PyXI_Enter' mangled-name='_PyXI_Enter' filepath='Python/crossinterp.c' line='2395' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='_PyXI_Enter'>\r
-      <parameter type-id='type-id-1690' name='session' filepath='Python/crossinterp.c' line='2395' column='1'/>\r
-      <parameter type-id='type-id-33' name='interp' filepath='Python/crossinterp.c' line='2396' column='1'/>\r
-      <parameter type-id='type-id-6' name='nsupdates' filepath='Python/crossinterp.c' line='2396' column='1'/>\r
+    <function-decl name='_PyXI_Enter' mangled-name='_PyXI_Enter' filepath='Python/crossinterp.c' line='2400' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='_PyXI_Enter'>\r
+      <parameter type-id='type-id-1684' name='session' filepath='Python/crossinterp.c' line='2400' column='1'/>\r
+      <parameter type-id='type-id-33' name='interp' filepath='Python/crossinterp.c' line='2401' column='1'/>\r
+      <parameter type-id='type-id-6' name='nsupdates' filepath='Python/crossinterp.c' line='2401' column='1'/>\r
       <return type-id='type-id-5'/>\r
     </function-decl>\r
-    <function-decl name='_PyXI_Exit' mangled-name='_PyXI_Exit' filepath='Python/crossinterp.c' line='2464' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='_PyXI_Exit'>\r
-      <parameter type-id='type-id-1690' name='session' filepath='Python/crossinterp.c' line='2464' column='1'/>\r
+    <function-decl name='_PyXI_Exit' mangled-name='_PyXI_Exit' filepath='Python/crossinterp.c' line='2465' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='_PyXI_Exit'>\r
+      <parameter type-id='type-id-1684' name='session' filepath='Python/crossinterp.c' line='2465' column='1'/>\r
       <return type-id='type-id-3'/>\r
     </function-decl>\r
-    <function-decl name='_PyXI_NewInterpreter' mangled-name='_PyXI_NewInterpreter' filepath='Python/crossinterp.c' line='2611' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='_PyXI_NewInterpreter'>\r
-      <parameter type-id='type-id-1685' name='config' filepath='Python/crossinterp.c' line='2611' column='1'/>\r
-      <parameter type-id='type-id-170' name='maybe_whence' filepath='Python/crossinterp.c' line='2611' column='1'/>\r
-      <parameter type-id='type-id-1686' name='p_tstate' filepath='Python/crossinterp.c' line='2612' column='1'/>\r
-      <parameter type-id='type-id-1686' name='p_save_tstate' filepath='Python/crossinterp.c' line='2612' column='1'/>\r
+    <function-decl name='_PyXI_GetMainNamespace' mangled-name='_PyXI_GetMainNamespace' filepath='Python/crossinterp.c' line='2572' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='_PyXI_GetMainNamespace'>\r
+      <parameter type-id='type-id-1684' name='session' filepath='Python/crossinterp.c' line='2572' column='1'/>\r
+      <return type-id='type-id-6'/>\r
+    </function-decl>\r
+    <function-decl name='_PyXI_NewInterpreter' mangled-name='_PyXI_NewInterpreter' filepath='Python/crossinterp.c' line='2727' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='_PyXI_NewInterpreter'>\r
+      <parameter type-id='type-id-1680' name='config' filepath='Python/crossinterp.c' line='2727' column='1'/>\r
+      <parameter type-id='type-id-170' name='maybe_whence' filepath='Python/crossinterp.c' line='2727' column='1'/>\r
+      <parameter type-id='type-id-1681' name='p_tstate' filepath='Python/crossinterp.c' line='2728' column='1'/>\r
+      <parameter type-id='type-id-1681' name='p_save_tstate' filepath='Python/crossinterp.c' line='2728' column='1'/>\r
       <return type-id='type-id-33'/>\r
     </function-decl>\r
-    <function-decl name='_PyXI_EndInterpreter' mangled-name='_PyXI_EndInterpreter' filepath='Python/crossinterp.c' line='2658' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='_PyXI_EndInterpreter'>\r
-      <parameter type-id='type-id-33' name='interp' filepath='Python/crossinterp.c' line='2658' column='1'/>\r
-      <parameter type-id='type-id-31' name='tstate' filepath='Python/crossinterp.c' line='2659' column='1'/>\r
-      <parameter type-id='type-id-1686' name='p_save_tstate' filepath='Python/crossinterp.c' line='2659' column='1'/>\r
+    <function-decl name='_PyXI_EndInterpreter' mangled-name='_PyXI_EndInterpreter' filepath='Python/crossinterp.c' line='2774' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='_PyXI_EndInterpreter'>\r
+      <parameter type-id='type-id-33' name='interp' filepath='Python/crossinterp.c' line='2774' column='1'/>\r
+      <parameter type-id='type-id-31' name='tstate' filepath='Python/crossinterp.c' line='2775' column='1'/>\r
+      <parameter type-id='type-id-1681' name='p_save_tstate' filepath='Python/crossinterp.c' line='2775' column='1'/>\r
       <return type-id='type-id-3'/>\r
     </function-decl>\r
     <function-decl name='_PyXIData_GetNotShareableErrorType' mangled-name='_PyXIData_GetNotShareableErrorType' filepath='Python/crossinterp_data_lookup.h' line='66' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='_PyXIData_GetNotShareableErrorType'>\r
     </function-decl>\r
     <function-decl name='_PyBytes_GetData' mangled-name='_PyBytes_GetData' filepath='Python/crossinterp_data_lookup.h' line='357' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='_PyBytes_GetData'>\r
       <parameter type-id='type-id-6' name='obj' filepath='Python/crossinterp_data_lookup.h' line='357' column='1'/>\r
-      <parameter type-id='type-id-1687' name='data' filepath='Python/crossinterp_data_lookup.h' line='357' column='1'/>\r
+      <parameter type-id='type-id-1682' name='data' filepath='Python/crossinterp_data_lookup.h' line='357' column='1'/>\r
       <return type-id='type-id-5'/>\r
     </function-decl>\r
     <function-decl name='_PyBytes_FromData' mangled-name='_PyBytes_FromData' filepath='Python/crossinterp_data_lookup.h' line='376' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='_PyBytes_FromData'>\r
-      <parameter type-id='type-id-1687' name='data' filepath='Python/crossinterp_data_lookup.h' line='376' column='1'/>\r
+      <parameter type-id='type-id-1682' name='data' filepath='Python/crossinterp_data_lookup.h' line='376' column='1'/>\r
       <return type-id='type-id-6'/>\r
     </function-decl>\r
     <function-decl name='_PyBytes_FromXIData' mangled-name='_PyBytes_FromXIData' filepath='Python/crossinterp_data_lookup.h' line='382' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='_PyBytes_FromXIData'>\r
       <parameter type-id='type-id-21' name='size' filepath='Python/crossinterp_data_lookup.h' line='423' column='1'/>\r
       <parameter type-id='type-id-1122' name='newfunc' filepath='Python/crossinterp_data_lookup.h' line='423' column='1'/>\r
       <parameter type-id='type-id-1501' name='xidata' filepath='Python/crossinterp_data_lookup.h' line='424' column='1'/>\r
-      <return type-id='type-id-1687'/>\r
+      <return type-id='type-id-1682'/>\r
     </function-decl>\r
     <function-decl name='_PyCode_FromXIData' mangled-name='_PyCode_FromXIData' filepath='Python/crossinterp_data_lookup.h' line='666' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='_PyCode_FromXIData'>\r
       <parameter type-id='type-id-1501' name='xidata' filepath='Python/crossinterp_data_lookup.h' line='666' column='1'/>\r
     </function-decl>\r
   </abi-instr>\r
   <abi-instr address-size='64' path='Python/fileutils.c' comp-dir-path='/home/runner/work/cpython/cpython' language='LANG_C11'>\r
-    <class-decl name='__mbstate_t' size-in-bits='64' is-struct='yes' naming-typedef-id='type-id-1693' visibility='default' filepath='/usr/include/x86_64-linux-gnu/bits/types/__mbstate_t.h' line='13' column='1' id='type-id-1694'>\r
+    <class-decl name='__mbstate_t' size-in-bits='64' is-struct='yes' naming-typedef-id='type-id-1687' visibility='default' filepath='/usr/include/x86_64-linux-gnu/bits/types/__mbstate_t.h' line='13' column='1' id='type-id-1688'>\r
       <data-member access='public' layout-offset-in-bits='0'>\r
         <var-decl name='__count' type-id='type-id-5' visibility='default' filepath='/usr/include/x86_64-linux-gnu/bits/types/__mbstate_t.h' line='15' column='1'/>\r
       </data-member>\r
       <data-member access='public' layout-offset-in-bits='32'>\r
-        <var-decl name='__value' type-id='type-id-1695' visibility='default' filepath='/usr/include/x86_64-linux-gnu/bits/types/__mbstate_t.h' line='20' column='1'/>\r
+        <var-decl name='__value' type-id='type-id-1689' visibility='default' filepath='/usr/include/x86_64-linux-gnu/bits/types/__mbstate_t.h' line='20' column='1'/>\r
       </data-member>\r
     </class-decl>\r
-    <union-decl name='__anonymous_union__' size-in-bits='32' is-anonymous='yes' visibility='default' filepath='/usr/include/x86_64-linux-gnu/bits/types/__mbstate_t.h' line='16' column='1' id='type-id-1695'>\r
+    <union-decl name='__anonymous_union__' size-in-bits='32' is-anonymous='yes' visibility='default' filepath='/usr/include/x86_64-linux-gnu/bits/types/__mbstate_t.h' line='16' column='1' id='type-id-1689'>\r
       <data-member access='public'>\r
         <var-decl name='__wch' type-id='type-id-105' visibility='default' filepath='/usr/include/x86_64-linux-gnu/bits/types/__mbstate_t.h' line='18' column='1'/>\r
       </data-member>\r
         <var-decl name='__wchb' type-id='type-id-864' visibility='default' filepath='/usr/include/x86_64-linux-gnu/bits/types/__mbstate_t.h' line='19' column='1'/>\r
       </data-member>\r
     </union-decl>\r
-    <typedef-decl name='__mbstate_t' type-id='type-id-1694' filepath='/usr/include/x86_64-linux-gnu/bits/types/__mbstate_t.h' line='21' column='1' id='type-id-1693'/>\r
-    <typedef-decl name='mbstate_t' type-id='type-id-1693' filepath='/usr/include/x86_64-linux-gnu/bits/types/mbstate_t.h' line='6' column='1' id='type-id-1696'/>\r
-    <pointer-type-def type-id='type-id-1696' size-in-bits='64' id='type-id-1697'/>\r
-    <qualified-type-def type-id='type-id-1697' restrict='yes' id='type-id-1698'/>\r
-    <qualified-type-def type-id='type-id-64' restrict='yes' id='type-id-1699'/>\r
+    <typedef-decl name='__mbstate_t' type-id='type-id-1688' filepath='/usr/include/x86_64-linux-gnu/bits/types/__mbstate_t.h' line='21' column='1' id='type-id-1687'/>\r
+    <typedef-decl name='mbstate_t' type-id='type-id-1687' filepath='/usr/include/x86_64-linux-gnu/bits/types/mbstate_t.h' line='6' column='1' id='type-id-1690'/>\r
+    <pointer-type-def type-id='type-id-1690' size-in-bits='64' id='type-id-1691'/>\r
+    <qualified-type-def type-id='type-id-1691' restrict='yes' id='type-id-1692'/>\r
+    <qualified-type-def type-id='type-id-64' restrict='yes' id='type-id-1693'/>\r
     <function-decl name='mbstowcs' filepath='/usr/include/stdlib.h' line='941' column='1' visibility='default' binding='global' size-in-bits='64'>\r
       <parameter type-id='type-id-19'/>\r
       <parameter type-id='type-id-180'/>\r
       <parameter type-id='type-id-19'/>\r
       <parameter type-id='type-id-180'/>\r
       <parameter type-id='type-id-21'/>\r
-      <parameter type-id='type-id-1698'/>\r
+      <parameter type-id='type-id-1692'/>\r
       <return type-id='type-id-21'/>\r
     </function-decl>\r
     <function-decl name='ioctl' filepath='/usr/include/x86_64-linux-gnu/sys/ioctl.h' line='42' column='1' visibility='default' binding='global' size-in-bits='64'>\r
     </function-decl>\r
   </abi-instr>\r
   <abi-instr address-size='64' path='Python/formatter_unicode.c' comp-dir-path='/home/runner/work/cpython/cpython' language='LANG_C11'>\r
-    <class-decl name='lconv' size-in-bits='768' is-struct='yes' visibility='default' filepath='/usr/include/locale.h' line='51' column='1' id='type-id-1700'>\r
+    <class-decl name='lconv' size-in-bits='768' is-struct='yes' visibility='default' filepath='/usr/include/locale.h' line='51' column='1' id='type-id-1694'>\r
       <data-member access='public' layout-offset-in-bits='0'>\r
         <var-decl name='decimal_point' type-id='type-id-17' visibility='default' filepath='/usr/include/locale.h' line='55' column='1'/>\r
       </data-member>\r
         <var-decl name='int_n_sign_posn' type-id='type-id-58' visibility='default' filepath='/usr/include/locale.h' line='109' column='1'/>\r
       </data-member>\r
     </class-decl>\r
-    <pointer-type-def type-id='type-id-1700' size-in-bits='64' id='type-id-1701'/>\r
+    <pointer-type-def type-id='type-id-1694' size-in-bits='64' id='type-id-1695'/>\r
     <function-decl name='_Py_GetLocaleconvNumeric' filepath='./Include/internal/pycore_fileutils.h' line='229' column='1' visibility='default' binding='global' size-in-bits='64'>\r
-      <parameter type-id='type-id-1701'/>\r
+      <parameter type-id='type-id-1695'/>\r
       <parameter type-id='type-id-241'/>\r
       <parameter type-id='type-id-241'/>\r
       <return type-id='type-id-5'/>\r
       <return type-id='type-id-7'/>\r
     </function-decl>\r
     <function-decl name='localeconv' filepath='/usr/include/locale.h' line='125' column='1' visibility='default' binding='global' size-in-bits='64'>\r
-      <return type-id='type-id-1701'/>\r
+      <return type-id='type-id-1695'/>\r
     </function-decl>\r
   </abi-instr>\r
   <abi-instr address-size='64' path='Python/frame.c' comp-dir-path='/home/runner/work/cpython/cpython' language='LANG_C11'>\r
-    <array-type-def dimensions='1' type-id='type-id-1702' size-in-bits='384' id='type-id-1703'>\r
+    <array-type-def dimensions='1' type-id='type-id-1696' size-in-bits='384' id='type-id-1697'>\r
       <subrange length='6' type-id='type-id-2' id='type-id-477'/>\r
     </array-type-def>\r
-    <qualified-type-def type-id='type-id-271' const='yes' id='type-id-1704'/>\r
-    <pointer-type-def type-id='type-id-1704' size-in-bits='64' id='type-id-1705'/>\r
-    <qualified-type-def type-id='type-id-1705' const='yes' id='type-id-1702'/>\r
-    <var-decl name='PyUnstable_ExecutableKinds' type-id='type-id-1703' mangled-name='PyUnstable_ExecutableKinds' visibility='default' filepath='./Include/cpython/pyframe.h' line='45' column='1' elf-symbol-id='PyUnstable_ExecutableKinds'/>\r
+    <qualified-type-def type-id='type-id-271' const='yes' id='type-id-1698'/>\r
+    <pointer-type-def type-id='type-id-1698' size-in-bits='64' id='type-id-1699'/>\r
+    <qualified-type-def type-id='type-id-1699' const='yes' id='type-id-1696'/>\r
+    <var-decl name='PyUnstable_ExecutableKinds' type-id='type-id-1697' mangled-name='PyUnstable_ExecutableKinds' visibility='default' filepath='./Include/cpython/pyframe.h' line='45' column='1' elf-symbol-id='PyUnstable_ExecutableKinds'/>\r
     <function-decl name='_PyFrame_New_NoTrack' filepath='./Include/internal/pycore_frame.h' line='41' column='1' visibility='default' binding='global' size-in-bits='64'>\r
       <parameter type-id='type-id-345'/>\r
       <return type-id='type-id-413'/>\r
     </function-decl>\r
   </abi-instr>\r
   <abi-instr address-size='64' path='Python/frozen.c' comp-dir-path='/home/runner/work/cpython/cpython' language='LANG_C11'>\r
-    <class-decl name='_frozen' size-in-bits='192' is-struct='yes' visibility='default' filepath='./Include/cpython/import.h' line='13' column='1' id='type-id-1706'>\r
+    <class-decl name='_frozen' size-in-bits='192' is-struct='yes' visibility='default' filepath='./Include/cpython/import.h' line='13' column='1' id='type-id-1700'>\r
       <data-member access='public' layout-offset-in-bits='0'>\r
         <var-decl name='name' type-id='type-id-4' visibility='default' filepath='./Include/cpython/import.h' line='14' column='1'/>\r
       </data-member>\r
         <var-decl name='is_package' type-id='type-id-5' visibility='default' filepath='./Include/cpython/import.h' line='17' column='1'/>\r
       </data-member>\r
     </class-decl>\r
-    <class-decl name='_module_alias' size-in-bits='128' is-struct='yes' visibility='default' filepath='./Include/internal/pycore_import.h' line='105' column='1' id='type-id-1707'>\r
+    <class-decl name='_module_alias' size-in-bits='128' is-struct='yes' visibility='default' filepath='./Include/internal/pycore_import.h' line='105' column='1' id='type-id-1701'>\r
       <data-member access='public' layout-offset-in-bits='0'>\r
         <var-decl name='name' type-id='type-id-4' visibility='default' filepath='./Include/internal/pycore_import.h' line='106' column='1'/>\r
       </data-member>\r
         <var-decl name='orig' type-id='type-id-4' visibility='default' filepath='./Include/internal/pycore_import.h' line='107' column='1'/>\r
       </data-member>\r
     </class-decl>\r
-    <qualified-type-def type-id='type-id-1706' const='yes' id='type-id-1708'/>\r
-    <pointer-type-def type-id='type-id-1708' size-in-bits='64' id='type-id-1709'/>\r
-    <qualified-type-def type-id='type-id-1707' const='yes' id='type-id-1710'/>\r
-    <pointer-type-def type-id='type-id-1710' size-in-bits='64' id='type-id-1711'/>\r
-    <var-decl name='PyImport_FrozenModules' type-id='type-id-1709' mangled-name='PyImport_FrozenModules' visibility='default' filepath='./Include/cpython/import.h' line='23' column='1' elf-symbol-id='PyImport_FrozenModules'/>\r
-    <var-decl name='_PyImport_FrozenBootstrap' type-id='type-id-1709' mangled-name='_PyImport_FrozenBootstrap' visibility='default' filepath='./Include/internal/pycore_import.h' line='111' column='1' elf-symbol-id='_PyImport_FrozenBootstrap'/>\r
-    <var-decl name='_PyImport_FrozenStdlib' type-id='type-id-1709' mangled-name='_PyImport_FrozenStdlib' visibility='default' filepath='./Include/internal/pycore_import.h' line='112' column='1' elf-symbol-id='_PyImport_FrozenStdlib'/>\r
-    <var-decl name='_PyImport_FrozenTest' type-id='type-id-1709' mangled-name='_PyImport_FrozenTest' visibility='default' filepath='./Include/internal/pycore_import.h' line='113' column='1' elf-symbol-id='_PyImport_FrozenTest'/>\r
-    <var-decl name='_PyImport_FrozenAliases' type-id='type-id-1711' visibility='default' filepath='./Include/internal/pycore_import.h' line='115' column='1'/>\r
+    <qualified-type-def type-id='type-id-1700' const='yes' id='type-id-1702'/>\r
+    <pointer-type-def type-id='type-id-1702' size-in-bits='64' id='type-id-1703'/>\r
+    <qualified-type-def type-id='type-id-1701' const='yes' id='type-id-1704'/>\r
+    <pointer-type-def type-id='type-id-1704' size-in-bits='64' id='type-id-1705'/>\r
+    <var-decl name='PyImport_FrozenModules' type-id='type-id-1703' mangled-name='PyImport_FrozenModules' visibility='default' filepath='./Include/cpython/import.h' line='23' column='1' elf-symbol-id='PyImport_FrozenModules'/>\r
+    <var-decl name='_PyImport_FrozenBootstrap' type-id='type-id-1703' mangled-name='_PyImport_FrozenBootstrap' visibility='default' filepath='./Include/internal/pycore_import.h' line='111' column='1' elf-symbol-id='_PyImport_FrozenBootstrap'/>\r
+    <var-decl name='_PyImport_FrozenStdlib' type-id='type-id-1703' mangled-name='_PyImport_FrozenStdlib' visibility='default' filepath='./Include/internal/pycore_import.h' line='112' column='1' elf-symbol-id='_PyImport_FrozenStdlib'/>\r
+    <var-decl name='_PyImport_FrozenTest' type-id='type-id-1703' mangled-name='_PyImport_FrozenTest' visibility='default' filepath='./Include/internal/pycore_import.h' line='113' column='1' elf-symbol-id='_PyImport_FrozenTest'/>\r
+    <var-decl name='_PyImport_FrozenAliases' type-id='type-id-1705' visibility='default' filepath='./Include/internal/pycore_import.h' line='115' column='1'/>\r
   </abi-instr>\r
   <abi-instr address-size='64' path='Python/frozenmain.c' comp-dir-path='/home/runner/work/cpython/cpython' language='LANG_C11'>\r
     <pointer-type-def type-id='type-id-273' size-in-bits='64' id='type-id-65'/>\r
     </function-decl>\r
   </abi-instr>\r
   <abi-instr address-size='64' path='Python/gc.c' comp-dir-path='/home/runner/work/cpython/cpython' language='LANG_C11'>\r
-    <typedef-decl name='gcvisitobjects_t' type-id='type-id-396' filepath='./Include/cpython/objimpl.h' line='103' column='1' id='type-id-1712'/>\r
+    <typedef-decl name='gcvisitobjects_t' type-id='type-id-396' filepath='./Include/cpython/objimpl.h' line='103' column='1' id='type-id-1706'/>\r
     <function-decl name='_PyGC_ClearAllFreeLists' filepath='./Include/internal/pycore_gc.h' line='345' column='1' visibility='default' binding='global' size-in-bits='64'>\r
       <parameter type-id='type-id-33'/>\r
       <return type-id='type-id-3'/>\r
       <return type-id='type-id-5'/>\r
     </function-decl>\r
     <function-decl name='PyUnstable_GC_VisitObjects' mangled-name='PyUnstable_GC_VisitObjects' filepath='Python/gc.c' line='2419' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='PyUnstable_GC_VisitObjects'>\r
-      <parameter type-id='type-id-1712' name='callback' filepath='Python/gc.c' line='2419' column='1'/>\r
+      <parameter type-id='type-id-1706' name='callback' filepath='Python/gc.c' line='2419' column='1'/>\r
       <parameter type-id='type-id-35' name='arg' filepath='Python/gc.c' line='2419' column='1'/>\r
       <return type-id='type-id-3'/>\r
     </function-decl>\r
   </abi-instr>\r
   <abi-instr address-size='64' path='Python/gc_gil.c' comp-dir-path='/home/runner/work/cpython/cpython' language='LANG_C11'>\r
-    <pointer-type-def type-id='type-id-1174' size-in-bits='64' id='type-id-1713'/>\r
+    <pointer-type-def type-id='type-id-1174' size-in-bits='64' id='type-id-1707'/>\r
     <function-decl name='_PyObject_ClearFreeLists' filepath='./Include/internal/pycore_freelist.h' line='106' column='1' visibility='default' binding='global' size-in-bits='64'>\r
-      <parameter type-id='type-id-1713'/>\r
+      <parameter type-id='type-id-1707'/>\r
       <parameter type-id='type-id-5'/>\r
       <return type-id='type-id-3'/>\r
     </function-decl>\r
     <var-decl name='_PyOS_optarg' type-id='type-id-18' visibility='default' filepath='./Include/internal/pycore_getopt.h' line='10' column='1'/>\r
   </abi-instr>\r
   <abi-instr address-size='64' path='Python/getversion.c' comp-dir-path='/home/runner/work/cpython/cpython' language='LANG_C11'>\r
-    <qualified-type-def type-id='type-id-2' const='yes' id='type-id-1714'/>\r
-    <var-decl name='Py_Version' type-id='type-id-1714' mangled-name='Py_Version' visibility='default' filepath='./Include/pylifecycle.h' line='64' column='1' elf-symbol-id='Py_Version'/>\r
+    <qualified-type-def type-id='type-id-2' const='yes' id='type-id-1708'/>\r
+    <var-decl name='Py_Version' type-id='type-id-1708' mangled-name='Py_Version' visibility='default' filepath='./Include/pylifecycle.h' line='64' column='1' elf-symbol-id='Py_Version'/>\r
   </abi-instr>\r
   <abi-instr address-size='64' path='Python/hamt.c' comp-dir-path='/home/runner/work/cpython/cpython' language='LANG_C11'>\r
     <var-decl name='_PyHamt_Type' type-id='type-id-271' visibility='default' filepath='./Include/internal/pycore_hamt.h' line='24' column='1'/>\r
     <var-decl name='_PyHamtItems_Type' type-id='type-id-271' visibility='default' filepath='./Include/internal/pycore_hamt.h' line='30' column='1'/>\r
   </abi-instr>\r
   <abi-instr address-size='64' path='Python/hashtable.c' comp-dir-path='/home/runner/work/cpython/cpython' language='LANG_C11'>\r
-    <typedef-decl name='_Py_hashtable_foreach_func' type-id='type-id-1715' filepath='./Include/internal/pycore_hashtable.h' line='97' column='1' id='type-id-1716'/>\r
-    <pointer-type-def type-id='type-id-1717' size-in-bits='64' id='type-id-1715'/>\r
+    <typedef-decl name='_Py_hashtable_foreach_func' type-id='type-id-1709' filepath='./Include/internal/pycore_hashtable.h' line='97' column='1' id='type-id-1710'/>\r
+    <pointer-type-def type-id='type-id-1711' size-in-bits='64' id='type-id-1709'/>\r
     <function-decl name='_Py_hashtable_hash_ptr' mangled-name='_Py_hashtable_hash_ptr' filepath='Python/hashtable.c' line='93' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='_Py_hashtable_hash_ptr'>\r
       <parameter type-id='type-id-35' name='key' filepath='Python/hashtable.c' line='93' column='1'/>\r
       <return type-id='type-id-1217'/>\r
     </function-decl>\r
     <function-decl name='_Py_hashtable_foreach' mangled-name='_Py_hashtable_foreach' filepath='Python/hashtable.c' line='268' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='_Py_hashtable_foreach'>\r
       <parameter type-id='type-id-618' name='ht' filepath='Python/hashtable.c' line='268' column='1'/>\r
-      <parameter type-id='type-id-1716' name='func' filepath='Python/hashtable.c' line='269' column='1'/>\r
+      <parameter type-id='type-id-1710' name='func' filepath='Python/hashtable.c' line='269' column='1'/>\r
       <parameter type-id='type-id-35' name='user_data' filepath='Python/hashtable.c' line='270' column='1'/>\r
       <return type-id='type-id-5'/>\r
     </function-decl>\r
       <parameter type-id='type-id-618' name='ht' filepath='Python/hashtable.c' line='392' column='1'/>\r
       <return type-id='type-id-3'/>\r
     </function-decl>\r
-    <function-type size-in-bits='64' id='type-id-1717'>\r
+    <function-type size-in-bits='64' id='type-id-1711'>\r
       <parameter type-id='type-id-618'/>\r
       <parameter type-id='type-id-35'/>\r
       <parameter type-id='type-id-35'/>\r
     </function-type>\r
   </abi-instr>\r
   <abi-instr address-size='64' path='Python/import.c' comp-dir-path='/home/runner/work/cpython/cpython' language='LANG_C11'>\r
-    <enum-decl name='ext_module_kind' filepath='./Include/internal/pycore_importdl.h' line='18' column='1' id='type-id-1718'>\r
+    <enum-decl name='ext_module_kind' filepath='./Include/internal/pycore_importdl.h' line='18' column='1' id='type-id-1712'>\r
       <underlying-type type-id='type-id-37'/>\r
       <enumerator name='_Py_ext_module_kind_UNKNOWN' value='0'/>\r
       <enumerator name='_Py_ext_module_kind_SINGLEPHASE' value='1'/>\r
       <enumerator name='_Py_ext_module_kind_MULTIPHASE' value='2'/>\r
       <enumerator name='_Py_ext_module_kind_INVALID' value='3'/>\r
     </enum-decl>\r
-    <typedef-decl name='_Py_ext_module_kind' type-id='type-id-1718' filepath='./Include/internal/pycore_importdl.h' line='23' column='1' id='type-id-1719'/>\r
-    <enum-decl name='ext_module_origin' filepath='./Include/internal/pycore_importdl.h' line='25' column='1' id='type-id-1720'>\r
+    <typedef-decl name='_Py_ext_module_kind' type-id='type-id-1712' filepath='./Include/internal/pycore_importdl.h' line='23' column='1' id='type-id-1713'/>\r
+    <enum-decl name='ext_module_origin' filepath='./Include/internal/pycore_importdl.h' line='25' column='1' id='type-id-1714'>\r
       <underlying-type type-id='type-id-37'/>\r
       <enumerator name='_Py_ext_module_origin_CORE' value='1'/>\r
       <enumerator name='_Py_ext_module_origin_BUILTIN' value='2'/>\r
       <enumerator name='_Py_ext_module_origin_DYNAMIC' value='3'/>\r
     </enum-decl>\r
-    <typedef-decl name='_Py_ext_module_origin' type-id='type-id-1720' filepath='./Include/internal/pycore_importdl.h' line='29' column='1' id='type-id-1721'/>\r
-    <class-decl name='_Py_ext_module_loader_info' size-in-bits='512' is-struct='yes' visibility='default' filepath='./Include/internal/pycore_importdl.h' line='32' column='1' id='type-id-1722'>\r
+    <typedef-decl name='_Py_ext_module_origin' type-id='type-id-1714' filepath='./Include/internal/pycore_importdl.h' line='29' column='1' id='type-id-1715'/>\r
+    <class-decl name='_Py_ext_module_loader_info' size-in-bits='512' is-struct='yes' visibility='default' filepath='./Include/internal/pycore_importdl.h' line='32' column='1' id='type-id-1716'>\r
       <data-member access='public' layout-offset-in-bits='0'>\r
         <var-decl name='filename' type-id='type-id-6' visibility='default' filepath='./Include/internal/pycore_importdl.h' line='33' column='1'/>\r
       </data-member>\r
         <var-decl name='path' type-id='type-id-6' visibility='default' filepath='./Include/internal/pycore_importdl.h' line='41' column='1'/>\r
       </data-member>\r
       <data-member access='public' layout-offset-in-bits='320'>\r
-        <var-decl name='origin' type-id='type-id-1721' visibility='default' filepath='./Include/internal/pycore_importdl.h' line='42' column='1'/>\r
+        <var-decl name='origin' type-id='type-id-1715' visibility='default' filepath='./Include/internal/pycore_importdl.h' line='42' column='1'/>\r
       </data-member>\r
       <data-member access='public' layout-offset-in-bits='384'>\r
         <var-decl name='hook_prefix' type-id='type-id-4' visibility='default' filepath='./Include/internal/pycore_importdl.h' line='43' column='1'/>\r
         <var-decl name='newcontext' type-id='type-id-4' visibility='default' filepath='./Include/internal/pycore_importdl.h' line='44' column='1'/>\r
       </data-member>\r
     </class-decl>\r
-    <class-decl name='_Py_ext_module_loader_result' size-in-bits='384' is-struct='yes' visibility='default' filepath='./Include/internal/pycore_importdl.h' line='66' column='1' id='type-id-1723'>\r
+    <class-decl name='_Py_ext_module_loader_result' size-in-bits='384' is-struct='yes' visibility='default' filepath='./Include/internal/pycore_importdl.h' line='66' column='1' id='type-id-1717'>\r
       <data-member access='public' layout-offset-in-bits='0'>\r
         <var-decl name='def' type-id='type-id-473' visibility='default' filepath='./Include/internal/pycore_importdl.h' line='67' column='1'/>\r
       </data-member>\r
         <var-decl name='module' type-id='type-id-6' visibility='default' filepath='./Include/internal/pycore_importdl.h' line='68' column='1'/>\r
       </data-member>\r
       <data-member access='public' layout-offset-in-bits='128'>\r
-        <var-decl name='kind' type-id='type-id-1719' visibility='default' filepath='./Include/internal/pycore_importdl.h' line='69' column='1'/>\r
+        <var-decl name='kind' type-id='type-id-1713' visibility='default' filepath='./Include/internal/pycore_importdl.h' line='69' column='1'/>\r
       </data-member>\r
       <data-member access='public' layout-offset-in-bits='192'>\r
-        <var-decl name='err' type-id='type-id-1724' visibility='default' filepath='./Include/internal/pycore_importdl.h' line='70' column='1'/>\r
+        <var-decl name='err' type-id='type-id-1718' visibility='default' filepath='./Include/internal/pycore_importdl.h' line='70' column='1'/>\r
       </data-member>\r
       <data-member access='public' layout-offset-in-bits='256'>\r
-        <var-decl name='_err' type-id='type-id-1725' visibility='default' filepath='./Include/internal/pycore_importdl.h' line='82' column='1'/>\r
+        <var-decl name='_err' type-id='type-id-1719' visibility='default' filepath='./Include/internal/pycore_importdl.h' line='82' column='1'/>\r
       </data-member>\r
     </class-decl>\r
-    <class-decl name='_Py_ext_module_loader_result_error' size-in-bits='128' is-struct='yes' visibility='default' filepath='./Include/internal/pycore_importdl.h' line='71' column='1' id='type-id-1725'>\r
+    <class-decl name='_Py_ext_module_loader_result_error' size-in-bits='128' is-struct='yes' visibility='default' filepath='./Include/internal/pycore_importdl.h' line='71' column='1' id='type-id-1719'>\r
       <data-member access='public' layout-offset-in-bits='0'>\r
-        <var-decl name='kind' type-id='type-id-1726' visibility='default' filepath='./Include/internal/pycore_importdl.h' line='80' column='1'/>\r
+        <var-decl name='kind' type-id='type-id-1720' visibility='default' filepath='./Include/internal/pycore_importdl.h' line='80' column='1'/>\r
       </data-member>\r
       <data-member access='public' layout-offset-in-bits='64'>\r
         <var-decl name='exc' type-id='type-id-6' visibility='default' filepath='./Include/internal/pycore_importdl.h' line='81' column='1'/>\r
       </data-member>\r
     </class-decl>\r
-    <enum-decl name='_Py_ext_module_loader_result_error_kind' filepath='./Include/internal/pycore_importdl.h' line='72' column='1' id='type-id-1726'>\r
+    <enum-decl name='_Py_ext_module_loader_result_error_kind' filepath='./Include/internal/pycore_importdl.h' line='72' column='1' id='type-id-1720'>\r
       <underlying-type type-id='type-id-37'/>\r
       <enumerator name='_Py_ext_module_loader_result_EXCEPTION' value='0'/>\r
       <enumerator name='_Py_ext_module_loader_result_ERR_MISSING' value='1'/>\r
       <enumerator name='_Py_ext_module_loader_result_ERR_NOT_MODULE' value='5'/>\r
       <enumerator name='_Py_ext_module_loader_result_ERR_MISSING_DEF' value='6'/>\r
     </enum-decl>\r
-    <typedef-decl name='PyModInitFunction' type-id='type-id-466' filepath='./Include/internal/pycore_importdl.h' line='91' column='1' id='type-id-1727'/>\r
-    <typedef-decl name='PyThread_ident_t' type-id='type-id-462' filepath='./Include/internal/pycore_pythread.h' line='119' column='1' id='type-id-1728'/>\r
-    <enum-decl name='_PyTime_round_t' naming-typedef-id='type-id-173' filepath='./Include/internal/pycore_time.h' line='68' column='1' id='type-id-1729'>\r
+    <typedef-decl name='PyModInitFunction' type-id='type-id-466' filepath='./Include/internal/pycore_importdl.h' line='91' column='1' id='type-id-1721'/>\r
+    <typedef-decl name='PyThread_ident_t' type-id='type-id-462' filepath='./Include/internal/pycore_pythread.h' line='119' column='1' id='type-id-1722'/>\r
+    <enum-decl name='_PyTime_round_t' naming-typedef-id='type-id-173' filepath='./Include/internal/pycore_time.h' line='68' column='1' id='type-id-1723'>\r
       <underlying-type type-id='type-id-37'/>\r
       <enumerator name='_PyTime_ROUND_FLOOR' value='0'/>\r
       <enumerator name='_PyTime_ROUND_CEILING' value='1'/>\r
       <enumerator name='_PyTime_ROUND_UP' value='3'/>\r
       <enumerator name='_PyTime_ROUND_TIMEOUT' value='3'/>\r
     </enum-decl>\r
-    <typedef-decl name='_PyTime_round_t' type-id='type-id-1729' filepath='./Include/internal/pycore_time.h' line='92' column='1' id='type-id-173'/>\r
+    <typedef-decl name='_PyTime_round_t' type-id='type-id-1723' filepath='./Include/internal/pycore_time.h' line='92' column='1' id='type-id-173'/>\r
     <pointer-type-def type-id='type-id-28' size-in-bits='64' id='type-id-174'/>\r
-    <pointer-type-def type-id='type-id-1722' size-in-bits='64' id='type-id-1730'/>\r
-    <pointer-type-def type-id='type-id-1723' size-in-bits='64' id='type-id-1731'/>\r
-    <pointer-type-def type-id='type-id-1725' size-in-bits='64' id='type-id-1724'/>\r
+    <pointer-type-def type-id='type-id-1716' size-in-bits='64' id='type-id-1724'/>\r
+    <pointer-type-def type-id='type-id-1717' size-in-bits='64' id='type-id-1725'/>\r
+    <pointer-type-def type-id='type-id-1719' size-in-bits='64' id='type-id-1718'/>\r
     <var-decl name='PyImport_Inittab' type-id='type-id-1256' mangled-name='PyImport_Inittab' visibility='default' filepath='./Include/cpython/import.h' line='10' column='1' elf-symbol-id='PyImport_Inittab'/>\r
     <function-decl name='PyTime_PerfCounterRaw' mangled-name='PyTime_PerfCounterRaw' filepath='./Include/cpython/pytime.h' line='20' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='PyTime_PerfCounterRaw'>\r
       <parameter type-id='type-id-174'/>\r
       <return type-id='type-id-5'/>\r
     </function-decl>\r
     <function-decl name='_Py_ext_module_loader_info_clear' filepath='./Include/internal/pycore_importdl.h' line='46' column='1' visibility='default' binding='global' size-in-bits='64'>\r
-      <parameter type-id='type-id-1730'/>\r
+      <parameter type-id='type-id-1724'/>\r
       <return type-id='type-id-3'/>\r
     </function-decl>\r
     <function-decl name='_Py_ext_module_loader_info_init_for_builtin' filepath='./Include/internal/pycore_importdl.h' line='56' column='1' visibility='default' binding='global' size-in-bits='64'>\r
-      <parameter type-id='type-id-1730'/>\r
+      <parameter type-id='type-id-1724'/>\r
       <parameter type-id='type-id-6'/>\r
       <return type-id='type-id-5'/>\r
     </function-decl>\r
     <function-decl name='_Py_ext_module_loader_info_init_from_spec' filepath='./Include/internal/pycore_importdl.h' line='60' column='1' visibility='default' binding='global' size-in-bits='64'>\r
-      <parameter type-id='type-id-1730'/>\r
+      <parameter type-id='type-id-1724'/>\r
       <parameter type-id='type-id-6'/>\r
       <return type-id='type-id-5'/>\r
     </function-decl>\r
     <function-decl name='_Py_ext_module_loader_result_clear' filepath='./Include/internal/pycore_importdl.h' line='84' column='1' visibility='default' binding='global' size-in-bits='64'>\r
-      <parameter type-id='type-id-1731'/>\r
+      <parameter type-id='type-id-1725'/>\r
       <return type-id='type-id-3'/>\r
     </function-decl>\r
     <function-decl name='_Py_ext_module_loader_result_apply_error' filepath='./Include/internal/pycore_importdl.h' line='86' column='1' visibility='default' binding='global' size-in-bits='64'>\r
-      <parameter type-id='type-id-1731'/>\r
+      <parameter type-id='type-id-1725'/>\r
       <parameter type-id='type-id-4'/>\r
       <return type-id='type-id-3'/>\r
     </function-decl>\r
     <function-decl name='_PyImport_GetModInitFunc' filepath='./Include/internal/pycore_importdl.h' line='93' column='1' visibility='default' binding='global' size-in-bits='64'>\r
-      <parameter type-id='type-id-1730'/>\r
+      <parameter type-id='type-id-1724'/>\r
       <parameter type-id='type-id-61'/>\r
-      <return type-id='type-id-1727'/>\r
+      <return type-id='type-id-1721'/>\r
     </function-decl>\r
     <function-decl name='_PyImport_RunModInitFunc' filepath='./Include/internal/pycore_importdl.h' line='97' column='1' visibility='default' binding='global' size-in-bits='64'>\r
-      <parameter type-id='type-id-1727'/>\r
-      <parameter type-id='type-id-1730'/>\r
-      <parameter type-id='type-id-1731'/>\r
+      <parameter type-id='type-id-1721'/>\r
+      <parameter type-id='type-id-1724'/>\r
+      <parameter type-id='type-id-1725'/>\r
       <return type-id='type-id-5'/>\r
     </function-decl>\r
     <function-decl name='_PyRecursiveMutex_IsLockedByCurrentThread' mangled-name='_PyRecursiveMutex_IsLockedByCurrentThread' filepath='./Include/internal/pycore_lock.h' line='162' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='_PyRecursiveMutex_IsLockedByCurrentThread'>\r
       <return type-id='type-id-3'/>\r
     </function-decl>\r
     <function-decl name='PyThread_get_thread_ident_ex' mangled-name='PyThread_get_thread_ident_ex' filepath='./Include/internal/pycore_pythread.h' line='125' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='PyThread_get_thread_ident_ex'>\r
-      <return type-id='type-id-1728'/>\r
+      <return type-id='type-id-1722'/>\r
     </function-decl>\r
     <function-decl name='_PySys_ClearAttrString' filepath='./Include/internal/pycore_sysmodule.h' line='21' column='1' visibility='default' binding='global' size-in-bits='64'>\r
       <parameter type-id='type-id-33'/>\r
     </function-decl>\r
   </abi-instr>\r
   <abi-instr address-size='64' path='Python/initconfig.c' comp-dir-path='/home/runner/work/cpython/cpython' language='LANG_C11'>\r
-    <typedef-decl name='PyInitConfig' type-id='type-id-1732' filepath='./Include/cpython/initconfig.h' line='288' column='1' id='type-id-1733'/>\r
+    <typedef-decl name='PyInitConfig' type-id='type-id-1726' filepath='./Include/cpython/initconfig.h' line='288' column='1' id='type-id-1727'/>\r
     <class-decl name='_PyArgv' size-in-bits='256' is-struct='yes' visibility='default' filepath='./Include/internal/pycore_initconfig.h' line='68' column='1' id='type-id-247'>\r
       <data-member access='public' layout-offset-in-bits='0'>\r
         <var-decl name='argc' type-id='type-id-7' visibility='default' filepath='./Include/internal/pycore_initconfig.h' line='69' column='1'/>\r
         <var-decl name='bytes_argv' type-id='type-id-129' visibility='default' filepath='./Include/internal/pycore_initconfig.h' line='71' column='1'/>\r
       </data-member>\r
       <data-member access='public' layout-offset-in-bits='192'>\r
-        <var-decl name='wchar_argv' type-id='type-id-1734' visibility='default' filepath='./Include/internal/pycore_initconfig.h' line='72' column='1'/>\r
+        <var-decl name='wchar_argv' type-id='type-id-1728' visibility='default' filepath='./Include/internal/pycore_initconfig.h' line='72' column='1'/>\r
       </data-member>\r
     </class-decl>\r
-    <typedef-decl name='_PyArgv' type-id='type-id-247' filepath='./Include/internal/pycore_initconfig.h' line='73' column='1' id='type-id-1735'/>\r
-    <class-decl name='_PyPreCmdline' size-in-bits='384' is-struct='yes' naming-typedef-id='type-id-1736' visibility='default' filepath='./Include/internal/pycore_initconfig.h' line='101' column='1' id='type-id-1737'>\r
+    <typedef-decl name='_PyArgv' type-id='type-id-247' filepath='./Include/internal/pycore_initconfig.h' line='73' column='1' id='type-id-1729'/>\r
+    <class-decl name='_PyPreCmdline' size-in-bits='384' is-struct='yes' naming-typedef-id='type-id-1730' visibility='default' filepath='./Include/internal/pycore_initconfig.h' line='101' column='1' id='type-id-1731'>\r
       <data-member access='public' layout-offset-in-bits='0'>\r
         <var-decl name='argv' type-id='type-id-978' visibility='default' filepath='./Include/internal/pycore_initconfig.h' line='102' column='1'/>\r
       </data-member>\r
         <var-decl name='warn_default_encoding' type-id='type-id-5' visibility='default' filepath='./Include/internal/pycore_initconfig.h' line='107' column='1'/>\r
       </data-member>\r
     </class-decl>\r
-    <typedef-decl name='_PyPreCmdline' type-id='type-id-1737' filepath='./Include/internal/pycore_initconfig.h' line='108' column='1' id='type-id-1736'/>\r
-    <class-decl name='PyInitConfig' size-in-bits='4416' is-struct='yes' visibility='default' filepath='Python/initconfig.c' line='3692' column='1' id='type-id-1732'>\r
+    <typedef-decl name='_PyPreCmdline' type-id='type-id-1731' filepath='./Include/internal/pycore_initconfig.h' line='108' column='1' id='type-id-1730'/>\r
+    <class-decl name='PyInitConfig' size-in-bits='4416' is-struct='yes' visibility='default' filepath='Python/initconfig.c' line='3692' column='1' id='type-id-1726'>\r
       <data-member access='public' layout-offset-in-bits='0'>\r
         <var-decl name='preconfig' type-id='type-id-981' visibility='default' filepath='Python/initconfig.c' line='3693' column='1'/>\r
       </data-member>\r
         <var-decl name='err_msg' type-id='type-id-17' visibility='default' filepath='Python/initconfig.c' line='3698' column='1'/>\r
       </data-member>\r
     </class-decl>\r
-    <pointer-type-def type-id='type-id-1733' size-in-bits='64' id='type-id-1738'/>\r
-    <pointer-type-def type-id='type-id-981' size-in-bits='64' id='type-id-1739'/>\r
-    <pointer-type-def type-id='type-id-978' size-in-bits='64' id='type-id-1740'/>\r
-    <pointer-type-def type-id='type-id-1736' size-in-bits='64' id='type-id-1741'/>\r
-    <pointer-type-def type-id='type-id-251' size-in-bits='64' id='type-id-1742'/>\r
-    <qualified-type-def type-id='type-id-981' const='yes' id='type-id-1743'/>\r
-    <pointer-type-def type-id='type-id-1743' size-in-bits='64' id='type-id-250'/>\r
-    <qualified-type-def type-id='type-id-978' const='yes' id='type-id-1744'/>\r
-    <pointer-type-def type-id='type-id-1744' size-in-bits='64' id='type-id-239'/>\r
-    <qualified-type-def type-id='type-id-1735' const='yes' id='type-id-1745'/>\r
-    <pointer-type-def type-id='type-id-1745' size-in-bits='64' id='type-id-1746'/>\r
-    <qualified-type-def type-id='type-id-1736' const='yes' id='type-id-1747'/>\r
-    <pointer-type-def type-id='type-id-1747' size-in-bits='64' id='type-id-1748'/>\r
+    <pointer-type-def type-id='type-id-1727' size-in-bits='64' id='type-id-1732'/>\r
+    <pointer-type-def type-id='type-id-981' size-in-bits='64' id='type-id-1733'/>\r
+    <pointer-type-def type-id='type-id-978' size-in-bits='64' id='type-id-1734'/>\r
+    <pointer-type-def type-id='type-id-1730' size-in-bits='64' id='type-id-1735'/>\r
+    <pointer-type-def type-id='type-id-251' size-in-bits='64' id='type-id-1736'/>\r
+    <qualified-type-def type-id='type-id-981' const='yes' id='type-id-1737'/>\r
+    <pointer-type-def type-id='type-id-1737' size-in-bits='64' id='type-id-250'/>\r
+    <qualified-type-def type-id='type-id-978' const='yes' id='type-id-1738'/>\r
+    <pointer-type-def type-id='type-id-1738' size-in-bits='64' id='type-id-239'/>\r
+    <qualified-type-def type-id='type-id-1729' const='yes' id='type-id-1739'/>\r
+    <pointer-type-def type-id='type-id-1739' size-in-bits='64' id='type-id-1740'/>\r
+    <qualified-type-def type-id='type-id-1730' const='yes' id='type-id-1741'/>\r
+    <pointer-type-def type-id='type-id-1741' size-in-bits='64' id='type-id-1742'/>\r
     <qualified-type-def type-id='type-id-18' restrict='yes' id='type-id-20'/>\r
-    <qualified-type-def type-id='type-id-63' const='yes' id='type-id-1749'/>\r
-    <pointer-type-def type-id='type-id-1749' size-in-bits='64' id='type-id-1734'/>\r
+    <qualified-type-def type-id='type-id-63' const='yes' id='type-id-1743'/>\r
+    <pointer-type-def type-id='type-id-1743' size-in-bits='64' id='type-id-1728'/>\r
     <qualified-type-def type-id='type-id-63' restrict='yes' id='type-id-19'/>\r
-    <qualified-type-def type-id='type-id-244' restrict='yes' id='type-id-1750'/>\r
-    <pointer-type-def type-id='type-id-244' size-in-bits='64' id='type-id-1751'/>\r
+    <qualified-type-def type-id='type-id-244' restrict='yes' id='type-id-1744'/>\r
+    <pointer-type-def type-id='type-id-244' size-in-bits='64' id='type-id-1745'/>\r
     <function-decl name='PyPreConfig_InitIsolatedConfig' mangled-name='PyPreConfig_InitIsolatedConfig' filepath='./Include/cpython/initconfig.h' line='128' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='PyPreConfig_InitIsolatedConfig'>\r
-      <parameter type-id='type-id-1739'/>\r
+      <parameter type-id='type-id-1733'/>\r
       <return type-id='type-id-3'/>\r
     </function-decl>\r
     <var-decl name='Py_DebugFlag' type-id='type-id-5' mangled-name='Py_DebugFlag' visibility='default' filepath='./Include/cpython/pydebug.h' line='8' column='1' elf-symbol-id='Py_DebugFlag'/>\r
     </function-decl>\r
     <function-decl name='_PyOS_GetOpt' filepath='./Include/internal/pycore_getopt.h' line='20' column='1' visibility='default' binding='global' size-in-bits='64'>\r
       <parameter type-id='type-id-7'/>\r
-      <parameter type-id='type-id-1734'/>\r
+      <parameter type-id='type-id-1728'/>\r
       <parameter type-id='type-id-177'/>\r
       <return type-id='type-id-5'/>\r
     </function-decl>\r
     <function-decl name='_PyArgv_AsWstrList' filepath='./Include/internal/pycore_initconfig.h' line='75' column='1' visibility='default' binding='global' size-in-bits='64'>\r
-      <parameter type-id='type-id-1746'/>\r
       <parameter type-id='type-id-1740'/>\r
+      <parameter type-id='type-id-1734'/>\r
       <return type-id='type-id-66'/>\r
     </function-decl>\r
     <function-decl name='_Py_str_to_int' filepath='./Include/internal/pycore_initconfig.h' line='81' column='1' visibility='default' binding='global' size-in-bits='64'>\r
       <return type-id='type-id-3'/>\r
     </function-decl>\r
     <function-decl name='_PyPreCmdline_Clear' filepath='./Include/internal/pycore_initconfig.h' line='117' column='1' visibility='default' binding='global' size-in-bits='64'>\r
-      <parameter type-id='type-id-1741'/>\r
+      <parameter type-id='type-id-1735'/>\r
       <return type-id='type-id-3'/>\r
     </function-decl>\r
     <function-decl name='_PyPreCmdline_SetConfig' filepath='./Include/internal/pycore_initconfig.h' line='120' column='1' visibility='default' binding='global' size-in-bits='64'>\r
-      <parameter type-id='type-id-1748'/>\r
+      <parameter type-id='type-id-1742'/>\r
       <parameter type-id='type-id-65'/>\r
       <return type-id='type-id-66'/>\r
     </function-decl>\r
     <function-decl name='_PyPreCmdline_Read' filepath='./Include/internal/pycore_initconfig.h' line='123' column='1' visibility='default' binding='global' size-in-bits='64'>\r
-      <parameter type-id='type-id-1741'/>\r
+      <parameter type-id='type-id-1735'/>\r
       <parameter type-id='type-id-250'/>\r
       <return type-id='type-id-66'/>\r
     </function-decl>\r
     <function-decl name='_PyPreConfig_InitFromPreConfig' filepath='./Include/internal/pycore_initconfig.h' line='135' column='1' visibility='default' binding='global' size-in-bits='64'>\r
-      <parameter type-id='type-id-1739'/>\r
+      <parameter type-id='type-id-1733'/>\r
       <parameter type-id='type-id-250'/>\r
       <return type-id='type-id-66'/>\r
     </function-decl>\r
       <return type-id='type-id-6'/>\r
     </function-decl>\r
     <function-decl name='_PyPreConfig_GetConfig' filepath='./Include/internal/pycore_initconfig.h' line='139' column='1' visibility='default' binding='global' size-in-bits='64'>\r
-      <parameter type-id='type-id-1739'/>\r
+      <parameter type-id='type-id-1733'/>\r
       <parameter type-id='type-id-240'/>\r
       <return type-id='type-id-3'/>\r
     </function-decl>\r
       <return type-id='type-id-5'/>\r
     </function-decl>\r
     <function-decl name='_PySys_ReadPreinitWarnOptions' filepath='./Include/internal/pycore_pylifecycle.h' line='35' column='1' visibility='default' binding='global' size-in-bits='64'>\r
-      <parameter type-id='type-id-1740'/>\r
+      <parameter type-id='type-id-1734'/>\r
       <return type-id='type-id-66'/>\r
     </function-decl>\r
     <function-decl name='_PySys_ReadPreinitXOptions' filepath='./Include/internal/pycore_pylifecycle.h' line='36' column='1' visibility='default' binding='global' size-in-bits='64'>\r
     </function-decl>\r
     <function-decl name='_Py_PreInitializeFromConfig' filepath='./Include/internal/pycore_pylifecycle.h' line='71' column='1' visibility='default' binding='global' size-in-bits='64'>\r
       <parameter type-id='type-id-240'/>\r
-      <parameter type-id='type-id-1746'/>\r
+      <parameter type-id='type-id-1740'/>\r
       <return type-id='type-id-66'/>\r
     </function-decl>\r
     <function-decl name='_PyMem_RawStrdup' filepath='./Include/internal/pycore_pymem.h' line='20' column='1' visibility='default' binding='global' size-in-bits='64'>\r
     <function-decl name='wcstok' filepath='/usr/include/wchar.h' line='218' column='1' visibility='default' binding='global' size-in-bits='64'>\r
       <parameter type-id='type-id-19'/>\r
       <parameter type-id='type-id-20'/>\r
-      <parameter type-id='type-id-1750'/>\r
+      <parameter type-id='type-id-1744'/>\r
       <return type-id='type-id-63'/>\r
     </function-decl>\r
     <function-decl name='wcstol' filepath='/usr/include/wchar.h' line='429' column='1' visibility='default' binding='global' size-in-bits='64'>\r
       <parameter type-id='type-id-20'/>\r
-      <parameter type-id='type-id-1750'/>\r
+      <parameter type-id='type-id-1744'/>\r
       <parameter type-id='type-id-5'/>\r
       <return type-id='type-id-184'/>\r
     </function-decl>\r
       <return type-id='type-id-5'/>\r
     </function-decl>\r
     <function-decl name='PyWideStringList_Insert' mangled-name='PyWideStringList_Insert' filepath='Python/initconfig.c' line='732' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='PyWideStringList_Insert'>\r
-      <parameter type-id='type-id-1740' name='list' filepath='Python/initconfig.c' line='732' column='1'/>\r
+      <parameter type-id='type-id-1734' name='list' filepath='Python/initconfig.c' line='732' column='1'/>\r
       <parameter type-id='type-id-7' name='index' filepath='Python/initconfig.c' line='733' column='1'/>\r
       <parameter type-id='type-id-18' name='item' filepath='Python/initconfig.c' line='733' column='1'/>\r
       <return type-id='type-id-66'/>\r
     </function-decl>\r
     <function-decl name='PyWideStringList_Append' mangled-name='PyWideStringList_Append' filepath='Python/initconfig.c' line='773' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='PyWideStringList_Append'>\r
-      <parameter type-id='type-id-1740' name='list' filepath='Python/initconfig.c' line='773' column='1'/>\r
+      <parameter type-id='type-id-1734' name='list' filepath='Python/initconfig.c' line='773' column='1'/>\r
       <parameter type-id='type-id-18' name='item' filepath='Python/initconfig.c' line='773' column='1'/>\r
       <return type-id='type-id-66'/>\r
     </function-decl>\r
     <function-decl name='Py_GetArgcArgv' mangled-name='Py_GetArgcArgv' filepath='Python/initconfig.c' line='870' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='Py_GetArgcArgv'>\r
       <parameter type-id='type-id-177' name='argc' filepath='Python/initconfig.c' line='870' column='1'/>\r
-      <parameter type-id='type-id-1751' name='argv' filepath='Python/initconfig.c' line='870' column='1'/>\r
+      <parameter type-id='type-id-1745' name='argv' filepath='Python/initconfig.c' line='870' column='1'/>\r
       <return type-id='type-id-3'/>\r
     </function-decl>\r
     <function-decl name='_PyConfig_InitCompatConfig' mangled-name='_PyConfig_InitCompatConfig' filepath='Python/initconfig.c' line='1003' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='_PyConfig_InitCompatConfig'>\r
     <function-decl name='PyConfig_SetArgv' mangled-name='PyConfig_SetArgv' filepath='Python/initconfig.c' line='3431' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='PyConfig_SetArgv'>\r
       <parameter type-id='type-id-65' name='config' filepath='Python/initconfig.c' line='3431' column='1'/>\r
       <parameter type-id='type-id-7' name='argc' filepath='Python/initconfig.c' line='3431' column='1'/>\r
-      <parameter type-id='type-id-1734' name='argv' filepath='Python/initconfig.c' line='3431' column='1'/>\r
+      <parameter type-id='type-id-1728' name='argv' filepath='Python/initconfig.c' line='3431' column='1'/>\r
       <return type-id='type-id-66'/>\r
     </function-decl>\r
     <function-decl name='PyConfig_SetWideStringList' mangled-name='PyConfig_SetWideStringList' filepath='Python/initconfig.c' line='3443' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='PyConfig_SetWideStringList'>\r
       <parameter type-id='type-id-65' name='config' filepath='Python/initconfig.c' line='3443' column='1'/>\r
-      <parameter type-id='type-id-1740' name='list' filepath='Python/initconfig.c' line='3443' column='1'/>\r
+      <parameter type-id='type-id-1734' name='list' filepath='Python/initconfig.c' line='3443' column='1'/>\r
       <parameter type-id='type-id-7' name='length' filepath='Python/initconfig.c' line='3444' column='1'/>\r
       <parameter type-id='type-id-244' name='items' filepath='Python/initconfig.c' line='3444' column='1'/>\r
       <return type-id='type-id-66'/>\r
       <return type-id='type-id-6'/>\r
     </function-decl>\r
     <function-decl name='PyInitConfig_Create' mangled-name='PyInitConfig_Create' filepath='Python/initconfig.c' line='3709' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='PyInitConfig_Create'>\r
-      <return type-id='type-id-1738'/>\r
+      <return type-id='type-id-1732'/>\r
     </function-decl>\r
     <function-decl name='PyInitConfig_Free' mangled-name='PyInitConfig_Free' filepath='Python/initconfig.c' line='3723' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='PyInitConfig_Free'>\r
-      <parameter type-id='type-id-1738' name='config' filepath='Python/initconfig.c' line='3723' column='1'/>\r
+      <parameter type-id='type-id-1732' name='config' filepath='Python/initconfig.c' line='3723' column='1'/>\r
       <return type-id='type-id-3'/>\r
     </function-decl>\r
     <function-decl name='PyInitConfig_GetError' mangled-name='PyInitConfig_GetError' filepath='Python/initconfig.c' line='3734' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='PyInitConfig_GetError'>\r
-      <parameter type-id='type-id-1738' name='config' filepath='Python/initconfig.c' line='3734' column='1'/>\r
+      <parameter type-id='type-id-1732' name='config' filepath='Python/initconfig.c' line='3734' column='1'/>\r
       <parameter type-id='type-id-266' name='perr_msg' filepath='Python/initconfig.c' line='3734' column='1'/>\r
       <return type-id='type-id-5'/>\r
     </function-decl>\r
     <function-decl name='PyInitConfig_GetExitCode' mangled-name='PyInitConfig_GetExitCode' filepath='Python/initconfig.c' line='3765' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='PyInitConfig_GetExitCode'>\r
-      <parameter type-id='type-id-1738' name='config' filepath='Python/initconfig.c' line='3765' column='1'/>\r
+      <parameter type-id='type-id-1732' name='config' filepath='Python/initconfig.c' line='3765' column='1'/>\r
       <parameter type-id='type-id-177' name='exitcode' filepath='Python/initconfig.c' line='3765' column='1'/>\r
       <return type-id='type-id-5'/>\r
     </function-decl>\r
     <function-decl name='PyInitConfig_HasOption' mangled-name='PyInitConfig_HasOption' filepath='Python/initconfig.c' line='3797' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='PyInitConfig_HasOption'>\r
-      <parameter type-id='type-id-1738' name='config' filepath='Python/initconfig.c' line='3797' column='1'/>\r
+      <parameter type-id='type-id-1732' name='config' filepath='Python/initconfig.c' line='3797' column='1'/>\r
       <parameter type-id='type-id-4' name='name' filepath='Python/initconfig.c' line='3797' column='1'/>\r
       <return type-id='type-id-5'/>\r
     </function-decl>\r
     <function-decl name='PyInitConfig_GetInt' mangled-name='PyInitConfig_GetInt' filepath='Python/initconfig.c' line='3828' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='PyInitConfig_GetInt'>\r
-      <parameter type-id='type-id-1738' name='config' filepath='Python/initconfig.c' line='3828' column='1'/>\r
+      <parameter type-id='type-id-1732' name='config' filepath='Python/initconfig.c' line='3828' column='1'/>\r
       <parameter type-id='type-id-4' name='name' filepath='Python/initconfig.c' line='3828' column='1'/>\r
       <parameter type-id='type-id-458' name='value' filepath='Python/initconfig.c' line='3828' column='1'/>\r
       <return type-id='type-id-5'/>\r
     </function-decl>\r
     <function-decl name='PyInitConfig_GetStr' mangled-name='PyInitConfig_GetStr' filepath='Python/initconfig.c' line='3898' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='PyInitConfig_GetStr'>\r
-      <parameter type-id='type-id-1738' name='config' filepath='Python/initconfig.c' line='3898' column='1'/>\r
+      <parameter type-id='type-id-1732' name='config' filepath='Python/initconfig.c' line='3898' column='1'/>\r
       <parameter type-id='type-id-4' name='name' filepath='Python/initconfig.c' line='3898' column='1'/>\r
       <parameter type-id='type-id-251' name='value' filepath='Python/initconfig.c' line='3898' column='1'/>\r
       <return type-id='type-id-5'/>\r
     </function-decl>\r
     <function-decl name='PyInitConfig_GetStrList' mangled-name='PyInitConfig_GetStrList' filepath='Python/initconfig.c' line='3928' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='PyInitConfig_GetStrList'>\r
-      <parameter type-id='type-id-1738' name='config' filepath='Python/initconfig.c' line='3928' column='1'/>\r
+      <parameter type-id='type-id-1732' name='config' filepath='Python/initconfig.c' line='3928' column='1'/>\r
       <parameter type-id='type-id-4' name='name' filepath='Python/initconfig.c' line='3928' column='1'/>\r
       <parameter type-id='type-id-62' name='length' filepath='Python/initconfig.c' line='3928' column='1'/>\r
-      <parameter type-id='type-id-1742' name='items' filepath='Python/initconfig.c' line='3928' column='1'/>\r
+      <parameter type-id='type-id-1736' name='items' filepath='Python/initconfig.c' line='3928' column='1'/>\r
       <return type-id='type-id-5'/>\r
     </function-decl>\r
     <function-decl name='PyInitConfig_FreeStrList' mangled-name='PyInitConfig_FreeStrList' filepath='Python/initconfig.c' line='3962' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='PyInitConfig_FreeStrList'>\r
       <return type-id='type-id-3'/>\r
     </function-decl>\r
     <function-decl name='PyInitConfig_SetInt' mangled-name='PyInitConfig_SetInt' filepath='Python/initconfig.c' line='3972' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='PyInitConfig_SetInt'>\r
-      <parameter type-id='type-id-1738' name='config' filepath='Python/initconfig.c' line='3972' column='1'/>\r
+      <parameter type-id='type-id-1732' name='config' filepath='Python/initconfig.c' line='3972' column='1'/>\r
       <parameter type-id='type-id-4' name='name' filepath='Python/initconfig.c' line='3972' column='1'/>\r
       <parameter type-id='type-id-409' name='value' filepath='Python/initconfig.c' line='3972' column='1'/>\r
       <return type-id='type-id-5'/>\r
     </function-decl>\r
     <function-decl name='PyInitConfig_SetStr' mangled-name='PyInitConfig_SetStr' filepath='Python/initconfig.c' line='4068' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='PyInitConfig_SetStr'>\r
-      <parameter type-id='type-id-1738' name='config' filepath='Python/initconfig.c' line='4068' column='1'/>\r
+      <parameter type-id='type-id-1732' name='config' filepath='Python/initconfig.c' line='4068' column='1'/>\r
       <parameter type-id='type-id-4' name='name' filepath='Python/initconfig.c' line='4068' column='1'/>\r
       <parameter type-id='type-id-4' name='value' filepath='Python/initconfig.c' line='4068' column='1'/>\r
       <return type-id='type-id-5'/>\r
     </function-decl>\r
     <function-decl name='PyInitConfig_SetStrList' mangled-name='PyInitConfig_SetStrList' filepath='Python/initconfig.c' line='4125' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='PyInitConfig_SetStrList'>\r
-      <parameter type-id='type-id-1738' name='config' filepath='Python/initconfig.c' line='4125' column='1'/>\r
+      <parameter type-id='type-id-1732' name='config' filepath='Python/initconfig.c' line='4125' column='1'/>\r
       <parameter type-id='type-id-4' name='name' filepath='Python/initconfig.c' line='4125' column='1'/>\r
       <parameter type-id='type-id-21' name='length' filepath='Python/initconfig.c' line='4126' column='1'/>\r
       <parameter type-id='type-id-129' name='items' filepath='Python/initconfig.c' line='4126' column='1'/>\r
       <return type-id='type-id-5'/>\r
     </function-decl>\r
     <function-decl name='PyInitConfig_AddModule' mangled-name='PyInitConfig_AddModule' filepath='Python/initconfig.c' line='4151' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='PyInitConfig_AddModule'>\r
-      <parameter type-id='type-id-1738' name='config' filepath='Python/initconfig.c' line='4151' column='1'/>\r
+      <parameter type-id='type-id-1732' name='config' filepath='Python/initconfig.c' line='4151' column='1'/>\r
       <parameter type-id='type-id-4' name='name' filepath='Python/initconfig.c' line='4151' column='1'/>\r
       <parameter type-id='type-id-466' name='initfunc' filepath='Python/initconfig.c' line='4152' column='1'/>\r
       <return type-id='type-id-5'/>\r
     </function-decl>\r
     <function-decl name='Py_InitializeFromInitConfig' mangled-name='Py_InitializeFromInitConfig' filepath='Python/initconfig.c' line='4177' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='Py_InitializeFromInitConfig'>\r
-      <parameter type-id='type-id-1738' name='config' filepath='Python/initconfig.c' line='4177' column='1'/>\r
+      <parameter type-id='type-id-1732' name='config' filepath='Python/initconfig.c' line='4177' column='1'/>\r
       <return type-id='type-id-5'/>\r
     </function-decl>\r
     <function-decl name='PyConfig_Get' mangled-name='PyConfig_Get' filepath='Python/initconfig.c' line='4412' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='PyConfig_Get'>\r
     <var-decl name='_PyInstructionSequence_Type' type-id='type-id-271' visibility='default' filepath='./Include/internal/pycore_instruction_sequence.h' line='77' column='1'/>\r
   </abi-instr>\r
   <abi-instr address-size='64' path='Python/instrumentation.c' comp-dir-path='/home/runner/work/cpython/cpython' language='LANG_C11'>\r
-    <class-decl name='_PyMonitoringState' size-in-bits='16' is-struct='yes' visibility='default' filepath='./Include/cpython/monitoring.h' line='39' column='1' id='type-id-1752'>\r
+    <class-decl name='_PyMonitoringState' size-in-bits='16' is-struct='yes' visibility='default' filepath='./Include/cpython/monitoring.h' line='39' column='1' id='type-id-1746'>\r
       <data-member access='public' layout-offset-in-bits='0'>\r
         <var-decl name='active' type-id='type-id-309' visibility='default' filepath='./Include/cpython/monitoring.h' line='40' column='1'/>\r
       </data-member>\r
         <var-decl name='opaque' type-id='type-id-309' visibility='default' filepath='./Include/cpython/monitoring.h' line='41' column='1'/>\r
       </data-member>\r
     </class-decl>\r
-    <typedef-decl name='PyMonitoringState' type-id='type-id-1752' filepath='./Include/cpython/monitoring.h' line='42' column='1' id='type-id-1753'/>\r
-    <pointer-type-def type-id='type-id-1753' size-in-bits='64' id='type-id-1754'/>\r
+    <typedef-decl name='PyMonitoringState' type-id='type-id-1746' filepath='./Include/cpython/monitoring.h' line='42' column='1' id='type-id-1747'/>\r
+    <pointer-type-def type-id='type-id-1747' size-in-bits='64' id='type-id-1748'/>\r
     <var-decl name='_PyInstrumentation_MISSING' type-id='type-id-390' visibility='default' filepath='./Include/internal/pycore_instruments.h' line='68' column='1'/>\r
     <var-decl name='_PyInstrumentation_DISABLE' type-id='type-id-390' visibility='default' filepath='./Include/internal/pycore_instruments.h' line='69' column='1'/>\r
     <function-decl name='PyMonitoring_EnterScope' mangled-name='PyMonitoring_EnterScope' filepath='Python/instrumentation.c' line='2643' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='PyMonitoring_EnterScope'>\r
-      <parameter type-id='type-id-1754' name='state_array' filepath='Python/instrumentation.c' line='2643' column='1'/>\r
+      <parameter type-id='type-id-1748' name='state_array' filepath='Python/instrumentation.c' line='2643' column='1'/>\r
       <parameter type-id='type-id-460' name='version' filepath='Python/instrumentation.c' line='2643' column='1'/>\r
       <parameter type-id='type-id-326' name='event_types' filepath='Python/instrumentation.c' line='2644' column='1'/>\r
       <parameter type-id='type-id-7' name='length' filepath='Python/instrumentation.c' line='2644' column='1'/>\r
       <return type-id='type-id-5'/>\r
     </function-decl>\r
     <function-decl name='_PyMonitoring_FirePyStartEvent' mangled-name='_PyMonitoring_FirePyStartEvent' filepath='Python/instrumentation.c' line='2667' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='_PyMonitoring_FirePyStartEvent'>\r
-      <parameter type-id='type-id-1754' name='state' filepath='Python/instrumentation.c' line='2667' column='1'/>\r
+      <parameter type-id='type-id-1748' name='state' filepath='Python/instrumentation.c' line='2667' column='1'/>\r
       <parameter type-id='type-id-6' name='codelike' filepath='Python/instrumentation.c' line='2667' column='1'/>\r
       <parameter type-id='type-id-456' name='offset' filepath='Python/instrumentation.c' line='2667' column='1'/>\r
       <return type-id='type-id-5'/>\r
     </function-decl>\r
     <function-decl name='_PyMonitoring_FirePyResumeEvent' mangled-name='_PyMonitoring_FirePyResumeEvent' filepath='Python/instrumentation.c' line='2676' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='_PyMonitoring_FirePyResumeEvent'>\r
-      <parameter type-id='type-id-1754' name='state' filepath='Python/instrumentation.c' line='2676' column='1'/>\r
+      <parameter type-id='type-id-1748' name='state' filepath='Python/instrumentation.c' line='2676' column='1'/>\r
       <parameter type-id='type-id-6' name='codelike' filepath='Python/instrumentation.c' line='2676' column='1'/>\r
       <parameter type-id='type-id-456' name='offset' filepath='Python/instrumentation.c' line='2676' column='1'/>\r
       <return type-id='type-id-5'/>\r
     </function-decl>\r
     <function-decl name='_PyMonitoring_FirePyReturnEvent' mangled-name='_PyMonitoring_FirePyReturnEvent' filepath='Python/instrumentation.c' line='2687' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='_PyMonitoring_FirePyReturnEvent'>\r
-      <parameter type-id='type-id-1754' name='state' filepath='Python/instrumentation.c' line='2687' column='1'/>\r
+      <parameter type-id='type-id-1748' name='state' filepath='Python/instrumentation.c' line='2687' column='1'/>\r
       <parameter type-id='type-id-6' name='codelike' filepath='Python/instrumentation.c' line='2687' column='1'/>\r
       <parameter type-id='type-id-456' name='offset' filepath='Python/instrumentation.c' line='2687' column='1'/>\r
       <parameter type-id='type-id-6' name='retval' filepath='Python/instrumentation.c' line='2688' column='1'/>\r
       <return type-id='type-id-5'/>\r
     </function-decl>\r
     <function-decl name='_PyMonitoring_FirePyYieldEvent' mangled-name='_PyMonitoring_FirePyYieldEvent' filepath='Python/instrumentation.c' line='2697' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='_PyMonitoring_FirePyYieldEvent'>\r
-      <parameter type-id='type-id-1754' name='state' filepath='Python/instrumentation.c' line='2697' column='1'/>\r
+      <parameter type-id='type-id-1748' name='state' filepath='Python/instrumentation.c' line='2697' column='1'/>\r
       <parameter type-id='type-id-6' name='codelike' filepath='Python/instrumentation.c' line='2697' column='1'/>\r
       <parameter type-id='type-id-456' name='offset' filepath='Python/instrumentation.c' line='2697' column='1'/>\r
       <parameter type-id='type-id-6' name='retval' filepath='Python/instrumentation.c' line='2698' column='1'/>\r
       <return type-id='type-id-5'/>\r
     </function-decl>\r
     <function-decl name='_PyMonitoring_FireCallEvent' mangled-name='_PyMonitoring_FireCallEvent' filepath='Python/instrumentation.c' line='2707' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='_PyMonitoring_FireCallEvent'>\r
-      <parameter type-id='type-id-1754' name='state' filepath='Python/instrumentation.c' line='2707' column='1'/>\r
+      <parameter type-id='type-id-1748' name='state' filepath='Python/instrumentation.c' line='2707' column='1'/>\r
       <parameter type-id='type-id-6' name='codelike' filepath='Python/instrumentation.c' line='2707' column='1'/>\r
       <parameter type-id='type-id-456' name='offset' filepath='Python/instrumentation.c' line='2707' column='1'/>\r
       <parameter type-id='type-id-6' name='callable' filepath='Python/instrumentation.c' line='2708' column='1'/>\r
       <return type-id='type-id-5'/>\r
     </function-decl>\r
     <function-decl name='_PyMonitoring_FireLineEvent' mangled-name='_PyMonitoring_FireLineEvent' filepath='Python/instrumentation.c' line='2717' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='_PyMonitoring_FireLineEvent'>\r
-      <parameter type-id='type-id-1754' name='state' filepath='Python/instrumentation.c' line='2717' column='1'/>\r
+      <parameter type-id='type-id-1748' name='state' filepath='Python/instrumentation.c' line='2717' column='1'/>\r
       <parameter type-id='type-id-6' name='codelike' filepath='Python/instrumentation.c' line='2717' column='1'/>\r
       <parameter type-id='type-id-456' name='offset' filepath='Python/instrumentation.c' line='2717' column='1'/>\r
       <parameter type-id='type-id-5' name='lineno' filepath='Python/instrumentation.c' line='2718' column='1'/>\r
       <return type-id='type-id-5'/>\r
     </function-decl>\r
     <function-decl name='_PyMonitoring_FireJumpEvent' mangled-name='_PyMonitoring_FireJumpEvent' filepath='Python/instrumentation.c' line='2733' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='_PyMonitoring_FireJumpEvent'>\r
-      <parameter type-id='type-id-1754' name='state' filepath='Python/instrumentation.c' line='2733' column='1'/>\r
+      <parameter type-id='type-id-1748' name='state' filepath='Python/instrumentation.c' line='2733' column='1'/>\r
       <parameter type-id='type-id-6' name='codelike' filepath='Python/instrumentation.c' line='2733' column='1'/>\r
       <parameter type-id='type-id-456' name='offset' filepath='Python/instrumentation.c' line='2733' column='1'/>\r
       <parameter type-id='type-id-6' name='target_offset' filepath='Python/instrumentation.c' line='2734' column='1'/>\r
       <return type-id='type-id-5'/>\r
     </function-decl>\r
     <function-decl name='_PyMonitoring_FireBranchEvent' mangled-name='_PyMonitoring_FireBranchEvent' filepath='Python/instrumentation.c' line='2743' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='_PyMonitoring_FireBranchEvent'>\r
-      <parameter type-id='type-id-1754' name='state' filepath='Python/instrumentation.c' line='2743' column='1'/>\r
+      <parameter type-id='type-id-1748' name='state' filepath='Python/instrumentation.c' line='2743' column='1'/>\r
       <parameter type-id='type-id-6' name='codelike' filepath='Python/instrumentation.c' line='2743' column='1'/>\r
       <parameter type-id='type-id-456' name='offset' filepath='Python/instrumentation.c' line='2743' column='1'/>\r
       <parameter type-id='type-id-6' name='target_offset' filepath='Python/instrumentation.c' line='2744' column='1'/>\r
       <return type-id='type-id-5'/>\r
     </function-decl>\r
     <function-decl name='_PyMonitoring_FireBranchRightEvent' mangled-name='_PyMonitoring_FireBranchRightEvent' filepath='Python/instrumentation.c' line='2753' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='_PyMonitoring_FireBranchRightEvent'>\r
-      <parameter type-id='type-id-1754' name='state' filepath='Python/instrumentation.c' line='2753' column='1'/>\r
+      <parameter type-id='type-id-1748' name='state' filepath='Python/instrumentation.c' line='2753' column='1'/>\r
       <parameter type-id='type-id-6' name='codelike' filepath='Python/instrumentation.c' line='2753' column='1'/>\r
       <parameter type-id='type-id-456' name='offset' filepath='Python/instrumentation.c' line='2753' column='1'/>\r
       <parameter type-id='type-id-6' name='target_offset' filepath='Python/instrumentation.c' line='2754' column='1'/>\r
       <return type-id='type-id-5'/>\r
     </function-decl>\r
     <function-decl name='_PyMonitoring_FireBranchLeftEvent' mangled-name='_PyMonitoring_FireBranchLeftEvent' filepath='Python/instrumentation.c' line='2763' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='_PyMonitoring_FireBranchLeftEvent'>\r
-      <parameter type-id='type-id-1754' name='state' filepath='Python/instrumentation.c' line='2763' column='1'/>\r
+      <parameter type-id='type-id-1748' name='state' filepath='Python/instrumentation.c' line='2763' column='1'/>\r
       <parameter type-id='type-id-6' name='codelike' filepath='Python/instrumentation.c' line='2763' column='1'/>\r
       <parameter type-id='type-id-456' name='offset' filepath='Python/instrumentation.c' line='2763' column='1'/>\r
       <parameter type-id='type-id-6' name='target_offset' filepath='Python/instrumentation.c' line='2764' column='1'/>\r
       <return type-id='type-id-5'/>\r
     </function-decl>\r
     <function-decl name='_PyMonitoring_FireCReturnEvent' mangled-name='_PyMonitoring_FireCReturnEvent' filepath='Python/instrumentation.c' line='2773' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='_PyMonitoring_FireCReturnEvent'>\r
-      <parameter type-id='type-id-1754' name='state' filepath='Python/instrumentation.c' line='2773' column='1'/>\r
+      <parameter type-id='type-id-1748' name='state' filepath='Python/instrumentation.c' line='2773' column='1'/>\r
       <parameter type-id='type-id-6' name='codelike' filepath='Python/instrumentation.c' line='2773' column='1'/>\r
       <parameter type-id='type-id-456' name='offset' filepath='Python/instrumentation.c' line='2773' column='1'/>\r
       <parameter type-id='type-id-6' name='retval' filepath='Python/instrumentation.c' line='2774' column='1'/>\r
       <return type-id='type-id-5'/>\r
     </function-decl>\r
     <function-decl name='_PyMonitoring_FirePyThrowEvent' mangled-name='_PyMonitoring_FirePyThrowEvent' filepath='Python/instrumentation.c' line='2808' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='_PyMonitoring_FirePyThrowEvent'>\r
-      <parameter type-id='type-id-1754' name='state' filepath='Python/instrumentation.c' line='2808' column='1'/>\r
+      <parameter type-id='type-id-1748' name='state' filepath='Python/instrumentation.c' line='2808' column='1'/>\r
       <parameter type-id='type-id-6' name='codelike' filepath='Python/instrumentation.c' line='2808' column='1'/>\r
       <parameter type-id='type-id-456' name='offset' filepath='Python/instrumentation.c' line='2808' column='1'/>\r
       <return type-id='type-id-5'/>\r
     </function-decl>\r
     <function-decl name='_PyMonitoring_FireRaiseEvent' mangled-name='_PyMonitoring_FireRaiseEvent' filepath='Python/instrumentation.c' line='2822' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='_PyMonitoring_FireRaiseEvent'>\r
-      <parameter type-id='type-id-1754' name='state' filepath='Python/instrumentation.c' line='2822' column='1'/>\r
+      <parameter type-id='type-id-1748' name='state' filepath='Python/instrumentation.c' line='2822' column='1'/>\r
       <parameter type-id='type-id-6' name='codelike' filepath='Python/instrumentation.c' line='2822' column='1'/>\r
       <parameter type-id='type-id-456' name='offset' filepath='Python/instrumentation.c' line='2822' column='1'/>\r
       <return type-id='type-id-5'/>\r
     </function-decl>\r
     <function-decl name='_PyMonitoring_FireCRaiseEvent' mangled-name='_PyMonitoring_FireCRaiseEvent' filepath='Python/instrumentation.c' line='2836' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='_PyMonitoring_FireCRaiseEvent'>\r
-      <parameter type-id='type-id-1754' name='state' filepath='Python/instrumentation.c' line='2836' column='1'/>\r
+      <parameter type-id='type-id-1748' name='state' filepath='Python/instrumentation.c' line='2836' column='1'/>\r
       <parameter type-id='type-id-6' name='codelike' filepath='Python/instrumentation.c' line='2836' column='1'/>\r
       <parameter type-id='type-id-456' name='offset' filepath='Python/instrumentation.c' line='2836' column='1'/>\r
       <return type-id='type-id-5'/>\r
     </function-decl>\r
     <function-decl name='_PyMonitoring_FireReraiseEvent' mangled-name='_PyMonitoring_FireReraiseEvent' filepath='Python/instrumentation.c' line='2850' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='_PyMonitoring_FireReraiseEvent'>\r
-      <parameter type-id='type-id-1754' name='state' filepath='Python/instrumentation.c' line='2850' column='1'/>\r
+      <parameter type-id='type-id-1748' name='state' filepath='Python/instrumentation.c' line='2850' column='1'/>\r
       <parameter type-id='type-id-6' name='codelike' filepath='Python/instrumentation.c' line='2850' column='1'/>\r
       <parameter type-id='type-id-456' name='offset' filepath='Python/instrumentation.c' line='2850' column='1'/>\r
       <return type-id='type-id-5'/>\r
     </function-decl>\r
     <function-decl name='_PyMonitoring_FireExceptionHandledEvent' mangled-name='_PyMonitoring_FireExceptionHandledEvent' filepath='Python/instrumentation.c' line='2864' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='_PyMonitoring_FireExceptionHandledEvent'>\r
-      <parameter type-id='type-id-1754' name='state' filepath='Python/instrumentation.c' line='2864' column='1'/>\r
+      <parameter type-id='type-id-1748' name='state' filepath='Python/instrumentation.c' line='2864' column='1'/>\r
       <parameter type-id='type-id-6' name='codelike' filepath='Python/instrumentation.c' line='2864' column='1'/>\r
       <parameter type-id='type-id-456' name='offset' filepath='Python/instrumentation.c' line='2864' column='1'/>\r
       <return type-id='type-id-5'/>\r
     </function-decl>\r
     <function-decl name='_PyMonitoring_FirePyUnwindEvent' mangled-name='_PyMonitoring_FirePyUnwindEvent' filepath='Python/instrumentation.c' line='2878' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='_PyMonitoring_FirePyUnwindEvent'>\r
-      <parameter type-id='type-id-1754' name='state' filepath='Python/instrumentation.c' line='2878' column='1'/>\r
+      <parameter type-id='type-id-1748' name='state' filepath='Python/instrumentation.c' line='2878' column='1'/>\r
       <parameter type-id='type-id-6' name='codelike' filepath='Python/instrumentation.c' line='2878' column='1'/>\r
       <parameter type-id='type-id-456' name='offset' filepath='Python/instrumentation.c' line='2878' column='1'/>\r
       <return type-id='type-id-5'/>\r
     </function-decl>\r
     <function-decl name='_PyMonitoring_FireStopIterationEvent' mangled-name='_PyMonitoring_FireStopIterationEvent' filepath='Python/instrumentation.c' line='2892' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='_PyMonitoring_FireStopIterationEvent'>\r
-      <parameter type-id='type-id-1754' name='state' filepath='Python/instrumentation.c' line='2892' column='1'/>\r
+      <parameter type-id='type-id-1748' name='state' filepath='Python/instrumentation.c' line='2892' column='1'/>\r
       <parameter type-id='type-id-6' name='codelike' filepath='Python/instrumentation.c' line='2892' column='1'/>\r
       <parameter type-id='type-id-456' name='offset' filepath='Python/instrumentation.c' line='2892' column='1'/>\r
       <parameter type-id='type-id-6' name='value' filepath='Python/instrumentation.c' line='2892' column='1'/>\r
   </abi-instr>\r
   <abi-instr address-size='64' path='Python/interpconfig.c' comp-dir-path='/home/runner/work/cpython/cpython' language='LANG_C11'>\r
     <function-decl name='_PyInterpreterConfig_AsDict' mangled-name='_PyInterpreterConfig_AsDict' filepath='Python/interpconfig.c' line='55' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='_PyInterpreterConfig_AsDict'>\r
-      <parameter type-id='type-id-1685' name='config' filepath='Python/interpconfig.c' line='55' column='1'/>\r
+      <parameter type-id='type-id-1680' name='config' filepath='Python/interpconfig.c' line='55' column='1'/>\r
       <return type-id='type-id-6'/>\r
     </function-decl>\r
     <function-decl name='_PyInterpreterConfig_InitFromDict' mangled-name='_PyInterpreterConfig_InitFromDict' filepath='Python/interpconfig.c' line='224' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='_PyInterpreterConfig_InitFromDict'>\r
-      <parameter type-id='type-id-1685' name='config' filepath='Python/interpconfig.c' line='224' column='1'/>\r
+      <parameter type-id='type-id-1680' name='config' filepath='Python/interpconfig.c' line='224' column='1'/>\r
       <parameter type-id='type-id-6' name='dict' filepath='Python/interpconfig.c' line='224' column='1'/>\r
       <return type-id='type-id-5'/>\r
     </function-decl>\r
     <function-decl name='_PyInterpreterConfig_UpdateFromDict' mangled-name='_PyInterpreterConfig_UpdateFromDict' filepath='Python/interpconfig.c' line='237' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='_PyInterpreterConfig_UpdateFromDict'>\r
-      <parameter type-id='type-id-1685' name='config' filepath='Python/interpconfig.c' line='237' column='1'/>\r
+      <parameter type-id='type-id-1680' name='config' filepath='Python/interpconfig.c' line='237' column='1'/>\r
       <parameter type-id='type-id-6' name='dict' filepath='Python/interpconfig.c' line='237' column='1'/>\r
       <return type-id='type-id-5'/>\r
     </function-decl>\r
     <function-decl name='_PyInterpreterConfig_InitFromState' mangled-name='_PyInterpreterConfig_InitFromState' filepath='Python/interpconfig.c' line='250' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='_PyInterpreterConfig_InitFromState'>\r
-      <parameter type-id='type-id-1685' name='config' filepath='Python/interpconfig.c' line='250' column='1'/>\r
+      <parameter type-id='type-id-1680' name='config' filepath='Python/interpconfig.c' line='250' column='1'/>\r
       <parameter type-id='type-id-33' name='interp' filepath='Python/interpconfig.c' line='251' column='1'/>\r
       <return type-id='type-id-5'/>\r
     </function-decl>\r
   </abi-instr>\r
   <abi-instr address-size='64' path='Python/intrinsics.c' comp-dir-path='/home/runner/work/cpython/cpython' language='LANG_C11'>\r
-    <array-type-def dimensions='1' type-id='type-id-1755' size-in-bits='1536' id='type-id-1756'>\r
+    <array-type-def dimensions='1' type-id='type-id-1749' size-in-bits='1536' id='type-id-1750'>\r
       <subrange length='12' type-id='type-id-2' id='type-id-913'/>\r
     </array-type-def>\r
-    <array-type-def dimensions='1' type-id='type-id-1755' size-in-bits='infinite' id='type-id-1757'>\r
+    <array-type-def dimensions='1' type-id='type-id-1749' size-in-bits='infinite' id='type-id-1751'>\r
       <subrange length='infinite' id='type-id-230'/>\r
     </array-type-def>\r
-    <array-type-def dimensions='1' type-id='type-id-1758' size-in-bits='768' id='type-id-1759'>\r
+    <array-type-def dimensions='1' type-id='type-id-1752' size-in-bits='768' id='type-id-1753'>\r
       <subrange length='6' type-id='type-id-2' id='type-id-477'/>\r
     </array-type-def>\r
-    <array-type-def dimensions='1' type-id='type-id-1758' size-in-bits='infinite' id='type-id-1760'>\r
+    <array-type-def dimensions='1' type-id='type-id-1752' size-in-bits='infinite' id='type-id-1754'>\r
       <subrange length='infinite' id='type-id-230'/>\r
     </array-type-def>\r
-    <typedef-decl name='intrinsic_func1' type-id='type-id-1761' filepath='./Include/internal/pycore_intrinsics.h' line='35' column='1' id='type-id-1762'/>\r
-    <typedef-decl name='intrinsic_func2' type-id='type-id-1763' filepath='./Include/internal/pycore_intrinsics.h' line='36' column='1' id='type-id-1764'/>\r
-    <class-decl name='intrinsic_func1_info' size-in-bits='128' is-struct='yes' naming-typedef-id='type-id-1765' visibility='default' filepath='./Include/internal/pycore_intrinsics.h' line='38' column='1' id='type-id-1766'>\r
+    <typedef-decl name='intrinsic_func1' type-id='type-id-1755' filepath='./Include/internal/pycore_intrinsics.h' line='35' column='1' id='type-id-1756'/>\r
+    <typedef-decl name='intrinsic_func2' type-id='type-id-1757' filepath='./Include/internal/pycore_intrinsics.h' line='36' column='1' id='type-id-1758'/>\r
+    <class-decl name='intrinsic_func1_info' size-in-bits='128' is-struct='yes' naming-typedef-id='type-id-1759' visibility='default' filepath='./Include/internal/pycore_intrinsics.h' line='38' column='1' id='type-id-1760'>\r
       <data-member access='public' layout-offset-in-bits='0'>\r
-        <var-decl name='func' type-id='type-id-1762' visibility='default' filepath='./Include/internal/pycore_intrinsics.h' line='39' column='1'/>\r
+        <var-decl name='func' type-id='type-id-1756' visibility='default' filepath='./Include/internal/pycore_intrinsics.h' line='39' column='1'/>\r
       </data-member>\r
       <data-member access='public' layout-offset-in-bits='64'>\r
         <var-decl name='name' type-id='type-id-4' visibility='default' filepath='./Include/internal/pycore_intrinsics.h' line='40' column='1'/>\r
       </data-member>\r
     </class-decl>\r
-    <typedef-decl name='intrinsic_func1_info' type-id='type-id-1766' filepath='./Include/internal/pycore_intrinsics.h' line='41' column='1' id='type-id-1765'/>\r
-    <class-decl name='intrinsic_func2_info' size-in-bits='128' is-struct='yes' naming-typedef-id='type-id-1767' visibility='default' filepath='./Include/internal/pycore_intrinsics.h' line='43' column='1' id='type-id-1768'>\r
+    <typedef-decl name='intrinsic_func1_info' type-id='type-id-1760' filepath='./Include/internal/pycore_intrinsics.h' line='41' column='1' id='type-id-1759'/>\r
+    <class-decl name='intrinsic_func2_info' size-in-bits='128' is-struct='yes' naming-typedef-id='type-id-1761' visibility='default' filepath='./Include/internal/pycore_intrinsics.h' line='43' column='1' id='type-id-1762'>\r
       <data-member access='public' layout-offset-in-bits='0'>\r
-        <var-decl name='func' type-id='type-id-1764' visibility='default' filepath='./Include/internal/pycore_intrinsics.h' line='44' column='1'/>\r
+        <var-decl name='func' type-id='type-id-1758' visibility='default' filepath='./Include/internal/pycore_intrinsics.h' line='44' column='1'/>\r
       </data-member>\r
       <data-member access='public' layout-offset-in-bits='64'>\r
         <var-decl name='name' type-id='type-id-4' visibility='default' filepath='./Include/internal/pycore_intrinsics.h' line='45' column='1'/>\r
       </data-member>\r
     </class-decl>\r
-    <typedef-decl name='intrinsic_func2_info' type-id='type-id-1768' filepath='./Include/internal/pycore_intrinsics.h' line='46' column='1' id='type-id-1767'/>\r
-    <pointer-type-def type-id='type-id-1769' size-in-bits='64' id='type-id-1761'/>\r
-    <pointer-type-def type-id='type-id-1770' size-in-bits='64' id='type-id-1763'/>\r
-    <qualified-type-def type-id='type-id-1765' const='yes' id='type-id-1755'/>\r
-    <qualified-type-def type-id='type-id-1767' const='yes' id='type-id-1758'/>\r
+    <typedef-decl name='intrinsic_func2_info' type-id='type-id-1762' filepath='./Include/internal/pycore_intrinsics.h' line='46' column='1' id='type-id-1761'/>\r
+    <pointer-type-def type-id='type-id-1763' size-in-bits='64' id='type-id-1755'/>\r
+    <pointer-type-def type-id='type-id-1764' size-in-bits='64' id='type-id-1757'/>\r
+    <qualified-type-def type-id='type-id-1759' const='yes' id='type-id-1749'/>\r
+    <qualified-type-def type-id='type-id-1761' const='yes' id='type-id-1752'/>\r
     <function-decl name='_Py_set_function_type_params' filepath='./Include/internal/pycore_function.h' line='35' column='1' visibility='default' binding='global' size-in-bits='64'>\r
       <parameter type-id='type-id-31'/>\r
       <parameter type-id='type-id-6'/>\r
       <parameter type-id='type-id-6'/>\r
       <return type-id='type-id-6'/>\r
     </function-decl>\r
-    <var-decl name='_PyIntrinsics_UnaryFunctions' type-id='type-id-1757' mangled-name='_PyIntrinsics_UnaryFunctions' visibility='default' filepath='./Include/internal/pycore_intrinsics.h' line='48' column='1' elf-symbol-id='_PyIntrinsics_UnaryFunctions'/>\r
-    <var-decl name='_PyIntrinsics_BinaryFunctions' type-id='type-id-1760' mangled-name='_PyIntrinsics_BinaryFunctions' visibility='default' filepath='./Include/internal/pycore_intrinsics.h' line='49' column='1' elf-symbol-id='_PyIntrinsics_BinaryFunctions'/>\r
+    <var-decl name='_PyIntrinsics_UnaryFunctions' type-id='type-id-1751' mangled-name='_PyIntrinsics_UnaryFunctions' visibility='default' filepath='./Include/internal/pycore_intrinsics.h' line='48' column='1' elf-symbol-id='_PyIntrinsics_UnaryFunctions'/>\r
+    <var-decl name='_PyIntrinsics_BinaryFunctions' type-id='type-id-1754' mangled-name='_PyIntrinsics_BinaryFunctions' visibility='default' filepath='./Include/internal/pycore_intrinsics.h' line='49' column='1' elf-symbol-id='_PyIntrinsics_BinaryFunctions'/>\r
     <function-decl name='_PyExc_PrepReraiseStar' filepath='./Include/internal/pycore_pyerrors.h' line='175' column='1' visibility='default' binding='global' size-in-bits='64'>\r
       <parameter type-id='type-id-6'/>\r
       <parameter type-id='type-id-6'/>\r
       <parameter type-id='type-id-5' name='index' filepath='Python/intrinsics.c' line='281' column='1'/>\r
       <return type-id='type-id-6'/>\r
     </function-decl>\r
-    <function-type size-in-bits='64' id='type-id-1769'>\r
+    <function-type size-in-bits='64' id='type-id-1763'>\r
       <parameter type-id='type-id-31'/>\r
       <parameter type-id='type-id-6'/>\r
       <return type-id='type-id-6'/>\r
     </function-type>\r
-    <function-type size-in-bits='64' id='type-id-1770'>\r
+    <function-type size-in-bits='64' id='type-id-1764'>\r
       <parameter type-id='type-id-31'/>\r
       <parameter type-id='type-id-6'/>\r
       <parameter type-id='type-id-6'/>\r
     </function-type>\r
   </abi-instr>\r
   <abi-instr address-size='64' path='Python/legacy_tracing.c' comp-dir-path='/home/runner/work/cpython/cpython' language='LANG_C11'>\r
-    <typedef-decl name='_PyMonitoringEventSet' type-id='type-id-322' filepath='./Include/internal/pycore_instruments.h' line='15' column='1' id='type-id-1771'/>\r
-    <pointer-type-def type-id='type-id-1771' size-in-bits='64' id='type-id-1772'/>\r
+    <typedef-decl name='_PyMonitoringEventSet' type-id='type-id-322' filepath='./Include/internal/pycore_instruments.h' line='15' column='1' id='type-id-1765'/>\r
+    <pointer-type-def type-id='type-id-1765' size-in-bits='64' id='type-id-1766'/>\r
     <function-decl name='_PyMonitoring_RegisterCallback' filepath='./Include/internal/pycore_instruments.h' line='30' column='1' visibility='default' binding='global' size-in-bits='64'>\r
       <parameter type-id='type-id-5'/>\r
       <parameter type-id='type-id-5'/>\r
     </function-decl>\r
     <function-decl name='_PyMonitoring_SetEvents' filepath='./Include/internal/pycore_instruments.h' line='32' column='1' visibility='default' binding='global' size-in-bits='64'>\r
       <parameter type-id='type-id-5'/>\r
-      <parameter type-id='type-id-1771'/>\r
+      <parameter type-id='type-id-1765'/>\r
       <return type-id='type-id-5'/>\r
     </function-decl>\r
     <function-decl name='_PyMonitoring_SetLocalEvents' filepath='./Include/internal/pycore_instruments.h' line='33' column='1' visibility='default' binding='global' size-in-bits='64'>\r
       <parameter type-id='type-id-345'/>\r
       <parameter type-id='type-id-5'/>\r
-      <parameter type-id='type-id-1771'/>\r
+      <parameter type-id='type-id-1765'/>\r
       <return type-id='type-id-5'/>\r
     </function-decl>\r
     <function-decl name='_PyMonitoring_GetLocalEvents' filepath='./Include/internal/pycore_instruments.h' line='34' column='1' visibility='default' binding='global' size-in-bits='64'>\r
       <parameter type-id='type-id-345'/>\r
       <parameter type-id='type-id-5'/>\r
-      <parameter type-id='type-id-1772'/>\r
+      <parameter type-id='type-id-1766'/>\r
       <return type-id='type-id-5'/>\r
     </function-decl>\r
   </abi-instr>\r
   <abi-instr address-size='64' path='Python/lock.c' comp-dir-path='/home/runner/work/cpython/cpython' language='LANG_C11'>\r
-    <array-type-def dimensions='1' type-id='type-id-58' size-in-bits='256' id='type-id-1773'>\r
+    <array-type-def dimensions='1' type-id='type-id-58' size-in-bits='256' id='type-id-1767'>\r
       <subrange length='32' type-id='type-id-2' id='type-id-73'/>\r
     </array-type-def>\r
-    <class-decl name='_PySeqLock' size-in-bits='32' is-struct='yes' naming-typedef-id='type-id-1774' visibility='default' filepath='./Include/internal/pycore_lock.h' line='215' column='1' id='type-id-1775'>\r
+    <class-decl name='_PySeqLock' size-in-bits='32' is-struct='yes' naming-typedef-id='type-id-1768' visibility='default' filepath='./Include/internal/pycore_lock.h' line='215' column='1' id='type-id-1769'>\r
       <data-member access='public' layout-offset-in-bits='0'>\r
         <var-decl name='sequence' type-id='type-id-322' visibility='default' filepath='./Include/internal/pycore_lock.h' line='216' column='1'/>\r
       </data-member>\r
     </class-decl>\r
-    <typedef-decl name='_PySeqLock' type-id='type-id-1775' filepath='./Include/internal/pycore_lock.h' line='217' column='1' id='type-id-1774'/>\r
-    <typedef-decl name='_Py_unpark_fn_t' type-id='type-id-1776' filepath='./Include/internal/pycore_parking_lot.h' line='74' column='1' id='type-id-1777'/>\r
-    <class-decl name='_PySemaphore' size-in-bits='256' is-struct='yes' visibility='default' filepath='./Include/internal/pycore_semaphore.h' line='36' column='1' id='type-id-1778'>\r
+    <typedef-decl name='_PySeqLock' type-id='type-id-1769' filepath='./Include/internal/pycore_lock.h' line='217' column='1' id='type-id-1768'/>\r
+    <typedef-decl name='_Py_unpark_fn_t' type-id='type-id-1770' filepath='./Include/internal/pycore_parking_lot.h' line='74' column='1' id='type-id-1771'/>\r
+    <class-decl name='_PySemaphore' size-in-bits='256' is-struct='yes' visibility='default' filepath='./Include/internal/pycore_semaphore.h' line='36' column='1' id='type-id-1772'>\r
       <data-member access='public' layout-offset-in-bits='0'>\r
-        <var-decl name='platform_sem' type-id='type-id-1779' visibility='default' filepath='./Include/internal/pycore_semaphore.h' line='40' column='1'/>\r
+        <var-decl name='platform_sem' type-id='type-id-1773' visibility='default' filepath='./Include/internal/pycore_semaphore.h' line='40' column='1'/>\r
       </data-member>\r
     </class-decl>\r
-    <typedef-decl name='_PySemaphore' type-id='type-id-1778' filepath='./Include/internal/pycore_semaphore.h' line='46' column='1' id='type-id-1780'/>\r
-    <union-decl name='sem_t' size-in-bits='256' naming-typedef-id='type-id-1779' visibility='default' filepath='/usr/include/x86_64-linux-gnu/bits/semaphore.h' line='35' column='1' id='type-id-1781'>\r
+    <typedef-decl name='_PySemaphore' type-id='type-id-1772' filepath='./Include/internal/pycore_semaphore.h' line='46' column='1' id='type-id-1774'/>\r
+    <union-decl name='sem_t' size-in-bits='256' naming-typedef-id='type-id-1773' visibility='default' filepath='/usr/include/x86_64-linux-gnu/bits/semaphore.h' line='35' column='1' id='type-id-1775'>\r
       <data-member access='public'>\r
-        <var-decl name='__size' type-id='type-id-1773' visibility='default' filepath='/usr/include/x86_64-linux-gnu/bits/semaphore.h' line='37' column='1'/>\r
+        <var-decl name='__size' type-id='type-id-1767' visibility='default' filepath='/usr/include/x86_64-linux-gnu/bits/semaphore.h' line='37' column='1'/>\r
       </data-member>\r
       <data-member access='public'>\r
         <var-decl name='__align' type-id='type-id-184' visibility='default' filepath='/usr/include/x86_64-linux-gnu/bits/semaphore.h' line='38' column='1'/>\r
       </data-member>\r
     </union-decl>\r
-    <typedef-decl name='sem_t' type-id='type-id-1781' filepath='/usr/include/x86_64-linux-gnu/bits/semaphore.h' line='39' column='1' id='type-id-1779'/>\r
-    <pointer-type-def type-id='type-id-1264' size-in-bits='64' id='type-id-1782'/>\r
-    <pointer-type-def type-id='type-id-1304' size-in-bits='64' id='type-id-1783'/>\r
-    <pointer-type-def type-id='type-id-1780' size-in-bits='64' id='type-id-1784'/>\r
-    <pointer-type-def type-id='type-id-1774' size-in-bits='64' id='type-id-1785'/>\r
-    <pointer-type-def type-id='type-id-1777' size-in-bits='64' id='type-id-1786'/>\r
+    <typedef-decl name='sem_t' type-id='type-id-1775' filepath='/usr/include/x86_64-linux-gnu/bits/semaphore.h' line='39' column='1' id='type-id-1773'/>\r
+    <pointer-type-def type-id='type-id-1264' size-in-bits='64' id='type-id-1776'/>\r
+    <pointer-type-def type-id='type-id-1304' size-in-bits='64' id='type-id-1777'/>\r
+    <pointer-type-def type-id='type-id-1774' size-in-bits='64' id='type-id-1778'/>\r
+    <pointer-type-def type-id='type-id-1768' size-in-bits='64' id='type-id-1779'/>\r
+    <pointer-type-def type-id='type-id-1771' size-in-bits='64' id='type-id-1780'/>\r
     <function-decl name='PyTime_MonotonicRaw' mangled-name='PyTime_MonotonicRaw' filepath='./Include/cpython/pytime.h' line='19' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='PyTime_MonotonicRaw'>\r
       <parameter type-id='type-id-174'/>\r
       <return type-id='type-id-5'/>\r
     </function-decl>\r
     <function-decl name='_PyParkingLot_Unpark' mangled-name='_PyParkingLot_Unpark' filepath='./Include/internal/pycore_parking_lot.h' line='86' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='_PyParkingLot_Unpark'>\r
       <parameter type-id='type-id-35'/>\r
-      <parameter type-id='type-id-1786'/>\r
+      <parameter type-id='type-id-1780'/>\r
       <parameter type-id='type-id-35'/>\r
       <return type-id='type-id-3'/>\r
     </function-decl>\r
       <return type-id='type-id-3'/>\r
     </function-decl>\r
     <function-decl name='_PySemaphore_Wait' mangled-name='_PySemaphore_Wait' filepath='./Include/internal/pycore_semaphore.h' line='52' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='_PySemaphore_Wait'>\r
-      <parameter type-id='type-id-1784'/>\r
+      <parameter type-id='type-id-1778'/>\r
       <parameter type-id='type-id-28'/>\r
       <parameter type-id='type-id-5'/>\r
       <return type-id='type-id-5'/>\r
     </function-decl>\r
     <function-decl name='_PySemaphore_Wakeup' mangled-name='_PySemaphore_Wakeup' filepath='./Include/internal/pycore_semaphore.h' line='57' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='_PySemaphore_Wakeup'>\r
-      <parameter type-id='type-id-1784'/>\r
+      <parameter type-id='type-id-1778'/>\r
       <return type-id='type-id-3'/>\r
     </function-decl>\r
     <function-decl name='_PySemaphore_Init' mangled-name='_PySemaphore_Init' filepath='./Include/internal/pycore_semaphore.h' line='60' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='_PySemaphore_Init'>\r
-      <parameter type-id='type-id-1784'/>\r
+      <parameter type-id='type-id-1778'/>\r
       <return type-id='type-id-3'/>\r
     </function-decl>\r
     <function-decl name='_PySemaphore_Destroy' mangled-name='_PySemaphore_Destroy' filepath='./Include/internal/pycore_semaphore.h' line='61' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='_PySemaphore_Destroy'>\r
-      <parameter type-id='type-id-1784'/>\r
+      <parameter type-id='type-id-1778'/>\r
       <return type-id='type-id-3'/>\r
     </function-decl>\r
     <function-decl name='_PyTime_Add' filepath='./Include/internal/pycore_time.h' line='243' column='1' visibility='default' binding='global' size-in-bits='64'>\r
       <return type-id='type-id-5'/>\r
     </function-decl>\r
     <function-decl name='_PyEvent_IsSet' mangled-name='_PyEvent_IsSet' filepath='Python/lock.c' line='247' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='_PyEvent_IsSet'>\r
-      <parameter type-id='type-id-1782' name='evt' filepath='Python/lock.c' line='247' column='1'/>\r
+      <parameter type-id='type-id-1776' name='evt' filepath='Python/lock.c' line='247' column='1'/>\r
       <return type-id='type-id-5'/>\r
     </function-decl>\r
     <function-decl name='_PyEvent_Notify' mangled-name='_PyEvent_Notify' filepath='Python/lock.c' line='254' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='_PyEvent_Notify'>\r
-      <parameter type-id='type-id-1782' name='evt' filepath='Python/lock.c' line='254' column='1'/>\r
+      <parameter type-id='type-id-1776' name='evt' filepath='Python/lock.c' line='254' column='1'/>\r
       <return type-id='type-id-3'/>\r
     </function-decl>\r
     <function-decl name='PyEvent_Wait' mangled-name='PyEvent_Wait' filepath='Python/lock.c' line='272' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='PyEvent_Wait'>\r
-      <parameter type-id='type-id-1782' name='evt' filepath='Python/lock.c' line='272' column='1'/>\r
+      <parameter type-id='type-id-1776' name='evt' filepath='Python/lock.c' line='272' column='1'/>\r
       <return type-id='type-id-3'/>\r
     </function-decl>\r
     <function-decl name='PyEvent_WaitTimed' mangled-name='PyEvent_WaitTimed' filepath='Python/lock.c' line='279' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='PyEvent_WaitTimed'>\r
-      <parameter type-id='type-id-1782' name='evt' filepath='Python/lock.c' line='279' column='1'/>\r
+      <parameter type-id='type-id-1776' name='evt' filepath='Python/lock.c' line='279' column='1'/>\r
       <parameter type-id='type-id-28' name='timeout_ns' filepath='Python/lock.c' line='279' column='1'/>\r
       <parameter type-id='type-id-5' name='detach' filepath='Python/lock.c' line='279' column='1'/>\r
       <return type-id='type-id-5'/>\r
     </function-decl>\r
     <function-decl name='_PyRWMutex_RLock' mangled-name='_PyRWMutex_RLock' filepath='Python/lock.c' line='455' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='_PyRWMutex_RLock'>\r
-      <parameter type-id='type-id-1783' name='rwmutex' filepath='Python/lock.c' line='455' column='1'/>\r
+      <parameter type-id='type-id-1777' name='rwmutex' filepath='Python/lock.c' line='455' column='1'/>\r
       <return type-id='type-id-3'/>\r
     </function-decl>\r
     <function-decl name='_PyRWMutex_RUnlock' mangled-name='_PyRWMutex_RUnlock' filepath='Python/lock.c' line='486' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='_PyRWMutex_RUnlock'>\r
-      <parameter type-id='type-id-1783' name='rwmutex' filepath='Python/lock.c' line='486' column='1'/>\r
+      <parameter type-id='type-id-1777' name='rwmutex' filepath='Python/lock.c' line='486' column='1'/>\r
       <return type-id='type-id-3'/>\r
     </function-decl>\r
     <function-decl name='_PyRWMutex_Lock' mangled-name='_PyRWMutex_Lock' filepath='Python/lock.c' line='499' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='_PyRWMutex_Lock'>\r
-      <parameter type-id='type-id-1783' name='rwmutex' filepath='Python/lock.c' line='499' column='1'/>\r
+      <parameter type-id='type-id-1777' name='rwmutex' filepath='Python/lock.c' line='499' column='1'/>\r
       <return type-id='type-id-3'/>\r
     </function-decl>\r
     <function-decl name='_PyRWMutex_Unlock' mangled-name='_PyRWMutex_Unlock' filepath='Python/lock.c' line='520' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='_PyRWMutex_Unlock'>\r
-      <parameter type-id='type-id-1783' name='rwmutex' filepath='Python/lock.c' line='520' column='1'/>\r
+      <parameter type-id='type-id-1777' name='rwmutex' filepath='Python/lock.c' line='520' column='1'/>\r
       <return type-id='type-id-3'/>\r
     </function-decl>\r
     <function-decl name='_PySeqLock_LockWrite' mangled-name='_PySeqLock_LockWrite' filepath='Python/lock.c' line='534' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='_PySeqLock_LockWrite'>\r
-      <parameter type-id='type-id-1785' name='seqlock' filepath='Python/lock.c' line='534' column='1'/>\r
+      <parameter type-id='type-id-1779' name='seqlock' filepath='Python/lock.c' line='534' column='1'/>\r
       <return type-id='type-id-3'/>\r
     </function-decl>\r
     <function-decl name='_PySeqLock_AbandonWrite' mangled-name='_PySeqLock_AbandonWrite' filepath='Python/lock.c' line='555' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='_PySeqLock_AbandonWrite'>\r
-      <parameter type-id='type-id-1785' name='seqlock' filepath='Python/lock.c' line='555' column='1'/>\r
+      <parameter type-id='type-id-1779' name='seqlock' filepath='Python/lock.c' line='555' column='1'/>\r
       <return type-id='type-id-3'/>\r
     </function-decl>\r
     <function-decl name='_PySeqLock_UnlockWrite' mangled-name='_PySeqLock_UnlockWrite' filepath='Python/lock.c' line='562' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='_PySeqLock_UnlockWrite'>\r
-      <parameter type-id='type-id-1785' name='seqlock' filepath='Python/lock.c' line='562' column='1'/>\r
+      <parameter type-id='type-id-1779' name='seqlock' filepath='Python/lock.c' line='562' column='1'/>\r
       <return type-id='type-id-3'/>\r
     </function-decl>\r
     <function-decl name='_PySeqLock_BeginRead' mangled-name='_PySeqLock_BeginRead' filepath='Python/lock.c' line='569' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='_PySeqLock_BeginRead'>\r
-      <parameter type-id='type-id-1785' name='seqlock' filepath='Python/lock.c' line='569' column='1'/>\r
+      <parameter type-id='type-id-1779' name='seqlock' filepath='Python/lock.c' line='569' column='1'/>\r
       <return type-id='type-id-322'/>\r
     </function-decl>\r
     <function-decl name='_PySeqLock_EndRead' mangled-name='_PySeqLock_EndRead' filepath='Python/lock.c' line='580' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='_PySeqLock_EndRead'>\r
-      <parameter type-id='type-id-1785' name='seqlock' filepath='Python/lock.c' line='580' column='1'/>\r
+      <parameter type-id='type-id-1779' name='seqlock' filepath='Python/lock.c' line='580' column='1'/>\r
       <parameter type-id='type-id-322' name='previous' filepath='Python/lock.c' line='580' column='1'/>\r
       <return type-id='type-id-5'/>\r
     </function-decl>\r
     <function-decl name='_PySeqLock_AfterFork' mangled-name='_PySeqLock_AfterFork' filepath='Python/lock.c' line='595' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='_PySeqLock_AfterFork'>\r
-      <parameter type-id='type-id-1785' name='seqlock' filepath='Python/lock.c' line='595' column='1'/>\r
+      <parameter type-id='type-id-1779' name='seqlock' filepath='Python/lock.c' line='595' column='1'/>\r
       <return type-id='type-id-5'/>\r
     </function-decl>\r
-    <function-type size-in-bits='64' id='type-id-1776'>\r
+    <function-type size-in-bits='64' id='type-id-1770'>\r
       <parameter type-id='type-id-35'/>\r
       <parameter type-id='type-id-35'/>\r
       <parameter type-id='type-id-5'/>\r
     </function-type>\r
   </abi-instr>\r
   <abi-instr address-size='64' path='Python/marshal.c' comp-dir-path='/home/runner/work/cpython/cpython' language='LANG_C11'>\r
-    <array-type-def dimensions='1' type-id='type-id-546' size-in-bits='192' id='type-id-1787'>\r
+    <array-type-def dimensions='1' type-id='type-id-546' size-in-bits='192' id='type-id-1781'>\r
       <subrange length='3' type-id='type-id-2' id='type-id-885'/>\r
     </array-type-def>\r
-    <class-decl name='stat' size-in-bits='1152' is-struct='yes' visibility='default' filepath='/usr/include/x86_64-linux-gnu/bits/struct_stat.h' line='26' column='1' id='type-id-1788'>\r
+    <class-decl name='stat' size-in-bits='1152' is-struct='yes' visibility='default' filepath='/usr/include/x86_64-linux-gnu/bits/struct_stat.h' line='26' column='1' id='type-id-1782'>\r
       <data-member access='public' layout-offset-in-bits='0'>\r
         <var-decl name='st_dev' type-id='type-id-187' visibility='default' filepath='/usr/include/x86_64-linux-gnu/bits/struct_stat.h' line='31' column='1'/>\r
       </data-member>\r
       <data-member access='public' layout-offset-in-bits='64'>\r
-        <var-decl name='st_ino' type-id='type-id-1789' visibility='default' filepath='/usr/include/x86_64-linux-gnu/bits/struct_stat.h' line='36' column='1'/>\r
+        <var-decl name='st_ino' type-id='type-id-1783' visibility='default' filepath='/usr/include/x86_64-linux-gnu/bits/struct_stat.h' line='36' column='1'/>\r
       </data-member>\r
       <data-member access='public' layout-offset-in-bits='128'>\r
-        <var-decl name='st_nlink' type-id='type-id-1790' visibility='default' filepath='/usr/include/x86_64-linux-gnu/bits/struct_stat.h' line='44' column='1'/>\r
+        <var-decl name='st_nlink' type-id='type-id-1784' visibility='default' filepath='/usr/include/x86_64-linux-gnu/bits/struct_stat.h' line='44' column='1'/>\r
       </data-member>\r
       <data-member access='public' layout-offset-in-bits='192'>\r
         <var-decl name='st_mode' type-id='type-id-117' visibility='default' filepath='/usr/include/x86_64-linux-gnu/bits/struct_stat.h' line='45' column='1'/>\r
         <var-decl name='st_size' type-id='type-id-1434' visibility='default' filepath='/usr/include/x86_64-linux-gnu/bits/struct_stat.h' line='57' column='1'/>\r
       </data-member>\r
       <data-member access='public' layout-offset-in-bits='448'>\r
-        <var-decl name='st_blksize' type-id='type-id-1791' visibility='default' filepath='/usr/include/x86_64-linux-gnu/bits/struct_stat.h' line='61' column='1'/>\r
+        <var-decl name='st_blksize' type-id='type-id-1785' visibility='default' filepath='/usr/include/x86_64-linux-gnu/bits/struct_stat.h' line='61' column='1'/>\r
       </data-member>\r
       <data-member access='public' layout-offset-in-bits='512'>\r
-        <var-decl name='st_blocks' type-id='type-id-1792' visibility='default' filepath='/usr/include/x86_64-linux-gnu/bits/struct_stat.h' line='63' column='1'/>\r
+        <var-decl name='st_blocks' type-id='type-id-1786' visibility='default' filepath='/usr/include/x86_64-linux-gnu/bits/struct_stat.h' line='63' column='1'/>\r
       </data-member>\r
       <data-member access='public' layout-offset-in-bits='576'>\r
         <var-decl name='st_atim' type-id='type-id-110' visibility='default' filepath='/usr/include/x86_64-linux-gnu/bits/struct_stat.h' line='74' column='1'/>\r
         <var-decl name='st_ctim' type-id='type-id-110' visibility='default' filepath='/usr/include/x86_64-linux-gnu/bits/struct_stat.h' line='76' column='1'/>\r
       </data-member>\r
       <data-member access='public' layout-offset-in-bits='960'>\r
-        <var-decl name='__glibc_reserved' type-id='type-id-1787' visibility='default' filepath='/usr/include/x86_64-linux-gnu/bits/struct_stat.h' line='89' column='1'/>\r
+        <var-decl name='__glibc_reserved' type-id='type-id-1781' visibility='default' filepath='/usr/include/x86_64-linux-gnu/bits/struct_stat.h' line='89' column='1'/>\r
       </data-member>\r
     </class-decl>\r
     <typedef-decl name='__gid_t' type-id='type-id-105' filepath='/usr/include/x86_64-linux-gnu/bits/types.h' line='147' column='1' id='type-id-115'/>\r
-    <typedef-decl name='__ino_t' type-id='type-id-2' filepath='/usr/include/x86_64-linux-gnu/bits/types.h' line='148' column='1' id='type-id-1789'/>\r
+    <typedef-decl name='__ino_t' type-id='type-id-2' filepath='/usr/include/x86_64-linux-gnu/bits/types.h' line='148' column='1' id='type-id-1783'/>\r
     <typedef-decl name='__mode_t' type-id='type-id-105' filepath='/usr/include/x86_64-linux-gnu/bits/types.h' line='150' column='1' id='type-id-117'/>\r
-    <typedef-decl name='__nlink_t' type-id='type-id-2' filepath='/usr/include/x86_64-linux-gnu/bits/types.h' line='151' column='1' id='type-id-1790'/>\r
-    <typedef-decl name='__blksize_t' type-id='type-id-184' filepath='/usr/include/x86_64-linux-gnu/bits/types.h' line='175' column='1' id='type-id-1791'/>\r
-    <typedef-decl name='__blkcnt_t' type-id='type-id-184' filepath='/usr/include/x86_64-linux-gnu/bits/types.h' line='180' column='1' id='type-id-1792'/>\r
-    <pointer-type-def type-id='type-id-1788' size-in-bits='64' id='type-id-64'/>\r
+    <typedef-decl name='__nlink_t' type-id='type-id-2' filepath='/usr/include/x86_64-linux-gnu/bits/types.h' line='151' column='1' id='type-id-1784'/>\r
+    <typedef-decl name='__blksize_t' type-id='type-id-184' filepath='/usr/include/x86_64-linux-gnu/bits/types.h' line='175' column='1' id='type-id-1785'/>\r
+    <typedef-decl name='__blkcnt_t' type-id='type-id-184' filepath='/usr/include/x86_64-linux-gnu/bits/types.h' line='180' column='1' id='type-id-1786'/>\r
+    <pointer-type-def type-id='type-id-1782' size-in-bits='64' id='type-id-64'/>\r
     <function-decl name='_Py_fstat_noraise' mangled-name='_Py_fstat_noraise' filepath='./Include/internal/pycore_fileutils.h' line='95' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='_Py_fstat_noraise'>\r
       <parameter type-id='type-id-5'/>\r
       <parameter type-id='type-id-64'/>\r
     </function-decl>\r
   </abi-instr>\r
   <abi-instr address-size='64' path='Python/parking_lot.c' comp-dir-path='/home/runner/work/cpython/cpython' language='LANG_C11'>\r
-    <class-decl name='_PyRawMutex' size-in-bits='64' is-struct='yes' naming-typedef-id='type-id-1793' visibility='default' filepath='./Include/internal/pycore_lock.h' line='104' column='1' id='type-id-1794'>\r
+    <class-decl name='_PyRawMutex' size-in-bits='64' is-struct='yes' naming-typedef-id='type-id-1787' visibility='default' filepath='./Include/internal/pycore_lock.h' line='104' column='1' id='type-id-1788'>\r
       <data-member access='public' layout-offset-in-bits='0'>\r
         <var-decl name='v' type-id='type-id-369' visibility='default' filepath='./Include/internal/pycore_lock.h' line='105' column='1'/>\r
       </data-member>\r
     </class-decl>\r
-    <typedef-decl name='_PyRawMutex' type-id='type-id-1794' filepath='./Include/internal/pycore_lock.h' line='106' column='1' id='type-id-1793'/>\r
-    <pointer-type-def type-id='type-id-1793' size-in-bits='64' id='type-id-1795'/>\r
-    <pointer-type-def type-id='type-id-1779' size-in-bits='64' id='type-id-1796'/>\r
-    <qualified-type-def type-id='type-id-1796' restrict='yes' id='type-id-1797'/>\r
+    <typedef-decl name='_PyRawMutex' type-id='type-id-1788' filepath='./Include/internal/pycore_lock.h' line='106' column='1' id='type-id-1787'/>\r
+    <pointer-type-def type-id='type-id-1787' size-in-bits='64' id='type-id-1789'/>\r
+    <pointer-type-def type-id='type-id-1773' size-in-bits='64' id='type-id-1790'/>\r
+    <qualified-type-def type-id='type-id-1790' restrict='yes' id='type-id-1791'/>\r
     <function-decl name='_PyRawMutex_LockSlow' filepath='./Include/internal/pycore_lock.h' line='109' column='1' visibility='default' binding='global' size-in-bits='64'>\r
-      <parameter type-id='type-id-1795'/>\r
+      <parameter type-id='type-id-1789'/>\r
       <return type-id='type-id-3'/>\r
     </function-decl>\r
     <function-decl name='_PyRawMutex_UnlockSlow' filepath='./Include/internal/pycore_lock.h' line='110' column='1' visibility='default' binding='global' size-in-bits='64'>\r
-      <parameter type-id='type-id-1795'/>\r
+      <parameter type-id='type-id-1789'/>\r
       <return type-id='type-id-3'/>\r
     </function-decl>\r
     <function-decl name='_PyTime_AsTimespec_clamp' mangled-name='_PyTime_AsTimespec_clamp' filepath='./Include/internal/pycore_time.h' line='238' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='_PyTime_AsTimespec_clamp'>\r
       <return type-id='type-id-3'/>\r
     </function-decl>\r
     <function-decl name='sem_init' filepath='/usr/include/semaphore.h' line='35' column='1' visibility='default' binding='global' size-in-bits='64'>\r
-      <parameter type-id='type-id-1796'/>\r
+      <parameter type-id='type-id-1790'/>\r
       <parameter type-id='type-id-5'/>\r
       <parameter type-id='type-id-105'/>\r
       <return type-id='type-id-5'/>\r
     </function-decl>\r
     <function-decl name='sem_destroy' filepath='/usr/include/semaphore.h' line='39' column='1' visibility='default' binding='global' size-in-bits='64'>\r
-      <parameter type-id='type-id-1796'/>\r
+      <parameter type-id='type-id-1790'/>\r
       <return type-id='type-id-5'/>\r
     </function-decl>\r
     <function-decl name='sem_wait' filepath='/usr/include/semaphore.h' line='55' column='1' visibility='default' binding='global' size-in-bits='64'>\r
-      <parameter type-id='type-id-1796'/>\r
+      <parameter type-id='type-id-1790'/>\r
       <return type-id='type-id-5'/>\r
     </function-decl>\r
     <function-decl name='sem_clockwait' filepath='/usr/include/semaphore.h' line='81' column='1' visibility='default' binding='global' size-in-bits='64'>\r
-      <parameter type-id='type-id-1797'/>\r
+      <parameter type-id='type-id-1791'/>\r
       <parameter type-id='type-id-226'/>\r
       <parameter type-id='type-id-208'/>\r
       <return type-id='type-id-5'/>\r
     </function-decl>\r
     <function-decl name='sem_post' filepath='/usr/include/semaphore.h' line='103' column='1' visibility='default' binding='global' size-in-bits='64'>\r
-      <parameter type-id='type-id-1796'/>\r
+      <parameter type-id='type-id-1790'/>\r
       <return type-id='type-id-5'/>\r
     </function-decl>\r
     <function-decl name='_PyParkingLot_AfterFork' mangled-name='_PyParkingLot_AfterFork' filepath='Python/parking_lot.c' line='405' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='_PyParkingLot_AfterFork'>\r
     </function-decl>\r
   </abi-instr>\r
   <abi-instr address-size='64' path='Python/perf_jit_trampoline.c' comp-dir-path='/home/runner/work/cpython/cpython' language='LANG_C11'>\r
-    <qualified-type-def type-id='type-id-221' restrict='yes' id='type-id-1798'/>\r
-    <var-decl name='_Py_perfmap_jit_callbacks' type-id='type-id-1799' visibility='default' filepath='./Include/internal/pycore_ceval.h' line='111' column='1'/>\r
+    <qualified-type-def type-id='type-id-221' restrict='yes' id='type-id-1792'/>\r
+    <var-decl name='_Py_perfmap_jit_callbacks' type-id='type-id-1793' visibility='default' filepath='./Include/internal/pycore_ceval.h' line='111' column='1'/>\r
     <function-decl name='gettimeofday' filepath='/usr/include/x86_64-linux-gnu/sys/time.h' line='67' column='1' visibility='default' binding='global' size-in-bits='64'>\r
-      <parameter type-id='type-id-1798'/>\r
+      <parameter type-id='type-id-1792'/>\r
       <parameter type-id='type-id-231'/>\r
       <return type-id='type-id-5'/>\r
     </function-decl>\r
   </abi-instr>\r
   <abi-instr address-size='64' path='Python/perf_trampoline.c' comp-dir-path='/home/runner/work/cpython/cpython' language='LANG_C11'>\r
-    <var-decl name='_Py_perfmap_callbacks' type-id='type-id-1799' visibility='default' filepath='./Include/internal/pycore_ceval.h' line='110' column='1'/>\r
+    <var-decl name='_Py_perfmap_callbacks' type-id='type-id-1793' visibility='default' filepath='./Include/internal/pycore_ceval.h' line='110' column='1'/>\r
     <function-decl name='getppid' filepath='/usr/include/unistd.h' line='653' column='1' visibility='default' binding='global' size-in-bits='64'>\r
       <return type-id='type-id-178'/>\r
     </function-decl>\r
     </function-decl>\r
   </abi-instr>\r
   <abi-instr address-size='64' path='Python/preconfig.c' comp-dir-path='/home/runner/work/cpython/cpython' language='LANG_C11'>\r
-    <enum-decl name='PyMemAllocatorName' naming-typedef-id='type-id-1800' filepath='./Include/cpython/pymem.h' line='16' column='1' id='type-id-1801'>\r
+    <enum-decl name='PyMemAllocatorName' naming-typedef-id='type-id-1794' filepath='./Include/cpython/pymem.h' line='16' column='1' id='type-id-1795'>\r
       <underlying-type type-id='type-id-37'/>\r
       <enumerator name='PYMEM_ALLOCATOR_NOT_SET' value='0'/>\r
       <enumerator name='PYMEM_ALLOCATOR_DEFAULT' value='1'/>\r
       <enumerator name='PYMEM_ALLOCATOR_MIMALLOC' value='7'/>\r
       <enumerator name='PYMEM_ALLOCATOR_MIMALLOC_DEBUG' value='8'/>\r
     </enum-decl>\r
-    <typedef-decl name='PyMemAllocatorName' type-id='type-id-1801' filepath='./Include/cpython/pymem.h' line='30' column='1' id='type-id-1800'/>\r
-    <pointer-type-def type-id='type-id-1800' size-in-bits='64' id='type-id-1802'/>\r
+    <typedef-decl name='PyMemAllocatorName' type-id='type-id-1795' filepath='./Include/cpython/pymem.h' line='30' column='1' id='type-id-1794'/>\r
+    <pointer-type-def type-id='type-id-1794' size-in-bits='64' id='type-id-1796'/>\r
     <var-decl name='Py_FileSystemDefaultEncoding' type-id='type-id-4' mangled-name='Py_FileSystemDefaultEncoding' visibility='default' filepath='./Include/fileobject.h' line='22' column='1' elf-symbol-id='Py_FileSystemDefaultEncoding'/>\r
     <var-decl name='Py_FileSystemDefaultEncodeErrors' type-id='type-id-4' mangled-name='Py_FileSystemDefaultEncodeErrors' visibility='default' filepath='./Include/fileobject.h' line='24' column='1' elf-symbol-id='Py_FileSystemDefaultEncodeErrors'/>\r
     <var-decl name='Py_HasFileSystemDefaultEncoding' type-id='type-id-5' mangled-name='Py_HasFileSystemDefaultEncoding' visibility='default' filepath='./Include/fileobject.h' line='26' column='1' elf-symbol-id='Py_HasFileSystemDefaultEncoding'/>\r
     <var-decl name='_Py_HasFileSystemDefaultEncodeErrors' type-id='type-id-5' visibility='default' filepath='./Include/internal/pycore_fileutils.h' line='193' column='1'/>\r
     <function-decl name='_PyWideStringList_Clear' filepath='./Include/internal/pycore_initconfig.h' line='58' column='1' visibility='default' binding='global' size-in-bits='64'>\r
-      <parameter type-id='type-id-1740'/>\r
+      <parameter type-id='type-id-1734'/>\r
       <return type-id='type-id-3'/>\r
     </function-decl>\r
     <function-decl name='_PyWideStringList_Copy' filepath='./Include/internal/pycore_initconfig.h' line='59' column='1' visibility='default' binding='global' size-in-bits='64'>\r
-      <parameter type-id='type-id-1740'/>\r
+      <parameter type-id='type-id-1734'/>\r
       <parameter type-id='type-id-239'/>\r
       <return type-id='type-id-5'/>\r
     </function-decl>\r
     <function-decl name='_PyWideStringList_Extend' filepath='./Include/internal/pycore_initconfig.h' line='61' column='1' visibility='default' binding='global' size-in-bits='64'>\r
-      <parameter type-id='type-id-1740'/>\r
+      <parameter type-id='type-id-1734'/>\r
       <parameter type-id='type-id-239'/>\r
       <return type-id='type-id-66'/>\r
     </function-decl>\r
     </function-decl>\r
     <function-decl name='_PyMem_GetAllocatorName' filepath='./Include/internal/pycore_pymem.h' line='71' column='1' visibility='default' binding='global' size-in-bits='64'>\r
       <parameter type-id='type-id-4'/>\r
-      <parameter type-id='type-id-1802'/>\r
+      <parameter type-id='type-id-1796'/>\r
       <return type-id='type-id-5'/>\r
     </function-decl>\r
     <function-decl name='_PyMem_SetupAllocators' filepath='./Include/internal/pycore_pymem.h' line='78' column='1' visibility='default' binding='global' size-in-bits='64'>\r
-      <parameter type-id='type-id-1800'/>\r
+      <parameter type-id='type-id-1794'/>\r
       <return type-id='type-id-5'/>\r
     </function-decl>\r
     <function-decl name='wcsncmp' filepath='/usr/include/wchar.h' line='109' column='1' visibility='default' binding='global' size-in-bits='64'>\r
       <return type-id='type-id-5'/>\r
     </function-decl>\r
     <function-decl name='_PyPreConfig_InitCompatConfig' mangled-name='_PyPreConfig_InitCompatConfig' filepath='Python/preconfig.c' line='284' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='_PyPreConfig_InitCompatConfig'>\r
-      <parameter type-id='type-id-1739' name='config' filepath='Python/preconfig.c' line='284' column='1'/>\r
+      <parameter type-id='type-id-1733' name='config' filepath='Python/preconfig.c' line='284' column='1'/>\r
       <return type-id='type-id-3'/>\r
     </function-decl>\r
     <function-decl name='PyPreConfig_InitPythonConfig' mangled-name='PyPreConfig_InitPythonConfig' filepath='Python/preconfig.c' line='312' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='PyPreConfig_InitPythonConfig'>\r
-      <parameter type-id='type-id-1739' name='config' filepath='Python/preconfig.c' line='312' column='1'/>\r
+      <parameter type-id='type-id-1733' name='config' filepath='Python/preconfig.c' line='312' column='1'/>\r
       <return type-id='type-id-3'/>\r
     </function-decl>\r
   </abi-instr>\r
   <abi-instr address-size='64' path='Python/pyctype.c' comp-dir-path='/home/runner/work/cpython/cpython' language='LANG_C11'>\r
-    <array-type-def dimensions='1' type-id='type-id-452' size-in-bits='2048' id='type-id-1803'>\r
+    <array-type-def dimensions='1' type-id='type-id-452' size-in-bits='2048' id='type-id-1797'>\r
       <subrange length='256' type-id='type-id-2' id='type-id-75'/>\r
     </array-type-def>\r
-    <array-type-def dimensions='1' type-id='type-id-1804' size-in-bits='8192' id='type-id-1805'>\r
+    <array-type-def dimensions='1' type-id='type-id-1798' size-in-bits='8192' id='type-id-1799'>\r
       <subrange length='256' type-id='type-id-2' id='type-id-75'/>\r
     </array-type-def>\r
-    <qualified-type-def type-id='type-id-105' const='yes' id='type-id-1804'/>\r
-    <var-decl name='_Py_ctype_table' type-id='type-id-1805' mangled-name='_Py_ctype_table' visibility='default' filepath='./Include/cpython/pyctype.h' line='16' column='1' elf-symbol-id='_Py_ctype_table'/>\r
-    <var-decl name='_Py_ctype_tolower' type-id='type-id-1803' mangled-name='_Py_ctype_tolower' visibility='default' filepath='./Include/cpython/pyctype.h' line='29' column='1' elf-symbol-id='_Py_ctype_tolower'/>\r
-    <var-decl name='_Py_ctype_toupper' type-id='type-id-1803' mangled-name='_Py_ctype_toupper' visibility='default' filepath='./Include/cpython/pyctype.h' line='30' column='1' elf-symbol-id='_Py_ctype_toupper'/>\r
+    <qualified-type-def type-id='type-id-105' const='yes' id='type-id-1798'/>\r
+    <var-decl name='_Py_ctype_table' type-id='type-id-1799' mangled-name='_Py_ctype_table' visibility='default' filepath='./Include/cpython/pyctype.h' line='16' column='1' elf-symbol-id='_Py_ctype_table'/>\r
+    <var-decl name='_Py_ctype_tolower' type-id='type-id-1797' mangled-name='_Py_ctype_tolower' visibility='default' filepath='./Include/cpython/pyctype.h' line='29' column='1' elf-symbol-id='_Py_ctype_tolower'/>\r
+    <var-decl name='_Py_ctype_toupper' type-id='type-id-1797' mangled-name='_Py_ctype_toupper' visibility='default' filepath='./Include/cpython/pyctype.h' line='30' column='1' elf-symbol-id='_Py_ctype_toupper'/>\r
   </abi-instr>\r
   <abi-instr address-size='64' path='Python/pyhash.c' comp-dir-path='/home/runner/work/cpython/cpython' language='LANG_C11'>\r
-    <array-type-def dimensions='1' type-id='type-id-95' size-in-bits='128' id='type-id-1806'>\r
+    <array-type-def dimensions='1' type-id='type-id-95' size-in-bits='128' id='type-id-1800'>\r
       <subrange length='16' type-id='type-id-2' id='type-id-70'/>\r
     </array-type-def>\r
-    <array-type-def dimensions='1' type-id='type-id-95' size-in-bits='192' id='type-id-1807'>\r
+    <array-type-def dimensions='1' type-id='type-id-95' size-in-bits='192' id='type-id-1801'>\r
       <subrange length='24' type-id='type-id-2' id='type-id-859'/>\r
     </array-type-def>\r
-    <class-decl name='PyHash_FuncDef' size-in-bits='192' is-struct='yes' naming-typedef-id='type-id-1808' visibility='default' filepath='./Include/cpython/pyhash.h' line='34' column='1' id='type-id-1809'>\r
+    <class-decl name='PyHash_FuncDef' size-in-bits='192' is-struct='yes' naming-typedef-id='type-id-1802' visibility='default' filepath='./Include/cpython/pyhash.h' line='34' column='1' id='type-id-1803'>\r
       <data-member access='public' layout-offset-in-bits='0'>\r
-        <var-decl name='hash' type-id='type-id-1810' visibility='default' filepath='./Include/cpython/pyhash.h' line='35' column='1'/>\r
+        <var-decl name='hash' type-id='type-id-1804' visibility='default' filepath='./Include/cpython/pyhash.h' line='35' column='1'/>\r
       </data-member>\r
       <data-member access='public' layout-offset-in-bits='64'>\r
         <var-decl name='name' type-id='type-id-4' visibility='default' filepath='./Include/cpython/pyhash.h' line='36' column='1'/>\r
         <var-decl name='seed_bits' type-id='type-id-275' visibility='default' filepath='./Include/cpython/pyhash.h' line='38' column='1'/>\r
       </data-member>\r
     </class-decl>\r
-    <typedef-decl name='PyHash_FuncDef' type-id='type-id-1809' filepath='./Include/cpython/pyhash.h' line='39' column='1' id='type-id-1808'/>\r
-    <union-decl name='_Py_HashSecret_t' size-in-bits='192' naming-typedef-id='type-id-1811' visibility='default' filepath='./Include/internal/pycore_pyhash.h' line='42' column='1' id='type-id-1812'>\r
+    <typedef-decl name='PyHash_FuncDef' type-id='type-id-1803' filepath='./Include/cpython/pyhash.h' line='39' column='1' id='type-id-1802'/>\r
+    <union-decl name='_Py_HashSecret_t' size-in-bits='192' naming-typedef-id='type-id-1805' visibility='default' filepath='./Include/internal/pycore_pyhash.h' line='42' column='1' id='type-id-1806'>\r
       <data-member access='public'>\r
-        <var-decl name='uc' type-id='type-id-1807' visibility='default' filepath='./Include/internal/pycore_pyhash.h' line='44' column='1'/>\r
+        <var-decl name='uc' type-id='type-id-1801' visibility='default' filepath='./Include/internal/pycore_pyhash.h' line='44' column='1'/>\r
       </data-member>\r
       <data-member access='public'>\r
-        <var-decl name='fnv' type-id='type-id-1813' visibility='default' filepath='./Include/internal/pycore_pyhash.h' line='49' column='1'/>\r
+        <var-decl name='fnv' type-id='type-id-1807' visibility='default' filepath='./Include/internal/pycore_pyhash.h' line='49' column='1'/>\r
       </data-member>\r
       <data-member access='public'>\r
-        <var-decl name='siphash' type-id='type-id-1814' visibility='default' filepath='./Include/internal/pycore_pyhash.h' line='54' column='1'/>\r
+        <var-decl name='siphash' type-id='type-id-1808' visibility='default' filepath='./Include/internal/pycore_pyhash.h' line='54' column='1'/>\r
       </data-member>\r
       <data-member access='public'>\r
-        <var-decl name='djbx33a' type-id='type-id-1815' visibility='default' filepath='./Include/internal/pycore_pyhash.h' line='59' column='1'/>\r
+        <var-decl name='djbx33a' type-id='type-id-1809' visibility='default' filepath='./Include/internal/pycore_pyhash.h' line='59' column='1'/>\r
       </data-member>\r
       <data-member access='public'>\r
-        <var-decl name='expat' type-id='type-id-1816' visibility='default' filepath='./Include/internal/pycore_pyhash.h' line='63' column='1'/>\r
+        <var-decl name='expat' type-id='type-id-1810' visibility='default' filepath='./Include/internal/pycore_pyhash.h' line='63' column='1'/>\r
       </data-member>\r
     </union-decl>\r
-    <class-decl name='__anonymous_struct__' size-in-bits='128' is-struct='yes' is-anonymous='yes' visibility='default' filepath='./Include/internal/pycore_pyhash.h' line='46' column='1' id='type-id-1813'>\r
+    <class-decl name='__anonymous_struct__' size-in-bits='128' is-struct='yes' is-anonymous='yes' visibility='default' filepath='./Include/internal/pycore_pyhash.h' line='46' column='1' id='type-id-1807'>\r
       <data-member access='public' layout-offset-in-bits='0'>\r
         <var-decl name='prefix' type-id='type-id-304' visibility='default' filepath='./Include/internal/pycore_pyhash.h' line='47' column='1'/>\r
       </data-member>\r
         <var-decl name='suffix' type-id='type-id-304' visibility='default' filepath='./Include/internal/pycore_pyhash.h' line='48' column='1'/>\r
       </data-member>\r
     </class-decl>\r
-    <class-decl name='__anonymous_struct__1' size-in-bits='128' is-struct='yes' is-anonymous='yes' visibility='default' filepath='./Include/internal/pycore_pyhash.h' line='51' column='1' id='type-id-1814'>\r
+    <class-decl name='__anonymous_struct__1' size-in-bits='128' is-struct='yes' is-anonymous='yes' visibility='default' filepath='./Include/internal/pycore_pyhash.h' line='51' column='1' id='type-id-1808'>\r
       <data-member access='public' layout-offset-in-bits='0'>\r
         <var-decl name='k0' type-id='type-id-111' visibility='default' filepath='./Include/internal/pycore_pyhash.h' line='52' column='1'/>\r
       </data-member>\r
         <var-decl name='k1' type-id='type-id-111' visibility='default' filepath='./Include/internal/pycore_pyhash.h' line='53' column='1'/>\r
       </data-member>\r
     </class-decl>\r
-    <class-decl name='__anonymous_struct__2' size-in-bits='192' is-struct='yes' is-anonymous='yes' visibility='default' filepath='./Include/internal/pycore_pyhash.h' line='56' column='1' id='type-id-1815'>\r
+    <class-decl name='__anonymous_struct__2' size-in-bits='192' is-struct='yes' is-anonymous='yes' visibility='default' filepath='./Include/internal/pycore_pyhash.h' line='56' column='1' id='type-id-1809'>\r
       <data-member access='public' layout-offset-in-bits='0'>\r
-        <var-decl name='padding' type-id='type-id-1806' visibility='default' filepath='./Include/internal/pycore_pyhash.h' line='57' column='1'/>\r
+        <var-decl name='padding' type-id='type-id-1800' visibility='default' filepath='./Include/internal/pycore_pyhash.h' line='57' column='1'/>\r
       </data-member>\r
       <data-member access='public' layout-offset-in-bits='128'>\r
         <var-decl name='suffix' type-id='type-id-304' visibility='default' filepath='./Include/internal/pycore_pyhash.h' line='58' column='1'/>\r
       </data-member>\r
     </class-decl>\r
-    <class-decl name='__anonymous_struct__3' size-in-bits='192' is-struct='yes' is-anonymous='yes' visibility='default' filepath='./Include/internal/pycore_pyhash.h' line='60' column='1' id='type-id-1816'>\r
+    <class-decl name='__anonymous_struct__3' size-in-bits='192' is-struct='yes' is-anonymous='yes' visibility='default' filepath='./Include/internal/pycore_pyhash.h' line='60' column='1' id='type-id-1810'>\r
       <data-member access='public' layout-offset-in-bits='0'>\r
-        <var-decl name='padding' type-id='type-id-1806' visibility='default' filepath='./Include/internal/pycore_pyhash.h' line='61' column='1'/>\r
+        <var-decl name='padding' type-id='type-id-1800' visibility='default' filepath='./Include/internal/pycore_pyhash.h' line='61' column='1'/>\r
       </data-member>\r
       <data-member access='public' layout-offset-in-bits='128'>\r
         <var-decl name='hashsalt' type-id='type-id-304' visibility='default' filepath='./Include/internal/pycore_pyhash.h' line='62' column='1'/>\r
       </data-member>\r
     </class-decl>\r
-    <typedef-decl name='_Py_HashSecret_t' type-id='type-id-1812' filepath='./Include/internal/pycore_pyhash.h' line='64' column='1' id='type-id-1811'/>\r
-    <pointer-type-def type-id='type-id-1808' size-in-bits='64' id='type-id-1817'/>\r
-    <pointer-type-def type-id='type-id-1818' size-in-bits='64' id='type-id-1819'/>\r
-    <qualified-type-def type-id='type-id-1819' const='yes' id='type-id-1810'/>\r
-    <var-decl name='_Py_HashSecret' type-id='type-id-1811' mangled-name='_Py_HashSecret' visibility='default' filepath='./Include/internal/pycore_pyhash.h' line='67' column='1' elf-symbol-id='_Py_HashSecret'/>\r
+    <typedef-decl name='_Py_HashSecret_t' type-id='type-id-1806' filepath='./Include/internal/pycore_pyhash.h' line='64' column='1' id='type-id-1805'/>\r
+    <pointer-type-def type-id='type-id-1802' size-in-bits='64' id='type-id-1811'/>\r
+    <pointer-type-def type-id='type-id-1812' size-in-bits='64' id='type-id-1813'/>\r
+    <qualified-type-def type-id='type-id-1813' const='yes' id='type-id-1804'/>\r
+    <var-decl name='_Py_HashSecret' type-id='type-id-1805' mangled-name='_Py_HashSecret' visibility='default' filepath='./Include/internal/pycore_pyhash.h' line='67' column='1' elf-symbol-id='_Py_HashSecret'/>\r
     <function-decl name='PyHash_GetFuncDef' mangled-name='PyHash_GetFuncDef' filepath='Python/pyhash.c' line='215' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='PyHash_GetFuncDef'>\r
-      <return type-id='type-id-1817'/>\r
+      <return type-id='type-id-1811'/>\r
     </function-decl>\r
-    <function-type size-in-bits='64' id='type-id-1818'>\r
+    <function-type size-in-bits='64' id='type-id-1812'>\r
       <parameter type-id='type-id-35'/>\r
       <parameter type-id='type-id-7'/>\r
       <return type-id='type-id-304'/>\r
     </function-type>\r
   </abi-instr>\r
   <abi-instr address-size='64' path='Python/pylifecycle.c' comp-dir-path='/home/runner/work/cpython/cpython' language='LANG_C11'>\r
-    <class-decl name='_PyPerf_Callbacks' size-in-bits='192' is-struct='yes' naming-typedef-id='type-id-1799' visibility='default' filepath='./Include/internal/pycore_ceval.h' line='92' column='1' id='type-id-1820'>\r
+    <class-decl name='_PyPerf_Callbacks' size-in-bits='192' is-struct='yes' naming-typedef-id='type-id-1793' visibility='default' filepath='./Include/internal/pycore_ceval.h' line='92' column='1' id='type-id-1814'>\r
       <data-member access='public' layout-offset-in-bits='0'>\r
         <var-decl name='init_state' type-id='type-id-1240' visibility='default' filepath='./Include/internal/pycore_ceval.h' line='94' column='1'/>\r
       </data-member>\r
         <var-decl name='free_state' type-id='type-id-255' visibility='default' filepath='./Include/internal/pycore_ceval.h' line='99' column='1'/>\r
       </data-member>\r
     </class-decl>\r
-    <typedef-decl name='_PyPerf_Callbacks' type-id='type-id-1820' filepath='./Include/internal/pycore_ceval.h' line='100' column='1' id='type-id-1799'/>\r
-    <typedef-decl name='PyOS_sighandler_t' type-id='type-id-1413' filepath='./Include/pylifecycle.h' line='59' column='1' id='type-id-1821'/>\r
-    <typedef-decl name='nl_item' type-id='type-id-5' filepath='/usr/include/nl_types.h' line='36' column='1' id='type-id-1822'/>\r
+    <typedef-decl name='_PyPerf_Callbacks' type-id='type-id-1814' filepath='./Include/internal/pycore_ceval.h' line='100' column='1' id='type-id-1793'/>\r
+    <typedef-decl name='PyOS_sighandler_t' type-id='type-id-1413' filepath='./Include/pylifecycle.h' line='59' column='1' id='type-id-1815'/>\r
+    <typedef-decl name='nl_item' type-id='type-id-5' filepath='/usr/include/nl_types.h' line='36' column='1' id='type-id-1816'/>\r
     <typedef-decl name='sigset_t' type-id='type-id-42' filepath='/usr/include/x86_64-linux-gnu/bits/types/sigset_t.h' line='7' column='1' id='type-id-86'/>\r
-    <pointer-type-def type-id='type-id-33' size-in-bits='64' id='type-id-1823'/>\r
-    <pointer-type-def type-id='type-id-1799' size-in-bits='64' id='type-id-238'/>\r
-    <qualified-type-def type-id='type-id-1167' const='yes' id='type-id-1824'/>\r
-    <pointer-type-def type-id='type-id-1824' size-in-bits='64' id='type-id-1825'/>\r
-    <qualified-type-def type-id='type-id-1825' restrict='yes' id='type-id-1826'/>\r
-    <pointer-type-def type-id='type-id-1167' size-in-bits='64' id='type-id-1827'/>\r
-    <qualified-type-def type-id='type-id-1827' restrict='yes' id='type-id-1828'/>\r
+    <pointer-type-def type-id='type-id-33' size-in-bits='64' id='type-id-1817'/>\r
+    <pointer-type-def type-id='type-id-1793' size-in-bits='64' id='type-id-238'/>\r
+    <qualified-type-def type-id='type-id-1167' const='yes' id='type-id-1818'/>\r
+    <pointer-type-def type-id='type-id-1818' size-in-bits='64' id='type-id-1819'/>\r
+    <qualified-type-def type-id='type-id-1819' restrict='yes' id='type-id-1820'/>\r
+    <pointer-type-def type-id='type-id-1167' size-in-bits='64' id='type-id-1821'/>\r
+    <qualified-type-def type-id='type-id-1821' restrict='yes' id='type-id-1822'/>\r
     <pointer-type-def type-id='type-id-86' size-in-bits='64' id='type-id-57'/>\r
     <function-decl name='_PySys_ClearAuditHooks' filepath='./Include/internal/pycore_audit.h' line='29' column='1' visibility='default' binding='global' size-in-bits='64'>\r
       <parameter type-id='type-id-31'/>\r
       <return type-id='type-id-3'/>\r
     </function-decl>\r
     <function-decl name='_PyPreConfig_InitFromConfig' filepath='./Include/internal/pycore_initconfig.h' line='132' column='1' visibility='default' binding='global' size-in-bits='64'>\r
-      <parameter type-id='type-id-1739'/>\r
+      <parameter type-id='type-id-1733'/>\r
       <parameter type-id='type-id-240'/>\r
       <return type-id='type-id-3'/>\r
     </function-decl>\r
     <function-decl name='_PyPreConfig_Read' filepath='./Include/internal/pycore_initconfig.h' line='141' column='1' visibility='default' binding='global' size-in-bits='64'>\r
-      <parameter type-id='type-id-1739'/>\r
-      <parameter type-id='type-id-1746'/>\r
+      <parameter type-id='type-id-1733'/>\r
+      <parameter type-id='type-id-1740'/>\r
       <return type-id='type-id-66'/>\r
     </function-decl>\r
     <function-decl name='_PyPreConfig_Write' filepath='./Include/internal/pycore_initconfig.h' line='143' column='1' visibility='default' binding='global' size-in-bits='64'>\r
     </function-decl>\r
     <function-decl name='_PyInterpreterState_New' mangled-name='_PyInterpreterState_New' filepath='./Include/internal/pycore_interp.h' line='99' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='_PyInterpreterState_New'>\r
       <parameter type-id='type-id-31'/>\r
-      <parameter type-id='type-id-1823'/>\r
+      <parameter type-id='type-id-1817'/>\r
       <return type-id='type-id-66'/>\r
     </function-decl>\r
     <function-decl name='_PyInterpolation_InitTypes' filepath='./Include/internal/pycore_interpolation.h' line='19' column='1' visibility='default' binding='global' size-in-bits='64'>\r
       <return type-id='type-id-3'/>\r
     </function-decl>\r
     <function-decl name='nl_langinfo' filepath='/usr/include/langinfo.h' line='661' column='1' visibility='default' binding='global' size-in-bits='64'>\r
-      <parameter type-id='type-id-1822'/>\r
+      <parameter type-id='type-id-1816'/>\r
       <return type-id='type-id-17'/>\r
     </function-decl>\r
     <function-decl name='sigemptyset' filepath='/usr/include/signal.h' line='199' column='1' visibility='default' binding='global' size-in-bits='64'>\r
     </function-decl>\r
     <function-decl name='sigaction' filepath='/usr/include/signal.h' line='243' column='1' visibility='default' binding='global' size-in-bits='64'>\r
       <parameter type-id='type-id-5'/>\r
-      <parameter type-id='type-id-1826'/>\r
-      <parameter type-id='type-id-1828'/>\r
+      <parameter type-id='type-id-1820'/>\r
+      <parameter type-id='type-id-1822'/>\r
       <return type-id='type-id-5'/>\r
     </function-decl>\r
     <function-decl name='vfprintf' filepath='/usr/include/stdio.h' line='365' column='1' visibility='default' binding='global' size-in-bits='64'>\r
     </function-decl>\r
     <function-decl name='PyOS_getsig' mangled-name='PyOS_getsig' filepath='Python/pylifecycle.c' line='3557' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='PyOS_getsig'>\r
       <parameter type-id='type-id-5' name='sig' filepath='Python/pylifecycle.c' line='3557' column='1'/>\r
-      <return type-id='type-id-1821'/>\r
+      <return type-id='type-id-1815'/>\r
     </function-decl>\r
     <function-decl name='PyOS_setsig' mangled-name='PyOS_setsig' filepath='Python/pylifecycle.c' line='3596' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='PyOS_setsig'>\r
       <parameter type-id='type-id-5' name='sig' filepath='Python/pylifecycle.c' line='3596' column='1'/>\r
-      <parameter type-id='type-id-1821' name='handler' filepath='Python/pylifecycle.c' line='3596' column='1'/>\r
-      <return type-id='type-id-1821'/>\r
+      <parameter type-id='type-id-1815' name='handler' filepath='Python/pylifecycle.c' line='3596' column='1'/>\r
+      <return type-id='type-id-1815'/>\r
     </function-decl>\r
   </abi-instr>\r
   <abi-instr address-size='64' path='Python/pystate.c' comp-dir-path='/home/runner/work/cpython/cpython' language='LANG_C11'>\r
-    <pointer-type-def type-id='type-id-1355' size-in-bits='64' id='type-id-1829'/>\r
-    <pointer-type-def type-id='type-id-1347' size-in-bits='64' id='type-id-1830'/>\r
-    <pointer-type-def type-id='type-id-1254' size-in-bits='64' id='type-id-1831'/>\r
-    <pointer-type-def type-id='type-id-1326' size-in-bits='64' id='type-id-1832'/>\r
+    <pointer-type-def type-id='type-id-1355' size-in-bits='64' id='type-id-1823'/>\r
+    <pointer-type-def type-id='type-id-1347' size-in-bits='64' id='type-id-1824'/>\r
+    <pointer-type-def type-id='type-id-1254' size-in-bits='64' id='type-id-1825'/>\r
+    <pointer-type-def type-id='type-id-1326' size-in-bits='64' id='type-id-1826'/>\r
     <function-decl name='_PyEval_InitState' filepath='./Include/internal/pycore_ceval.h' line='47' column='1' visibility='default' binding='global' size-in-bits='64'>\r
       <parameter type-id='type-id-33'/>\r
       <return type-id='type-id-3'/>\r
       <return type-id='type-id-3'/>\r
     </function-decl>\r
     <function-decl name='_PyGC_InitState' filepath='./Include/internal/pycore_gc.h' line='329' column='1' visibility='default' binding='global' size-in-bits='64'>\r
-      <parameter type-id='type-id-1831'/>\r
+      <parameter type-id='type-id-1825'/>\r
       <return type-id='type-id-3'/>\r
     </function-decl>\r
     <function-decl name='_PyImport_ClearCore' filepath='./Include/internal/pycore_import.h' line='55' column='1' visibility='default' binding='global' size-in-bits='64'>\r
     </function-decl>\r
     <var-decl name='_Py_tss_tstate' type-id='type-id-31' visibility='default' filepath='./Include/internal/pycore_pystate.h' line='92' column='1'/>\r
     <function-decl name='_PyThread_AfterFork' filepath='./Include/internal/pycore_pythread.h' line='95' column='1' visibility='default' binding='global' size-in-bits='64'>\r
-      <parameter type-id='type-id-1832'/>\r
+      <parameter type-id='type-id-1826'/>\r
       <return type-id='type-id-3'/>\r
     </function-decl>\r
     <function-decl name='PyThread_hang_thread' filepath='./Include/internal/pycore_pythread.h' line='167' column='1' visibility='default' binding='global' size-in-bits='64'>\r
       <return type-id='type-id-3'/>\r
     </function-decl>\r
     <function-decl name='_PyTime_Init' filepath='./Include/internal/pycore_time.h' line='329' column='1' visibility='default' binding='global' size-in-bits='64'>\r
-      <parameter type-id='type-id-1830'/>\r
+      <parameter type-id='type-id-1824'/>\r
       <return type-id='type-id-66'/>\r
     </function-decl>\r
     <function-decl name='_PyTypes_AfterFork' filepath='./Include/internal/pycore_typeobject.h' line='42' column='1' visibility='default' binding='global' size-in-bits='64'>\r
       <return type-id='type-id-2'/>\r
     </function-decl>\r
     <function-decl name='PyThread_tss_is_created' mangled-name='PyThread_tss_is_created' filepath='./Include/pythread.h' line='115' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='PyThread_tss_is_created'>\r
-      <parameter type-id='type-id-1829'/>\r
+      <parameter type-id='type-id-1823'/>\r
       <return type-id='type-id-5'/>\r
     </function-decl>\r
     <function-decl name='PyThread_tss_create' mangled-name='PyThread_tss_create' filepath='./Include/pythread.h' line='116' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='PyThread_tss_create'>\r
-      <parameter type-id='type-id-1829'/>\r
+      <parameter type-id='type-id-1823'/>\r
       <return type-id='type-id-5'/>\r
     </function-decl>\r
     <function-decl name='PyThread_tss_delete' mangled-name='PyThread_tss_delete' filepath='./Include/pythread.h' line='117' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='PyThread_tss_delete'>\r
-      <parameter type-id='type-id-1829'/>\r
+      <parameter type-id='type-id-1823'/>\r
       <return type-id='type-id-3'/>\r
     </function-decl>\r
     <function-decl name='PyThread_tss_set' mangled-name='PyThread_tss_set' filepath='./Include/pythread.h' line='118' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='PyThread_tss_set'>\r
-      <parameter type-id='type-id-1829'/>\r
+      <parameter type-id='type-id-1823'/>\r
       <parameter type-id='type-id-35'/>\r
       <return type-id='type-id-5'/>\r
     </function-decl>\r
     <function-decl name='PyThread_tss_get' mangled-name='PyThread_tss_get' filepath='./Include/pythread.h' line='119' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='PyThread_tss_get'>\r
-      <parameter type-id='type-id-1829'/>\r
+      <parameter type-id='type-id-1823'/>\r
       <return type-id='type-id-35'/>\r
     </function-decl>\r
     <function-decl name='_PyThreadState_GetCurrent' mangled-name='_PyThreadState_GetCurrent' filepath='Python/pystate.c' line='115' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='_PyThreadState_GetCurrent'>\r
     </function-decl>\r
   </abi-instr>\r
   <abi-instr address-size='64' path='Python/pytime.c' comp-dir-path='/home/runner/work/cpython/cpython' language='LANG_C11'>\r
-    <class-decl name='_Py_clock_info_t' size-in-bits='192' is-struct='yes' naming-typedef-id='type-id-1833' visibility='default' filepath='./Include/internal/pycore_time.h' line='246' column='1' id='type-id-1834'>\r
+    <class-decl name='_Py_clock_info_t' size-in-bits='192' is-struct='yes' naming-typedef-id='type-id-1827' visibility='default' filepath='./Include/internal/pycore_time.h' line='246' column='1' id='type-id-1828'>\r
       <data-member access='public' layout-offset-in-bits='0'>\r
         <var-decl name='implementation' type-id='type-id-4' visibility='default' filepath='./Include/internal/pycore_time.h' line='247' column='1'/>\r
       </data-member>\r
         <var-decl name='resolution' type-id='type-id-172' visibility='default' filepath='./Include/internal/pycore_time.h' line='250' column='1'/>\r
       </data-member>\r
     </class-decl>\r
-    <typedef-decl name='_Py_clock_info_t' type-id='type-id-1834' filepath='./Include/internal/pycore_time.h' line='251' column='1' id='type-id-1833'/>\r
+    <typedef-decl name='_Py_clock_info_t' type-id='type-id-1828' filepath='./Include/internal/pycore_time.h' line='251' column='1' id='type-id-1827'/>\r
     <class-decl name='tm' size-in-bits='448' is-struct='yes' visibility='default' filepath='/usr/include/x86_64-linux-gnu/bits/types/struct_tm.h' line='7' column='1' id='type-id-217'>\r
       <data-member access='public' layout-offset-in-bits='0'>\r
         <var-decl name='tm_sec' type-id='type-id-5' visibility='default' filepath='/usr/include/x86_64-linux-gnu/bits/types/struct_tm.h' line='9' column='1'/>\r
       </data-member>\r
     </class-decl>\r
     <typedef-decl name='time_t' type-id='type-id-544' filepath='/usr/include/x86_64-linux-gnu/bits/types/time_t.h' line='10' column='1' id='type-id-224'/>\r
-    <pointer-type-def type-id='type-id-1833' size-in-bits='64' id='type-id-222'/>\r
-    <qualified-type-def type-id='type-id-224' const='yes' id='type-id-1835'/>\r
-    <pointer-type-def type-id='type-id-1835' size-in-bits='64' id='type-id-1836'/>\r
-    <qualified-type-def type-id='type-id-1836' restrict='yes' id='type-id-1837'/>\r
+    <pointer-type-def type-id='type-id-1827' size-in-bits='64' id='type-id-222'/>\r
+    <qualified-type-def type-id='type-id-224' const='yes' id='type-id-1829'/>\r
+    <pointer-type-def type-id='type-id-1829' size-in-bits='64' id='type-id-1830'/>\r
+    <qualified-type-def type-id='type-id-1830' restrict='yes' id='type-id-1831'/>\r
     <pointer-type-def type-id='type-id-224' size-in-bits='64' id='type-id-223'/>\r
     <pointer-type-def type-id='type-id-199' size-in-bits='64' id='type-id-221'/>\r
     <pointer-type-def type-id='type-id-217' size-in-bits='64' id='type-id-225'/>\r
-    <qualified-type-def type-id='type-id-225' restrict='yes' id='type-id-1838'/>\r
+    <qualified-type-def type-id='type-id-225' restrict='yes' id='type-id-1832'/>\r
     <function-decl name='gmtime_r' filepath='/usr/include/time.h' line='154' column='1' visibility='default' binding='global' size-in-bits='64'>\r
-      <parameter type-id='type-id-1837'/>\r
-      <parameter type-id='type-id-1838'/>\r
+      <parameter type-id='type-id-1831'/>\r
+      <parameter type-id='type-id-1832'/>\r
       <return type-id='type-id-225'/>\r
     </function-decl>\r
     <function-decl name='localtime_r' filepath='/usr/include/time.h' line='159' column='1' visibility='default' binding='global' size-in-bits='64'>\r
-      <parameter type-id='type-id-1837'/>\r
-      <parameter type-id='type-id-1838'/>\r
+      <parameter type-id='type-id-1831'/>\r
+      <parameter type-id='type-id-1832'/>\r
       <return type-id='type-id-225'/>\r
     </function-decl>\r
     <function-decl name='clock_getres' filepath='/usr/include/time.h' line='276' column='1' visibility='default' binding='global' size-in-bits='64'>\r
     </function-decl>\r
   </abi-instr>\r
   <abi-instr address-size='64' path='Python/remote_debugging.c' comp-dir-path='/home/runner/work/cpython/cpython' language='LANG_C11'>\r
-    <class-decl name='iovec' size-in-bits='128' is-struct='yes' visibility='default' filepath='/usr/include/x86_64-linux-gnu/bits/types/struct_iovec.h' line='26' column='1' id='type-id-1839'>\r
+    <class-decl name='iovec' size-in-bits='128' is-struct='yes' visibility='default' filepath='/usr/include/x86_64-linux-gnu/bits/types/struct_iovec.h' line='26' column='1' id='type-id-1833'>\r
       <data-member access='public' layout-offset-in-bits='0'>\r
         <var-decl name='iov_base' type-id='type-id-35' visibility='default' filepath='/usr/include/x86_64-linux-gnu/bits/types/struct_iovec.h' line='28' column='1'/>\r
       </data-member>\r
       </data-member>\r
     </class-decl>\r
     <typedef-decl name='pid_t' type-id='type-id-178' filepath='/usr/include/x86_64-linux-gnu/sys/types.h' line='97' column='1' id='type-id-85'/>\r
-    <qualified-type-def type-id='type-id-1839' const='yes' id='type-id-1840'/>\r
-    <pointer-type-def type-id='type-id-1840' size-in-bits='64' id='type-id-189'/>\r
+    <qualified-type-def type-id='type-id-1833' const='yes' id='type-id-1834'/>\r
+    <pointer-type-def type-id='type-id-1834' size-in-bits='64' id='type-id-189'/>\r
     <function-decl name='process_vm_readv' filepath='/usr/include/x86_64-linux-gnu/bits/uio-ext.h' line='29' column='1' visibility='default' binding='global' size-in-bits='64'>\r
       <parameter type-id='type-id-85'/>\r
       <parameter type-id='type-id-189'/>\r
     </function-decl>\r
   </abi-instr>\r
   <abi-instr address-size='64' path='Python/specialize.c' comp-dir-path='/home/runner/work/cpython/cpython' language='LANG_C11'>\r
-    <class-decl name='_PyCode8' size-in-bits='1728' is-struct='yes' visibility='default' filepath='./Include/internal/pycore_code.h' line='520' column='1' id='type-id-1841'>\r
+    <class-decl name='_PyCode8' size-in-bits='1728' is-struct='yes' visibility='default' filepath='./Include/internal/pycore_code.h' line='520' column='1' id='type-id-1835'>\r
       <data-member access='public' layout-offset-in-bits='0'>\r
         <var-decl name='ob_base' type-id='type-id-254' visibility='default' filepath='./Include/internal/pycore_code.h' line='520' column='1'/>\r
       </data-member>\r
         <var-decl name='co_code_adaptive' type-id='type-id-866' visibility='default' filepath='./Include/internal/pycore_code.h' line='520' column='1'/>\r
       </data-member>\r
     </class-decl>\r
-    <typedef-decl name='_py_validate_type' type-id='type-id-1028' filepath='./Include/internal/pycore_typeobject.h' line='144' column='1' id='type-id-1842'/>\r
-    <qualified-type-def type-id='type-id-1841' const='yes' id='type-id-1843'/>\r
-    <pointer-type-def type-id='type-id-105' size-in-bits='64' id='type-id-1844'/>\r
-    <var-decl name='_Py_InitCleanup' type-id='type-id-1843' mangled-name='_Py_InitCleanup' visibility='default' filepath='./Include/internal/pycore_code.h' line='522' column='1' elf-symbol-id='_Py_InitCleanup'/>\r
+    <typedef-decl name='_py_validate_type' type-id='type-id-1028' filepath='./Include/internal/pycore_typeobject.h' line='144' column='1' id='type-id-1836'/>\r
+    <qualified-type-def type-id='type-id-1835' const='yes' id='type-id-1837'/>\r
+    <pointer-type-def type-id='type-id-105' size-in-bits='64' id='type-id-1838'/>\r
+    <var-decl name='_Py_InitCleanup' type-id='type-id-1837' mangled-name='_Py_InitCleanup' visibility='default' filepath='./Include/internal/pycore_code.h' line='522' column='1' elf-symbol-id='_Py_InitCleanup'/>\r
     <function-decl name='_PyDict_GetKeysVersionForCurrentState' filepath='./Include/internal/pycore_dict.h' line='102' column='1' visibility='default' binding='global' size-in-bits='64'>\r
       <parameter type-id='type-id-33'/>\r
       <parameter type-id='type-id-394'/>\r
     <function-decl name='_PyType_LookupRefAndVersion' filepath='./Include/internal/pycore_object.h' line='891' column='1' visibility='default' binding='global' size-in-bits='64'>\r
       <parameter type-id='type-id-1'/>\r
       <parameter type-id='type-id-6'/>\r
-      <parameter type-id='type-id-1844'/>\r
+      <parameter type-id='type-id-1838'/>\r
       <return type-id='type-id-6'/>\r
     </function-decl>\r
     <function-decl name='_PyType_CacheInitForSpecialization' filepath='./Include/internal/pycore_object.h' line='908' column='1' visibility='default' binding='global' size-in-bits='64'>\r
     </function-decl>\r
     <function-decl name='_PyType_Validate' filepath='./Include/internal/pycore_typeobject.h' line='149' column='1' visibility='default' binding='global' size-in-bits='64'>\r
       <parameter type-id='type-id-1'/>\r
-      <parameter type-id='type-id-1842'/>\r
-      <parameter type-id='type-id-1844'/>\r
+      <parameter type-id='type-id-1836'/>\r
+      <parameter type-id='type-id-1838'/>\r
       <return type-id='type-id-5'/>\r
     </function-decl>\r
     <function-decl name='_PyType_CacheGetItemForSpecialization' filepath='./Include/internal/pycore_typeobject.h' line='150' column='1' visibility='default' binding='global' size-in-bits='64'>\r
     <var-decl name='PySTEntry_Type' type-id='type-id-271' visibility='default' filepath='./Include/internal/pycore_symtable.h' line='136' column='1'/>\r
   </abi-instr>\r
   <abi-instr address-size='64' path='Python/thread.c' comp-dir-path='/home/runner/work/cpython/cpython' language='LANG_C11'>\r
-    <typedef-decl name='PyThread_handle_t' type-id='type-id-443' filepath='./Include/internal/pycore_pythread.h' line='120' column='1' id='type-id-1845'/>\r
-    <pointer-type-def type-id='type-id-1845' size-in-bits='64' id='type-id-1846'/>\r
-    <pointer-type-def type-id='type-id-1728' size-in-bits='64' id='type-id-1847'/>\r
-    <qualified-type-def type-id='type-id-463' const='yes' id='type-id-1848'/>\r
-    <qualified-type-def type-id='type-id-1329' const='yes' id='type-id-1849'/>\r
+    <typedef-decl name='PyThread_handle_t' type-id='type-id-443' filepath='./Include/internal/pycore_pythread.h' line='120' column='1' id='type-id-1839'/>\r
+    <pointer-type-def type-id='type-id-1839' size-in-bits='64' id='type-id-1840'/>\r
+    <pointer-type-def type-id='type-id-1722' size-in-bits='64' id='type-id-1841'/>\r
+    <qualified-type-def type-id='type-id-463' const='yes' id='type-id-1842'/>\r
+    <qualified-type-def type-id='type-id-1329' const='yes' id='type-id-1843'/>\r
+    <pointer-type-def type-id='type-id-1843' size-in-bits='64' id='type-id-1844'/>\r
+    <qualified-type-def type-id='type-id-1844' restrict='yes' id='type-id-1845'/>\r
+    <pointer-type-def type-id='type-id-463' size-in-bits='64' id='type-id-1846'/>\r
+    <pointer-type-def type-id='type-id-32' size-in-bits='64' id='type-id-1847'/>\r
+    <qualified-type-def type-id='type-id-1847' restrict='yes' id='type-id-1848'/>\r
     <pointer-type-def type-id='type-id-1849' size-in-bits='64' id='type-id-1850'/>\r
-    <qualified-type-def type-id='type-id-1850' restrict='yes' id='type-id-1851'/>\r
-    <pointer-type-def type-id='type-id-463' size-in-bits='64' id='type-id-1852'/>\r
-    <pointer-type-def type-id='type-id-32' size-in-bits='64' id='type-id-1853'/>\r
-    <qualified-type-def type-id='type-id-1853' restrict='yes' id='type-id-1854'/>\r
-    <pointer-type-def type-id='type-id-1855' size-in-bits='64' id='type-id-1856'/>\r
-    <var-decl name='PY_TIMEOUT_MAX' type-id='type-id-1848' mangled-name='PY_TIMEOUT_MAX' visibility='default' filepath='./Include/cpython/pythread.h' line='11' column='1' elf-symbol-id='PY_TIMEOUT_MAX'/>\r
+    <var-decl name='PY_TIMEOUT_MAX' type-id='type-id-1842' mangled-name='PY_TIMEOUT_MAX' visibility='default' filepath='./Include/cpython/pythread.h' line='11' column='1' elf-symbol-id='PY_TIMEOUT_MAX'/>\r
     <function-decl name='_PyTime_FromMicrosecondsClamp' filepath='./Include/internal/pycore_time.h' line='148' column='1' visibility='default' binding='global' size-in-bits='64'>\r
       <parameter type-id='type-id-28'/>\r
       <return type-id='type-id-28'/>\r
     </function-decl>\r
     <function-decl name='pthread_create' filepath='/usr/include/pthread.h' line='202' column='1' visibility='default' binding='global' size-in-bits='64'>\r
-      <parameter type-id='type-id-1854'/>\r
+      <parameter type-id='type-id-1848'/>\r
       <parameter type-id='type-id-1589'/>\r
-      <parameter type-id='type-id-1856'/>\r
+      <parameter type-id='type-id-1850'/>\r
       <parameter type-id='type-id-231'/>\r
       <return type-id='type-id-5'/>\r
     </function-decl>\r
     </function-decl>\r
     <function-decl name='pthread_cond_init' filepath='/usr/include/pthread.h' line='1112' column='1' visibility='default' binding='global' size-in-bits='64'>\r
       <parameter type-id='type-id-1599'/>\r
-      <parameter type-id='type-id-1851'/>\r
+      <parameter type-id='type-id-1845'/>\r
       <return type-id='type-id-5'/>\r
     </function-decl>\r
     <function-decl name='pthread_condattr_init' filepath='/usr/include/pthread.h' line='1194' column='1' visibility='default' binding='global' size-in-bits='64'>\r
       <return type-id='type-id-35'/>\r
     </function-decl>\r
     <function-decl name='sem_trywait' filepath='/usr/include/semaphore.h' line='100' column='1' visibility='default' binding='global' size-in-bits='64'>\r
-      <parameter type-id='type-id-1796'/>\r
+      <parameter type-id='type-id-1790'/>\r
       <return type-id='type-id-5'/>\r
     </function-decl>\r
     <function-decl name='perror' filepath='/usr/include/stdio.h' line='804' column='1' visibility='default' binding='global' size-in-bits='64'>\r
     <function-decl name='PyThread_ParseTimeoutArg' mangled-name='PyThread_ParseTimeoutArg' filepath='Python/thread.c' line='98' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='PyThread_ParseTimeoutArg'>\r
       <parameter type-id='type-id-6' name='arg' filepath='Python/thread.c' line='98' column='1'/>\r
       <parameter type-id='type-id-5' name='blocking' filepath='Python/thread.c' line='98' column='1'/>\r
-      <parameter type-id='type-id-1852' name='timeout_p' filepath='Python/thread.c' line='98' column='1'/>\r
+      <parameter type-id='type-id-1846' name='timeout_p' filepath='Python/thread.c' line='98' column='1'/>\r
       <return type-id='type-id-5'/>\r
     </function-decl>\r
     <function-decl name='PyThread_acquire_lock_timed_with_retries' mangled-name='PyThread_acquire_lock_timed_with_retries' filepath='Python/thread.c' line='132' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='PyThread_acquire_lock_timed_with_retries'>\r
       <return type-id='type-id-30'/>\r
     </function-decl>\r
     <function-decl name='PyThread_tss_alloc' mangled-name='PyThread_tss_alloc' filepath='Python/thread.c' line='186' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='PyThread_tss_alloc'>\r
-      <return type-id='type-id-1829'/>\r
+      <return type-id='type-id-1823'/>\r
     </function-decl>\r
     <function-decl name='PyThread_tss_free' mangled-name='PyThread_tss_free' filepath='Python/thread.c' line='197' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='PyThread_tss_free'>\r
-      <parameter type-id='type-id-1829' name='key' filepath='Python/thread.c' line='197' column='1'/>\r
+      <parameter type-id='type-id-1823' name='key' filepath='Python/thread.c' line='197' column='1'/>\r
       <return type-id='type-id-3'/>\r
     </function-decl>\r
     <function-decl name='PyThread_start_joinable_thread' mangled-name='PyThread_start_joinable_thread' filepath='Python/thread_pthread.h' line='328' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='PyThread_start_joinable_thread'>\r
       <parameter type-id='type-id-572' name='func' filepath='Python/thread_pthread.h' line='328' column='1'/>\r
       <parameter type-id='type-id-35' name='arg' filepath='Python/thread_pthread.h' line='328' column='1'/>\r
-      <parameter type-id='type-id-1847' name='ident' filepath='Python/thread_pthread.h' line='329' column='1'/>\r
-      <parameter type-id='type-id-1846' name='handle' filepath='Python/thread_pthread.h' line='329' column='1'/>\r
+      <parameter type-id='type-id-1841' name='ident' filepath='Python/thread_pthread.h' line='329' column='1'/>\r
+      <parameter type-id='type-id-1840' name='handle' filepath='Python/thread_pthread.h' line='329' column='1'/>\r
       <return type-id='type-id-5'/>\r
     </function-decl>\r
     <function-decl name='PyThread_start_new_thread' mangled-name='PyThread_start_new_thread' filepath='Python/thread_pthread.h' line='341' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='PyThread_start_new_thread'>\r
       <return type-id='type-id-2'/>\r
     </function-decl>\r
     <function-decl name='PyThread_join_thread' mangled-name='PyThread_join_thread' filepath='Python/thread_pthread.h' line='352' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='PyThread_join_thread'>\r
-      <parameter type-id='type-id-1845' name='th' filepath='Python/thread_pthread.h' line='352' column='1'/>\r
+      <parameter type-id='type-id-1839' name='th' filepath='Python/thread_pthread.h' line='352' column='1'/>\r
       <return type-id='type-id-5'/>\r
     </function-decl>\r
     <function-decl name='PyThread_detach_thread' mangled-name='PyThread_detach_thread' filepath='Python/thread_pthread.h' line='357' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='PyThread_detach_thread'>\r
-      <parameter type-id='type-id-1845' name='th' filepath='Python/thread_pthread.h' line='357' column='1'/>\r
+      <parameter type-id='type-id-1839' name='th' filepath='Python/thread_pthread.h' line='357' column='1'/>\r
       <return type-id='type-id-5'/>\r
     </function-decl>\r
     <function-decl name='PyThread_exit_thread' mangled-name='PyThread_exit_thread' filepath='Python/thread_pthread.h' line='418' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='PyThread_exit_thread'>\r
     <function-decl name='PyThread_ReInitTLS' mangled-name='PyThread_ReInitTLS' filepath='Python/thread_pthread.h' line='948' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='PyThread_ReInitTLS'>\r
       <return type-id='type-id-3'/>\r
     </function-decl>\r
-    <function-type size-in-bits='64' id='type-id-1855'>\r
+    <function-type size-in-bits='64' id='type-id-1849'>\r
       <parameter type-id='type-id-35'/>\r
       <return type-id='type-id-35'/>\r
     </function-type>\r
   </abi-instr>\r
   <abi-instr address-size='64' path='Python/traceback.c' comp-dir-path='/home/runner/work/cpython/cpython' language='LANG_C11'>\r
-    <class-decl name='Dl_info' size-in-bits='256' is-struct='yes' naming-typedef-id='type-id-1857' visibility='default' filepath='/usr/include/dlfcn.h' line='90' column='1' id='type-id-1858'>\r
+    <class-decl name='Dl_info' size-in-bits='256' is-struct='yes' naming-typedef-id='type-id-1851' visibility='default' filepath='/usr/include/dlfcn.h' line='90' column='1' id='type-id-1852'>\r
       <data-member access='public' layout-offset-in-bits='0'>\r
         <var-decl name='dli_fname' type-id='type-id-4' visibility='default' filepath='/usr/include/dlfcn.h' line='92' column='1'/>\r
       </data-member>\r
         <var-decl name='dli_saddr' type-id='type-id-35' visibility='default' filepath='/usr/include/dlfcn.h' line='95' column='1'/>\r
       </data-member>\r
     </class-decl>\r
-    <typedef-decl name='Dl_info' type-id='type-id-1858' filepath='/usr/include/dlfcn.h' line='96' column='1' id='type-id-1857'/>\r
-    <pointer-type-def type-id='type-id-1857' size-in-bits='64' id='type-id-67'/>\r
+    <typedef-decl name='Dl_info' type-id='type-id-1852' filepath='/usr/include/dlfcn.h' line='96' column='1' id='type-id-1851'/>\r
+    <pointer-type-def type-id='type-id-1851' size-in-bits='64' id='type-id-67'/>\r
     <function-decl name='_PyObject_CallMethodFormat' filepath='./Include/internal/pycore_call.h' line='55' column='1' visibility='default' binding='global' size-in-bits='64'>\r
       <parameter type-id='type-id-31'/>\r
       <parameter type-id='type-id-6'/>\r
index 45fa47d62c78a3e2d75d056b442a1112fd9a0120..1272927413868b6f5eb84cb27c2385c82bb6fe0a 100644 (file)
@@ -335,24 +335,9 @@ typedef struct _sharedexception {
 PyAPI_FUNC(PyObject *) _PyXI_ApplyError(_PyXI_error *err);
 
 
-typedef struct xi_session _PyXI_session;
-typedef struct _sharedns _PyXI_namespace;
-
-PyAPI_FUNC(void) _PyXI_FreeNamespace(_PyXI_namespace *ns);
-PyAPI_FUNC(_PyXI_namespace *) _PyXI_NamespaceFromNames(PyObject *names);
-PyAPI_FUNC(int) _PyXI_FillNamespaceFromDict(
-    _PyXI_namespace *ns,
-    PyObject *nsobj,
-    _PyXI_session *session);
-PyAPI_FUNC(int) _PyXI_ApplyNamespace(
-    _PyXI_namespace *ns,
-    PyObject *nsobj,
-    PyObject *dflt);
-
-
 // A cross-interpreter session involves entering an interpreter
-// (_PyXI_Enter()), doing some work with it, and finally exiting
-// that interpreter (_PyXI_Exit()).
+// with _PyXI_Enter(), doing some work with it, and finally exiting
+// that interpreter with _PyXI_Exit().
 //
 // At the boundaries of the session, both entering and exiting,
 // data may be exchanged between the previous interpreter and the
@@ -360,39 +345,10 @@ PyAPI_FUNC(int) _PyXI_ApplyNamespace(
 // isolation between interpreters.  This includes setting objects
 // in the target's __main__ module on the way in, and capturing
 // uncaught exceptions on the way out.
-struct xi_session {
-    // Once a session has been entered, this is the tstate that was
-    // current before the session.  If it is different from cur_tstate
-    // then we must have switched interpreters.  Either way, this will
-    // be the current tstate once we exit the session.
-    PyThreadState *prev_tstate;
-    // Once a session has been entered, this is the current tstate.
-    // It must be current when the session exits.
-    PyThreadState *init_tstate;
-    // This is true if init_tstate needs cleanup during exit.
-    int own_init_tstate;
-
-    // This is true if, while entering the session, init_thread took
-    // "ownership" of the interpreter's __main__ module.  This means
-    // it is the only thread that is allowed to run code there.
-    // (Caveat: for now, users may still run exec() against the
-    // __main__ module's dict, though that isn't advisable.)
-    int running;
-    // This is a cached reference to the __dict__ of the entered
-    // interpreter's __main__ module.  It is looked up when at the
-    // beginning of the session as a convenience.
-    PyObject *main_ns;
-
-    // This is set if the interpreter is entered and raised an exception
-    // that needs to be handled in some special way during exit.
-    _PyXI_errcode *error_override;
-    // This is set if exit captured an exception to propagate.
-    _PyXI_error *error;
-
-    // -- pre-allocated memory --
-    _PyXI_error _error;
-    _PyXI_errcode _error_override;
-};
+typedef struct xi_session _PyXI_session;
+
+PyAPI_FUNC(_PyXI_session *) _PyXI_NewSession(void);
+PyAPI_FUNC(void) _PyXI_FreeSession(_PyXI_session *);
 
 PyAPI_FUNC(int) _PyXI_Enter(
     _PyXI_session *session,
@@ -400,6 +356,8 @@ PyAPI_FUNC(int) _PyXI_Enter(
     PyObject *nsupdates);
 PyAPI_FUNC(void) _PyXI_Exit(_PyXI_session *session);
 
+PyAPI_FUNC(PyObject *) _PyXI_GetMainNamespace(_PyXI_session *);
+
 PyAPI_FUNC(PyObject *) _PyXI_ApplyCapturedException(_PyXI_session *session);
 PyAPI_FUNC(int) _PyXI_HasCapturedException(_PyXI_session *session);
 
index 7f84b38a70e127564b4d5a7a2112b34a25a0c789..376517ab92360fa36a206015ea4af509112e953f 100644 (file)
@@ -444,42 +444,54 @@ _exec_in_interpreter(PyThreadState *tstate, PyInterpreterState *interp,
                     PyObject **p_excinfo)
 {
     assert(!_PyErr_Occurred(tstate));
-    _PyXI_session session = {0};
+    _PyXI_session *session = _PyXI_NewSession();
+    if (session == NULL) {
+        return -1;
+    }
 
     // Prep and switch interpreters.
-    if (_PyXI_Enter(&session, interp, shareables) < 0) {
+    if (_PyXI_Enter(session, interp, shareables) < 0) {
         if (_PyErr_Occurred(tstate)) {
             // If an error occured at this step, it means that interp
             // was not prepared and switched.
+            _PyXI_FreeSession(session);
             return -1;
         }
         // Now, apply the error from another interpreter:
-        PyObject *excinfo = _PyXI_ApplyError(session.error);
+        PyObject *excinfo = _PyXI_ApplyCapturedException(session);
         if (excinfo != NULL) {
             *p_excinfo = excinfo;
         }
         assert(PyErr_Occurred());
+        _PyXI_FreeSession(session);
         return -1;
     }
 
     // Run the script.
-    int res = _run_script(script, session.main_ns);
+    int res = -1;
+    PyObject *mainns = _PyXI_GetMainNamespace(session);
+    if (mainns == NULL) {
+        goto finally;
+    }
+    res = _run_script(script, mainns);
 
+finally:
     // Clean up and switch back.
-    _PyXI_Exit(&session);
+    _PyXI_Exit(session);
 
     // Propagate any exception out to the caller.
     assert(!PyErr_Occurred());
     if (res < 0) {
-        PyObject *excinfo = _PyXI_ApplyCapturedException(&session);
+        PyObject *excinfo = _PyXI_ApplyCapturedException(session);
         if (excinfo != NULL) {
             *p_excinfo = excinfo;
         }
     }
     else {
-        assert(!_PyXI_HasCapturedException(&session));
+        assert(!_PyXI_HasCapturedException(session));
     }
 
+    _PyXI_FreeSession(session);
     return res;
 }
 
@@ -824,22 +836,27 @@ interp_set___main___attrs(PyObject *self, PyObject *args, PyObject *kwargs)
         }
     }
 
-    _PyXI_session session = {0};
+    _PyXI_session *session = _PyXI_NewSession();
+    if (session == NULL) {
+        return NULL;
+    }
 
     // Prep and switch interpreters, including apply the updates.
-    if (_PyXI_Enter(&session, interp, updates) < 0) {
+    if (_PyXI_Enter(session, interp, updates) < 0) {
         if (!PyErr_Occurred()) {
-            _PyXI_ApplyCapturedException(&session);
+            _PyXI_ApplyCapturedException(session);
             assert(PyErr_Occurred());
         }
         else {
-            assert(!_PyXI_HasCapturedException(&session));
+            assert(!_PyXI_HasCapturedException(session));
         }
+        _PyXI_FreeSession(session);
         return NULL;
     }
 
     // Clean up and switch back.
-    _PyXI_Exit(&session);
+    _PyXI_Exit(session);
+    _PyXI_FreeSession(session);
 
     Py_RETURN_NONE;
 }
index 6681b969183925face0ca725ac502b5b12004233..65ccab32daf730056de023eea1d5048655f35d12 100644 (file)
@@ -1914,156 +1914,212 @@ _sharednsitem_apply(_PyXI_namespace_item *item, PyObject *ns, PyObject *dflt)
     return res;
 }
 
-struct _sharedns {
-    Py_ssize_t len;
-    _PyXI_namespace_item *items;
-};
 
-static _PyXI_namespace *
-_sharedns_new(void)
-{
-    _PyXI_namespace *ns = PyMem_RawCalloc(sizeof(_PyXI_namespace), 1);
-    if (ns == NULL) {
-        PyErr_NoMemory();
-        return NULL;
-    }
-    *ns = (_PyXI_namespace){ 0 };
-    return ns;
-}
+typedef struct {
+    Py_ssize_t maxitems;
+    Py_ssize_t numnames;
+    Py_ssize_t numvalues;
+    _PyXI_namespace_item items[1];
+} _PyXI_namespace;
 
+#ifndef NDEBUG
 static int
-_sharedns_is_initialized(_PyXI_namespace *ns)
+_sharedns_check_counts(_PyXI_namespace *ns)
 {
-    if (ns->len == 0) {
-        assert(ns->items == NULL);
+    if (ns->maxitems <= 0) {
+        return 0;
+    }
+    if (ns->numnames < 0) {
+        return 0;
+    }
+    if (ns->numnames > ns->maxitems) {
+        return 0;
+    }
+    if (ns->numvalues < 0) {
+        return 0;
+    }
+    if (ns->numvalues > ns->numnames) {
         return 0;
     }
-
-    assert(ns->len > 0);
-    assert(ns->items != NULL);
-    assert(_sharednsitem_is_initialized(&ns->items[0]));
-    assert(ns->len == 1
-           || _sharednsitem_is_initialized(&ns->items[ns->len - 1]));
     return 1;
 }
 
-#define HAS_COMPLETE_DATA 1
-#define HAS_PARTIAL_DATA 2
-
 static int
-_sharedns_has_xidata(_PyXI_namespace *ns, int64_t *p_interpid)
+_sharedns_check_consistency(_PyXI_namespace *ns)
 {
-    // We expect _PyXI_namespace to always be initialized.
-    assert(_sharedns_is_initialized(ns));
-    int res = 0;
-    _PyXI_namespace_item *item0 = &ns->items[0];
-    if (!_sharednsitem_is_initialized(item0)) {
+    if (!_sharedns_check_counts(ns)) {
         return 0;
     }
-    int64_t interpid0 = -1;
-    if (!_sharednsitem_has_value(item0, &interpid0)) {
-        return 0;
+
+    Py_ssize_t i = 0;
+    _PyXI_namespace_item *item;
+    if (ns->numvalues > 0) {
+        item = &ns->items[0];
+        if (!_sharednsitem_is_initialized(item)) {
+            return 0;
+        }
+        int64_t interpid0 = -1;
+        if (!_sharednsitem_has_value(item, &interpid0)) {
+            return 0;
+        }
+        i += 1;
+        for (; i < ns->numvalues; i++) {
+            item = &ns->items[i];
+            if (!_sharednsitem_is_initialized(item)) {
+                return 0;
+            }
+            int64_t interpid = -1;
+            if (!_sharednsitem_has_value(item, &interpid)) {
+                return 0;
+            }
+            if (interpid != interpid0) {
+                return 0;
+            }
+        }
     }
-    if (ns->len > 1) {
-        // At this point we know it is has at least partial data.
-        _PyXI_namespace_item *itemN = &ns->items[ns->len-1];
-        if (!_sharednsitem_is_initialized(itemN)) {
-            res = HAS_PARTIAL_DATA;
-            goto finally;
+    for (; i < ns->numnames; i++) {
+        item = &ns->items[i];
+        if (!_sharednsitem_is_initialized(item)) {
+            return 0;
         }
-        int64_t interpidN = -1;
-        if (!_sharednsitem_has_value(itemN, &interpidN)) {
-            res = HAS_PARTIAL_DATA;
-            goto finally;
+        if (_sharednsitem_has_value(item, NULL)) {
+            return 0;
         }
-        assert(interpidN == interpid0);
     }
-    res = HAS_COMPLETE_DATA;
-    *p_interpid = interpid0;
-
-finally:
-    return res;
+    for (; i < ns->maxitems; i++) {
+        item = &ns->items[i];
+        if (_sharednsitem_is_initialized(item)) {
+            return 0;
+        }
+        if (_sharednsitem_has_value(item, NULL)) {
+            return 0;
+        }
+    }
+    return 1;
 }
+#endif
 
-static void
-_sharedns_clear(_PyXI_namespace *ns)
+static _PyXI_namespace *
+_sharedns_alloc(Py_ssize_t maxitems)
 {
-    if (!_sharedns_is_initialized(ns)) {
-        return;
+    if (maxitems < 0) {
+        if (!PyErr_Occurred()) {
+            PyErr_BadInternalCall();
+        }
+        return NULL;
+    }
+    else if (maxitems == 0) {
+        PyErr_SetString(PyExc_ValueError, "empty namespaces not allowed");
+        return NULL;
     }
 
-    // If the cross-interpreter data were allocated as part of
-    // _PyXI_namespace_item (instead of dynamically), this is where
-    // we would need verify that we are clearing the items in the
-    // correct interpreter, to avoid a race with releasing the XI data
-    // via a pending call.  See _sharedns_has_xidata().
-    for (Py_ssize_t i=0; i < ns->len; i++) {
-        _sharednsitem_clear(&ns->items[i]);
+    // Check for overflow.
+    size_t fixedsize = sizeof(_PyXI_namespace) - sizeof(_PyXI_namespace_item);
+    if ((size_t)maxitems >
+        ((size_t)PY_SSIZE_T_MAX - fixedsize) / sizeof(_PyXI_namespace_item))
+    {
+        PyErr_NoMemory();
+        return NULL;
+    }
+
+    // Allocate the value, including items.
+    size_t size = fixedsize + sizeof(_PyXI_namespace_item) * maxitems;
+
+    _PyXI_namespace *ns = PyMem_RawCalloc(size, 1);
+    if (ns == NULL) {
+        PyErr_NoMemory();
+        return NULL;
     }
-    PyMem_RawFree(ns->items);
-    ns->items = NULL;
-    ns->len = 0;
+    ns->maxitems = maxitems;
+    assert(_sharedns_check_consistency(ns));
+    return ns;
 }
 
 static void
 _sharedns_free(_PyXI_namespace *ns)
 {
-    _sharedns_clear(ns);
+    // If we weren't always dynamically allocating the cross-interpreter
+    // data in each item then we would need to use a pending call
+    // to call _sharedns_free(), to avoid the race between freeing
+    // the shared namespace and releasing the XI data.
+    assert(_sharedns_check_counts(ns));
+    Py_ssize_t i = 0;
+    _PyXI_namespace_item *item;
+    if (ns->numvalues > 0) {
+        // One or more items may have interpreter-specific data.
+#ifndef NDEBUG
+        int64_t interpid = PyInterpreterState_GetID(PyInterpreterState_Get());
+        int64_t interpid_i;
+#endif
+        for (; i < ns->numvalues; i++) {
+            item = &ns->items[i];
+            assert(_sharednsitem_is_initialized(item));
+            // While we do want to ensure consistency across items,
+            // technically they don't need to match the current
+            // interpreter.  However, we keep the constraint for
+            // simplicity, by giving _PyXI_FreeNamespace() the exclusive
+            // responsibility of dealing with the owning interpreter.
+            assert(_sharednsitem_has_value(item, &interpid_i));
+            assert(interpid_i == interpid);
+            _sharednsitem_clear(item);
+        }
+    }
+    for (; i < ns->numnames; i++) {
+        item = &ns->items[i];
+        assert(_sharednsitem_is_initialized(item));
+        assert(!_sharednsitem_has_value(item, NULL));
+        _sharednsitem_clear(item);
+    }
+#ifndef NDEBUG
+    for (; i < ns->maxitems; i++) {
+        item = &ns->items[i];
+        assert(!_sharednsitem_is_initialized(item));
+        assert(!_sharednsitem_has_value(item, NULL));
+    }
+#endif
+
     PyMem_RawFree(ns);
 }
 
-static int
-_sharedns_init(_PyXI_namespace *ns, PyObject *names)
+static _PyXI_namespace *
+_create_sharedns(PyObject *names)
 {
-    assert(!_sharedns_is_initialized(ns));
     assert(names != NULL);
-    Py_ssize_t len = PyDict_CheckExact(names)
+    Py_ssize_t numnames = PyDict_CheckExact(names)
         ? PyDict_Size(names)
         : PySequence_Size(names);
-    if (len < 0) {
-        return -1;
-    }
-    if (len == 0) {
-        PyErr_SetString(PyExc_ValueError, "empty namespaces not allowed");
-        return -1;
-    }
-    assert(len > 0);
 
-    // Allocate the items.
-    _PyXI_namespace_item *items =
-            PyMem_RawCalloc(sizeof(struct _sharednsitem), len);
-    if (items == NULL) {
-        PyErr_NoMemory();
-        return -1;
+    _PyXI_namespace *ns = _sharedns_alloc(numnames);
+    if (ns == NULL) {
+        return NULL;
     }
+    _PyXI_namespace_item *items = ns->items;
 
     // Fill in the names.
-    Py_ssize_t i = -1;
     if (PyDict_CheckExact(names)) {
+        Py_ssize_t i = 0;
         Py_ssize_t pos = 0;
-        for (i=0; i < len; i++) {
-            PyObject *key;
-            if (!PyDict_Next(names, &pos, &key, NULL)) {
-                // This should not be possible.
-                assert(0);
-                goto error;
-            }
-            if (_sharednsitem_init(&items[i], key) < 0) {
+        PyObject *name;
+        while(PyDict_Next(names, &pos, &name, NULL)) {
+            if (_sharednsitem_init(&items[i], name) < 0) {
                 goto error;
             }
+            ns->numnames += 1;
+            i += 1;
         }
     }
     else if (PySequence_Check(names)) {
-        for (i=0; i < len; i++) {
-            PyObject *key = PySequence_GetItem(names, i);
-            if (key == NULL) {
+        for (Py_ssize_t i = 0; i < numnames; i++) {
+            PyObject *name = PySequence_GetItem(names, i);
+            if (name == NULL) {
                 goto error;
             }
-            int res = _sharednsitem_init(&items[i], key);
-            Py_DECREF(key);
+            int res = _sharednsitem_init(&items[i], name);
+            Py_DECREF(name);
             if (res < 0) {
                 goto error;
             }
+            ns->numnames += 1;
         }
     }
     else {
@@ -2071,140 +2127,79 @@ _sharedns_init(_PyXI_namespace *ns, PyObject *names)
                         "non-sequence namespace not supported");
         goto error;
     }
-
-    ns->items = items;
-    ns->len = len;
-    assert(_sharedns_is_initialized(ns));
-    return 0;
+    assert(ns->numnames == ns->maxitems);
+    return ns;
 
 error:
-    for (Py_ssize_t j=0; j < i; j++) {
-        _sharednsitem_clear(&items[j]);
-    }
-    PyMem_RawFree(items);
-    assert(!_sharedns_is_initialized(ns));
-    return -1;
-}
-
-void
-_PyXI_FreeNamespace(_PyXI_namespace *ns)
-{
-    if (!_sharedns_is_initialized(ns)) {
-        return;
-    }
-
-    int64_t interpid = -1;
-    if (!_sharedns_has_xidata(ns, &interpid)) {
-        _sharedns_free(ns);
-        return;
-    }
-
-    if (interpid == PyInterpreterState_GetID(PyInterpreterState_Get())) {
-        _sharedns_free(ns);
-    }
-    else {
-        // If we weren't always dynamically allocating the cross-interpreter
-        // data in each item then we would need to using a pending call
-        // to call _sharedns_free(), to avoid the race between freeing
-        // the shared namespace and releasing the XI data.
-        _sharedns_free(ns);
-    }
-}
-
-_PyXI_namespace *
-_PyXI_NamespaceFromNames(PyObject *names)
-{
-    if (names == NULL || names == Py_None) {
-        return NULL;
-    }
-
-    _PyXI_namespace *ns = _sharedns_new();
-    if (ns == NULL) {
-        return NULL;
-    }
-
-    if (_sharedns_init(ns, names) < 0) {
-        PyMem_RawFree(ns);
-        if (PySequence_Size(names) == 0) {
-            PyErr_Clear();
-        }
-        return NULL;
-    }
-
-    return ns;
+    _sharedns_free(ns);
+    return NULL;
 }
 
-#ifndef NDEBUG
-static int _session_is_active(_PyXI_session *);
-#endif
 static void _propagate_not_shareable_error(_PyXI_session *);
 
-int
-_PyXI_FillNamespaceFromDict(_PyXI_namespace *ns, PyObject *nsobj,
-                            _PyXI_session *session)
-{
-    // session must be entered already, if provided.
-    assert(session == NULL || _session_is_active(session));
-    assert(_sharedns_is_initialized(ns));
-    for (Py_ssize_t i=0; i < ns->len; i++) {
-        _PyXI_namespace_item *item = &ns->items[i];
-        if (_sharednsitem_copy_from_ns(item, nsobj) < 0) {
+static int
+_fill_sharedns(_PyXI_namespace *ns, PyObject *nsobj, _PyXI_session *session)
+{
+    // All items are expected to be shareable.
+    assert(_sharedns_check_counts(ns));
+    assert(ns->numnames == ns->maxitems);
+    assert(ns->numvalues == 0);
+    for (Py_ssize_t i=0; i < ns->maxitems; i++) {
+        if (_sharednsitem_copy_from_ns(&ns->items[i], nsobj) < 0) {
             _propagate_not_shareable_error(session);
             // Clear out the ones we set so far.
             for (Py_ssize_t j=0; j < i; j++) {
                 _sharednsitem_clear_value(&ns->items[j]);
+                ns->numvalues -= 1;
             }
             return -1;
         }
+        ns->numvalues += 1;
     }
     return 0;
 }
 
-// All items are expected to be shareable.
-static _PyXI_namespace *
-_PyXI_NamespaceFromDict(PyObject *nsobj, _PyXI_session *session)
+static int
+_sharedns_free_pending(void *data)
 {
-    // session must be entered already, if provided.
-    assert(session == NULL || _session_is_active(session));
-    if (nsobj == NULL || nsobj == Py_None) {
-        return NULL;
-    }
-    if (!PyDict_CheckExact(nsobj)) {
-        PyErr_SetString(PyExc_TypeError, "expected a dict");
-        return NULL;
-    }
+    _sharedns_free((_PyXI_namespace *)data);
+    return 0;
+}
 
-    _PyXI_namespace *ns = _sharedns_new();
-    if (ns == NULL) {
-        return NULL;
+static void
+_destroy_sharedns(_PyXI_namespace *ns)
+{
+    assert(_sharedns_check_counts(ns));
+    assert(ns->numnames == ns->maxitems);
+    if (ns->numvalues == 0) {
+        _sharedns_free(ns);
+        return;
     }
 
-    if (_sharedns_init(ns, nsobj) < 0) {
-        if (PyDict_Size(nsobj) == 0) {
-            PyMem_RawFree(ns);
-            PyErr_Clear();
-            return NULL;
-        }
-        goto error;
+    int64_t interpid0;
+    if (!_sharednsitem_has_value(&ns->items[0], &interpid0)) {
+        // This shouldn't have been possible.
+        // We can deal with it in _sharedns_free().
+        _sharedns_free(ns);
+        return;
     }
-
-    if (_PyXI_FillNamespaceFromDict(ns, nsobj, session) < 0) {
-        goto error;
+    PyInterpreterState *interp = _PyInterpreterState_LookUpID(interpid0);
+    if (interp == PyInterpreterState_Get()) {
+        _sharedns_free(ns);
+        return;
     }
 
-    return ns;
-
-error:
-    assert(PyErr_Occurred()
-           || (session != NULL && session->error_override != NULL));
-    _sharedns_free(ns);
-    return NULL;
+    // One or more items may have interpreter-specific data.
+    // Currently the xidata for each value is dynamically allocated,
+    // so technically we don't need to worry about that.
+    // However, explicitly adding a pending call here is simpler.
+    (void)_Py_CallInInterpreter(interp, _sharedns_free_pending, ns);
 }
 
-int
-_PyXI_ApplyNamespace(_PyXI_namespace *ns, PyObject *nsobj, PyObject *dflt)
+static int
+_apply_sharedns(_PyXI_namespace *ns, PyObject *nsobj, PyObject *dflt)
 {
-    for (Py_ssize_t i=0; i < ns->len; i++) {
+    for (Py_ssize_t i=0; i < ns->maxitems; i++) {
         if (_sharednsitem_apply(&ns->items[i], nsobj, dflt) != 0) {
             return -1;
         }
@@ -2213,9 +2208,79 @@ _PyXI_ApplyNamespace(_PyXI_namespace *ns, PyObject *nsobj, PyObject *dflt)
 }
 
 
-/**********************/
-/* high-level helpers */
-/**********************/
+/*********************************/
+/* switched-interpreter sessions */
+/*********************************/
+
+struct xi_session {
+#define SESSION_UNUSED 0
+#define SESSION_ACTIVE 1
+    int status;
+    int switched;
+
+    // Once a session has been entered, this is the tstate that was
+    // current before the session.  If it is different from cur_tstate
+    // then we must have switched interpreters.  Either way, this will
+    // be the current tstate once we exit the session.
+    PyThreadState *prev_tstate;
+    // Once a session has been entered, this is the current tstate.
+    // It must be current when the session exits.
+    PyThreadState *init_tstate;
+    // This is true if init_tstate needs cleanup during exit.
+    int own_init_tstate;
+
+    // This is true if, while entering the session, init_thread took
+    // "ownership" of the interpreter's __main__ module.  This means
+    // it is the only thread that is allowed to run code there.
+    // (Caveat: for now, users may still run exec() against the
+    // __main__ module's dict, though that isn't advisable.)
+    int running;
+    // This is a cached reference to the __dict__ of the entered
+    // interpreter's __main__ module.  It is looked up when at the
+    // beginning of the session as a convenience.
+    PyObject *main_ns;
+
+    // This is set if the interpreter is entered and raised an exception
+    // that needs to be handled in some special way during exit.
+    _PyXI_errcode *error_override;
+    // This is set if exit captured an exception to propagate.
+    _PyXI_error *error;
+
+    // -- pre-allocated memory --
+    _PyXI_error _error;
+    _PyXI_errcode _error_override;
+};
+
+
+_PyXI_session *
+_PyXI_NewSession(void)
+{
+    _PyXI_session *session = PyMem_RawCalloc(1, sizeof(_PyXI_session));
+    if (session == NULL) {
+        PyErr_NoMemory();
+        return NULL;
+    }
+    return session;
+}
+
+void
+_PyXI_FreeSession(_PyXI_session *session)
+{
+    assert(session->status == SESSION_UNUSED);
+    PyMem_RawFree(session);
+}
+
+
+static inline int
+_session_is_active(_PyXI_session *session)
+{
+    return session->status == SESSION_ACTIVE;
+}
+
+static int _ensure_main_ns(_PyXI_session *);
+static inline void _session_set_error(_PyXI_session *, _PyXI_errcode);
+static void _capture_current_exception(_PyXI_session *);
+
 
 /* enter/exit a cross-interpreter session */
 
@@ -2223,6 +2288,7 @@ static void
 _enter_session(_PyXI_session *session, PyInterpreterState *interp)
 {
     // Set here and cleared in _exit_session().
+    assert(session->status == SESSION_UNUSED);
     assert(!session->own_init_tstate);
     assert(session->init_tstate == NULL);
     assert(session->prev_tstate == NULL);
@@ -2237,15 +2303,22 @@ _enter_session(_PyXI_session *session, PyInterpreterState *interp)
     // Switch to interpreter.
     PyThreadState *tstate = PyThreadState_Get();
     PyThreadState *prev = tstate;
-    if (interp != tstate->interp) {
+    int same_interp = (interp == tstate->interp);
+    if (!same_interp) {
         tstate = _PyThreadState_NewBound(interp, _PyThreadState_WHENCE_EXEC);
         // XXX Possible GILState issues?
-        session->prev_tstate = PyThreadState_Swap(tstate);
-        assert(session->prev_tstate == prev);
-        session->own_init_tstate = 1;
+        PyThreadState *swapped = PyThreadState_Swap(tstate);
+        assert(swapped == prev);
+        (void)swapped;
     }
-    session->init_tstate = tstate;
-    session->prev_tstate = prev;
+
+    *session = (_PyXI_session){
+        .status = SESSION_ACTIVE,
+        .switched = !same_interp,
+        .init_tstate = tstate,
+        .prev_tstate = prev,
+        .own_init_tstate = !same_interp,
+    };
 }
 
 static void
@@ -2256,9 +2329,7 @@ _exit_session(_PyXI_session *session)
     assert(PyThreadState_Get() == tstate);
 
     // Release any of the entered interpreters resources.
-    if (session->main_ns != NULL) {
-        Py_CLEAR(session->main_ns);
-    }
+    Py_CLEAR(session->main_ns);
 
     // Ensure this thread no longer owns __main__.
     if (session->running) {
@@ -2279,17 +2350,15 @@ _exit_session(_PyXI_session *session)
     else {
         assert(!session->own_init_tstate);
     }
-    session->prev_tstate = NULL;
-    session->init_tstate = NULL;
-}
 
-#ifndef NDEBUG
-static int
-_session_is_active(_PyXI_session *session)
-{
-    return (session->init_tstate != NULL);
+    // For now the error data persists past the exit.
+    *session = (_PyXI_session){
+        .error_override = session->error_override,
+        .error = session->error,
+        ._error = session->_error,
+        ._error_override = session->_error_override,
+    };
 }
-#endif
 
 static void
 _propagate_not_shareable_error(_PyXI_session *session)
@@ -2306,11 +2375,102 @@ _propagate_not_shareable_error(_PyXI_session *session)
     }
     if (PyErr_ExceptionMatches(exctype)) {
         // We want to propagate the exception directly.
-        session->_error_override = _PyXI_ERR_NOT_SHAREABLE;
-        session->error_override = &session->_error_override;
+        _session_set_error(session, _PyXI_ERR_NOT_SHAREABLE);
     }
 }
 
+PyObject *
+_PyXI_ApplyCapturedException(_PyXI_session *session)
+{
+    assert(!PyErr_Occurred());
+    assert(session->error != NULL);
+    PyObject *res = _PyXI_ApplyError(session->error);
+    assert((res == NULL) != (PyErr_Occurred() == NULL));
+    session->error = NULL;
+    return res;
+}
+
+int
+_PyXI_HasCapturedException(_PyXI_session *session)
+{
+    return session->error != NULL;
+}
+
+int
+_PyXI_Enter(_PyXI_session *session,
+            PyInterpreterState *interp, PyObject *nsupdates)
+{
+    // Convert the attrs for cross-interpreter use.
+    _PyXI_namespace *sharedns = NULL;
+    if (nsupdates != NULL) {
+        Py_ssize_t len = PyDict_Size(nsupdates);
+        if (len < 0) {
+            return -1;
+        }
+        if (len > 0) {
+            sharedns = _create_sharedns(nsupdates);
+            if (sharedns == NULL) {
+                return -1;
+            }
+            if (_fill_sharedns(sharedns, nsupdates, NULL) < 0) {
+                assert(session->error == NULL);
+                _destroy_sharedns(sharedns);
+                return -1;
+            }
+        }
+    }
+
+    // Switch to the requested interpreter (if necessary).
+    _enter_session(session, interp);
+    _PyXI_errcode errcode = _PyXI_ERR_UNCAUGHT_EXCEPTION;
+
+    // Ensure this thread owns __main__.
+    if (_PyInterpreterState_SetRunningMain(interp) < 0) {
+        // In the case where we didn't switch interpreters, it would
+        // be more efficient to leave the exception in place and return
+        // immediately.  However, life is simpler if we don't.
+        errcode = _PyXI_ERR_ALREADY_RUNNING;
+        goto error;
+    }
+    session->running = 1;
+
+    // Apply the cross-interpreter data.
+    if (sharedns != NULL) {
+        if (_ensure_main_ns(session) < 0) {
+            errcode = _PyXI_ERR_MAIN_NS_FAILURE;
+            goto error;
+        }
+        if (_apply_sharedns(sharedns, session->main_ns, NULL) < 0) {
+            errcode = _PyXI_ERR_APPLY_NS_FAILURE;
+            goto error;
+        }
+        _destroy_sharedns(sharedns);
+    }
+
+    errcode = _PyXI_ERR_NO_ERROR;
+    assert(!PyErr_Occurred());
+    return 0;
+
+error:
+    // We want to propagate all exceptions here directly (best effort).
+    _session_set_error(session, errcode);
+    _exit_session(session);
+    if (sharedns != NULL) {
+        _destroy_sharedns(sharedns);
+    }
+    return -1;
+}
+
+void
+_PyXI_Exit(_PyXI_session *session)
+{
+    _capture_current_exception(session);
+    _exit_session(session);
+}
+
+
+/* in an active cross-interpreter session */
+
 static void
 _capture_current_exception(_PyXI_session *session)
 {
@@ -2372,100 +2532,55 @@ _capture_current_exception(_PyXI_session *session)
 
     // Finished!
     assert(!PyErr_Occurred());
-    session->error  = err;
-}
-
-PyObject *
-_PyXI_ApplyCapturedException(_PyXI_session *session)
-{
-    assert(!PyErr_Occurred());
-    assert(session->error != NULL);
-    PyObject *res = _PyXI_ApplyError(session->error);
-    assert((res == NULL) != (PyErr_Occurred() == NULL));
-    session->error = NULL;
-    return res;
+    session->error = err;
 }
 
-int
-_PyXI_HasCapturedException(_PyXI_session *session)
+static inline void
+_session_set_error(_PyXI_session *session, _PyXI_errcode errcode)
 {
-    return session->error != NULL;
+    assert(_session_is_active(session));
+    assert(PyErr_Occurred());
+    if (errcode != _PyXI_ERR_UNCAUGHT_EXCEPTION) {
+        session->_error_override = errcode;
+        session->error_override = &session->_error_override;
+    }
+    _capture_current_exception(session);
 }
 
-int
-_PyXI_Enter(_PyXI_session *session,
-            PyInterpreterState *interp, PyObject *nsupdates)
+static int
+_ensure_main_ns(_PyXI_session *session)
 {
-    // Convert the attrs for cross-interpreter use.
-    _PyXI_namespace *sharedns = NULL;
-    if (nsupdates != NULL) {
-        sharedns = _PyXI_NamespaceFromDict(nsupdates, NULL);
-        if (sharedns == NULL && PyErr_Occurred()) {
-            assert(session->error == NULL);
-            return -1;
-        }
-    }
-
-    // Switch to the requested interpreter (if necessary).
-    _enter_session(session, interp);
-    PyThreadState *session_tstate = session->init_tstate;
-    _PyXI_errcode errcode = _PyXI_ERR_UNCAUGHT_EXCEPTION;
-
-    // Ensure this thread owns __main__.
-    if (_PyInterpreterState_SetRunningMain(interp) < 0) {
-        // In the case where we didn't switch interpreters, it would
-        // be more efficient to leave the exception in place and return
-        // immediately.  However, life is simpler if we don't.
-        errcode = _PyXI_ERR_ALREADY_RUNNING;
-        goto error;
+    assert(_session_is_active(session));
+    if (session->main_ns != NULL) {
+        return 0;
     }
-    session->running = 1;
-
     // Cache __main__.__dict__.
-    PyObject *main_mod = _Py_GetMainModule(session_tstate);
+    PyObject *main_mod = _Py_GetMainModule(session->init_tstate);
     if (_Py_CheckMainModule(main_mod) < 0) {
-        errcode = _PyXI_ERR_MAIN_NS_FAILURE;
-        goto error;
+        return -1;
     }
     PyObject *ns = PyModule_GetDict(main_mod);  // borrowed
     Py_DECREF(main_mod);
     if (ns == NULL) {
-        errcode = _PyXI_ERR_MAIN_NS_FAILURE;
-        goto error;
+        return -1;
     }
     session->main_ns = Py_NewRef(ns);
-
-    // Apply the cross-interpreter data.
-    if (sharedns != NULL) {
-        if (_PyXI_ApplyNamespace(sharedns, ns, NULL) < 0) {
-            errcode = _PyXI_ERR_APPLY_NS_FAILURE;
-            goto error;
-        }
-        _PyXI_FreeNamespace(sharedns);
-    }
-
-    errcode = _PyXI_ERR_NO_ERROR;
-    assert(!PyErr_Occurred());
     return 0;
-
-error:
-    assert(PyErr_Occurred());
-    // We want to propagate all exceptions here directly (best effort).
-    assert(errcode != _PyXI_ERR_UNCAUGHT_EXCEPTION);
-    session->error_override = &errcode;
-    _capture_current_exception(session);
-    _exit_session(session);
-    if (sharedns != NULL) {
-        _PyXI_FreeNamespace(sharedns);
-    }
-    return -1;
 }
 
-void
-_PyXI_Exit(_PyXI_session *session)
+PyObject *
+_PyXI_GetMainNamespace(_PyXI_session *session)
 {
-    _capture_current_exception(session);
-    _exit_session(session);
+    if (!_session_is_active(session)) {
+        PyErr_SetString(PyExc_RuntimeError, "session not active");
+        return NULL;
+    }
+    if (_ensure_main_ns(session) < 0) {
+        _session_set_error(session, _PyXI_ERR_MAIN_NS_FAILURE);
+        _capture_current_exception(session);
+        return NULL;
+    }
+    return session->main_ns;
 }