Imported Upstream version 3.10.2 upstream/3.10.2
authorJinWang An <jinwang.an@samsung.com>
Wed, 18 Jan 2023 06:01:37 +0000 (15:01 +0900)
committerJinWang An <jinwang.an@samsung.com>
Wed, 18 Jan 2023 06:01:37 +0000 (15:01 +0900)
147 files changed:
Doc/c-api/unicode.rst
Doc/conf.py
Doc/copyright.rst
Doc/data/python3.10.abi
Doc/distutils/sourcedist.rst
Doc/howto/annotations.rst
Doc/library/2to3.rst
Doc/library/argparse.rst
Doc/library/asyncio-eventloop.rst
Doc/library/asyncio-task.rst
Doc/library/collections.rst
Doc/library/concurrent.futures.rst
Doc/library/ctypes.rst
Doc/library/dataclasses.rst
Doc/library/dis.rst
Doc/library/functions.rst
Doc/library/hashlib.rst
Doc/library/io.rst
Doc/library/json.rst
Doc/library/logging.config.rst
Doc/library/logging.handlers.rst
Doc/library/logging.rst
Doc/library/multiprocessing.rst
Doc/library/os.path.rst
Doc/library/os.rst
Doc/library/pdb.rst
Doc/library/sqlite3.rst
Doc/library/statistics.rst
Doc/library/stdtypes.rst
Doc/library/types.rst
Doc/library/typing.rst
Doc/library/unittest.mock.rst
Doc/library/warnings.rst
Doc/library/zipimport.rst
Doc/license.rst
Doc/reference/compound_stmts.rst
Doc/reference/datamodel.rst
Doc/reference/expressions.rst
Doc/requirements.txt
Doc/tools/extensions/peg_highlight.py
Doc/tutorial/classes.rst
Doc/tutorial/controlflow.rst
Doc/tutorial/datastructures.rst
Doc/tutorial/errors.rst
Doc/tutorial/stdlib.rst
Doc/whatsnew/3.10.rst
Include/internal/pycore_interp.h
Include/internal/pycore_symtable.h
Include/patchlevel.h
LICENSE
Lib/argparse.py
Lib/asyncio/events.py
Lib/asyncio/windows_events.py
Lib/concurrent/futures/_base.py
Lib/ctypes/test/test_functions.py
Lib/functools.py
Lib/importlib/metadata/__init__.py
Lib/json/__init__.py
Lib/json/encoder.py
Lib/logging/__init__.py
Lib/logging/handlers.py
Lib/pydoc_data/topics.py
Lib/signal.py
Lib/statistics.py
Lib/test/_test_atexit.py
Lib/test/libregrtest/runtest_mp.py
Lib/test/make_ssl_certs.py
Lib/test/test_argparse.py
Lib/test/test_asyncio/test_base_events.py
Lib/test/test_asyncio/test_events.py
Lib/test/test_asyncio/test_futures.py
Lib/test/test_asyncio/test_locks.py
Lib/test/test_asyncio/test_sendfile.py
Lib/test/test_asyncio/test_sock_lowlevel.py
Lib/test/test_asyncio/test_sslproto.py
Lib/test/test_asyncio/test_streams.py
Lib/test/test_asyncio/test_tasks.py
Lib/test/test_asyncio/test_unix_events.py
Lib/test/test_asyncio/utils.py
Lib/test/test_capi.py
Lib/test/test_compile.py
Lib/test/test_concurrent_futures.py
Lib/test/test_descr.py
Lib/test/test_exceptions.py
Lib/test/test_functools.py
Lib/test/test_generators.py
Lib/test/test_hashlib.py
Lib/test/test_imaplib.py
Lib/test/test_importlib/test_metadata_api.py
Lib/test/test_logging.py
Lib/test/test_pathlib.py
Lib/test/test_poplib.py
Lib/test/test_signal.py
Lib/test/test_smtplib.py
Lib/test/test_ssl.py
Lib/test/test_syntax.py
Lib/test/test_time.py
Lib/test/test_tools/test_md5sum.py
Lib/test/test_typing.py
Lib/test/test_urllib2_localnet.py
Lib/tkinter/test/test_tkinter/test_misc.py
Lib/typing.py
Lib/unittest/async_case.py
Lib/unittest/runner.py
Lib/unittest/test/test_case.py
Lib/unittest/test/test_program.py
Lib/unittest/test/test_result.py
Lib/unittest/test/testmock/testpatch.py
Lib/venv/__init__.py
Mac/BuildScript/0001-Darwin-platform-allows-to-build-on-releases-before-Y.patch [deleted file]
Mac/BuildScript/build-installer.py
Mac/BuildScript/resources/ReadMe.rtf
Mac/IDLE/IDLE.app/Contents/Info.plist
Mac/PythonLauncher/Info.plist.in
Mac/PythonLauncher/doscript.m
Mac/Resources/app/Info.plist.in
Misc/NEWS
Misc/README.valgrind
Modules/_asynciomodule.c
Modules/_cursesmodule.c
Modules/_hashopenssl.c
Modules/_testcapimodule.c
Modules/atexitmodule.c
Modules/mathmodule.c
Objects/funcobject.c
Objects/genobject.c
Objects/odictobject.c
Objects/typeobject.c
Objects/unicodeobject.c
PC/python_ver_rc.h
PCbuild/get_externals.bat
PCbuild/python.props
Parser/Python.asdl
Parser/parser.c
Parser/pegen.c
Parser/pegen.h
Parser/string_parser.c
Parser/tokenizer.c
Python/Python-ast.c
Python/ceval.c
Python/getcopyright.c
Python/symtable.c
README.rst
Tools/peg_generator/pegen/c_generator.py
Tools/ssl/multissltests.py
configure
configure.ac

index cb2438e..343eaf1 100644 (file)
@@ -268,57 +268,57 @@ are available through these macros which are mapped to C functions depending on
 the Python configuration.
 
 
-.. c:function:: int Py_UNICODE_ISSPACE(Py_UNICODE ch)
+.. c:function:: int Py_UNICODE_ISSPACE(Py_UCS4 ch)
 
    Return ``1`` or ``0`` depending on whether *ch* is a whitespace character.
 
 
-.. c:function:: int Py_UNICODE_ISLOWER(Py_UNICODE ch)
+.. c:function:: int Py_UNICODE_ISLOWER(Py_UCS4 ch)
 
    Return ``1`` or ``0`` depending on whether *ch* is a lowercase character.
 
 
-.. c:function:: int Py_UNICODE_ISUPPER(Py_UNICODE ch)
+.. c:function:: int Py_UNICODE_ISUPPER(Py_UCS4 ch)
 
    Return ``1`` or ``0`` depending on whether *ch* is an uppercase character.
 
 
-.. c:function:: int Py_UNICODE_ISTITLE(Py_UNICODE ch)
+.. c:function:: int Py_UNICODE_ISTITLE(Py_UCS4 ch)
 
    Return ``1`` or ``0`` depending on whether *ch* is a titlecase character.
 
 
-.. c:function:: int Py_UNICODE_ISLINEBREAK(Py_UNICODE ch)
+.. c:function:: int Py_UNICODE_ISLINEBREAK(Py_UCS4 ch)
 
    Return ``1`` or ``0`` depending on whether *ch* is a linebreak character.
 
 
-.. c:function:: int Py_UNICODE_ISDECIMAL(Py_UNICODE ch)
+.. c:function:: int Py_UNICODE_ISDECIMAL(Py_UCS4 ch)
 
    Return ``1`` or ``0`` depending on whether *ch* is a decimal character.
 
 
-.. c:function:: int Py_UNICODE_ISDIGIT(Py_UNICODE ch)
+.. c:function:: int Py_UNICODE_ISDIGIT(Py_UCS4 ch)
 
    Return ``1`` or ``0`` depending on whether *ch* is a digit character.
 
 
-.. c:function:: int Py_UNICODE_ISNUMERIC(Py_UNICODE ch)
+.. c:function:: int Py_UNICODE_ISNUMERIC(Py_UCS4 ch)
 
    Return ``1`` or ``0`` depending on whether *ch* is a numeric character.
 
 
-.. c:function:: int Py_UNICODE_ISALPHA(Py_UNICODE ch)
+.. c:function:: int Py_UNICODE_ISALPHA(Py_UCS4 ch)
 
    Return ``1`` or ``0`` depending on whether *ch* is an alphabetic character.
 
 
-.. c:function:: int Py_UNICODE_ISALNUM(Py_UNICODE ch)
+.. c:function:: int Py_UNICODE_ISALNUM(Py_UCS4 ch)
 
    Return ``1`` or ``0`` depending on whether *ch* is an alphanumeric character.
 
 
-.. c:function:: int Py_UNICODE_ISPRINTABLE(Py_UNICODE ch)
+.. c:function:: int Py_UNICODE_ISPRINTABLE(Py_UCS4 ch)
 
    Return ``1`` or ``0`` depending on whether *ch* is a printable character.
    Nonprintable characters are those characters defined in the Unicode character
@@ -332,7 +332,7 @@ the Python configuration.
 These APIs can be used for fast direct character conversions:
 
 
-.. c:function:: Py_UNICODE Py_UNICODE_TOLOWER(Py_UNICODE ch)
+.. c:function:: Py_UCS4 Py_UNICODE_TOLOWER(Py_UCS4 ch)
 
    Return the character *ch* converted to lower case.
 
@@ -340,7 +340,7 @@ These APIs can be used for fast direct character conversions:
       This function uses simple case mappings.
 
 
-.. c:function:: Py_UNICODE Py_UNICODE_TOUPPER(Py_UNICODE ch)
+.. c:function:: Py_UCS4 Py_UNICODE_TOUPPER(Py_UCS4 ch)
 
    Return the character *ch* converted to upper case.
 
@@ -348,7 +348,7 @@ These APIs can be used for fast direct character conversions:
       This function uses simple case mappings.
 
 
-.. c:function:: Py_UNICODE Py_UNICODE_TOTITLE(Py_UNICODE ch)
+.. c:function:: Py_UCS4 Py_UNICODE_TOTITLE(Py_UCS4 ch)
 
    Return the character *ch* converted to title case.
 
@@ -356,19 +356,19 @@ These APIs can be used for fast direct character conversions:
       This function uses simple case mappings.
 
 
-.. c:function:: int Py_UNICODE_TODECIMAL(Py_UNICODE ch)
+.. c:function:: int Py_UNICODE_TODECIMAL(Py_UCS4 ch)
 
    Return the character *ch* converted to a decimal positive integer.  Return
    ``-1`` if this is not possible.  This macro does not raise exceptions.
 
 
-.. c:function:: int Py_UNICODE_TODIGIT(Py_UNICODE ch)
+.. c:function:: int Py_UNICODE_TODIGIT(Py_UCS4 ch)
 
    Return the character *ch* converted to a single digit integer. Return ``-1`` if
    this is not possible.  This macro does not raise exceptions.
 
 
-.. c:function:: double Py_UNICODE_TONUMERIC(Py_UNICODE ch)
+.. c:function:: double Py_UNICODE_TONUMERIC(Py_UCS4 ch)
 
    Return the character *ch* converted to a double. Return ``-1.0`` if this is not
    possible.  This macro does not raise exceptions.
index f626ce6..cbf201a 100644 (file)
@@ -69,7 +69,8 @@ html_theme = 'python_docs_theme'
 html_theme_path = ['tools']
 html_theme_options = {
     'collapsiblesidebar': True,
-    'issues_url': 'https://docs.python.org/3/bugs.html',
+    'issues_url': '/bugs.html',
+    'license_url': '/license.html',
     'root_include_title': False   # We use the version switcher instead.
 }
 
index 4191c0b..e64a493 100644 (file)
@@ -4,7 +4,7 @@ Copyright
 
 Python and this documentation is:
 
-Copyright © 2001-2021 Python Software Foundation. All rights reserved.
+Copyright © 2001-2022 Python Software Foundation. All rights reserved.
 
 Copyright © 2000 BeOpen.com. All rights reserved.
 
index 94dcf74..b7886ae 100644 (file)
     <elf-symbol name='_PyErr_NoMemory' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
     <elf-symbol name='_PyErr_NormalizeException' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
     <elf-symbol name='_PyErr_Print' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+    <elf-symbol name='_PyErr_ProgramDecodedTextObject' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
     <elf-symbol name='_PyErr_Restore' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
     <elf-symbol name='_PyErr_SetKeyError' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
     <elf-symbol name='_PyErr_SetNone' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
     <type-decl name='char' size-in-bits='8' id='type-id-1'/>
     <qualified-type-def type-id='type-id-1' const='yes' id='type-id-2'/>
     <pointer-type-def type-id='type-id-2' size-in-bits='64' id='type-id-3'/>
-    <function-decl name='_Py_gitidentifier' mangled-name='_Py_gitidentifier' filepath='./Modules/getbuildinfo.c' line='58' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='_Py_gitidentifier'>
-      <return type-id='type-id-3'/>
-    </function-decl>
-    <function-decl name='_Py_gitversion' mangled-name='_Py_gitversion' filepath='./Modules/getbuildinfo.c' line='52' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='_Py_gitversion'>
+    <function-decl name='_Py_gitidentifier' mangled-name='_Py_gitidentifier' filepath='./Modules/getbuildinfo.c' line='59' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='_Py_gitidentifier'>
       <return type-id='type-id-3'/>
     </function-decl>
     <function-decl name='Py_GetBuildInfo' mangled-name='Py_GetBuildInfo' filepath='./Modules/getbuildinfo.c' line='35' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='Py_GetBuildInfo'>
     <function-decl name='PyUnicode_InternInPlace' mangled-name='PyUnicode_InternInPlace' filepath='./Include/unicodeobject.h' line='263' column='1' visibility='default' binding='global' size-in-bits='64'>
       <return type-id='type-id-4'/>
     </function-decl>
-    <function-decl name='PyTokenizer_FromUTF8' mangled-name='PyTokenizer_FromUTF8' filepath='Parser/tokenizer.h' line='90' column='1' visibility='default' binding='global' size-in-bits='64'>
+    <function-decl name='PyTokenizer_FromString' mangled-name='PyTokenizer_FromString' filepath='Parser/tokenizer.h' line='89' column='1' visibility='default' binding='global' size-in-bits='64'>
       <return type-id='type-id-4'/>
     </function-decl>
     <function-decl name='PyTokenizer_Free' mangled-name='PyTokenizer_Free' filepath='Parser/tokenizer.h' line='93' column='1' visibility='default' binding='global' size-in-bits='64'>
       <return type-id='type-id-4'/>
     </function-decl>
-    <function-decl name='PyTokenizer_FromString' mangled-name='PyTokenizer_FromString' filepath='Parser/tokenizer.h' line='89' column='1' visibility='default' binding='global' size-in-bits='64'>
+    <function-decl name='PyTokenizer_FromUTF8' mangled-name='PyTokenizer_FromUTF8' filepath='Parser/tokenizer.h' line='90' column='1' visibility='default' binding='global' size-in-bits='64'>
       <return type-id='type-id-4'/>
     </function-decl>
     <function-decl name='PyTokenizer_FromFile' mangled-name='PyTokenizer_FromFile' filepath='Parser/tokenizer.h' line='91' column='1' visibility='default' binding='global' size-in-bits='64'>
     <function-decl name='PyErr_SetNone' mangled-name='PyErr_SetNone' filepath='./Include/pyerrors.h' line='11' column='1' visibility='default' binding='global' size-in-bits='64'>
       <return type-id='type-id-4'/>
     </function-decl>
-    <function-decl name='strtok' mangled-name='strtok' filepath='/usr/include/string.h' line='336' column='1' visibility='default' binding='global' size-in-bits='64'>
-      <return type-id='type-id-4'/>
-    </function-decl>
     <function-decl name='__builtin_memcpy' mangled-name='memcpy' visibility='default' binding='global' size-in-bits='64'>
       <return type-id='type-id-4'/>
     </function-decl>
     <function-decl name='PyUnicode_FromFormatV' mangled-name='PyUnicode_FromFormatV' filepath='./Include/unicodeobject.h' line='254' column='1' visibility='default' binding='global' size-in-bits='64'>
       <return type-id='type-id-4'/>
     </function-decl>
+    <function-decl name='PyUnicode_FromStringAndSize' mangled-name='PyUnicode_FromStringAndSize' filepath='./Include/unicodeobject.h' line='130' column='1' visibility='default' binding='global' size-in-bits='64'>
+      <return type-id='type-id-4'/>
+    </function-decl>
     <function-decl name='Py_BuildValue' mangled-name='Py_BuildValue' filepath='./Include/modsupport.h' line='49' column='1' visibility='default' binding='global' size-in-bits='64'>
       <return type-id='type-id-4'/>
     </function-decl>
     <function-decl name='PyErr_SetObject' mangled-name='PyErr_SetObject' filepath='./Include/pyerrors.h' line='12' column='1' visibility='default' binding='global' size-in-bits='64'>
       <return type-id='type-id-4'/>
     </function-decl>
-    <function-decl name='PyErr_ProgramTextObject' mangled-name='PyErr_ProgramTextObject' filepath='./Include/cpython/pyerrors.h' line='160' column='1' visibility='default' binding='global' size-in-bits='64'>
+    <function-decl name='_PyErr_ProgramDecodedTextObject' mangled-name='_PyErr_ProgramDecodedTextObject' filepath='./Include/cpython/pyerrors.h' line='189' column='1' visibility='default' binding='global' size-in-bits='64'>
       <return type-id='type-id-4'/>
     </function-decl>
     <function-decl name='PyErr_Fetch' mangled-name='PyErr_Fetch' filepath='./Include/pyerrors.h' line='19' column='1' visibility='default' binding='global' size-in-bits='64'>
     <function-decl name='PyErr_Restore' mangled-name='PyErr_Restore' filepath='./Include/pyerrors.h' line='20' column='1' visibility='default' binding='global' size-in-bits='64'>
       <return type-id='type-id-4'/>
     </function-decl>
-    <function-decl name='_PyPegen_parse' mangled-name='_PyPegen_parse' filepath='Parser/pegen.h' line='332' column='1' visibility='default' binding='global' size-in-bits='64'>
+    <function-decl name='_PyPegen_parse' mangled-name='_PyPegen_parse' filepath='Parser/pegen.h' line='334' column='1' visibility='default' binding='global' size-in-bits='64'>
       <return type-id='type-id-4'/>
     </function-decl>
   </abi-instr>
   <abi-instr version='1.0' address-size='64' path='Parser/parser.c' comp-dir-path='/src' language='LANG_C99'>
-    <function-decl name='_PyPegen_expect_token' mangled-name='_PyPegen_expect_token' filepath='Parser/pegen.h' line='132' column='1' visibility='default' binding='global' size-in-bits='64'>
+    <function-decl name='_PyPegen_expect_token' mangled-name='_PyPegen_expect_token' filepath='Parser/pegen.h' line='133' column='1' visibility='default' binding='global' size-in-bits='64'>
       <return type-id='type-id-4'/>
     </function-decl>
-    <function-decl name='_PyPegen_singleton_seq' mangled-name='_PyPegen_singleton_seq' filepath='Parser/pegen.h' line='256' column='1' visibility='default' binding='global' size-in-bits='64'>
+    <function-decl name='_PyPegen_singleton_seq' mangled-name='_PyPegen_singleton_seq' filepath='Parser/pegen.h' line='257' column='1' visibility='default' binding='global' size-in-bits='64'>
       <return type-id='type-id-4'/>
     </function-decl>
-    <function-decl name='_PyPegen_insert_memo' mangled-name='_PyPegen_insert_memo' filepath='Parser/pegen.h' line='122' column='1' visibility='default' binding='global' size-in-bits='64'>
+    <function-decl name='_PyPegen_insert_memo' mangled-name='_PyPegen_insert_memo' filepath='Parser/pegen.h' line='123' column='1' visibility='default' binding='global' size-in-bits='64'>
       <return type-id='type-id-4'/>
     </function-decl>
-    <function-decl name='_PyPegen_seq_insert_in_front' mangled-name='_PyPegen_seq_insert_in_front' filepath='Parser/pegen.h' line='257' column='1' visibility='default' binding='global' size-in-bits='64'>
+    <function-decl name='_PyPegen_seq_insert_in_front' mangled-name='_PyPegen_seq_insert_in_front' filepath='Parser/pegen.h' line='258' column='1' visibility='default' binding='global' size-in-bits='64'>
       <return type-id='type-id-4'/>
     </function-decl>
-    <function-decl name='_PyPegen_seq_append_to_end' mangled-name='_PyPegen_seq_append_to_end' filepath='Parser/pegen.h' line='258' column='1' visibility='default' binding='global' size-in-bits='64'>
+    <function-decl name='_PyPegen_seq_append_to_end' mangled-name='_PyPegen_seq_append_to_end' filepath='Parser/pegen.h' line='259' column='1' visibility='default' binding='global' size-in-bits='64'>
       <return type-id='type-id-4'/>
     </function-decl>
     <function-decl name='_PyAST_FunctionType' mangled-name='_PyAST_FunctionType' filepath='./Include/internal/pycore_ast.h' line='632' column='1' visibility='default' binding='global' size-in-bits='64'>
       <return type-id='type-id-4'/>
     </function-decl>
-    <function-decl name='_PyPegen_make_module' mangled-name='_PyPegen_make_module' filepath='Parser/pegen.h' line='295' column='1' visibility='default' binding='global' size-in-bits='64'>
+    <function-decl name='_PyPegen_make_module' mangled-name='_PyPegen_make_module' filepath='Parser/pegen.h' line='296' column='1' visibility='default' binding='global' size-in-bits='64'>
       <return type-id='type-id-4'/>
     </function-decl>
-    <function-decl name='_PyPegen_function_def_decorators' mangled-name='_PyPegen_function_def_decorators' filepath='Parser/pegen.h' line='281' column='1' visibility='default' binding='global' size-in-bits='64'>
+    <function-decl name='_PyPegen_function_def_decorators' mangled-name='_PyPegen_function_def_decorators' filepath='Parser/pegen.h' line='282' column='1' visibility='default' binding='global' size-in-bits='64'>
       <return type-id='type-id-4'/>
     </function-decl>
-    <function-decl name='_PyPegen_lookahead' mangled-name='_PyPegen_lookahead' filepath='Parser/pegen.h' line='130' column='1' visibility='default' binding='global' size-in-bits='64'>
+    <function-decl name='_PyPegen_lookahead' mangled-name='_PyPegen_lookahead' filepath='Parser/pegen.h' line='131' column='1' visibility='default' binding='global' size-in-bits='64'>
       <return type-id='type-id-4'/>
     </function-decl>
-    <function-decl name='_PyPegen_lookahead_with_int' mangled-name='_PyPegen_lookahead_with_int' filepath='Parser/pegen.h' line='128' column='1' visibility='default' binding='global' size-in-bits='64'>
+    <function-decl name='_PyPegen_lookahead_with_int' mangled-name='_PyPegen_lookahead_with_int' filepath='Parser/pegen.h' line='129' column='1' visibility='default' binding='global' size-in-bits='64'>
       <return type-id='type-id-4'/>
     </function-decl>
-    <function-decl name='_PyPegen_class_def_decorators' mangled-name='_PyPegen_class_def_decorators' filepath='Parser/pegen.h' line='282' column='1' visibility='default' binding='global' size-in-bits='64'>
+    <function-decl name='_PyPegen_class_def_decorators' mangled-name='_PyPegen_class_def_decorators' filepath='Parser/pegen.h' line='283' column='1' visibility='default' binding='global' size-in-bits='64'>
       <return type-id='type-id-4'/>
     </function-decl>
-    <function-decl name='_PyPegen_get_last_nonnwhitespace_token' mangled-name='_PyPegen_get_last_nonnwhitespace_token' filepath='Parser/pegen.h' line='136' column='1' visibility='default' binding='global' size-in-bits='64'>
+    <function-decl name='_PyPegen_get_last_nonnwhitespace_token' mangled-name='_PyPegen_get_last_nonnwhitespace_token' filepath='Parser/pegen.h' line='137' column='1' visibility='default' binding='global' size-in-bits='64'>
       <return type-id='type-id-4'/>
     </function-decl>
     <function-decl name='_PyAST_While' mangled-name='_PyAST_While' filepath='./Include/internal/pycore_ast.h' line='670' column='1' visibility='default' binding='global' size-in-bits='64'>
       <return type-id='type-id-4'/>
     </function-decl>
-    <function-decl name='_PyPegen_raise_error' mangled-name='_PyPegen_raise_error' filepath='Parser/pegen.h' line='142' column='1' visibility='default' binding='global' size-in-bits='64'>
+    <function-decl name='_PyPegen_raise_error' mangled-name='_PyPegen_raise_error' filepath='Parser/pegen.h' line='143' column='1' visibility='default' binding='global' size-in-bits='64'>
       <return type-id='type-id-4'/>
     </function-decl>
-    <function-decl name='_PyPegen_fill_token' mangled-name='_PyPegen_fill_token' filepath='Parser/pegen.h' line='137' column='1' visibility='default' binding='global' size-in-bits='64'>
+    <function-decl name='_PyPegen_fill_token' mangled-name='_PyPegen_fill_token' filepath='Parser/pegen.h' line='138' column='1' visibility='default' binding='global' size-in-bits='64'>
       <return type-id='type-id-4'/>
     </function-decl>
     <function-decl name='_PyAST_Match' mangled-name='_PyAST_Match' filepath='./Include/internal/pycore_ast.h' line='682' column='1' visibility='default' binding='global' size-in-bits='64'>
       <return type-id='type-id-4'/>
     </function-decl>
-    <function-decl name='_PyPegen_expect_soft_keyword' mangled-name='_PyPegen_expect_soft_keyword' filepath='Parser/pegen.h' line='134' column='1' visibility='default' binding='global' size-in-bits='64'>
+    <function-decl name='_PyPegen_expect_soft_keyword' mangled-name='_PyPegen_expect_soft_keyword' filepath='Parser/pegen.h' line='135' column='1' visibility='default' binding='global' size-in-bits='64'>
       <return type-id='type-id-4'/>
     </function-decl>
     <function-decl name='_PyAST_Pass' mangled-name='_PyAST_Pass' filepath='./Include/internal/pycore_ast.h' line='705' column='1' visibility='default' binding='global' size-in-bits='64'>
       <return type-id='type-id-4'/>
     </function-decl>
-    <function-decl name='_PyPegen_interactive_exit' mangled-name='_PyPegen_interactive_exit' filepath='Parser/pegen.h' line='255' column='1' visibility='default' binding='global' size-in-bits='64'>
+    <function-decl name='_PyPegen_interactive_exit' mangled-name='_PyPegen_interactive_exit' filepath='Parser/pegen.h' line='256' column='1' visibility='default' binding='global' size-in-bits='64'>
       <return type-id='type-id-4'/>
     </function-decl>
     <function-decl name='_PyAST_Interactive' mangled-name='_PyAST_Interactive' filepath='./Include/internal/pycore_ast.h' line='630' column='1' visibility='default' binding='global' size-in-bits='64'>
     <function-decl name='_PyAST_Expression' mangled-name='_PyAST_Expression' filepath='./Include/internal/pycore_ast.h' line='631' column='1' visibility='default' binding='global' size-in-bits='64'>
       <return type-id='type-id-4'/>
     </function-decl>
-    <function-decl name='_PyPegen_dummy_name' mangled-name='_PyPegen_dummy_name' filepath='Parser/pegen.h' line='147' column='1' visibility='default' binding='global' size-in-bits='64'>
+    <function-decl name='_PyPegen_dummy_name' mangled-name='_PyPegen_dummy_name' filepath='Parser/pegen.h' line='148' column='1' visibility='default' binding='global' size-in-bits='64'>
       <return type-id='type-id-4'/>
     </function-decl>
     <function-decl name='_PyAST_IfExp' mangled-name='_PyAST_IfExp' filepath='./Include/internal/pycore_ast.h' line='726' column='1' visibility='default' binding='global' size-in-bits='64'>
       <return type-id='type-id-4'/>
     </function-decl>
-    <function-decl name='_PyPegen_is_memoized' mangled-name='_PyPegen_is_memoized' filepath='Parser/pegen.h' line='124' column='1' visibility='default' binding='global' size-in-bits='64'>
+    <function-decl name='_PyPegen_check_legacy_stmt' mangled-name='_PyPegen_check_legacy_stmt' filepath='Parser/pegen.h' line='295' column='1' visibility='default' binding='global' size-in-bits='64'>
       <return type-id='type-id-4'/>
     </function-decl>
-    <function-decl name='_PyPegen_name_token' mangled-name='_PyPegen_name_token' filepath='Parser/pegen.h' line='138' column='1' visibility='default' binding='global' size-in-bits='64'>
+    <function-decl name='_PyPegen_name_token' mangled-name='_PyPegen_name_token' filepath='Parser/pegen.h' line='139' column='1' visibility='default' binding='global' size-in-bits='64'>
       <return type-id='type-id-4'/>
     </function-decl>
-    <function-decl name='_PyPegen_string_token' mangled-name='_PyPegen_string_token' filepath='Parser/pegen.h' line='140' column='1' visibility='default' binding='global' size-in-bits='64'>
+    <function-decl name='_PyPegen_is_memoized' mangled-name='_PyPegen_is_memoized' filepath='Parser/pegen.h' line='125' column='1' visibility='default' binding='global' size-in-bits='64'>
       <return type-id='type-id-4'/>
     </function-decl>
-    <function-decl name='_PyPegen_soft_keyword_token' mangled-name='_PyPegen_soft_keyword_token' filepath='Parser/pegen.h' line='135' column='1' visibility='default' binding='global' size-in-bits='64'>
+    <function-decl name='_PyPegen_string_token' mangled-name='_PyPegen_string_token' filepath='Parser/pegen.h' line='141' column='1' visibility='default' binding='global' size-in-bits='64'>
+      <return type-id='type-id-4'/>
+    </function-decl>
+    <function-decl name='_PyPegen_soft_keyword_token' mangled-name='_PyPegen_soft_keyword_token' filepath='Parser/pegen.h' line='136' column='1' visibility='default' binding='global' size-in-bits='64'>
       <return type-id='type-id-4'/>
     </function-decl>
     <function-decl name='_PyAST_comprehension' mangled-name='_PyAST_comprehension' filepath='./Include/internal/pycore_ast.h' line='787' column='1' visibility='default' binding='global' size-in-bits='64'>
       <return type-id='type-id-4'/>
     </function-decl>
-    <function-decl name='_PyPegen_set_expr_context' mangled-name='_PyPegen_set_expr_context' filepath='Parser/pegen.h' line='267' column='1' visibility='default' binding='global' size-in-bits='64'>
+    <function-decl name='_PyPegen_set_expr_context' mangled-name='_PyPegen_set_expr_context' filepath='Parser/pegen.h' line='268' column='1' visibility='default' binding='global' size-in-bits='64'>
       <return type-id='type-id-4'/>
     </function-decl>
     <function-decl name='_PyAST_NamedExpr' mangled-name='_PyAST_NamedExpr' filepath='./Include/internal/pycore_ast.h' line='714' column='1' visibility='default' binding='global' size-in-bits='64'>
       <return type-id='type-id-4'/>
     </function-decl>
-    <function-decl name='_PyPegen_get_expr_name' mangled-name='_PyPegen_get_expr_name' filepath='Parser/pegen.h' line='141' column='1' visibility='default' binding='global' size-in-bits='64'>
+    <function-decl name='_PyPegen_get_expr_name' mangled-name='_PyPegen_get_expr_name' filepath='Parser/pegen.h' line='142' column='1' visibility='default' binding='global' size-in-bits='64'>
       <return type-id='type-id-4'/>
     </function-decl>
-    <function-decl name='_PyPegen_key_pattern_pair' mangled-name='_PyPegen_key_pattern_pair' filepath='Parser/pegen.h' line='271' column='1' visibility='default' binding='global' size-in-bits='64'>
+    <function-decl name='_PyPegen_key_pattern_pair' mangled-name='_PyPegen_key_pattern_pair' filepath='Parser/pegen.h' line='272' column='1' visibility='default' binding='global' size-in-bits='64'>
       <return type-id='type-id-4'/>
     </function-decl>
     <function-decl name='_PyAST_MatchAs' mangled-name='_PyAST_MatchAs' filepath='./Include/internal/pycore_ast.h' line='829' column='1' visibility='default' binding='global' size-in-bits='64'>
       <return type-id='type-id-4'/>
     </function-decl>
-    <function-decl name='_PyPegen_lookahead_with_name' mangled-name='_PyPegen_lookahead_with_name' filepath='Parser/pegen.h' line='127' column='1' visibility='default' binding='global' size-in-bits='64'>
+    <function-decl name='_PyPegen_lookahead_with_name' mangled-name='_PyPegen_lookahead_with_name' filepath='Parser/pegen.h' line='128' column='1' visibility='default' binding='global' size-in-bits='64'>
       <return type-id='type-id-4'/>
     </function-decl>
     <function-decl name='_PyAST_match_case' mangled-name='_PyAST_match_case' filepath='./Include/internal/pycore_ast.h' line='809' column='1' visibility='default' binding='global' size-in-bits='64'>
       <return type-id='type-id-4'/>
     </function-decl>
-    <function-decl name='_PyPegen_get_invalid_target' mangled-name='_PyPegen_get_invalid_target' filepath='Parser/pegen.h' line='303' column='1' visibility='default' binding='global' size-in-bits='64'>
-      <return type-id='type-id-4'/>
-    </function-decl>
-    <function-decl name='_PyPegen_seq_last_item' mangled-name='_PyPegen_seq_last_item' filepath='Parser/pegen.h' line='149' column='1' visibility='default' binding='global' size-in-bits='64'>
+    <function-decl name='_PyPegen_get_invalid_target' mangled-name='_PyPegen_get_invalid_target' filepath='Parser/pegen.h' line='304' column='1' visibility='default' binding='global' size-in-bits='64'>
       <return type-id='type-id-4'/>
     </function-decl>
-    <function-decl name='_PyPegen_check_legacy_stmt' mangled-name='_PyPegen_check_legacy_stmt' filepath='Parser/pegen.h' line='294' column='1' visibility='default' binding='global' size-in-bits='64'>
+    <function-decl name='_PyPegen_seq_last_item' mangled-name='_PyPegen_seq_last_item' filepath='Parser/pegen.h' line='150' column='1' visibility='default' binding='global' size-in-bits='64'>
       <return type-id='type-id-4'/>
     </function-decl>
-    <function-decl name='_PyPegen_update_memo' mangled-name='_PyPegen_update_memo' filepath='Parser/pegen.h' line='123' column='1' visibility='default' binding='global' size-in-bits='64'>
+    <function-decl name='_PyPegen_update_memo' mangled-name='_PyPegen_update_memo' filepath='Parser/pegen.h' line='124' column='1' visibility='default' binding='global' size-in-bits='64'>
       <return type-id='type-id-4'/>
     </function-decl>
     <function-decl name='_PyAST_keyword' mangled-name='_PyAST_keyword' filepath='./Include/internal/pycore_ast.h' line='801' column='1' visibility='default' binding='global' size-in-bits='64'>
       <return type-id='type-id-4'/>
     </function-decl>
-    <function-decl name='_PyPegen_keyword_or_starred' mangled-name='_PyPegen_keyword_or_starred' filepath='Parser/pegen.h' line='283' column='1' visibility='default' binding='global' size-in-bits='64'>
+    <function-decl name='_PyPegen_keyword_or_starred' mangled-name='_PyPegen_keyword_or_starred' filepath='Parser/pegen.h' line='284' column='1' visibility='default' binding='global' size-in-bits='64'>
       <return type-id='type-id-4'/>
     </function-decl>
-    <function-decl name='_PyPegen_join_sequences' mangled-name='_PyPegen_join_sequences' filepath='Parser/pegen.h' line='292' column='1' visibility='default' binding='global' size-in-bits='64'>
+    <function-decl name='_PyPegen_join_sequences' mangled-name='_PyPegen_join_sequences' filepath='Parser/pegen.h' line='293' column='1' visibility='default' binding='global' size-in-bits='64'>
       <return type-id='type-id-4'/>
     </function-decl>
-    <function-decl name='_PyPegen_collect_call_seqs' mangled-name='_PyPegen_collect_call_seqs' filepath='Parser/pegen.h' line='286' column='1' visibility='default' binding='global' size-in-bits='64'>
+    <function-decl name='_PyPegen_collect_call_seqs' mangled-name='_PyPegen_collect_call_seqs' filepath='Parser/pegen.h' line='287' column='1' visibility='default' binding='global' size-in-bits='64'>
       <return type-id='type-id-4'/>
     </function-decl>
-    <function-decl name='_PyPegen_seq_delete_starred_exprs' mangled-name='_PyPegen_seq_delete_starred_exprs' filepath='Parser/pegen.h' line='285' column='1' visibility='default' binding='global' size-in-bits='64'>
+    <function-decl name='_PyPegen_seq_delete_starred_exprs' mangled-name='_PyPegen_seq_delete_starred_exprs' filepath='Parser/pegen.h' line='286' column='1' visibility='default' binding='global' size-in-bits='64'>
       <return type-id='type-id-4'/>
     </function-decl>
-    <function-decl name='_PyPegen_seq_extract_starred_exprs' mangled-name='_PyPegen_seq_extract_starred_exprs' filepath='Parser/pegen.h' line='284' column='1' visibility='default' binding='global' size-in-bits='64'>
+    <function-decl name='_PyPegen_seq_extract_starred_exprs' mangled-name='_PyPegen_seq_extract_starred_exprs' filepath='Parser/pegen.h' line='285' column='1' visibility='default' binding='global' size-in-bits='64'>
       <return type-id='type-id-4'/>
     </function-decl>
-    <function-decl name='_PyPegen_nonparen_genexp_in_call' mangled-name='_PyPegen_nonparen_genexp_in_call' filepath='Parser/pegen.h' line='328' column='1' visibility='default' binding='global' size-in-bits='64'>
+    <function-decl name='_PyPegen_nonparen_genexp_in_call' mangled-name='_PyPegen_nonparen_genexp_in_call' filepath='Parser/pegen.h' line='330' column='1' visibility='default' binding='global' size-in-bits='64'>
       <return type-id='type-id-4'/>
     </function-decl>
-    <function-decl name='_PyPegen_arguments_parsing_error' mangled-name='_PyPegen_arguments_parsing_error' filepath='Parser/pegen.h' line='327' column='1' visibility='default' binding='global' size-in-bits='64'>
+    <function-decl name='_PyPegen_arguments_parsing_error' mangled-name='_PyPegen_arguments_parsing_error' filepath='Parser/pegen.h' line='329' column='1' visibility='default' binding='global' size-in-bits='64'>
       <return type-id='type-id-4'/>
     </function-decl>
     <function-decl name='_PyAST_YieldFrom' mangled-name='_PyAST_YieldFrom' filepath='./Include/internal/pycore_ast.h' line='750' column='1' visibility='default' binding='global' size-in-bits='64'>
     <function-decl name='_PyAST_Yield' mangled-name='_PyAST_Yield' filepath='./Include/internal/pycore_ast.h' line='748' column='1' visibility='default' binding='global' size-in-bits='64'>
       <return type-id='type-id-4'/>
     </function-decl>
-    <function-decl name='_PyPegen_key_value_pair' mangled-name='_PyPegen_key_value_pair' filepath='Parser/pegen.h' line='268' column='1' visibility='default' binding='global' size-in-bits='64'>
+    <function-decl name='_PyPegen_key_value_pair' mangled-name='_PyPegen_key_value_pair' filepath='Parser/pegen.h' line='269' column='1' visibility='default' binding='global' size-in-bits='64'>
       <return type-id='type-id-4'/>
     </function-decl>
     <function-decl name='_PyAST_GeneratorExp' mangled-name='_PyAST_GeneratorExp' filepath='./Include/internal/pycore_ast.h' line='743' column='1' visibility='default' binding='global' size-in-bits='64'>
       <return type-id='type-id-4'/>
     </function-decl>
-    <function-decl name='_PyPegen_concatenate_strings' mangled-name='_PyPegen_concatenate_strings' filepath='Parser/pegen.h' line='289' column='1' visibility='default' binding='global' size-in-bits='64'>
+    <function-decl name='_PyPegen_concatenate_strings' mangled-name='_PyPegen_concatenate_strings' filepath='Parser/pegen.h' line='290' column='1' visibility='default' binding='global' size-in-bits='64'>
       <return type-id='type-id-4'/>
     </function-decl>
-    <function-decl name='_PyPegen_number_token' mangled-name='_PyPegen_number_token' filepath='Parser/pegen.h' line='139' column='1' visibility='default' binding='global' size-in-bits='64'>
+    <function-decl name='_PyPegen_number_token' mangled-name='_PyPegen_number_token' filepath='Parser/pegen.h' line='140' column='1' visibility='default' binding='global' size-in-bits='64'>
       <return type-id='type-id-4'/>
     </function-decl>
     <function-decl name='_PyAST_ListComp' mangled-name='_PyAST_ListComp' filepath='./Include/internal/pycore_ast.h' line='734' column='1' visibility='default' binding='global' size-in-bits='64'>
     <function-decl name='_PyAST_SetComp' mangled-name='_PyAST_SetComp' filepath='./Include/internal/pycore_ast.h' line='737' column='1' visibility='default' binding='global' size-in-bits='64'>
       <return type-id='type-id-4'/>
     </function-decl>
-    <function-decl name='_PyPegen_get_values' mangled-name='_PyPegen_get_values' filepath='Parser/pegen.h' line='270' column='1' visibility='default' binding='global' size-in-bits='64'>
+    <function-decl name='_PyPegen_get_values' mangled-name='_PyPegen_get_values' filepath='Parser/pegen.h' line='271' column='1' visibility='default' binding='global' size-in-bits='64'>
       <return type-id='type-id-4'/>
     </function-decl>
-    <function-decl name='_PyPegen_get_keys' mangled-name='_PyPegen_get_keys' filepath='Parser/pegen.h' line='269' column='1' visibility='default' binding='global' size-in-bits='64'>
+    <function-decl name='_PyPegen_get_keys' mangled-name='_PyPegen_get_keys' filepath='Parser/pegen.h' line='270' column='1' visibility='default' binding='global' size-in-bits='64'>
       <return type-id='type-id-4'/>
     </function-decl>
     <function-decl name='_PyAST_Dict' mangled-name='_PyAST_Dict' filepath='./Include/internal/pycore_ast.h' line='729' column='1' visibility='default' binding='global' size-in-bits='64'>
     <function-decl name='_PyAST_BinOp' mangled-name='_PyAST_BinOp' filepath='./Include/internal/pycore_ast.h' line='717' column='1' visibility='default' binding='global' size-in-bits='64'>
       <return type-id='type-id-4'/>
     </function-decl>
-    <function-decl name='_PyPegen_cmpop_expr_pair' mangled-name='_PyPegen_cmpop_expr_pair' filepath='Parser/pegen.h' line='264' column='1' visibility='default' binding='global' size-in-bits='64'>
+    <function-decl name='_PyPegen_cmpop_expr_pair' mangled-name='_PyPegen_cmpop_expr_pair' filepath='Parser/pegen.h' line='265' column='1' visibility='default' binding='global' size-in-bits='64'>
       <return type-id='type-id-4'/>
     </function-decl>
-    <function-decl name='_PyPegen_check_barry_as_flufl' mangled-name='_PyPegen_check_barry_as_flufl' filepath='Parser/pegen.h' line='293' column='1' visibility='default' binding='global' size-in-bits='64'>
+    <function-decl name='_PyPegen_check_barry_as_flufl' mangled-name='_PyPegen_check_barry_as_flufl' filepath='Parser/pegen.h' line='294' column='1' visibility='default' binding='global' size-in-bits='64'>
       <return type-id='type-id-4'/>
     </function-decl>
-    <function-decl name='_PyPegen_get_exprs' mangled-name='_PyPegen_get_exprs' filepath='Parser/pegen.h' line='266' column='1' visibility='default' binding='global' size-in-bits='64'>
+    <function-decl name='_PyPegen_get_exprs' mangled-name='_PyPegen_get_exprs' filepath='Parser/pegen.h' line='267' column='1' visibility='default' binding='global' size-in-bits='64'>
       <return type-id='type-id-4'/>
     </function-decl>
-    <function-decl name='_PyPegen_get_cmpops' mangled-name='_PyPegen_get_cmpops' filepath='Parser/pegen.h' line='265' column='1' visibility='default' binding='global' size-in-bits='64'>
+    <function-decl name='_PyPegen_get_cmpops' mangled-name='_PyPegen_get_cmpops' filepath='Parser/pegen.h' line='266' column='1' visibility='default' binding='global' size-in-bits='64'>
       <return type-id='type-id-4'/>
     </function-decl>
     <function-decl name='_PyAST_Compare' mangled-name='_PyAST_Compare' filepath='./Include/internal/pycore_ast.h' line='752' column='1' visibility='default' binding='global' size-in-bits='64'>
     <function-decl name='_PyAST_BoolOp' mangled-name='_PyAST_BoolOp' filepath='./Include/internal/pycore_ast.h' line='711' column='1' visibility='default' binding='global' size-in-bits='64'>
       <return type-id='type-id-4'/>
     </function-decl>
-    <function-decl name='_PyPegen_name_default_pair' mangled-name='_PyPegen_name_default_pair' filepath='Parser/pegen.h' line='274' column='1' visibility='default' binding='global' size-in-bits='64'>
+    <function-decl name='_PyPegen_name_default_pair' mangled-name='_PyPegen_name_default_pair' filepath='Parser/pegen.h' line='275' column='1' visibility='default' binding='global' size-in-bits='64'>
       <return type-id='type-id-4'/>
     </function-decl>
-    <function-decl name='_PyPegen_star_etc' mangled-name='_PyPegen_star_etc' filepath='Parser/pegen.h' line='276' column='1' visibility='default' binding='global' size-in-bits='64'>
+    <function-decl name='_PyPegen_star_etc' mangled-name='_PyPegen_star_etc' filepath='Parser/pegen.h' line='277' column='1' visibility='default' binding='global' size-in-bits='64'>
       <return type-id='type-id-4'/>
     </function-decl>
-    <function-decl name='_PyPegen_slash_with_default' mangled-name='_PyPegen_slash_with_default' filepath='Parser/pegen.h' line='275' column='1' visibility='default' binding='global' size-in-bits='64'>
+    <function-decl name='_PyPegen_slash_with_default' mangled-name='_PyPegen_slash_with_default' filepath='Parser/pegen.h' line='276' column='1' visibility='default' binding='global' size-in-bits='64'>
       <return type-id='type-id-4'/>
     </function-decl>
     <function-decl name='_PyAST_Lambda' mangled-name='_PyAST_Lambda' filepath='./Include/internal/pycore_ast.h' line='723' column='1' visibility='default' binding='global' size-in-bits='64'>
       <return type-id='type-id-4'/>
     </function-decl>
-    <function-decl name='_PyPegen_empty_arguments' mangled-name='_PyPegen_empty_arguments' filepath='Parser/pegen.h' line='279' column='1' visibility='default' binding='global' size-in-bits='64'>
+    <function-decl name='_PyPegen_empty_arguments' mangled-name='_PyPegen_empty_arguments' filepath='Parser/pegen.h' line='280' column='1' visibility='default' binding='global' size-in-bits='64'>
       <return type-id='type-id-4'/>
     </function-decl>
-    <function-decl name='_PyPegen_make_arguments' mangled-name='_PyPegen_make_arguments' filepath='Parser/pegen.h' line='277' column='1' visibility='default' binding='global' size-in-bits='64'>
+    <function-decl name='_PyPegen_make_arguments' mangled-name='_PyPegen_make_arguments' filepath='Parser/pegen.h' line='278' column='1' visibility='default' binding='global' size-in-bits='64'>
       <return type-id='type-id-4'/>
     </function-decl>
-    <function-decl name='_PyPegen_expect_forced_token' mangled-name='_PyPegen_expect_forced_token' filepath='Parser/pegen.h' line='133' column='1' visibility='default' binding='global' size-in-bits='64'>
+    <function-decl name='_PyPegen_expect_forced_token' mangled-name='_PyPegen_expect_forced_token' filepath='Parser/pegen.h' line='134' column='1' visibility='default' binding='global' size-in-bits='64'>
       <return type-id='type-id-4'/>
     </function-decl>
-    <function-decl name='_PyPegen_add_type_comment_to_arg' mangled-name='_PyPegen_add_type_comment_to_arg' filepath='Parser/pegen.h' line='247' column='1' visibility='default' binding='global' size-in-bits='64'>
+    <function-decl name='_PyPegen_add_type_comment_to_arg' mangled-name='_PyPegen_add_type_comment_to_arg' filepath='Parser/pegen.h' line='248' column='1' visibility='default' binding='global' size-in-bits='64'>
       <return type-id='type-id-4'/>
     </function-decl>
-    <function-decl name='_PyPegen_new_type_comment' mangled-name='_PyPegen_new_type_comment' filepath='Parser/pegen.h' line='208' column='1' visibility='default' binding='global' size-in-bits='64'>
+    <function-decl name='_PyPegen_new_type_comment' mangled-name='_PyPegen_new_type_comment' filepath='Parser/pegen.h' line='209' column='1' visibility='default' binding='global' size-in-bits='64'>
       <return type-id='type-id-4'/>
     </function-decl>
-    <function-decl name='_PyPegen_get_patterns' mangled-name='_PyPegen_get_patterns' filepath='Parser/pegen.h' line='273' column='1' visibility='default' binding='global' size-in-bits='64'>
+    <function-decl name='_PyPegen_get_patterns' mangled-name='_PyPegen_get_patterns' filepath='Parser/pegen.h' line='274' column='1' visibility='default' binding='global' size-in-bits='64'>
       <return type-id='type-id-4'/>
     </function-decl>
-    <function-decl name='_PyPegen_get_pattern_keys' mangled-name='_PyPegen_get_pattern_keys' filepath='Parser/pegen.h' line='272' column='1' visibility='default' binding='global' size-in-bits='64'>
+    <function-decl name='_PyPegen_get_pattern_keys' mangled-name='_PyPegen_get_pattern_keys' filepath='Parser/pegen.h' line='273' column='1' visibility='default' binding='global' size-in-bits='64'>
       <return type-id='type-id-4'/>
     </function-decl>
-    <function-decl name='_PyPegen_map_names_to_ids' mangled-name='_PyPegen_map_names_to_ids' filepath='Parser/pegen.h' line='263' column='1' visibility='default' binding='global' size-in-bits='64'>
+    <function-decl name='_PyPegen_map_names_to_ids' mangled-name='_PyPegen_map_names_to_ids' filepath='Parser/pegen.h' line='264' column='1' visibility='default' binding='global' size-in-bits='64'>
       <return type-id='type-id-4'/>
     </function-decl>
     <function-decl name='_PyAST_MatchClass' mangled-name='_PyAST_MatchClass' filepath='./Include/internal/pycore_ast.h' line='823' column='1' visibility='default' binding='global' size-in-bits='64'>
       <return type-id='type-id-4'/>
     </function-decl>
-    <function-decl name='_PyPegen_seq_first_item' mangled-name='_PyPegen_seq_first_item' filepath='Parser/pegen.h' line='152' column='1' visibility='default' binding='global' size-in-bits='64'>
+    <function-decl name='_PyPegen_seq_first_item' mangled-name='_PyPegen_seq_first_item' filepath='Parser/pegen.h' line='153' column='1' visibility='default' binding='global' size-in-bits='64'>
       <return type-id='type-id-4'/>
     </function-decl>
     <function-decl name='_PyAST_MatchMapping' mangled-name='_PyAST_MatchMapping' filepath='./Include/internal/pycore_ast.h' line='819' column='1' visibility='default' binding='global' size-in-bits='64'>
     <function-decl name='_PyAST_MatchStar' mangled-name='_PyAST_MatchStar' filepath='./Include/internal/pycore_ast.h' line='827' column='1' visibility='default' binding='global' size-in-bits='64'>
       <return type-id='type-id-4'/>
     </function-decl>
-    <function-decl name='_PyPegen_lookahead_with_string' mangled-name='_PyPegen_lookahead_with_string' filepath='Parser/pegen.h' line='129' column='1' visibility='default' binding='global' size-in-bits='64'>
+    <function-decl name='_PyPegen_lookahead_with_string' mangled-name='_PyPegen_lookahead_with_string' filepath='Parser/pegen.h' line='130' column='1' visibility='default' binding='global' size-in-bits='64'>
       <return type-id='type-id-4'/>
     </function-decl>
-    <function-decl name='_PyPegen_ensure_real' mangled-name='_PyPegen_ensure_real' filepath='Parser/pegen.h' line='291' column='1' visibility='default' binding='global' size-in-bits='64'>
+    <function-decl name='_PyPegen_ensure_real' mangled-name='_PyPegen_ensure_real' filepath='Parser/pegen.h' line='292' column='1' visibility='default' binding='global' size-in-bits='64'>
       <return type-id='type-id-4'/>
     </function-decl>
-    <function-decl name='_PyPegen_ensure_imaginary' mangled-name='_PyPegen_ensure_imaginary' filepath='Parser/pegen.h' line='290' column='1' visibility='default' binding='global' size-in-bits='64'>
+    <function-decl name='_PyPegen_ensure_imaginary' mangled-name='_PyPegen_ensure_imaginary' filepath='Parser/pegen.h' line='291' column='1' visibility='default' binding='global' size-in-bits='64'>
       <return type-id='type-id-4'/>
     </function-decl>
     <function-decl name='_PyAST_MatchOr' mangled-name='_PyAST_MatchOr' filepath='./Include/internal/pycore_ast.h' line='832' column='1' visibility='default' binding='global' size-in-bits='64'>
     <function-decl name='_PyAST_If' mangled-name='_PyAST_If' filepath='./Include/internal/pycore_ast.h' line='673' column='1' visibility='default' binding='global' size-in-bits='64'>
       <return type-id='type-id-4'/>
     </function-decl>
-    <function-decl name='_PyPegen_join_names_with_dot' mangled-name='_PyPegen_join_names_with_dot' filepath='Parser/pegen.h' line='260' column='1' visibility='default' binding='global' size-in-bits='64'>
+    <function-decl name='_PyPegen_join_names_with_dot' mangled-name='_PyPegen_join_names_with_dot' filepath='Parser/pegen.h' line='261' column='1' visibility='default' binding='global' size-in-bits='64'>
       <return type-id='type-id-4'/>
     </function-decl>
-    <function-decl name='_PyPegen_alias_for_star' mangled-name='_PyPegen_alias_for_star' filepath='Parser/pegen.h' line='262' column='1' visibility='default' binding='global' size-in-bits='64'>
+    <function-decl name='_PyPegen_alias_for_star' mangled-name='_PyPegen_alias_for_star' filepath='Parser/pegen.h' line='263' column='1' visibility='default' binding='global' size-in-bits='64'>
       <return type-id='type-id-4'/>
     </function-decl>
-    <function-decl name='_PyPegen_seq_count_dots' mangled-name='_PyPegen_seq_count_dots' filepath='Parser/pegen.h' line='261' column='1' visibility='default' binding='global' size-in-bits='64'>
+    <function-decl name='_PyPegen_seq_count_dots' mangled-name='_PyPegen_seq_count_dots' filepath='Parser/pegen.h' line='262' column='1' visibility='default' binding='global' size-in-bits='64'>
       <return type-id='type-id-4'/>
     </function-decl>
     <function-decl name='_PyAST_ImportFrom' mangled-name='_PyAST_ImportFrom' filepath='./Include/internal/pycore_ast.h' line='695' column='1' visibility='default' binding='global' size-in-bits='64'>
       <return type-id='type-id-4'/>
     </function-decl>
-    <function-decl name='_PyPegen_augoperator' mangled-name='_PyPegen_augoperator' filepath='Parser/pegen.h' line='280' column='1' visibility='default' binding='global' size-in-bits='64'>
+    <function-decl name='_PyPegen_augoperator' mangled-name='_PyPegen_augoperator' filepath='Parser/pegen.h' line='281' column='1' visibility='default' binding='global' size-in-bits='64'>
       <return type-id='type-id-4'/>
     </function-decl>
     <function-decl name='_PyAST_AnnAssign' mangled-name='_PyAST_AnnAssign' filepath='./Include/internal/pycore_ast.h' line='659' column='1' visibility='default' binding='global' size-in-bits='64'>
     <function-decl name='_PyAST_Nonlocal' mangled-name='_PyAST_Nonlocal' filepath='./Include/internal/pycore_ast.h' line='700' column='1' visibility='default' binding='global' size-in-bits='64'>
       <return type-id='type-id-4'/>
     </function-decl>
-    <function-decl name='_PyPegen_seq_flatten' mangled-name='_PyPegen_seq_flatten' filepath='Parser/pegen.h' line='259' column='1' visibility='default' binding='global' size-in-bits='64'>
+    <function-decl name='_PyPegen_seq_flatten' mangled-name='_PyPegen_seq_flatten' filepath='Parser/pegen.h' line='260' column='1' visibility='default' binding='global' size-in-bits='64'>
       <return type-id='type-id-4'/>
     </function-decl>
-    <function-decl name='_PyPegen_raise_error_known_location' mangled-name='_PyPegen_raise_error_known_location' filepath='Parser/pegen.h' line='143' column='1' visibility='default' binding='global' size-in-bits='64'>
+    <function-decl name='_PyPegen_raise_error_known_location' mangled-name='_PyPegen_raise_error_known_location' filepath='Parser/pegen.h' line='144' column='1' visibility='default' binding='global' size-in-bits='64'>
       <return type-id='type-id-4'/>
     </function-decl>
   </abi-instr>
     <function-decl name='_PyAST_JoinedStr' mangled-name='_PyAST_JoinedStr' filepath='./Include/internal/pycore_ast.h' line='761' column='1' visibility='default' binding='global' size-in-bits='64'>
       <return type-id='type-id-4'/>
     </function-decl>
-    <function-decl name='PyUnicode_FromStringAndSize' mangled-name='PyUnicode_FromStringAndSize' filepath='./Include/unicodeobject.h' line='130' column='1' visibility='default' binding='global' size-in-bits='64'>
-      <return type-id='type-id-4'/>
-    </function-decl>
     <function-decl name='PyUnicode_DecodeUTF8Stateful' mangled-name='PyUnicode_DecodeUTF8Stateful' filepath='./Include/unicodeobject.h' line='460' column='1' visibility='default' binding='global' size-in-bits='64'>
       <return type-id='type-id-4'/>
     </function-decl>
     <function-decl name='PyUnicode_AppendAndDel' mangled-name='PyUnicode_AppendAndDel' filepath='./Include/unicodeobject.h' line='835' column='1' visibility='default' binding='global' size-in-bits='64'>
       <return type-id='type-id-4'/>
     </function-decl>
-    <function-decl name='_PyPegen_Parser_New' mangled-name='_PyPegen_Parser_New' filepath='Parser/pegen.h' line='249' column='1' visibility='default' binding='global' size-in-bits='64'>
+    <function-decl name='_PyPegen_Parser_New' mangled-name='_PyPegen_Parser_New' filepath='Parser/pegen.h' line='250' column='1' visibility='default' binding='global' size-in-bits='64'>
       <return type-id='type-id-4'/>
     </function-decl>
-    <function-decl name='_PyPegen_run_parser' mangled-name='_PyPegen_run_parser' filepath='Parser/pegen.h' line='253' column='1' visibility='default' binding='global' size-in-bits='64'>
+    <function-decl name='_PyPegen_run_parser' mangled-name='_PyPegen_run_parser' filepath='Parser/pegen.h' line='254' column='1' visibility='default' binding='global' size-in-bits='64'>
       <return type-id='type-id-4'/>
     </function-decl>
-    <function-decl name='_PyPegen_Parser_Free' mangled-name='_PyPegen_Parser_Free' filepath='Parser/pegen.h' line='250' column='1' visibility='default' binding='global' size-in-bits='64'>
+    <function-decl name='_PyPegen_Parser_Free' mangled-name='_PyPegen_Parser_Free' filepath='Parser/pegen.h' line='251' column='1' visibility='default' binding='global' size-in-bits='64'>
       <return type-id='type-id-4'/>
     </function-decl>
     <function-decl name='_PyAST_FormattedValue' mangled-name='_PyAST_FormattedValue' filepath='./Include/internal/pycore_ast.h' line='758' column='1' visibility='default' binding='global' size-in-bits='64'>
     <function-decl name='PyErr_WarnExplicitObject' mangled-name='PyErr_WarnExplicitObject' filepath='./Include/warnings.h' line='30' column='1' visibility='default' binding='global' size-in-bits='64'>
       <return type-id='type-id-4'/>
     </function-decl>
-    <function-decl name='_PyPegen_new_identifier' mangled-name='_PyPegen_new_identifier' filepath='Parser/pegen.h' line='248' column='1' visibility='default' binding='global' size-in-bits='64'>
+    <function-decl name='_PyPegen_new_identifier' mangled-name='_PyPegen_new_identifier' filepath='Parser/pegen.h' line='249' column='1' visibility='default' binding='global' size-in-bits='64'>
       <return type-id='type-id-4'/>
     </function-decl>
   </abi-instr>
     <function-decl name='PySys_Audit' mangled-name='PySys_Audit' filepath='./Include/cpython/sysmodule.h' line='12' column='1' visibility='default' binding='global' size-in-bits='64'>
       <return type-id='type-id-4'/>
     </function-decl>
-    <function-decl name='_PyPegen_run_parser_from_file_pointer' mangled-name='_PyPegen_run_parser_from_file_pointer' filepath='Parser/pegen.h' line='251' column='1' visibility='default' binding='global' size-in-bits='64'>
+    <function-decl name='_PyPegen_run_parser_from_file_pointer' mangled-name='_PyPegen_run_parser_from_file_pointer' filepath='Parser/pegen.h' line='252' column='1' visibility='default' binding='global' size-in-bits='64'>
       <return type-id='type-id-4'/>
     </function-decl>
-    <function-decl name='_PyPegen_run_parser_from_string' mangled-name='_PyPegen_run_parser_from_string' filepath='Parser/pegen.h' line='254' column='1' visibility='default' binding='global' size-in-bits='64'>
+    <function-decl name='_PyPegen_run_parser_from_string' mangled-name='_PyPegen_run_parser_from_string' filepath='Parser/pegen.h' line='255' column='1' visibility='default' binding='global' size-in-bits='64'>
       <return type-id='type-id-4'/>
     </function-decl>
   </abi-instr>
   <abi-instr version='1.0' address-size='64' path='Parser/myreadline.c' comp-dir-path='/src' language='LANG_C99'>
-    <class-decl name='_ts' size-in-bits='2240' is-struct='yes' visibility='default' filepath='./Include/cpython/pystate.h' line='62' column='1' id='type-id-10'>
+    <class-decl name='_ts' size-in-bits='2240' is-struct='yes' visibility='default' filepath='./Include/cpython/pystate.h' line='60' column='1' id='type-id-10'>
       <data-member access='public' layout-offset-in-bits='0'>
-        <var-decl name='prev' type-id='type-id-11' visibility='default' filepath='./Include/cpython/pystate.h' line='65' column='1'/>
+        <var-decl name='prev' type-id='type-id-11' visibility='default' filepath='./Include/cpython/pystate.h' line='63' column='1'/>
       </data-member>
       <data-member access='public' layout-offset-in-bits='64'>
-        <var-decl name='next' type-id='type-id-11' visibility='default' filepath='./Include/cpython/pystate.h' line='66' column='1'/>
+        <var-decl name='next' type-id='type-id-11' visibility='default' filepath='./Include/cpython/pystate.h' line='64' column='1'/>
       </data-member>
       <data-member access='public' layout-offset-in-bits='128'>
-        <var-decl name='interp' type-id='type-id-12' visibility='default' filepath='./Include/cpython/pystate.h' line='67' column='1'/>
+        <var-decl name='interp' type-id='type-id-12' visibility='default' filepath='./Include/cpython/pystate.h' line='65' column='1'/>
       </data-member>
       <data-member access='public' layout-offset-in-bits='192'>
-        <var-decl name='frame' type-id='type-id-13' visibility='default' filepath='./Include/cpython/pystate.h' line='70' column='1'/>
+        <var-decl name='frame' type-id='type-id-13' visibility='default' filepath='./Include/cpython/pystate.h' line='68' column='1'/>
       </data-member>
       <data-member access='public' layout-offset-in-bits='256'>
-        <var-decl name='recursion_depth' type-id='type-id-9' visibility='default' filepath='./Include/cpython/pystate.h' line='71' column='1'/>
+        <var-decl name='recursion_depth' type-id='type-id-9' visibility='default' filepath='./Include/cpython/pystate.h' line='69' column='1'/>
       </data-member>
       <data-member access='public' layout-offset-in-bits='288'>
-        <var-decl name='recursion_headroom' type-id='type-id-9' visibility='default' filepath='./Include/cpython/pystate.h' line='72' column='1'/>
+        <var-decl name='recursion_headroom' type-id='type-id-9' visibility='default' filepath='./Include/cpython/pystate.h' line='70' column='1'/>
       </data-member>
       <data-member access='public' layout-offset-in-bits='320'>
-        <var-decl name='stackcheck_counter' type-id='type-id-9' visibility='default' filepath='./Include/cpython/pystate.h' line='73' column='1'/>
+        <var-decl name='stackcheck_counter' type-id='type-id-9' visibility='default' filepath='./Include/cpython/pystate.h' line='71' column='1'/>
       </data-member>
       <data-member access='public' layout-offset-in-bits='352'>
-        <var-decl name='tracing' type-id='type-id-9' visibility='default' filepath='./Include/cpython/pystate.h' line='78' column='1'/>
+        <var-decl name='tracing' type-id='type-id-9' visibility='default' filepath='./Include/cpython/pystate.h' line='76' column='1'/>
       </data-member>
       <data-member access='public' layout-offset-in-bits='384'>
-        <var-decl name='cframe' type-id='type-id-14' visibility='default' filepath='./Include/cpython/pystate.h' line='82' column='1'/>
+        <var-decl name='cframe' type-id='type-id-14' visibility='default' filepath='./Include/cpython/pystate.h' line='80' column='1'/>
       </data-member>
       <data-member access='public' layout-offset-in-bits='448'>
-        <var-decl name='c_profilefunc' type-id='type-id-15' visibility='default' filepath='./Include/cpython/pystate.h' line='84' column='1'/>
+        <var-decl name='c_profilefunc' type-id='type-id-15' visibility='default' filepath='./Include/cpython/pystate.h' line='82' column='1'/>
       </data-member>
       <data-member access='public' layout-offset-in-bits='512'>
-        <var-decl name='c_tracefunc' type-id='type-id-15' visibility='default' filepath='./Include/cpython/pystate.h' line='85' column='1'/>
+        <var-decl name='c_tracefunc' type-id='type-id-15' visibility='default' filepath='./Include/cpython/pystate.h' line='83' column='1'/>
       </data-member>
       <data-member access='public' layout-offset-in-bits='576'>
-        <var-decl name='c_profileobj' type-id='type-id-16' visibility='default' filepath='./Include/cpython/pystate.h' line='86' column='1'/>
+        <var-decl name='c_profileobj' type-id='type-id-16' visibility='default' filepath='./Include/cpython/pystate.h' line='84' column='1'/>
       </data-member>
       <data-member access='public' layout-offset-in-bits='640'>
-        <var-decl name='c_traceobj' type-id='type-id-16' visibility='default' filepath='./Include/cpython/pystate.h' line='87' column='1'/>
+        <var-decl name='c_traceobj' type-id='type-id-16' visibility='default' filepath='./Include/cpython/pystate.h' line='85' column='1'/>
       </data-member>
       <data-member access='public' layout-offset-in-bits='704'>
-        <var-decl name='curexc_type' type-id='type-id-16' visibility='default' filepath='./Include/cpython/pystate.h' line='90' column='1'/>
+        <var-decl name='curexc_type' type-id='type-id-16' visibility='default' filepath='./Include/cpython/pystate.h' line='88' column='1'/>
       </data-member>
       <data-member access='public' layout-offset-in-bits='768'>
-        <var-decl name='curexc_value' type-id='type-id-16' visibility='default' filepath='./Include/cpython/pystate.h' line='91' column='1'/>
+        <var-decl name='curexc_value' type-id='type-id-16' visibility='default' filepath='./Include/cpython/pystate.h' line='89' column='1'/>
       </data-member>
       <data-member access='public' layout-offset-in-bits='832'>
-        <var-decl name='curexc_traceback' type-id='type-id-16' visibility='default' filepath='./Include/cpython/pystate.h' line='92' column='1'/>
+        <var-decl name='curexc_traceback' type-id='type-id-16' visibility='default' filepath='./Include/cpython/pystate.h' line='90' column='1'/>
       </data-member>
       <data-member access='public' layout-offset-in-bits='896'>
-        <var-decl name='exc_state' type-id='type-id-17' visibility='default' filepath='./Include/cpython/pystate.h' line='97' column='1'/>
+        <var-decl name='exc_state' type-id='type-id-17' visibility='default' filepath='./Include/cpython/pystate.h' line='95' column='1'/>
       </data-member>
       <data-member access='public' layout-offset-in-bits='1152'>
-        <var-decl name='exc_info' type-id='type-id-18' visibility='default' filepath='./Include/cpython/pystate.h' line='101' column='1'/>
+        <var-decl name='exc_info' type-id='type-id-18' visibility='default' filepath='./Include/cpython/pystate.h' line='99' column='1'/>
       </data-member>
       <data-member access='public' layout-offset-in-bits='1216'>
-        <var-decl name='dict' type-id='type-id-16' visibility='default' filepath='./Include/cpython/pystate.h' line='103' column='1'/>
+        <var-decl name='dict' type-id='type-id-16' visibility='default' filepath='./Include/cpython/pystate.h' line='101' column='1'/>
       </data-member>
       <data-member access='public' layout-offset-in-bits='1280'>
-        <var-decl name='gilstate_counter' type-id='type-id-9' visibility='default' filepath='./Include/cpython/pystate.h' line='105' column='1'/>
+        <var-decl name='gilstate_counter' type-id='type-id-9' visibility='default' filepath='./Include/cpython/pystate.h' line='103' column='1'/>
       </data-member>
       <data-member access='public' layout-offset-in-bits='1344'>
-        <var-decl name='async_exc' type-id='type-id-16' visibility='default' filepath='./Include/cpython/pystate.h' line='107' column='1'/>
+        <var-decl name='async_exc' type-id='type-id-16' visibility='default' filepath='./Include/cpython/pystate.h' line='105' column='1'/>
       </data-member>
       <data-member access='public' layout-offset-in-bits='1408'>
-        <var-decl name='thread_id' type-id='type-id-19' visibility='default' filepath='./Include/cpython/pystate.h' line='108' column='1'/>
+        <var-decl name='thread_id' type-id='type-id-19' visibility='default' filepath='./Include/cpython/pystate.h' line='106' column='1'/>
       </data-member>
       <data-member access='public' layout-offset-in-bits='1472'>
-        <var-decl name='trash_delete_nesting' type-id='type-id-9' visibility='default' filepath='./Include/cpython/pystate.h' line='110' column='1'/>
+        <var-decl name='trash_delete_nesting' type-id='type-id-9' visibility='default' filepath='./Include/cpython/pystate.h' line='108' column='1'/>
       </data-member>
       <data-member access='public' layout-offset-in-bits='1536'>
-        <var-decl name='trash_delete_later' type-id='type-id-16' visibility='default' filepath='./Include/cpython/pystate.h' line='111' column='1'/>
+        <var-decl name='trash_delete_later' type-id='type-id-16' visibility='default' filepath='./Include/cpython/pystate.h' line='109' column='1'/>
       </data-member>
       <data-member access='public' layout-offset-in-bits='1600'>
-        <var-decl name='on_delete' type-id='type-id-20' visibility='default' filepath='./Include/cpython/pystate.h' line='136' column='1'/>
+        <var-decl name='on_delete' type-id='type-id-20' visibility='default' filepath='./Include/cpython/pystate.h' line='134' column='1'/>
       </data-member>
       <data-member access='public' layout-offset-in-bits='1664'>
-        <var-decl name='on_delete_data' type-id='type-id-21' visibility='default' filepath='./Include/cpython/pystate.h' line='137' column='1'/>
+        <var-decl name='on_delete_data' type-id='type-id-21' visibility='default' filepath='./Include/cpython/pystate.h' line='135' column='1'/>
       </data-member>
       <data-member access='public' layout-offset-in-bits='1728'>
-        <var-decl name='coroutine_origin_tracking_depth' type-id='type-id-9' visibility='default' filepath='./Include/cpython/pystate.h' line='139' column='1'/>
+        <var-decl name='coroutine_origin_tracking_depth' type-id='type-id-9' visibility='default' filepath='./Include/cpython/pystate.h' line='137' column='1'/>
       </data-member>
       <data-member access='public' layout-offset-in-bits='1792'>
-        <var-decl name='async_gen_firstiter' type-id='type-id-16' visibility='default' filepath='./Include/cpython/pystate.h' line='141' column='1'/>
+        <var-decl name='async_gen_firstiter' type-id='type-id-16' visibility='default' filepath='./Include/cpython/pystate.h' line='139' column='1'/>
       </data-member>
       <data-member access='public' layout-offset-in-bits='1856'>
-        <var-decl name='async_gen_finalizer' type-id='type-id-16' visibility='default' filepath='./Include/cpython/pystate.h' line='142' column='1'/>
+        <var-decl name='async_gen_finalizer' type-id='type-id-16' visibility='default' filepath='./Include/cpython/pystate.h' line='140' column='1'/>
       </data-member>
       <data-member access='public' layout-offset-in-bits='1920'>
-        <var-decl name='context' type-id='type-id-16' visibility='default' filepath='./Include/cpython/pystate.h' line='144' column='1'/>
+        <var-decl name='context' type-id='type-id-16' visibility='default' filepath='./Include/cpython/pystate.h' line='142' column='1'/>
       </data-member>
       <data-member access='public' layout-offset-in-bits='1984'>
-        <var-decl name='context_ver' type-id='type-id-22' visibility='default' filepath='./Include/cpython/pystate.h' line='145' column='1'/>
+        <var-decl name='context_ver' type-id='type-id-22' visibility='default' filepath='./Include/cpython/pystate.h' line='143' column='1'/>
       </data-member>
       <data-member access='public' layout-offset-in-bits='2048'>
-        <var-decl name='id' type-id='type-id-22' visibility='default' filepath='./Include/cpython/pystate.h' line='148' column='1'/>
+        <var-decl name='id' type-id='type-id-22' visibility='default' filepath='./Include/cpython/pystate.h' line='146' column='1'/>
       </data-member>
       <data-member access='public' layout-offset-in-bits='2112'>
-        <var-decl name='root_cframe' type-id='type-id-23' visibility='default' filepath='./Include/cpython/pystate.h' line='150' column='1'/>
+        <var-decl name='root_cframe' type-id='type-id-23' visibility='default' filepath='./Include/cpython/pystate.h' line='148' column='1'/>
       </data-member>
     </class-decl>
     <pointer-type-def type-id='type-id-10' size-in-bits='64' id='type-id-11'/>
     <class-decl name='_frame' is-struct='yes' visibility='default' is-declaration-only='yes' id='type-id-26'/>
     <typedef-decl name='PyFrameObject' type-id='type-id-26' filepath='./Include/pyframe.h' line='12' column='1' id='type-id-27'/>
     <pointer-type-def type-id='type-id-27' size-in-bits='64' id='type-id-13'/>
-    <class-decl name='_cframe' size-in-bits='128' is-struct='yes' visibility='default' filepath='./Include/cpython/pystate.h' line='32' column='1' id='type-id-28'>
+    <class-decl name='_cframe' size-in-bits='128' is-struct='yes' visibility='default' filepath='./Include/cpython/pystate.h' line='30' column='1' id='type-id-28'>
       <data-member access='public' layout-offset-in-bits='0'>
-        <var-decl name='use_tracing' type-id='type-id-9' visibility='default' filepath='./Include/cpython/pystate.h' line='43' column='1'/>
+        <var-decl name='use_tracing' type-id='type-id-9' visibility='default' filepath='./Include/cpython/pystate.h' line='41' column='1'/>
       </data-member>
       <data-member access='public' layout-offset-in-bits='64'>
-        <var-decl name='previous' type-id='type-id-29' visibility='default' filepath='./Include/cpython/pystate.h' line='44' column='1'/>
+        <var-decl name='previous' type-id='type-id-29' visibility='default' filepath='./Include/cpython/pystate.h' line='42' column='1'/>
       </data-member>
     </class-decl>
     <pointer-type-def type-id='type-id-28' size-in-bits='64' id='type-id-29'/>
-    <typedef-decl name='CFrame' type-id='type-id-28' filepath='./Include/cpython/pystate.h' line='45' column='1' id='type-id-23'/>
+    <typedef-decl name='CFrame' type-id='type-id-28' filepath='./Include/cpython/pystate.h' line='43' column='1' id='type-id-23'/>
     <pointer-type-def type-id='type-id-23' size-in-bits='64' id='type-id-14'/>
     <class-decl name='_object' size-in-bits='128' is-struct='yes' visibility='default' filepath='./Include/object.h' line='105' column='1' id='type-id-30'>
       <data-member access='public' layout-offset-in-bits='0'>
     <pointer-type-def type-id='type-id-158' size-in-bits='64' id='type-id-159'/>
     <typedef-decl name='vectorcallfunc' type-id='type-id-159' filepath='./Include/cpython/object.h' line='67' column='1' id='type-id-67'/>
     <pointer-type-def type-id='type-id-160' size-in-bits='64' id='type-id-161'/>
-    <typedef-decl name='Py_tracefunc' type-id='type-id-161' filepath='./Include/cpython/pystate.h' line='15' column='1' id='type-id-15'/>
-    <class-decl name='_err_stackitem' size-in-bits='256' is-struct='yes' visibility='default' filepath='./Include/cpython/pystate.h' line='47' column='1' id='type-id-162'>
+    <typedef-decl name='Py_tracefunc' type-id='type-id-161' filepath='./Include/cpython/pystate.h' line='13' column='1' id='type-id-15'/>
+    <class-decl name='_err_stackitem' size-in-bits='256' is-struct='yes' visibility='default' filepath='./Include/cpython/pystate.h' line='45' column='1' id='type-id-162'>
       <data-member access='public' layout-offset-in-bits='0'>
-        <var-decl name='exc_type' type-id='type-id-16' visibility='default' filepath='./Include/cpython/pystate.h' line='54' column='1'/>
+        <var-decl name='exc_type' type-id='type-id-16' visibility='default' filepath='./Include/cpython/pystate.h' line='52' column='1'/>
       </data-member>
       <data-member access='public' layout-offset-in-bits='64'>
-        <var-decl name='exc_value' type-id='type-id-16' visibility='default' filepath='./Include/cpython/pystate.h' line='54' column='1'/>
+        <var-decl name='exc_value' type-id='type-id-16' visibility='default' filepath='./Include/cpython/pystate.h' line='52' column='1'/>
       </data-member>
       <data-member access='public' layout-offset-in-bits='128'>
-        <var-decl name='exc_traceback' type-id='type-id-16' visibility='default' filepath='./Include/cpython/pystate.h' line='54' column='1'/>
+        <var-decl name='exc_traceback' type-id='type-id-16' visibility='default' filepath='./Include/cpython/pystate.h' line='52' column='1'/>
       </data-member>
       <data-member access='public' layout-offset-in-bits='192'>
-        <var-decl name='previous_item' type-id='type-id-163' visibility='default' filepath='./Include/cpython/pystate.h' line='56' column='1'/>
+        <var-decl name='previous_item' type-id='type-id-163' visibility='default' filepath='./Include/cpython/pystate.h' line='54' column='1'/>
       </data-member>
     </class-decl>
     <pointer-type-def type-id='type-id-162' size-in-bits='64' id='type-id-163'/>
-    <typedef-decl name='_PyErr_StackItem' type-id='type-id-162' filepath='./Include/cpython/pystate.h' line='58' column='1' id='type-id-17'/>
+    <typedef-decl name='_PyErr_StackItem' type-id='type-id-162' filepath='./Include/cpython/pystate.h' line='56' column='1' id='type-id-17'/>
     <pointer-type-def type-id='type-id-17' size-in-bits='64' id='type-id-18'/>
     <typedef-decl name='__uint64_t' type-id='type-id-19' filepath='/usr/include/x86_64-linux-gnu/bits/types.h' line='45' column='1' id='type-id-164'/>
     <typedef-decl name='uint64_t' type-id='type-id-164' filepath='/usr/include/x86_64-linux-gnu/bits/stdint-uintn.h' line='27' column='1' id='type-id-22'/>
     <function-decl name='PyUnicode_FromString' mangled-name='PyUnicode_FromString' filepath='./Include/unicodeobject.h' line='137' column='1' visibility='default' binding='global' size-in-bits='64'>
       <return type-id='type-id-4'/>
     </function-decl>
-    <function-decl name='_Py_FatalErrorFunc' mangled-name='_Py_FatalErrorFunc' filepath='./Include/cpython/pyerrors.h' line='199' column='1' visibility='default' binding='global' size-in-bits='64'>
+    <function-decl name='_Py_FatalErrorFunc' mangled-name='_Py_FatalErrorFunc' filepath='./Include/cpython/pyerrors.h' line='205' column='1' visibility='default' binding='global' size-in-bits='64'>
       <return type-id='type-id-4'/>
     </function-decl>
     <function-decl name='PyUnicode_Substring' mangled-name='PyUnicode_Substring' filepath='./Include/unicodeobject.h' line='142' column='1' visibility='default' binding='global' size-in-bits='64'>
     <function-decl name='PySys_WriteStderr' mangled-name='PySys_WriteStderr' filepath='./Include/sysmodule.h' line='19' column='1' visibility='default' binding='global' size-in-bits='64'>
       <return type-id='type-id-4'/>
     </function-decl>
-    <function-decl name='__printf_chk' mangled-name='__printf_chk' filepath='/usr/include/x86_64-linux-gnu/bits/stdio2.h' line='90' column='1' visibility='default' binding='global' size-in-bits='64'>
-      <return type-id='type-id-4'/>
-    </function-decl>
-    <function-decl name='putc' mangled-name='putc' filepath='/usr/include/stdio.h' line='522' column='1' visibility='default' binding='global' size-in-bits='64'>
-      <return type-id='type-id-4'/>
-    </function-decl>
-    <function-decl name='__builtin_fwrite' mangled-name='fwrite' filepath='/usr/include/stdio.h' line='652' column='1' visibility='default' binding='global' size-in-bits='64'>
+    <function-decl name='Py_UniversalNewlineFgets' mangled-name='Py_UniversalNewlineFgets' filepath='./Include/cpython/fileobject.h' line='5' column='1' visibility='default' binding='global' size-in-bits='64'>
       <return type-id='type-id-4'/>
     </function-decl>
     <function-decl name='PyUnicode_AsUTF8AndSize' mangled-name='PyUnicode_AsUTF8AndSize' filepath='./Include/unicodeobject.h' line='483' column='1' visibility='default' binding='global' size-in-bits='64'>
     <function-decl name='PyObject_CallNoArgs' mangled-name='PyObject_CallNoArgs' filepath='./Include/abstract.h' line='146' column='1' visibility='default' binding='global' size-in-bits='64'>
       <return type-id='type-id-4'/>
     </function-decl>
-    <function-decl name='Py_UniversalNewlineFgets' mangled-name='Py_UniversalNewlineFgets' filepath='./Include/cpython/fileobject.h' line='5' column='1' visibility='default' binding='global' size-in-bits='64'>
-      <return type-id='type-id-4'/>
-    </function-decl>
     <function-decl name='getc' mangled-name='getc' filepath='/usr/include/stdio.h' line='486' column='1' visibility='default' binding='global' size-in-bits='64'>
       <return type-id='type-id-4'/>
     </function-decl>
   <abi-instr version='1.0' address-size='64' path='Objects/abstract.c' comp-dir-path='/src' language='LANG_C99'>
     <qualified-type-def type-id='type-id-72' const='yes' id='type-id-191'/>
     <pointer-type-def type-id='type-id-191' size-in-bits='64' id='type-id-192'/>
-    <function-decl name='_Py_FreeCharPArray' mangled-name='_Py_FreeCharPArray' filepath='Objects/abstract.c' line='2972' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='_Py_FreeCharPArray'>
-      <parameter type-id='type-id-192' name='array' filepath='Objects/abstract.c' line='2972' column='1'/>
+    <function-decl name='_Py_FreeCharPArray' mangled-name='_Py_FreeCharPArray' filepath='Objects/abstract.c' line='2980' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='_Py_FreeCharPArray'>
+      <parameter type-id='type-id-192' name='array' filepath='Objects/abstract.c' line='2980' column='1'/>
       <return type-id='type-id-4'/>
     </function-decl>
-    <function-decl name='_PySequence_BytesToCharpArray' mangled-name='_PySequence_BytesToCharpArray' filepath='Objects/abstract.c' line='2913' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='_PySequence_BytesToCharpArray'>
-      <parameter type-id='type-id-16' name='self' filepath='Objects/abstract.c' line='2913' column='1'/>
+    <function-decl name='_PySequence_BytesToCharpArray' mangled-name='_PySequence_BytesToCharpArray' filepath='Objects/abstract.c' line='2921' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='_PySequence_BytesToCharpArray'>
+      <parameter type-id='type-id-16' name='self' filepath='Objects/abstract.c' line='2921' column='1'/>
       <return type-id='type-id-192'/>
     </function-decl>
-    <function-decl name='PyIter_Send' mangled-name='PyIter_Send' filepath='Objects/abstract.c' line='2879' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='PyIter_Send'>
-      <parameter type-id='type-id-16' name='iter' filepath='Objects/abstract.c' line='2879' column='1'/>
-      <parameter type-id='type-id-16' name='arg' filepath='Objects/abstract.c' line='2879' column='1'/>
-      <parameter type-id='type-id-86' name='result' filepath='Objects/abstract.c' line='2879' column='1'/>
+    <function-decl name='PyIter_Send' mangled-name='PyIter_Send' filepath='Objects/abstract.c' line='2887' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='PyIter_Send'>
+      <parameter type-id='type-id-16' name='iter' filepath='Objects/abstract.c' line='2887' column='1'/>
+      <parameter type-id='type-id-16' name='arg' filepath='Objects/abstract.c' line='2887' column='1'/>
+      <parameter type-id='type-id-86' name='result' filepath='Objects/abstract.c' line='2887' column='1'/>
       <return type-id='type-id-85'/>
     </function-decl>
-    <function-decl name='PyAIter_Check' mangled-name='PyAIter_Check' filepath='Objects/abstract.c' line='2847' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='PyAIter_Check'>
-      <parameter type-id='type-id-16' name='obj' filepath='Objects/abstract.c' line='2847' column='1'/>
+    <function-decl name='PyAIter_Check' mangled-name='PyAIter_Check' filepath='Objects/abstract.c' line='2855' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='PyAIter_Check'>
+      <parameter type-id='type-id-16' name='obj' filepath='Objects/abstract.c' line='2855' column='1'/>
       <return type-id='type-id-9'/>
     </function-decl>
-    <function-decl name='PyIter_Check' mangled-name='PyIter_Check' filepath='Objects/abstract.c' line='2839' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='PyIter_Check'>
-      <parameter type-id='type-id-16' name='obj' filepath='Objects/abstract.c' line='2847' column='1'/>
+    <function-decl name='PyIter_Check' mangled-name='PyIter_Check' filepath='Objects/abstract.c' line='2847' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='PyIter_Check'>
+      <parameter type-id='type-id-16' name='obj' filepath='Objects/abstract.c' line='2855' column='1'/>
       <return type-id='type-id-9'/>
     </function-decl>
-    <function-decl name='PyObject_GetAIter' mangled-name='PyObject_GetAIter' filepath='Objects/abstract.c' line='2819' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='PyObject_GetAIter'>
-      <parameter type-id='type-id-16' name='o' filepath='Objects/abstract.c' line='2819' column='1'/>
+    <function-decl name='PyObject_GetAIter' mangled-name='PyObject_GetAIter' filepath='Objects/abstract.c' line='2827' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='PyObject_GetAIter'>
+      <parameter type-id='type-id-16' name='o' filepath='Objects/abstract.c' line='2827' column='1'/>
       <return type-id='type-id-16'/>
     </function-decl>
-    <function-decl name='_PyObject_RealIsSubclass' mangled-name='_PyObject_RealIsSubclass' filepath='Objects/abstract.c' line='2786' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='_PyObject_RealIsSubclass'>
-      <parameter type-id='type-id-16' name='derived' filepath='Objects/abstract.c' line='2786' column='1'/>
-      <parameter type-id='type-id-16' name='cls' filepath='Objects/abstract.c' line='2786' column='1'/>
+    <function-decl name='_PyObject_RealIsSubclass' mangled-name='_PyObject_RealIsSubclass' filepath='Objects/abstract.c' line='2794' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='_PyObject_RealIsSubclass'>
+      <parameter type-id='type-id-16' name='derived' filepath='Objects/abstract.c' line='2794' column='1'/>
+      <parameter type-id='type-id-16' name='cls' filepath='Objects/abstract.c' line='2794' column='1'/>
       <return type-id='type-id-9'/>
     </function-decl>
-    <function-decl name='_PyObject_RealIsInstance' mangled-name='_PyObject_RealIsInstance' filepath='Objects/abstract.c' line='2780' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='_PyObject_RealIsInstance'>
-      <parameter type-id='type-id-16' name='derived' filepath='Objects/abstract.c' line='2786' column='1'/>
-      <parameter type-id='type-id-16' name='cls' filepath='Objects/abstract.c' line='2786' column='1'/>
+    <function-decl name='_PyObject_RealIsInstance' mangled-name='_PyObject_RealIsInstance' filepath='Objects/abstract.c' line='2788' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='_PyObject_RealIsInstance'>
+      <parameter type-id='type-id-16' name='derived' filepath='Objects/abstract.c' line='2794' column='1'/>
+      <parameter type-id='type-id-16' name='cls' filepath='Objects/abstract.c' line='2794' column='1'/>
       <return type-id='type-id-9'/>
     </function-decl>
-    <function-decl name='PyObject_IsSubclass' mangled-name='PyObject_IsSubclass' filepath='Objects/abstract.c' line='2772' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='PyObject_IsSubclass'>
-      <parameter type-id='type-id-16' name='derived' filepath='Objects/abstract.c' line='2772' column='1'/>
-      <parameter type-id='type-id-16' name='cls' filepath='Objects/abstract.c' line='2772' column='1'/>
+    <function-decl name='PyObject_IsSubclass' mangled-name='PyObject_IsSubclass' filepath='Objects/abstract.c' line='2780' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='PyObject_IsSubclass'>
+      <parameter type-id='type-id-16' name='derived' filepath='Objects/abstract.c' line='2780' column='1'/>
+      <parameter type-id='type-id-16' name='cls' filepath='Objects/abstract.c' line='2780' column='1'/>
       <return type-id='type-id-9'/>
     </function-decl>
-    <function-decl name='PyObject_IsInstance' mangled-name='PyObject_IsInstance' filepath='Objects/abstract.c' line='2687' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='PyObject_IsInstance'>
-      <parameter type-id='type-id-16' name='derived' filepath='Objects/abstract.c' line='2772' column='1'/>
-      <parameter type-id='type-id-16' name='cls' filepath='Objects/abstract.c' line='2772' column='1'/>
+    <function-decl name='PyObject_IsInstance' mangled-name='PyObject_IsInstance' filepath='Objects/abstract.c' line='2695' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='PyObject_IsInstance'>
+      <parameter type-id='type-id-16' name='derived' filepath='Objects/abstract.c' line='2780' column='1'/>
+      <parameter type-id='type-id-16' name='cls' filepath='Objects/abstract.c' line='2780' column='1'/>
       <return type-id='type-id-9'/>
     </function-decl>
     <function-decl name='PyMapping_Values' mangled-name='PyMapping_Values' filepath='Objects/abstract.c' line='2473' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='PyMapping_Values'>
       <return type-id='type-id-9'/>
     </function-decl>
     <function-decl name='PyObject_CheckBuffer' mangled-name='PyObject_CheckBuffer' filepath='Objects/abstract.c' line='289' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='PyObject_CheckBuffer'>
-      <parameter type-id='type-id-16' name='obj' filepath='Objects/abstract.c' line='2847' column='1'/>
+      <parameter type-id='type-id-16' name='obj' filepath='Objects/abstract.c' line='2855' column='1'/>
       <return type-id='type-id-9'/>
     </function-decl>
     <function-decl name='PyObject_DelItemString' mangled-name='PyObject_DelItemString' filepath='Objects/abstract.c' line='269' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='PyObject_DelItemString'>
       <parameter type-id='type-id-31' name='defaultvalue' filepath='Objects/abstract.c' line='91' column='1'/>
       <return type-id='type-id-31'/>
     </function-decl>
-    <function-decl name='PyObject_GetIter' mangled-name='PyObject_GetIter' filepath='Objects/abstract.c' line='2793' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='PyObject_GetIter'>
-      <parameter type-id='type-id-16' name='o' filepath='Objects/abstract.c' line='2793' column='1'/>
+    <function-decl name='PyObject_GetIter' mangled-name='PyObject_GetIter' filepath='Objects/abstract.c' line='2801' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='PyObject_GetIter'>
+      <parameter type-id='type-id-16' name='o' filepath='Objects/abstract.c' line='2801' column='1'/>
       <return type-id='type-id-16'/>
     </function-decl>
-    <function-decl name='PyIter_Next' mangled-name='PyIter_Next' filepath='Objects/abstract.c' line='2863' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='PyIter_Next'>
-      <parameter type-id='type-id-16' name='iter' filepath='Objects/abstract.c' line='2863' column='1'/>
+    <function-decl name='PyIter_Next' mangled-name='PyIter_Next' filepath='Objects/abstract.c' line='2871' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='PyIter_Next'>
+      <parameter type-id='type-id-16' name='iter' filepath='Objects/abstract.c' line='2871' column='1'/>
       <return type-id='type-id-16'/>
     </function-decl>
     <function-decl name='PySequence_Contains' mangled-name='PySequence_Contains' filepath='Objects/abstract.c' line='2281' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='PySequence_Contains'>
     <function-decl name='PyObject_Free' mangled-name='PyObject_Free' filepath='./Include/objimpl.h' line='102' column='1' visibility='default' binding='global' size-in-bits='64'>
       <return type-id='type-id-4'/>
     </function-decl>
-    <function-decl name='_Py_GetConfig' mangled-name='_Py_GetConfig' filepath='./Include/cpython/pystate.h' line='247' column='1' visibility='default' binding='global' size-in-bits='64'>
+    <function-decl name='_Py_GetConfig' mangled-name='_Py_GetConfig' filepath='./Include/cpython/pystate.h' line='245' column='1' visibility='default' binding='global' size-in-bits='64'>
       <return type-id='type-id-4'/>
     </function-decl>
     <function-decl name='PyErr_WarnEx' mangled-name='PyErr_WarnEx' filepath='./Include/warnings.h' line='11' column='1' visibility='default' binding='global' size-in-bits='64'>
       <parameter is-variadic='yes'/>
       <return type-id='type-id-16'/>
     </function-decl>
-    <class-decl name='_ts' size-in-bits='2240' is-struct='yes' visibility='default' filepath='./Include/cpython/pystate.h' line='62' column='1' id='type-id-221'>
+    <class-decl name='_ts' size-in-bits='2240' is-struct='yes' visibility='default' filepath='./Include/cpython/pystate.h' line='60' column='1' id='type-id-221'>
       <data-member access='public' layout-offset-in-bits='0'>
-        <var-decl name='prev' type-id='type-id-11' visibility='default' filepath='./Include/cpython/pystate.h' line='65' column='1'/>
+        <var-decl name='prev' type-id='type-id-11' visibility='default' filepath='./Include/cpython/pystate.h' line='63' column='1'/>
       </data-member>
       <data-member access='public' layout-offset-in-bits='64'>
-        <var-decl name='next' type-id='type-id-11' visibility='default' filepath='./Include/cpython/pystate.h' line='66' column='1'/>
+        <var-decl name='next' type-id='type-id-11' visibility='default' filepath='./Include/cpython/pystate.h' line='64' column='1'/>
       </data-member>
       <data-member access='public' layout-offset-in-bits='128'>
-        <var-decl name='interp' type-id='type-id-222' visibility='default' filepath='./Include/cpython/pystate.h' line='67' column='1'/>
+        <var-decl name='interp' type-id='type-id-222' visibility='default' filepath='./Include/cpython/pystate.h' line='65' column='1'/>
       </data-member>
       <data-member access='public' layout-offset-in-bits='192'>
-        <var-decl name='frame' type-id='type-id-223' visibility='default' filepath='./Include/cpython/pystate.h' line='70' column='1'/>
+        <var-decl name='frame' type-id='type-id-223' visibility='default' filepath='./Include/cpython/pystate.h' line='68' column='1'/>
       </data-member>
       <data-member access='public' layout-offset-in-bits='256'>
-        <var-decl name='recursion_depth' type-id='type-id-9' visibility='default' filepath='./Include/cpython/pystate.h' line='71' column='1'/>
+        <var-decl name='recursion_depth' type-id='type-id-9' visibility='default' filepath='./Include/cpython/pystate.h' line='69' column='1'/>
       </data-member>
       <data-member access='public' layout-offset-in-bits='288'>
-        <var-decl name='recursion_headroom' type-id='type-id-9' visibility='default' filepath='./Include/cpython/pystate.h' line='72' column='1'/>
+        <var-decl name='recursion_headroom' type-id='type-id-9' visibility='default' filepath='./Include/cpython/pystate.h' line='70' column='1'/>
       </data-member>
       <data-member access='public' layout-offset-in-bits='320'>
-        <var-decl name='stackcheck_counter' type-id='type-id-9' visibility='default' filepath='./Include/cpython/pystate.h' line='73' column='1'/>
+        <var-decl name='stackcheck_counter' type-id='type-id-9' visibility='default' filepath='./Include/cpython/pystate.h' line='71' column='1'/>
       </data-member>
       <data-member access='public' layout-offset-in-bits='352'>
-        <var-decl name='tracing' type-id='type-id-9' visibility='default' filepath='./Include/cpython/pystate.h' line='78' column='1'/>
+        <var-decl name='tracing' type-id='type-id-9' visibility='default' filepath='./Include/cpython/pystate.h' line='76' column='1'/>
       </data-member>
       <data-member access='public' layout-offset-in-bits='384'>
-        <var-decl name='cframe' type-id='type-id-14' visibility='default' filepath='./Include/cpython/pystate.h' line='82' column='1'/>
+        <var-decl name='cframe' type-id='type-id-14' visibility='default' filepath='./Include/cpython/pystate.h' line='80' column='1'/>
       </data-member>
       <data-member access='public' layout-offset-in-bits='448'>
-        <var-decl name='c_profilefunc' type-id='type-id-15' visibility='default' filepath='./Include/cpython/pystate.h' line='84' column='1'/>
+        <var-decl name='c_profilefunc' type-id='type-id-15' visibility='default' filepath='./Include/cpython/pystate.h' line='82' column='1'/>
       </data-member>
       <data-member access='public' layout-offset-in-bits='512'>
-        <var-decl name='c_tracefunc' type-id='type-id-15' visibility='default' filepath='./Include/cpython/pystate.h' line='85' column='1'/>
+        <var-decl name='c_tracefunc' type-id='type-id-15' visibility='default' filepath='./Include/cpython/pystate.h' line='83' column='1'/>
       </data-member>
       <data-member access='public' layout-offset-in-bits='576'>
-        <var-decl name='c_profileobj' type-id='type-id-16' visibility='default' filepath='./Include/cpython/pystate.h' line='86' column='1'/>
+        <var-decl name='c_profileobj' type-id='type-id-16' visibility='default' filepath='./Include/cpython/pystate.h' line='84' column='1'/>
       </data-member>
       <data-member access='public' layout-offset-in-bits='640'>
-        <var-decl name='c_traceobj' type-id='type-id-16' visibility='default' filepath='./Include/cpython/pystate.h' line='87' column='1'/>
+        <var-decl name='c_traceobj' type-id='type-id-16' visibility='default' filepath='./Include/cpython/pystate.h' line='85' column='1'/>
       </data-member>
       <data-member access='public' layout-offset-in-bits='704'>
-        <var-decl name='curexc_type' type-id='type-id-16' visibility='default' filepath='./Include/cpython/pystate.h' line='90' column='1'/>
+        <var-decl name='curexc_type' type-id='type-id-16' visibility='default' filepath='./Include/cpython/pystate.h' line='88' column='1'/>
       </data-member>
       <data-member access='public' layout-offset-in-bits='768'>
-        <var-decl name='curexc_value' type-id='type-id-16' visibility='default' filepath='./Include/cpython/pystate.h' line='91' column='1'/>
+        <var-decl name='curexc_value' type-id='type-id-16' visibility='default' filepath='./Include/cpython/pystate.h' line='89' column='1'/>
       </data-member>
       <data-member access='public' layout-offset-in-bits='832'>
-        <var-decl name='curexc_traceback' type-id='type-id-16' visibility='default' filepath='./Include/cpython/pystate.h' line='92' column='1'/>
+        <var-decl name='curexc_traceback' type-id='type-id-16' visibility='default' filepath='./Include/cpython/pystate.h' line='90' column='1'/>
       </data-member>
       <data-member access='public' layout-offset-in-bits='896'>
-        <var-decl name='exc_state' type-id='type-id-17' visibility='default' filepath='./Include/cpython/pystate.h' line='97' column='1'/>
+        <var-decl name='exc_state' type-id='type-id-17' visibility='default' filepath='./Include/cpython/pystate.h' line='95' column='1'/>
       </data-member>
       <data-member access='public' layout-offset-in-bits='1152'>
-        <var-decl name='exc_info' type-id='type-id-18' visibility='default' filepath='./Include/cpython/pystate.h' line='101' column='1'/>
+        <var-decl name='exc_info' type-id='type-id-18' visibility='default' filepath='./Include/cpython/pystate.h' line='99' column='1'/>
       </data-member>
       <data-member access='public' layout-offset-in-bits='1216'>
-        <var-decl name='dict' type-id='type-id-16' visibility='default' filepath='./Include/cpython/pystate.h' line='103' column='1'/>
+        <var-decl name='dict' type-id='type-id-16' visibility='default' filepath='./Include/cpython/pystate.h' line='101' column='1'/>
       </data-member>
       <data-member access='public' layout-offset-in-bits='1280'>
-        <var-decl name='gilstate_counter' type-id='type-id-9' visibility='default' filepath='./Include/cpython/pystate.h' line='105' column='1'/>
+        <var-decl name='gilstate_counter' type-id='type-id-9' visibility='default' filepath='./Include/cpython/pystate.h' line='103' column='1'/>
       </data-member>
       <data-member access='public' layout-offset-in-bits='1344'>
-        <var-decl name='async_exc' type-id='type-id-16' visibility='default' filepath='./Include/cpython/pystate.h' line='107' column='1'/>
+        <var-decl name='async_exc' type-id='type-id-16' visibility='default' filepath='./Include/cpython/pystate.h' line='105' column='1'/>
       </data-member>
       <data-member access='public' layout-offset-in-bits='1408'>
-        <var-decl name='thread_id' type-id='type-id-19' visibility='default' filepath='./Include/cpython/pystate.h' line='108' column='1'/>
+        <var-decl name='thread_id' type-id='type-id-19' visibility='default' filepath='./Include/cpython/pystate.h' line='106' column='1'/>
       </data-member>
       <data-member access='public' layout-offset-in-bits='1472'>
-        <var-decl name='trash_delete_nesting' type-id='type-id-9' visibility='default' filepath='./Include/cpython/pystate.h' line='110' column='1'/>
+        <var-decl name='trash_delete_nesting' type-id='type-id-9' visibility='default' filepath='./Include/cpython/pystate.h' line='108' column='1'/>
       </data-member>
       <data-member access='public' layout-offset-in-bits='1536'>
-        <var-decl name='trash_delete_later' type-id='type-id-16' visibility='default' filepath='./Include/cpython/pystate.h' line='111' column='1'/>
+        <var-decl name='trash_delete_later' type-id='type-id-16' visibility='default' filepath='./Include/cpython/pystate.h' line='109' column='1'/>
       </data-member>
       <data-member access='public' layout-offset-in-bits='1600'>
-        <var-decl name='on_delete' type-id='type-id-20' visibility='default' filepath='./Include/cpython/pystate.h' line='136' column='1'/>
+        <var-decl name='on_delete' type-id='type-id-20' visibility='default' filepath='./Include/cpython/pystate.h' line='134' column='1'/>
       </data-member>
       <data-member access='public' layout-offset-in-bits='1664'>
-        <var-decl name='on_delete_data' type-id='type-id-21' visibility='default' filepath='./Include/cpython/pystate.h' line='137' column='1'/>
+        <var-decl name='on_delete_data' type-id='type-id-21' visibility='default' filepath='./Include/cpython/pystate.h' line='135' column='1'/>
       </data-member>
       <data-member access='public' layout-offset-in-bits='1728'>
-        <var-decl name='coroutine_origin_tracking_depth' type-id='type-id-9' visibility='default' filepath='./Include/cpython/pystate.h' line='139' column='1'/>
+        <var-decl name='coroutine_origin_tracking_depth' type-id='type-id-9' visibility='default' filepath='./Include/cpython/pystate.h' line='137' column='1'/>
       </data-member>
       <data-member access='public' layout-offset-in-bits='1792'>
-        <var-decl name='async_gen_firstiter' type-id='type-id-16' visibility='default' filepath='./Include/cpython/pystate.h' line='141' column='1'/>
+        <var-decl name='async_gen_firstiter' type-id='type-id-16' visibility='default' filepath='./Include/cpython/pystate.h' line='139' column='1'/>
       </data-member>
       <data-member access='public' layout-offset-in-bits='1856'>
-        <var-decl name='async_gen_finalizer' type-id='type-id-16' visibility='default' filepath='./Include/cpython/pystate.h' line='142' column='1'/>
+        <var-decl name='async_gen_finalizer' type-id='type-id-16' visibility='default' filepath='./Include/cpython/pystate.h' line='140' column='1'/>
       </data-member>
       <data-member access='public' layout-offset-in-bits='1920'>
-        <var-decl name='context' type-id='type-id-16' visibility='default' filepath='./Include/cpython/pystate.h' line='144' column='1'/>
+        <var-decl name='context' type-id='type-id-16' visibility='default' filepath='./Include/cpython/pystate.h' line='142' column='1'/>
       </data-member>
       <data-member access='public' layout-offset-in-bits='1984'>
-        <var-decl name='context_ver' type-id='type-id-22' visibility='default' filepath='./Include/cpython/pystate.h' line='145' column='1'/>
+        <var-decl name='context_ver' type-id='type-id-22' visibility='default' filepath='./Include/cpython/pystate.h' line='143' column='1'/>
       </data-member>
       <data-member access='public' layout-offset-in-bits='2048'>
-        <var-decl name='id' type-id='type-id-22' visibility='default' filepath='./Include/cpython/pystate.h' line='148' column='1'/>
+        <var-decl name='id' type-id='type-id-22' visibility='default' filepath='./Include/cpython/pystate.h' line='146' column='1'/>
       </data-member>
       <data-member access='public' layout-offset-in-bits='2112'>
-        <var-decl name='root_cframe' type-id='type-id-23' visibility='default' filepath='./Include/cpython/pystate.h' line='150' column='1'/>
+        <var-decl name='root_cframe' type-id='type-id-23' visibility='default' filepath='./Include/cpython/pystate.h' line='148' column='1'/>
       </data-member>
     </class-decl>
     <class-decl name='_is' size-in-bits='908160' is-struct='yes' visibility='default' filepath='./Include/internal/pycore_interp.h' line='220' column='1' id='type-id-224'>
         <var-decl name='next' type-id='type-id-265' visibility='default' filepath='./Include/internal/pycore_interp.h' line='331' column='1'/>
       </data-member>
     </class-decl>
-    <class-decl name='_xid' size-in-bits='320' is-struct='yes' visibility='default' filepath='./Include/cpython/pystate.h' line='257' column='1' id='type-id-268'>
+    <class-decl name='_xid' size-in-bits='320' is-struct='yes' visibility='default' filepath='./Include/cpython/pystate.h' line='255' column='1' id='type-id-268'>
       <data-member access='public' layout-offset-in-bits='0'>
-        <var-decl name='data' type-id='type-id-21' visibility='default' filepath='./Include/cpython/pystate.h' line='261' column='1'/>
+        <var-decl name='data' type-id='type-id-21' visibility='default' filepath='./Include/cpython/pystate.h' line='259' column='1'/>
       </data-member>
       <data-member access='public' layout-offset-in-bits='64'>
-        <var-decl name='obj' type-id='type-id-16' visibility='default' filepath='./Include/cpython/pystate.h' line='268' column='1'/>
+        <var-decl name='obj' type-id='type-id-16' visibility='default' filepath='./Include/cpython/pystate.h' line='266' column='1'/>
       </data-member>
       <data-member access='public' layout-offset-in-bits='128'>
-        <var-decl name='interp' type-id='type-id-227' visibility='default' filepath='./Include/cpython/pystate.h' line='278' column='1'/>
+        <var-decl name='interp' type-id='type-id-227' visibility='default' filepath='./Include/cpython/pystate.h' line='276' column='1'/>
       </data-member>
       <data-member access='public' layout-offset-in-bits='192'>
-        <var-decl name='new_object' type-id='type-id-269' visibility='default' filepath='./Include/cpython/pystate.h' line='283' column='1'/>
+        <var-decl name='new_object' type-id='type-id-269' visibility='default' filepath='./Include/cpython/pystate.h' line='281' column='1'/>
       </data-member>
       <data-member access='public' layout-offset-in-bits='256'>
-        <var-decl name='free' type-id='type-id-20' visibility='default' filepath='./Include/cpython/pystate.h' line='293' column='1'/>
+        <var-decl name='free' type-id='type-id-20' visibility='default' filepath='./Include/cpython/pystate.h' line='291' column='1'/>
       </data-member>
     </class-decl>
     <pointer-type-def type-id='type-id-268' size-in-bits='64' id='type-id-270'/>
     <pointer-type-def type-id='type-id-271' size-in-bits='64' id='type-id-269'/>
     <pointer-type-def type-id='type-id-272' size-in-bits='64' id='type-id-273'/>
-    <typedef-decl name='crossinterpdatafunc' type-id='type-id-273' filepath='./Include/cpython/pystate.h' line='304' column='1' id='type-id-267'/>
+    <typedef-decl name='crossinterpdatafunc' type-id='type-id-273' filepath='./Include/cpython/pystate.h' line='302' column='1' id='type-id-267'/>
     <pointer-type-def type-id='type-id-266' size-in-bits='64' id='type-id-265'/>
     <pointer-type-def type-id='type-id-274' size-in-bits='64' id='type-id-275'/>
 
     </class-decl>
     <typedef-decl name='pthread_key_t' type-id='type-id-66' filepath='/usr/include/x86_64-linux-gnu/bits/pthreadtypes.h' line='49' column='1' id='type-id-303'/>
     <typedef-decl name='Py_tss_t' type-id='type-id-302' filepath='./Include/pythread.h' line='123' column='1' id='type-id-301'/>
-    <class-decl name='PyPreConfig' size-in-bits='320' is-struct='yes' visibility='default' filepath='./Include/cpython/initconfig.h' line='44' column='1' id='type-id-304'>
+    <class-decl name='PyPreConfig' size-in-bits='320' is-struct='yes' visibility='default' filepath='./Include/cpython/initconfig.h' line='47' column='1' id='type-id-304'>
       <data-member access='public' layout-offset-in-bits='0'>
-        <var-decl name='_config_init' type-id='type-id-9' visibility='default' filepath='./Include/cpython/initconfig.h' line='45' column='1'/>
+        <var-decl name='_config_init' type-id='type-id-9' visibility='default' filepath='./Include/cpython/initconfig.h' line='48' column='1'/>
       </data-member>
       <data-member access='public' layout-offset-in-bits='32'>
-        <var-decl name='parse_argv' type-id='type-id-9' visibility='default' filepath='./Include/cpython/initconfig.h' line='49' column='1'/>
+        <var-decl name='parse_argv' type-id='type-id-9' visibility='default' filepath='./Include/cpython/initconfig.h' line='52' column='1'/>
       </data-member>
       <data-member access='public' layout-offset-in-bits='64'>
-        <var-decl name='isolated' type-id='type-id-9' visibility='default' filepath='./Include/cpython/initconfig.h' line='56' column='1'/>
+        <var-decl name='isolated' type-id='type-id-9' visibility='default' filepath='./Include/cpython/initconfig.h' line='59' column='1'/>
       </data-member>
       <data-member access='public' layout-offset-in-bits='96'>
-        <var-decl name='use_environment' type-id='type-id-9' visibility='default' filepath='./Include/cpython/initconfig.h' line='61' column='1'/>
+        <var-decl name='use_environment' type-id='type-id-9' visibility='default' filepath='./Include/cpython/initconfig.h' line='64' column='1'/>
       </data-member>
       <data-member access='public' layout-offset-in-bits='128'>
-        <var-decl name='configure_locale' type-id='type-id-9' visibility='default' filepath='./Include/cpython/initconfig.h' line='65' column='1'/>
+        <var-decl name='configure_locale' type-id='type-id-9' visibility='default' filepath='./Include/cpython/initconfig.h' line='68' column='1'/>
       </data-member>
       <data-member access='public' layout-offset-in-bits='160'>
-        <var-decl name='coerce_c_locale' type-id='type-id-9' visibility='default' filepath='./Include/cpython/initconfig.h' line='78' column='1'/>
+        <var-decl name='coerce_c_locale' type-id='type-id-9' visibility='default' filepath='./Include/cpython/initconfig.h' line='81' column='1'/>
       </data-member>
       <data-member access='public' layout-offset-in-bits='192'>
-        <var-decl name='coerce_c_locale_warn' type-id='type-id-9' visibility='default' filepath='./Include/cpython/initconfig.h' line='86' column='1'/>
+        <var-decl name='coerce_c_locale_warn' type-id='type-id-9' visibility='default' filepath='./Include/cpython/initconfig.h' line='89' column='1'/>
       </data-member>
       <data-member access='public' layout-offset-in-bits='224'>
-        <var-decl name='utf8_mode' type-id='type-id-9' visibility='default' filepath='./Include/cpython/initconfig.h' line='111' column='1'/>
+        <var-decl name='utf8_mode' type-id='type-id-9' visibility='default' filepath='./Include/cpython/initconfig.h' line='114' column='1'/>
       </data-member>
       <data-member access='public' layout-offset-in-bits='256'>
-        <var-decl name='dev_mode' type-id='type-id-9' visibility='default' filepath='./Include/cpython/initconfig.h' line='117' column='1'/>
+        <var-decl name='dev_mode' type-id='type-id-9' visibility='default' filepath='./Include/cpython/initconfig.h' line='120' column='1'/>
       </data-member>
       <data-member access='public' layout-offset-in-bits='288'>
-        <var-decl name='allocator' type-id='type-id-9' visibility='default' filepath='./Include/cpython/initconfig.h' line='121' column='1'/>
+        <var-decl name='allocator' type-id='type-id-9' visibility='default' filepath='./Include/cpython/initconfig.h' line='124' column='1'/>
       </data-member>
     </class-decl>
-    <typedef-decl name='PyPreConfig' type-id='type-id-304' filepath='./Include/cpython/initconfig.h' line='122' column='1' id='type-id-257'/>
+    <typedef-decl name='PyPreConfig' type-id='type-id-304' filepath='./Include/cpython/initconfig.h' line='125' column='1' id='type-id-257'/>
     <typedef-decl name='Py_OpenCodeHookFunction' type-id='type-id-146' filepath='./Include/cpython/fileobject.h' line='12' column='1' id='type-id-258'/>
     <class-decl name='_Py_AuditHookEntry' size-in-bits='192' is-struct='yes' visibility='default' filepath='./Include/internal/pycore_runtime.h' line='46' column='1' id='type-id-305'>
       <data-member access='public' layout-offset-in-bits='0'>
       <subrange length='3' type-id='type-id-19' id='type-id-322'/>
 
     </array-type-def>
-    <class-decl name='PyConfig' size-in-bits='3136' is-struct='yes' visibility='default' filepath='./Include/cpython/initconfig.h' line='131' column='1' id='type-id-324'>
+    <class-decl name='PyConfig' size-in-bits='3136' is-struct='yes' visibility='default' filepath='./Include/cpython/initconfig.h' line='134' column='1' id='type-id-324'>
       <data-member access='public' layout-offset-in-bits='0'>
-        <var-decl name='_config_init' type-id='type-id-9' visibility='default' filepath='./Include/cpython/initconfig.h' line='132' column='1'/>
+        <var-decl name='_config_init' type-id='type-id-9' visibility='default' filepath='./Include/cpython/initconfig.h' line='135' column='1'/>
       </data-member>
       <data-member access='public' layout-offset-in-bits='32'>
-        <var-decl name='isolated' type-id='type-id-9' visibility='default' filepath='./Include/cpython/initconfig.h' line='134' column='1'/>
+        <var-decl name='isolated' type-id='type-id-9' visibility='default' filepath='./Include/cpython/initconfig.h' line='137' column='1'/>
       </data-member>
       <data-member access='public' layout-offset-in-bits='64'>
-        <var-decl name='use_environment' type-id='type-id-9' visibility='default' filepath='./Include/cpython/initconfig.h' line='135' column='1'/>
+        <var-decl name='use_environment' type-id='type-id-9' visibility='default' filepath='./Include/cpython/initconfig.h' line='138' column='1'/>
       </data-member>
       <data-member access='public' layout-offset-in-bits='96'>
-        <var-decl name='dev_mode' type-id='type-id-9' visibility='default' filepath='./Include/cpython/initconfig.h' line='136' column='1'/>
+        <var-decl name='dev_mode' type-id='type-id-9' visibility='default' filepath='./Include/cpython/initconfig.h' line='139' column='1'/>
       </data-member>
       <data-member access='public' layout-offset-in-bits='128'>
-        <var-decl name='install_signal_handlers' type-id='type-id-9' visibility='default' filepath='./Include/cpython/initconfig.h' line='137' column='1'/>
+        <var-decl name='install_signal_handlers' type-id='type-id-9' visibility='default' filepath='./Include/cpython/initconfig.h' line='140' column='1'/>
       </data-member>
       <data-member access='public' layout-offset-in-bits='160'>
-        <var-decl name='use_hash_seed' type-id='type-id-9' visibility='default' filepath='./Include/cpython/initconfig.h' line='138' column='1'/>
+        <var-decl name='use_hash_seed' type-id='type-id-9' visibility='default' filepath='./Include/cpython/initconfig.h' line='141' column='1'/>
       </data-member>
       <data-member access='public' layout-offset-in-bits='192'>
-        <var-decl name='hash_seed' type-id='type-id-19' visibility='default' filepath='./Include/cpython/initconfig.h' line='139' column='1'/>
+        <var-decl name='hash_seed' type-id='type-id-19' visibility='default' filepath='./Include/cpython/initconfig.h' line='142' column='1'/>
       </data-member>
       <data-member access='public' layout-offset-in-bits='256'>
-        <var-decl name='faulthandler' type-id='type-id-9' visibility='default' filepath='./Include/cpython/initconfig.h' line='140' column='1'/>
+        <var-decl name='faulthandler' type-id='type-id-9' visibility='default' filepath='./Include/cpython/initconfig.h' line='143' column='1'/>
       </data-member>
       <data-member access='public' layout-offset-in-bits='288'>
-        <var-decl name='tracemalloc' type-id='type-id-9' visibility='default' filepath='./Include/cpython/initconfig.h' line='141' column='1'/>
+        <var-decl name='tracemalloc' type-id='type-id-9' visibility='default' filepath='./Include/cpython/initconfig.h' line='144' column='1'/>
       </data-member>
       <data-member access='public' layout-offset-in-bits='320'>
-        <var-decl name='import_time' type-id='type-id-9' visibility='default' filepath='./Include/cpython/initconfig.h' line='142' column='1'/>
+        <var-decl name='import_time' type-id='type-id-9' visibility='default' filepath='./Include/cpython/initconfig.h' line='145' column='1'/>
       </data-member>
       <data-member access='public' layout-offset-in-bits='352'>
-        <var-decl name='show_ref_count' type-id='type-id-9' visibility='default' filepath='./Include/cpython/initconfig.h' line='143' column='1'/>
+        <var-decl name='show_ref_count' type-id='type-id-9' visibility='default' filepath='./Include/cpython/initconfig.h' line='146' column='1'/>
       </data-member>
       <data-member access='public' layout-offset-in-bits='384'>
-        <var-decl name='dump_refs' type-id='type-id-9' visibility='default' filepath='./Include/cpython/initconfig.h' line='144' column='1'/>
+        <var-decl name='dump_refs' type-id='type-id-9' visibility='default' filepath='./Include/cpython/initconfig.h' line='147' column='1'/>
       </data-member>
       <data-member access='public' layout-offset-in-bits='416'>
-        <var-decl name='malloc_stats' type-id='type-id-9' visibility='default' filepath='./Include/cpython/initconfig.h' line='145' column='1'/>
+        <var-decl name='malloc_stats' type-id='type-id-9' visibility='default' filepath='./Include/cpython/initconfig.h' line='148' column='1'/>
       </data-member>
       <data-member access='public' layout-offset-in-bits='448'>
-        <var-decl name='filesystem_encoding' type-id='type-id-325' visibility='default' filepath='./Include/cpython/initconfig.h' line='146' column='1'/>
+        <var-decl name='filesystem_encoding' type-id='type-id-325' visibility='default' filepath='./Include/cpython/initconfig.h' line='149' column='1'/>
       </data-member>
       <data-member access='public' layout-offset-in-bits='512'>
-        <var-decl name='filesystem_errors' type-id='type-id-325' visibility='default' filepath='./Include/cpython/initconfig.h' line='147' column='1'/>
+        <var-decl name='filesystem_errors' type-id='type-id-325' visibility='default' filepath='./Include/cpython/initconfig.h' line='150' column='1'/>
       </data-member>
       <data-member access='public' layout-offset-in-bits='576'>
-        <var-decl name='pycache_prefix' type-id='type-id-325' visibility='default' filepath='./Include/cpython/initconfig.h' line='148' column='1'/>
+        <var-decl name='pycache_prefix' type-id='type-id-325' visibility='default' filepath='./Include/cpython/initconfig.h' line='151' column='1'/>
       </data-member>
       <data-member access='public' layout-offset-in-bits='640'>
-        <var-decl name='parse_argv' type-id='type-id-9' visibility='default' filepath='./Include/cpython/initconfig.h' line='149' column='1'/>
+        <var-decl name='parse_argv' type-id='type-id-9' visibility='default' filepath='./Include/cpython/initconfig.h' line='152' column='1'/>
       </data-member>
       <data-member access='public' layout-offset-in-bits='704'>
-        <var-decl name='orig_argv' type-id='type-id-326' visibility='default' filepath='./Include/cpython/initconfig.h' line='150' column='1'/>
+        <var-decl name='orig_argv' type-id='type-id-326' visibility='default' filepath='./Include/cpython/initconfig.h' line='153' column='1'/>
       </data-member>
       <data-member access='public' layout-offset-in-bits='832'>
-        <var-decl name='argv' type-id='type-id-326' visibility='default' filepath='./Include/cpython/initconfig.h' line='151' column='1'/>
+        <var-decl name='argv' type-id='type-id-326' visibility='default' filepath='./Include/cpython/initconfig.h' line='154' column='1'/>
       </data-member>
       <data-member access='public' layout-offset-in-bits='960'>
-        <var-decl name='xoptions' type-id='type-id-326' visibility='default' filepath='./Include/cpython/initconfig.h' line='152' column='1'/>
+        <var-decl name='xoptions' type-id='type-id-326' visibility='default' filepath='./Include/cpython/initconfig.h' line='155' column='1'/>
       </data-member>
       <data-member access='public' layout-offset-in-bits='1088'>
-        <var-decl name='warnoptions' type-id='type-id-326' visibility='default' filepath='./Include/cpython/initconfig.h' line='153' column='1'/>
+        <var-decl name='warnoptions' type-id='type-id-326' visibility='default' filepath='./Include/cpython/initconfig.h' line='156' column='1'/>
       </data-member>
       <data-member access='public' layout-offset-in-bits='1216'>
-        <var-decl name='site_import' type-id='type-id-9' visibility='default' filepath='./Include/cpython/initconfig.h' line='154' column='1'/>
+        <var-decl name='site_import' type-id='type-id-9' visibility='default' filepath='./Include/cpython/initconfig.h' line='157' column='1'/>
       </data-member>
       <data-member access='public' layout-offset-in-bits='1248'>
-        <var-decl name='bytes_warning' type-id='type-id-9' visibility='default' filepath='./Include/cpython/initconfig.h' line='155' column='1'/>
+        <var-decl name='bytes_warning' type-id='type-id-9' visibility='default' filepath='./Include/cpython/initconfig.h' line='158' column='1'/>
       </data-member>
       <data-member access='public' layout-offset-in-bits='1280'>
-        <var-decl name='warn_default_encoding' type-id='type-id-9' visibility='default' filepath='./Include/cpython/initconfig.h' line='156' column='1'/>
+        <var-decl name='warn_default_encoding' type-id='type-id-9' visibility='default' filepath='./Include/cpython/initconfig.h' line='159' column='1'/>
       </data-member>
       <data-member access='public' layout-offset-in-bits='1312'>
-        <var-decl name='inspect' type-id='type-id-9' visibility='default' filepath='./Include/cpython/initconfig.h' line='157' column='1'/>
+        <var-decl name='inspect' type-id='type-id-9' visibility='default' filepath='./Include/cpython/initconfig.h' line='160' column='1'/>
       </data-member>
       <data-member access='public' layout-offset-in-bits='1344'>
-        <var-decl name='interactive' type-id='type-id-9' visibility='default' filepath='./Include/cpython/initconfig.h' line='158' column='1'/>
+        <var-decl name='interactive' type-id='type-id-9' visibility='default' filepath='./Include/cpython/initconfig.h' line='161' column='1'/>
       </data-member>
       <data-member access='public' layout-offset-in-bits='1376'>
-        <var-decl name='optimization_level' type-id='type-id-9' visibility='default' filepath='./Include/cpython/initconfig.h' line='159' column='1'/>
+        <var-decl name='optimization_level' type-id='type-id-9' visibility='default' filepath='./Include/cpython/initconfig.h' line='162' column='1'/>
       </data-member>
       <data-member access='public' layout-offset-in-bits='1408'>
-        <var-decl name='parser_debug' type-id='type-id-9' visibility='default' filepath='./Include/cpython/initconfig.h' line='160' column='1'/>
+        <var-decl name='parser_debug' type-id='type-id-9' visibility='default' filepath='./Include/cpython/initconfig.h' line='163' column='1'/>
       </data-member>
       <data-member access='public' layout-offset-in-bits='1440'>
-        <var-decl name='write_bytecode' type-id='type-id-9' visibility='default' filepath='./Include/cpython/initconfig.h' line='161' column='1'/>
+        <var-decl name='write_bytecode' type-id='type-id-9' visibility='default' filepath='./Include/cpython/initconfig.h' line='164' column='1'/>
       </data-member>
       <data-member access='public' layout-offset-in-bits='1472'>
-        <var-decl name='verbose' type-id='type-id-9' visibility='default' filepath='./Include/cpython/initconfig.h' line='162' column='1'/>
+        <var-decl name='verbose' type-id='type-id-9' visibility='default' filepath='./Include/cpython/initconfig.h' line='165' column='1'/>
       </data-member>
       <data-member access='public' layout-offset-in-bits='1504'>
-        <var-decl name='quiet' type-id='type-id-9' visibility='default' filepath='./Include/cpython/initconfig.h' line='163' column='1'/>
+        <var-decl name='quiet' type-id='type-id-9' visibility='default' filepath='./Include/cpython/initconfig.h' line='166' column='1'/>
       </data-member>
       <data-member access='public' layout-offset-in-bits='1536'>
-        <var-decl name='user_site_directory' type-id='type-id-9' visibility='default' filepath='./Include/cpython/initconfig.h' line='164' column='1'/>
+        <var-decl name='user_site_directory' type-id='type-id-9' visibility='default' filepath='./Include/cpython/initconfig.h' line='167' column='1'/>
       </data-member>
       <data-member access='public' layout-offset-in-bits='1568'>
-        <var-decl name='configure_c_stdio' type-id='type-id-9' visibility='default' filepath='./Include/cpython/initconfig.h' line='165' column='1'/>
+        <var-decl name='configure_c_stdio' type-id='type-id-9' visibility='default' filepath='./Include/cpython/initconfig.h' line='168' column='1'/>
       </data-member>
       <data-member access='public' layout-offset-in-bits='1600'>
-        <var-decl name='buffered_stdio' type-id='type-id-9' visibility='default' filepath='./Include/cpython/initconfig.h' line='166' column='1'/>
+        <var-decl name='buffered_stdio' type-id='type-id-9' visibility='default' filepath='./Include/cpython/initconfig.h' line='169' column='1'/>
       </data-member>
       <data-member access='public' layout-offset-in-bits='1664'>
-        <var-decl name='stdio_encoding' type-id='type-id-325' visibility='default' filepath='./Include/cpython/initconfig.h' line='167' column='1'/>
+        <var-decl name='stdio_encoding' type-id='type-id-325' visibility='default' filepath='./Include/cpython/initconfig.h' line='170' column='1'/>
       </data-member>
       <data-member access='public' layout-offset-in-bits='1728'>
-        <var-decl name='stdio_errors' type-id='type-id-325' visibility='default' filepath='./Include/cpython/initconfig.h' line='168' column='1'/>
+        <var-decl name='stdio_errors' type-id='type-id-325' visibility='default' filepath='./Include/cpython/initconfig.h' line='171' column='1'/>
       </data-member>
       <data-member access='public' layout-offset-in-bits='1792'>
-        <var-decl name='check_hash_pycs_mode' type-id='type-id-325' visibility='default' filepath='./Include/cpython/initconfig.h' line='172' column='1'/>
+        <var-decl name='check_hash_pycs_mode' type-id='type-id-325' visibility='default' filepath='./Include/cpython/initconfig.h' line='175' column='1'/>
       </data-member>
       <data-member access='public' layout-offset-in-bits='1856'>
-        <var-decl name='pathconfig_warnings' type-id='type-id-9' visibility='default' filepath='./Include/cpython/initconfig.h' line='175' column='1'/>
+        <var-decl name='pathconfig_warnings' type-id='type-id-9' visibility='default' filepath='./Include/cpython/initconfig.h' line='178' column='1'/>
       </data-member>
       <data-member access='public' layout-offset-in-bits='1920'>
-        <var-decl name='program_name' type-id='type-id-325' visibility='default' filepath='./Include/cpython/initconfig.h' line='176' column='1'/>
+        <var-decl name='program_name' type-id='type-id-325' visibility='default' filepath='./Include/cpython/initconfig.h' line='179' column='1'/>
       </data-member>
       <data-member access='public' layout-offset-in-bits='1984'>
-        <var-decl name='pythonpath_env' type-id='type-id-325' visibility='default' filepath='./Include/cpython/initconfig.h' line='177' column='1'/>
+        <var-decl name='pythonpath_env' type-id='type-id-325' visibility='default' filepath='./Include/cpython/initconfig.h' line='180' column='1'/>
       </data-member>
       <data-member access='public' layout-offset-in-bits='2048'>
-        <var-decl name='home' type-id='type-id-325' visibility='default' filepath='./Include/cpython/initconfig.h' line='178' column='1'/>
+        <var-decl name='home' type-id='type-id-325' visibility='default' filepath='./Include/cpython/initconfig.h' line='181' column='1'/>
       </data-member>
       <data-member access='public' layout-offset-in-bits='2112'>
-        <var-decl name='platlibdir' type-id='type-id-325' visibility='default' filepath='./Include/cpython/initconfig.h' line='179' column='1'/>
+        <var-decl name='platlibdir' type-id='type-id-325' visibility='default' filepath='./Include/cpython/initconfig.h' line='182' column='1'/>
       </data-member>
       <data-member access='public' layout-offset-in-bits='2176'>
-        <var-decl name='module_search_paths_set' type-id='type-id-9' visibility='default' filepath='./Include/cpython/initconfig.h' line='182' column='1'/>
+        <var-decl name='module_search_paths_set' type-id='type-id-9' visibility='default' filepath='./Include/cpython/initconfig.h' line='185' column='1'/>
       </data-member>
       <data-member access='public' layout-offset-in-bits='2240'>
-        <var-decl name='module_search_paths' type-id='type-id-326' visibility='default' filepath='./Include/cpython/initconfig.h' line='183' column='1'/>
+        <var-decl name='module_search_paths' type-id='type-id-326' visibility='default' filepath='./Include/cpython/initconfig.h' line='186' column='1'/>
       </data-member>
       <data-member access='public' layout-offset-in-bits='2368'>
-        <var-decl name='executable' type-id='type-id-325' visibility='default' filepath='./Include/cpython/initconfig.h' line='184' column='1'/>
+        <var-decl name='executable' type-id='type-id-325' visibility='default' filepath='./Include/cpython/initconfig.h' line='187' column='1'/>
       </data-member>
       <data-member access='public' layout-offset-in-bits='2432'>
-        <var-decl name='base_executable' type-id='type-id-325' visibility='default' filepath='./Include/cpython/initconfig.h' line='185' column='1'/>
+        <var-decl name='base_executable' type-id='type-id-325' visibility='default' filepath='./Include/cpython/initconfig.h' line='188' column='1'/>
       </data-member>
       <data-member access='public' layout-offset-in-bits='2496'>
-        <var-decl name='prefix' type-id='type-id-325' visibility='default' filepath='./Include/cpython/initconfig.h' line='186' column='1'/>
+        <var-decl name='prefix' type-id='type-id-325' visibility='default' filepath='./Include/cpython/initconfig.h' line='189' column='1'/>
       </data-member>
       <data-member access='public' layout-offset-in-bits='2560'>
-        <var-decl name='base_prefix' type-id='type-id-325' visibility='default' filepath='./Include/cpython/initconfig.h' line='187' column='1'/>
+        <var-decl name='base_prefix' type-id='type-id-325' visibility='default' filepath='./Include/cpython/initconfig.h' line='190' column='1'/>
       </data-member>
       <data-member access='public' layout-offset-in-bits='2624'>
-        <var-decl name='exec_prefix' type-id='type-id-325' visibility='default' filepath='./Include/cpython/initconfig.h' line='188' column='1'/>
+        <var-decl name='exec_prefix' type-id='type-id-325' visibility='default' filepath='./Include/cpython/initconfig.h' line='191' column='1'/>
       </data-member>
       <data-member access='public' layout-offset-in-bits='2688'>
-        <var-decl name='base_exec_prefix' type-id='type-id-325' visibility='default' filepath='./Include/cpython/initconfig.h' line='189' column='1'/>
+        <var-decl name='base_exec_prefix' type-id='type-id-325' visibility='default' filepath='./Include/cpython/initconfig.h' line='192' column='1'/>
       </data-member>
       <data-member access='public' layout-offset-in-bits='2752'>
-        <var-decl name='skip_source_first_line' type-id='type-id-9' visibility='default' filepath='./Include/cpython/initconfig.h' line='192' column='1'/>
+        <var-decl name='skip_source_first_line' type-id='type-id-9' visibility='default' filepath='./Include/cpython/initconfig.h' line='195' column='1'/>
       </data-member>
       <data-member access='public' layout-offset-in-bits='2816'>
-        <var-decl name='run_command' type-id='type-id-325' visibility='default' filepath='./Include/cpython/initconfig.h' line='193' column='1'/>
+        <var-decl name='run_command' type-id='type-id-325' visibility='default' filepath='./Include/cpython/initconfig.h' line='196' column='1'/>
       </data-member>
       <data-member access='public' layout-offset-in-bits='2880'>
-        <var-decl name='run_module' type-id='type-id-325' visibility='default' filepath='./Include/cpython/initconfig.h' line='194' column='1'/>
+        <var-decl name='run_module' type-id='type-id-325' visibility='default' filepath='./Include/cpython/initconfig.h' line='197' column='1'/>
       </data-member>
       <data-member access='public' layout-offset-in-bits='2944'>
-        <var-decl name='run_filename' type-id='type-id-325' visibility='default' filepath='./Include/cpython/initconfig.h' line='195' column='1'/>
+        <var-decl name='run_filename' type-id='type-id-325' visibility='default' filepath='./Include/cpython/initconfig.h' line='198' column='1'/>
       </data-member>
       <data-member access='public' layout-offset-in-bits='3008'>
-        <var-decl name='_install_importlib' type-id='type-id-9' visibility='default' filepath='./Include/cpython/initconfig.h' line='201' column='1'/>
+        <var-decl name='_install_importlib' type-id='type-id-9' visibility='default' filepath='./Include/cpython/initconfig.h' line='204' column='1'/>
       </data-member>
       <data-member access='public' layout-offset-in-bits='3040'>
-        <var-decl name='_init_main' type-id='type-id-9' visibility='default' filepath='./Include/cpython/initconfig.h' line='204' column='1'/>
+        <var-decl name='_init_main' type-id='type-id-9' visibility='default' filepath='./Include/cpython/initconfig.h' line='207' column='1'/>
       </data-member>
       <data-member access='public' layout-offset-in-bits='3072'>
-        <var-decl name='_isolated_interpreter' type-id='type-id-9' visibility='default' filepath='./Include/cpython/initconfig.h' line='208' column='1'/>
+        <var-decl name='_isolated_interpreter' type-id='type-id-9' visibility='default' filepath='./Include/cpython/initconfig.h' line='211' column='1'/>
       </data-member>
     </class-decl>
     <typedef-decl name='wchar_t' type-id='type-id-9' filepath='/usr/lib/gcc/x86_64-linux-gnu/9/include/stddef.h' line='321' column='1' id='type-id-327'/>
     <pointer-type-def type-id='type-id-327' size-in-bits='64' id='type-id-325'/>
-    <class-decl name='__anonymous_struct__' size-in-bits='128' is-struct='yes' is-anonymous='yes' naming-typedef-id='type-id-326' visibility='default' filepath='./Include/cpython/initconfig.h' line='28' column='1' id='type-id-328'>
+    <class-decl name='__anonymous_struct__' size-in-bits='128' is-struct='yes' is-anonymous='yes' naming-typedef-id='type-id-326' visibility='default' filepath='./Include/cpython/initconfig.h' line='31' column='1' id='type-id-328'>
       <data-member access='public' layout-offset-in-bits='0'>
-        <var-decl name='length' type-id='type-id-31' visibility='default' filepath='./Include/cpython/initconfig.h' line='31' column='1'/>
+        <var-decl name='length' type-id='type-id-31' visibility='default' filepath='./Include/cpython/initconfig.h' line='34' column='1'/>
       </data-member>
       <data-member access='public' layout-offset-in-bits='64'>
-        <var-decl name='items' type-id='type-id-329' visibility='default' filepath='./Include/cpython/initconfig.h' line='32' column='1'/>
+        <var-decl name='items' type-id='type-id-329' visibility='default' filepath='./Include/cpython/initconfig.h' line='35' column='1'/>
       </data-member>
     </class-decl>
     <pointer-type-def type-id='type-id-325' size-in-bits='64' id='type-id-329'/>
-    <typedef-decl name='PyWideStringList' type-id='type-id-328' filepath='./Include/cpython/initconfig.h' line='33' column='1' id='type-id-326'/>
-    <typedef-decl name='PyConfig' type-id='type-id-324' filepath='./Include/cpython/initconfig.h' line='209' column='1' id='type-id-231'/>
+    <typedef-decl name='PyWideStringList' type-id='type-id-328' filepath='./Include/cpython/initconfig.h' line='36' column='1' id='type-id-326'/>
+    <typedef-decl name='PyConfig' type-id='type-id-324' filepath='./Include/cpython/initconfig.h' line='212' column='1' id='type-id-231'/>
     <typedef-decl name='PyThreadState' type-id='type-id-221' filepath='./Include/pystate.h' line='20' column='1' id='type-id-330'/>
     <pointer-type-def type-id='type-id-330' size-in-bits='64' id='type-id-331'/>
     <class-decl name='_frame' size-in-bits='2880' is-struct='yes' visibility='default' filepath='./Include/cpython/frameobject.h' line='28' column='1' id='type-id-332'>
     <typedef-decl name='PyFrameObject' type-id='type-id-332' filepath='./Include/pyframe.h' line='12' column='1' id='type-id-347'/>
     <pointer-type-def type-id='type-id-347' size-in-bits='64' id='type-id-223'/>
     <pointer-type-def type-id='type-id-348' size-in-bits='64' id='type-id-349'/>
-    <typedef-decl name='_PyFrameEvalFunction' type-id='type-id-349' filepath='./Include/cpython/pystate.h' line='205' column='1' id='type-id-232'/>
+    <typedef-decl name='_PyFrameEvalFunction' type-id='type-id-349' filepath='./Include/cpython/pystate.h' line='203' column='1' id='type-id-232'/>
 
     <array-type-def dimensions='1' type-id='type-id-65' size-in-bits='16320' id='type-id-233'>
       <subrange length='255' type-id='type-id-19' id='type-id-350'/>
     <function-decl name='_PyTuple_FromArray' mangled-name='_PyTuple_FromArray' filepath='./Include/internal/pycore_tuple.h' line='15' column='1' visibility='default' binding='global' size-in-bits='64'>
       <return type-id='type-id-4'/>
     </function-decl>
-    <function-decl name='_Py_FatalErrorFormat' mangled-name='_Py_FatalErrorFormat' filepath='./Include/cpython/pyerrors.h' line='203' column='1' visibility='default' binding='global' size-in-bits='64'>
+    <function-decl name='_Py_FatalErrorFormat' mangled-name='_Py_FatalErrorFormat' filepath='./Include/cpython/pyerrors.h' line='209' column='1' visibility='default' binding='global' size-in-bits='64'>
       <return type-id='type-id-4'/>
     </function-decl>
     <function-decl name='_PyErr_FormatFromCauseTstate' mangled-name='_PyErr_FormatFromCauseTstate' filepath='./Include/internal/pycore_pyerrors.h' line='79' column='1' visibility='default' binding='global' size-in-bits='64'>
   <abi-instr version='1.0' address-size='64' path='Objects/cellobject.c' comp-dir-path='/src' language='LANG_C99'>
     <var-decl name='PyCell_Type' type-id='type-id-149' mangled-name='PyCell_Type' visibility='default' filepath='./Include/cellobject.h' line='14' column='1' elf-symbol-id='PyCell_Type'/>
     <function-decl name='PyCell_Set' mangled-name='PyCell_Set' filepath='Objects/cellobject.c' line='64' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='PyCell_Set'>
-      <parameter type-id='type-id-16' name='derived' filepath='Objects/abstract.c' line='2772' column='1'/>
-      <parameter type-id='type-id-16' name='cls' filepath='Objects/abstract.c' line='2772' column='1'/>
+      <parameter type-id='type-id-16' name='derived' filepath='Objects/abstract.c' line='2780' column='1'/>
+      <parameter type-id='type-id-16' name='cls' filepath='Objects/abstract.c' line='2780' column='1'/>
       <return type-id='type-id-9'/>
     </function-decl>
     <function-decl name='PyCell_Get' mangled-name='PyCell_Get' filepath='Objects/cellobject.c' line='53' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='PyCell_Get'>
     <var-decl name='_PyAsyncGenASend_Type' type-id='type-id-149' mangled-name='_PyAsyncGenASend_Type' visibility='default' filepath='./Include/genobject.h' line='81' column='1' elf-symbol-id='_PyAsyncGenASend_Type'/>
     <var-decl name='_PyAsyncGenWrappedValue_Type' type-id='type-id-149' mangled-name='_PyAsyncGenWrappedValue_Type' visibility='default' filepath='./Include/genobject.h' line='82' column='1' elf-symbol-id='_PyAsyncGenWrappedValue_Type'/>
     <var-decl name='_PyAsyncGenAThrow_Type' type-id='type-id-149' mangled-name='_PyAsyncGenAThrow_Type' visibility='default' filepath='./Include/genobject.h' line='83' column='1' elf-symbol-id='_PyAsyncGenAThrow_Type'/>
-    <function-decl name='PyAsyncGen_New' mangled-name='PyAsyncGen_New' filepath='Objects/genobject.c' line='1457' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='PyAsyncGen_New'>
-      <parameter type-id='type-id-223' name='f' filepath='Objects/genobject.c' line='1457' column='1'/>
-      <parameter type-id='type-id-16' name='name' filepath='Objects/genobject.c' line='1457' column='1'/>
-      <parameter type-id='type-id-16' name='qualname' filepath='Objects/genobject.c' line='1457' column='1'/>
+    <function-decl name='PyAsyncGen_New' mangled-name='PyAsyncGen_New' filepath='Objects/genobject.c' line='1470' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='PyAsyncGen_New'>
+      <parameter type-id='type-id-223' name='f' filepath='Objects/genobject.c' line='1470' column='1'/>
+      <parameter type-id='type-id-16' name='name' filepath='Objects/genobject.c' line='1470' column='1'/>
+      <parameter type-id='type-id-16' name='qualname' filepath='Objects/genobject.c' line='1470' column='1'/>
       <return type-id='type-id-16'/>
     </function-decl>
-    <function-decl name='PyCoro_New' mangled-name='PyCoro_New' filepath='Objects/genobject.c' line='1185' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='PyCoro_New'>
-      <parameter type-id='type-id-223' name='f' filepath='Objects/genobject.c' line='1185' column='1'/>
-      <parameter type-id='type-id-16' name='name' filepath='Objects/genobject.c' line='1185' column='1'/>
-      <parameter type-id='type-id-16' name='qualname' filepath='Objects/genobject.c' line='1185' column='1'/>
+    <function-decl name='PyCoro_New' mangled-name='PyCoro_New' filepath='Objects/genobject.c' line='1198' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='PyCoro_New'>
+      <parameter type-id='type-id-223' name='f' filepath='Objects/genobject.c' line='1198' column='1'/>
+      <parameter type-id='type-id-16' name='name' filepath='Objects/genobject.c' line='1198' column='1'/>
+      <parameter type-id='type-id-16' name='qualname' filepath='Objects/genobject.c' line='1198' column='1'/>
       <return type-id='type-id-16'/>
     </function-decl>
-    <function-decl name='PyGen_New' mangled-name='PyGen_New' filepath='Objects/genobject.c' line='856' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='PyGen_New'>
-      <parameter type-id='type-id-223' name='f' filepath='Objects/genobject.c' line='856' column='1'/>
+    <function-decl name='PyGen_New' mangled-name='PyGen_New' filepath='Objects/genobject.c' line='869' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='PyGen_New'>
+      <parameter type-id='type-id-223' name='f' filepath='Objects/genobject.c' line='869' column='1'/>
       <return type-id='type-id-16'/>
     </function-decl>
-    <function-decl name='PyGen_NewWithQualName' mangled-name='PyGen_NewWithQualName' filepath='Objects/genobject.c' line='850' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='PyGen_NewWithQualName'>
-      <parameter type-id='type-id-223' name='f' filepath='Objects/genobject.c' line='850' column='1'/>
-      <parameter type-id='type-id-16' name='name' filepath='Objects/genobject.c' line='850' column='1'/>
-      <parameter type-id='type-id-16' name='qualname' filepath='Objects/genobject.c' line='850' column='1'/>
+    <function-decl name='PyGen_NewWithQualName' mangled-name='PyGen_NewWithQualName' filepath='Objects/genobject.c' line='863' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='PyGen_NewWithQualName'>
+      <parameter type-id='type-id-223' name='f' filepath='Objects/genobject.c' line='863' column='1'/>
+      <parameter type-id='type-id-16' name='name' filepath='Objects/genobject.c' line='863' column='1'/>
+      <parameter type-id='type-id-16' name='qualname' filepath='Objects/genobject.c' line='863' column='1'/>
       <return type-id='type-id-16'/>
     </function-decl>
-    <function-decl name='_PyGen_FetchStopIterationValue' mangled-name='_PyGen_FetchStopIterationValue' filepath='Objects/genobject.c' line='614' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='_PyGen_FetchStopIterationValue'>
-      <parameter type-id='type-id-86' name='pvalue' filepath='Objects/genobject.c' line='614' column='1'/>
+    <function-decl name='_PyGen_FetchStopIterationValue' mangled-name='_PyGen_FetchStopIterationValue' filepath='Objects/genobject.c' line='627' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='_PyGen_FetchStopIterationValue'>
+      <parameter type-id='type-id-86' name='pvalue' filepath='Objects/genobject.c' line='627' column='1'/>
       <return type-id='type-id-9'/>
     </function-decl>
     <function-decl name='_PyGen_Finalize' mangled-name='_PyGen_Finalize' filepath='Objects/genobject.c' line='44' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='_PyGen_Finalize'>
       <parameter type-id='type-id-16' name='self' filepath='Objects/genobject.c' line='44' column='1'/>
       <return type-id='type-id-4'/>
     </function-decl>
-    <function-decl name='_PyGen_SetStopIterationValue' mangled-name='_PyGen_SetStopIterationValue' filepath='Objects/genobject.c' line='575' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='_PyGen_SetStopIterationValue'>
-      <parameter type-id='type-id-16' name='value' filepath='Objects/genobject.c' line='575' column='1'/>
+    <function-decl name='_PyGen_SetStopIterationValue' mangled-name='_PyGen_SetStopIterationValue' filepath='Objects/genobject.c' line='588' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='_PyGen_SetStopIterationValue'>
+      <parameter type-id='type-id-16' name='value' filepath='Objects/genobject.c' line='588' column='1'/>
       <return type-id='type-id-9'/>
     </function-decl>
     <function-decl name='_PyErr_FormatFromCause' mangled-name='_PyErr_FormatFromCause' filepath='./Include/cpython/pyerrors.h' line='105' column='1' visibility='default' binding='global' size-in-bits='64'>
     <var-decl name='PyClassMethod_Type' type-id='type-id-149' mangled-name='PyClassMethod_Type' visibility='default' filepath='./Include/funcobject.h' line='100' column='1' elf-symbol-id='PyClassMethod_Type'/>
     <var-decl name='PyStaticMethod_Type' type-id='type-id-149' mangled-name='PyStaticMethod_Type' visibility='default' filepath='./Include/funcobject.h' line='101' column='1' elf-symbol-id='PyStaticMethod_Type'/>
     <function-decl name='PyStaticMethod_New' mangled-name='PyStaticMethod_New' filepath='Objects/funcobject.c' line='1145' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='PyStaticMethod_New'>
-      <parameter type-id='type-id-16' name='iter' filepath='Objects/abstract.c' line='2863' column='1'/>
+      <parameter type-id='type-id-16' name='iter' filepath='Objects/abstract.c' line='2871' column='1'/>
       <return type-id='type-id-16'/>
     </function-decl>
     <function-decl name='PyClassMethod_New' mangled-name='PyClassMethod_New' filepath='Objects/funcobject.c' line='949' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='PyClassMethod_New'>
-      <parameter type-id='type-id-16' name='iter' filepath='Objects/abstract.c' line='2863' column='1'/>
+      <parameter type-id='type-id-16' name='iter' filepath='Objects/abstract.c' line='2871' column='1'/>
       <return type-id='type-id-16'/>
     </function-decl>
     <function-decl name='PyFunction_SetAnnotations' mangled-name='PyFunction_SetAnnotations' filepath='Objects/funcobject.c' line='235' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='PyFunction_SetAnnotations'>
       <return type-id='type-id-157'/>
     </function-decl>
     <function-decl name='_PyLong_Sign' mangled-name='_PyLong_Sign' filepath='Objects/longobject.c' line='680' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='_PyLong_Sign'>
-      <parameter type-id='type-id-16' name='obj' filepath='Objects/abstract.c' line='2847' column='1'/>
+      <parameter type-id='type-id-16' name='obj' filepath='Objects/abstract.c' line='2855' column='1'/>
       <return type-id='type-id-9'/>
     </function-decl>
     <function-decl name='PyLong_AsUnsignedLongMask' mangled-name='PyLong_AsUnsignedLongMask' filepath='Objects/longobject.c' line='656' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='PyLong_AsUnsignedLongMask'>
       <return type-id='type-id-16'/>
     </function-decl>
     <function-decl name='PyObject_ASCII' mangled-name='PyObject_ASCII' filepath='Objects/object.c' line='522' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='PyObject_ASCII'>
-      <parameter type-id='type-id-16' name='o' filepath='Objects/abstract.c' line='2819' column='1'/>
+      <parameter type-id='type-id-16' name='o' filepath='Objects/abstract.c' line='2827' column='1'/>
       <return type-id='type-id-16'/>
     </function-decl>
     <function-decl name='_PyObject_IsFreed' mangled-name='_PyObject_IsFreed' filepath='Objects/object.c' line='347' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='_PyObject_IsFreed'>
     <function-decl name='PyUnicode_DecodeASCII' mangled-name='PyUnicode_DecodeASCII' filepath='./Include/unicodeobject.h' line='650' column='1' visibility='default' binding='global' size-in-bits='64'>
       <return type-id='type-id-4'/>
     </function-decl>
+    <function-decl name='fwrite' mangled-name='fwrite' filepath='/usr/include/stdio.h' line='652' column='1' visibility='default' binding='global' size-in-bits='64'>
+      <return type-id='type-id-4'/>
+    </function-decl>
     <function-decl name='ferror' mangled-name='ferror' filepath='/usr/include/stdio.h' line='761' column='1' visibility='default' binding='global' size-in-bits='64'>
       <return type-id='type-id-4'/>
     </function-decl>
     <function-decl name='fputc' mangled-name='fputc' filepath='/usr/include/stdio.h' line='521' column='1' visibility='default' binding='global' size-in-bits='64'>
       <return type-id='type-id-4'/>
     </function-decl>
-    <function-decl name='PyGILState_Check' mangled-name='PyGILState_Check' filepath='./Include/cpython/pystate.h' line='173' column='1' visibility='default' binding='global' size-in-bits='64'>
+    <function-decl name='PyGILState_Check' mangled-name='PyGILState_Check' filepath='./Include/cpython/pystate.h' line='171' column='1' visibility='default' binding='global' size-in-bits='64'>
       <return type-id='type-id-4'/>
     </function-decl>
     <function-decl name='__builtin___memcpy_chk' mangled-name='__memcpy_chk' visibility='default' binding='global' size-in-bits='64'>
       <parameter type-id='type-id-32' name='type' filepath='Objects/typeobject.c' line='3651' column='1'/>
       <return type-id='type-id-16'/>
     </function-decl>
-    <function-decl name='PyType_Ready' mangled-name='PyType_Ready' filepath='Objects/typeobject.c' line='6351' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='PyType_Ready'>
-      <parameter type-id='type-id-32' name='type' filepath='Objects/typeobject.c' line='6351' column='1'/>
+    <function-decl name='PyType_Ready' mangled-name='PyType_Ready' filepath='Objects/typeobject.c' line='6349' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='PyType_Ready'>
+      <parameter type-id='type-id-32' name='type' filepath='Objects/typeobject.c' line='6349' column='1'/>
       <return type-id='type-id-9'/>
     </function-decl>
     <function-decl name='PyThreadState_GetFrame' mangled-name='PyThreadState_GetFrame' filepath='./Include/pystate.h' line='90' column='1' visibility='default' binding='global' size-in-bits='64'>
     <function-decl name='PyModuleDef_Init' mangled-name='PyModuleDef_Init' filepath='./Include/moduleobject.h' line='40' column='1' visibility='default' binding='global' size-in-bits='64'>
       <return type-id='type-id-4'/>
     </function-decl>
-    <function-decl name='_PyInterpreterState_GetConfig' mangled-name='_PyInterpreterState_GetConfig' filepath='./Include/cpython/pystate.h' line='213' column='1' visibility='default' binding='global' size-in-bits='64'>
+    <function-decl name='_PyInterpreterState_GetConfig' mangled-name='_PyInterpreterState_GetConfig' filepath='./Include/cpython/pystate.h' line='211' column='1' visibility='default' binding='global' size-in-bits='64'>
       <return type-id='type-id-4'/>
     </function-decl>
     <function-decl name='_Py_SetFileSystemEncoding' mangled-name='_Py_SetFileSystemEncoding' filepath='./Include/internal/pycore_pylifecycle.h' line='37' column='1' visibility='default' binding='global' size-in-bits='64'>
     <function-decl name='PyUnicodeTranslateError_SetEnd' mangled-name='PyUnicodeTranslateError_SetEnd' filepath='./Include/pyerrors.h' line='288' column='1' visibility='default' binding='global' size-in-bits='64'>
       <return type-id='type-id-4'/>
     </function-decl>
-    <function-decl name='_PyUnicodeTranslateError_Create' mangled-name='_PyUnicodeTranslateError_Create' filepath='./Include/cpython/pyerrors.h' line='188' column='1' visibility='default' binding='global' size-in-bits='64'>
+    <function-decl name='_PyUnicodeTranslateError_Create' mangled-name='_PyUnicodeTranslateError_Create' filepath='./Include/cpython/pyerrors.h' line='194' column='1' visibility='default' binding='global' size-in-bits='64'>
       <return type-id='type-id-4'/>
     </function-decl>
     <function-decl name='PyUnicodeTranslateError_SetReason' mangled-name='PyUnicodeTranslateError_SetReason' filepath='./Include/pyerrors.h' line='305' column='1' visibility='default' binding='global' size-in-bits='64'>
     <function-decl name='PyCodec_Decode' mangled-name='PyCodec_Decode' filepath='./Include/codecs.h' line='103' column='1' visibility='default' binding='global' size-in-bits='64'>
       <return type-id='type-id-4'/>
     </function-decl>
-    <function-decl name='_PyErr_WriteUnraisableMsg' mangled-name='_PyErr_WriteUnraisableMsg' filepath='./Include/cpython/pyerrors.h' line='195' column='1' visibility='default' binding='global' size-in-bits='64'>
+    <function-decl name='_PyErr_WriteUnraisableMsg' mangled-name='_PyErr_WriteUnraisableMsg' filepath='./Include/cpython/pyerrors.h' line='201' column='1' visibility='default' binding='global' size-in-bits='64'>
       <return type-id='type-id-4'/>
     </function-decl>
     <function-decl name='_PyUnicode_ToUpperFull' mangled-name='_PyUnicode_ToUpperFull' filepath='./Include/cpython/unicodeobject.h' line='1107' column='1' visibility='default' binding='global' size-in-bits='64'>
     </function-decl>
   </abi-instr>
   <abi-instr version='1.0' address-size='64' path='Python/ceval.c' comp-dir-path='/src' language='LANG_C99'>
-    <function-decl name='Py_EnterRecursiveCall' mangled-name='Py_EnterRecursiveCall' filepath='Python/ceval.c' line='6521' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='Py_EnterRecursiveCall'>
-      <parameter type-id='type-id-3' name='where' filepath='Python/ceval.c' line='6521' column='1'/>
+    <function-decl name='Py_EnterRecursiveCall' mangled-name='Py_EnterRecursiveCall' filepath='Python/ceval.c' line='6505' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='Py_EnterRecursiveCall'>
+      <parameter type-id='type-id-3' name='where' filepath='Python/ceval.c' line='6505' column='1'/>
       <return type-id='type-id-9'/>
     </function-decl>
-    <function-decl name='_PyEval_RequestCodeExtraIndex' mangled-name='_PyEval_RequestCodeExtraIndex' filepath='Python/ceval.c' line='6443' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='_PyEval_RequestCodeExtraIndex'>
-      <parameter type-id='type-id-65' name='free' filepath='Python/ceval.c' line='6443' column='1'/>
+    <function-decl name='_PyEval_RequestCodeExtraIndex' mangled-name='_PyEval_RequestCodeExtraIndex' filepath='Python/ceval.c' line='6427' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='_PyEval_RequestCodeExtraIndex'>
+      <parameter type-id='type-id-65' name='free' filepath='Python/ceval.c' line='6427' column='1'/>
       <return type-id='type-id-31'/>
     </function-decl>
-    <function-decl name='_PyEval_SliceIndexNotNone' mangled-name='_PyEval_SliceIndexNotNone' filepath='Python/ceval.c' line='5980' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='_PyEval_SliceIndexNotNone'>
-      <parameter type-id='type-id-16' name='v' filepath='Python/ceval.c' line='5980' column='1'/>
-      <parameter type-id='type-id-125' name='pi' filepath='Python/ceval.c' line='5980' column='1'/>
+    <function-decl name='_PyEval_SliceIndexNotNone' mangled-name='_PyEval_SliceIndexNotNone' filepath='Python/ceval.c' line='5964' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='_PyEval_SliceIndexNotNone'>
+      <parameter type-id='type-id-16' name='v' filepath='Python/ceval.c' line='5964' column='1'/>
+      <parameter type-id='type-id-125' name='pi' filepath='Python/ceval.c' line='5964' column='1'/>
       <return type-id='type-id-9'/>
     </function-decl>
-    <function-decl name='_PyEval_SliceIndex' mangled-name='_PyEval_SliceIndex' filepath='Python/ceval.c' line='5958' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='_PyEval_SliceIndex'>
-      <parameter type-id='type-id-16' name='v' filepath='Python/ceval.c' line='5958' column='1'/>
-      <parameter type-id='type-id-125' name='pi' filepath='Python/ceval.c' line='5958' column='1'/>
+    <function-decl name='_PyEval_SliceIndex' mangled-name='_PyEval_SliceIndex' filepath='Python/ceval.c' line='5942' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='_PyEval_SliceIndex'>
+      <parameter type-id='type-id-16' name='v' filepath='Python/ceval.c' line='5942' column='1'/>
+      <parameter type-id='type-id-125' name='pi' filepath='Python/ceval.c' line='5942' column='1'/>
       <return type-id='type-id-9'/>
     </function-decl>
-    <function-decl name='PyEval_GetFuncDesc' mangled-name='PyEval_GetFuncDesc' filepath='Python/ceval.c' line='5798' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='PyEval_GetFuncDesc'>
-      <parameter type-id='type-id-16' name='func' filepath='Python/ceval.c' line='5798' column='1'/>
+    <function-decl name='PyEval_GetFuncDesc' mangled-name='PyEval_GetFuncDesc' filepath='Python/ceval.c' line='5782' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='PyEval_GetFuncDesc'>
+      <parameter type-id='type-id-16' name='func' filepath='Python/ceval.c' line='5782' column='1'/>
       <return type-id='type-id-3'/>
     </function-decl>
-    <function-decl name='PyEval_GetFuncName' mangled-name='PyEval_GetFuncName' filepath='Python/ceval.c' line='5785' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='PyEval_GetFuncName'>
-      <parameter type-id='type-id-16' name='func' filepath='Python/ceval.c' line='5785' column='1'/>
+    <function-decl name='PyEval_GetFuncName' mangled-name='PyEval_GetFuncName' filepath='Python/ceval.c' line='5769' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='PyEval_GetFuncName'>
+      <parameter type-id='type-id-16' name='func' filepath='Python/ceval.c' line='5769' column='1'/>
       <return type-id='type-id-3'/>
     </function-decl>
     <class-decl name='__anonymous_struct__' size-in-bits='64' is-struct='yes' is-anonymous='yes' naming-typedef-id='type-id-520' visibility='default' filepath='./Include/cpython/compile.h' line='24' column='1' id='type-id-521'>
     </class-decl>
     <typedef-decl name='PyCompilerFlags' type-id='type-id-521' filepath='./Include/cpython/compile.h' line='27' column='1' id='type-id-520'/>
     <pointer-type-def type-id='type-id-520' size-in-bits='64' id='type-id-522'/>
-    <function-decl name='PyEval_MergeCompilerFlags' mangled-name='PyEval_MergeCompilerFlags' filepath='Python/ceval.c' line='5760' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='PyEval_MergeCompilerFlags'>
-      <parameter type-id='type-id-522' name='cf' filepath='Python/ceval.c' line='5760' column='1'/>
+    <function-decl name='PyEval_MergeCompilerFlags' mangled-name='PyEval_MergeCompilerFlags' filepath='Python/ceval.c' line='5744' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='PyEval_MergeCompilerFlags'>
+      <parameter type-id='type-id-522' name='cf' filepath='Python/ceval.c' line='5744' column='1'/>
       <return type-id='type-id-9'/>
     </function-decl>
-    <function-decl name='PyEval_GetGlobals' mangled-name='PyEval_GetGlobals' filepath='Python/ceval.c' line='5747' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='PyEval_GetGlobals'>
+    <function-decl name='PyEval_GetGlobals' mangled-name='PyEval_GetGlobals' filepath='Python/ceval.c' line='5731' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='PyEval_GetGlobals'>
       <return type-id='type-id-16'/>
     </function-decl>
-    <function-decl name='PyEval_GetLocals' mangled-name='PyEval_GetLocals' filepath='Python/ceval.c' line='5729' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='PyEval_GetLocals'>
+    <function-decl name='PyEval_GetLocals' mangled-name='PyEval_GetLocals' filepath='Python/ceval.c' line='5713' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='PyEval_GetLocals'>
       <return type-id='type-id-16'/>
     </function-decl>
-    <function-decl name='_PyEval_GetBuiltinId' mangled-name='_PyEval_GetBuiltinId' filepath='Python/ceval.c' line='5715' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='_PyEval_GetBuiltinId'>
-      <parameter type-id='type-id-453' name='name' filepath='Python/ceval.c' line='5715' column='1'/>
+    <function-decl name='_PyEval_GetBuiltinId' mangled-name='_PyEval_GetBuiltinId' filepath='Python/ceval.c' line='5699' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='_PyEval_GetBuiltinId'>
+      <parameter type-id='type-id-453' name='name' filepath='Python/ceval.c' line='5699' column='1'/>
       <return type-id='type-id-16'/>
     </function-decl>
-    <function-decl name='PyEval_GetBuiltins' mangled-name='PyEval_GetBuiltins' filepath='Python/ceval.c' line='5707' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='PyEval_GetBuiltins'>
+    <function-decl name='PyEval_GetBuiltins' mangled-name='PyEval_GetBuiltins' filepath='Python/ceval.c' line='5691' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='PyEval_GetBuiltins'>
       <return type-id='type-id-16'/>
     </function-decl>
     <class-decl name='_frame' size-in-bits='2880' is-struct='yes' visibility='default' filepath='./Include/cpython/frameobject.h' line='28' column='1' id='type-id-523'>
     </class-decl>
     <typedef-decl name='PyFrameObject' type-id='type-id-523' filepath='./Include/pyframe.h' line='12' column='1' id='type-id-524'/>
     <pointer-type-def type-id='type-id-524' size-in-bits='64' id='type-id-525'/>
-    <function-decl name='PyEval_GetFrame' mangled-name='PyEval_GetFrame' filepath='Python/ceval.c' line='5690' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='PyEval_GetFrame'>
+    <function-decl name='PyEval_GetFrame' mangled-name='PyEval_GetFrame' filepath='Python/ceval.c' line='5674' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='PyEval_GetFrame'>
       <return type-id='type-id-525'/>
     </function-decl>
-    <function-decl name='_PyEval_GetAsyncGenFinalizer' mangled-name='_PyEval_GetAsyncGenFinalizer' filepath='Python/ceval.c' line='5683' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='_PyEval_GetAsyncGenFinalizer'>
+    <function-decl name='_PyEval_GetAsyncGenFinalizer' mangled-name='_PyEval_GetAsyncGenFinalizer' filepath='Python/ceval.c' line='5667' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='_PyEval_GetAsyncGenFinalizer'>
       <return type-id='type-id-16'/>
     </function-decl>
-    <function-decl name='_PyEval_SetAsyncGenFinalizer' mangled-name='_PyEval_SetAsyncGenFinalizer' filepath='Python/ceval.c' line='5669' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='_PyEval_SetAsyncGenFinalizer'>
-      <parameter type-id='type-id-16' name='finalizer' filepath='Python/ceval.c' line='5669' column='1'/>
+    <function-decl name='_PyEval_SetAsyncGenFinalizer' mangled-name='_PyEval_SetAsyncGenFinalizer' filepath='Python/ceval.c' line='5653' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='_PyEval_SetAsyncGenFinalizer'>
+      <parameter type-id='type-id-16' name='finalizer' filepath='Python/ceval.c' line='5653' column='1'/>
       <return type-id='type-id-9'/>
     </function-decl>
-    <function-decl name='_PyEval_GetAsyncGenFirstiter' mangled-name='_PyEval_GetAsyncGenFirstiter' filepath='Python/ceval.c' line='5662' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='_PyEval_GetAsyncGenFirstiter'>
+    <function-decl name='_PyEval_GetAsyncGenFirstiter' mangled-name='_PyEval_GetAsyncGenFirstiter' filepath='Python/ceval.c' line='5646' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='_PyEval_GetAsyncGenFirstiter'>
       <return type-id='type-id-16'/>
     </function-decl>
-    <function-decl name='_PyEval_SetAsyncGenFirstiter' mangled-name='_PyEval_SetAsyncGenFirstiter' filepath='Python/ceval.c' line='5648' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='_PyEval_SetAsyncGenFirstiter'>
-      <parameter type-id='type-id-16' name='finalizer' filepath='Python/ceval.c' line='5669' column='1'/>
+    <function-decl name='_PyEval_SetAsyncGenFirstiter' mangled-name='_PyEval_SetAsyncGenFirstiter' filepath='Python/ceval.c' line='5632' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='_PyEval_SetAsyncGenFirstiter'>
+      <parameter type-id='type-id-16' name='finalizer' filepath='Python/ceval.c' line='5653' column='1'/>
       <return type-id='type-id-9'/>
     </function-decl>
-    <function-decl name='_PyEval_GetCoroutineOriginTrackingDepth' mangled-name='_PyEval_GetCoroutineOriginTrackingDepth' filepath='Python/ceval.c' line='5641' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='_PyEval_GetCoroutineOriginTrackingDepth'>
+    <function-decl name='_PyEval_GetCoroutineOriginTrackingDepth' mangled-name='_PyEval_GetCoroutineOriginTrackingDepth' filepath='Python/ceval.c' line='5625' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='_PyEval_GetCoroutineOriginTrackingDepth'>
       <return type-id='type-id-9'/>
     </function-decl>
-    <class-decl name='_ts' size-in-bits='2240' is-struct='yes' visibility='default' filepath='./Include/cpython/pystate.h' line='62' column='1' id='type-id-526'>
+    <class-decl name='_ts' size-in-bits='2240' is-struct='yes' visibility='default' filepath='./Include/cpython/pystate.h' line='60' column='1' id='type-id-526'>
       <data-member access='public' layout-offset-in-bits='0'>
-        <var-decl name='prev' type-id='type-id-11' visibility='default' filepath='./Include/cpython/pystate.h' line='65' column='1'/>
+        <var-decl name='prev' type-id='type-id-11' visibility='default' filepath='./Include/cpython/pystate.h' line='63' column='1'/>
       </data-member>
       <data-member access='public' layout-offset-in-bits='64'>
-        <var-decl name='next' type-id='type-id-11' visibility='default' filepath='./Include/cpython/pystate.h' line='66' column='1'/>
+        <var-decl name='next' type-id='type-id-11' visibility='default' filepath='./Include/cpython/pystate.h' line='64' column='1'/>
       </data-member>
       <data-member access='public' layout-offset-in-bits='128'>
-        <var-decl name='interp' type-id='type-id-222' visibility='default' filepath='./Include/cpython/pystate.h' line='67' column='1'/>
+        <var-decl name='interp' type-id='type-id-222' visibility='default' filepath='./Include/cpython/pystate.h' line='65' column='1'/>
       </data-member>
       <data-member access='public' layout-offset-in-bits='192'>
-        <var-decl name='frame' type-id='type-id-525' visibility='default' filepath='./Include/cpython/pystate.h' line='70' column='1'/>
+        <var-decl name='frame' type-id='type-id-525' visibility='default' filepath='./Include/cpython/pystate.h' line='68' column='1'/>
       </data-member>
       <data-member access='public' layout-offset-in-bits='256'>
-        <var-decl name='recursion_depth' type-id='type-id-9' visibility='default' filepath='./Include/cpython/pystate.h' line='71' column='1'/>
+        <var-decl name='recursion_depth' type-id='type-id-9' visibility='default' filepath='./Include/cpython/pystate.h' line='69' column='1'/>
       </data-member>
       <data-member access='public' layout-offset-in-bits='288'>
-        <var-decl name='recursion_headroom' type-id='type-id-9' visibility='default' filepath='./Include/cpython/pystate.h' line='72' column='1'/>
+        <var-decl name='recursion_headroom' type-id='type-id-9' visibility='default' filepath='./Include/cpython/pystate.h' line='70' column='1'/>
       </data-member>
       <data-member access='public' layout-offset-in-bits='320'>
-        <var-decl name='stackcheck_counter' type-id='type-id-9' visibility='default' filepath='./Include/cpython/pystate.h' line='73' column='1'/>
+        <var-decl name='stackcheck_counter' type-id='type-id-9' visibility='default' filepath='./Include/cpython/pystate.h' line='71' column='1'/>
       </data-member>
       <data-member access='public' layout-offset-in-bits='352'>
-        <var-decl name='tracing' type-id='type-id-9' visibility='default' filepath='./Include/cpython/pystate.h' line='78' column='1'/>
+        <var-decl name='tracing' type-id='type-id-9' visibility='default' filepath='./Include/cpython/pystate.h' line='76' column='1'/>
       </data-member>
       <data-member access='public' layout-offset-in-bits='384'>
-        <var-decl name='cframe' type-id='type-id-14' visibility='default' filepath='./Include/cpython/pystate.h' line='82' column='1'/>
+        <var-decl name='cframe' type-id='type-id-14' visibility='default' filepath='./Include/cpython/pystate.h' line='80' column='1'/>
       </data-member>
       <data-member access='public' layout-offset-in-bits='448'>
-        <var-decl name='c_profilefunc' type-id='type-id-15' visibility='default' filepath='./Include/cpython/pystate.h' line='84' column='1'/>
+        <var-decl name='c_profilefunc' type-id='type-id-15' visibility='default' filepath='./Include/cpython/pystate.h' line='82' column='1'/>
       </data-member>
       <data-member access='public' layout-offset-in-bits='512'>
-        <var-decl name='c_tracefunc' type-id='type-id-15' visibility='default' filepath='./Include/cpython/pystate.h' line='85' column='1'/>
+        <var-decl name='c_tracefunc' type-id='type-id-15' visibility='default' filepath='./Include/cpython/pystate.h' line='83' column='1'/>
       </data-member>
       <data-member access='public' layout-offset-in-bits='576'>
-        <var-decl name='c_profileobj' type-id='type-id-16' visibility='default' filepath='./Include/cpython/pystate.h' line='86' column='1'/>
+        <var-decl name='c_profileobj' type-id='type-id-16' visibility='default' filepath='./Include/cpython/pystate.h' line='84' column='1'/>
       </data-member>
       <data-member access='public' layout-offset-in-bits='640'>
-        <var-decl name='c_traceobj' type-id='type-id-16' visibility='default' filepath='./Include/cpython/pystate.h' line='87' column='1'/>
+        <var-decl name='c_traceobj' type-id='type-id-16' visibility='default' filepath='./Include/cpython/pystate.h' line='85' column='1'/>
       </data-member>
       <data-member access='public' layout-offset-in-bits='704'>
-        <var-decl name='curexc_type' type-id='type-id-16' visibility='default' filepath='./Include/cpython/pystate.h' line='90' column='1'/>
+        <var-decl name='curexc_type' type-id='type-id-16' visibility='default' filepath='./Include/cpython/pystate.h' line='88' column='1'/>
       </data-member>
       <data-member access='public' layout-offset-in-bits='768'>
-        <var-decl name='curexc_value' type-id='type-id-16' visibility='default' filepath='./Include/cpython/pystate.h' line='91' column='1'/>
+        <var-decl name='curexc_value' type-id='type-id-16' visibility='default' filepath='./Include/cpython/pystate.h' line='89' column='1'/>
       </data-member>
       <data-member access='public' layout-offset-in-bits='832'>
-        <var-decl name='curexc_traceback' type-id='type-id-16' visibility='default' filepath='./Include/cpython/pystate.h' line='92' column='1'/>
+        <var-decl name='curexc_traceback' type-id='type-id-16' visibility='default' filepath='./Include/cpython/pystate.h' line='90' column='1'/>
       </data-member>
       <data-member access='public' layout-offset-in-bits='896'>
-        <var-decl name='exc_state' type-id='type-id-17' visibility='default' filepath='./Include/cpython/pystate.h' line='97' column='1'/>
+        <var-decl name='exc_state' type-id='type-id-17' visibility='default' filepath='./Include/cpython/pystate.h' line='95' column='1'/>
       </data-member>
       <data-member access='public' layout-offset-in-bits='1152'>
-        <var-decl name='exc_info' type-id='type-id-18' visibility='default' filepath='./Include/cpython/pystate.h' line='101' column='1'/>
+        <var-decl name='exc_info' type-id='type-id-18' visibility='default' filepath='./Include/cpython/pystate.h' line='99' column='1'/>
       </data-member>
       <data-member access='public' layout-offset-in-bits='1216'>
-        <var-decl name='dict' type-id='type-id-16' visibility='default' filepath='./Include/cpython/pystate.h' line='103' column='1'/>
+        <var-decl name='dict' type-id='type-id-16' visibility='default' filepath='./Include/cpython/pystate.h' line='101' column='1'/>
       </data-member>
       <data-member access='public' layout-offset-in-bits='1280'>
-        <var-decl name='gilstate_counter' type-id='type-id-9' visibility='default' filepath='./Include/cpython/pystate.h' line='105' column='1'/>
+        <var-decl name='gilstate_counter' type-id='type-id-9' visibility='default' filepath='./Include/cpython/pystate.h' line='103' column='1'/>
       </data-member>
       <data-member access='public' layout-offset-in-bits='1344'>
-        <var-decl name='async_exc' type-id='type-id-16' visibility='default' filepath='./Include/cpython/pystate.h' line='107' column='1'/>
+        <var-decl name='async_exc' type-id='type-id-16' visibility='default' filepath='./Include/cpython/pystate.h' line='105' column='1'/>
       </data-member>
       <data-member access='public' layout-offset-in-bits='1408'>
-        <var-decl name='thread_id' type-id='type-id-19' visibility='default' filepath='./Include/cpython/pystate.h' line='108' column='1'/>
+        <var-decl name='thread_id' type-id='type-id-19' visibility='default' filepath='./Include/cpython/pystate.h' line='106' column='1'/>
       </data-member>
       <data-member access='public' layout-offset-in-bits='1472'>
-        <var-decl name='trash_delete_nesting' type-id='type-id-9' visibility='default' filepath='./Include/cpython/pystate.h' line='110' column='1'/>
+        <var-decl name='trash_delete_nesting' type-id='type-id-9' visibility='default' filepath='./Include/cpython/pystate.h' line='108' column='1'/>
       </data-member>
       <data-member access='public' layout-offset-in-bits='1536'>
-        <var-decl name='trash_delete_later' type-id='type-id-16' visibility='default' filepath='./Include/cpython/pystate.h' line='111' column='1'/>
+        <var-decl name='trash_delete_later' type-id='type-id-16' visibility='default' filepath='./Include/cpython/pystate.h' line='109' column='1'/>
       </data-member>
       <data-member access='public' layout-offset-in-bits='1600'>
-        <var-decl name='on_delete' type-id='type-id-20' visibility='default' filepath='./Include/cpython/pystate.h' line='136' column='1'/>
+        <var-decl name='on_delete' type-id='type-id-20' visibility='default' filepath='./Include/cpython/pystate.h' line='134' column='1'/>
       </data-member>
       <data-member access='public' layout-offset-in-bits='1664'>
-        <var-decl name='on_delete_data' type-id='type-id-21' visibility='default' filepath='./Include/cpython/pystate.h' line='137' column='1'/>
+        <var-decl name='on_delete_data' type-id='type-id-21' visibility='default' filepath='./Include/cpython/pystate.h' line='135' column='1'/>
       </data-member>
       <data-member access='public' layout-offset-in-bits='1728'>
-        <var-decl name='coroutine_origin_tracking_depth' type-id='type-id-9' visibility='default' filepath='./Include/cpython/pystate.h' line='139' column='1'/>
+        <var-decl name='coroutine_origin_tracking_depth' type-id='type-id-9' visibility='default' filepath='./Include/cpython/pystate.h' line='137' column='1'/>
       </data-member>
       <data-member access='public' layout-offset-in-bits='1792'>
-        <var-decl name='async_gen_firstiter' type-id='type-id-16' visibility='default' filepath='./Include/cpython/pystate.h' line='141' column='1'/>
+        <var-decl name='async_gen_firstiter' type-id='type-id-16' visibility='default' filepath='./Include/cpython/pystate.h' line='139' column='1'/>
       </data-member>
       <data-member access='public' layout-offset-in-bits='1856'>
-        <var-decl name='async_gen_finalizer' type-id='type-id-16' visibility='default' filepath='./Include/cpython/pystate.h' line='142' column='1'/>
+        <var-decl name='async_gen_finalizer' type-id='type-id-16' visibility='default' filepath='./Include/cpython/pystate.h' line='140' column='1'/>
       </data-member>
       <data-member access='public' layout-offset-in-bits='1920'>
-        <var-decl name='context' type-id='type-id-16' visibility='default' filepath='./Include/cpython/pystate.h' line='144' column='1'/>
+        <var-decl name='context' type-id='type-id-16' visibility='default' filepath='./Include/cpython/pystate.h' line='142' column='1'/>
       </data-member>
       <data-member access='public' layout-offset-in-bits='1984'>
-        <var-decl name='context_ver' type-id='type-id-22' visibility='default' filepath='./Include/cpython/pystate.h' line='145' column='1'/>
+        <var-decl name='context_ver' type-id='type-id-22' visibility='default' filepath='./Include/cpython/pystate.h' line='143' column='1'/>
       </data-member>
       <data-member access='public' layout-offset-in-bits='2048'>
-        <var-decl name='id' type-id='type-id-22' visibility='default' filepath='./Include/cpython/pystate.h' line='148' column='1'/>
+        <var-decl name='id' type-id='type-id-22' visibility='default' filepath='./Include/cpython/pystate.h' line='146' column='1'/>
       </data-member>
       <data-member access='public' layout-offset-in-bits='2112'>
-        <var-decl name='root_cframe' type-id='type-id-23' visibility='default' filepath='./Include/cpython/pystate.h' line='150' column='1'/>
+        <var-decl name='root_cframe' type-id='type-id-23' visibility='default' filepath='./Include/cpython/pystate.h' line='148' column='1'/>
       </data-member>
     </class-decl>
     <class-decl name='_is' size-in-bits='908160' is-struct='yes' visibility='default' filepath='./Include/internal/pycore_interp.h' line='220' column='1' id='type-id-527'>
     </class-decl>
     <typedef-decl name='PyThreadState' type-id='type-id-526' filepath='./Include/pystate.h' line='20' column='1' id='type-id-532'/>
     <pointer-type-def type-id='type-id-532' size-in-bits='64' id='type-id-533'/>
-    <function-decl name='_PyEval_SetCoroutineOriginTrackingDepth' mangled-name='_PyEval_SetCoroutineOriginTrackingDepth' filepath='Python/ceval.c' line='5634' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='_PyEval_SetCoroutineOriginTrackingDepth'>
-      <parameter type-id='type-id-533' name='tstate' filepath='Python/ceval.c' line='5634' column='1'/>
-      <parameter type-id='type-id-9' name='new_depth' filepath='Python/ceval.c' line='5634' column='1'/>
+    <function-decl name='_PyEval_SetCoroutineOriginTrackingDepth' mangled-name='_PyEval_SetCoroutineOriginTrackingDepth' filepath='Python/ceval.c' line='5618' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='_PyEval_SetCoroutineOriginTrackingDepth'>
+      <parameter type-id='type-id-533' name='tstate' filepath='Python/ceval.c' line='5618' column='1'/>
+      <parameter type-id='type-id-9' name='new_depth' filepath='Python/ceval.c' line='5618' column='1'/>
       <return type-id='type-id-4'/>
     </function-decl>
-    <function-decl name='PyEval_SetTrace' mangled-name='PyEval_SetTrace' filepath='Python/ceval.c' line='5623' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='PyEval_SetTrace'>
-      <parameter type-id='type-id-15' name='func' filepath='Python/ceval.c' line='5623' column='1'/>
-      <parameter type-id='type-id-16' name='arg' filepath='Python/ceval.c' line='5623' column='1'/>
+    <function-decl name='PyEval_SetTrace' mangled-name='PyEval_SetTrace' filepath='Python/ceval.c' line='5607' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='PyEval_SetTrace'>
+      <parameter type-id='type-id-15' name='func' filepath='Python/ceval.c' line='5607' column='1'/>
+      <parameter type-id='type-id-16' name='arg' filepath='Python/ceval.c' line='5607' column='1'/>
       <return type-id='type-id-4'/>
     </function-decl>
-    <function-decl name='_PyEval_SetTrace' mangled-name='_PyEval_SetTrace' filepath='Python/ceval.c' line='5590' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='_PyEval_SetTrace'>
-      <parameter type-id='type-id-533' name='tstate' filepath='Python/ceval.c' line='5590' column='1'/>
-      <parameter type-id='type-id-15' name='func' filepath='Python/ceval.c' line='5590' column='1'/>
-      <parameter type-id='type-id-16' name='arg' filepath='Python/ceval.c' line='5590' column='1'/>
+    <function-decl name='_PyEval_SetTrace' mangled-name='_PyEval_SetTrace' filepath='Python/ceval.c' line='5574' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='_PyEval_SetTrace'>
+      <parameter type-id='type-id-533' name='tstate' filepath='Python/ceval.c' line='5574' column='1'/>
+      <parameter type-id='type-id-15' name='func' filepath='Python/ceval.c' line='5574' column='1'/>
+      <parameter type-id='type-id-16' name='arg' filepath='Python/ceval.c' line='5574' column='1'/>
       <return type-id='type-id-9'/>
     </function-decl>
-    <function-decl name='PyEval_SetProfile' mangled-name='PyEval_SetProfile' filepath='Python/ceval.c' line='5580' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='PyEval_SetProfile'>
-      <parameter type-id='type-id-15' name='func' filepath='Python/ceval.c' line='5623' column='1'/>
-      <parameter type-id='type-id-16' name='arg' filepath='Python/ceval.c' line='5623' column='1'/>
+    <function-decl name='PyEval_SetProfile' mangled-name='PyEval_SetProfile' filepath='Python/ceval.c' line='5564' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='PyEval_SetProfile'>
+      <parameter type-id='type-id-15' name='func' filepath='Python/ceval.c' line='5607' column='1'/>
+      <parameter type-id='type-id-16' name='arg' filepath='Python/ceval.c' line='5607' column='1'/>
       <return type-id='type-id-4'/>
     </function-decl>
-    <function-decl name='_PyEval_SetProfile' mangled-name='_PyEval_SetProfile' filepath='Python/ceval.c' line='5549' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='_PyEval_SetProfile'>
-      <parameter type-id='type-id-533' name='tstate' filepath='Python/ceval.c' line='5590' column='1'/>
-      <parameter type-id='type-id-15' name='func' filepath='Python/ceval.c' line='5590' column='1'/>
-      <parameter type-id='type-id-16' name='arg' filepath='Python/ceval.c' line='5590' column='1'/>
+    <function-decl name='_PyEval_SetProfile' mangled-name='_PyEval_SetProfile' filepath='Python/ceval.c' line='5533' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='_PyEval_SetProfile'>
+      <parameter type-id='type-id-533' name='tstate' filepath='Python/ceval.c' line='5574' column='1'/>
+      <parameter type-id='type-id-15' name='func' filepath='Python/ceval.c' line='5574' column='1'/>
+      <parameter type-id='type-id-16' name='arg' filepath='Python/ceval.c' line='5574' column='1'/>
       <return type-id='type-id-9'/>
     </function-decl>
-    <function-decl name='_PyEval_CallTracing' mangled-name='_PyEval_CallTracing' filepath='Python/ceval.c' line='5504' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='_PyEval_CallTracing'>
-      <parameter type-id='type-id-16' name='func' filepath='Python/ceval.c' line='5504' column='1'/>
-      <parameter type-id='type-id-16' name='args' filepath='Python/ceval.c' line='5504' column='1'/>
+    <function-decl name='_PyEval_CallTracing' mangled-name='_PyEval_CallTracing' filepath='Python/ceval.c' line='5488' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='_PyEval_CallTracing'>
+      <parameter type-id='type-id-16' name='func' filepath='Python/ceval.c' line='5488' column='1'/>
+      <parameter type-id='type-id-16' name='args' filepath='Python/ceval.c' line='5488' column='1'/>
       <return type-id='type-id-16'/>
     </function-decl>
     <function-decl name='_PyEval_EvalFrameDefault' mangled-name='_PyEval_EvalFrameDefault' filepath='Python/ceval.c' line='1577' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='_PyEval_EvalFrameDefault'>
     </function-decl>
   </abi-instr>
   <abi-instr version='1.0' address-size='64' path='Python/compile.c' comp-dir-path='/src' language='LANG_C99'>
-    <function-decl name='PyCode_Optimize' mangled-name='PyCode_Optimize' filepath='Python/compile.c' line='7912' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='PyCode_Optimize'>
-      <parameter type-id='type-id-16' name='code' filepath='Python/compile.c' line='7912' column='1'/>
-      <parameter type-id='type-id-16' name='_unused_consts' filepath='Python/compile.c' line='7912' column='1'/>
-      <parameter type-id='type-id-16' name='_unused_names' filepath='Python/compile.c' line='7913' column='1'/>
-      <parameter type-id='type-id-16' name='_unused_lnotab_obj' filepath='Python/compile.c' line='7913' column='1'/>
+    <function-decl name='PyCode_Optimize' mangled-name='PyCode_Optimize' filepath='Python/compile.c' line='7883' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='PyCode_Optimize'>
+      <parameter type-id='type-id-16' name='code' filepath='Python/compile.c' line='7883' column='1'/>
+      <parameter type-id='type-id-16' name='_unused_consts' filepath='Python/compile.c' line='7883' column='1'/>
+      <parameter type-id='type-id-16' name='_unused_names' filepath='Python/compile.c' line='7884' column='1'/>
+      <parameter type-id='type-id-16' name='_unused_lnotab_obj' filepath='Python/compile.c' line='7884' column='1'/>
       <return type-id='type-id-16'/>
     </function-decl>
-    <function-decl name='PyCompile_OpcodeStackEffect' mangled-name='PyCompile_OpcodeStackEffect' filepath='Python/compile.c' line='1226' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='PyCompile_OpcodeStackEffect'>
-      <parameter type-id='type-id-9' name='opcode' filepath='Python/compile.c' line='1226' column='1'/>
-      <parameter type-id='type-id-9' name='oparg' filepath='Python/compile.c' line='1226' column='1'/>
+    <function-decl name='PyCompile_OpcodeStackEffect' mangled-name='PyCompile_OpcodeStackEffect' filepath='Python/compile.c' line='1228' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='PyCompile_OpcodeStackEffect'>
+      <parameter type-id='type-id-9' name='opcode' filepath='Python/compile.c' line='1228' column='1'/>
+      <parameter type-id='type-id-9' name='oparg' filepath='Python/compile.c' line='1228' column='1'/>
       <return type-id='type-id-9'/>
     </function-decl>
-    <function-decl name='PyCompile_OpcodeStackEffectWithJump' mangled-name='PyCompile_OpcodeStackEffectWithJump' filepath='Python/compile.c' line='1220' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='PyCompile_OpcodeStackEffectWithJump'>
-      <parameter type-id='type-id-9' name='opcode' filepath='Python/compile.c' line='1220' column='1'/>
-      <parameter type-id='type-id-9' name='oparg' filepath='Python/compile.c' line='1220' column='1'/>
-      <parameter type-id='type-id-9' name='jump' filepath='Python/compile.c' line='1220' column='1'/>
+    <function-decl name='PyCompile_OpcodeStackEffectWithJump' mangled-name='PyCompile_OpcodeStackEffectWithJump' filepath='Python/compile.c' line='1222' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='PyCompile_OpcodeStackEffectWithJump'>
+      <parameter type-id='type-id-9' name='opcode' filepath='Python/compile.c' line='1222' column='1'/>
+      <parameter type-id='type-id-9' name='oparg' filepath='Python/compile.c' line='1222' column='1'/>
+      <parameter type-id='type-id-9' name='jump' filepath='Python/compile.c' line='1222' column='1'/>
       <return type-id='type-id-9'/>
     </function-decl>
     <class-decl name='_mod' size-in-bits='192' is-struct='yes' visibility='default' filepath='./Include/internal/pycore_ast.h' line='153' column='1' id='type-id-534'>
     <class-decl name='_arena' size-in-bits='192' is-struct='yes' visibility='default' is-declaration-only='yes' id='type-id-697'/>
     <typedef-decl name='PyArena' type-id='type-id-697' filepath='./Include/internal/pycore_pyarena.h' line='14' column='1' id='type-id-698'/>
     <pointer-type-def type-id='type-id-698' size-in-bits='64' id='type-id-699'/>
-    <function-decl name='_PyAST_Compile' mangled-name='_PyAST_Compile' filepath='Python/compile.c' line='401' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='_PyAST_Compile'>
-      <parameter type-id='type-id-696' name='mod' filepath='Python/compile.c' line='401' column='1'/>
-      <parameter type-id='type-id-16' name='filename' filepath='Python/compile.c' line='401' column='1'/>
-      <parameter type-id='type-id-522' name='flags' filepath='Python/compile.c' line='401' column='1'/>
-      <parameter type-id='type-id-9' name='optimize' filepath='Python/compile.c' line='402' column='1'/>
-      <parameter type-id='type-id-699' name='arena' filepath='Python/compile.c' line='402' column='1'/>
+    <function-decl name='_PyAST_Compile' mangled-name='_PyAST_Compile' filepath='Python/compile.c' line='403' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='_PyAST_Compile'>
+      <parameter type-id='type-id-696' name='mod' filepath='Python/compile.c' line='403' column='1'/>
+      <parameter type-id='type-id-16' name='filename' filepath='Python/compile.c' line='403' column='1'/>
+      <parameter type-id='type-id-522' name='flags' filepath='Python/compile.c' line='403' column='1'/>
+      <parameter type-id='type-id-9' name='optimize' filepath='Python/compile.c' line='404' column='1'/>
+      <parameter type-id='type-id-699' name='arena' filepath='Python/compile.c' line='404' column='1'/>
       <return type-id='type-id-334'/>
     </function-decl>
     <function-decl name='PyList_GetSlice' mangled-name='PyList_GetSlice' filepath='./Include/listobject.h' line='36' column='1' visibility='default' binding='global' size-in-bits='64'>
       <return type-id='type-id-4'/>
     </function-decl>
+    <function-decl name='PyErr_ProgramTextObject' mangled-name='PyErr_ProgramTextObject' filepath='./Include/cpython/pyerrors.h' line='160' column='1' visibility='default' binding='global' size-in-bits='64'>
+      <return type-id='type-id-4'/>
+    </function-decl>
     <function-decl name='PyUnicode_FindChar' mangled-name='PyUnicode_FindChar' filepath='./Include/unicodeobject.h' line='952' column='1' visibility='default' binding='global' size-in-bits='64'>
       <return type-id='type-id-4'/>
     </function-decl>
     <function-decl name='_PyAST_ExprAsUnicode' mangled-name='_PyAST_ExprAsUnicode' filepath='./Include/internal/pycore_ast.h' line='845' column='1' visibility='default' binding='global' size-in-bits='64'>
       <return type-id='type-id-4'/>
     </function-decl>
-    <function-decl name='_PyST_GetScope' mangled-name='_PyST_GetScope' filepath='./Include/internal/pycore_symtable.h' line='75' column='1' visibility='default' binding='global' size-in-bits='64'>
+    <function-decl name='_PyST_GetScope' mangled-name='_PyST_GetScope' filepath='./Include/internal/pycore_symtable.h' line='82' column='1' visibility='default' binding='global' size-in-bits='64'>
       <return type-id='type-id-4'/>
     </function-decl>
     <function-decl name='PyCapsule_GetPointer' mangled-name='PyCapsule_GetPointer' filepath='./Include/pycapsule.h' line='33' column='1' visibility='default' binding='global' size-in-bits='64'>
     <function-decl name='PyCapsule_New' mangled-name='PyCapsule_New' filepath='./Include/pycapsule.h' line='28' column='1' visibility='default' binding='global' size-in-bits='64'>
       <return type-id='type-id-4'/>
     </function-decl>
-    <function-decl name='PySymtable_Lookup' mangled-name='PySymtable_Lookup' filepath='./Include/internal/pycore_symtable.h' line='81' column='1' visibility='default' binding='global' size-in-bits='64'>
+    <function-decl name='PySymtable_Lookup' mangled-name='PySymtable_Lookup' filepath='./Include/internal/pycore_symtable.h' line='88' column='1' visibility='default' binding='global' size-in-bits='64'>
       <return type-id='type-id-4'/>
     </function-decl>
-    <function-decl name='_PySymtable_Free' mangled-name='_PySymtable_Free' filepath='./Include/internal/pycore_symtable.h' line='83' column='1' visibility='default' binding='global' size-in-bits='64'>
+    <function-decl name='_PySymtable_Free' mangled-name='_PySymtable_Free' filepath='./Include/internal/pycore_symtable.h' line='90' column='1' visibility='default' binding='global' size-in-bits='64'>
       <return type-id='type-id-4'/>
     </function-decl>
     <function-decl name='_PyFuture_FromAST' mangled-name='_PyFuture_FromAST' filepath='./Include/internal/pycore_compile.h' line='21' column='1' visibility='default' binding='global' size-in-bits='64'>
     <function-decl name='_PyAST_Optimize' mangled-name='_PyAST_Optimize' filepath='./Include/internal/pycore_compile.h' line='36' column='1' visibility='default' binding='global' size-in-bits='64'>
       <return type-id='type-id-4'/>
     </function-decl>
-    <function-decl name='_PySymtable_Build' mangled-name='_PySymtable_Build' filepath='./Include/internal/pycore_symtable.h' line='77' column='1' visibility='default' binding='global' size-in-bits='64'>
+    <function-decl name='_PySymtable_Build' mangled-name='_PySymtable_Build' filepath='./Include/internal/pycore_symtable.h' line='84' column='1' visibility='default' binding='global' size-in-bits='64'>
       <return type-id='type-id-4'/>
     </function-decl>
     <function-decl name='_PyCode_ConstantKey' mangled-name='_PyCode_ConstantKey' filepath='./Include/cpython/code.h' line='163' column='1' visibility='default' binding='global' size-in-bits='64'>
       <return type-id='type-id-16'/>
     </function-decl>
     <function-decl name='PyContext_Copy' mangled-name='PyContext_Copy' filepath='Python/context.c' line='92' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='PyContext_Copy'>
-      <parameter type-id='type-id-16' name='iter' filepath='Objects/abstract.c' line='2863' column='1'/>
+      <parameter type-id='type-id-16' name='iter' filepath='Objects/abstract.c' line='2871' column='1'/>
       <return type-id='type-id-16'/>
     </function-decl>
     <function-decl name='PyContext_New' mangled-name='PyContext_New' filepath='Python/context.c' line='85' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='PyContext_New'>
     </function-decl>
   </abi-instr>
   <abi-instr version='1.0' address-size='64' path='Python/errors.c' comp-dir-path='/src' language='LANG_C99'>
-    <function-decl name='PyErr_ProgramTextObject' mangled-name='PyErr_ProgramTextObject' filepath='Python/errors.c' line='1781' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='PyErr_ProgramTextObject'>
-      <parameter type-id='type-id-16' name='n' filepath='Objects/abstract.c' line='1702' column='1'/>
-      <parameter type-id='type-id-9' name='base' filepath='Objects/abstract.c' line='1702' column='1'/>
+    <function-decl name='PyErr_ProgramTextObject' mangled-name='PyErr_ProgramTextObject' filepath='Python/errors.c' line='1801' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='PyErr_ProgramTextObject'>
+      <parameter type-id='type-id-16' name='filename' filepath='Python/errors.c' line='1801' column='1'/>
+      <parameter type-id='type-id-9' name='lineno' filepath='Python/errors.c' line='1801' column='1'/>
+      <return type-id='type-id-16'/>
+    </function-decl>
+    <function-decl name='_PyErr_ProgramDecodedTextObject' mangled-name='_PyErr_ProgramDecodedTextObject' filepath='Python/errors.c' line='1785' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='_PyErr_ProgramDecodedTextObject'>
+      <parameter type-id='type-id-16' name='filename' filepath='Python/errors.c' line='1785' column='1'/>
+      <parameter type-id='type-id-9' name='lineno' filepath='Python/errors.c' line='1785' column='1'/>
+      <parameter type-id='type-id-3' name='encoding' filepath='Python/errors.c' line='1785' column='1'/>
       <return type-id='type-id-16'/>
     </function-decl>
-    <function-decl name='PyErr_ProgramText' mangled-name='PyErr_ProgramText' filepath='Python/errors.c' line='1764' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='PyErr_ProgramText'>
-      <parameter type-id='type-id-3' name='filename' filepath='Python/errors.c' line='1764' column='1'/>
-      <parameter type-id='type-id-9' name='lineno' filepath='Python/errors.c' line='1764' column='1'/>
+    <function-decl name='PyErr_ProgramText' mangled-name='PyErr_ProgramText' filepath='Python/errors.c' line='1768' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='PyErr_ProgramText'>
+      <parameter type-id='type-id-3' name='filename' filepath='Python/errors.c' line='1768' column='1'/>
+      <parameter type-id='type-id-9' name='lineno' filepath='Python/errors.c' line='1768' column='1'/>
       <return type-id='type-id-16'/>
     </function-decl>
     <function-decl name='PyErr_SyntaxLocationEx' mangled-name='PyErr_SyntaxLocationEx' filepath='Python/errors.c' line='1703' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='PyErr_SyntaxLocationEx'>
       <parameter is-variadic='yes'/>
       <return type-id='type-id-16'/>
     </function-decl>
-    <class-decl name='_ts' size-in-bits='2240' is-struct='yes' visibility='default' filepath='./Include/cpython/pystate.h' line='62' column='1' id='type-id-700'>
+    <class-decl name='_ts' size-in-bits='2240' is-struct='yes' visibility='default' filepath='./Include/cpython/pystate.h' line='60' column='1' id='type-id-700'>
       <data-member access='public' layout-offset-in-bits='0'>
-        <var-decl name='prev' type-id='type-id-11' visibility='default' filepath='./Include/cpython/pystate.h' line='65' column='1'/>
+        <var-decl name='prev' type-id='type-id-11' visibility='default' filepath='./Include/cpython/pystate.h' line='63' column='1'/>
       </data-member>
       <data-member access='public' layout-offset-in-bits='64'>
-        <var-decl name='next' type-id='type-id-11' visibility='default' filepath='./Include/cpython/pystate.h' line='66' column='1'/>
+        <var-decl name='next' type-id='type-id-11' visibility='default' filepath='./Include/cpython/pystate.h' line='64' column='1'/>
       </data-member>
       <data-member access='public' layout-offset-in-bits='128'>
-        <var-decl name='interp' type-id='type-id-222' visibility='default' filepath='./Include/cpython/pystate.h' line='67' column='1'/>
+        <var-decl name='interp' type-id='type-id-222' visibility='default' filepath='./Include/cpython/pystate.h' line='65' column='1'/>
       </data-member>
       <data-member access='public' layout-offset-in-bits='192'>
-        <var-decl name='frame' type-id='type-id-13' visibility='default' filepath='./Include/cpython/pystate.h' line='70' column='1'/>
+        <var-decl name='frame' type-id='type-id-13' visibility='default' filepath='./Include/cpython/pystate.h' line='68' column='1'/>
       </data-member>
       <data-member access='public' layout-offset-in-bits='256'>
-        <var-decl name='recursion_depth' type-id='type-id-9' visibility='default' filepath='./Include/cpython/pystate.h' line='71' column='1'/>
+        <var-decl name='recursion_depth' type-id='type-id-9' visibility='default' filepath='./Include/cpython/pystate.h' line='69' column='1'/>
       </data-member>
       <data-member access='public' layout-offset-in-bits='288'>
-        <var-decl name='recursion_headroom' type-id='type-id-9' visibility='default' filepath='./Include/cpython/pystate.h' line='72' column='1'/>
+        <var-decl name='recursion_headroom' type-id='type-id-9' visibility='default' filepath='./Include/cpython/pystate.h' line='70' column='1'/>
       </data-member>
       <data-member access='public' layout-offset-in-bits='320'>
-        <var-decl name='stackcheck_counter' type-id='type-id-9' visibility='default' filepath='./Include/cpython/pystate.h' line='73' column='1'/>
+        <var-decl name='stackcheck_counter' type-id='type-id-9' visibility='default' filepath='./Include/cpython/pystate.h' line='71' column='1'/>
       </data-member>
       <data-member access='public' layout-offset-in-bits='352'>
-        <var-decl name='tracing' type-id='type-id-9' visibility='default' filepath='./Include/cpython/pystate.h' line='78' column='1'/>
+        <var-decl name='tracing' type-id='type-id-9' visibility='default' filepath='./Include/cpython/pystate.h' line='76' column='1'/>
       </data-member>
       <data-member access='public' layout-offset-in-bits='384'>
-        <var-decl name='cframe' type-id='type-id-14' visibility='default' filepath='./Include/cpython/pystate.h' line='82' column='1'/>
+        <var-decl name='cframe' type-id='type-id-14' visibility='default' filepath='./Include/cpython/pystate.h' line='80' column='1'/>
       </data-member>
       <data-member access='public' layout-offset-in-bits='448'>
-        <var-decl name='c_profilefunc' type-id='type-id-15' visibility='default' filepath='./Include/cpython/pystate.h' line='84' column='1'/>
+        <var-decl name='c_profilefunc' type-id='type-id-15' visibility='default' filepath='./Include/cpython/pystate.h' line='82' column='1'/>
       </data-member>
       <data-member access='public' layout-offset-in-bits='512'>
-        <var-decl name='c_tracefunc' type-id='type-id-15' visibility='default' filepath='./Include/cpython/pystate.h' line='85' column='1'/>
+        <var-decl name='c_tracefunc' type-id='type-id-15' visibility='default' filepath='./Include/cpython/pystate.h' line='83' column='1'/>
       </data-member>
       <data-member access='public' layout-offset-in-bits='576'>
-        <var-decl name='c_profileobj' type-id='type-id-16' visibility='default' filepath='./Include/cpython/pystate.h' line='86' column='1'/>
+        <var-decl name='c_profileobj' type-id='type-id-16' visibility='default' filepath='./Include/cpython/pystate.h' line='84' column='1'/>
       </data-member>
       <data-member access='public' layout-offset-in-bits='640'>
-        <var-decl name='c_traceobj' type-id='type-id-16' visibility='default' filepath='./Include/cpython/pystate.h' line='87' column='1'/>
+        <var-decl name='c_traceobj' type-id='type-id-16' visibility='default' filepath='./Include/cpython/pystate.h' line='85' column='1'/>
       </data-member>
       <data-member access='public' layout-offset-in-bits='704'>
-        <var-decl name='curexc_type' type-id='type-id-16' visibility='default' filepath='./Include/cpython/pystate.h' line='90' column='1'/>
+        <var-decl name='curexc_type' type-id='type-id-16' visibility='default' filepath='./Include/cpython/pystate.h' line='88' column='1'/>
       </data-member>
       <data-member access='public' layout-offset-in-bits='768'>
-        <var-decl name='curexc_value' type-id='type-id-16' visibility='default' filepath='./Include/cpython/pystate.h' line='91' column='1'/>
+        <var-decl name='curexc_value' type-id='type-id-16' visibility='default' filepath='./Include/cpython/pystate.h' line='89' column='1'/>
       </data-member>
       <data-member access='public' layout-offset-in-bits='832'>
-        <var-decl name='curexc_traceback' type-id='type-id-16' visibility='default' filepath='./Include/cpython/pystate.h' line='92' column='1'/>
+        <var-decl name='curexc_traceback' type-id='type-id-16' visibility='default' filepath='./Include/cpython/pystate.h' line='90' column='1'/>
       </data-member>
       <data-member access='public' layout-offset-in-bits='896'>
-        <var-decl name='exc_state' type-id='type-id-17' visibility='default' filepath='./Include/cpython/pystate.h' line='97' column='1'/>
+        <var-decl name='exc_state' type-id='type-id-17' visibility='default' filepath='./Include/cpython/pystate.h' line='95' column='1'/>
       </data-member>
       <data-member access='public' layout-offset-in-bits='1152'>
-        <var-decl name='exc_info' type-id='type-id-18' visibility='default' filepath='./Include/cpython/pystate.h' line='101' column='1'/>
+        <var-decl name='exc_info' type-id='type-id-18' visibility='default' filepath='./Include/cpython/pystate.h' line='99' column='1'/>
       </data-member>
       <data-member access='public' layout-offset-in-bits='1216'>
-        <var-decl name='dict' type-id='type-id-16' visibility='default' filepath='./Include/cpython/pystate.h' line='103' column='1'/>
+        <var-decl name='dict' type-id='type-id-16' visibility='default' filepath='./Include/cpython/pystate.h' line='101' column='1'/>
       </data-member>
       <data-member access='public' layout-offset-in-bits='1280'>
-        <var-decl name='gilstate_counter' type-id='type-id-9' visibility='default' filepath='./Include/cpython/pystate.h' line='105' column='1'/>
+        <var-decl name='gilstate_counter' type-id='type-id-9' visibility='default' filepath='./Include/cpython/pystate.h' line='103' column='1'/>
       </data-member>
       <data-member access='public' layout-offset-in-bits='1344'>
-        <var-decl name='async_exc' type-id='type-id-16' visibility='default' filepath='./Include/cpython/pystate.h' line='107' column='1'/>
+        <var-decl name='async_exc' type-id='type-id-16' visibility='default' filepath='./Include/cpython/pystate.h' line='105' column='1'/>
       </data-member>
       <data-member access='public' layout-offset-in-bits='1408'>
-        <var-decl name='thread_id' type-id='type-id-19' visibility='default' filepath='./Include/cpython/pystate.h' line='108' column='1'/>
+        <var-decl name='thread_id' type-id='type-id-19' visibility='default' filepath='./Include/cpython/pystate.h' line='106' column='1'/>
       </data-member>
       <data-member access='public' layout-offset-in-bits='1472'>
-        <var-decl name='trash_delete_nesting' type-id='type-id-9' visibility='default' filepath='./Include/cpython/pystate.h' line='110' column='1'/>
+        <var-decl name='trash_delete_nesting' type-id='type-id-9' visibility='default' filepath='./Include/cpython/pystate.h' line='108' column='1'/>
       </data-member>
       <data-member access='public' layout-offset-in-bits='1536'>
-        <var-decl name='trash_delete_later' type-id='type-id-16' visibility='default' filepath='./Include/cpython/pystate.h' line='111' column='1'/>
+        <var-decl name='trash_delete_later' type-id='type-id-16' visibility='default' filepath='./Include/cpython/pystate.h' line='109' column='1'/>
       </data-member>
       <data-member access='public' layout-offset-in-bits='1600'>
-        <var-decl name='on_delete' type-id='type-id-20' visibility='default' filepath='./Include/cpython/pystate.h' line='136' column='1'/>
+        <var-decl name='on_delete' type-id='type-id-20' visibility='default' filepath='./Include/cpython/pystate.h' line='134' column='1'/>
       </data-member>
       <data-member access='public' layout-offset-in-bits='1664'>
-        <var-decl name='on_delete_data' type-id='type-id-21' visibility='default' filepath='./Include/cpython/pystate.h' line='137' column='1'/>
+        <var-decl name='on_delete_data' type-id='type-id-21' visibility='default' filepath='./Include/cpython/pystate.h' line='135' column='1'/>
       </data-member>
       <data-member access='public' layout-offset-in-bits='1728'>
-        <var-decl name='coroutine_origin_tracking_depth' type-id='type-id-9' visibility='default' filepath='./Include/cpython/pystate.h' line='139' column='1'/>
+        <var-decl name='coroutine_origin_tracking_depth' type-id='type-id-9' visibility='default' filepath='./Include/cpython/pystate.h' line='137' column='1'/>
       </data-member>
       <data-member access='public' layout-offset-in-bits='1792'>
-        <var-decl name='async_gen_firstiter' type-id='type-id-16' visibility='default' filepath='./Include/cpython/pystate.h' line='141' column='1'/>
+        <var-decl name='async_gen_firstiter' type-id='type-id-16' visibility='default' filepath='./Include/cpython/pystate.h' line='139' column='1'/>
       </data-member>
       <data-member access='public' layout-offset-in-bits='1856'>
-        <var-decl name='async_gen_finalizer' type-id='type-id-16' visibility='default' filepath='./Include/cpython/pystate.h' line='142' column='1'/>
+        <var-decl name='async_gen_finalizer' type-id='type-id-16' visibility='default' filepath='./Include/cpython/pystate.h' line='140' column='1'/>
       </data-member>
       <data-member access='public' layout-offset-in-bits='1920'>
-        <var-decl name='context' type-id='type-id-16' visibility='default' filepath='./Include/cpython/pystate.h' line='144' column='1'/>
+        <var-decl name='context' type-id='type-id-16' visibility='default' filepath='./Include/cpython/pystate.h' line='142' column='1'/>
       </data-member>
       <data-member access='public' layout-offset-in-bits='1984'>
-        <var-decl name='context_ver' type-id='type-id-22' visibility='default' filepath='./Include/cpython/pystate.h' line='145' column='1'/>
+        <var-decl name='context_ver' type-id='type-id-22' visibility='default' filepath='./Include/cpython/pystate.h' line='143' column='1'/>
       </data-member>
       <data-member access='public' layout-offset-in-bits='2048'>
-        <var-decl name='id' type-id='type-id-22' visibility='default' filepath='./Include/cpython/pystate.h' line='148' column='1'/>
+        <var-decl name='id' type-id='type-id-22' visibility='default' filepath='./Include/cpython/pystate.h' line='146' column='1'/>
       </data-member>
       <data-member access='public' layout-offset-in-bits='2112'>
-        <var-decl name='root_cframe' type-id='type-id-23' visibility='default' filepath='./Include/cpython/pystate.h' line='150' column='1'/>
+        <var-decl name='root_cframe' type-id='type-id-23' visibility='default' filepath='./Include/cpython/pystate.h' line='148' column='1'/>
       </data-member>
     </class-decl>
     <class-decl name='_is' size-in-bits='908160' is-struct='yes' visibility='default' filepath='./Include/internal/pycore_interp.h' line='220' column='1' id='type-id-701'>
     <function-decl name='_PyRuntime_Initialize' mangled-name='_PyRuntime_Initialize' filepath='./Include/internal/pycore_runtime.h' line='139' column='1' visibility='default' binding='global' size-in-bits='64'>
       <return type-id='type-id-4'/>
     </function-decl>
-    <function-decl name='PyStatus_Exception' mangled-name='PyStatus_Exception' filepath='./Include/cpython/initconfig.h' line='24' column='1' visibility='default' binding='global' size-in-bits='64'>
+    <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'>
       <return type-id='type-id-4'/>
     </function-decl>
-    <function-decl name='PyConfig_InitPythonConfig' mangled-name='PyConfig_InitPythonConfig' filepath='./Include/cpython/initconfig.h' line='211' column='1' visibility='default' binding='global' size-in-bits='64'>
+    <function-decl name='PyConfig_InitPythonConfig' mangled-name='PyConfig_InitPythonConfig' filepath='./Include/cpython/initconfig.h' line='214' column='1' visibility='default' binding='global' size-in-bits='64'>
       <return type-id='type-id-4'/>
     </function-decl>
     <function-decl name='setlocale' mangled-name='setlocale' filepath='/usr/include/locale.h' line='122' column='1' visibility='default' binding='global' size-in-bits='64'>
     <function-decl name='Py_InitializeFromConfig' mangled-name='Py_InitializeFromConfig' filepath='./Include/cpython/pylifecycle.h' line='33' column='1' visibility='default' binding='global' size-in-bits='64'>
       <return type-id='type-id-4'/>
     </function-decl>
-    <function-decl name='PyConfig_Clear' mangled-name='PyConfig_Clear' filepath='./Include/cpython/initconfig.h' line='213' column='1' visibility='default' binding='global' size-in-bits='64'>
+    <function-decl name='PyConfig_Clear' mangled-name='PyConfig_Clear' filepath='./Include/cpython/initconfig.h' line='216' column='1' visibility='default' binding='global' size-in-bits='64'>
       <return type-id='type-id-4'/>
     </function-decl>
     <function-decl name='PySys_SetArgv' mangled-name='PySys_SetArgv' filepath='./Include/sysmodule.h' line='13' column='1' visibility='default' binding='global' size-in-bits='64'>
       <return type-id='type-id-9'/>
     </function-decl>
     <function-decl name='PyImport_GetImporter' mangled-name='PyImport_GetImporter' filepath='Python/import.c' line='985' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='PyImport_GetImporter'>
-      <parameter type-id='type-id-16' name='o' filepath='Objects/abstract.c' line='2819' column='1'/>
+      <parameter type-id='type-id-16' name='o' filepath='Objects/abstract.c' line='2827' column='1'/>
       <return type-id='type-id-16'/>
     </function-decl>
     <function-decl name='PyImport_ExecCodeModuleObject' mangled-name='PyImport_ExecCodeModuleObject' filepath='Python/import.c' line='811' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='PyImport_ExecCodeModuleObject'>
     <function-decl name='_Py_GetConfigsAsDict' mangled-name='_Py_GetConfigsAsDict' filepath='./Python/initconfig.c' line='2898' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='_Py_GetConfigsAsDict'>
       <return type-id='type-id-16'/>
     </function-decl>
-    <class-decl name='__anonymous_struct__' size-in-bits='256' is-struct='yes' is-anonymous='yes' naming-typedef-id='type-id-743' visibility='default' filepath='./Include/cpython/initconfig.h' line='7' column='1' id='type-id-744'>
+    <class-decl name='__anonymous_struct__' size-in-bits='256' is-struct='yes' is-anonymous='yes' naming-typedef-id='type-id-743' visibility='default' filepath='./Include/cpython/initconfig.h' line='10' column='1' id='type-id-744'>
       <data-member access='public' layout-offset-in-bits='0'>
-        <var-decl name='_type' type-id='type-id-745' visibility='default' filepath='./Include/cpython/initconfig.h' line='12' column='1'/>
+        <var-decl name='_type' type-id='type-id-745' visibility='default' filepath='./Include/cpython/initconfig.h' line='15' column='1'/>
       </data-member>
       <data-member access='public' layout-offset-in-bits='64'>
-        <var-decl name='func' type-id='type-id-3' visibility='default' filepath='./Include/cpython/initconfig.h' line='13' column='1'/>
+        <var-decl name='func' type-id='type-id-3' visibility='default' filepath='./Include/cpython/initconfig.h' line='16' column='1'/>
       </data-member>
       <data-member access='public' layout-offset-in-bits='128'>
-        <var-decl name='err_msg' type-id='type-id-3' visibility='default' filepath='./Include/cpython/initconfig.h' line='14' column='1'/>
+        <var-decl name='err_msg' type-id='type-id-3' visibility='default' filepath='./Include/cpython/initconfig.h' line='17' column='1'/>
       </data-member>
       <data-member access='public' layout-offset-in-bits='192'>
-        <var-decl name='exitcode' type-id='type-id-9' visibility='default' filepath='./Include/cpython/initconfig.h' line='15' column='1'/>
+        <var-decl name='exitcode' type-id='type-id-9' visibility='default' filepath='./Include/cpython/initconfig.h' line='18' column='1'/>
       </data-member>
     </class-decl>
-    <enum-decl name='__anonymous_enum__' is-anonymous='yes' filepath='./Include/cpython/initconfig.h' line='8' column='1' id='type-id-745'>
+    <enum-decl name='__anonymous_enum__' is-anonymous='yes' filepath='./Include/cpython/initconfig.h' line='11' column='1' id='type-id-745'>
       <underlying-type type-id='type-id-83'/>
       <enumerator name='_PyStatus_TYPE_OK' value='0'/>
       <enumerator name='_PyStatus_TYPE_ERROR' value='1'/>
       <enumerator name='_PyStatus_TYPE_EXIT' value='2'/>
     </enum-decl>
-    <typedef-decl name='PyStatus' type-id='type-id-744' filepath='./Include/cpython/initconfig.h' line='16' column='1' id='type-id-743'/>
+    <typedef-decl name='PyStatus' type-id='type-id-744' filepath='./Include/cpython/initconfig.h' line='19' column='1' id='type-id-743'/>
     <pointer-type-def type-id='type-id-231' size-in-bits='64' id='type-id-746'/>
     <function-decl name='PyConfig_Read' mangled-name='PyConfig_Read' filepath='./Python/initconfig.c' line='2891' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='PyConfig_Read'>
       <parameter type-id='type-id-746' name='config' filepath='./Python/initconfig.c' line='2891' column='1'/>
     <function-decl name='_PyOS_GetOpt' mangled-name='_PyOS_GetOpt' filepath='./Include/internal/pycore_getopt.h' line='20' column='1' visibility='default' binding='global' size-in-bits='64'>
       <return type-id='type-id-4'/>
     </function-decl>
+    <function-decl name='__printf_chk' mangled-name='__printf_chk' filepath='/usr/include/x86_64-linux-gnu/bits/stdio2.h' line='90' column='1' visibility='default' binding='global' size-in-bits='64'>
+      <return type-id='type-id-4'/>
+    </function-decl>
     <function-decl name='_PyOS_ResetGetOpt' mangled-name='_PyOS_ResetGetOpt' filepath='./Include/internal/pycore_getopt.h' line='12' column='1' visibility='default' binding='global' size-in-bits='64'>
       <return type-id='type-id-4'/>
     </function-decl>
     <function-decl name='_PyPathConfig_Calculate' mangled-name='_PyPathConfig_Calculate' filepath='./Include/internal/pycore_pathconfig.h' line='51' column='1' visibility='default' binding='global' size-in-bits='64'>
       <return type-id='type-id-4'/>
     </function-decl>
-    <function-decl name='PyWideStringList_Append' mangled-name='PyWideStringList_Append' filepath='./Include/cpython/initconfig.h' line='35' column='1' visibility='default' binding='global' size-in-bits='64'>
+    <function-decl name='PyWideStringList_Append' mangled-name='PyWideStringList_Append' filepath='./Include/cpython/initconfig.h' line='38' column='1' visibility='default' binding='global' size-in-bits='64'>
       <return type-id='type-id-4'/>
     </function-decl>
     <function-decl name='_PyWideStringList_Clear' mangled-name='_PyWideStringList_Clear' filepath='./Include/internal/pycore_initconfig.h' line='56' column='1' visibility='default' binding='global' size-in-bits='64'>
     <function-decl name='_PyEval_InitGIL' mangled-name='_PyEval_InitGIL' filepath='./Include/internal/pycore_ceval.h' line='60' column='1' visibility='default' binding='global' size-in-bits='64'>
       <return type-id='type-id-4'/>
     </function-decl>
-    <function-decl name='PyInterpreterState_Main' mangled-name='PyInterpreterState_Main' filepath='./Include/cpython/pystate.h' line='196' column='1' visibility='default' binding='global' size-in-bits='64'>
+    <function-decl name='PyInterpreterState_Main' mangled-name='PyInterpreterState_Main' filepath='./Include/cpython/pystate.h' line='194' column='1' visibility='default' binding='global' size-in-bits='64'>
       <return type-id='type-id-4'/>
     </function-decl>
     <function-decl name='PyInterpreterState_New' mangled-name='PyInterpreterState_New' filepath='./Include/pystate.h' line='24' column='1' visibility='default' binding='global' size-in-bits='64'>
     <function-decl name='_PySys_Create' mangled-name='_PySys_Create' filepath='./Include/internal/pycore_pylifecycle.h' line='62' column='1' visibility='default' binding='global' size-in-bits='64'>
       <return type-id='type-id-4'/>
     </function-decl>
-    <function-decl name='PyConfig_Read' mangled-name='PyConfig_Read' filepath='./Include/cpython/initconfig.h' line='222' column='1' visibility='default' binding='global' size-in-bits='64'>
+    <function-decl name='PyConfig_Read' mangled-name='PyConfig_Read' filepath='./Include/cpython/initconfig.h' line='225' column='1' visibility='default' binding='global' size-in-bits='64'>
       <return type-id='type-id-4'/>
     </function-decl>
     <function-decl name='_Py_ResetForceASCII' mangled-name='_Py_ResetForceASCII' filepath='./Include/internal/pycore_fileutils.h' line='43' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='_Py_ResetForceASCII'>
     </function-decl>
   </abi-instr>
   <abi-instr version='1.0' address-size='64' path='Python/pystate.c' comp-dir-path='/src' language='LANG_C99'>
-    <function-decl name='_Py_GetConfig' mangled-name='_Py_GetConfig' filepath='Python/pystate.c' line='1965' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='_Py_GetConfig'>
+    <function-decl name='_Py_GetConfig' mangled-name='_Py_GetConfig' filepath='Python/pystate.c' line='1968' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='_Py_GetConfig'>
       <return type-id='type-id-751'/>
     </function-decl>
-    <function-decl name='_PyInterpreterState_GetConfigCopy' mangled-name='_PyInterpreterState_GetConfigCopy' filepath='Python/pystate.c' line='1951' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='_PyInterpreterState_GetConfigCopy'>
-      <parameter type-id='type-id-746' name='config' filepath='Python/pystate.c' line='1951' column='1'/>
+    <function-decl name='_PyInterpreterState_GetConfigCopy' mangled-name='_PyInterpreterState_GetConfigCopy' filepath='Python/pystate.c' line='1954' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='_PyInterpreterState_GetConfigCopy'>
+      <parameter type-id='type-id-746' name='config' filepath='Python/pystate.c' line='1954' column='1'/>
       <return type-id='type-id-9'/>
     </function-decl>
-    <function-decl name='_PyInterpreterState_GetConfig' mangled-name='_PyInterpreterState_GetConfig' filepath='Python/pystate.c' line='1944' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='_PyInterpreterState_GetConfig'>
-      <parameter type-id='type-id-222' name='interp' filepath='Python/pystate.c' line='1944' column='1'/>
+    <function-decl name='_PyInterpreterState_GetConfig' mangled-name='_PyInterpreterState_GetConfig' filepath='Python/pystate.c' line='1947' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='_PyInterpreterState_GetConfig'>
+      <parameter type-id='type-id-222' name='interp' filepath='Python/pystate.c' line='1947' column='1'/>
       <return type-id='type-id-751'/>
     </function-decl>
-    <function-decl name='_PyInterpreterState_SetEvalFrameFunc' mangled-name='_PyInterpreterState_SetEvalFrameFunc' filepath='Python/pystate.c' line='1936' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='_PyInterpreterState_SetEvalFrameFunc'>
-      <parameter type-id='type-id-222' name='interp' filepath='Python/pystate.c' line='1936' column='1'/>
-      <parameter type-id='type-id-232' name='eval_frame' filepath='Python/pystate.c' line='1937' column='1'/>
+    <function-decl name='_PyInterpreterState_SetEvalFrameFunc' mangled-name='_PyInterpreterState_SetEvalFrameFunc' filepath='Python/pystate.c' line='1939' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='_PyInterpreterState_SetEvalFrameFunc'>
+      <parameter type-id='type-id-222' name='interp' filepath='Python/pystate.c' line='1939' column='1'/>
+      <parameter type-id='type-id-232' name='eval_frame' filepath='Python/pystate.c' line='1940' column='1'/>
       <return type-id='type-id-4'/>
     </function-decl>
-    <function-decl name='_PyInterpreterState_GetEvalFrameFunc' mangled-name='_PyInterpreterState_GetEvalFrameFunc' filepath='Python/pystate.c' line='1929' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='_PyInterpreterState_GetEvalFrameFunc'>
-      <parameter type-id='type-id-222' name='interp' filepath='Python/pystate.c' line='1929' column='1'/>
+    <function-decl name='_PyInterpreterState_GetEvalFrameFunc' mangled-name='_PyInterpreterState_GetEvalFrameFunc' filepath='Python/pystate.c' line='1932' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='_PyInterpreterState_GetEvalFrameFunc'>
+      <parameter type-id='type-id-222' name='interp' filepath='Python/pystate.c' line='1932' column='1'/>
       <return type-id='type-id-232'/>
     </function-decl>
-    <function-decl name='_PyCrossInterpreterData_Lookup' mangled-name='_PyCrossInterpreterData_Lookup' filepath='Python/pystate.c' line='1779' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='_PyCrossInterpreterData_Lookup'>
-      <parameter type-id='type-id-16' name='obj' filepath='Python/pystate.c' line='1779' column='1'/>
+    <function-decl name='_PyCrossInterpreterData_Lookup' mangled-name='_PyCrossInterpreterData_Lookup' filepath='Python/pystate.c' line='1782' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='_PyCrossInterpreterData_Lookup'>
+      <parameter type-id='type-id-16' name='obj' filepath='Python/pystate.c' line='1782' column='1'/>
       <return type-id='type-id-267'/>
     </function-decl>
-    <function-decl name='_PyCrossInterpreterData_RegisterClass' mangled-name='_PyCrossInterpreterData_RegisterClass' filepath='Python/pystate.c' line='1749' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='_PyCrossInterpreterData_RegisterClass'>
-      <parameter type-id='type-id-32' name='cls' filepath='Python/pystate.c' line='1749' column='1'/>
-      <parameter type-id='type-id-267' name='getdata' filepath='Python/pystate.c' line='1750' column='1'/>
+    <function-decl name='_PyCrossInterpreterData_RegisterClass' mangled-name='_PyCrossInterpreterData_RegisterClass' filepath='Python/pystate.c' line='1752' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='_PyCrossInterpreterData_RegisterClass'>
+      <parameter type-id='type-id-32' name='cls' filepath='Python/pystate.c' line='1752' column='1'/>
+      <parameter type-id='type-id-267' name='getdata' filepath='Python/pystate.c' line='1753' column='1'/>
       <return type-id='type-id-9'/>
     </function-decl>
-    <typedef-decl name='_PyCrossInterpreterData' type-id='type-id-268' filepath='./Include/cpython/pystate.h' line='294' column='1' id='type-id-794'/>
+    <typedef-decl name='_PyCrossInterpreterData' type-id='type-id-268' filepath='./Include/cpython/pystate.h' line='292' column='1' id='type-id-794'/>
     <pointer-type-def type-id='type-id-794' size-in-bits='64' id='type-id-795'/>
-    <function-decl name='_PyCrossInterpreterData_NewObject' mangled-name='_PyCrossInterpreterData_NewObject' filepath='Python/pystate.c' line='1719' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='_PyCrossInterpreterData_NewObject'>
-      <parameter type-id='type-id-795' name='data' filepath='Python/pystate.c' line='1719' column='1'/>
+    <function-decl name='_PyCrossInterpreterData_NewObject' mangled-name='_PyCrossInterpreterData_NewObject' filepath='Python/pystate.c' line='1722' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='_PyCrossInterpreterData_NewObject'>
+      <parameter type-id='type-id-795' name='data' filepath='Python/pystate.c' line='1722' column='1'/>
       <return type-id='type-id-16'/>
     </function-decl>
-    <function-decl name='_PyCrossInterpreterData_Release' mangled-name='_PyCrossInterpreterData_Release' filepath='Python/pystate.c' line='1696' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='_PyCrossInterpreterData_Release'>
-      <parameter type-id='type-id-795' name='data' filepath='Python/pystate.c' line='1696' column='1'/>
+    <function-decl name='_PyCrossInterpreterData_Release' mangled-name='_PyCrossInterpreterData_Release' filepath='Python/pystate.c' line='1699' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='_PyCrossInterpreterData_Release'>
+      <parameter type-id='type-id-795' name='data' filepath='Python/pystate.c' line='1699' column='1'/>
       <return type-id='type-id-4'/>
     </function-decl>
-    <function-decl name='_PyObject_GetCrossInterpreterData' mangled-name='_PyObject_GetCrossInterpreterData' filepath='Python/pystate.c' line='1627' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='_PyObject_GetCrossInterpreterData'>
-      <parameter type-id='type-id-16' name='obj' filepath='Python/pystate.c' line='1627' column='1'/>
-      <parameter type-id='type-id-795' name='data' filepath='Python/pystate.c' line='1627' column='1'/>
+    <function-decl name='_PyObject_GetCrossInterpreterData' mangled-name='_PyObject_GetCrossInterpreterData' filepath='Python/pystate.c' line='1630' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='_PyObject_GetCrossInterpreterData'>
+      <parameter type-id='type-id-16' name='obj' filepath='Python/pystate.c' line='1630' column='1'/>
+      <parameter type-id='type-id-795' name='data' filepath='Python/pystate.c' line='1630' column='1'/>
       <return type-id='type-id-9'/>
     </function-decl>
-    <function-decl name='_PyObject_CheckCrossInterpreterData' mangled-name='_PyObject_CheckCrossInterpreterData' filepath='Python/pystate.c' line='1595' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='_PyObject_CheckCrossInterpreterData'>
+    <function-decl name='_PyObject_CheckCrossInterpreterData' mangled-name='_PyObject_CheckCrossInterpreterData' filepath='Python/pystate.c' line='1598' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='_PyObject_CheckCrossInterpreterData'>
       <parameter type-id='type-id-16' name='o' filepath='Objects/abstract.c' line='830' column='1'/>
       <return type-id='type-id-9'/>
     </function-decl>
       <enumerator name='PyGILState_UNLOCKED' value='1'/>
     </enum-decl>
     <typedef-decl name='PyGILState_STATE' type-id='type-id-796' filepath='./Include/pystate.h' line='96' column='1' id='type-id-797'/>
-    <function-decl name='PyGILState_Release' mangled-name='PyGILState_Release' filepath='Python/pystate.c' line='1530' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='PyGILState_Release'>
-      <parameter type-id='type-id-797' name='oldstate' filepath='Python/pystate.c' line='1530' column='1'/>
+    <function-decl name='PyGILState_Release' mangled-name='PyGILState_Release' filepath='Python/pystate.c' line='1533' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='PyGILState_Release'>
+      <parameter type-id='type-id-797' name='oldstate' filepath='Python/pystate.c' line='1533' column='1'/>
       <return type-id='type-id-4'/>
     </function-decl>
-    <function-decl name='PyGILState_Ensure' mangled-name='PyGILState_Ensure' filepath='Python/pystate.c' line='1480' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='PyGILState_Ensure'>
+    <function-decl name='PyGILState_Ensure' mangled-name='PyGILState_Ensure' filepath='Python/pystate.c' line='1483' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='PyGILState_Ensure'>
       <return type-id='type-id-797'/>
     </function-decl>
-    <function-decl name='PyGILState_Check' mangled-name='PyGILState_Check' filepath='Python/pystate.c' line='1460' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='PyGILState_Check'>
+    <function-decl name='PyGILState_Check' mangled-name='PyGILState_Check' filepath='Python/pystate.c' line='1463' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='PyGILState_Check'>
       <return type-id='type-id-9'/>
     </function-decl>
-    <function-decl name='PyGILState_GetThisThreadState' mangled-name='PyGILState_GetThisThreadState' filepath='Python/pystate.c' line='1454' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='PyGILState_GetThisThreadState'>
+    <function-decl name='PyGILState_GetThisThreadState' mangled-name='PyGILState_GetThisThreadState' filepath='Python/pystate.c' line='1457' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='PyGILState_GetThisThreadState'>
       <return type-id='type-id-331'/>
     </function-decl>
-    <function-decl name='_PyGILState_GetInterpreterStateUnsafe' mangled-name='_PyGILState_GetInterpreterStateUnsafe' filepath='Python/pystate.c' line='1367' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='_PyGILState_GetInterpreterStateUnsafe'>
+    <function-decl name='_PyGILState_GetInterpreterStateUnsafe' mangled-name='_PyGILState_GetInterpreterStateUnsafe' filepath='Python/pystate.c' line='1370' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='_PyGILState_GetInterpreterStateUnsafe'>
       <return type-id='type-id-222'/>
     </function-decl>
-    <function-decl name='_PyThread_CurrentExceptions' mangled-name='_PyThread_CurrentExceptions' filepath='Python/pystate.c' line='1245' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='_PyThread_CurrentExceptions'>
+    <function-decl name='_PyThread_CurrentExceptions' mangled-name='_PyThread_CurrentExceptions' filepath='Python/pystate.c' line='1248' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='_PyThread_CurrentExceptions'>
       <return type-id='type-id-16'/>
     </function-decl>
-    <function-decl name='_PyThread_CurrentFrames' mangled-name='_PyThread_CurrentFrames' filepath='Python/pystate.c' line='1195' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='_PyThread_CurrentFrames'>
+    <function-decl name='_PyThread_CurrentFrames' mangled-name='_PyThread_CurrentFrames' filepath='Python/pystate.c' line='1198' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='_PyThread_CurrentFrames'>
       <return type-id='type-id-16'/>
     </function-decl>
-    <function-decl name='PyThreadState_Next' mangled-name='PyThreadState_Next' filepath='Python/pystate.c' line='1185' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='PyThreadState_Next'>
-      <parameter type-id='type-id-331' name='tstate' filepath='Python/pystate.c' line='1185' column='1'/>
+    <function-decl name='PyThreadState_Next' mangled-name='PyThreadState_Next' filepath='Python/pystate.c' line='1188' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='PyThreadState_Next'>
+      <parameter type-id='type-id-331' name='tstate' filepath='Python/pystate.c' line='1188' column='1'/>
       <return type-id='type-id-331'/>
     </function-decl>
-    <function-decl name='PyInterpreterState_ThreadHead' mangled-name='PyInterpreterState_ThreadHead' filepath='Python/pystate.c' line='1180' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='PyInterpreterState_ThreadHead'>
-      <parameter type-id='type-id-222' name='interp' filepath='Python/pystate.c' line='1180' column='1'/>
+    <function-decl name='PyInterpreterState_ThreadHead' mangled-name='PyInterpreterState_ThreadHead' filepath='Python/pystate.c' line='1183' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='PyInterpreterState_ThreadHead'>
+      <parameter type-id='type-id-222' name='interp' filepath='Python/pystate.c' line='1183' column='1'/>
       <return type-id='type-id-331'/>
     </function-decl>
-    <function-decl name='PyInterpreterState_Next' mangled-name='PyInterpreterState_Next' filepath='Python/pystate.c' line='1175' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='PyInterpreterState_Next'>
-      <parameter type-id='type-id-222' name='interp' filepath='Python/pystate.c' line='1175' column='1'/>
+    <function-decl name='PyInterpreterState_Next' mangled-name='PyInterpreterState_Next' filepath='Python/pystate.c' line='1178' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='PyInterpreterState_Next'>
+      <parameter type-id='type-id-222' name='interp' filepath='Python/pystate.c' line='1178' column='1'/>
       <return type-id='type-id-222'/>
     </function-decl>
-    <function-decl name='PyInterpreterState_Main' mangled-name='PyInterpreterState_Main' filepath='Python/pystate.c' line='1169' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='PyInterpreterState_Main'>
+    <function-decl name='PyInterpreterState_Main' mangled-name='PyInterpreterState_Main' filepath='Python/pystate.c' line='1172' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='PyInterpreterState_Main'>
       <return type-id='type-id-222'/>
     </function-decl>
-    <function-decl name='PyInterpreterState_Head' mangled-name='PyInterpreterState_Head' filepath='Python/pystate.c' line='1163' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='PyInterpreterState_Head'>
+    <function-decl name='PyInterpreterState_Head' mangled-name='PyInterpreterState_Head' filepath='Python/pystate.c' line='1166' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='PyInterpreterState_Head'>
       <return type-id='type-id-222'/>
     </function-decl>
-    <function-decl name='PyThreadState_SetAsyncExc' mangled-name='PyThreadState_SetAsyncExc' filepath='Python/pystate.c' line='1121' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='PyThreadState_SetAsyncExc'>
-      <parameter type-id='type-id-19' name='id' filepath='Python/pystate.c' line='1121' column='1'/>
-      <parameter type-id='type-id-16' name='exc' filepath='Python/pystate.c' line='1121' column='1'/>
+    <function-decl name='PyThreadState_SetAsyncExc' mangled-name='PyThreadState_SetAsyncExc' filepath='Python/pystate.c' line='1124' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='PyThreadState_SetAsyncExc'>
+      <parameter type-id='type-id-19' name='id' filepath='Python/pystate.c' line='1124' column='1'/>
+      <parameter type-id='type-id-16' name='exc' filepath='Python/pystate.c' line='1124' column='1'/>
       <return type-id='type-id-9'/>
     </function-decl>
-    <function-decl name='PyThreadState_GetID' mangled-name='PyThreadState_GetID' filepath='Python/pystate.c' line='1105' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='PyThreadState_GetID'>
-      <parameter type-id='type-id-331' name='tstate' filepath='Python/pystate.c' line='1105' column='1'/>
+    <function-decl name='PyThreadState_GetID' mangled-name='PyThreadState_GetID' filepath='Python/pystate.c' line='1108' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='PyThreadState_GetID'>
+      <parameter type-id='type-id-331' name='tstate' filepath='Python/pystate.c' line='1108' column='1'/>
       <return type-id='type-id-22'/>
     </function-decl>
-    <function-decl name='PyThreadState_GetFrame' mangled-name='PyThreadState_GetFrame' filepath='Python/pystate.c' line='1095' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='PyThreadState_GetFrame'>
-      <parameter type-id='type-id-331' name='tstate' filepath='Python/pystate.c' line='1095' column='1'/>
+    <function-decl name='PyThreadState_GetFrame' mangled-name='PyThreadState_GetFrame' filepath='Python/pystate.c' line='1098' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='PyThreadState_GetFrame'>
+      <parameter type-id='type-id-331' name='tstate' filepath='Python/pystate.c' line='1098' column='1'/>
       <return type-id='type-id-13'/>
     </function-decl>
-    <function-decl name='PyThreadState_GetInterpreter' mangled-name='PyThreadState_GetInterpreter' filepath='Python/pystate.c' line='1087' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='PyThreadState_GetInterpreter'>
-      <parameter type-id='type-id-331' name='tstate' filepath='Python/pystate.c' line='1087' column='1'/>
+    <function-decl name='PyThreadState_GetInterpreter' mangled-name='PyThreadState_GetInterpreter' filepath='Python/pystate.c' line='1090' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='PyThreadState_GetInterpreter'>
+      <parameter type-id='type-id-331' name='tstate' filepath='Python/pystate.c' line='1090' column='1'/>
       <return type-id='type-id-222'/>
     </function-decl>
-    <function-decl name='PyThreadState_GetDict' mangled-name='PyThreadState_GetDict' filepath='Python/pystate.c' line='1076' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='PyThreadState_GetDict'>
+    <function-decl name='PyThreadState_GetDict' mangled-name='PyThreadState_GetDict' filepath='Python/pystate.c' line='1079' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='PyThreadState_GetDict'>
       <return type-id='type-id-16'/>
     </function-decl>
-    <function-decl name='_PyThreadState_GetDict' mangled-name='_PyThreadState_GetDict' filepath='Python/pystate.c' line='1062' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='_PyThreadState_GetDict'>
-      <parameter type-id='type-id-331' name='tstate' filepath='Python/pystate.c' line='1062' column='1'/>
+    <function-decl name='_PyThreadState_GetDict' mangled-name='_PyThreadState_GetDict' filepath='Python/pystate.c' line='1065' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='_PyThreadState_GetDict'>
+      <parameter type-id='type-id-331' name='tstate' filepath='Python/pystate.c' line='1065' column='1'/>
       <return type-id='type-id-16'/>
     </function-decl>
-    <function-decl name='PyThreadState_Swap' mangled-name='PyThreadState_Swap' filepath='Python/pystate.c' line='1050' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='PyThreadState_Swap'>
-      <parameter type-id='type-id-331' name='newts' filepath='Python/pystate.c' line='1050' column='1'/>
+    <function-decl name='PyThreadState_Swap' mangled-name='PyThreadState_Swap' filepath='Python/pystate.c' line='1053' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='PyThreadState_Swap'>
+      <parameter type-id='type-id-331' name='newts' filepath='Python/pystate.c' line='1053' column='1'/>
       <return type-id='type-id-331'/>
     </function-decl>
     <pointer-type-def type-id='type-id-256' size-in-bits='64' id='type-id-798'/>
-    <function-decl name='_PyThreadState_Swap' mangled-name='_PyThreadState_Swap' filepath='Python/pystate.c' line='1018' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='_PyThreadState_Swap'>
-      <parameter type-id='type-id-798' name='gilstate' filepath='Python/pystate.c' line='1018' column='1'/>
-      <parameter type-id='type-id-331' name='newts' filepath='Python/pystate.c' line='1018' column='1'/>
+    <function-decl name='_PyThreadState_Swap' mangled-name='_PyThreadState_Swap' filepath='Python/pystate.c' line='1021' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='_PyThreadState_Swap'>
+      <parameter type-id='type-id-798' name='gilstate' filepath='Python/pystate.c' line='1021' column='1'/>
+      <parameter type-id='type-id-331' name='newts' filepath='Python/pystate.c' line='1021' column='1'/>
       <return type-id='type-id-331'/>
     </function-decl>
-    <function-decl name='PyThreadState_Get' mangled-name='PyThreadState_Get' filepath='Python/pystate.c' line='1009' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='PyThreadState_Get'>
+    <function-decl name='PyThreadState_Get' mangled-name='PyThreadState_Get' filepath='Python/pystate.c' line='1012' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='PyThreadState_Get'>
       <return type-id='type-id-331'/>
     </function-decl>
-    <function-decl name='_PyThreadState_UncheckedGet' mangled-name='_PyThreadState_UncheckedGet' filepath='Python/pystate.c' line='1002' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='_PyThreadState_UncheckedGet'>
+    <function-decl name='_PyThreadState_UncheckedGet' mangled-name='_PyThreadState_UncheckedGet' filepath='Python/pystate.c' line='1005' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='_PyThreadState_UncheckedGet'>
       <return type-id='type-id-331'/>
     </function-decl>
     <typedef-decl name='_PyRuntimeState' type-id='type-id-250' filepath='./Include/internal/pycore_runtime.h' line='121' column='1' id='type-id-799'/>
     <pointer-type-def type-id='type-id-799' size-in-bits='64' id='type-id-800'/>
-    <function-decl name='_PyThreadState_DeleteExcept' mangled-name='_PyThreadState_DeleteExcept' filepath='Python/pystate.c' line='959' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='_PyThreadState_DeleteExcept'>
-      <parameter type-id='type-id-800' name='runtime' filepath='Python/pystate.c' line='959' column='1'/>
-      <parameter type-id='type-id-331' name='tstate' filepath='Python/pystate.c' line='959' column='1'/>
+    <function-decl name='_PyThreadState_DeleteExcept' mangled-name='_PyThreadState_DeleteExcept' filepath='Python/pystate.c' line='962' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='_PyThreadState_DeleteExcept'>
+      <parameter type-id='type-id-800' name='runtime' filepath='Python/pystate.c' line='962' column='1'/>
+      <parameter type-id='type-id-331' name='tstate' filepath='Python/pystate.c' line='962' column='1'/>
       <return type-id='type-id-4'/>
     </function-decl>
-    <function-decl name='PyThreadState_DeleteCurrent' mangled-name='PyThreadState_DeleteCurrent' filepath='Python/pystate.c' line='943' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='PyThreadState_DeleteCurrent'>
+    <function-decl name='PyThreadState_DeleteCurrent' mangled-name='PyThreadState_DeleteCurrent' filepath='Python/pystate.c' line='946' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='PyThreadState_DeleteCurrent'>
       <return type-id='type-id-4'/>
     </function-decl>
-    <function-decl name='_PyThreadState_DeleteCurrent' mangled-name='_PyThreadState_DeleteCurrent' filepath='Python/pystate.c' line='932' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='_PyThreadState_DeleteCurrent'>
-      <parameter type-id='type-id-331' name='tstate' filepath='Python/pystate.c' line='932' column='1'/>
+    <function-decl name='_PyThreadState_DeleteCurrent' mangled-name='_PyThreadState_DeleteCurrent' filepath='Python/pystate.c' line='935' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='_PyThreadState_DeleteCurrent'>
+      <parameter type-id='type-id-331' name='tstate' filepath='Python/pystate.c' line='935' column='1'/>
       <return type-id='type-id-4'/>
     </function-decl>
-    <function-decl name='PyThreadState_Delete' mangled-name='PyThreadState_Delete' filepath='Python/pystate.c' line='925' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='PyThreadState_Delete'>
-      <parameter type-id='type-id-331' name='tstate' filepath='Python/pystate.c' line='925' column='1'/>
+    <function-decl name='PyThreadState_Delete' mangled-name='PyThreadState_Delete' filepath='Python/pystate.c' line='928' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='PyThreadState_Delete'>
+      <parameter type-id='type-id-331' name='tstate' filepath='Python/pystate.c' line='928' column='1'/>
       <return type-id='type-id-4'/>
     </function-decl>
-    <function-decl name='PyThreadState_Clear' mangled-name='PyThreadState_Clear' filepath='Python/pystate.c' line='827' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='PyThreadState_Clear'>
-      <parameter type-id='type-id-331' name='tstate' filepath='Python/pystate.c' line='827' column='1'/>
+    <function-decl name='PyThreadState_Clear' mangled-name='PyThreadState_Clear' filepath='Python/pystate.c' line='830' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='PyThreadState_Clear'>
+      <parameter type-id='type-id-331' name='tstate' filepath='Python/pystate.c' line='830' column='1'/>
       <return type-id='type-id-4'/>
     </function-decl>
-    <function-decl name='PyState_RemoveModule' mangled-name='PyState_RemoveModule' filepath='Python/pystate.c' line='770' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='PyState_RemoveModule'>
-      <parameter type-id='type-id-505' name='def' filepath='Python/pystate.c' line='770' column='1'/>
+    <function-decl name='PyState_RemoveModule' mangled-name='PyState_RemoveModule' filepath='Python/pystate.c' line='773' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='PyState_RemoveModule'>
+      <parameter type-id='type-id-505' name='def' filepath='Python/pystate.c' line='773' column='1'/>
       <return type-id='type-id-9'/>
     </function-decl>
-    <function-decl name='PyState_AddModule' mangled-name='PyState_AddModule' filepath='Python/pystate.c' line='749' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='PyState_AddModule'>
-      <parameter type-id='type-id-16' name='module' filepath='Python/pystate.c' line='749' column='1'/>
-      <parameter type-id='type-id-505' name='def' filepath='Python/pystate.c' line='749' column='1'/>
+    <function-decl name='PyState_AddModule' mangled-name='PyState_AddModule' filepath='Python/pystate.c' line='752' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='PyState_AddModule'>
+      <parameter type-id='type-id-16' name='module' filepath='Python/pystate.c' line='752' column='1'/>
+      <parameter type-id='type-id-505' name='def' filepath='Python/pystate.c' line='752' column='1'/>
       <return type-id='type-id-9'/>
     </function-decl>
-    <function-decl name='PyState_FindModule' mangled-name='PyState_FindModule' filepath='Python/pystate.c' line='697' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='PyState_FindModule'>
-      <parameter type-id='type-id-505' name='module' filepath='Python/pystate.c' line='697' column='1'/>
+    <function-decl name='PyState_FindModule' mangled-name='PyState_FindModule' filepath='Python/pystate.c' line='700' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='PyState_FindModule'>
+      <parameter type-id='type-id-505' name='module' filepath='Python/pystate.c' line='700' column='1'/>
       <return type-id='type-id-16'/>
     </function-decl>
-    <function-decl name='_PyThreadState_Init' mangled-name='_PyThreadState_Init' filepath='Python/pystate.c' line='691' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='_PyThreadState_Init'>
-      <parameter type-id='type-id-331' name='tstate' filepath='Python/pystate.c' line='925' column='1'/>
+    <function-decl name='_PyThreadState_Init' mangled-name='_PyThreadState_Init' filepath='Python/pystate.c' line='694' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='_PyThreadState_Init'>
+      <parameter type-id='type-id-331' name='tstate' filepath='Python/pystate.c' line='928' column='1'/>
       <return type-id='type-id-4'/>
     </function-decl>
-    <function-decl name='_PyThreadState_Prealloc' mangled-name='_PyThreadState_Prealloc' filepath='Python/pystate.c' line='685' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='_PyThreadState_Prealloc'>
-      <parameter type-id='type-id-222' name='interp' filepath='Python/pystate.c' line='685' column='1'/>
+    <function-decl name='_PyThreadState_Prealloc' mangled-name='_PyThreadState_Prealloc' filepath='Python/pystate.c' line='688' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='_PyThreadState_Prealloc'>
+      <parameter type-id='type-id-222' name='interp' filepath='Python/pystate.c' line='688' column='1'/>
       <return type-id='type-id-331'/>
     </function-decl>
-    <function-decl name='PyThreadState_New' mangled-name='PyThreadState_New' filepath='Python/pystate.c' line='679' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='PyThreadState_New'>
-      <parameter type-id='type-id-222' name='interp' filepath='Python/pystate.c' line='685' column='1'/>
+    <function-decl name='PyThreadState_New' mangled-name='PyThreadState_New' filepath='Python/pystate.c' line='682' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='PyThreadState_New'>
+      <parameter type-id='type-id-222' name='interp' filepath='Python/pystate.c' line='688' column='1'/>
       <return type-id='type-id-331'/>
     </function-decl>
-    <function-decl name='PyInterpreterState_GetDict' mangled-name='PyInterpreterState_GetDict' filepath='Python/pystate.c' line='598' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='PyInterpreterState_GetDict'>
-      <parameter type-id='type-id-222' name='interp' filepath='Python/pystate.c' line='598' column='1'/>
+    <function-decl name='PyInterpreterState_GetDict' mangled-name='PyInterpreterState_GetDict' filepath='Python/pystate.c' line='601' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='PyInterpreterState_GetDict'>
+      <parameter type-id='type-id-222' name='interp' filepath='Python/pystate.c' line='601' column='1'/>
       <return type-id='type-id-16'/>
     </function-decl>
-    <function-decl name='_PyInterpreterState_GetMainModule' mangled-name='_PyInterpreterState_GetMainModule' filepath='Python/pystate.c' line='588' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='_PyInterpreterState_GetMainModule'>
-      <parameter type-id='type-id-222' name='interp' filepath='Python/pystate.c' line='598' column='1'/>
+    <function-decl name='_PyInterpreterState_GetMainModule' mangled-name='_PyInterpreterState_GetMainModule' filepath='Python/pystate.c' line='591' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='_PyInterpreterState_GetMainModule'>
+      <parameter type-id='type-id-222' name='interp' filepath='Python/pystate.c' line='601' column='1'/>
       <return type-id='type-id-16'/>
     </function-decl>
-    <function-decl name='_PyInterpreterState_RequireIDRef' mangled-name='_PyInterpreterState_RequireIDRef' filepath='Python/pystate.c' line='582' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='_PyInterpreterState_RequireIDRef'>
-      <parameter type-id='type-id-222' name='interp' filepath='Python/pystate.c' line='582' column='1'/>
-      <parameter type-id='type-id-9' name='required' filepath='Python/pystate.c' line='582' column='1'/>
+    <function-decl name='_PyInterpreterState_RequireIDRef' mangled-name='_PyInterpreterState_RequireIDRef' filepath='Python/pystate.c' line='585' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='_PyInterpreterState_RequireIDRef'>
+      <parameter type-id='type-id-222' name='interp' filepath='Python/pystate.c' line='585' column='1'/>
+      <parameter type-id='type-id-9' name='required' filepath='Python/pystate.c' line='585' column='1'/>
       <return type-id='type-id-4'/>
     </function-decl>
-    <function-decl name='_PyInterpreterState_RequiresIDRef' mangled-name='_PyInterpreterState_RequiresIDRef' filepath='Python/pystate.c' line='576' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='_PyInterpreterState_RequiresIDRef'>
+    <function-decl name='_PyInterpreterState_RequiresIDRef' mangled-name='_PyInterpreterState_RequiresIDRef' filepath='Python/pystate.c' line='579' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='_PyInterpreterState_RequiresIDRef'>
       <parameter type-id='type-id-222' name='interp' filepath='Python/import.c' line='285' column='1'/>
       <return type-id='type-id-9'/>
     </function-decl>
-    <function-decl name='_PyInterpreterState_IDDecref' mangled-name='_PyInterpreterState_IDDecref' filepath='Python/pystate.c' line='554' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='_PyInterpreterState_IDDecref'>
-      <parameter type-id='type-id-222' name='interp' filepath='Python/pystate.c' line='554' column='1'/>
+    <function-decl name='_PyInterpreterState_IDDecref' mangled-name='_PyInterpreterState_IDDecref' filepath='Python/pystate.c' line='557' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='_PyInterpreterState_IDDecref'>
+      <parameter type-id='type-id-222' name='interp' filepath='Python/pystate.c' line='557' column='1'/>
       <return type-id='type-id-4'/>
     </function-decl>
-    <function-decl name='_PyInterpreterState_IDIncref' mangled-name='_PyInterpreterState_IDIncref' filepath='Python/pystate.c' line='540' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='_PyInterpreterState_IDIncref'>
-      <parameter type-id='type-id-222' name='interp' filepath='Python/pystate.c' line='540' column='1'/>
+    <function-decl name='_PyInterpreterState_IDIncref' mangled-name='_PyInterpreterState_IDIncref' filepath='Python/pystate.c' line='543' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='_PyInterpreterState_IDIncref'>
+      <parameter type-id='type-id-222' name='interp' filepath='Python/pystate.c' line='543' column='1'/>
       <return type-id='type-id-9'/>
     </function-decl>
-    <function-decl name='_PyInterpreterState_LookUpID' mangled-name='_PyInterpreterState_LookUpID' filepath='Python/pystate.c' line='505' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='_PyInterpreterState_LookUpID'>
-      <parameter type-id='type-id-227' name='requested_id' filepath='Python/pystate.c' line='505' column='1'/>
+    <function-decl name='_PyInterpreterState_LookUpID' mangled-name='_PyInterpreterState_LookUpID' filepath='Python/pystate.c' line='508' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='_PyInterpreterState_LookUpID'>
+      <parameter type-id='type-id-227' name='requested_id' filepath='Python/pystate.c' line='508' column='1'/>
       <return type-id='type-id-222'/>
     </function-decl>
-    <function-decl name='PyInterpreterState_Delete' mangled-name='PyInterpreterState_Delete' filepath='Python/pystate.c' line='375' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='PyInterpreterState_Delete'>
-      <parameter type-id='type-id-222' name='interp' filepath='Python/pystate.c' line='375' column='1'/>
+    <function-decl name='PyInterpreterState_Delete' mangled-name='PyInterpreterState_Delete' filepath='Python/pystate.c' line='378' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='PyInterpreterState_Delete'>
+      <parameter type-id='type-id-222' name='interp' filepath='Python/pystate.c' line='378' column='1'/>
       <return type-id='type-id-4'/>
     </function-decl>
-    <function-decl name='PyInterpreterState_Clear' mangled-name='PyInterpreterState_Clear' filepath='Python/pystate.c' line='344' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='PyInterpreterState_Clear'>
-      <parameter type-id='type-id-222' name='interp' filepath='Python/pystate.c' line='344' column='1'/>
+    <function-decl name='PyInterpreterState_Clear' mangled-name='PyInterpreterState_Clear' filepath='Python/pystate.c' line='347' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='PyInterpreterState_Clear'>
+      <parameter type-id='type-id-222' name='interp' filepath='Python/pystate.c' line='347' column='1'/>
       <return type-id='type-id-4'/>
     </function-decl>
-    <function-decl name='PyInterpreterState_New' mangled-name='PyInterpreterState_New' filepath='Python/pystate.c' line='204' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='PyInterpreterState_New'>
+    <function-decl name='PyInterpreterState_New' mangled-name='PyInterpreterState_New' filepath='Python/pystate.c' line='207' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='PyInterpreterState_New'>
       <return type-id='type-id-222'/>
     </function-decl>
-    <function-decl name='_PyInterpreterState_Enable' mangled-name='_PyInterpreterState_Enable' filepath='Python/pystate.c' line='178' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='_PyInterpreterState_Enable'>
-      <parameter type-id='type-id-800' name='runtime' filepath='Python/pystate.c' line='178' column='1'/>
+    <function-decl name='_PyInterpreterState_Enable' mangled-name='_PyInterpreterState_Enable' filepath='Python/pystate.c' line='181' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='_PyInterpreterState_Enable'>
+      <parameter type-id='type-id-800' name='runtime' filepath='Python/pystate.c' line='181' column='1'/>
       <return type-id='type-id-743'/>
     </function-decl>
     <function-decl name='_PyRuntimeState_Fini' mangled-name='_PyRuntimeState_Fini' filepath='Python/pystate.c' line='116' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='_PyRuntimeState_Fini'>
       <parameter type-id='type-id-800' name='runtime' filepath='Python/pystate.c' line='102' column='1'/>
       <return type-id='type-id-743'/>
     </function-decl>
-    <function-decl name='PyInterpreterState_Get' mangled-name='PyInterpreterState_Get' filepath='Python/pystate.c' line='464' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='PyInterpreterState_Get'>
+    <function-decl name='PyInterpreterState_Get' mangled-name='PyInterpreterState_Get' filepath='Python/pystate.c' line='467' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='PyInterpreterState_Get'>
       <return type-id='type-id-222'/>
     </function-decl>
-    <function-decl name='PyInterpreterState_GetID' mangled-name='PyInterpreterState_GetID' filepath='Python/pystate.c' line='477' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='PyInterpreterState_GetID'>
-      <parameter type-id='type-id-222' name='interp' filepath='Python/pystate.c' line='477' column='1'/>
+    <function-decl name='PyInterpreterState_GetID' mangled-name='PyInterpreterState_GetID' filepath='Python/pystate.c' line='480' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='PyInterpreterState_GetID'>
+      <parameter type-id='type-id-222' name='interp' filepath='Python/pystate.c' line='480' column='1'/>
       <return type-id='type-id-227'/>
     </function-decl>
-    <function-decl name='_PyInterpreterState_IDInitref' mangled-name='_PyInterpreterState_IDInitref' filepath='Python/pystate.c' line='523' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='_PyInterpreterState_IDInitref'>
-      <parameter type-id='type-id-222' name='interp' filepath='Python/pystate.c' line='523' column='1'/>
+    <function-decl name='_PyInterpreterState_IDInitref' mangled-name='_PyInterpreterState_IDInitref' filepath='Python/pystate.c' line='526' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='_PyInterpreterState_IDInitref'>
+      <parameter type-id='type-id-222' name='interp' filepath='Python/pystate.c' line='526' column='1'/>
       <return type-id='type-id-9'/>
     </function-decl>
-    <function-decl name='_PyState_AddModule' mangled-name='_PyState_AddModule' filepath='Python/pystate.c' line='716' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='_PyState_AddModule'>
-      <parameter type-id='type-id-331' name='tstate' filepath='Python/pystate.c' line='716' column='1'/>
-      <parameter type-id='type-id-16' name='module' filepath='Python/pystate.c' line='716' column='1'/>
-      <parameter type-id='type-id-505' name='def' filepath='Python/pystate.c' line='716' column='1'/>
+    <function-decl name='_PyState_AddModule' mangled-name='_PyState_AddModule' filepath='Python/pystate.c' line='719' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='_PyState_AddModule'>
+      <parameter type-id='type-id-331' name='tstate' filepath='Python/pystate.c' line='719' column='1'/>
+      <parameter type-id='type-id-16' name='module' filepath='Python/pystate.c' line='719' column='1'/>
+      <parameter type-id='type-id-505' name='def' filepath='Python/pystate.c' line='719' column='1'/>
       <return type-id='type-id-9'/>
     </function-decl>
     <function-decl name='PyThread_tss_get' mangled-name='PyThread_tss_get' filepath='./Include/pythread.h' line='162' column='1' visibility='default' binding='global' size-in-bits='64'>
     <function-decl name='_PyEval_InitRuntimeState' mangled-name='_PyEval_InitRuntimeState' filepath='./Include/internal/pycore_ceval.h' line='18' column='1' visibility='default' binding='global' size-in-bits='64'>
       <return type-id='type-id-4'/>
     </function-decl>
-    <function-decl name='PyPreConfig_InitPythonConfig' mangled-name='PyPreConfig_InitPythonConfig' filepath='./Include/cpython/initconfig.h' line='124' column='1' visibility='default' binding='global' size-in-bits='64'>
+    <function-decl name='PyPreConfig_InitPythonConfig' mangled-name='PyPreConfig_InitPythonConfig' filepath='./Include/cpython/initconfig.h' line='127' column='1' visibility='default' binding='global' size-in-bits='64'>
       <return type-id='type-id-4'/>
     </function-decl>
   </abi-instr>
     </function-decl>
   </abi-instr>
   <abi-instr version='1.0' address-size='64' path='Python/symtable.c' comp-dir-path='/src' language='LANG_C99'>
-    <var-decl name='PySTEntry_Type' type-id='type-id-149' visibility='default' filepath='./Include/internal/pycore_symtable.h' line='71' column='1'/>
-    <class-decl name='_symtable_entry' size-in-bits='896' is-struct='yes' visibility='default' filepath='./Include/internal/pycore_symtable.h' line='37' column='1' id='type-id-820'>
+    <var-decl name='PySTEntry_Type' type-id='type-id-149' visibility='default' filepath='./Include/internal/pycore_symtable.h' line='78' column='1'/>
+    <class-decl name='_symtable_entry' size-in-bits='960' is-struct='yes' visibility='default' filepath='./Include/internal/pycore_symtable.h' line='44' column='1' id='type-id-820'>
       <data-member access='public' layout-offset-in-bits='0'>
-        <var-decl name='ob_base' type-id='type-id-69' visibility='default' filepath='./Include/internal/pycore_symtable.h' line='38' column='1'/>
+        <var-decl name='ob_base' type-id='type-id-69' visibility='default' filepath='./Include/internal/pycore_symtable.h' line='45' column='1'/>
       </data-member>
       <data-member access='public' layout-offset-in-bits='128'>
-        <var-decl name='ste_id' type-id='type-id-16' visibility='default' filepath='./Include/internal/pycore_symtable.h' line='39' column='1'/>
+        <var-decl name='ste_id' type-id='type-id-16' visibility='default' filepath='./Include/internal/pycore_symtable.h' line='46' column='1'/>
       </data-member>
       <data-member access='public' layout-offset-in-bits='192'>
-        <var-decl name='ste_symbols' type-id='type-id-16' visibility='default' filepath='./Include/internal/pycore_symtable.h' line='40' column='1'/>
+        <var-decl name='ste_symbols' type-id='type-id-16' visibility='default' filepath='./Include/internal/pycore_symtable.h' line='47' column='1'/>
       </data-member>
       <data-member access='public' layout-offset-in-bits='256'>
-        <var-decl name='ste_name' type-id='type-id-16' visibility='default' filepath='./Include/internal/pycore_symtable.h' line='41' column='1'/>
+        <var-decl name='ste_name' type-id='type-id-16' visibility='default' filepath='./Include/internal/pycore_symtable.h' line='48' column='1'/>
       </data-member>
       <data-member access='public' layout-offset-in-bits='320'>
-        <var-decl name='ste_varnames' type-id='type-id-16' visibility='default' filepath='./Include/internal/pycore_symtable.h' line='42' column='1'/>
+        <var-decl name='ste_varnames' type-id='type-id-16' visibility='default' filepath='./Include/internal/pycore_symtable.h' line='49' column='1'/>
       </data-member>
       <data-member access='public' layout-offset-in-bits='384'>
-        <var-decl name='ste_children' type-id='type-id-16' visibility='default' filepath='./Include/internal/pycore_symtable.h' line='43' column='1'/>
+        <var-decl name='ste_children' type-id='type-id-16' visibility='default' filepath='./Include/internal/pycore_symtable.h' line='50' column='1'/>
       </data-member>
       <data-member access='public' layout-offset-in-bits='448'>
-        <var-decl name='ste_directives' type-id='type-id-16' visibility='default' filepath='./Include/internal/pycore_symtable.h' line='44' column='1'/>
+        <var-decl name='ste_directives' type-id='type-id-16' visibility='default' filepath='./Include/internal/pycore_symtable.h' line='51' column='1'/>
       </data-member>
       <data-member access='public' layout-offset-in-bits='512'>
-        <var-decl name='ste_type' type-id='type-id-821' visibility='default' filepath='./Include/internal/pycore_symtable.h' line='45' column='1'/>
+        <var-decl name='ste_type' type-id='type-id-821' visibility='default' filepath='./Include/internal/pycore_symtable.h' line='52' column='1'/>
       </data-member>
       <data-member access='public' layout-offset-in-bits='544'>
-        <var-decl name='ste_nested' type-id='type-id-9' visibility='default' filepath='./Include/internal/pycore_symtable.h' line='46' column='1'/>
+        <var-decl name='ste_nested' type-id='type-id-9' visibility='default' filepath='./Include/internal/pycore_symtable.h' line='53' column='1'/>
       </data-member>
       <data-member access='public' layout-offset-in-bits='31'>
-        <var-decl name='ste_free' type-id='type-id-66' visibility='default' filepath='./Include/internal/pycore_symtable.h' line='47' column='1'/>
+        <var-decl name='ste_free' type-id='type-id-66' visibility='default' filepath='./Include/internal/pycore_symtable.h' line='54' column='1'/>
       </data-member>
       <data-member access='public' layout-offset-in-bits='30'>
-        <var-decl name='ste_child_free' type-id='type-id-66' visibility='default' filepath='./Include/internal/pycore_symtable.h' line='48' column='1'/>
+        <var-decl name='ste_child_free' type-id='type-id-66' visibility='default' filepath='./Include/internal/pycore_symtable.h' line='55' column='1'/>
       </data-member>
       <data-member access='public' layout-offset-in-bits='29'>
-        <var-decl name='ste_generator' type-id='type-id-66' visibility='default' filepath='./Include/internal/pycore_symtable.h' line='50' column='1'/>
+        <var-decl name='ste_generator' type-id='type-id-66' visibility='default' filepath='./Include/internal/pycore_symtable.h' line='57' column='1'/>
       </data-member>
       <data-member access='public' layout-offset-in-bits='28'>
-        <var-decl name='ste_coroutine' type-id='type-id-66' visibility='default' filepath='./Include/internal/pycore_symtable.h' line='51' column='1'/>
+        <var-decl name='ste_coroutine' type-id='type-id-66' visibility='default' filepath='./Include/internal/pycore_symtable.h' line='58' column='1'/>
       </data-member>
-      <data-member access='public' layout-offset-in-bits='27'>
-        <var-decl name='ste_comprehension' type-id='type-id-66' visibility='default' filepath='./Include/internal/pycore_symtable.h' line='52' column='1'/>
-      </data-member>
-      <data-member access='public' layout-offset-in-bits='26'>
-        <var-decl name='ste_varargs' type-id='type-id-66' visibility='default' filepath='./Include/internal/pycore_symtable.h' line='53' column='1'/>
-      </data-member>
-      <data-member access='public' layout-offset-in-bits='25'>
-        <var-decl name='ste_varkeywords' type-id='type-id-66' visibility='default' filepath='./Include/internal/pycore_symtable.h' line='54' column='1'/>
+      <data-member access='public' layout-offset-in-bits='608'>
+        <var-decl name='ste_comprehension' type-id='type-id-822' visibility='default' filepath='./Include/internal/pycore_symtable.h' line='59' column='1'/>
       </data-member>
-      <data-member access='public' layout-offset-in-bits='24'>
-        <var-decl name='ste_returns_value' type-id='type-id-66' visibility='default' filepath='./Include/internal/pycore_symtable.h' line='55' column='1'/>
+      <data-member access='public' layout-offset-in-bits='31'>
+        <var-decl name='ste_varargs' type-id='type-id-66' visibility='default' filepath='./Include/internal/pycore_symtable.h' line='60' column='1'/>
       </data-member>
-      <data-member access='public' layout-offset-in-bits='23'>
-        <var-decl name='ste_needs_class_closure' type-id='type-id-66' visibility='default' filepath='./Include/internal/pycore_symtable.h' line='57' column='1'/>
+      <data-member access='public' layout-offset-in-bits='30'>
+        <var-decl name='ste_varkeywords' type-id='type-id-66' visibility='default' filepath='./Include/internal/pycore_symtable.h' line='61' column='1'/>
       </data-member>
-      <data-member access='public' layout-offset-in-bits='22'>
-        <var-decl name='ste_comp_iter_target' type-id='type-id-66' visibility='default' filepath='./Include/internal/pycore_symtable.h' line='60' column='1'/>
+      <data-member access='public' layout-offset-in-bits='29'>
+        <var-decl name='ste_returns_value' type-id='type-id-66' visibility='default' filepath='./Include/internal/pycore_symtable.h' line='62' column='1'/>
       </data-member>
-      <data-member access='public' layout-offset-in-bits='608'>
-        <var-decl name='ste_comp_iter_expr' type-id='type-id-9' visibility='default' filepath='./Include/internal/pycore_symtable.h' line='61' column='1'/>
+      <data-member access='public' layout-offset-in-bits='28'>
+        <var-decl name='ste_needs_class_closure' type-id='type-id-66' visibility='default' filepath='./Include/internal/pycore_symtable.h' line='64' column='1'/>
       </data-member>
-      <data-member access='public' layout-offset-in-bits='640'>
-        <var-decl name='ste_lineno' type-id='type-id-9' visibility='default' filepath='./Include/internal/pycore_symtable.h' line='62' column='1'/>
+      <data-member access='public' layout-offset-in-bits='27'>
+        <var-decl name='ste_comp_iter_target' type-id='type-id-66' visibility='default' filepath='./Include/internal/pycore_symtable.h' line='67' column='1'/>
       </data-member>
       <data-member access='public' layout-offset-in-bits='672'>
-        <var-decl name='ste_col_offset' type-id='type-id-9' visibility='default' filepath='./Include/internal/pycore_symtable.h' line='63' column='1'/>
+        <var-decl name='ste_comp_iter_expr' type-id='type-id-9' visibility='default' filepath='./Include/internal/pycore_symtable.h' line='68' column='1'/>
       </data-member>
       <data-member access='public' layout-offset-in-bits='704'>
-        <var-decl name='ste_end_lineno' type-id='type-id-9' visibility='default' filepath='./Include/internal/pycore_symtable.h' line='64' column='1'/>
+        <var-decl name='ste_lineno' type-id='type-id-9' visibility='default' filepath='./Include/internal/pycore_symtable.h' line='69' column='1'/>
       </data-member>
       <data-member access='public' layout-offset-in-bits='736'>
-        <var-decl name='ste_end_col_offset' type-id='type-id-9' visibility='default' filepath='./Include/internal/pycore_symtable.h' line='65' column='1'/>
+        <var-decl name='ste_col_offset' type-id='type-id-9' visibility='default' filepath='./Include/internal/pycore_symtable.h' line='70' column='1'/>
       </data-member>
       <data-member access='public' layout-offset-in-bits='768'>
-        <var-decl name='ste_opt_lineno' type-id='type-id-9' visibility='default' filepath='./Include/internal/pycore_symtable.h' line='66' column='1'/>
+        <var-decl name='ste_end_lineno' type-id='type-id-9' visibility='default' filepath='./Include/internal/pycore_symtable.h' line='71' column='1'/>
       </data-member>
       <data-member access='public' layout-offset-in-bits='800'>
-        <var-decl name='ste_opt_col_offset' type-id='type-id-9' visibility='default' filepath='./Include/internal/pycore_symtable.h' line='67' column='1'/>
+        <var-decl name='ste_end_col_offset' type-id='type-id-9' visibility='default' filepath='./Include/internal/pycore_symtable.h' line='72' column='1'/>
       </data-member>
       <data-member access='public' layout-offset-in-bits='832'>
-        <var-decl name='ste_table' type-id='type-id-822' visibility='default' filepath='./Include/internal/pycore_symtable.h' line='68' column='1'/>
+        <var-decl name='ste_opt_lineno' type-id='type-id-9' visibility='default' filepath='./Include/internal/pycore_symtable.h' line='73' column='1'/>
+      </data-member>
+      <data-member access='public' layout-offset-in-bits='864'>
+        <var-decl name='ste_opt_col_offset' type-id='type-id-9' visibility='default' filepath='./Include/internal/pycore_symtable.h' line='74' column='1'/>
+      </data-member>
+      <data-member access='public' layout-offset-in-bits='896'>
+        <var-decl name='ste_table' type-id='type-id-823' visibility='default' filepath='./Include/internal/pycore_symtable.h' line='75' column='1'/>
       </data-member>
     </class-decl>
-    <enum-decl name='_block_type' filepath='./Include/internal/pycore_symtable.h' line='13' column='1' id='type-id-823'>
+    <enum-decl name='_block_type' filepath='./Include/internal/pycore_symtable.h' line='13' column='1' id='type-id-824'>
       <underlying-type type-id='type-id-83'/>
       <enumerator name='FunctionBlock' value='0'/>
       <enumerator name='ClassBlock' value='1'/>
       <enumerator name='ModuleBlock' value='2'/>
       <enumerator name='AnnotationBlock' value='3'/>
     </enum-decl>
-    <typedef-decl name='_Py_block_ty' type-id='type-id-823' filepath='./Include/internal/pycore_symtable.h' line='14' column='1' id='type-id-821'/>
-    <class-decl name='symtable' size-in-bits='640' is-struct='yes' visibility='default' filepath='./Include/internal/pycore_symtable.h' line='18' column='1' id='type-id-824'>
+    <typedef-decl name='_Py_block_ty' type-id='type-id-824' filepath='./Include/internal/pycore_symtable.h' line='14' column='1' id='type-id-821'/>
+    <enum-decl name='_comprehension_type' filepath='./Include/internal/pycore_symtable.h' line='16' column='1' id='type-id-825'>
+      <underlying-type type-id='type-id-83'/>
+      <enumerator name='NoComprehension' value='0'/>
+      <enumerator name='ListComprehension' value='1'/>
+      <enumerator name='DictComprehension' value='2'/>
+      <enumerator name='SetComprehension' value='3'/>
+      <enumerator name='GeneratorExpression' value='4'/>
+    </enum-decl>
+    <typedef-decl name='_Py_comprehension_ty' type-id='type-id-825' filepath='./Include/internal/pycore_symtable.h' line='21' column='1' id='type-id-822'/>
+    <class-decl name='symtable' size-in-bits='640' is-struct='yes' visibility='default' filepath='./Include/internal/pycore_symtable.h' line='25' column='1' id='type-id-826'>
       <data-member access='public' layout-offset-in-bits='0'>
-        <var-decl name='st_filename' type-id='type-id-16' visibility='default' filepath='./Include/internal/pycore_symtable.h' line='19' column='1'/>
+        <var-decl name='st_filename' type-id='type-id-16' visibility='default' filepath='./Include/internal/pycore_symtable.h' line='26' column='1'/>
       </data-member>
       <data-member access='public' layout-offset-in-bits='64'>
-        <var-decl name='st_cur' type-id='type-id-825' visibility='default' filepath='./Include/internal/pycore_symtable.h' line='21' column='1'/>
+        <var-decl name='st_cur' type-id='type-id-827' visibility='default' filepath='./Include/internal/pycore_symtable.h' line='28' column='1'/>
       </data-member>
       <data-member access='public' layout-offset-in-bits='128'>
-        <var-decl name='st_top' type-id='type-id-825' visibility='default' filepath='./Include/internal/pycore_symtable.h' line='22' column='1'/>
+        <var-decl name='st_top' type-id='type-id-827' visibility='default' filepath='./Include/internal/pycore_symtable.h' line='29' column='1'/>
       </data-member>
       <data-member access='public' layout-offset-in-bits='192'>
-        <var-decl name='st_blocks' type-id='type-id-16' visibility='default' filepath='./Include/internal/pycore_symtable.h' line='23' column='1'/>
+        <var-decl name='st_blocks' type-id='type-id-16' visibility='default' filepath='./Include/internal/pycore_symtable.h' line='30' column='1'/>
       </data-member>
       <data-member access='public' layout-offset-in-bits='256'>
-        <var-decl name='st_stack' type-id='type-id-16' visibility='default' filepath='./Include/internal/pycore_symtable.h' line='25' column='1'/>
+        <var-decl name='st_stack' type-id='type-id-16' visibility='default' filepath='./Include/internal/pycore_symtable.h' line='32' column='1'/>
       </data-member>
       <data-member access='public' layout-offset-in-bits='320'>
-        <var-decl name='st_global' type-id='type-id-16' visibility='default' filepath='./Include/internal/pycore_symtable.h' line='26' column='1'/>
+        <var-decl name='st_global' type-id='type-id-16' visibility='default' filepath='./Include/internal/pycore_symtable.h' line='33' column='1'/>
       </data-member>
       <data-member access='public' layout-offset-in-bits='384'>
-        <var-decl name='st_nblocks' type-id='type-id-9' visibility='default' filepath='./Include/internal/pycore_symtable.h' line='27' column='1'/>
+        <var-decl name='st_nblocks' type-id='type-id-9' visibility='default' filepath='./Include/internal/pycore_symtable.h' line='34' column='1'/>
       </data-member>
       <data-member access='public' layout-offset-in-bits='448'>
-        <var-decl name='st_private' type-id='type-id-16' visibility='default' filepath='./Include/internal/pycore_symtable.h' line='30' column='1'/>
+        <var-decl name='st_private' type-id='type-id-16' visibility='default' filepath='./Include/internal/pycore_symtable.h' line='37' column='1'/>
       </data-member>
       <data-member access='public' layout-offset-in-bits='512'>
-        <var-decl name='st_future' type-id='type-id-826' visibility='default' filepath='./Include/internal/pycore_symtable.h' line='31' column='1'/>
+        <var-decl name='st_future' type-id='type-id-828' visibility='default' filepath='./Include/internal/pycore_symtable.h' line='38' column='1'/>
       </data-member>
       <data-member access='public' layout-offset-in-bits='576'>
-        <var-decl name='recursion_depth' type-id='type-id-9' visibility='default' filepath='./Include/internal/pycore_symtable.h' line='33' column='1'/>
+        <var-decl name='recursion_depth' type-id='type-id-9' visibility='default' filepath='./Include/internal/pycore_symtable.h' line='40' column='1'/>
       </data-member>
       <data-member access='public' layout-offset-in-bits='608'>
-        <var-decl name='recursion_limit' type-id='type-id-9' visibility='default' filepath='./Include/internal/pycore_symtable.h' line='34' column='1'/>
+        <var-decl name='recursion_limit' type-id='type-id-9' visibility='default' filepath='./Include/internal/pycore_symtable.h' line='41' column='1'/>
       </data-member>
     </class-decl>
-    <pointer-type-def type-id='type-id-820' size-in-bits='64' id='type-id-825'/>
-    <class-decl name='__anonymous_struct__' size-in-bits='64' is-struct='yes' is-anonymous='yes' naming-typedef-id='type-id-827' visibility='default' filepath='./Include/cpython/compile.h' line='34' column='1' id='type-id-828'>
+    <pointer-type-def type-id='type-id-820' size-in-bits='64' id='type-id-827'/>
+    <class-decl name='__anonymous_struct__' size-in-bits='64' is-struct='yes' is-anonymous='yes' naming-typedef-id='type-id-829' visibility='default' filepath='./Include/cpython/compile.h' line='34' column='1' id='type-id-830'>
       <data-member access='public' layout-offset-in-bits='0'>
         <var-decl name='ff_features' type-id='type-id-9' visibility='default' filepath='./Include/cpython/compile.h' line='35' column='1'/>
       </data-member>
         <var-decl name='ff_lineno' type-id='type-id-9' visibility='default' filepath='./Include/cpython/compile.h' line='36' column='1'/>
       </data-member>
     </class-decl>
-    <typedef-decl name='PyFutureFeatures' type-id='type-id-828' filepath='./Include/cpython/compile.h' line='37' column='1' id='type-id-827'/>
-    <pointer-type-def type-id='type-id-827' size-in-bits='64' id='type-id-826'/>
-    <pointer-type-def type-id='type-id-824' size-in-bits='64' id='type-id-822'/>
-    <typedef-decl name='PySTEntryObject' type-id='type-id-820' filepath='./Include/internal/pycore_symtable.h' line='69' column='1' id='type-id-829'/>
-    <pointer-type-def type-id='type-id-829' size-in-bits='64' id='type-id-830'/>
-    <function-decl name='PySymtable_Lookup' mangled-name='PySymtable_Lookup' filepath='Python/symtable.c' line='373' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='PySymtable_Lookup'>
-      <parameter type-id='type-id-822' name='st' filepath='Python/symtable.c' line='373' column='1'/>
-      <parameter type-id='type-id-21' name='key' filepath='Python/symtable.c' line='373' column='1'/>
-      <return type-id='type-id-830'/>
+    <typedef-decl name='PyFutureFeatures' type-id='type-id-830' filepath='./Include/cpython/compile.h' line='37' column='1' id='type-id-829'/>
+    <pointer-type-def type-id='type-id-829' size-in-bits='64' id='type-id-828'/>
+    <pointer-type-def type-id='type-id-826' size-in-bits='64' id='type-id-823'/>
+    <typedef-decl name='PySTEntryObject' type-id='type-id-820' filepath='./Include/internal/pycore_symtable.h' line='76' column='1' id='type-id-831'/>
+    <pointer-type-def type-id='type-id-831' size-in-bits='64' id='type-id-832'/>
+    <function-decl name='PySymtable_Lookup' mangled-name='PySymtable_Lookup' filepath='Python/symtable.c' line='380' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='PySymtable_Lookup'>
+      <parameter type-id='type-id-823' name='st' filepath='Python/symtable.c' line='380' column='1'/>
+      <parameter type-id='type-id-21' name='key' filepath='Python/symtable.c' line='380' column='1'/>
+      <return type-id='type-id-832'/>
     </function-decl>
     <function-decl name='PyErr_RangedSyntaxLocationObject' mangled-name='PyErr_RangedSyntaxLocationObject' filepath='./Include/cpython/pyerrors.h' line='153' column='1' visibility='default' binding='global' size-in-bits='64'>
       <return type-id='type-id-4'/>
     <function-decl name='_PyEval_CallTracing' mangled-name='_PyEval_CallTracing' filepath='./Include/eval.h' line='21' column='1' visibility='default' binding='global' size-in-bits='64'>
       <return type-id='type-id-4'/>
     </function-decl>
-    <function-decl name='_PyThread_CurrentExceptions' mangled-name='_PyThread_CurrentExceptions' filepath='./Include/cpython/pystate.h' line='192' column='1' visibility='default' binding='global' size-in-bits='64'>
+    <function-decl name='_PyThread_CurrentExceptions' mangled-name='_PyThread_CurrentExceptions' filepath='./Include/cpython/pystate.h' line='190' column='1' visibility='default' binding='global' size-in-bits='64'>
       <return type-id='type-id-4'/>
     </function-decl>
-    <function-decl name='_PyThread_CurrentFrames' mangled-name='_PyThread_CurrentFrames' filepath='./Include/cpython/pystate.h' line='187' column='1' visibility='default' binding='global' size-in-bits='64'>
+    <function-decl name='_PyThread_CurrentFrames' mangled-name='_PyThread_CurrentFrames' filepath='./Include/cpython/pystate.h' line='185' column='1' visibility='default' binding='global' size-in-bits='64'>
       <return type-id='type-id-4'/>
     </function-decl>
     <function-decl name='_Py_GetAllocatedBlocks' mangled-name='_Py_GetAllocatedBlocks' filepath='./Include/cpython/objimpl.h' line='56' column='1' visibility='default' binding='global' size-in-bits='64'>
     <function-decl name='PyThread_GetInfo' mangled-name='PyThread_GetInfo' filepath='Python/thread.c' line='186' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='PyThread_GetInfo'>
       <return type-id='type-id-16'/>
     </function-decl>
-    <pointer-type-def type-id='type-id-301' size-in-bits='64' id='type-id-831'/>
+    <pointer-type-def type-id='type-id-301' size-in-bits='64' id='type-id-833'/>
     <function-decl name='PyThread_tss_is_created' mangled-name='PyThread_tss_is_created' filepath='Python/thread.c' line='157' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='PyThread_tss_is_created'>
-      <parameter type-id='type-id-831' name='key' filepath='Python/thread.c' line='157' column='1'/>
+      <parameter type-id='type-id-833' name='key' filepath='Python/thread.c' line='157' column='1'/>
       <return type-id='type-id-9'/>
     </function-decl>
     <function-decl name='PyThread_tss_free' mangled-name='PyThread_tss_free' filepath='Python/thread.c' line='148' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='PyThread_tss_free'>
-      <parameter type-id='type-id-831' name='key' filepath='Python/thread.c' line='148' column='1'/>
+      <parameter type-id='type-id-833' name='key' filepath='Python/thread.c' line='148' column='1'/>
       <return type-id='type-id-4'/>
     </function-decl>
     <function-decl name='PyThread_tss_alloc' mangled-name='PyThread_tss_alloc' filepath='Python/thread.c' line='137' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='PyThread_tss_alloc'>
-      <return type-id='type-id-831'/>
+      <return type-id='type-id-833'/>
     </function-decl>
     <function-decl name='PyThread_set_stacksize' mangled-name='PyThread_set_stacksize' filepath='Python/thread.c' line='121' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='PyThread_set_stacksize'>
       <parameter type-id='type-id-157' name='size' filepath='Python/thread.c' line='121' column='1'/>
       <return type-id='type-id-157'/>
     </function-decl>
     <function-decl name='PyThread_tss_get' mangled-name='PyThread_tss_get' filepath='Python/thread_pthread.h' line='925' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='PyThread_tss_get'>
-      <parameter type-id='type-id-831' name='key' filepath='Python/thread_pthread.h' line='925' column='1'/>
+      <parameter type-id='type-id-833' name='key' filepath='Python/thread_pthread.h' line='925' column='1'/>
       <return type-id='type-id-21'/>
     </function-decl>
     <function-decl name='PyThread_tss_set' mangled-name='PyThread_tss_set' filepath='Python/thread_pthread.h' line='917' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='PyThread_tss_set'>
-      <parameter type-id='type-id-831' name='key' filepath='Python/thread_pthread.h' line='917' column='1'/>
+      <parameter type-id='type-id-833' name='key' filepath='Python/thread_pthread.h' line='917' column='1'/>
       <parameter type-id='type-id-21' name='value' filepath='Python/thread_pthread.h' line='917' column='1'/>
       <return type-id='type-id-9'/>
     </function-decl>
     <function-decl name='PyThread_tss_create' mangled-name='PyThread_tss_create' filepath='Python/thread_pthread.h' line='886' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='PyThread_tss_create'>
-      <parameter type-id='type-id-831' name='key' filepath='Python/thread_pthread.h' line='886' column='1'/>
+      <parameter type-id='type-id-833' name='key' filepath='Python/thread_pthread.h' line='886' column='1'/>
       <return type-id='type-id-9'/>
     </function-decl>
     <function-decl name='PyThread_ReInitTLS' mangled-name='PyThread_ReInitTLS' filepath='Python/thread_pthread.h' line='875' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='PyThread_ReInitTLS'>
       <parameter type-id='type-id-9' name='waitflag' filepath='Python/thread_pthread.h' line='750' column='1'/>
       <return type-id='type-id-9'/>
     </function-decl>
-    <pointer-type-def type-id='type-id-228' size-in-bits='64' id='type-id-832'/>
+    <pointer-type-def type-id='type-id-228' size-in-bits='64' id='type-id-834'/>
     <function-decl name='_PyThread_at_fork_reinit' mangled-name='_PyThread_at_fork_reinit' filepath='Python/thread_pthread.h' line='730' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='_PyThread_at_fork_reinit'>
-      <parameter type-id='type-id-832' name='lock' filepath='Python/thread_pthread.h' line='730' column='1'/>
+      <parameter type-id='type-id-834' name='lock' filepath='Python/thread_pthread.h' line='730' column='1'/>
       <return type-id='type-id-9'/>
     </function-decl>
     <function-decl name='PyThread_release_lock' mangled-name='PyThread_release_lock' filepath='Python/thread_pthread.h' line='556' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='PyThread_release_lock'>
       <parameter type-id='type-id-228' name='lock' filepath='Python/thread_pthread.h' line='556' column='1'/>
       <return type-id='type-id-4'/>
     </function-decl>
-    <enum-decl name='PyLockStatus' filepath='./Include/pythread.h' line='13' column='1' id='type-id-833'>
+    <enum-decl name='PyLockStatus' filepath='./Include/pythread.h' line='13' column='1' id='type-id-835'>
       <underlying-type type-id='type-id-83'/>
       <enumerator name='PY_LOCK_FAILURE' value='0'/>
       <enumerator name='PY_LOCK_ACQUIRED' value='1'/>
       <enumerator name='PY_LOCK_INTR' value='2'/>
     </enum-decl>
-    <typedef-decl name='PyLockStatus' type-id='type-id-833' filepath='./Include/pythread.h' line='17' column='1' id='type-id-834'/>
+    <typedef-decl name='PyLockStatus' type-id='type-id-835' filepath='./Include/pythread.h' line='17' column='1' id='type-id-836'/>
     <function-decl name='PyThread_acquire_lock_timed' mangled-name='PyThread_acquire_lock_timed' filepath='Python/thread_pthread.h' line='439' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='PyThread_acquire_lock_timed'>
       <parameter type-id='type-id-228' name='lock' filepath='Python/thread_pthread.h' line='439' column='1'/>
       <parameter type-id='type-id-286' name='microseconds' filepath='Python/thread_pthread.h' line='439' column='1'/>
       <parameter type-id='type-id-9' name='intr_flag' filepath='Python/thread_pthread.h' line='440' column='1'/>
-      <return type-id='type-id-834'/>
+      <return type-id='type-id-836'/>
     </function-decl>
     <function-decl name='PyThread_free_lock' mangled-name='PyThread_free_lock' filepath='Python/thread_pthread.h' line='409' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='PyThread_free_lock'>
       <parameter type-id='type-id-228' name='lock' filepath='Python/thread_pthread.h' line='409' column='1'/>
       <return type-id='type-id-19'/>
     </function-decl>
     <function-decl name='PyThread_tss_delete' mangled-name='PyThread_tss_delete' filepath='Python/thread_pthread.h' line='903' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='PyThread_tss_delete'>
-      <parameter type-id='type-id-831' name='key' filepath='Python/thread_pthread.h' line='903' column='1'/>
+      <parameter type-id='type-id-833' name='key' filepath='Python/thread_pthread.h' line='903' column='1'/>
       <return type-id='type-id-4'/>
     </function-decl>
     <function-decl name='__confstr_alias' mangled-name='confstr' filepath='/usr/include/x86_64-linux-gnu/bits/unistd.h' line='231' column='1' visibility='default' binding='global' size-in-bits='64'>
       <parameter type-id='type-id-9' name='indent' filepath='Python/traceback.c' line='373' column='1'/>
       <return type-id='type-id-9'/>
     </function-decl>
-    <function-decl name='PyInterpreterState_ThreadHead' mangled-name='PyInterpreterState_ThreadHead' filepath='./Include/cpython/pystate.h' line='199' column='1' visibility='default' binding='global' size-in-bits='64'>
+    <function-decl name='PyInterpreterState_ThreadHead' mangled-name='PyInterpreterState_ThreadHead' filepath='./Include/cpython/pystate.h' line='197' column='1' visibility='default' binding='global' size-in-bits='64'>
       <return type-id='type-id-4'/>
     </function-decl>
-    <function-decl name='PyThreadState_Next' mangled-name='PyThreadState_Next' filepath='./Include/cpython/pystate.h' line='200' column='1' visibility='default' binding='global' size-in-bits='64'>
+    <function-decl name='PyThreadState_Next' mangled-name='PyThreadState_Next' filepath='./Include/cpython/pystate.h' line='198' column='1' visibility='default' binding='global' size-in-bits='64'>
       <return type-id='type-id-4'/>
     </function-decl>
-    <function-decl name='_PyGILState_GetInterpreterStateUnsafe' mangled-name='_PyGILState_GetInterpreterStateUnsafe' filepath='./Include/cpython/pystate.h' line='182' column='1' visibility='default' binding='global' size-in-bits='64'>
+    <function-decl name='_PyGILState_GetInterpreterStateUnsafe' mangled-name='_PyGILState_GetInterpreterStateUnsafe' filepath='./Include/cpython/pystate.h' line='180' column='1' visibility='default' binding='global' size-in-bits='64'>
       <return type-id='type-id-4'/>
     </function-decl>
     <function-decl name='PyCode_NewEmpty' mangled-name='PyCode_NewEmpty' filepath='./Include/cpython/code.h' line='130' column='1' visibility='default' binding='global' size-in-bits='64'>
       <parameter type-id='type-id-452' name='type' filepath='Python/pystrtod.c' line='1247' column='1'/>
       <return type-id='type-id-72'/>
     </function-decl>
-    <pointer-type-def type-id='type-id-835' size-in-bits='64' id='type-id-836'/>
+    <pointer-type-def type-id='type-id-837' size-in-bits='64' id='type-id-838'/>
     <function-decl name='_Py_string_to_number_with_underscores' mangled-name='_Py_string_to_number_with_underscores' filepath='Python/pystrtod.c' line='384' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='_Py_string_to_number_with_underscores'>
       <parameter type-id='type-id-3' name='s' filepath='Python/pystrtod.c' line='385' column='1'/>
       <parameter type-id='type-id-31' name='orig_len' filepath='Python/pystrtod.c' line='385' column='1'/>
       <parameter type-id='type-id-3' name='what' filepath='Python/pystrtod.c' line='385' column='1'/>
       <parameter type-id='type-id-16' name='obj' filepath='Python/pystrtod.c' line='385' column='1'/>
       <parameter type-id='type-id-21' name='arg' filepath='Python/pystrtod.c' line='385' column='1'/>
-      <parameter type-id='type-id-836' name='innerfunc' filepath='Python/pystrtod.c' line='386' column='1'/>
+      <parameter type-id='type-id-838' name='innerfunc' filepath='Python/pystrtod.c' line='386' column='1'/>
       <return type-id='type-id-16'/>
     </function-decl>
     <function-decl name='PyOS_string_to_double' mangled-name='PyOS_string_to_double' filepath='Python/pystrtod.c' line='338' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='PyOS_string_to_double'>
       <parameter type-id='type-id-215' name='endptr' filepath='Python/pystrtod.c' line='29' column='1'/>
       <return type-id='type-id-371'/>
     </function-decl>
-    <function-type size-in-bits='64' id='type-id-835'>
+    <function-type size-in-bits='64' id='type-id-837'>
       <parameter type-id='type-id-3'/>
       <parameter type-id='type-id-31'/>
       <parameter type-id='type-id-21'/>
     </function-type>
   </abi-instr>
   <abi-instr version='1.0' address-size='64' path='Python/pystrhex.c' comp-dir-path='/src' language='LANG_C99'>
-    <qualified-type-def type-id='type-id-69' const='yes' id='type-id-837'/>
-    <pointer-type-def type-id='type-id-837' size-in-bits='64' id='type-id-838'/>
+    <qualified-type-def type-id='type-id-69' const='yes' id='type-id-839'/>
+    <pointer-type-def type-id='type-id-839' size-in-bits='64' id='type-id-840'/>
     <function-decl name='_Py_strhex_bytes_with_sep' mangled-name='_Py_strhex_bytes_with_sep' filepath='Python/pystrhex.c' line='169' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='_Py_strhex_bytes_with_sep'>
       <parameter type-id='type-id-3' name='argbuf' filepath='Python/pystrhex.c' line='169' column='1'/>
       <parameter type-id='type-id-193' name='arglen' filepath='Python/pystrhex.c' line='169' column='1'/>
-      <parameter type-id='type-id-838' name='sep' filepath='Python/pystrhex.c' line='169' column='1'/>
+      <parameter type-id='type-id-840' name='sep' filepath='Python/pystrhex.c' line='169' column='1'/>
       <parameter type-id='type-id-784' name='bytes_per_group' filepath='Python/pystrhex.c' line='169' column='1'/>
       <return type-id='type-id-16'/>
     </function-decl>
     <function-decl name='_Py_strhex_with_sep' mangled-name='_Py_strhex_with_sep' filepath='Python/pystrhex.c' line='162' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='_Py_strhex_with_sep'>
       <parameter type-id='type-id-3' name='argbuf' filepath='Python/pystrhex.c' line='169' column='1'/>
       <parameter type-id='type-id-193' name='arglen' filepath='Python/pystrhex.c' line='169' column='1'/>
-      <parameter type-id='type-id-838' name='sep' filepath='Python/pystrhex.c' line='169' column='1'/>
+      <parameter type-id='type-id-840' name='sep' filepath='Python/pystrhex.c' line='169' column='1'/>
       <parameter type-id='type-id-784' name='bytes_per_group' filepath='Python/pystrhex.c' line='169' column='1'/>
       <return type-id='type-id-16'/>
     </function-decl>
       <parameter type-id='type-id-9' name='last' filepath='Python/fileutils.c' line='2393' column='1'/>
       <return type-id='type-id-4'/>
     </function-decl>
-    <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-839'>
+    <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-841'>
       <data-member access='public' layout-offset-in-bits='0'>
         <var-decl name='decimal_point' type-id='type-id-72' visibility='default' filepath='/usr/include/locale.h' line='55' column='1'/>
       </data-member>
         <var-decl name='int_n_sign_posn' type-id='type-id-1' visibility='default' filepath='/usr/include/locale.h' line='109' column='1'/>
       </data-member>
     </class-decl>
-    <pointer-type-def type-id='type-id-839' size-in-bits='64' id='type-id-840'/>
+    <pointer-type-def type-id='type-id-841' size-in-bits='64' id='type-id-842'/>
     <function-decl name='_Py_GetLocaleconvNumeric' mangled-name='_Py_GetLocaleconvNumeric' filepath='Python/fileutils.c' line='2277' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='_Py_GetLocaleconvNumeric'>
-      <parameter type-id='type-id-840' name='lc' filepath='Python/fileutils.c' line='2277' column='1'/>
+      <parameter type-id='type-id-842' name='lc' filepath='Python/fileutils.c' line='2277' column='1'/>
       <parameter type-id='type-id-86' name='decimal_point' filepath='Python/fileutils.c' line='2278' column='1'/>
       <parameter type-id='type-id-86' name='thousands_sep' filepath='Python/fileutils.c' line='2278' column='1'/>
       <return type-id='type-id-9'/>
       <parameter type-id='type-id-9' name='fd' filepath='Python/fileutils.c' line='1297' column='1'/>
       <return type-id='type-id-9'/>
     </function-decl>
-    <class-decl name='stat' size-in-bits='1152' is-struct='yes' visibility='default' filepath='/usr/include/x86_64-linux-gnu/bits/stat.h' line='46' column='1' id='type-id-841'>
+    <class-decl name='stat' size-in-bits='1152' is-struct='yes' visibility='default' filepath='/usr/include/x86_64-linux-gnu/bits/stat.h' line='46' column='1' id='type-id-843'>
       <data-member access='public' layout-offset-in-bits='0'>
-        <var-decl name='st_dev' type-id='type-id-842' visibility='default' filepath='/usr/include/x86_64-linux-gnu/bits/stat.h' line='48' column='1'/>
+        <var-decl name='st_dev' type-id='type-id-844' visibility='default' filepath='/usr/include/x86_64-linux-gnu/bits/stat.h' line='48' column='1'/>
       </data-member>
       <data-member access='public' layout-offset-in-bits='64'>
-        <var-decl name='st_ino' type-id='type-id-843' visibility='default' filepath='/usr/include/x86_64-linux-gnu/bits/stat.h' line='53' column='1'/>
+        <var-decl name='st_ino' type-id='type-id-845' visibility='default' filepath='/usr/include/x86_64-linux-gnu/bits/stat.h' line='53' column='1'/>
       </data-member>
       <data-member access='public' layout-offset-in-bits='128'>
-        <var-decl name='st_nlink' type-id='type-id-844' visibility='default' filepath='/usr/include/x86_64-linux-gnu/bits/stat.h' line='61' column='1'/>
+        <var-decl name='st_nlink' type-id='type-id-846' visibility='default' filepath='/usr/include/x86_64-linux-gnu/bits/stat.h' line='61' column='1'/>
       </data-member>
       <data-member access='public' layout-offset-in-bits='192'>
-        <var-decl name='st_mode' type-id='type-id-845' visibility='default' filepath='/usr/include/x86_64-linux-gnu/bits/stat.h' line='62' column='1'/>
+        <var-decl name='st_mode' type-id='type-id-847' visibility='default' filepath='/usr/include/x86_64-linux-gnu/bits/stat.h' line='62' column='1'/>
       </data-member>
       <data-member access='public' layout-offset-in-bits='224'>
-        <var-decl name='st_uid' type-id='type-id-846' visibility='default' filepath='/usr/include/x86_64-linux-gnu/bits/stat.h' line='64' column='1'/>
+        <var-decl name='st_uid' type-id='type-id-848' visibility='default' filepath='/usr/include/x86_64-linux-gnu/bits/stat.h' line='64' column='1'/>
       </data-member>
       <data-member access='public' layout-offset-in-bits='256'>
-        <var-decl name='st_gid' type-id='type-id-847' visibility='default' filepath='/usr/include/x86_64-linux-gnu/bits/stat.h' line='65' column='1'/>
+        <var-decl name='st_gid' type-id='type-id-849' visibility='default' filepath='/usr/include/x86_64-linux-gnu/bits/stat.h' line='65' column='1'/>
       </data-member>
       <data-member access='public' layout-offset-in-bits='288'>
         <var-decl name='__pad0' type-id='type-id-9' visibility='default' filepath='/usr/include/x86_64-linux-gnu/bits/stat.h' line='67' column='1'/>
       </data-member>
       <data-member access='public' layout-offset-in-bits='320'>
-        <var-decl name='st_rdev' type-id='type-id-842' visibility='default' filepath='/usr/include/x86_64-linux-gnu/bits/stat.h' line='69' column='1'/>
+        <var-decl name='st_rdev' type-id='type-id-844' visibility='default' filepath='/usr/include/x86_64-linux-gnu/bits/stat.h' line='69' column='1'/>
       </data-member>
       <data-member access='public' layout-offset-in-bits='384'>
         <var-decl name='st_size' type-id='type-id-172' visibility='default' filepath='/usr/include/x86_64-linux-gnu/bits/stat.h' line='74' column='1'/>
       </data-member>
       <data-member access='public' layout-offset-in-bits='448'>
-        <var-decl name='st_blksize' type-id='type-id-848' visibility='default' filepath='/usr/include/x86_64-linux-gnu/bits/stat.h' line='78' column='1'/>
+        <var-decl name='st_blksize' type-id='type-id-850' visibility='default' filepath='/usr/include/x86_64-linux-gnu/bits/stat.h' line='78' column='1'/>
       </data-member>
       <data-member access='public' layout-offset-in-bits='512'>
-        <var-decl name='st_blocks' type-id='type-id-849' visibility='default' filepath='/usr/include/x86_64-linux-gnu/bits/stat.h' line='80' column='1'/>
+        <var-decl name='st_blocks' type-id='type-id-851' visibility='default' filepath='/usr/include/x86_64-linux-gnu/bits/stat.h' line='80' column='1'/>
       </data-member>
       <data-member access='public' layout-offset-in-bits='576'>
         <var-decl name='st_atim' type-id='type-id-810' visibility='default' filepath='/usr/include/x86_64-linux-gnu/bits/stat.h' line='91' column='1'/>
         <var-decl name='st_ctim' type-id='type-id-810' visibility='default' filepath='/usr/include/x86_64-linux-gnu/bits/stat.h' line='93' column='1'/>
       </data-member>
       <data-member access='public' layout-offset-in-bits='960'>
-        <var-decl name='__glibc_reserved' type-id='type-id-850' visibility='default' filepath='/usr/include/x86_64-linux-gnu/bits/stat.h' line='106' column='1'/>
+        <var-decl name='__glibc_reserved' type-id='type-id-852' visibility='default' filepath='/usr/include/x86_64-linux-gnu/bits/stat.h' line='106' column='1'/>
       </data-member>
     </class-decl>
-    <typedef-decl name='__dev_t' type-id='type-id-19' filepath='/usr/include/x86_64-linux-gnu/bits/types.h' line='145' column='1' id='type-id-842'/>
-    <typedef-decl name='__ino_t' type-id='type-id-19' filepath='/usr/include/x86_64-linux-gnu/bits/types.h' line='148' column='1' id='type-id-843'/>
-    <typedef-decl name='__nlink_t' type-id='type-id-19' filepath='/usr/include/x86_64-linux-gnu/bits/types.h' line='151' column='1' id='type-id-844'/>
-    <typedef-decl name='__mode_t' type-id='type-id-66' filepath='/usr/include/x86_64-linux-gnu/bits/types.h' line='150' column='1' id='type-id-845'/>
-    <typedef-decl name='__uid_t' type-id='type-id-66' filepath='/usr/include/x86_64-linux-gnu/bits/types.h' line='146' column='1' id='type-id-846'/>
-    <typedef-decl name='__gid_t' type-id='type-id-66' filepath='/usr/include/x86_64-linux-gnu/bits/types.h' line='147' column='1' id='type-id-847'/>
-    <typedef-decl name='__blksize_t' type-id='type-id-33' filepath='/usr/include/x86_64-linux-gnu/bits/types.h' line='174' column='1' id='type-id-848'/>
-    <typedef-decl name='__blkcnt_t' type-id='type-id-33' filepath='/usr/include/x86_64-linux-gnu/bits/types.h' line='179' column='1' id='type-id-849'/>
+    <typedef-decl name='__dev_t' type-id='type-id-19' filepath='/usr/include/x86_64-linux-gnu/bits/types.h' line='145' column='1' id='type-id-844'/>
+    <typedef-decl name='__ino_t' type-id='type-id-19' filepath='/usr/include/x86_64-linux-gnu/bits/types.h' line='148' column='1' id='type-id-845'/>
+    <typedef-decl name='__nlink_t' type-id='type-id-19' filepath='/usr/include/x86_64-linux-gnu/bits/types.h' line='151' column='1' id='type-id-846'/>
+    <typedef-decl name='__mode_t' type-id='type-id-66' filepath='/usr/include/x86_64-linux-gnu/bits/types.h' line='150' column='1' id='type-id-847'/>
+    <typedef-decl name='__uid_t' type-id='type-id-66' filepath='/usr/include/x86_64-linux-gnu/bits/types.h' line='146' column='1' id='type-id-848'/>
+    <typedef-decl name='__gid_t' type-id='type-id-66' filepath='/usr/include/x86_64-linux-gnu/bits/types.h' line='147' column='1' id='type-id-849'/>
+    <typedef-decl name='__blksize_t' type-id='type-id-33' filepath='/usr/include/x86_64-linux-gnu/bits/types.h' line='174' column='1' id='type-id-850'/>
+    <typedef-decl name='__blkcnt_t' type-id='type-id-33' filepath='/usr/include/x86_64-linux-gnu/bits/types.h' line='179' column='1' id='type-id-851'/>
 
-    <array-type-def dimensions='1' type-id='type-id-811' size-in-bits='192' id='type-id-850'>
+    <array-type-def dimensions='1' type-id='type-id-811' size-in-bits='192' id='type-id-852'>
       <subrange length='3' type-id='type-id-19' id='type-id-322'/>
 
     </array-type-def>
-    <pointer-type-def type-id='type-id-841' size-in-bits='64' id='type-id-851'/>
+    <pointer-type-def type-id='type-id-843' size-in-bits='64' id='type-id-853'/>
     <function-decl name='_Py_stat' mangled-name='_Py_stat' filepath='Python/fileutils.c' line='1215' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='_Py_stat'>
       <parameter type-id='type-id-16' name='path' filepath='Python/fileutils.c' line='1215' column='1'/>
-      <parameter type-id='type-id-851' name='statbuf' filepath='Python/fileutils.c' line='1215' column='1'/>
+      <parameter type-id='type-id-853' name='statbuf' filepath='Python/fileutils.c' line='1215' column='1'/>
       <return type-id='type-id-9'/>
     </function-decl>
     <function-decl name='_Py_fstat' mangled-name='_Py_fstat' filepath='Python/fileutils.c' line='1187' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='_Py_fstat'>
       <parameter type-id='type-id-9' name='fd' filepath='Python/fileutils.c' line='1187' column='1'/>
-      <parameter type-id='type-id-851' name='status' filepath='Python/fileutils.c' line='1187' column='1'/>
+      <parameter type-id='type-id-853' name='status' filepath='Python/fileutils.c' line='1187' column='1'/>
       <return type-id='type-id-9'/>
     </function-decl>
     <function-decl name='_Py_fstat_noraise' mangled-name='_Py_fstat_noraise' filepath='Python/fileutils.c' line='1120' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='_Py_fstat_noraise'>
       <parameter type-id='type-id-9' name='fd' filepath='Python/fileutils.c' line='1120' column='1'/>
-      <parameter type-id='type-id-851' name='status' filepath='Python/fileutils.c' line='1120' column='1'/>
+      <parameter type-id='type-id-853' name='status' filepath='Python/fileutils.c' line='1120' column='1'/>
       <return type-id='type-id-9'/>
     </function-decl>
     <function-decl name='_Py_GetLocaleEncodingObject' mangled-name='_Py_GetLocaleEncodingObject' filepath='Python/fileutils.c' line='924' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='_Py_GetLocaleEncodingObject'>
       <return type-id='type-id-16'/>
     </function-decl>
-    <pointer-type-def type-id='type-id-157' size-in-bits='64' id='type-id-852'/>
+    <pointer-type-def type-id='type-id-157' size-in-bits='64' id='type-id-854'/>
     <function-decl name='_Py_EncodeLocaleEx' mangled-name='_Py_EncodeLocaleEx' filepath='Python/fileutils.c' line='863' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='_Py_EncodeLocaleEx'>
       <parameter type-id='type-id-478' name='text' filepath='Python/fileutils.c' line='863' column='1'/>
       <parameter type-id='type-id-215' name='str' filepath='Python/fileutils.c' line='863' column='1'/>
-      <parameter type-id='type-id-852' name='error_pos' filepath='Python/fileutils.c' line='864' column='1'/>
+      <parameter type-id='type-id-854' name='error_pos' filepath='Python/fileutils.c' line='864' column='1'/>
       <parameter type-id='type-id-196' name='reason' filepath='Python/fileutils.c' line='864' column='1'/>
       <parameter type-id='type-id-9' name='current_locale' filepath='Python/fileutils.c' line='865' column='1'/>
       <parameter type-id='type-id-366' name='errors' filepath='Python/fileutils.c' line='865' column='1'/>
     </function-decl>
     <function-decl name='_Py_EncodeLocaleRaw' mangled-name='_Py_EncodeLocaleRaw' filepath='Python/fileutils.c' line='856' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='_Py_EncodeLocaleRaw'>
       <parameter type-id='type-id-478' name='text' filepath='Python/fileutils.c' line='856' column='1'/>
-      <parameter type-id='type-id-852' name='error_pos' filepath='Python/fileutils.c' line='856' column='1'/>
+      <parameter type-id='type-id-854' name='error_pos' filepath='Python/fileutils.c' line='856' column='1'/>
       <return type-id='type-id-72'/>
     </function-decl>
     <function-decl name='Py_EncodeLocale' mangled-name='Py_EncodeLocale' filepath='Python/fileutils.c' line='847' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='Py_EncodeLocale'>
       <parameter type-id='type-id-478' name='text' filepath='Python/fileutils.c' line='856' column='1'/>
-      <parameter type-id='type-id-852' name='error_pos' filepath='Python/fileutils.c' line='856' column='1'/>
+      <parameter type-id='type-id-854' name='error_pos' filepath='Python/fileutils.c' line='856' column='1'/>
       <return type-id='type-id-72'/>
     </function-decl>
     <function-decl name='Py_DecodeLocale' mangled-name='Py_DecodeLocale' filepath='Python/fileutils.c' line='645' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='Py_DecodeLocale'>
       <parameter type-id='type-id-3' name='arg' filepath='Python/fileutils.c' line='645' column='1'/>
-      <parameter type-id='type-id-852' name='wlen' filepath='Python/fileutils.c' line='645' column='1'/>
+      <parameter type-id='type-id-854' name='wlen' filepath='Python/fileutils.c' line='645' column='1'/>
       <return type-id='type-id-325'/>
     </function-decl>
     <function-decl name='_Py_DecodeLocaleEx' mangled-name='_Py_DecodeLocaleEx' filepath='Python/fileutils.c' line='583' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='_Py_DecodeLocaleEx'>
       <parameter type-id='type-id-3' name='arg' filepath='Python/fileutils.c' line='583' column='1'/>
       <parameter type-id='type-id-329' name='wstr' filepath='Python/fileutils.c' line='583' column='1'/>
-      <parameter type-id='type-id-852' name='wlen' filepath='Python/fileutils.c' line='583' column='1'/>
+      <parameter type-id='type-id-854' name='wlen' filepath='Python/fileutils.c' line='583' column='1'/>
       <parameter type-id='type-id-196' name='reason' filepath='Python/fileutils.c' line='584' column='1'/>
       <parameter type-id='type-id-9' name='current_locale' filepath='Python/fileutils.c' line='585' column='1'/>
       <parameter type-id='type-id-366' name='errors' filepath='Python/fileutils.c' line='585' column='1'/>
     </function-decl>
   </abi-instr>
   <abi-instr version='1.0' address-size='64' path='Python/suggestions.c' comp-dir-path='/src' language='LANG_C99'>
-    <function-decl name='_Py_UTF8_Edit_Cost' mangled-name='_Py_UTF8_Edit_Cost' filepath='Python/suggestions.c' line='264' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='_Py_UTF8_Edit_Cost'>
-      <parameter type-id='type-id-16' name='a' filepath='Python/suggestions.c' line='264' column='1'/>
-      <parameter type-id='type-id-16' name='b' filepath='Python/suggestions.c' line='264' column='1'/>
-      <parameter type-id='type-id-31' name='max_cost' filepath='Python/suggestions.c' line='264' column='1'/>
+    <function-decl name='_Py_UTF8_Edit_Cost' mangled-name='_Py_UTF8_Edit_Cost' filepath='Python/suggestions.c' line='272' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='_Py_UTF8_Edit_Cost'>
+      <parameter type-id='type-id-16' name='a' filepath='Python/suggestions.c' line='272' column='1'/>
+      <parameter type-id='type-id-16' name='b' filepath='Python/suggestions.c' line='272' column='1'/>
+      <parameter type-id='type-id-31' name='max_cost' filepath='Python/suggestions.c' line='272' column='1'/>
       <return type-id='type-id-31'/>
     </function-decl>
   </abi-instr>
   <abi-instr version='1.0' address-size='64' path='./Python/dynload_shlib.c' comp-dir-path='/src' language='LANG_C99'>
 
-    <array-type-def dimensions='1' type-id='type-id-3' size-in-bits='infinite' id='type-id-853'>
+    <array-type-def dimensions='1' type-id='type-id-3' size-in-bits='infinite' id='type-id-855'>
       <subrange length='infinite' id='type-id-7'/>
 
     </array-type-def>
-    <var-decl name='_PyImport_DynLoadFiletab' type-id='type-id-853' visibility='default' filepath='./Python/importdl.h' line='9' column='1'/>
+    <var-decl name='_PyImport_DynLoadFiletab' type-id='type-id-855' visibility='default' filepath='./Python/importdl.h' line='9' column='1'/>
     <function-decl name='dlsym' mangled-name='dlsym' filepath='/usr/include/dlfcn.h' line='64' column='1' visibility='default' binding='global' size-in-bits='64'>
       <return type-id='type-id-4'/>
     </function-decl>
     <function-decl name='_Py_PreInitializeFromPyArgv' mangled-name='_Py_PreInitializeFromPyArgv' filepath='./Include/internal/pycore_pylifecycle.h' line='118' column='1' visibility='default' binding='global' size-in-bits='64'>
       <return type-id='type-id-4'/>
     </function-decl>
-    <function-decl name='PyConfig_SetArgv' mangled-name='PyConfig_SetArgv' filepath='./Include/cpython/initconfig.h' line='227' column='1' visibility='default' binding='global' size-in-bits='64'>
+    <function-decl name='PyConfig_SetArgv' mangled-name='PyConfig_SetArgv' filepath='./Include/cpython/initconfig.h' line='230' column='1' visibility='default' binding='global' size-in-bits='64'>
       <return type-id='type-id-4'/>
     </function-decl>
-    <function-decl name='PyConfig_SetBytesArgv' mangled-name='PyConfig_SetBytesArgv' filepath='./Include/cpython/initconfig.h' line='223' column='1' visibility='default' binding='global' size-in-bits='64'>
+    <function-decl name='PyConfig_SetBytesArgv' mangled-name='PyConfig_SetBytesArgv' filepath='./Include/cpython/initconfig.h' line='226' column='1' visibility='default' binding='global' size-in-bits='64'>
       <return type-id='type-id-4'/>
     </function-decl>
   </abi-instr>
     </function-decl>
   </abi-instr>
   <abi-instr version='1.0' address-size='64' path='./Modules/posixmodule.c' comp-dir-path='/src' language='LANG_C99'>
-    <function-decl name='PyInit_posix' mangled-name='PyInit_posix' filepath='./Modules/posixmodule.c' line='15817' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='PyInit_posix'>
+    <function-decl name='PyInit_posix' mangled-name='PyInit_posix' filepath='./Modules/posixmodule.c' line='15825' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='PyInit_posix'>
       <return type-id='type-id-16'/>
     </function-decl>
     <function-decl name='_Py_Sigset_Converter' mangled-name='_Py_Sigset_Converter' filepath='./Modules/posixmodule.c' line='1501' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='_Py_Sigset_Converter'>
       <parameter type-id='type-id-21' name='addr' filepath='./Modules/posixmodule.c' line='1501' column='1'/>
       <return type-id='type-id-9'/>
     </function-decl>
-    <typedef-decl name='gid_t' type-id='type-id-847' filepath='/usr/include/x86_64-linux-gnu/sys/types.h' line='64' column='1' id='type-id-854'/>
-    <pointer-type-def type-id='type-id-854' size-in-bits='64' id='type-id-855'/>
+    <typedef-decl name='gid_t' type-id='type-id-849' filepath='/usr/include/x86_64-linux-gnu/sys/types.h' line='64' column='1' id='type-id-856'/>
+    <pointer-type-def type-id='type-id-856' size-in-bits='64' id='type-id-857'/>
     <function-decl name='_Py_Gid_Converter' mangled-name='_Py_Gid_Converter' filepath='./Modules/posixmodule.c' line='789' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='_Py_Gid_Converter'>
       <parameter type-id='type-id-16' name='obj' filepath='./Modules/posixmodule.c' line='789' column='1'/>
-      <parameter type-id='type-id-855' name='p' filepath='./Modules/posixmodule.c' line='789' column='1'/>
+      <parameter type-id='type-id-857' name='p' filepath='./Modules/posixmodule.c' line='789' column='1'/>
       <return type-id='type-id-9'/>
     </function-decl>
-    <typedef-decl name='uid_t' type-id='type-id-846' filepath='/usr/include/x86_64-linux-gnu/sys/types.h' line='79' column='1' id='type-id-856'/>
-    <pointer-type-def type-id='type-id-856' size-in-bits='64' id='type-id-857'/>
+    <typedef-decl name='uid_t' type-id='type-id-848' filepath='/usr/include/x86_64-linux-gnu/sys/types.h' line='79' column='1' id='type-id-858'/>
+    <pointer-type-def type-id='type-id-858' size-in-bits='64' id='type-id-859'/>
     <function-decl name='_Py_Uid_Converter' mangled-name='_Py_Uid_Converter' filepath='./Modules/posixmodule.c' line='683' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='_Py_Uid_Converter'>
       <parameter type-id='type-id-16' name='obj' filepath='./Modules/posixmodule.c' line='683' column='1'/>
-      <parameter type-id='type-id-857' name='p' filepath='./Modules/posixmodule.c' line='683' column='1'/>
+      <parameter type-id='type-id-859' name='p' filepath='./Modules/posixmodule.c' line='683' column='1'/>
       <return type-id='type-id-9'/>
     </function-decl>
     <function-decl name='PyOS_AfterFork' mangled-name='PyOS_AfterFork' filepath='./Modules/posixmodule.c' line='649' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='PyOS_AfterFork'>
       <return type-id='type-id-4'/>
     </function-decl>
     <function-decl name='_PyLong_FromUid' mangled-name='_PyLong_FromUid' filepath='./Modules/posixmodule.c' line='667' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='_PyLong_FromUid'>
-      <parameter type-id='type-id-856' name='uid' filepath='./Modules/posixmodule.c' line='667' column='1'/>
+      <parameter type-id='type-id-858' name='uid' filepath='./Modules/posixmodule.c' line='667' column='1'/>
       <return type-id='type-id-16'/>
     </function-decl>
     <function-decl name='_PyLong_FromGid' mangled-name='_PyLong_FromGid' filepath='./Modules/posixmodule.c' line='675' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='_PyLong_FromGid'>
-      <parameter type-id='type-id-854' name='gid' filepath='./Modules/posixmodule.c' line='675' column='1'/>
+      <parameter type-id='type-id-856' name='gid' filepath='./Modules/posixmodule.c' line='675' column='1'/>
       <return type-id='type-id-16'/>
     </function-decl>
-    <function-decl name='PyOS_FSPath' mangled-name='PyOS_FSPath' filepath='./Modules/posixmodule.c' line='14353' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='PyOS_FSPath'>
-      <parameter type-id='type-id-16' name='path' filepath='./Modules/posixmodule.c' line='14353' column='1'/>
+    <function-decl name='PyOS_FSPath' mangled-name='PyOS_FSPath' filepath='./Modules/posixmodule.c' line='14361' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='PyOS_FSPath'>
+      <parameter type-id='type-id-16' name='path' filepath='./Modules/posixmodule.c' line='14361' column='1'/>
       <return type-id='type-id-16'/>
     </function-decl>
     <function-decl name='qsort' mangled-name='qsort' filepath='/usr/include/stdlib.h' line='830' column='1' visibility='default' binding='global' size-in-bits='64'>
     </function-decl>
   </abi-instr>
   <abi-instr version='1.0' address-size='64' path='./Modules/atexitmodule.c' comp-dir-path='/src' language='LANG_C99'>
-    <function-decl name='PyInit_atexit' mangled-name='PyInit_atexit' filepath='./Modules/atexitmodule.c' line='284' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='PyInit_atexit'>
+    <function-decl name='PyInit_atexit' mangled-name='PyInit_atexit' filepath='./Modules/atexitmodule.c' line='287' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='PyInit_atexit'>
       <return type-id='type-id-16'/>
     </function-decl>
   </abi-instr>
   <abi-instr version='1.0' address-size='64' path='./Modules/signalmodule.c' comp-dir-path='/src' language='LANG_C99'>
-    <function-decl name='_PyOS_IsMainThread' mangled-name='_PyOS_IsMainThread' filepath='./Modules/signalmodule.c' line='2027' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='_PyOS_IsMainThread'>
+    <function-decl name='_PyOS_IsMainThread' mangled-name='_PyOS_IsMainThread' filepath='./Modules/signalmodule.c' line='2034' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='_PyOS_IsMainThread'>
       <return type-id='type-id-9'/>
     </function-decl>
-    <function-decl name='PyOS_InterruptOccurred' mangled-name='PyOS_InterruptOccurred' filepath='./Modules/signalmodule.c' line='1994' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='PyOS_InterruptOccurred'>
+    <function-decl name='PyOS_InterruptOccurred' mangled-name='PyOS_InterruptOccurred' filepath='./Modules/signalmodule.c' line='2001' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='PyOS_InterruptOccurred'>
       <return type-id='type-id-9'/>
     </function-decl>
-    <function-decl name='_Py_RestoreSignals' mangled-name='_Py_RestoreSignals' filepath='./Modules/signalmodule.c' line='1914' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='_Py_RestoreSignals'>
+    <function-decl name='_Py_RestoreSignals' mangled-name='_Py_RestoreSignals' filepath='./Modules/signalmodule.c' line='1921' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='_Py_RestoreSignals'>
       <return type-id='type-id-4'/>
     </function-decl>
-    <function-decl name='PyErr_SetInterrupt' mangled-name='PyErr_SetInterrupt' filepath='./Modules/signalmodule.c' line='1876' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='PyErr_SetInterrupt'>
+    <function-decl name='PyErr_SetInterrupt' mangled-name='PyErr_SetInterrupt' filepath='./Modules/signalmodule.c' line='1883' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='PyErr_SetInterrupt'>
       <return type-id='type-id-4'/>
     </function-decl>
-    <function-decl name='PyErr_SetInterruptEx' mangled-name='PyErr_SetInterruptEx' filepath='./Modules/signalmodule.c' line='1861' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='PyErr_SetInterruptEx'>
-      <parameter type-id='type-id-9' name='signum' filepath='./Modules/signalmodule.c' line='1861' column='1'/>
+    <function-decl name='PyErr_SetInterruptEx' mangled-name='PyErr_SetInterruptEx' filepath='./Modules/signalmodule.c' line='1868' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='PyErr_SetInterruptEx'>
+      <parameter type-id='type-id-9' name='signum' filepath='./Modules/signalmodule.c' line='1868' column='1'/>
       <return type-id='type-id-9'/>
     </function-decl>
-    <function-decl name='_PyErr_CheckSignals' mangled-name='_PyErr_CheckSignals' filepath='./Modules/signalmodule.c' line='1849' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='_PyErr_CheckSignals'>
+    <function-decl name='_PyErr_CheckSignals' mangled-name='_PyErr_CheckSignals' filepath='./Modules/signalmodule.c' line='1856' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='_PyErr_CheckSignals'>
       <return type-id='type-id-9'/>
     </function-decl>
-    <function-decl name='PyErr_CheckSignals' mangled-name='PyErr_CheckSignals' filepath='./Modules/signalmodule.c' line='1754' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='PyErr_CheckSignals'>
+    <function-decl name='PyErr_CheckSignals' mangled-name='PyErr_CheckSignals' filepath='./Modules/signalmodule.c' line='1761' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='PyErr_CheckSignals'>
       <return type-id='type-id-9'/>
     </function-decl>
-    <function-decl name='PyInit__signal' mangled-name='PyInit__signal' filepath='./Modules/signalmodule.c' line='1714' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='PyInit__signal'>
+    <function-decl name='PyInit__signal' mangled-name='PyInit__signal' filepath='./Modules/signalmodule.c' line='1721' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='PyInit__signal'>
       <return type-id='type-id-16'/>
     </function-decl>
-    <function-decl name='_PyErr_CheckSignalsTstate' mangled-name='_PyErr_CheckSignalsTstate' filepath='./Modules/signalmodule.c' line='1767' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='_PyErr_CheckSignalsTstate'>
-      <parameter type-id='type-id-703' name='tstate' filepath='./Modules/signalmodule.c' line='1767' column='1'/>
+    <function-decl name='_PyErr_CheckSignalsTstate' mangled-name='_PyErr_CheckSignalsTstate' filepath='./Modules/signalmodule.c' line='1774' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='_PyErr_CheckSignalsTstate'>
+      <parameter type-id='type-id-703' name='tstate' filepath='./Modules/signalmodule.c' line='1774' column='1'/>
       <return type-id='type-id-9'/>
     </function-decl>
-    <function-decl name='_PyOS_InterruptOccurred' mangled-name='_PyOS_InterruptOccurred' filepath='./Modules/signalmodule.c' line='1976' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='_PyOS_InterruptOccurred'>
-      <parameter type-id='type-id-703' name='tstate' filepath='./Modules/signalmodule.c' line='1976' column='1'/>
+    <function-decl name='_PyOS_InterruptOccurred' mangled-name='_PyOS_InterruptOccurred' filepath='./Modules/signalmodule.c' line='1983' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='_PyOS_InterruptOccurred'>
+      <parameter type-id='type-id-703' name='tstate' filepath='./Modules/signalmodule.c' line='1983' column='1'/>
       <return type-id='type-id-9'/>
     </function-decl>
     <function-decl name='_PyEval_AddPendingCall' mangled-name='_PyEval_AddPendingCall' filepath='./Include/internal/pycore_ceval.h' line='22' column='1' visibility='default' binding='global' size-in-bits='64'>
     <function-decl name='_PyTime_AsTimespec' mangled-name='_PyTime_AsTimespec' filepath='./Include/cpython/pytime.h' line='155' column='1' visibility='default' binding='global' size-in-bits='64'>
       <return type-id='type-id-4'/>
     </function-decl>
-    <function-decl name='_Py_Sigset_Converter' mangled-name='_Py_Sigset_Converter' filepath='./Modules/posixmodule.h' line='27' column='1' visibility='default' binding='global' size-in-bits='64'>
+    <function-decl name='_Py_Sigset_Converter' mangled-name='_Py_Sigset_Converter' filepath='./Modules/posixmodule.h' line='26' column='1' visibility='default' binding='global' size-in-bits='64'>
       <return type-id='type-id-4'/>
     </function-decl>
     <function-decl name='sigwaitinfo' mangled-name='sigwaitinfo' filepath='/usr/include/signal.h' line='261' column='1' visibility='default' binding='global' size-in-bits='64'>
     <function-decl name='PyThread_get_thread_native_id' mangled-name='PyThread_get_thread_native_id' filepath='./Include/pythread.h' line='30' column='1' visibility='default' binding='global' size-in-bits='64'>
       <return type-id='type-id-4'/>
     </function-decl>
-    <function-decl name='_PyThreadState_Prealloc' mangled-name='_PyThreadState_Prealloc' filepath='./Include/cpython/pystate.h' line='159' column='1' visibility='default' binding='global' size-in-bits='64'>
+    <function-decl name='_PyThreadState_Prealloc' mangled-name='_PyThreadState_Prealloc' filepath='./Include/cpython/pystate.h' line='157' column='1' visibility='default' binding='global' size-in-bits='64'>
       <return type-id='type-id-4'/>
     </function-decl>
     <function-decl name='PyThread_start_new_thread' mangled-name='PyThread_start_new_thread' filepath='./Include/pythread.h' line='24' column='1' visibility='default' binding='global' size-in-bits='64'>
     <function-decl name='PyInit__symtable' mangled-name='PyInit__symtable' filepath='./Modules/symtablemodule.c' line='123' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='PyInit__symtable'>
       <return type-id='type-id-16'/>
     </function-decl>
-    <function-decl name='_Py_SymtableStringObjectFlags' mangled-name='_Py_SymtableStringObjectFlags' filepath='./Include/internal/pycore_symtable.h' line='117' column='1' visibility='default' binding='global' size-in-bits='64'>
+    <function-decl name='_Py_SymtableStringObjectFlags' mangled-name='_Py_SymtableStringObjectFlags' filepath='./Include/internal/pycore_symtable.h' line='124' column='1' visibility='default' binding='global' size-in-bits='64'>
       <return type-id='type-id-4'/>
     </function-decl>
   </abi-instr>
     </function-decl>
   </abi-instr>
   <abi-instr version='1.0' address-size='64' path='Python/frozen.c' comp-dir-path='/src' language='LANG_C99'>
-    <class-decl name='_frozen' size-in-bits='192' is-struct='yes' visibility='default' filepath='./Include/cpython/import.h' line='34' column='1' id='type-id-858'>
+    <class-decl name='_frozen' size-in-bits='192' is-struct='yes' visibility='default' filepath='./Include/cpython/import.h' line='34' column='1' id='type-id-860'>
       <data-member access='public' layout-offset-in-bits='0'>
         <var-decl name='name' type-id='type-id-3' visibility='default' filepath='./Include/cpython/import.h' line='35' column='1'/>
       </data-member>
         <var-decl name='size' type-id='type-id-9' visibility='default' filepath='./Include/cpython/import.h' line='37' column='1'/>
       </data-member>
     </class-decl>
-    <qualified-type-def type-id='type-id-858' const='yes' id='type-id-859'/>
-    <pointer-type-def type-id='type-id-859' size-in-bits='64' id='type-id-860'/>
-    <var-decl name='PyImport_FrozenModules' type-id='type-id-860' mangled-name='PyImport_FrozenModules' visibility='default' filepath='./Include/cpython/import.h' line='43' column='1' elf-symbol-id='PyImport_FrozenModules'/>
+    <qualified-type-def type-id='type-id-860' const='yes' id='type-id-861'/>
+    <pointer-type-def type-id='type-id-861' size-in-bits='64' id='type-id-862'/>
+    <var-decl name='PyImport_FrozenModules' type-id='type-id-862' mangled-name='PyImport_FrozenModules' visibility='default' filepath='./Include/cpython/import.h' line='43' column='1' elf-symbol-id='PyImport_FrozenModules'/>
   </abi-instr>
 </abi-corpus>
index 0600663..7b1e22f 100644 (file)
@@ -23,25 +23,25 @@ option, for example::
 
 to create a gzipped tarball and a zip file.  The available formats are:
 
-+-----------+-------------------------+---------+
-| Format    | Description             | Notes   |
-+===========+=========================+=========+
-| ``zip``   | zip file (:file:`.zip`) | (1),(3) |
-+-----------+-------------------------+---------+
-| ``gztar`` | gzip'ed tar file        | \(2)    |
-|           | (:file:`.tar.gz`)       |         |
-+-----------+-------------------------+---------+
-| ``bztar`` | bzip2'ed tar file       |         |
-|           | (:file:`.tar.bz2`)      |         |
-+-----------+-------------------------+---------+
-| ``xztar`` | xz'ed tar file          |         |
-|           | (:file:`.tar.xz`)       |         |
-+-----------+-------------------------+---------+
-| ``ztar``  | compressed tar file     | \(4)    |
-|           | (:file:`.tar.Z`)        |         |
-+-----------+-------------------------+---------+
-| ``tar``   | tar file (:file:`.tar`) |         |
-+-----------+-------------------------+---------+
++-----------+-------------------------+-------------+
+| Format    | Description             | Notes       |
++===========+=========================+=============+
+| ``zip``   | zip file (:file:`.zip`) | (1),(3)     |
++-----------+-------------------------+-------------+
+| ``gztar`` | gzip'ed tar file        | \(2)        |
+|           | (:file:`.tar.gz`)       |             |
++-----------+-------------------------+-------------+
+| ``bztar`` | bzip2'ed tar file       | \(5)        |
+|           | (:file:`.tar.bz2`)      |             |
++-----------+-------------------------+-------------+
+| ``xztar`` | xz'ed tar file          | \(5)        |
+|           | (:file:`.tar.xz`)       |             |
++-----------+-------------------------+-------------+
+| ``ztar``  | compressed tar file     | (4),(5)     |
+|           | (:file:`.tar.Z`)        |             |
++-----------+-------------------------+-------------+
+| ``tar``   | tar file (:file:`.tar`) | \(5)        |
++-----------+-------------------------+-------------+
 
 .. versionchanged:: 3.5
    Added support for the ``xztar`` format.
@@ -61,6 +61,9 @@ Notes:
 (4)
    requires the :program:`compress` program. Notice that this format is now
    pending for deprecation and will be removed in the future versions of Python.
+(5)
+  deprecated by `PEP 527 <https://www.python.org/dev/peps/pep-0527/>`_;
+  `PyPI <https://pypi.org>`_ only accepts ``.zip`` and ``.tar.gz`` files.
 
 When using any ``tar`` format (``gztar``, ``bztar``, ``xztar``, ``ztar`` or
 ``tar``), under Unix you can specify the ``owner`` and ``group`` names
index 3e61103..2bc2f2d 100644 (file)
@@ -156,7 +156,7 @@ Manually Un-Stringizing Stringized Annotations
   require annotating with string values that specifically
   *can't* be evaluated.  For example:
 
-  * :pep:`604` union types using `|`, before support for this
+  * :pep:`604` union types using ``|``, before support for this
     was added to Python 3.10.
   * Definitions that aren't needed at runtime, only imported
     when :const:`typing.TYPE_CHECKING` is true.
index 2a13776..5e1b010 100644 (file)
@@ -333,7 +333,8 @@ and off individually.  They are described here in more detail.
 
 .. 2to3fixer:: nonzero
 
-   Renames :meth:`__nonzero__` to :meth:`~object.__bool__`.
+   Renames definitions of methods called :meth:`__nonzero__`
+   to :meth:`~object.__bool__`.
 
 .. 2to3fixer:: numliterals
 
index a056826..d853d2a 100644 (file)
@@ -148,7 +148,8 @@ ArgumentParser objects
    as keyword arguments. Each parameter has its own more detailed description
    below, but in short they are:
 
-   * prog_ - The name of the program (default: ``sys.argv[0]``)
+   * prog_ - The name of the program (default:
+     ``os.path.basename(sys.argv[0])``)
 
    * usage_ - The string describing the program usage (default: generated from
      arguments added to parser)
index 252fb42..b1700c9 100644 (file)
@@ -64,7 +64,7 @@ an event loop:
 
 .. function:: new_event_loop()
 
-   Create a new event loop object.
+   Create and return a new event loop object.
 
 Note that the behaviour of :func:`get_event_loop`, :func:`set_event_loop`,
 and :func:`new_event_loop` functions can be altered by
index f18b0e3..1175b05 100644 (file)
@@ -1085,7 +1085,7 @@ enforced.
     This decorator should not be used for :keyword:`async def`
     coroutines.
 
-    .. deprecated-removed:: 3.8 3.10
+    .. deprecated-removed:: 3.8 3.11
 
        Use :keyword:`async def` instead.
 
index 8bf3cb6..b8a717d 100644 (file)
@@ -1120,14 +1120,16 @@ Some differences from :class:`dict` still remain:
         Move an existing *key* to either end of an ordered dictionary.  The item
         is moved to the right end if *last* is true (the default) or to the
         beginning if *last* is false.  Raises :exc:`KeyError` if the *key* does
-        not exist::
+        not exist:
+
+        .. doctest::
 
             >>> d = OrderedDict.fromkeys('abcde')
             >>> d.move_to_end('b')
-            >>> ''.join(d.keys())
+            >>> ''.join(d)
             'acdeb'
             >>> d.move_to_end('b', last=False)
-            >>> ''.join(d.keys())
+            >>> ''.join(d)
             'bacde'
 
         .. versionadded:: 3.2
index 897efc2..70a17a2 100644 (file)
@@ -30,7 +30,7 @@ Executor Objects
 
     .. method:: submit(fn, /, *args, **kwargs)
 
-       Schedules the callable, *fn*, to be executed as ``fn(*args **kwargs)``
+       Schedules the callable, *fn*, to be executed as ``fn(*args, **kwargs)``
        and returns a :class:`Future` object representing the execution of the
        callable. ::
 
@@ -435,7 +435,8 @@ Module Functions
 .. function:: wait(fs, timeout=None, return_when=ALL_COMPLETED)
 
    Wait for the :class:`Future` instances (possibly created by different
-   :class:`Executor` instances) given by *fs* to complete.  Returns a named
+   :class:`Executor` instances) given by *fs* to complete. Duplicate futures
+   given to *fs* are removed and will be returned only once. Returns a named
    2-tuple of sets.  The first set, named ``done``, contains the futures that
    completed (finished or cancelled futures) before the wait completed.  The
    second set, named ``not_done``, contains the futures that did not complete
index b186f1d..c10e54f 100644 (file)
@@ -1320,7 +1320,7 @@ There are several ways to load shared libraries into the Python process.  One
 way is to instantiate one of the following classes:
 
 
-.. class:: CDLL(name, mode=DEFAULT_MODE, handle=None, use_errno=False, use_last_error=False, winmode=0)
+.. class:: CDLL(name, mode=DEFAULT_MODE, handle=None, use_errno=False, use_last_error=False, winmode=None)
 
    Instances of this class represent loaded shared libraries. Functions in these
    libraries use the standard C calling convention, and are assumed to return
@@ -1342,7 +1342,7 @@ way is to instantiate one of the following classes:
     -- A tool to find DLL dependents.
 
 
-.. class:: OleDLL(name, mode=DEFAULT_MODE, handle=None, use_errno=False, use_last_error=False, winmode=0)
+.. class:: OleDLL(name, mode=DEFAULT_MODE, handle=None, use_errno=False, use_last_error=False, winmode=None)
 
    Windows only: Instances of this class represent loaded shared libraries,
    functions in these libraries use the ``stdcall`` calling convention, and are
@@ -1355,7 +1355,7 @@ way is to instantiate one of the following classes:
       :exc:`WindowsError` used to be raised.
 
 
-.. class:: WinDLL(name, mode=DEFAULT_MODE, handle=None, use_errno=False, use_last_error=False, winmode=0)
+.. class:: WinDLL(name, mode=DEFAULT_MODE, handle=None, use_errno=False, use_last_error=False, winmode=None)
 
    Windows only: Instances of this class represent loaded shared libraries,
    functions in these libraries use the ``stdcall`` calling convention, and are
index 7f9ffcb..6a9863c 100644 (file)
@@ -319,9 +319,9 @@ Module contents
    Raises :exc:`TypeError` if not passed a dataclass or instance of one.
    Does not return pseudo-fields which are ``ClassVar`` or ``InitVar``.
 
-.. function:: asdict(instance, *, dict_factory=dict)
+.. function:: asdict(obj, *, dict_factory=dict)
 
-   Converts the dataclass ``instance`` to a dict (by using the
+   Converts the dataclass ``obj`` to a dict (by using the
    factory function ``dict_factory``).  Each dataclass is converted
    to a dict of its fields, as ``name: value`` pairs.  dataclasses, dicts,
    lists, and tuples are recursed into.  Other objects are copied with
@@ -346,14 +346,14 @@ Module contents
 
    To create a shallow copy, the following workaround may be used::
 
-     dict((field.name, getattr(instance, field.name)) for field in fields(instance))
+     dict((field.name, getattr(obj, field.name)) for field in fields(obj))
 
-   :func:`asdict` raises :exc:`TypeError` if ``instance`` is not a dataclass
+   :func:`asdict` raises :exc:`TypeError` if ``obj`` is not a dataclass
    instance.
 
-.. function:: astuple(instance, *, tuple_factory=tuple)
+.. function:: astuple(obj, *, tuple_factory=tuple)
 
-   Converts the dataclass ``instance`` to a tuple (by using the
+   Converts the dataclass ``obj`` to a tuple (by using the
    factory function ``tuple_factory``).  Each dataclass is converted
    to a tuple of its field values.  dataclasses, dicts, lists, and
    tuples are recursed into. Other objects are copied with
@@ -366,9 +366,9 @@ Module contents
 
    To create a shallow copy, the following workaround may be used::
 
-     tuple(getattr(instance, field.name) for field in dataclasses.fields(instance))
+     tuple(getattr(obj, field.name) for field in dataclasses.fields(obj))
 
-   :func:`astuple` raises :exc:`TypeError` if ``instance`` is not a dataclass
+   :func:`astuple` raises :exc:`TypeError` if ``obj`` is not a dataclass
    instance.
 
 .. function:: make_dataclass(cls_name, fields, *, bases=(), namespace=None, init=True, repr=True, eq=True, order=False, unsafe_hash=False, frozen=False, match_args=True, kw_only=False, slots=False)
@@ -406,10 +406,10 @@ Module contents
          def add_one(self):
              return self.x + 1
 
-.. function:: replace(instance, /, **changes)
+.. function:: replace(obj, /, **changes)
 
-   Creates a new object of the same type as ``instance``, replacing
-   fields with values from ``changes``.  If ``instance`` is not a Data
+   Creates a new object of the same type as ``obj``, replacing
+   fields with values from ``changes``.  If ``obj`` is not a Data
    Class, raises :exc:`TypeError`.  If values in ``changes`` do not
    specify fields, raises :exc:`TypeError`.
 
@@ -434,7 +434,7 @@ Module contents
    ``replace()`` (or similarly named) method which handles instance
    copying.
 
-.. function:: is_dataclass(class_or_instance)
+.. function:: is_dataclass(obj)
 
    Return ``True`` if its parameter is a dataclass or an instance of one,
    otherwise return ``False``.
index e7e67da..74820f9 100644 (file)
@@ -1252,9 +1252,8 @@ All of the following opcodes use their arguments.
 
 .. opcode:: GEN_START (kind)
 
-    Pops TOS. If TOS was not ``None``, raises an exception. The ``kind``
-    operand corresponds to the type of generator or coroutine and determines
-    the error message. The legal kinds are 0 for generator, 1 for coroutine,
+    Pops TOS. The ``kind`` operand corresponds to the type of generator or
+    coroutine. The legal kinds are 0 for generator, 1 for coroutine,
     and 2 for async generator.
 
    .. versionadded:: 3.10
index 307d679..9a9c87e 100644 (file)
@@ -733,9 +733,9 @@ are always available.  They are listed here in alphabetical order.
 
 .. function:: globals()
 
-   Return a dictionary representing the current global symbol table. This is always
-   the dictionary of the current module (inside a function or method, this is the
-   module where it is defined, not the module from which it is called).
+   Return the dictionary implementing the current module namespace. For code within
+   functions, this is set when the function is defined and remains the same
+   regardless of where the function is called.
 
 
 .. function:: hasattr(object, name)
@@ -1582,7 +1582,7 @@ are always available.  They are listed here in alphabetical order.
    :func:`itertools.islice` for an alternate version that returns an iterator.
 
 
-.. function:: sorted(iterable, *, key=None, reverse=False)
+.. function:: sorted(iterable, /, *, key=None, reverse=False)
 
    Return a new sorted list from the items in *iterable*.
 
index 0c3bd7b..53320d9 100644 (file)
@@ -120,10 +120,10 @@ More condensed:
 
 Using :func:`new` with an algorithm provided by OpenSSL:
 
-   >>> h = hashlib.new('sha512_256')
+   >>> h = hashlib.new('sha256')
    >>> h.update(b"Nobody inspects the spammish repetition")
    >>> h.hexdigest()
-   '19197dc4d03829df858011c6c87600f994a858103bbc19005f20987aa19a97e2'
+   '031edd7d41651593c5fe5c006fa5752b37fddff7bc4e843aa6af0c950f4b9406'
 
 Hashlib provides the following constant attributes:
 
index 0881015..de88c57 100644 (file)
@@ -131,7 +131,7 @@ explicitly when opening text files. If you want to use UTF-8, pass
 ``encoding="utf-8"``. To use the current locale encoding,
 ``encoding="locale"`` is supported in Python 3.10.
 
-When you need to run existing code on Windows that attempts to opens
+When you need to run existing code on Windows that attempts to open
 UTF-8 files using the default locale encoding, you can enable the UTF-8
 mode. See :ref:`UTF-8 mode on Windows <win-utf8-mode>`.
 
index 6fa89f5..1810e04 100644 (file)
@@ -159,7 +159,7 @@ Basic Usage
 
    If *check_circular* is false (default: ``True``), then the circular
    reference check for container types will be skipped and a circular reference
-   will result in an :exc:`OverflowError` (or worse).
+   will result in an :exc:`RecursionError` (or worse).
 
    If *allow_nan* is false (default: ``True``), then it will be a
    :exc:`ValueError` to serialize out of range :class:`float` values (``nan``,
@@ -432,7 +432,7 @@ Encoders and Decoders
 
    If *check_circular* is true (the default), then lists, dicts, and custom
    encoded objects will be checked for circular references during encoding to
-   prevent an infinite recursion (which would cause an :exc:`OverflowError`).
+   prevent an infinite recursion (which would cause an :exc:`RecursionError`).
    Otherwise, no such check takes place.
 
    If *allow_nan* is true (the default), then ``NaN``, ``Infinity``, and
index 5a3e686..a1b8dc7 100644 (file)
@@ -191,6 +191,20 @@ in :mod:`logging` itself) and defining handlers which are declared either in
    :func:`listen`.
 
 
+Security considerations
+^^^^^^^^^^^^^^^^^^^^^^^
+
+The logging configuration functionality tries to offer convenience, and in part this
+is done by offering the ability to convert text in configuration files into Python
+objects used in logging configuration - for example, as described in
+:ref:`logging-config-dict-userdef`. However, these same mechanisms (importing
+callables from user-defined modules and calling them with parameters from the
+configuration) could be used to invoke any code you like, and for this reason you
+should treat configuration files from untrusted sources with *extreme caution* and
+satisfy yourself that nothing bad can happen if you load them, before actually loading
+them.
+
+
 .. _logging-config-dictschema:
 
 Configuration dictionary schema
index 73c542b..a5b181e 100644 (file)
@@ -117,6 +117,9 @@ sends logging output to a disk file.  It inherits the output functionality from
 
       Outputs the record to the file.
 
+      Note that if the file was closed due to logging shutdown at exit and the file
+      mode is 'w', the record will not be emitted (see :issue:`42378`).
+
 
 .. _null-handler:
 
@@ -231,6 +234,19 @@ need to override.
          return the same output every time for a given input, otherwise the
          rollover behaviour may not work as expected.
 
+         It's also worth noting that care should be taken when using a namer to
+         preserve certain attributes in the filename which are used during rotation.
+         For example, :class:`RotatingFileHandler` expects to have a set of log files
+         whose names contain successive integers, so that rotation works as expected,
+         and :class:`TimedRotatingFileHandler` deletes old log files (based on the
+         ``backupCount`` parameter passed to the handler's initializer) by determining
+         the oldest files to delete. For this to happen, the filenames should be
+         sortable using the date/time portion of the filename, and a namer needs to
+         respect this. (If a namer is wanted that doesn't respect this scheme, it will
+         need to be used in a subclass of :class:`TimedRotatingFileHandler` which
+         overrides the :meth:`~TimedRotatingFileHandler.getFilesToDelete` method to
+         fit in with the custom naming scheme.)
+
       .. versionadded:: 3.3
 
 
@@ -440,6 +456,10 @@ timed intervals.
 
       Outputs the record to the file, catering for rollover as described above.
 
+   .. method:: getFilesToDelete()
+
+      Returns a list of filenames which should be deleted as part of rollover. These
+      are the absolute paths of the oldest backup log files written by the handler.
 
 .. _socket-handler:
 
index bb1bbf0..74b1f69 100644 (file)
@@ -80,6 +80,15 @@ is the module's name in the Python package namespace.
       If this evaluates to false, logging messages are not passed to the handlers
       of ancestor loggers.
 
+      Spelling it out with an example: If the propagate attribute of the logger named
+      ``A.B.C`` evaluates to true, any event logged to ``A.B.C`` via a method call such as
+      ``logging.getLogger('A.B.C').error(...)`` will [subject to passing that logger's
+      level and filter settings] be passed in turn to any handlers attached to loggers
+      named ``A.B``, ``A`` and the root logger, after first being passed to any handlers
+      attached to ``A.B.C``. If any logger in the chain ``A.B.C``, ``A.B``, ``A`` has its
+      ``propagate`` attribute set to false, then that is the last logger whose handlers
+      are offered the event to handle, and propagation stops at that point.
+
       The constructor sets this attribute to ``True``.
 
       .. note:: If you attach a handler to a logger *and* one or more of its
index 4562128..e81dd7e 100644 (file)
@@ -2250,8 +2250,9 @@ with the :class:`Pool` class.
 
    .. method:: starmap(func, iterable[, chunksize])
 
-      Like :meth:`map` except that the elements of the *iterable* are expected
-      to be iterables that are unpacked as arguments.
+      Like :meth:`~multiprocessing.pool.Pool.map` except that the
+      elements of the *iterable* are expected to be iterables that are
+      unpacked as arguments.
 
       Hence an *iterable* of ``[(1,2), (3, 4)]`` results in ``[func(1,2),
       func(3,4)]``.
index a66b3c5..6b15a11 100644 (file)
@@ -501,11 +501,16 @@ the :mod:`glob` module.)
 
       >>> splitext('foo.bar.exe')
       ('foo.bar', '.exe')
+      >>> splitext('/foo/bar.exe')
+      ('/foo/bar', '.exe')
 
-   Leading periods on the basename are ignored::
+   Leading periods of the last component of the path are considered to
+   be part of the root::
 
       >>> splitext('.cshrc')
       ('.cshrc', '')
+      >>> splitext('/foo/....jpg')
+      ('/foo/....jpg', '')
 
    .. versionchanged:: 3.6
       Accepts a :term:`path-like object`.
index 39d7e40..629a32f 100644 (file)
@@ -4244,20 +4244,20 @@ written in Python, such as a mail server's external command delivery program.
    Returns the current global process times.
    The return value is an object with five attributes:
 
-   * :attr:`user` - user time
-   * :attr:`system` - system time
-   * :attr:`children_user` - user time of all child processes
-   * :attr:`children_system` - system time of all child processes
-   * :attr:`elapsed` - elapsed real time since a fixed point in the past
+   * :attr:`!user` - user time
+   * :attr:`!system` - system time
+   * :attr:`!children_user` - user time of all child processes
+   * :attr:`!children_system` - system time of all child processes
+   * :attr:`!elapsed` - elapsed real time since a fixed point in the past
 
    For backwards compatibility, this object also behaves like a five-tuple
-   containing :attr:`user`, :attr:`system`, :attr:`children_user`,
-   :attr:`children_system`, and :attr:`elapsed` in that order.
+   containing :attr:`!user`, :attr:`!system`, :attr:`!children_user`,
+   :attr:`!children_system`, and :attr:`!elapsed` in that order.
 
    See the Unix manual page
    :manpage:`times(2)` and :manpage:`times(3)` manual page on Unix or `the GetProcessTimes MSDN
    <https://docs.microsoft.com/windows/win32/api/processthreadsapi/nf-processthreadsapi-getprocesstimes>`_
-   on Windows. On Windows, only :attr:`user` and :attr:`system` are known; the other attributes are zero.
+   on Windows. On Windows, only :attr:`!user` and :attr:`!system` are known; the other attributes are zero.
 
    .. availability:: Unix, Windows.
 
index ed1e971..13e1a19 100644 (file)
@@ -67,14 +67,13 @@ useful than quitting the debugger upon program's exit.
    before the first line of the module.
 
 
-The typical usage to break into the debugger from a running program is to
-insert ::
+The typical usage to break into the debugger is to insert::
 
    import pdb; pdb.set_trace()
 
-at the location you want to break into the debugger.  You can then step through
-the code following this statement, and continue running without the debugger
-using the :pdbcmd:`continue` command.
+at the location you want to break into the debugger, and then run the program.
+You can then step through the code following this statement, and continue
+running without the debugger using the :pdbcmd:`continue` command.
 
 .. versionadded:: 3.7
    The built-in :func:`breakpoint()`, when called with defaults, can be used
index f3964b9..1c3bde3 100644 (file)
@@ -766,14 +766,15 @@ Cursor Objects
 
    .. attribute:: lastrowid
 
-      This read-only attribute provides the rowid of the last modified row. It is
-      only set if you issued an ``INSERT`` or a ``REPLACE`` statement using the
-      :meth:`execute` method.  For operations other than ``INSERT`` or
-      ``REPLACE`` or when :meth:`executemany` is called, :attr:`lastrowid` is
-      set to :const:`None`.
-
-      If the ``INSERT`` or ``REPLACE`` statement failed to insert the previous
-      successful rowid is returned.
+      This read-only attribute provides the row id of the last inserted row. It
+      is only updated after successful ``INSERT`` or ``REPLACE`` statements
+      using the :meth:`execute` method.  For other statements, after
+      :meth:`executemany` or :meth:`executescript`, or if the insertion failed,
+      the value of ``lastrowid`` is left unchanged.  The initial value of
+      ``lastrowid`` is :const:`None`.
+
+      .. note::
+         Inserts into ``WITHOUT ROWID`` tables are not recorded.
 
       .. versionchanged:: 3.6
          Added support for the ``REPLACE`` statement.
index 3c3f9d2..fd48619 100644 (file)
@@ -116,10 +116,11 @@ However, for reading convenience, most of the examples show sorted sequences.
 
    .. note::
 
-      The mean is strongly affected by outliers and is not a robust estimator
-      for central location: the mean is not necessarily a typical example of
-      the data points.  For more robust measures of central location, see
-      :func:`median` and :func:`mode`.
+      The mean is strongly affected by `outliers
+      <https://en.wikipedia.org/wiki/Outlier>`_ and is not necessarily a
+      typical example of the data points. For a more robust, although less
+      efficient, measure of `central tendency
+      <https://en.wikipedia.org/wiki/Central_tendency>`_, see :func:`median`.
 
       The sample mean gives an unbiased estimate of the true population mean,
       so that when taken on average over all the possible samples,
index 1b18abc..8fa252b 100644 (file)
@@ -178,13 +178,14 @@ operators are only defined where they make sense; for example, they raise a
    single: __ge__() (instance method)
 
 Non-identical instances of a class normally compare as non-equal unless the
-class defines the :meth:`__eq__` method.
+class defines the :meth:`~object.__eq__` method.
 
 Instances of a class cannot be ordered with respect to other instances of the
 same class, or other types of object, unless the class defines enough of the
-methods :meth:`__lt__`, :meth:`__le__`, :meth:`__gt__`, and :meth:`__ge__` (in
-general, :meth:`__lt__` and :meth:`__eq__` are sufficient, if you want the
-conventional meanings of the comparison operators).
+methods :meth:`~object.__lt__`, :meth:`~object.__le__`, :meth:`~object.__gt__`, and
+:meth:`~object.__ge__` (in general, :meth:`~object.__lt__` and
+:meth:`~object.__eq__` are sufficient, if you want the conventional meanings of the
+comparison operators).
 
 The behavior of the :keyword:`is` and :keyword:`is not` operators cannot be
 customized; also they can be applied to any two objects and never raise an
@@ -660,7 +661,7 @@ Hashing of numeric types
 ------------------------
 
 For numbers ``x`` and ``y``, possibly of different types, it's a requirement
-that ``hash(x) == hash(y)`` whenever ``x == y`` (see the :meth:`__hash__`
+that ``hash(x) == hash(y)`` whenever ``x == y`` (see the :meth:`~object.__hash__`
 method documentation for more details).  For ease of implementation and
 efficiency across a variety of numeric types (including :class:`int`,
 :class:`float`, :class:`decimal.Decimal` and :class:`fractions.Fraction`)
@@ -920,6 +921,16 @@ This means that to compare equal, every element must compare equal and the
 two sequences must be of the same type and have the same length.  (For full
 details see :ref:`comparisons` in the language reference.)
 
+.. index::
+   single: loop; over mutable sequence
+   single: mutable sequence; loop over
+
+Forward and reversed iterators over mutable sequences access values using an
+index.  That index will continue to march forward (or backward) even if the
+underlying sequence is mutated.  The iterator terminates only when an
+:exc:`IndexError` or a :exc:`StopIteration` is encountered (or when the index
+drops below zero).
+
 Notes:
 
 (1)
@@ -1296,7 +1307,7 @@ loops.
            range(start, stop[, step])
 
    The arguments to the range constructor must be integers (either built-in
-   :class:`int` or any object that implements the ``__index__`` special
+   :class:`int` or any object that implements the :meth:`~object.__index__` special
    method).  If the *step* argument is omitted, it defaults to ``1``.
    If the *start* argument is omitted, it defaults to ``0``.
    If *step* is zero, :exc:`ValueError` is raised.
@@ -1424,7 +1435,7 @@ Strings are immutable
 written in a variety of ways:
 
 * Single quotes: ``'allows embedded "double" quotes'``
-* Double quotes: ``"allows embedded 'single' quotes"``.
+* Double quotes: ``"allows embedded 'single' quotes"``
 * Triple quoted: ``'''Three single quotes'''``, ``"""Three double quotes"""``
 
 Triple quoted strings may span multiple lines - all associated whitespace will
@@ -1750,9 +1761,9 @@ expression support in the :mod:`re` module).
       >>> from keyword import iskeyword
 
       >>> 'hello'.isidentifier(), iskeyword('hello')
-      True, False
+      (True, False)
       >>> 'def'.isidentifier(), iskeyword('def')
-      True, True
+      (True, True)
 
 
 .. method:: str.islower()
@@ -2019,7 +2030,7 @@ expression support in the :mod:`re` module).
 .. index::
    single: universal newlines; str.splitlines method
 
-.. method:: str.splitlines([keepends])
+.. method:: str.splitlines(keepends=False)
 
    Return a list of the lines in the string, breaking at line boundaries.  Line
    breaks are not included in the resulting list unless *keepends* is given and
@@ -2432,7 +2443,7 @@ data and are closely related to string objects in a variety of other ways.
    literals, except that a ``b`` prefix is added:
 
    * Single quotes: ``b'still allows embedded "double" quotes'``
-   * Double quotes: ``b"still allows embedded 'single' quotes"``.
+   * Double quotes: ``b"still allows embedded 'single' quotes"``
    * Triple quoted: ``b'''3 single quotes'''``, ``b"""3 double quotes"""``
 
    Only ASCII characters are permitted in bytes literals (regardless of the
@@ -4333,9 +4344,9 @@ Dictionaries can be created by placing a comma-separated list of ``key: value``
 pairs within braces, for example: ``{'jack': 4098, 'sjoerd': 4127}`` or ``{4098:
 'jack', 4127: 'sjoerd'}``, or by the :class:`dict` constructor.
 
-.. class:: dict(**kwarg)
-           dict(mapping, **kwarg)
-           dict(iterable, **kwarg)
+.. class:: dict(**kwargs)
+           dict(mapping, **kwargs)
+           dict(iterable, **kwargs)
 
    Return a new dictionary initialized from an optional positional argument
    and a possibly empty set of keyword arguments.
@@ -4755,9 +4766,9 @@ their implementation of the context management protocol. See the
 Python's :term:`generator`\s and the :class:`contextlib.contextmanager` decorator
 provide a convenient way to implement these protocols.  If a generator function is
 decorated with the :class:`contextlib.contextmanager` decorator, it will return a
-context manager implementing the necessary :meth:`__enter__` and
-:meth:`__exit__` methods, rather than the iterator produced by an undecorated
-generator function.
+context manager implementing the necessary :meth:`~contextmanager.__enter__` and
+:meth:`~contextmanager.__exit__` methods, rather than the iterator produced by an
+undecorated generator function.
 
 Note that there is no specific slot for any of these methods in the type
 structure for Python objects in the Python/C API. Extension types wanting to
index 2314b02..5cd42f1 100644 (file)
@@ -312,7 +312,7 @@ Standard names are defined for the following types:
       This type can now be subclassed.
 
 
-.. data:: UnionType
+.. class:: UnionType
 
    The type of :ref:`union type expressions<types-union>`.
 
index 14e5c8f..929749b 100644 (file)
@@ -428,12 +428,12 @@ value of type :data:`Any` and assign it to any variable::
 
    from typing import Any
 
-   a = None    # type: Any
-   a = []      # OK
-   a = 2       # OK
+   a: Any = None
+   a = []          # OK
+   a = 2           # OK
 
-   s = ''      # type: str
-   s = a       # OK
+   s: str = ''
+   s = a           # OK
 
    def foo(item: Any) -> int:
        # Typechecks; 'item' could be any type,
@@ -625,7 +625,7 @@ These can be used as types in annotations using ``[]``, each having a unique syn
 
    Union type; ``Union[X, Y]`` is equivalent to ``X | Y`` and means either X or Y.
 
-   To define a union, use e.g. ``Union[int, str]`` or the shorthand ``int | str``.  Details:
+   To define a union, use e.g. ``Union[int, str]`` or the shorthand ``int | str``. Using that shorthand is recommended. Details:
 
    * The arguments must be types and there must be at least one.
 
@@ -737,7 +737,7 @@ These can be used as types in annotations using ``[]``, each having a unique syn
 
       from collections.abc import Callable
       from threading import Lock
-      from typing import Any, Concatenate, ParamSpec, TypeVar
+      from typing import Concatenate, ParamSpec, TypeVar
 
       P = ParamSpec('P')
       R = TypeVar('R')
@@ -1779,11 +1779,10 @@ Asynchronous programming
    correspond to those of :class:`Generator`, for example::
 
       from collections.abc import Coroutine
-      c = None # type: Coroutine[list[str], str, int]
-      ...
-      x = c.send('hi') # type: list[str]
+      c: Coroutine[list[str], str, int]  # Some coroutine defined elsewhere
+      x = c.send('hi')                   # Inferred type of 'x' is list[str]
       async def bar() -> None:
-          x = await c # type: int
+          y = await c                    # Inferred type of 'y' is int
 
    .. versionadded:: 3.5.3
 
index d0640b4..4d74f9c 100644 (file)
@@ -1516,7 +1516,7 @@ attribute in a class) that does not exist will fail with :exc:`AttributeError`::
     >>> test()
     Traceback (most recent call last):
       ...
-    AttributeError: <module 'sys' (built-in)> does not have the attribute 'non_existing'
+    AttributeError: <module 'sys' (built-in)> does not have the attribute 'non_existing_attribute'
 
 but adding ``create=True`` in the call to :func:`patch` will make the previous example
 work as expected::
index fe11aab..289b282 100644 (file)
@@ -105,7 +105,7 @@ The following warnings category classes are currently defined:
 |                                  | :class:`bytes` and :class:`bytearray`.        |
 +----------------------------------+-----------------------------------------------+
 | :exc:`ResourceWarning`           | Base category for warnings related to         |
-|                                  | resource usage.                               |
+|                                  | resource usage (ignored by default).          |
 +----------------------------------+-----------------------------------------------+
 
 .. versionchanged:: 3.7
index cd7030f..fe1adca 100644 (file)
@@ -23,8 +23,8 @@ and a path within the archive can be specified to only import from a
 subdirectory.  For example, the path :file:`example.zip/lib/` would only
 import from the :file:`lib/` subdirectory within the archive.
 
-Any files may be present in the ZIP archive, but only files :file:`.py` and
-:file:`.pyc` are available for import.  ZIP import of dynamic modules
+Any files may be present in the ZIP archive, but importers are only invoked for
+:file:`.py` and :file:`.pyc` files.  ZIP import of dynamic modules
 (:file:`.pyd`, :file:`.so`) is disallowed. Note that if an archive only contains
 :file:`.py` files, Python will not attempt to modify the archive by adding the
 corresponding :file:`.pyc` file, meaning that if a ZIP archive
index cd03411..e0ca5f2 100644 (file)
@@ -100,7 +100,7 @@ PSF LICENSE AGREEMENT FOR PYTHON |release|
       analyze, test, perform and/or display publicly, prepare derivative works,
       distribute, and otherwise use Python |release| alone or in any derivative
       version, provided, however, that PSF's License Agreement and PSF's notice of
-      copyright, i.e., "Copyright © 2001-2021 Python Software Foundation; All Rights
+      copyright, i.e., "Copyright © 2001-2022 Python Software Foundation; All Rights
       Reserved" are retained in Python |release| alone or in any derivative version
       prepared by Licensee.
 
index 63d885d..7f37bb4 100644 (file)
@@ -196,27 +196,6 @@ the built-in function :func:`range` returns an iterator of integers suitable to
 emulate the effect of Pascal's ``for i := a to b do``; e.g., ``list(range(3))``
 returns the list ``[0, 1, 2]``.
 
-.. note::
-
-   .. index::
-      single: loop; over mutable sequence
-      single: mutable sequence; loop over
-
-   There is a subtlety when the sequence is being modified by the loop (this can
-   only occur for mutable sequences, e.g. lists).  An internal counter is used
-   to keep track of which item is used next, and this is incremented on each
-   iteration.  When this counter has reached the length of the sequence the loop
-   terminates.  This means that if the suite deletes the current (or a previous)
-   item from the sequence, the next item will be skipped (since it gets the
-   index of the current item which has already been treated).  Likewise, if the
-   suite inserts an item in the sequence before the current item, the current
-   item will be treated again the next time through the loop. This can lead to
-   nasty bugs that can be avoided by making a temporary copy using a slice of
-   the whole sequence, e.g., ::
-
-      for x in a[:]:
-          if x < 0: a.remove(x)
-
 
 .. _try:
 .. _except:
index 111417d..be1f714 100644 (file)
@@ -188,7 +188,7 @@ Ellipsis
    representation in computers.
 
    The string representations of the numeric classes, computed by
-   :meth:`__repr__` and :meth:`__str__`, have the following
+   :meth:`~object.__repr__` and :meth:`~object.__str__`, have the following
    properties:
 
    * They are valid numeric literals which, when passed to their
@@ -677,7 +677,8 @@ Callable types
       returns an :term:`asynchronous iterator` object which can be used in an
       :keyword:`async for` statement to execute the body of the function.
 
-      Calling the asynchronous iterator's :meth:`aiterator.__anext__` method
+      Calling the asynchronous iterator's
+      :meth:`aiterator.__anext__ <object.__anext__>` method
       will return an :term:`awaitable` which when awaited
       will execute until it provides a value using the :keyword:`yield`
       expression.  When the function executes an empty :keyword:`return`
@@ -715,13 +716,13 @@ Callable types
    Classes
       Classes are callable.  These objects normally act as factories for new
       instances of themselves, but variations are possible for class types that
-      override :meth:`__new__`.  The arguments of the call are passed to
-      :meth:`__new__` and, in the typical case, to :meth:`__init__` to
+      override :meth:`~object.__new__`.  The arguments of the call are passed to
+      :meth:`__new__` and, in the typical case, to :meth:`~object.__init__` to
       initialize the new instance.
 
    Class Instances
       Instances of arbitrary classes can be made callable by defining a
-      :meth:`__call__` method in their class.
+      :meth:`~object.__call__` method in their class.
 
 
 Modules
@@ -880,14 +881,14 @@ Class instances
    section :ref:`descriptors` for another way in which attributes of a class
    retrieved via its instances may differ from the objects actually stored in
    the class's :attr:`~object.__dict__`.  If no class attribute is found, and the
-   object's class has a :meth:`__getattr__` method, that is called to satisfy
+   object's class has a :meth:`~object.__getattr__` method, that is called to satisfy
    the lookup.
 
    .. index:: triple: class instance; attribute; assignment
 
    Attribute assignments and deletions update the instance's dictionary, never a
-   class's dictionary.  If the class has a :meth:`__setattr__` or
-   :meth:`__delattr__` method, this is called instead of updating the instance
+   class's dictionary.  If the class has a :meth:`~object.__setattr__` or
+   :meth:`~object.__delattr__` method, this is called instead of updating the instance
    dictionary directly.
 
    .. index::
@@ -1141,7 +1142,8 @@ Internal types
    Slice objects
       .. index:: builtin: slice
 
-      Slice objects are used to represent slices for :meth:`__getitem__`
+      Slice objects are used to represent slices for
+      :meth:`~object.__getitem__`
       methods.  They are also created by the built-in :func:`slice` function.
 
       .. index::
@@ -1194,7 +1196,8 @@ A class can implement certain operations that are invoked by special syntax
 (such as arithmetic operations or subscripting and slicing) by defining methods
 with special names. This is Python's approach to :dfn:`operator overloading`,
 allowing classes to define their own behavior with respect to language
-operators.  For instance, if a class defines a method named :meth:`__getitem__`,
+operators.  For instance, if a class defines a method named
+:meth:`~object.__getitem__`,
 and ``x`` is an instance of this class, then ``x[i]`` is roughly equivalent
 to ``type(x).__getitem__(x, i)``.  Except where mentioned, attempts to execute an
 operation raise an exception when no appropriate method is defined (typically
@@ -1202,9 +1205,9 @@ operation raise an exception when no appropriate method is defined (typically
 
 Setting a special method to ``None`` indicates that the corresponding
 operation is not available.  For example, if a class sets
-:meth:`__iter__` to ``None``, the class is not iterable, so calling
+:meth:`~object.__iter__` to ``None``, the class is not iterable, so calling
 :func:`iter` on its instances will raise a :exc:`TypeError` (without
-falling back to :meth:`__getitem__`). [#]_
+falling back to :meth:`~object.__getitem__`). [#]_
 
 When implementing a class that emulates any built-in type, it is important that
 the emulation only be implemented to the degree that it makes sense for the
@@ -1754,7 +1757,8 @@ Invoking Descriptors
 
 In general, a descriptor is an object attribute with "binding behavior", one
 whose attribute access has been overridden by methods in the descriptor
-protocol:  :meth:`__get__`, :meth:`__set__`, and :meth:`__delete__`. If any of
+protocol:  :meth:`~object.__get__`, :meth:`~object.__set__`, and
+:meth:`~object.__delete__`. If any of
 those methods are defined for an object, it is said to be a descriptor.
 
 The default behavior for attribute access is to get, set, or delete the
@@ -1785,12 +1789,13 @@ Class Binding
 Super Binding
    If ``a`` is an instance of :class:`super`, then the binding ``super(B, obj).m()``
    searches ``obj.__class__.__mro__`` for the base class ``A``
-   immediately preceding ``B`` and then invokes the descriptor with the call:
+   immediately following ``B`` and then invokes the descriptor with the call:
    ``A.__dict__['m'].__get__(obj, obj.__class__)``.
 
 For instance bindings, the precedence of descriptor invocation depends on
 which descriptor methods are defined.  A descriptor can define any combination
-of :meth:`__get__`, :meth:`__set__` and :meth:`__delete__`.  If it does not
+of :meth:`~object.__get__`, :meth:`~object.__set__` and
+:meth:`~object.__delete__`.  If it does not
 define :meth:`__get__`, then accessing the attribute will return the descriptor
 object itself unless there is a value in the object's instance dictionary.  If
 the descriptor defines :meth:`__set__` and/or :meth:`__delete__`, it is a data
@@ -1801,7 +1806,8 @@ descriptors have just the :meth:`__get__` method.  Data descriptors with
 instance dictionary.  In contrast, non-data descriptors can be overridden by
 instances.
 
-Python methods (including :func:`staticmethod` and :func:`classmethod`) are
+Python methods (including those decorated with
+:func:`@staticmethod <staticmethod>` and :func:`@classmethod <classmethod>`) are
 implemented as non-data descriptors.  Accordingly, instances can redefine and
 override methods.  This allows individual instances to acquire behaviors that
 differ from other instances of the same class.
@@ -1816,46 +1822,50 @@ __slots__
 ^^^^^^^^^
 
 *__slots__* allow us to explicitly declare data members (like
-properties) and deny the creation of *__dict__* and *__weakref__*
+properties) and deny the creation of :attr:`~object.__dict__` and *__weakref__*
 (unless explicitly declared in *__slots__* or available in a parent.)
 
-The space saved over using *__dict__* can be significant.
+The space saved over using :attr:`~object.__dict__` can be significant.
 Attribute lookup speed can be significantly improved as well.
 
 .. data:: object.__slots__
 
    This class variable can be assigned a string, iterable, or sequence of
    strings with variable names used by instances.  *__slots__* reserves space
-   for the declared variables and prevents the automatic creation of *__dict__*
+   for the declared variables and prevents the automatic creation of
+   :attr:`~object.__dict__`
    and *__weakref__* for each instance.
 
 
 Notes on using *__slots__*
 """"""""""""""""""""""""""
 
-* When inheriting from a class without *__slots__*, the *__dict__* and
+* When inheriting from a class without *__slots__*, the
+  :attr:`~object.__dict__` and
   *__weakref__* attribute of the instances will always be accessible.
 
-* Without a *__dict__* variable, instances cannot be assigned new variables not
+* Without a :attr:`~object.__dict__` variable, instances cannot be assigned new
+  variables not
   listed in the *__slots__* definition.  Attempts to assign to an unlisted
   variable name raises :exc:`AttributeError`. If dynamic assignment of new
   variables is desired, then add ``'__dict__'`` to the sequence of strings in
   the *__slots__* declaration.
 
 * Without a *__weakref__* variable for each instance, classes defining
-  *__slots__* do not support weak references to its instances. If weak reference
+  *__slots__* do not support :mod:`weak references <weakref>` to its instances.
+  If weak reference
   support is needed, then add ``'__weakref__'`` to the sequence of strings in the
   *__slots__* declaration.
 
-* *__slots__* are implemented at the class level by creating descriptors
-  (:ref:`descriptors`) for each variable name.  As a result, class attributes
+* *__slots__* are implemented at the class level by creating :ref:`descriptors <descriptors>`
+  for each variable name.  As a result, class attributes
   cannot be used to set default values for instance variables defined by
   *__slots__*; otherwise, the class attribute would overwrite the descriptor
   assignment.
 
 * The action of a *__slots__* declaration is not limited to the class
   where it is defined.  *__slots__* declared in parents are available in
-  child classes. However, child subclasses will get a *__dict__*  and
+  child classes. However, child subclasses will get a :attr:`~object.__dict__` and
   *__weakref__* unless they also define *__slots__* (which should only
   contain names of any *additional* slots).
 
@@ -1867,18 +1877,24 @@ Notes on using *__slots__*
 * Nonempty *__slots__* does not work for classes derived from "variable-length"
   built-in types such as :class:`int`, :class:`bytes` and :class:`tuple`.
 
-* Any non-string iterable may be assigned to *__slots__*. Mappings may also be
-  used; however, in the future, special meaning may be assigned to the values
-  corresponding to each key.
+* Any non-string :term:`iterable` may be assigned to *__slots__*.
 
-* *__class__* assignment works only if both classes have the same *__slots__*.
+* If a :class:`dictionary <dict>` is used to assign *__slots__*, the dictionary
+  keys will be used as the slot names. The values of the dictionary can be used
+  to provide per-attribute docstrings that will be recognised by
+  :func:`inspect.getdoc` and displayed in the output of :func:`help`.
 
-* Multiple inheritance with multiple slotted parent classes can be used,
+* :attr:`~instance.__class__` assignment works only if both classes have the
+  same *__slots__*.
+
+* :ref:`Multiple inheritance <tut-multiple>` with multiple slotted parent
+  classes can be used,
   but only one parent is allowed to have attributes created by slots
   (the other bases must have empty slot layouts) - violations raise
   :exc:`TypeError`.
 
-* If an iterator is used for *__slots__* then a descriptor is created for each
+* If an :term:`iterator` is used for *__slots__* then a :term:`descriptor` is
+  created for each
   of the iterator's values. However, the *__slots__* attribute will be an empty
   iterator.
 
@@ -1887,7 +1903,7 @@ Notes on using *__slots__*
 Customizing class creation
 --------------------------
 
-Whenever a class inherits from another class, *__init_subclass__* is
+Whenever a class inherits from another class, :meth:`~object.__init_subclass__` is
 called on that class. This way, it is possible to write classes which
 change the behavior of subclasses. This is closely related to class
 decorators, but where class decorators only affect the specific class they're
@@ -1928,7 +1944,7 @@ class defining the method.
 
 
 When a class is created, :meth:`type.__new__` scans the class variables
-and makes callbacks to those with a :meth:`__set_name__` hook.
+and makes callbacks to those with a :meth:`~object.__set_name__` hook.
 
 .. method:: object.__set_name__(self, owner, name)
 
@@ -2040,7 +2056,8 @@ Once the appropriate metaclass has been identified, then the class namespace
 is prepared. If the metaclass has a ``__prepare__`` attribute, it is called
 as ``namespace = metaclass.__prepare__(name, bases, **kwds)`` (where the
 additional keyword arguments, if any, come from the class definition). The
-``__prepare__`` method should be implemented as a :func:`classmethod`. The
+``__prepare__`` method should be implemented as a
+:func:`classmethod <classmethod>`. The
 namespace returned by ``__prepare__`` is passed in to ``__new__``, but when
 the final class object is created the namespace is copied into a new ``dict``.
 
@@ -2338,31 +2355,36 @@ Emulating container types
 -------------------------
 
 The following methods can be defined to implement container objects.  Containers
-usually are sequences (such as lists or tuples) or mappings (like dictionaries),
+usually are :term:`sequences <sequence>` (such as :class:`lists <list>` or
+:class:`tuples <tuple>`) or :term:`mappings <mapping>` (like
+:class:`dictionaries <dict>`),
 but can represent other containers as well.  The first set of methods is used
 either to emulate a sequence or to emulate a mapping; the difference is that for
 a sequence, the allowable keys should be the integers *k* for which ``0 <= k <
-N`` where *N* is the length of the sequence, or slice objects, which define a
+N`` where *N* is the length of the sequence, or :class:`slice` objects, which define a
 range of items.  It is also recommended that mappings provide the methods
 :meth:`keys`, :meth:`values`, :meth:`items`, :meth:`get`, :meth:`clear`,
 :meth:`setdefault`, :meth:`pop`, :meth:`popitem`, :meth:`!copy`, and
-:meth:`update` behaving similar to those for Python's standard dictionary
+:meth:`update` behaving similar to those for Python's standard :class:`dictionary <dict>`
 objects.  The :mod:`collections.abc` module provides a
 :class:`~collections.abc.MutableMapping`
-abstract base class to help create those methods from a base set of
-:meth:`__getitem__`, :meth:`__setitem__`, :meth:`__delitem__`, and :meth:`keys`.
+:term:`abstract base class` to help create those methods from a base set of
+:meth:`~object.__getitem__`, :meth:`~object.__setitem__`, :meth:`~object.__delitem__`, and :meth:`keys`.
 Mutable sequences should provide methods :meth:`append`, :meth:`count`,
 :meth:`index`, :meth:`extend`, :meth:`insert`, :meth:`pop`, :meth:`remove`,
-:meth:`reverse` and :meth:`sort`, like Python standard list objects.  Finally,
+:meth:`reverse` and :meth:`sort`, like Python standard :class:`list`
+objects. Finally,
 sequence types should implement addition (meaning concatenation) and
-multiplication (meaning repetition) by defining the methods :meth:`__add__`,
-:meth:`__radd__`, :meth:`__iadd__`, :meth:`__mul__`, :meth:`__rmul__` and
-:meth:`__imul__` described below; they should not define other numerical
+multiplication (meaning repetition) by defining the methods
+:meth:`~object.__add__`, :meth:`~object.__radd__`, :meth:`~object.__iadd__`,
+:meth:`~object.__mul__`, :meth:`~object.__rmul__` and :meth:`~object.__imul__`
+described below; they should not define other numerical
 operators.  It is recommended that both mappings and sequences implement the
-:meth:`__contains__` method to allow efficient use of the ``in`` operator; for
+:meth:`~object.__contains__` method to allow efficient use of the ``in``
+operator; for
 mappings, ``in`` should search the mapping's keys; for sequences, it should
 search through the values.  It is further recommended that both mappings and
-sequences implement the :meth:`__iter__` method to allow efficient iteration
+sequences implement the :meth:`~object.__iter__` method to allow efficient iteration
 through the container; for mappings, :meth:`__iter__` should iterate
 through the object's keys; for sequences, it should iterate through the values.
 
@@ -2774,7 +2796,8 @@ exception::
    TypeError: object of type 'C' has no len()
 
 The rationale behind this behaviour lies with a number of special methods such
-as :meth:`__hash__` and :meth:`__repr__` that are implemented by all objects,
+as :meth:`~object.__hash__` and :meth:`~object.__repr__` that are implemented
+by all objects,
 including type objects. If the implicit lookup of these methods used the
 conventional lookup process, they would fail when invoked on the type object
 itself::
@@ -2797,7 +2820,7 @@ the instance when looking up special methods::
 
 In addition to bypassing any instance attributes in the interest of
 correctness, implicit special method lookup generally also bypasses the
-:meth:`__getattribute__` method even of the object's metaclass::
+:meth:`~object.__getattribute__` method even of the object's metaclass::
 
    >>> class Meta(type):
    ...     def __getattribute__(*args):
@@ -2821,7 +2844,7 @@ correctness, implicit special method lookup generally also bypasses the
    >>> len(c)                      # Implicit lookup
    10
 
-Bypassing the :meth:`__getattribute__` machinery in this fashion
+Bypassing the :meth:`~object.__getattribute__` machinery in this fashion
 provides significant scope for speed optimisations within the
 interpreter, at the cost of some flexibility in the handling of
 special methods (the special method *must* be set on the class
@@ -2838,7 +2861,7 @@ Coroutines
 Awaitable Objects
 -----------------
 
-An :term:`awaitable` object generally implements an :meth:`__await__` method.
+An :term:`awaitable` object generally implements an :meth:`~object.__await__` method.
 :term:`Coroutine objects <coroutine>` returned from :keyword:`async def` functions
 are awaitable.
 
@@ -2846,7 +2869,7 @@ are awaitable.
 
    The :term:`generator iterator` objects returned from generators
    decorated with :func:`types.coroutine` or :func:`asyncio.coroutine`
-   are also awaitable, but they do not implement :meth:`__await__`.
+   are also awaitable, but they do not implement :meth:`~object.__await__`.
 
 .. method:: object.__await__(self)
 
@@ -2865,7 +2888,7 @@ Coroutine Objects
 -----------------
 
 :term:`Coroutine objects <coroutine>` are :term:`awaitable` objects.
-A coroutine's execution can be controlled by calling :meth:`__await__` and
+A coroutine's execution can be controlled by calling :meth:`~object.__await__` and
 iterating over the result.  When the coroutine has finished executing and
 returns, the iterator raises :exc:`StopIteration`, and the exception's
 :attr:`~StopIteration.value` attribute holds the return value.  If the
@@ -2884,7 +2907,7 @@ generators, coroutines do not directly support iteration.
 
    Starts or resumes execution of the coroutine.  If *value* is ``None``,
    this is equivalent to advancing the iterator returned by
-   :meth:`__await__`.  If *value* is not ``None``, this method delegates
+   :meth:`~object.__await__`.  If *value* is not ``None``, this method delegates
    to the :meth:`~generator.send` method of the iterator that caused
    the coroutine to suspend.  The result (return value,
    :exc:`StopIteration`, or other exception) is the same as when
@@ -2897,7 +2920,7 @@ generators, coroutines do not directly support iteration.
    the coroutine to suspend, if it has such a method.  Otherwise,
    the exception is raised at the suspension point.  The result
    (return value, :exc:`StopIteration`, or other exception) is the same as
-   when iterating over the :meth:`__await__` return value, described
+   when iterating over the :meth:`~object.__await__` return value, described
    above.  If the exception is not caught in the coroutine, it propagates
    back to the caller.
 
@@ -2951,11 +2974,11 @@ An example of an asynchronous iterable object::
 .. versionadded:: 3.5
 
 .. versionchanged:: 3.7
-   Prior to Python 3.7, ``__aiter__`` could return an *awaitable*
+   Prior to Python 3.7, :meth:`~object.__aiter__` could return an *awaitable*
    that would resolve to an
    :term:`asynchronous iterator <asynchronous iterator>`.
 
-   Starting with Python 3.7, ``__aiter__`` must return an
+   Starting with Python 3.7, :meth:`~object.__aiter__` must return an
    asynchronous iterator object.  Returning anything else
    will result in a :exc:`TypeError` error.
 
@@ -2998,8 +3021,9 @@ An example of an asynchronous context manager class::
    controlled conditions. It generally isn't a good idea though, since it can
    lead to some very strange behaviour if it is handled incorrectly.
 
-.. [#] The :meth:`__hash__`, :meth:`__iter__`, :meth:`__reversed__`, and
-   :meth:`__contains__` methods have special handling for this; others
+.. [#] The :meth:`~object.__hash__`, :meth:`~object.__iter__`,
+   :meth:`~object.__reversed__`, and :meth:`~object.__contains__` methods have
+   special handling for this; others
    will still raise a :exc:`TypeError`, but may do so by relying on
    the behavior that ``None`` is not callable.
 
@@ -3010,5 +3034,6 @@ An example of an asynchronous context manager class::
    *blocking* such fallback.
 
 .. [#] For operands of the same type, it is assumed that if the non-reflected
-   method -- such as :meth:`__add__` -- fails then the overall operation is not
+   method -- such as :meth:`~object.__add__` -- fails then the overall
+   operation is not
    supported, which is why the reflected method is not called.
index c3f58fc..d4aae29 100644 (file)
@@ -422,9 +422,9 @@ Yield expressions
 The yield expression is used when defining a :term:`generator` function
 or an :term:`asynchronous generator` function and
 thus can only be used in the body of a function definition.  Using a yield
-expression in a function's body causes that function to be a generator,
+expression in a function's body causes that function to be a generator function,
 and using it in an :keyword:`async def` function's body causes that
-coroutine function to be an asynchronous generator. For example::
+coroutine function to be an asynchronous generator function. For example::
 
     def gen():  # defines a generator function
         yield 123
index dd3c8e6..95d320f 100644 (file)
@@ -13,4 +13,4 @@ blurb
 
 # The theme used by the documentation is stored separately, so we need
 # to install that as well.
-python-docs-theme
+python-docs-theme>=2022.1
index 42101be..27f54cd 100644 (file)
@@ -56,8 +56,8 @@ class PEGLexer(RegexLexer):
             (_name + _text_ws + r"(\[[\w\d_\*]+?\])" + _text_ws + "(=)", bygroups(None, None, None, None, None),),
         ],
         "invalids": [
-            (r"^(\s+\|\s+invalid_\w+\s*\n)", bygroups(None)),
-            (r"^(\s+\|\s+incorrect_\w+\s*\n)", bygroups(None)),
+            (r"^(\s+\|\s+.*invalid_\w+.*\n)", bygroups(None)),
+            (r"^(\s+\|\s+.*incorrect_\w+.*\n)", bygroups(None)),
             (r"^(#.*invalid syntax.*(?:.|\n)*)", bygroups(None),),
         ],
         "root": [
index 0d780e3..f44cb0b 100644 (file)
@@ -797,7 +797,7 @@ using the :func:`next` built-in function; this example shows how it all works::
    >>> s = 'abc'
    >>> it = iter(s)
    >>> it
-   <iterator object at 0x00A1DB50>
+   <str_iterator object at 0x10c90e650>
    >>> next(it)
    'a'
    >>> next(it)
index a819756..fad8746 100644 (file)
@@ -395,9 +395,11 @@ Several other key features of this statement:
 
       from enum import Enum
       class Color(Enum):
-          RED = 0
-          GREEN = 1
-          BLUE = 2
+          RED = 'red'
+          GREEN = 'green'
+          BLUE = 'blue'
+
+      color = Color(input("Enter your choice of 'red', 'blue' or 'green': "))
 
       match color:
           case Color.RED:
index e42b380..927a672 100644 (file)
@@ -659,10 +659,12 @@ More on Conditions
 The conditions used in ``while`` and ``if`` statements can contain any
 operators, not just comparisons.
 
-The comparison operators ``in`` and ``not in`` check whether a value occurs
-(does not occur) in a sequence.  The operators ``is`` and ``is not`` compare
-whether two objects are really the same object.  All comparison operators have
-the same priority, which is lower than that of all numerical operators.
+
+The comparison operators ``in`` and ``not in`` are membership tests that
+determine whether a value is in (or not in) a container.  The operators ``is``
+and ``is not`` compare whether two objects are really the same object.  All
+comparison operators have the same priority, which is lower than that of all
+numerical operators.
 
 Comparisons can be chained.  For example, ``a < b == c`` tests whether ``a`` is
 less than ``b`` and moreover ``b`` equals ``c``.
index f2490d6..3f09db2 100644 (file)
@@ -329,41 +329,7 @@ be derived from the :exc:`Exception` class, either directly or indirectly.
 
 Exception classes can be defined which do anything any other class can do, but
 are usually kept simple, often only offering a number of attributes that allow
-information about the error to be extracted by handlers for the exception.  When
-creating a module that can raise several distinct errors, a common practice is
-to create a base class for exceptions defined by that module, and subclass that
-to create specific exception classes for different error conditions::
-
-   class Error(Exception):
-       """Base class for exceptions in this module."""
-       pass
-
-   class InputError(Error):
-       """Exception raised for errors in the input.
-
-       Attributes:
-           expression -- input expression in which the error occurred
-           message -- explanation of the error
-       """
-
-       def __init__(self, expression, message):
-           self.expression = expression
-           self.message = message
-
-   class TransitionError(Error):
-       """Raised when an operation attempts a state transition that's not
-       allowed.
-
-       Attributes:
-           previous -- state at beginning of transition
-           next -- attempted new state
-           message -- explanation of why the specific transition is not allowed
-       """
-
-       def __init__(self, previous, next, message):
-           self.previous = previous
-           self.next = next
-           self.message = message
+information about the error to be extracted by handlers for the exception.
 
 Most exceptions are defined with names that end in "Error", similar to the
 naming of the standard exceptions.
index f33265c..ac16160 100644 (file)
@@ -178,13 +178,13 @@ protocols. Two of the simplest are :mod:`urllib.request` for retrieving data
 from URLs and :mod:`smtplib` for sending mail::
 
    >>> from urllib.request import urlopen
-   >>> with urlopen('http://tycho.usno.navy.mil/cgi-bin/timer.pl') as response:
+   >>> with urlopen('http://worldtimeapi.org/api/timezone/etc/UTC.txt') as response:
    ...     for line in response:
-   ...         line = line.decode('utf-8')  # Decoding the binary data to text.
-   ...         if 'EST' in line or 'EDT' in line:  # look for Eastern Time
-   ...             print(line)
-
-   <BR>Nov. 25, 09:43:32 PM EST
+   ...         line = line.decode()             # Convert bytes to a str
+   ...         if line.startswith('datetime'):
+   ...             print(line.rstrip())         # Remove trailing newline
+   ...
+   datetime: 2022-01-01T01:36:47.689215+00:00
 
    >>> import smtplib
    >>> server = smtplib.SMTP('localhost')
index 4ee193f..c07523c 100644 (file)
@@ -704,6 +704,7 @@ are added to enable the warning.
 
 See :ref:`io-text-encoding` for more information.
 
+.. _new-feat-related-type-hints:
 
 New Features Related to Type Hints
 ==================================
@@ -1162,7 +1163,7 @@ Highlight the new :ref:`soft keywords <soft-keywords>` :keyword:`match`,
 :keyword:`case <match>`, and :keyword:`_ <wildcard-patterns>` in
 pattern-matching statements. However, this highlighting is not perfect
 and will be incorrect in some rare cases, including some ``_``-s in
-``case`` patterns.  (Contributed by Tal Einat in bpo-44010.)
+``case`` patterns.  (Contributed by Tal Einat in :issue:`44010`.)
 
 importlib.metadata
 ------------------
@@ -1418,14 +1419,14 @@ of types readily interpretable by type checkers.
 typing
 ------
 
-For major changes, see `New Features Related to Type Hints`_.
+For major changes, see :ref:`new-feat-related-type-hints`.
 
 The behavior of :class:`typing.Literal` was changed to conform with :pep:`586`
 and to match the behavior of static type checkers specified in the PEP.
 
 1. ``Literal`` now de-duplicates parameters.
 2. Equality comparisons between ``Literal`` objects are now order independent.
-3. ``Literal`` comparisons now respects types.  For example,
+3. ``Literal`` comparisons now respect types.  For example,
    ``Literal[0] == Literal[False]`` previously evaluated to ``True``.  It is
    now ``False``.  To support this change, the internally used type cache now
    supports differentiating types.
@@ -1642,13 +1643,12 @@ Deprecated
   :meth:`importlib.machinery.FrozenImporter.find_module`,
   :meth:`importlib.machinery.WindowsRegistryFinder.find_module`,
   :meth:`importlib.machinery.PathFinder.find_module`,
-  :meth:`importlib.abc.MetaPathFinder.find_module`),
+  :meth:`importlib.abc.MetaPathFinder.find_module` ),
   :meth:`importlib.abc.PathEntryFinder.find_module` (
-  :meth:`importlib.machinery.FileFinder.find_module`,
-  ), and
+  :meth:`importlib.machinery.FileFinder.find_module` ), and
   :meth:`importlib.abc.PathEntryFinder.find_loader` (
-  :meth:`importlib.machinery.FileFinder.find_loader`
-  now raise :exc:`DeprecationWarning` and are slated for removal in
+  :meth:`importlib.machinery.FileFinder.find_loader` )
+  now raise :exc:`DeprecationWarning` and are slated for removal in
   Python 3.12 (previously they were documented as deprecated in Python 3.4).
   (Contributed by Brett Cannon in :issue:`42135`.)
 
@@ -1689,7 +1689,7 @@ Deprecated
 * :func:`asyncio.get_event_loop` now emits a deprecation warning if there is
   no running event loop. In the future it will be an alias of
   :func:`~asyncio.get_running_loop`.
-  :mod:`asyncio` functions which implicitly create :class:`~asyncio.Future`
+  :mod:`asyncio` functions which implicitly create :class:`~asyncio.Future`
   or :class:`~asyncio.Task` objects now emit
   a deprecation warning if there is no running event loop and no explicit
   *loop* argument is passed: :func:`~asyncio.ensure_future`,
@@ -1829,7 +1829,7 @@ Removed
      running in different threads.
 
   Note that the low-level API will still accept ``loop``.
-  See `Changes in the Python API`_ for examples of how to replace existing code.
+  See :ref:`changes-python-api` for examples of how to replace existing code.
 
   (Contributed by Yurii Karabas, Andrew Svetlov, Yury Selivanov and Kyle Stanley
   in :issue:`42392`.)
@@ -1853,6 +1853,7 @@ Changes in the Python syntax
   following keyword.
   (Contributed by Serhiy Storchaka in :issue:`43833`).
 
+.. _changes-python-api:
 
 Changes in the Python API
 -------------------------
@@ -1974,7 +1975,7 @@ Build Changes
   (Contributed by Victor Stinner in :issue:`36020`.)
 
 * :mod:`sqlite3` requires SQLite 3.7.15 or higher. (Contributed by Sergey Fedoseev
-  and Erlend E. Aasland :issue:`40744` and :issue:`40810`.)
+  and Erlend E. Aasland in :issue:`40744` and :issue:`40810`.)
 
 * The :mod:`atexit` module must now always be built as a built-in module.
   (Contributed by Victor Stinner in :issue:`42639`.)
index bfd082b..4307b61 100644 (file)
@@ -71,15 +71,9 @@ struct _Py_unicode_state {
     PyObject *latin1[256];
     struct _Py_unicode_fs_codec fs_codec;
 
-    /* This dictionary holds all interned unicode strings.  Note that references
-       to strings in this dictionary are *not* counted in the string's ob_refcnt.
-       When the interned string reaches a refcnt of 0 the string deallocation
-       function will delete the reference from this dictionary.
-
-       Another way to look at this is that to say that the actual reference
-       count of a string is:  s->ob_refcnt + (s->state ? 2 : 0)
-    */
-    PyObject *interned;
+    // Unused member kept for ABI backward compatibility with Python 3.10.0:
+    // see bpo-46006.
+    PyObject *unused_interned;
 
     // Unicode identifiers (_Py_Identifier): see _PyUnicode_FromId()
     struct _Py_unicode_ids ids;
index f3505f8..a2e520b 100644 (file)
@@ -13,6 +13,13 @@ struct _mod;   // Type defined in pycore_ast.h
 typedef enum _block_type { FunctionBlock, ClassBlock, ModuleBlock, AnnotationBlock }
     _Py_block_ty;
 
+typedef enum _comprehension_type {
+    NoComprehension = 0,
+    ListComprehension = 1,
+    DictComprehension = 2,
+    SetComprehension = 3,
+    GeneratorExpression = 4 } _Py_comprehension_ty;
+
 struct _symtable_entry;
 
 struct symtable {
@@ -42,14 +49,14 @@ typedef struct _symtable_entry {
     PyObject *ste_varnames;  /* list of function parameters */
     PyObject *ste_children;  /* list of child blocks */
     PyObject *ste_directives;/* locations of global and nonlocal statements */
-    _Py_block_ty ste_type;   /* module, class, or function */
+    _Py_block_ty ste_type;   /* module, class or function */
     int ste_nested;      /* true if block is nested */
     unsigned ste_free : 1;        /* true if block has free variables */
     unsigned ste_child_free : 1;  /* true if a child block has free vars,
                                      including free refs to globals */
     unsigned ste_generator : 1;   /* true if namespace is a generator */
     unsigned ste_coroutine : 1;   /* true if namespace is a coroutine */
-    unsigned ste_comprehension : 1; /* true if namespace is a list comprehension */
+    _Py_comprehension_ty ste_comprehension;  /* Kind of comprehension (if any) */
     unsigned ste_varargs : 1;     /* true if block has varargs */
     unsigned ste_varkeywords : 1; /* true if block has varkeywords */
     unsigned ste_returns_value : 1;  /* true if namespace uses return with
index 9e8a560..5769674 100644 (file)
 /*--start constants--*/
 #define PY_MAJOR_VERSION        3
 #define PY_MINOR_VERSION        10
-#define PY_MICRO_VERSION        1
+#define PY_MICRO_VERSION        2
 #define PY_RELEASE_LEVEL        PY_RELEASE_LEVEL_FINAL
 #define PY_RELEASE_SERIAL       0
 
 /* Version as a string */
-#define PY_VERSION              "3.10.1"
+#define PY_VERSION              "3.10.2"
 /*--end constants--*/
 
 /* Version as a single 4-byte hex number, e.g. 0x010502B2 == 1.5.2b2.
diff --git a/LICENSE b/LICENSE
index 55cb8d3..02a5145 100644 (file)
--- a/LICENSE
+++ b/LICENSE
@@ -84,7 +84,7 @@ analyze, test, perform and/or display publicly, prepare derivative works,
 distribute, and otherwise use Python alone or in any derivative version,
 provided, however, that PSF's License Agreement and PSF's notice of copyright,
 i.e., "Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010,
-2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020, 2021 Python Software Foundation;
+2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020, 2021, 2022 Python Software Foundation;
 All Rights Reserved" are retained in Python alone or in any derivative version
 prepared by Licensee.
 
index 9eed24c..e177e4f 100644 (file)
@@ -392,6 +392,9 @@ class HelpFormatter(object):
         group_actions = set()
         inserts = {}
         for group in groups:
+            if not group._group_actions:
+                raise ValueError(f'empty group {group}')
+
             try:
                 start = actions.index(group._group_actions[0])
             except ValueError:
@@ -1669,7 +1672,8 @@ class ArgumentParser(_AttributeHolder, _ActionsContainer):
     """Object for parsing command line strings into Python objects.
 
     Keyword Arguments:
-        - prog -- The name of the program (default: sys.argv[0])
+        - prog -- The name of the program (default:
+            ``os.path.basename(sys.argv[0])``)
         - usage -- A usage message (default: auto-generated from arguments)
         - description -- A description of what the program does
         - epilog -- Text following the argument descriptions
index 7abaaca..5ab1acc 100644 (file)
@@ -258,13 +258,13 @@ class AbstractEventLoop:
         """Notification that a TimerHandle has been cancelled."""
         raise NotImplementedError
 
-    def call_soon(self, callback, *args):
-        return self.call_later(0, callback, *args)
+    def call_soon(self, callback, *args, context=None):
+        return self.call_later(0, callback, *args, context=context)
 
-    def call_later(self, delay, callback, *args):
+    def call_later(self, delay, callback, *args, context=None):
         raise NotImplementedError
 
-    def call_at(self, when, callback, *args):
+    def call_at(self, when, callback, *args, context=None):
         raise NotImplementedError
 
     def time(self):
@@ -280,7 +280,7 @@ class AbstractEventLoop:
 
     # Methods for interacting with threads.
 
-    def call_soon_threadsafe(self, callback, *args):
+    def call_soon_threadsafe(self, callback, *args, context=None):
         raise NotImplementedError
 
     def run_in_executor(self, executor, func, *args):
index 5e7cd79..da81ab4 100644 (file)
@@ -1,5 +1,10 @@
 """Selector and proactor event loops for Windows."""
 
+import sys
+
+if sys.platform != 'win32':  # pragma: no cover
+    raise ImportError('win32 only')
+
 import _overlapped
 import _winapi
 import errno
index 6095026..5c00f2e 100644 (file)
@@ -284,13 +284,14 @@ def wait(fs, timeout=None, return_when=ALL_COMPLETED):
         A named 2-tuple of sets. The first set, named 'done', contains the
         futures that completed (is finished or cancelled) before the wait
         completed. The second set, named 'not_done', contains uncompleted
-        futures.
+        futures. Duplicate futures given to *fs* are removed and will be 
+        returned only once.
     """
+    fs = set(fs)
     with _AcquireFutures(fs):
-        done = set(f for f in fs
-                   if f._state in [CANCELLED_AND_NOTIFIED, FINISHED])
-        not_done = set(fs) - done
-
+        done = {f for f in fs
+                   if f._state in [CANCELLED_AND_NOTIFIED, FINISHED]}
+        not_done = fs - done
         if (return_when == FIRST_COMPLETED) and done:
             return DoneAndNotDoneFutures(done, not_done)
         elif (return_when == FIRST_EXCEPTION) and done:
@@ -309,7 +310,7 @@ def wait(fs, timeout=None, return_when=ALL_COMPLETED):
             f._waiters.remove(waiter)
 
     done.update(waiter.finished_futures)
-    return DoneAndNotDoneFutures(done, set(fs) - done)
+    return DoneAndNotDoneFutures(done, fs - done)
 
 class Future(object):
     """Represents the result of an asynchronous computation."""
index d3c6536..bdb044e 100644 (file)
@@ -35,34 +35,24 @@ class FunctionTestCase(unittest.TestCase):
         # wasn't checked, and it even crashed Python.
         # Found by Greg Chapman.
 
-        try:
+        with self.assertRaises(TypeError):
             class X(object, Array):
                 _length_ = 5
                 _type_ = "i"
-        except TypeError:
-            pass
-
 
         from _ctypes import _Pointer
-        try:
+        with self.assertRaises(TypeError):
             class X(object, _Pointer):
                 pass
-        except TypeError:
-            pass
 
         from _ctypes import _SimpleCData
-        try:
+        with self.assertRaises(TypeError):
             class X(object, _SimpleCData):
                 _type_ = "i"
-        except TypeError:
-            pass
 
-        try:
+        with self.assertRaises(TypeError):
             class X(object, Structure):
                 _fields_ = []
-        except TypeError:
-            pass
-
 
     @need_symbol('c_wchar')
     def test_wchar_parm(self):
index 77ec852..305ceb4 100644 (file)
@@ -740,6 +740,7 @@ def _compose_mro(cls, types):
     # Remove entries which are already present in the __mro__ or unrelated.
     def is_related(typ):
         return (typ not in bases and hasattr(typ, '__mro__')
+                                 and not isinstance(typ, GenericAlias)
                                  and issubclass(cls, typ))
     types = [n for n in types if is_related(n)]
     # Remove entries which are strict bases of other entries (they will end up
@@ -837,6 +838,9 @@ def singledispatch(func):
             dispatch_cache[cls] = impl
         return impl
 
+    def _is_valid_dispatch_type(cls):
+        return isinstance(cls, type) and not isinstance(cls, GenericAlias)
+
     def register(cls, func=None):
         """generic_func.register(cls, func) -> func
 
@@ -844,9 +848,15 @@ def singledispatch(func):
 
         """
         nonlocal cache_token
-        if func is None:
-            if isinstance(cls, type):
+        if _is_valid_dispatch_type(cls):
+            if func is None:
                 return lambda f: register(cls, f)
+        else:
+            if func is not None:
+                raise TypeError(
+                    f"Invalid first argument to `register()`. "
+                    f"{cls!r} is not a class."
+                )
             ann = getattr(cls, '__annotations__', {})
             if not ann:
                 raise TypeError(
@@ -859,11 +869,12 @@ def singledispatch(func):
             # only import typing if annotation parsing is necessary
             from typing import get_type_hints
             argname, cls = next(iter(get_type_hints(func).items()))
-            if not isinstance(cls, type):
+            if not _is_valid_dispatch_type(cls):
                 raise TypeError(
                     f"Invalid annotation for {argname!r}. "
                     f"{cls!r} is not a class."
                 )
+
         registry[cls] = func
         if cache_token is None and hasattr(cls, '__abstractmethods__'):
             cache_token = get_cache_token()
index b3e8fb0..ec41ed3 100644 (file)
@@ -669,7 +669,7 @@ class Distribution:
         def make_condition(name):
             return name and f'extra == "{name}"'
 
-        def parse_condition(section):
+        def quoted_marker(section):
             section = section or ''
             extra, sep, markers = section.partition(':')
             if extra and markers:
@@ -677,8 +677,17 @@ class Distribution:
             conditions = list(filter(None, [markers, make_condition(extra)]))
             return '; ' + ' and '.join(conditions) if conditions else ''
 
+        def url_req_space(req):
+            """
+            PEP 508 requires a space between the url_spec and the quoted_marker.
+            Ref python/importlib_metadata#357.
+            """
+            # '@' is uniquely indicative of a url_req.
+            return ' ' * ('@' in req)
+
         for section in sections:
-            yield section.value + parse_condition(section.name)
+            space = url_req_space(section.value)
+            yield section.value + space + quoted_marker(section.name)
 
 
 class DistributionFinder(MetaPathFinder):
index 2c52bde..e4c21da 100644 (file)
@@ -133,7 +133,7 @@ def dump(obj, fp, *, skipkeys=False, ensure_ascii=True, check_circular=True,
 
     If ``check_circular`` is false, then the circular reference check
     for container types will be skipped and a circular reference will
-    result in an ``OverflowError`` (or worse).
+    result in an ``RecursionError`` (or worse).
 
     If ``allow_nan`` is false, then it will be a ``ValueError`` to
     serialize out of range ``float`` values (``nan``, ``inf``, ``-inf``)
@@ -195,7 +195,7 @@ def dumps(obj, *, skipkeys=False, ensure_ascii=True, check_circular=True,
 
     If ``check_circular`` is false, then the circular reference check
     for container types will be skipped and a circular reference will
-    result in an ``OverflowError`` (or worse).
+    result in an ``RecursionError`` (or worse).
 
     If ``allow_nan`` is false, then it will be a ``ValueError`` to
     serialize out of range ``float`` values (``nan``, ``inf``, ``-inf``) in
index c8c78b9..21bff2c 100644 (file)
@@ -116,7 +116,7 @@ class JSONEncoder(object):
 
         If check_circular is true, then lists, dicts, and custom encoded
         objects will be checked for circular references during encoding to
-        prevent an infinite recursion (which would cause an OverflowError).
+        prevent an infinite recursion (which would cause an RecursionError).
         Otherwise, no such check takes place.
 
         If allow_nan is true, then NaN, Infinity, and -Infinity will be
index 555f598..19bd2bc 100644 (file)
@@ -878,6 +878,7 @@ class Handler(Filterer):
         self._name = None
         self.level = _checkLevel(level)
         self.formatter = None
+        self._closed = False
         # Add the handler to the global _handlerList (for cleanup on shutdown)
         _addHandlerRef(self)
         self.createLock()
@@ -996,6 +997,7 @@ class Handler(Filterer):
         #get the module data lock, as we're updating a shared structure.
         _acquireLock()
         try:    #unlikely to raise an exception, but you never know...
+            self._closed = True
             if self._name and self._name in _handlers:
                 del _handlers[self._name]
         finally:
@@ -1184,6 +1186,8 @@ class FileHandler(StreamHandler):
             finally:
                 # Issue #19523: call unconditionally to
                 # prevent a handler leak when delay is set
+                # Also see Issue #42378: we also rely on
+                # self._closed being set to True there
                 StreamHandler.close(self)
         finally:
             self.release()
@@ -1203,10 +1207,15 @@ class FileHandler(StreamHandler):
 
         If the stream was not opened because 'delay' was specified in the
         constructor, open it before calling the superclass's emit.
+
+        If stream is not open, current mode is 'w' and `_closed=True`, record
+        will not be emitted (see Issue #42378).
         """
         if self.stream is None:
-            self.stream = self._open()
-        StreamHandler.emit(self, record)
+            if self.mode != 'w' or not self._closed:
+                self.stream = self._open()
+        if self.stream:
+            StreamHandler.emit(self, record)
 
     def __repr__(self):
         level = getLevelName(self.level)
index 4e8f0a8..61a3995 100644 (file)
@@ -1,4 +1,4 @@
-# Copyright 2001-2016 by Vinay Sajip. All Rights Reserved.
+# Copyright 2001-2021 by Vinay Sajip. All Rights Reserved.
 #
 # Permission to use, copy, modify, and distribute this software and its
 # documentation for any purpose and without fee is hereby granted,
@@ -18,7 +18,7 @@
 Additional handlers for the logging package for Python. The core package is
 based on PEP 282 and comments thereto in comp.lang.python.
 
-Copyright (C) 2001-2016 Vinay Sajip. All Rights Reserved.
+Copyright (C) 2001-2021 Vinay Sajip. All Rights Reserved.
 
 To use, simply 'import logging.handlers' and log away!
 """
@@ -366,9 +366,22 @@ class TimedRotatingFileHandler(BaseRotatingHandler):
         fileNames = os.listdir(dirName)
         result = []
         # See bpo-44753: Don't use the extension when computing the prefix.
-        prefix = os.path.splitext(baseName)[0] + "."
+        n, e = os.path.splitext(baseName)
+        prefix = n + '.'
         plen = len(prefix)
         for fileName in fileNames:
+            if self.namer is None:
+                # Our files will always start with baseName
+                if not fileName.startswith(baseName):
+                    continue
+            else:
+                # Our files could be just about anything after custom naming, but
+                # likely candidates are of the form
+                # foo.log.DATETIME_SUFFIX or foo.DATETIME_SUFFIX.log
+                if (not fileName.startswith(baseName) and fileName.endswith(e) and
+                    len(fileName) > (plen + 1) and not fileName[plen+1].isdigit()):
+                    continue
+
             if fileName[:plen] == prefix:
                 suffix = fileName[plen:]
                 # See bpo-45628: The date/time suffix could be anywhere in the
index 00c98ad..1b5cfe2 100644 (file)
@@ -1,5 +1,5 @@
 # -*- coding: utf-8 -*-
-# Autogenerated by Sphinx on Mon Dec  6 17:57:38 2021
+# Autogenerated by Sphinx on Thu Jan 13 18:49:56 2022
 topics = {'assert': 'The "assert" statement\n'
            '**********************\n'
            '\n'
@@ -1007,7 +1007,7 @@ topics = {'assert': 'The "assert" statement\n'
                      '"super(B,\n'
                      '   obj).m()" searches "obj.__class__.__mro__" for the '
                      'base class "A"\n'
-                     '   immediately preceding "B" and then invokes the '
+                     '   immediately following "B" and then invokes the '
                      'descriptor with the\n'
                      '   call: "A.__dict__[\'m\'].__get__(obj, '
                      'obj.__class__)".\n'
@@ -1038,14 +1038,15 @@ topics = {'assert': 'The "assert" statement\n'
                      'can be\n'
                      'overridden by instances.\n'
                      '\n'
-                     'Python methods (including "staticmethod()" and '
-                     '"classmethod()") are\n'
-                     'implemented as non-data descriptors.  Accordingly, '
-                     'instances can\n'
-                     'redefine and override methods.  This allows individual '
-                     'instances to\n'
-                     'acquire behaviors that differ from other instances of '
-                     'the same class.\n'
+                     'Python methods (including those decorated with '
+                     '"@staticmethod" and\n'
+                     '"@classmethod") are implemented as non-data '
+                     'descriptors.  Accordingly,\n'
+                     'instances can redefine and override methods.  This '
+                     'allows individual\n'
+                     'instances to acquire behaviors that differ from other '
+                     'instances of the\n'
+                     'same class.\n'
                      '\n'
                      'The "property()" function is implemented as a data '
                      'descriptor.\n'
@@ -1058,12 +1059,12 @@ topics = {'assert': 'The "assert" statement\n'
                      '\n'
                      '*__slots__* allow us to explicitly declare data members '
                      '(like\n'
-                     'properties) and deny the creation of *__dict__* and '
+                     'properties) and deny the creation of "__dict__" and '
                      '*__weakref__*\n'
                      '(unless explicitly declared in *__slots__* or available '
                      'in a parent.)\n'
                      '\n'
-                     'The space saved over using *__dict__* can be '
+                     'The space saved over using "__dict__" can be '
                      'significant. Attribute\n'
                      'lookup speed can be significantly improved as well.\n'
                      '\n'
@@ -1075,7 +1076,7 @@ topics = {'assert': 'The "assert" statement\n'
                      '*__slots__*\n'
                      '   reserves space for the declared variables and '
                      'prevents the\n'
-                     '   automatic creation of *__dict__* and *__weakref__* '
+                     '   automatic creation of "__dict__" and *__weakref__* '
                      'for each\n'
                      '   instance.\n'
                      '\n'
@@ -1084,11 +1085,11 @@ topics = {'assert': 'The "assert" statement\n'
                      '--------------------------\n'
                      '\n'
                      '* When inheriting from a class without *__slots__*, the '
-                     '*__dict__* and\n'
+                     '"__dict__" and\n'
                      '  *__weakref__* attribute of the instances will always '
                      'be accessible.\n'
                      '\n'
-                     '* Without a *__dict__* variable, instances cannot be '
+                     '* Without a "__dict__" variable, instances cannot be '
                      'assigned new\n'
                      '  variables not listed in the *__slots__* definition.  '
                      'Attempts to\n'
@@ -1102,28 +1103,28 @@ topics = {'assert': 'The "assert" statement\n'
                      '\n'
                      '* Without a *__weakref__* variable for each instance, '
                      'classes defining\n'
-                     '  *__slots__* do not support weak references to its '
-                     'instances. If weak\n'
-                     '  reference support is needed, then add '
+                     '  *__slots__* do not support "weak references" to its '
+                     'instances. If\n'
+                     '  weak reference support is needed, then add '
                      '"\'__weakref__\'" to the\n'
                      '  sequence of strings in the *__slots__* declaration.\n'
                      '\n'
                      '* *__slots__* are implemented at the class level by '
                      'creating\n'
-                     '  descriptors (Implementing Descriptors) for each '
-                     'variable name.  As a\n'
-                     '  result, class attributes cannot be used to set default '
-                     'values for\n'
-                     '  instance variables defined by *__slots__*; otherwise, '
-                     'the class\n'
-                     '  attribute would overwrite the descriptor assignment.\n'
+                     '  descriptors for each variable name.  As a result, '
+                     'class attributes\n'
+                     '  cannot be used to set default values for instance '
+                     'variables defined\n'
+                     '  by *__slots__*; otherwise, the class attribute would '
+                     'overwrite the\n'
+                     '  descriptor assignment.\n'
                      '\n'
                      '* The action of a *__slots__* declaration is not limited '
                      'to the class\n'
                      '  where it is defined.  *__slots__* declared in parents '
                      'are available\n'
                      '  in child classes. However, child subclasses will get a '
-                     '*__dict__*\n'
+                     '"__dict__"\n'
                      '  and *__weakref__* unless they also define *__slots__* '
                      '(which should\n'
                      '  only contain names of any *additional* slots).\n'
@@ -1143,13 +1144,19 @@ topics = {'assert': 'The "assert" statement\n'
                      '  “variable-length” built-in types such as "int", '
                      '"bytes" and "tuple".\n'
                      '\n'
-                     '* Any non-string iterable may be assigned to '
-                     '*__slots__*. Mappings may\n'
-                     '  also be used; however, in the future, special meaning '
-                     'may be\n'
-                     '  assigned to the values corresponding to each key.\n'
+                     '* Any non-string *iterable* may be assigned to '
+                     '*__slots__*.\n'
                      '\n'
-                     '* *__class__* assignment works only if both classes have '
+                     '* If a "dictionary" is used to assign *__slots__*, the '
+                     'dictionary keys\n'
+                     '  will be used as the slot names. The values of the '
+                     'dictionary can be\n'
+                     '  used to provide per-attribute docstrings that will be '
+                     'recognised by\n'
+                     '  "inspect.getdoc()" and displayed in the output of '
+                     '"help()".\n'
+                     '\n'
+                     '* "__class__" assignment works only if both classes have '
                      'the same\n'
                      '  *__slots__*.\n'
                      '\n'
@@ -1161,10 +1168,10 @@ topics = {'assert': 'The "assert" statement\n'
                      'violations\n'
                      '  raise "TypeError".\n'
                      '\n'
-                     '* If an iterator is used for *__slots__* then a '
-                     'descriptor is created\n'
-                     '  for each of the iterator’s values. However, the '
-                     '*__slots__*\n'
+                     '* If an *iterator* is used for *__slots__* then a '
+                     '*descriptor* is\n'
+                     '  created for each of the iterator’s values. However, '
+                     'the *__slots__*\n'
                      '  attribute will be an empty iterator.\n',
  'attribute-references': 'Attribute references\n'
                          '********************\n'
@@ -2378,33 +2385,6 @@ topics = {'assert': 'The "assert" statement\n'
              ':= a to b do"; e.g., "list(range(3))" returns the list "[0, 1, '
              '2]".\n'
              '\n'
-             'Note:\n'
-             '\n'
-             '  There is a subtlety when the sequence is being modified by the '
-             'loop\n'
-             '  (this can only occur for mutable sequences, e.g. lists).  An\n'
-             '  internal counter is used to keep track of which item is used '
-             'next,\n'
-             '  and this is incremented on each iteration.  When this counter '
-             'has\n'
-             '  reached the length of the sequence the loop terminates.  This '
-             'means\n'
-             '  that if the suite deletes the current (or a previous) item '
-             'from the\n'
-             '  sequence, the next item will be skipped (since it gets the '
-             'index of\n'
-             '  the current item which has already been treated).  Likewise, '
-             'if the\n'
-             '  suite inserts an item in the sequence before the current item, '
-             'the\n'
-             '  current item will be treated again the next time through the '
-             'loop.\n'
-             '  This can lead to nasty bugs that can be avoided by making a\n'
-             '  temporary copy using a slice of the whole sequence, e.g.,\n'
-             '\n'
-             '     for x in a[:]:\n'
-             '         if x < 0: a.remove(x)\n'
-             '\n'
              '\n'
              'The "try" statement\n'
              '===================\n'
@@ -4622,17 +4602,16 @@ topics = {'assert': 'The "assert" statement\n'
              'debugger will pause execution just before the first line of the\n'
              'module.\n'
              '\n'
-             'The typical usage to break into the debugger from a running '
-             'program is\n'
-             'to insert\n'
+             'The typical usage to break into the debugger is to insert:\n'
              '\n'
              '   import pdb; pdb.set_trace()\n'
              '\n'
-             'at the location you want to break into the debugger.  You can '
-             'then\n'
-             'step through the code following this statement, and continue '
-             'running\n'
-             'without the debugger using the "continue" command.\n'
+             'at the location you want to break into the debugger, and then '
+             'run the\n'
+             'program. You can then step through the code following this '
+             'statement,\n'
+             'and continue running without the debugger using the "continue"\n'
+             'command.\n'
              '\n'
              'New in version 3.7: The built-in "breakpoint()", when called '
              'with\n'
@@ -5894,30 +5873,7 @@ topics = {'assert': 'The "assert" statement\n'
         'all by the loop.  Hint: the built-in function "range()" returns an\n'
         'iterator of integers suitable to emulate the effect of Pascal’s "for '
         'i\n'
-        ':= a to b do"; e.g., "list(range(3))" returns the list "[0, 1, 2]".\n'
-        '\n'
-        'Note:\n'
-        '\n'
-        '  There is a subtlety when the sequence is being modified by the '
-        'loop\n'
-        '  (this can only occur for mutable sequences, e.g. lists).  An\n'
-        '  internal counter is used to keep track of which item is used next,\n'
-        '  and this is incremented on each iteration.  When this counter has\n'
-        '  reached the length of the sequence the loop terminates.  This '
-        'means\n'
-        '  that if the suite deletes the current (or a previous) item from '
-        'the\n'
-        '  sequence, the next item will be skipped (since it gets the index '
-        'of\n'
-        '  the current item which has already been treated).  Likewise, if '
-        'the\n'
-        '  suite inserts an item in the sequence before the current item, the\n'
-        '  current item will be treated again the next time through the loop.\n'
-        '  This can lead to nasty bugs that can be avoided by making a\n'
-        '  temporary copy using a slice of the whole sequence, e.g.,\n'
-        '\n'
-        '     for x in a[:]:\n'
-        '         if x < 0: a.remove(x)\n',
+        ':= a to b do"; e.g., "list(range(3))" returns the list "[0, 1, 2]".\n',
  'formatstrings': 'Format String Syntax\n'
                   '********************\n'
                   '\n'
@@ -8574,61 +8530,62 @@ topics = {'assert': 'The "assert" statement\n'
                    '\n'
                    'The following methods can be defined to implement '
                    'container objects.\n'
-                   'Containers usually are sequences (such as lists or tuples) '
-                   'or mappings\n'
-                   '(like dictionaries), but can represent other containers as '
-                   'well.  The\n'
-                   'first set of methods is used either to emulate a sequence '
-                   'or to\n'
-                   'emulate a mapping; the difference is that for a sequence, '
-                   'the\n'
-                   'allowable keys should be the integers *k* for which "0 <= '
-                   'k < N" where\n'
-                   '*N* is the length of the sequence, or slice objects, which '
-                   'define a\n'
-                   'range of items.  It is also recommended that mappings '
-                   'provide the\n'
-                   'methods "keys()", "values()", "items()", "get()", '
-                   '"clear()",\n'
-                   '"setdefault()", "pop()", "popitem()", "copy()", and '
-                   '"update()"\n'
-                   'behaving similar to those for Python’s standard dictionary '
+                   'Containers usually are *sequences* (such as "lists" or '
+                   '"tuples") or\n'
+                   '*mappings* (like "dictionaries"), but can represent other '
+                   'containers\n'
+                   'as well.  The first set of methods is used either to '
+                   'emulate a\n'
+                   'sequence or to emulate a mapping; the difference is that '
+                   'for a\n'
+                   'sequence, the allowable keys should be the integers *k* '
+                   'for which "0\n'
+                   '<= k < N" where *N* is the length of the sequence, or '
+                   '"slice" objects,\n'
+                   'which define a range of items.  It is also recommended '
+                   'that mappings\n'
+                   'provide the methods "keys()", "values()", "items()", '
+                   '"get()",\n'
+                   '"clear()", "setdefault()", "pop()", "popitem()", "copy()", '
+                   'and\n'
+                   '"update()" behaving similar to those for Python’s '
+                   'standard\n'
+                   '"dictionary" objects.  The "collections.abc" module '
+                   'provides a\n'
+                   '"MutableMapping" *abstract base class* to help create '
+                   'those methods\n'
+                   'from a base set of "__getitem__()", "__setitem__()", '
+                   '"__delitem__()",\n'
+                   'and "keys()". Mutable sequences should provide methods '
+                   '"append()",\n'
+                   '"count()", "index()", "extend()", "insert()", "pop()", '
+                   '"remove()",\n'
+                   '"reverse()" and "sort()", like Python standard "list" '
                    'objects.\n'
-                   'The "collections.abc" module provides a "MutableMapping" '
-                   'abstract base\n'
-                   'class to help create those methods from a base set of '
-                   '"__getitem__()",\n'
-                   '"__setitem__()", "__delitem__()", and "keys()". Mutable '
-                   'sequences\n'
-                   'should provide methods "append()", "count()", "index()", '
-                   '"extend()",\n'
-                   '"insert()", "pop()", "remove()", "reverse()" and "sort()", '
-                   'like Python\n'
-                   'standard list objects.  Finally, sequence types should '
-                   'implement\n'
-                   'addition (meaning concatenation) and multiplication '
+                   'Finally, sequence types should implement addition '
                    '(meaning\n'
-                   'repetition) by defining the methods "__add__()", '
-                   '"__radd__()",\n'
-                   '"__iadd__()", "__mul__()", "__rmul__()" and "__imul__()" '
-                   'described\n'
-                   'below; they should not define other numerical operators.  '
+                   'concatenation) and multiplication (meaning repetition) by '
+                   'defining the\n'
+                   'methods "__add__()", "__radd__()", "__iadd__()", '
+                   '"__mul__()",\n'
+                   '"__rmul__()" and "__imul__()" described below; they should '
+                   'not define\n'
+                   'other numerical operators.  It is recommended that both '
+                   'mappings and\n'
+                   'sequences implement the "__contains__()" method to allow '
+                   'efficient use\n'
+                   'of the "in" operator; for mappings, "in" should search the '
+                   'mapping’s\n'
+                   'keys; for sequences, it should search through the values.  '
                    'It is\n'
-                   'recommended that both mappings and sequences implement '
+                   'further recommended that both mappings and sequences '
+                   'implement the\n'
+                   '"__iter__()" method to allow efficient iteration through '
                    'the\n'
-                   '"__contains__()" method to allow efficient use of the "in" '
-                   'operator;\n'
-                   'for mappings, "in" should search the mapping’s keys; for '
-                   'sequences, it\n'
-                   'should search through the values.  It is further '
-                   'recommended that both\n'
-                   'mappings and sequences implement the "__iter__()" method '
-                   'to allow\n'
-                   'efficient iteration through the container; for mappings, '
-                   '"__iter__()"\n'
-                   'should iterate through the object’s keys; for sequences, '
-                   'it should\n'
-                   'iterate through the values.\n'
+                   'container; for mappings, "__iter__()" should iterate '
+                   'through the\n'
+                   'object’s keys; for sequences, it should iterate through '
+                   'the values.\n'
                    '\n'
                    'object.__len__(self)\n'
                    '\n'
@@ -9789,7 +9746,7 @@ topics = {'assert': 'The "assert" statement\n'
                  '"super(B,\n'
                  '   obj).m()" searches "obj.__class__.__mro__" for the base '
                  'class "A"\n'
-                 '   immediately preceding "B" and then invokes the descriptor '
+                 '   immediately following "B" and then invokes the descriptor '
                  'with the\n'
                  '   call: "A.__dict__[\'m\'].__get__(obj, obj.__class__)".\n'
                  '\n'
@@ -9819,13 +9776,14 @@ topics = {'assert': 'The "assert" statement\n'
                  'be\n'
                  'overridden by instances.\n'
                  '\n'
-                 'Python methods (including "staticmethod()" and '
-                 '"classmethod()") are\n'
-                 'implemented as non-data descriptors.  Accordingly, instances '
-                 'can\n'
-                 'redefine and override methods.  This allows individual '
-                 'instances to\n'
-                 'acquire behaviors that differ from other instances of the '
+                 'Python methods (including those decorated with '
+                 '"@staticmethod" and\n'
+                 '"@classmethod") are implemented as non-data descriptors.  '
+                 'Accordingly,\n'
+                 'instances can redefine and override methods.  This allows '
+                 'individual\n'
+                 'instances to acquire behaviors that differ from other '
+                 'instances of the\n'
                  'same class.\n'
                  '\n'
                  'The "property()" function is implemented as a data '
@@ -9839,12 +9797,12 @@ topics = {'assert': 'The "assert" statement\n'
                  '\n'
                  '*__slots__* allow us to explicitly declare data members '
                  '(like\n'
-                 'properties) and deny the creation of *__dict__* and '
+                 'properties) and deny the creation of "__dict__" and '
                  '*__weakref__*\n'
                  '(unless explicitly declared in *__slots__* or available in a '
                  'parent.)\n'
                  '\n'
-                 'The space saved over using *__dict__* can be significant. '
+                 'The space saved over using "__dict__" can be significant. '
                  'Attribute\n'
                  'lookup speed can be significantly improved as well.\n'
                  '\n'
@@ -9856,7 +9814,7 @@ topics = {'assert': 'The "assert" statement\n'
                  '*__slots__*\n'
                  '   reserves space for the declared variables and prevents '
                  'the\n'
-                 '   automatic creation of *__dict__* and *__weakref__* for '
+                 '   automatic creation of "__dict__" and *__weakref__* for '
                  'each\n'
                  '   instance.\n'
                  '\n'
@@ -9865,11 +9823,11 @@ topics = {'assert': 'The "assert" statement\n'
                  '~~~~~~~~~~~~~~~~~~~~~~~~~~\n'
                  '\n'
                  '* When inheriting from a class without *__slots__*, the '
-                 '*__dict__* and\n'
+                 '"__dict__" and\n'
                  '  *__weakref__* attribute of the instances will always be '
                  'accessible.\n'
                  '\n'
-                 '* Without a *__dict__* variable, instances cannot be '
+                 '* Without a "__dict__" variable, instances cannot be '
                  'assigned new\n'
                  '  variables not listed in the *__slots__* definition.  '
                  'Attempts to\n'
@@ -9882,28 +9840,28 @@ topics = {'assert': 'The "assert" statement\n'
                  '\n'
                  '* Without a *__weakref__* variable for each instance, '
                  'classes defining\n'
-                 '  *__slots__* do not support weak references to its '
-                 'instances. If weak\n'
-                 '  reference support is needed, then add "\'__weakref__\'" to '
-                 'the\n'
+                 '  *__slots__* do not support "weak references" to its '
+                 'instances. If\n'
+                 '  weak reference support is needed, then add '
+                 '"\'__weakref__\'" to the\n'
                  '  sequence of strings in the *__slots__* declaration.\n'
                  '\n'
                  '* *__slots__* are implemented at the class level by '
                  'creating\n'
-                 '  descriptors (Implementing Descriptors) for each variable '
-                 'name.  As a\n'
-                 '  result, class attributes cannot be used to set default '
-                 'values for\n'
-                 '  instance variables defined by *__slots__*; otherwise, the '
-                 'class\n'
-                 '  attribute would overwrite the descriptor assignment.\n'
+                 '  descriptors for each variable name.  As a result, class '
+                 'attributes\n'
+                 '  cannot be used to set default values for instance '
+                 'variables defined\n'
+                 '  by *__slots__*; otherwise, the class attribute would '
+                 'overwrite the\n'
+                 '  descriptor assignment.\n'
                  '\n'
                  '* The action of a *__slots__* declaration is not limited to '
                  'the class\n'
                  '  where it is defined.  *__slots__* declared in parents are '
                  'available\n'
                  '  in child classes. However, child subclasses will get a '
-                 '*__dict__*\n'
+                 '"__dict__"\n'
                  '  and *__weakref__* unless they also define *__slots__* '
                  '(which should\n'
                  '  only contain names of any *additional* slots).\n'
@@ -9923,13 +9881,18 @@ topics = {'assert': 'The "assert" statement\n'
                  '  “variable-length” built-in types such as "int", "bytes" '
                  'and "tuple".\n'
                  '\n'
-                 '* Any non-string iterable may be assigned to *__slots__*. '
-                 'Mappings may\n'
-                 '  also be used; however, in the future, special meaning may '
-                 'be\n'
-                 '  assigned to the values corresponding to each key.\n'
+                 '* Any non-string *iterable* may be assigned to *__slots__*.\n'
+                 '\n'
+                 '* If a "dictionary" is used to assign *__slots__*, the '
+                 'dictionary keys\n'
+                 '  will be used as the slot names. The values of the '
+                 'dictionary can be\n'
+                 '  used to provide per-attribute docstrings that will be '
+                 'recognised by\n'
+                 '  "inspect.getdoc()" and displayed in the output of '
+                 '"help()".\n'
                  '\n'
-                 '* *__class__* assignment works only if both classes have the '
+                 '* "__class__" assignment works only if both classes have the '
                  'same\n'
                  '  *__slots__*.\n'
                  '\n'
@@ -9941,9 +9904,9 @@ topics = {'assert': 'The "assert" statement\n'
                  'violations\n'
                  '  raise "TypeError".\n'
                  '\n'
-                 '* If an iterator is used for *__slots__* then a descriptor '
-                 'is created\n'
-                 '  for each of the iterator’s values. However, the '
+                 '* If an *iterator* is used for *__slots__* then a '
+                 '*descriptor* is\n'
+                 '  created for each of the iterator’s values. However, the '
                  '*__slots__*\n'
                  '  attribute will be an empty iterator.\n'
                  '\n'
@@ -9952,7 +9915,7 @@ topics = {'assert': 'The "assert" statement\n'
                  '==========================\n'
                  '\n'
                  'Whenever a class inherits from another class, '
-                 '*__init_subclass__* is\n'
+                 '"__init_subclass__()" is\n'
                  'called on that class. This way, it is possible to write '
                  'classes which\n'
                  'change the behavior of subclasses. This is closely related '
@@ -10152,10 +10115,10 @@ topics = {'assert': 'The "assert" statement\n'
                  'come from\n'
                  'the class definition). The "__prepare__" method should be '
                  'implemented\n'
-                 'as a "classmethod()". The namespace returned by '
-                 '"__prepare__" is\n'
-                 'passed in to "__new__", but when the final class object is '
-                 'created the\n'
+                 'as a "classmethod". The namespace returned by "__prepare__" '
+                 'is passed\n'
+                 'in to "__new__", but when the final class object is created '
+                 'the\n'
                  'namespace is copied into a new "dict".\n'
                  '\n'
                  'If the metaclass has no "__prepare__" attribute, then the '
@@ -10532,60 +10495,60 @@ topics = {'assert': 'The "assert" statement\n'
                  '\n'
                  'The following methods can be defined to implement container '
                  'objects.\n'
-                 'Containers usually are sequences (such as lists or tuples) '
-                 'or mappings\n'
-                 '(like dictionaries), but can represent other containers as '
-                 'well.  The\n'
-                 'first set of methods is used either to emulate a sequence or '
-                 'to\n'
-                 'emulate a mapping; the difference is that for a sequence, '
-                 'the\n'
-                 'allowable keys should be the integers *k* for which "0 <= k '
-                 '< N" where\n'
-                 '*N* is the length of the sequence, or slice objects, which '
-                 'define a\n'
-                 'range of items.  It is also recommended that mappings '
-                 'provide the\n'
-                 'methods "keys()", "values()", "items()", "get()", '
-                 '"clear()",\n'
-                 '"setdefault()", "pop()", "popitem()", "copy()", and '
-                 '"update()"\n'
-                 'behaving similar to those for Python’s standard dictionary '
+                 'Containers usually are *sequences* (such as "lists" or '
+                 '"tuples") or\n'
+                 '*mappings* (like "dictionaries"), but can represent other '
+                 'containers\n'
+                 'as well.  The first set of methods is used either to emulate '
+                 'a\n'
+                 'sequence or to emulate a mapping; the difference is that for '
+                 'a\n'
+                 'sequence, the allowable keys should be the integers *k* for '
+                 'which "0\n'
+                 '<= k < N" where *N* is the length of the sequence, or '
+                 '"slice" objects,\n'
+                 'which define a range of items.  It is also recommended that '
+                 'mappings\n'
+                 'provide the methods "keys()", "values()", "items()", '
+                 '"get()",\n'
+                 '"clear()", "setdefault()", "pop()", "popitem()", "copy()", '
+                 'and\n'
+                 '"update()" behaving similar to those for Python’s standard\n'
+                 '"dictionary" objects.  The "collections.abc" module provides '
+                 'a\n'
+                 '"MutableMapping" *abstract base class* to help create those '
+                 'methods\n'
+                 'from a base set of "__getitem__()", "__setitem__()", '
+                 '"__delitem__()",\n'
+                 'and "keys()". Mutable sequences should provide methods '
+                 '"append()",\n'
+                 '"count()", "index()", "extend()", "insert()", "pop()", '
+                 '"remove()",\n'
+                 '"reverse()" and "sort()", like Python standard "list" '
                  'objects.\n'
-                 'The "collections.abc" module provides a "MutableMapping" '
-                 'abstract base\n'
-                 'class to help create those methods from a base set of '
-                 '"__getitem__()",\n'
-                 '"__setitem__()", "__delitem__()", and "keys()". Mutable '
-                 'sequences\n'
-                 'should provide methods "append()", "count()", "index()", '
-                 '"extend()",\n'
-                 '"insert()", "pop()", "remove()", "reverse()" and "sort()", '
-                 'like Python\n'
-                 'standard list objects.  Finally, sequence types should '
-                 'implement\n'
-                 'addition (meaning concatenation) and multiplication '
-                 '(meaning\n'
-                 'repetition) by defining the methods "__add__()", '
-                 '"__radd__()",\n'
-                 '"__iadd__()", "__mul__()", "__rmul__()" and "__imul__()" '
-                 'described\n'
-                 'below; they should not define other numerical operators.  It '
-                 'is\n'
-                 'recommended that both mappings and sequences implement the\n'
-                 '"__contains__()" method to allow efficient use of the "in" '
-                 'operator;\n'
-                 'for mappings, "in" should search the mapping’s keys; for '
-                 'sequences, it\n'
-                 'should search through the values.  It is further recommended '
-                 'that both\n'
-                 'mappings and sequences implement the "__iter__()" method to '
-                 'allow\n'
-                 'efficient iteration through the container; for mappings, '
-                 '"__iter__()"\n'
-                 'should iterate through the object’s keys; for sequences, it '
-                 'should\n'
-                 'iterate through the values.\n'
+                 'Finally, sequence types should implement addition (meaning\n'
+                 'concatenation) and multiplication (meaning repetition) by '
+                 'defining the\n'
+                 'methods "__add__()", "__radd__()", "__iadd__()", '
+                 '"__mul__()",\n'
+                 '"__rmul__()" and "__imul__()" described below; they should '
+                 'not define\n'
+                 'other numerical operators.  It is recommended that both '
+                 'mappings and\n'
+                 'sequences implement the "__contains__()" method to allow '
+                 'efficient use\n'
+                 'of the "in" operator; for mappings, "in" should search the '
+                 'mapping’s\n'
+                 'keys; for sequences, it should search through the values.  '
+                 'It is\n'
+                 'further recommended that both mappings and sequences '
+                 'implement the\n'
+                 '"__iter__()" method to allow efficient iteration through '
+                 'the\n'
+                 'container; for mappings, "__iter__()" should iterate through '
+                 'the\n'
+                 'object’s keys; for sequences, it should iterate through the '
+                 'values.\n'
                  '\n'
                  'object.__len__(self)\n'
                  '\n'
@@ -11493,9 +11456,9 @@ topics = {'assert': 'The "assert" statement\n'
                    '      >>> from keyword import iskeyword\n'
                    '\n'
                    "      >>> 'hello'.isidentifier(), iskeyword('hello')\n"
-                   '      True, False\n'
+                   '      (True, False)\n'
                    "      >>> 'def'.isidentifier(), iskeyword('def')\n"
-                   '      True, True\n'
+                   '      (True, True)\n'
                    '\n'
                    'str.islower()\n'
                    '\n'
@@ -11846,7 +11809,7 @@ topics = {'assert': 'The "assert" statement\n'
                    "      >>> '   1   2   3   '.split()\n"
                    "      ['1', '2', '3']\n"
                    '\n'
-                   'str.splitlines([keepends])\n'
+                   'str.splitlines(keepends=False)\n'
                    '\n'
                    '   Return a list of the lines in the string, breaking at '
                    'line\n'
@@ -13203,14 +13166,14 @@ topics = {'assert': 'The "assert" statement\n'
           '"async\n'
           '      for" statement to execute the body of the function.\n'
           '\n'
-          '      Calling the asynchronous iterator’s "aiterator.__anext__()"\n'
-          '      method will return an *awaitable* which when awaited will\n'
-          '      execute until it provides a value using the "yield" '
-          'expression.\n'
-          '      When the function executes an empty "return" statement or '
-          'falls\n'
-          '      off the end, a "StopAsyncIteration" exception is raised and '
+          '      Calling the asynchronous iterator’s "aiterator.__anext__" '
+          'method\n'
+          '      will return an *awaitable* which when awaited will execute '
+          'until\n'
+          '      it provides a value using the "yield" expression.  When the\n'
+          '      function executes an empty "return" statement or falls off '
           'the\n'
+          '      end, a "StopAsyncIteration" exception is raised and the\n'
           '      asynchronous iterator will have reached the end of the set '
           'of\n'
           '      values to be yielded.\n'
@@ -13754,9 +13717,9 @@ topics = {'assert': 'The "assert" statement\n'
                  '"dict"\n'
                  'constructor.\n'
                  '\n'
-                 'class dict(**kwarg)\n'
-                 'class dict(mapping, **kwarg)\n'
-                 'class dict(iterable, **kwarg)\n'
+                 'class dict(**kwargs)\n'
+                 'class dict(mapping, **kwargs)\n'
+                 'class dict(iterable, **kwargs)\n'
                  '\n'
                  '   Return a new dictionary initialized from an optional '
                  'positional\n'
@@ -14406,6 +14369,14 @@ topics = {'assert': 'The "assert" statement\n'
              'Comparisons in\n'
              'the language reference.)\n'
              '\n'
+             'Forward and reversed iterators over mutable sequences access '
+             'values\n'
+             'using an index.  That index will continue to march forward (or\n'
+             'backward) even if the underlying sequence is mutated.  The '
+             'iterator\n'
+             'terminates only when an "IndexError" or a "StopIteration" is\n'
+             'encountered (or when the index drops below zero).\n'
+             '\n'
              'Notes:\n'
              '\n'
              '1. While the "in" and "not in" operations are used only for '
@@ -14877,7 +14848,8 @@ topics = {'assert': 'The "assert" statement\n'
              '\n'
              '   The arguments to the range constructor must be integers '
              '(either\n'
-             '   built-in "int" or any object that implements the "__index__"\n'
+             '   built-in "int" or any object that implements the '
+             '"__index__()"\n'
              '   special method).  If the *step* argument is omitted, it '
              'defaults to\n'
              '   "1". If the *start* argument is omitted, it defaults to "0". '
index d4a6d6f..50b215b 100644 (file)
@@ -1,6 +1,5 @@
 import _signal
 from _signal import *
-from functools import wraps as _wraps
 from enum import IntEnum as _IntEnum
 
 _globals = globals()
@@ -42,6 +41,16 @@ def _enum_to_int(value):
         return value
 
 
+# Similar to functools.wraps(), but only assign __doc__.
+# __module__ should be preserved,
+# __name__ and __qualname__ are already fine,
+# __annotations__ is not set.
+def _wraps(wrapped):
+    def decorator(wrapper):
+        wrapper.__doc__ = wrapped.__doc__
+        return wrapper
+    return decorator
+
 @_wraps(_signal.signal)
 def signal(signalnum, handler):
     handler = _signal.signal(_enum_to_int(signalnum), _enum_to_int(handler))
@@ -59,7 +68,6 @@ if 'pthread_sigmask' in _globals:
     def pthread_sigmask(how, mask):
         sigs_set = _signal.pthread_sigmask(how, mask)
         return set(_int_to_enum(x, Signals) for x in sigs_set)
-    pthread_sigmask.__doc__ = _signal.pthread_sigmask.__doc__
 
 
 if 'sigpending' in _globals:
@@ -73,7 +81,6 @@ if 'sigwait' in _globals:
     def sigwait(sigset):
         retsig = _signal.sigwait(sigset)
         return _int_to_enum(retsig, Signals)
-    sigwait.__doc__ = _signal.sigwait
 
 
 if 'valid_signals' in _globals:
index cfcc456..f662453 100644 (file)
@@ -374,7 +374,7 @@ def geometric_mean(data):
         return exp(fmean(map(log, data)))
     except ValueError:
         raise StatisticsError('geometric mean requires a non-empty dataset '
-                              ' containing positive numbers') from None
+                              'containing positive numbers') from None
 
 
 def harmonic_mean(data, weights=None):
index a316585..55d2808 100644 (file)
@@ -116,6 +116,21 @@ class GeneralTest(unittest.TestCase):
         atexit._run_exitfuncs()
         self.assertEqual(l, [5])
 
+    def test_atexit_with_unregistered_function(self):
+        # See bpo-46025 for more info
+        def func():
+            atexit.unregister(func)
+            1/0
+        atexit.register(func)
+        try:
+            with support.catch_unraisable_exception() as cm:
+                atexit._run_exitfuncs()
+                self.assertEqual(cm.unraisable.object, func)
+                self.assertEqual(cm.unraisable.exc_type, ZeroDivisionError)
+                self.assertEqual(type(cm.unraisable.exc_value), ZeroDivisionError)
+        finally:
+            atexit.unregister(func)
+
 
 if __name__ == "__main__":
     unittest.main()
index c83e44a..d0d63ef 100644 (file)
@@ -395,16 +395,12 @@ class MultiprocessTestRunner:
             worker.wait_stopped(start_time)
 
     def _get_result(self) -> QueueOutput | None:
-        if not any(worker.is_alive() for worker in self.workers):
-            # all worker threads are done: consume pending results
-            try:
-                return self.output.get(timeout=0)
-            except queue.Empty:
-                return None
-
         use_faulthandler = (self.ns.timeout is not None)
         timeout = PROGRESS_UPDATE
-        while True:
+
+        # bpo-46205: check the status of workers every iteration to avoid
+        # waiting forever on an empty queue.
+        while any(worker.is_alive() for worker in self.workers):
             if use_faulthandler:
                 faulthandler.dump_traceback_later(MAIN_PROCESS_TIMEOUT,
                                                   exit=True)
@@ -420,6 +416,12 @@ class MultiprocessTestRunner:
             if running and not self.ns.pgo:
                 self.log('running: %s' % ', '.join(running))
 
+        # all worker threads are done: consume pending results
+        try:
+            return self.output.get(timeout=0)
+        except queue.Empty:
+            return None
+
     def display_result(self, mp_result: MultiprocessResult) -> None:
         result = mp_result.result
 
index c62896f..94a35a6 100644 (file)
@@ -307,6 +307,6 @@ if __name__ == '__main__':
         f.write(cert)
 
     unmake_ca()
-    print("update Lib/test/test_ssl.py and Lib/test/test_asyncio/util.py")
+    print("update Lib/test/test_ssl.py and Lib/test/test_asyncio/utils.py")
     print_cert('keycert.pem')
     print_cert('keycert3.pem')
index ec49b2a..c96a540 100644 (file)
@@ -2582,6 +2582,13 @@ class TestMutuallyExclusiveGroupErrors(TestCase):
               '''
         self.assertEqual(parser.format_help(), textwrap.dedent(expected))
 
+    def test_empty_group(self):
+        # See issue 26952
+        parser = argparse.ArgumentParser()
+        group = parser.add_mutually_exclusive_group()
+        with self.assertRaises(ValueError):
+            parser.parse_args(['-h'])
+
 class MEMixin(object):
 
     def test_failures_when_not_required(self):
index 5691d42..f7ef23e 100644 (file)
@@ -643,7 +643,7 @@ class BaseEventLoopTests(test_utils.TestCase):
                                 'Exception in callback.*zero'),
                         exc_info=(ZeroDivisionError, MOCK_ANY, MOCK_ANY))
 
-        assert not mock_handler.called
+        self.assertFalse(mock_handler.called)
 
     def test_set_exc_handler_broken(self):
         def run_loop():
@@ -1003,22 +1003,26 @@ class MyProto(asyncio.Protocol):
         if create_future:
             self.done = asyncio.get_running_loop().create_future()
 
+    def _assert_state(self, *expected):
+        if self.state not in expected:
+            raise AssertionError(f'state: {self.state!r}, expected: {expected!r}')
+
     def connection_made(self, transport):
         self.transport = transport
-        assert self.state == 'INITIAL', self.state
+        self._assert_state('INITIAL')
         self.state = 'CONNECTED'
         transport.write(b'GET / HTTP/1.0\r\nHost: example.com\r\n\r\n')
 
     def data_received(self, data):
-        assert self.state == 'CONNECTED', self.state
+        self._assert_state('CONNECTED')
         self.nbytes += len(data)
 
     def eof_received(self):
-        assert self.state == 'CONNECTED', self.state
+        self._assert_state('CONNECTED')
         self.state = 'EOF'
 
     def connection_lost(self, exc):
-        assert self.state in ('CONNECTED', 'EOF'), self.state
+        self._assert_state('CONNECTED', 'EOF')
         self.state = 'CLOSED'
         if self.done:
             self.done.set_result(None)
@@ -1033,20 +1037,24 @@ class MyDatagramProto(asyncio.DatagramProtocol):
         if create_future:
             self.done = loop.create_future()
 
+    def _assert_state(self, expected):
+        if self.state != expected:
+            raise AssertionError(f'state: {self.state!r}, expected: {expected!r}')
+
     def connection_made(self, transport):
         self.transport = transport
-        assert self.state == 'INITIAL', self.state
+        self._assert_state('INITIAL')
         self.state = 'INITIALIZED'
 
     def datagram_received(self, data, addr):
-        assert self.state == 'INITIALIZED', self.state
+        self._assert_state('INITIALIZED')
         self.nbytes += len(data)
 
     def error_received(self, exc):
-        assert self.state == 'INITIALIZED', self.state
+        self._assert_state('INITIALIZED')
 
     def connection_lost(self, exc):
-        assert self.state == 'INITIALIZED', self.state
+        self._assert_state('INITIALIZED')
         self.state = 'CLOSED'
         if self.done:
             self.done.set_result(None)
@@ -1395,7 +1403,7 @@ class BaseEventLoopWithSelectorTests(test_utils.TestCase):
         addr = ('00:01:02:03:04:05', 1)
 
         def getaddrinfo(host, port, *args, **kw):
-            assert (host, port) == addr
+            self.assertEqual((host, port), addr)
             return [(999, 1, 999, '', (addr, 1))]
 
         m_socket.getaddrinfo = getaddrinfo
@@ -1694,7 +1702,7 @@ class BaseEventLoopWithSelectorTests(test_utils.TestCase):
             lambda: MyDatagramProto(create_future=True, loop=self.loop),
             family=socket.AF_UNIX)
         transport, protocol = self.loop.run_until_complete(fut)
-        assert transport._sock.family == socket.AF_UNIX
+        self.assertEqual(transport._sock.family, socket.AF_UNIX)
         transport.close()
         self.loop.run_until_complete(protocol.done)
         self.assertEqual('CLOSED', protocol.state)
index 778dd43..bed7b5d 100644 (file)
@@ -87,23 +87,27 @@ class MyBaseProto(asyncio.Protocol):
             self.connected = loop.create_future()
             self.done = loop.create_future()
 
+    def _assert_state(self, *expected):
+        if self.state not in expected:
+            raise AssertionError(f'state: {self.state!r}, expected: {expected!r}')
+
     def connection_made(self, transport):
         self.transport = transport
-        assert self.state == 'INITIAL', self.state
+        self._assert_state('INITIAL')
         self.state = 'CONNECTED'
         if self.connected:
             self.connected.set_result(None)
 
     def data_received(self, data):
-        assert self.state == 'CONNECTED', self.state
+        self._assert_state('CONNECTED')
         self.nbytes += len(data)
 
     def eof_received(self):
-        assert self.state == 'CONNECTED', self.state
+        self._assert_state('CONNECTED')
         self.state = 'EOF'
 
     def connection_lost(self, exc):
-        assert self.state in ('CONNECTED', 'EOF'), self.state
+        self._assert_state('CONNECTED', 'EOF')
         self.state = 'CLOSED'
         if self.done:
             self.done.set_result(None)
@@ -124,20 +128,24 @@ class MyDatagramProto(asyncio.DatagramProtocol):
         if loop is not None:
             self.done = loop.create_future()
 
+    def _assert_state(self, expected):
+        if self.state != expected:
+            raise AssertionError(f'state: {self.state!r}, expected: {expected!r}')
+
     def connection_made(self, transport):
         self.transport = transport
-        assert self.state == 'INITIAL', self.state
+        self._assert_state('INITIAL')
         self.state = 'INITIALIZED'
 
     def datagram_received(self, data, addr):
-        assert self.state == 'INITIALIZED', self.state
+        self._assert_state('INITIALIZED')
         self.nbytes += len(data)
 
     def error_received(self, exc):
-        assert self.state == 'INITIALIZED', self.state
+        self._assert_state('INITIALIZED')
 
     def connection_lost(self, exc):
-        assert self.state == 'INITIALIZED', self.state
+        self._assert_state('INITIALIZED')
         self.state = 'CLOSED'
         if self.done:
             self.done.set_result(None)
@@ -153,23 +161,27 @@ class MyReadPipeProto(asyncio.Protocol):
         if loop is not None:
             self.done = loop.create_future()
 
+    def _assert_state(self, expected):
+        if self.state != expected:
+            raise AssertionError(f'state: {self.state!r}, expected: {expected!r}')
+
     def connection_made(self, transport):
         self.transport = transport
-        assert self.state == ['INITIAL'], self.state
+        self._assert_state(['INITIAL'])
         self.state.append('CONNECTED')
 
     def data_received(self, data):
-        assert self.state == ['INITIAL', 'CONNECTED'], self.state
+        self._assert_state(['INITIAL', 'CONNECTED'])
         self.nbytes += len(data)
 
     def eof_received(self):
-        assert self.state == ['INITIAL', 'CONNECTED'], self.state
+        self._assert_state(['INITIAL', 'CONNECTED'])
         self.state.append('EOF')
 
     def connection_lost(self, exc):
         if 'EOF' not in self.state:
             self.state.append('EOF')  # It is okay if EOF is missed.
-        assert self.state == ['INITIAL', 'CONNECTED', 'EOF'], self.state
+        self._assert_state(['INITIAL', 'CONNECTED', 'EOF'])
         self.state.append('CLOSED')
         if self.done:
             self.done.set_result(None)
@@ -184,13 +196,17 @@ class MyWritePipeProto(asyncio.BaseProtocol):
         if loop is not None:
             self.done = loop.create_future()
 
+    def _assert_state(self, expected):
+        if self.state != expected:
+            raise AssertionError(f'state: {self.state!r}, expected: {expected!r}')
+
     def connection_made(self, transport):
         self.transport = transport
-        assert self.state == 'INITIAL', self.state
+        self._assert_state('INITIAL')
         self.state = 'CONNECTED'
 
     def connection_lost(self, exc):
-        assert self.state == 'CONNECTED', self.state
+        self._assert_state('CONNECTED')
         self.state = 'CLOSED'
         if self.done:
             self.done.set_result(None)
@@ -209,31 +225,35 @@ class MySubprocessProtocol(asyncio.SubprocessProtocol):
         self.got_data = {1: asyncio.Event(),
                          2: asyncio.Event()}
 
+    def _assert_state(self, expected):
+        if self.state != expected:
+            raise AssertionError(f'state: {self.state!r}, expected: {expected!r}')
+
     def connection_made(self, transport):
         self.transport = transport
-        assert self.state == 'INITIAL', self.state
+        self._assert_state('INITIAL')
         self.state = 'CONNECTED'
         self.connected.set_result(None)
 
     def connection_lost(self, exc):
-        assert self.state == 'CONNECTED', self.state
+        self._assert_state('CONNECTED')
         self.state = 'CLOSED'
         self.completed.set_result(None)
 
     def pipe_data_received(self, fd, data):
-        assert self.state == 'CONNECTED', self.state
+        self._assert_state('CONNECTED')
         self.data[fd] += data
         self.got_data[fd].set()
 
     def pipe_connection_lost(self, fd, exc):
-        assert self.state == 'CONNECTED', self.state
+        self._assert_state('CONNECTED')
         if exc:
             self.disconnects[fd].set_exception(exc)
         else:
             self.disconnects[fd].set_result(exc)
 
     def process_exited(self):
-        assert self.state == 'CONNECTED', self.state
+        self._assert_state('CONNECTED')
         self.returncode = self.transport.get_returncode()
 
 
@@ -1283,7 +1303,7 @@ class EventLoopTestsMixin:
             else:
                 break
         else:
-            assert False, 'Can not create socket.'
+            self.fail('Can not create socket.')
 
         f = self.loop.create_datagram_endpoint(
             lambda: MyDatagramProto(loop=self.loop), sock=sock)
index 42b9499..0c379e0 100644 (file)
@@ -54,30 +54,30 @@ class DuckFuture:
                 or self.__exception is not None)
 
     def result(self):
-        assert not self.cancelled()
+        self.assertFalse(self.cancelled())
         if self.__exception is not None:
             raise self.__exception
         return self.__result
 
     def exception(self):
-        assert not self.cancelled()
+        self.assertFalse(self.cancelled())
         return self.__exception
 
     def set_result(self, result):
-        assert not self.done()
-        assert result is not None
+        self.assertFalse(self.done())
+        self.assertIsNotNone(result)
         self.__result = result
 
     def set_exception(self, exception):
-        assert not self.done()
-        assert exception is not None
+        self.assertFalse(self.done())
+        self.assertIsNotNone(exception)
         self.__exception = exception
 
     def __iter__(self):
         if not self.done():
             self._asyncio_future_blocking = True
             yield self
-        assert self.done()
+        self.assertTrue(self.done())
         return self.result()
 
 
@@ -91,12 +91,12 @@ class DuckTests(test_utils.TestCase):
     def test_wrap_future(self):
         f = DuckFuture()
         g = asyncio.wrap_future(f)
-        assert g is f
+        self.assertIs(g, f)
 
     def test_ensure_future(self):
         f = DuckFuture()
         g = asyncio.ensure_future(f)
-        assert g is f
+        self.assertIs(g, f)
 
 
 class BaseFutureTests:
index 623db5f..e2cd2ba 100644 (file)
@@ -5,7 +5,6 @@ from unittest import mock
 import re
 
 import asyncio
-from test.test_asyncio import utils as test_utils
 
 STR_RGX_REPR = (
     r'^<(?P<class>.*?) object at (?P<address>.*?)'
@@ -20,22 +19,18 @@ def tearDownModule():
     asyncio.set_event_loop_policy(None)
 
 
-class LockTests(test_utils.TestCase):
+class LockTests(unittest.IsolatedAsyncioTestCase):
 
-    def setUp(self):
-        super().setUp()
-        self.loop = self.new_test_loop()
-
-    def test_repr(self):
+    async def test_repr(self):
         lock = asyncio.Lock()
         self.assertTrue(repr(lock).endswith('[unlocked]>'))
         self.assertTrue(RGX_REPR.match(repr(lock)))
 
-        self.loop.run_until_complete(lock.acquire())
+        await lock.acquire()
         self.assertTrue(repr(lock).endswith('[locked]>'))
         self.assertTrue(RGX_REPR.match(repr(lock)))
 
-    def test_lock(self):
+    async def test_lock(self):
         lock = asyncio.Lock()
 
         with self.assertWarns(DeprecationWarning):
@@ -47,11 +42,11 @@ class LockTests(test_utils.TestCase):
             TypeError,
             "object is not iterable"
         ):
-            self.loop.run_until_complete(acquire_lock())
+            await acquire_lock()
 
         self.assertFalse(lock.locked())
 
-    def test_lock_doesnt_accept_loop_parameter(self):
+    async def test_lock_doesnt_accept_loop_parameter(self):
         primitives_cls = [
             asyncio.Lock,
             asyncio.Condition,
@@ -60,17 +55,17 @@ class LockTests(test_utils.TestCase):
             asyncio.BoundedSemaphore,
         ]
 
+        loop = asyncio.get_running_loop()
+
         for cls in primitives_cls:
             with self.assertRaisesRegex(
                 TypeError,
                 rf'As of 3.10, the \*loop\* parameter was removed from '
                 rf'{cls.__name__}\(\) since it is no longer necessary'
             ):
-                cls(loop=self.loop)
+                cls(loop=loop)
 
-    def test_lock_by_with_statement(self):
-        loop = asyncio.new_event_loop()  # don't use TestLoop quirks
-        self.set_event_loop(loop)
+    async def test_lock_by_with_statement(self):
         primitives = [
             asyncio.Lock(),
             asyncio.Condition(),
@@ -91,15 +86,15 @@ class LockTests(test_utils.TestCase):
                         pass
                 self.assertFalse(lock.locked())
 
-        for primitive in primitives:
-            loop.run_until_complete(test(primitive))
-            self.assertFalse(primitive.locked())
+        for lock in primitives:
+            await test(lock)
+            self.assertFalse(lock.locked())
 
-    def test_acquire(self):
+    async def test_acquire(self):
         lock = asyncio.Lock()
         result = []
 
-        self.assertTrue(self.loop.run_until_complete(lock.acquire()))
+        self.assertTrue(await lock.acquire())
 
         async def c1(result):
             if await lock.acquire():
@@ -116,27 +111,27 @@ class LockTests(test_utils.TestCase):
                 result.append(3)
             return True
 
-        t1 = self.loop.create_task(c1(result))
-        t2 = self.loop.create_task(c2(result))
+        t1 = asyncio.create_task(c1(result))
+        t2 = asyncio.create_task(c2(result))
 
-        test_utils.run_briefly(self.loop)
+        await asyncio.sleep(0)
         self.assertEqual([], result)
 
         lock.release()
-        test_utils.run_briefly(self.loop)
+        await asyncio.sleep(0)
         self.assertEqual([1], result)
 
-        test_utils.run_briefly(self.loop)
+        await asyncio.sleep(0)
         self.assertEqual([1], result)
 
-        t3 = self.loop.create_task(c3(result))
+        t3 = asyncio.create_task(c3(result))
 
         lock.release()
-        test_utils.run_briefly(self.loop)
+        await asyncio.sleep(0)
         self.assertEqual([1, 2], result)
 
         lock.release()
-        test_utils.run_briefly(self.loop)
+        await asyncio.sleep(0)
         self.assertEqual([1, 2, 3], result)
 
         self.assertTrue(t1.done())
@@ -146,18 +141,17 @@ class LockTests(test_utils.TestCase):
         self.assertTrue(t3.done())
         self.assertTrue(t3.result())
 
-    def test_acquire_cancel(self):
+    async def test_acquire_cancel(self):
         lock = asyncio.Lock()
-        self.assertTrue(self.loop.run_until_complete(lock.acquire()))
+        self.assertTrue(await lock.acquire())
 
-        task = self.loop.create_task(lock.acquire())
-        self.loop.call_soon(task.cancel)
-        self.assertRaises(
-            asyncio.CancelledError,
-            self.loop.run_until_complete, task)
+        task = asyncio.create_task(lock.acquire())
+        asyncio.get_running_loop().call_soon(task.cancel)
+        with self.assertRaises(asyncio.CancelledError):
+            await task
         self.assertFalse(lock._waiters)
 
-    def test_cancel_race(self):
+    async def test_cancel_race(self):
         # Several tasks:
         # - A acquires the lock
         # - B is blocked in acquire()
@@ -182,15 +176,15 @@ class LockTests(test_utils.TestCase):
             finally:
                 lock.release()
 
-        fa = self.loop.create_future()
-        ta = self.loop.create_task(lockit('A', fa))
-        test_utils.run_briefly(self.loop)
+        fa = asyncio.get_running_loop().create_future()
+        ta = asyncio.create_task(lockit('A', fa))
+        await asyncio.sleep(0)
         self.assertTrue(lock.locked())
-        tb = self.loop.create_task(lockit('B', None))
-        test_utils.run_briefly(self.loop)
+        tb = asyncio.create_task(lockit('B', None))
+        await asyncio.sleep(0)
         self.assertEqual(len(lock._waiters), 1)
-        tc = self.loop.create_task(lockit('C', None))
-        test_utils.run_briefly(self.loop)
+        tc = asyncio.create_task(lockit('C', None))
+        await asyncio.sleep(0)
         self.assertEqual(len(lock._waiters), 2)
 
         # Create the race and check.
@@ -198,16 +192,17 @@ class LockTests(test_utils.TestCase):
         fa.set_result(None)
         tb.cancel()
         self.assertTrue(lock._waiters[0].cancelled())
-        test_utils.run_briefly(self.loop)
+        await asyncio.sleep(0)
         self.assertFalse(lock.locked())
         self.assertTrue(ta.done())
         self.assertTrue(tb.cancelled())
-        self.assertTrue(tc.done())
+        await tc
 
-    def test_cancel_release_race(self):
+    async def test_cancel_release_race(self):
         # Issue 32734
         # Acquire 4 locks, cancel second, release first
         # and 2 locks are taken at once.
+        loop = asyncio.get_running_loop()
         lock = asyncio.Lock()
         lock_count = 0
         call_count = 0
@@ -219,27 +214,23 @@ class LockTests(test_utils.TestCase):
             await lock.acquire()
             lock_count += 1
 
-        async def lockandtrigger():
-            await lock.acquire()
-            self.loop.call_soon(trigger)
-
         def trigger():
             t1.cancel()
             lock.release()
 
-        t0 = self.loop.create_task(lockandtrigger())
-        t1 = self.loop.create_task(lockit())
-        t2 = self.loop.create_task(lockit())
-        t3 = self.loop.create_task(lockit())
+        await lock.acquire()
 
-        # First loop acquires all
-        test_utils.run_briefly(self.loop)
-        self.assertTrue(t0.done())
+        t1 = asyncio.create_task(lockit())
+        t2 = asyncio.create_task(lockit())
+        t3 = asyncio.create_task(lockit())
 
-        # Second loop calls trigger
-        test_utils.run_briefly(self.loop)
-        # Third loop calls cancellation
-        test_utils.run_briefly(self.loop)
+        # Start scheduled tasks
+        await asyncio.sleep(0)
+
+        loop.call_soon(trigger)
+        with self.assertRaises(asyncio.CancelledError):
+            # Wait for cancellation
+            await t1
 
         # Make sure only one lock was taken
         self.assertEqual(lock_count, 1)
@@ -249,62 +240,56 @@ class LockTests(test_utils.TestCase):
 
         # Cleanup the task that is stuck on acquire.
         t3.cancel()
-        test_utils.run_briefly(self.loop)
+        await asyncio.sleep(0)
         self.assertTrue(t3.cancelled())
 
-    def test_finished_waiter_cancelled(self):
+    async def test_finished_waiter_cancelled(self):
         lock = asyncio.Lock()
 
-        ta = self.loop.create_task(lock.acquire())
-        test_utils.run_briefly(self.loop)
+        await lock.acquire()
         self.assertTrue(lock.locked())
 
-        tb = self.loop.create_task(lock.acquire())
-        test_utils.run_briefly(self.loop)
+        tb = asyncio.create_task(lock.acquire())
+        await asyncio.sleep(0)
         self.assertEqual(len(lock._waiters), 1)
 
         # Create a second waiter, wake up the first, and cancel it.
         # Without the fix, the second was not woken up.
-        tc = self.loop.create_task(lock.acquire())
-        lock.release()
+        tc = asyncio.create_task(lock.acquire())
         tb.cancel()
-        test_utils.run_briefly(self.loop)
+        lock.release()
+        await asyncio.sleep(0)
 
         self.assertTrue(lock.locked())
-        self.assertTrue(ta.done())
         self.assertTrue(tb.cancelled())
 
-    def test_release_not_acquired(self):
+        # Cleanup
+        await tc
+
+    async def test_release_not_acquired(self):
         lock = asyncio.Lock()
 
         self.assertRaises(RuntimeError, lock.release)
 
-    def test_release_no_waiters(self):
+    async def test_release_no_waiters(self):
         lock = asyncio.Lock()
-        self.loop.run_until_complete(lock.acquire())
+        await lock.acquire()
         self.assertTrue(lock.locked())
 
         lock.release()
         self.assertFalse(lock.locked())
 
-    def test_context_manager(self):
-        async def f():
-            lock = asyncio.Lock()
-            self.assertFalse(lock.locked())
-
-            async with lock:
-                self.assertTrue(lock.locked())
-
-            self.assertFalse(lock.locked())
+    async def test_context_manager(self):
+        lock = asyncio.Lock()
+        self.assertFalse(lock.locked())
 
-        self.loop.run_until_complete(f())
+        async with lock:
+            self.assertTrue(lock.locked())
 
+        self.assertFalse(lock.locked())
 
-class EventTests(test_utils.TestCase):
 
-    def setUp(self):
-        super().setUp()
-        self.loop = self.new_test_loop()
+class EventTests(unittest.IsolatedAsyncioTestCase):
 
     def test_repr(self):
         ev = asyncio.Event()
@@ -320,7 +305,7 @@ class EventTests(test_utils.TestCase):
         self.assertTrue('waiters:1' in repr(ev))
         self.assertTrue(RGX_REPR.match(repr(ev)))
 
-    def test_wait(self):
+    async def test_wait(self):
         ev = asyncio.Event()
         self.assertFalse(ev.is_set())
 
@@ -338,16 +323,16 @@ class EventTests(test_utils.TestCase):
             if await ev.wait():
                 result.append(3)
 
-        t1 = self.loop.create_task(c1(result))
-        t2 = self.loop.create_task(c2(result))
+        t1 = asyncio.create_task(c1(result))
+        t2 = asyncio.create_task(c2(result))
 
-        test_utils.run_briefly(self.loop)
+        await asyncio.sleep(0)
         self.assertEqual([], result)
 
-        t3 = self.loop.create_task(c3(result))
+        t3 = asyncio.create_task(c3(result))
 
         ev.set()
-        test_utils.run_briefly(self.loop)
+        await asyncio.sleep(0)
         self.assertEqual([3, 1, 2], result)
 
         self.assertTrue(t1.done())
@@ -357,24 +342,23 @@ class EventTests(test_utils.TestCase):
         self.assertTrue(t3.done())
         self.assertIsNone(t3.result())
 
-    def test_wait_on_set(self):
+    async def test_wait_on_set(self):
         ev = asyncio.Event()
         ev.set()
 
-        res = self.loop.run_until_complete(ev.wait())
+        res = await ev.wait()
         self.assertTrue(res)
 
-    def test_wait_cancel(self):
+    async def test_wait_cancel(self):
         ev = asyncio.Event()
 
-        wait = self.loop.create_task(ev.wait())
-        self.loop.call_soon(wait.cancel)
-        self.assertRaises(
-            asyncio.CancelledError,
-            self.loop.run_until_complete, wait)
+        wait = asyncio.create_task(ev.wait())
+        asyncio.get_running_loop().call_soon(wait.cancel)
+        with self.assertRaises(asyncio.CancelledError):
+            await wait
         self.assertFalse(ev._waiters)
 
-    def test_clear(self):
+    async def test_clear(self):
         ev = asyncio.Event()
         self.assertFalse(ev.is_set())
 
@@ -384,7 +368,7 @@ class EventTests(test_utils.TestCase):
         ev.clear()
         self.assertFalse(ev.is_set())
 
-    def test_clear_with_waiters(self):
+    async def test_clear_with_waiters(self):
         ev = asyncio.Event()
         result = []
 
@@ -393,8 +377,8 @@ class EventTests(test_utils.TestCase):
                 result.append(1)
             return True
 
-        t = self.loop.create_task(c1(result))
-        test_utils.run_briefly(self.loop)
+        t = asyncio.create_task(c1(result))
+        await asyncio.sleep(0)
         self.assertEqual([], result)
 
         ev.set()
@@ -405,7 +389,7 @@ class EventTests(test_utils.TestCase):
         ev.set()
         self.assertEqual(1, len(ev._waiters))
 
-        test_utils.run_briefly(self.loop)
+        await asyncio.sleep(0)
         self.assertEqual([1], result)
         self.assertEqual(0, len(ev._waiters))
 
@@ -413,13 +397,9 @@ class EventTests(test_utils.TestCase):
         self.assertTrue(t.result())
 
 
-class ConditionTests(test_utils.TestCase):
-
-    def setUp(self):
-        super().setUp()
-        self.loop = self.new_test_loop()
+class ConditionTests(unittest.IsolatedAsyncioTestCase):
 
-    def test_wait(self):
+    async def test_wait(self):
         cond = asyncio.Condition()
         result = []
 
@@ -441,37 +421,37 @@ class ConditionTests(test_utils.TestCase):
                 result.append(3)
             return True
 
-        t1 = self.loop.create_task(c1(result))
-        t2 = self.loop.create_task(c2(result))
-        t3 = self.loop.create_task(c3(result))
+        t1 = asyncio.create_task(c1(result))
+        t2 = asyncio.create_task(c2(result))
+        t3 = asyncio.create_task(c3(result))
 
-        test_utils.run_briefly(self.loop)
+        await asyncio.sleep(0)
         self.assertEqual([], result)
         self.assertFalse(cond.locked())
 
-        self.assertTrue(self.loop.run_until_complete(cond.acquire()))
+        self.assertTrue(await cond.acquire())
         cond.notify()
-        test_utils.run_briefly(self.loop)
+        await asyncio.sleep(0)
         self.assertEqual([], result)
         self.assertTrue(cond.locked())
 
         cond.release()
-        test_utils.run_briefly(self.loop)
+        await asyncio.sleep(0)
         self.assertEqual([1], result)
         self.assertTrue(cond.locked())
 
         cond.notify(2)
-        test_utils.run_briefly(self.loop)
+        await asyncio.sleep(0)
         self.assertEqual([1], result)
         self.assertTrue(cond.locked())
 
         cond.release()
-        test_utils.run_briefly(self.loop)
+        await asyncio.sleep(0)
         self.assertEqual([1, 2], result)
         self.assertTrue(cond.locked())
 
         cond.release()
-        test_utils.run_briefly(self.loop)
+        await asyncio.sleep(0)
         self.assertEqual([1, 2, 3], result)
         self.assertTrue(cond.locked())
 
@@ -482,49 +462,47 @@ class ConditionTests(test_utils.TestCase):
         self.assertTrue(t3.done())
         self.assertTrue(t3.result())
 
-    def test_wait_cancel(self):
+    async def test_wait_cancel(self):
         cond = asyncio.Condition()
-        self.loop.run_until_complete(cond.acquire())
+        await cond.acquire()
 
-        wait = self.loop.create_task(cond.wait())
-        self.loop.call_soon(wait.cancel)
-        self.assertRaises(
-            asyncio.CancelledError,
-            self.loop.run_until_complete, wait)
+        wait = asyncio.create_task(cond.wait())
+        asyncio.get_running_loop().call_soon(wait.cancel)
+        with self.assertRaises(asyncio.CancelledError):
+            await wait
         self.assertFalse(cond._waiters)
         self.assertTrue(cond.locked())
 
-    def test_wait_cancel_contested(self):
+    async def test_wait_cancel_contested(self):
         cond = asyncio.Condition()
 
-        self.loop.run_until_complete(cond.acquire())
+        await cond.acquire()
         self.assertTrue(cond.locked())
 
-        wait_task = self.loop.create_task(cond.wait())
-        test_utils.run_briefly(self.loop)
+        wait_task = asyncio.create_task(cond.wait())
+        await asyncio.sleep(0)
         self.assertFalse(cond.locked())
 
         # Notify, but contest the lock before cancelling
-        self.loop.run_until_complete(cond.acquire())
+        await cond.acquire()
         self.assertTrue(cond.locked())
         cond.notify()
-        self.loop.call_soon(wait_task.cancel)
-        self.loop.call_soon(cond.release)
+        asyncio.get_running_loop().call_soon(wait_task.cancel)
+        asyncio.get_running_loop().call_soon(cond.release)
 
         try:
-            self.loop.run_until_complete(wait_task)
+            await wait_task
         except asyncio.CancelledError:
             # Should not happen, since no cancellation points
             pass
 
         self.assertTrue(cond.locked())
 
-    def test_wait_cancel_after_notify(self):
+    async def test_wait_cancel_after_notify(self):
         # See bpo-32841
         waited = False
 
         cond = asyncio.Condition()
-        cond._loop = self.loop
 
         async def wait_on_cond():
             nonlocal waited
@@ -532,27 +510,26 @@ class ConditionTests(test_utils.TestCase):
                 waited = True  # Make sure this area was reached
                 await cond.wait()
 
-        waiter = asyncio.ensure_future(wait_on_cond(), loop=self.loop)
-        test_utils.run_briefly(self.loop)  # Start waiting
+        waiter = asyncio.create_task(wait_on_cond())
+        await asyncio.sleep(0)  # Start waiting
 
-        self.loop.run_until_complete(cond.acquire())
+        await cond.acquire()
         cond.notify()
-        test_utils.run_briefly(self.loop)  # Get to acquire()
+        await asyncio.sleep(0)  # Get to acquire()
         waiter.cancel()
-        test_utils.run_briefly(self.loop)  # Activate cancellation
+        await asyncio.sleep(0)  # Activate cancellation
         cond.release()
-        test_utils.run_briefly(self.loop)  # Cancellation should occur
+        await asyncio.sleep(0)  # Cancellation should occur
 
         self.assertTrue(waiter.cancelled())
         self.assertTrue(waited)
 
-    def test_wait_unacquired(self):
+    async def test_wait_unacquired(self):
         cond = asyncio.Condition()
-        self.assertRaises(
-            RuntimeError,
-            self.loop.run_until_complete, cond.wait())
+        with self.assertRaises(RuntimeError):
+            await cond.wait()
 
-    def test_wait_for(self):
+    async def test_wait_for(self):
         cond = asyncio.Condition()
         presult = False
 
@@ -568,40 +545,38 @@ class ConditionTests(test_utils.TestCase):
                 cond.release()
             return True
 
-        t = self.loop.create_task(c1(result))
+        t = asyncio.create_task(c1(result))
 
-        test_utils.run_briefly(self.loop)
+        await asyncio.sleep(0)
         self.assertEqual([], result)
 
-        self.loop.run_until_complete(cond.acquire())
+        await cond.acquire()
         cond.notify()
         cond.release()
-        test_utils.run_briefly(self.loop)
+        await asyncio.sleep(0)
         self.assertEqual([], result)
 
         presult = True
-        self.loop.run_until_complete(cond.acquire())
+        await cond.acquire()
         cond.notify()
         cond.release()
-        test_utils.run_briefly(self.loop)
+        await asyncio.sleep(0)
         self.assertEqual([1], result)
 
         self.assertTrue(t.done())
         self.assertTrue(t.result())
 
-    def test_wait_for_unacquired(self):
+    async def test_wait_for_unacquired(self):
         cond = asyncio.Condition()
 
         # predicate can return true immediately
-        res = self.loop.run_until_complete(cond.wait_for(lambda: [1, 2, 3]))
+        res = await cond.wait_for(lambda: [1, 2, 3])
         self.assertEqual([1, 2, 3], res)
 
-        self.assertRaises(
-            RuntimeError,
-            self.loop.run_until_complete,
-            cond.wait_for(lambda: False))
+        with self.assertRaises(RuntimeError):
+            await cond.wait_for(lambda: False)
 
-    def test_notify(self):
+    async def test_notify(self):
         cond = asyncio.Condition()
         result = []
 
@@ -626,24 +601,24 @@ class ConditionTests(test_utils.TestCase):
                 cond.release()
             return True
 
-        t1 = self.loop.create_task(c1(result))
-        t2 = self.loop.create_task(c2(result))
-        t3 = self.loop.create_task(c3(result))
+        t1 = asyncio.create_task(c1(result))
+        t2 = asyncio.create_task(c2(result))
+        t3 = asyncio.create_task(c3(result))
 
-        test_utils.run_briefly(self.loop)
+        await asyncio.sleep(0)
         self.assertEqual([], result)
 
-        self.loop.run_until_complete(cond.acquire())
+        await cond.acquire()
         cond.notify(1)
         cond.release()
-        test_utils.run_briefly(self.loop)
+        await asyncio.sleep(0)
         self.assertEqual([1], result)
 
-        self.loop.run_until_complete(cond.acquire())
+        await cond.acquire()
         cond.notify(1)
         cond.notify(2048)
         cond.release()
-        test_utils.run_briefly(self.loop)
+        await asyncio.sleep(0)
         self.assertEqual([1, 2, 3], result)
 
         self.assertTrue(t1.done())
@@ -653,7 +628,7 @@ class ConditionTests(test_utils.TestCase):
         self.assertTrue(t3.done())
         self.assertTrue(t3.result())
 
-    def test_notify_all(self):
+    async def test_notify_all(self):
         cond = asyncio.Condition()
 
         result = []
@@ -672,16 +647,16 @@ class ConditionTests(test_utils.TestCase):
                 cond.release()
             return True
 
-        t1 = self.loop.create_task(c1(result))
-        t2 = self.loop.create_task(c2(result))
+        t1 = asyncio.create_task(c1(result))
+        t2 = asyncio.create_task(c2(result))
 
-        test_utils.run_briefly(self.loop)
+        await asyncio.sleep(0)
         self.assertEqual([], result)
 
-        self.loop.run_until_complete(cond.acquire())
+        await cond.acquire()
         cond.notify_all()
         cond.release()
-        test_utils.run_briefly(self.loop)
+        await asyncio.sleep(0)
         self.assertEqual([1, 2], result)
 
         self.assertTrue(t1.done())
@@ -697,12 +672,12 @@ class ConditionTests(test_utils.TestCase):
         cond = asyncio.Condition()
         self.assertRaises(RuntimeError, cond.notify_all)
 
-    def test_repr(self):
+    async def test_repr(self):
         cond = asyncio.Condition()
         self.assertTrue('unlocked' in repr(cond))
         self.assertTrue(RGX_REPR.match(repr(cond)))
 
-        self.loop.run_until_complete(cond.acquire())
+        await cond.acquire()
         self.assertTrue('locked' in repr(cond))
 
         cond._waiters.append(mock.Mock())
@@ -713,17 +688,14 @@ class ConditionTests(test_utils.TestCase):
         self.assertTrue('waiters:2' in repr(cond))
         self.assertTrue(RGX_REPR.match(repr(cond)))
 
-    def test_context_manager(self):
-        async def f():
-            cond = asyncio.Condition()
-            self.assertFalse(cond.locked())
-            async with cond:
-                self.assertTrue(cond.locked())
-            self.assertFalse(cond.locked())
-
-        self.loop.run_until_complete(f())
+    async def test_context_manager(self):
+        cond = asyncio.Condition()
+        self.assertFalse(cond.locked())
+        async with cond:
+            self.assertTrue(cond.locked())
+        self.assertFalse(cond.locked())
 
-    def test_explicit_lock(self):
+    async def test_explicit_lock(self):
         async def f(lock=None, cond=None):
             if lock is None:
                 lock = asyncio.Lock()
@@ -744,12 +716,12 @@ class ConditionTests(test_utils.TestCase):
             self.assertFalse(cond.locked())
 
         # All should work in the same way.
-        self.loop.run_until_complete(f())
-        self.loop.run_until_complete(f(asyncio.Lock()))
+        await f()
+        await f(asyncio.Lock())
         lock = asyncio.Lock()
-        self.loop.run_until_complete(f(lock, asyncio.Condition(lock)))
+        await f(lock, asyncio.Condition(lock))
 
-    def test_ambiguous_loops(self):
+    async def test_ambiguous_loops(self):
         loop = asyncio.new_event_loop()
         self.addCleanup(loop.close)
 
@@ -784,38 +756,28 @@ class ConditionTests(test_utils.TestCase):
                 ):
                     await cond.wait()
 
-        self.loop.run_until_complete(wrong_loop_in_lock())
-        self.loop.run_until_complete(wrong_loop_in_cond())
-
-    def test_timeout_in_block(self):
-        loop = asyncio.new_event_loop()
-        self.addCleanup(loop.close)
+        await wrong_loop_in_lock()
+        await wrong_loop_in_cond()
 
-        async def task_timeout():
-            condition = asyncio.Condition()
-            async with condition:
-                with self.assertRaises(asyncio.TimeoutError):
-                    await asyncio.wait_for(condition.wait(), timeout=0.5)
+    async def test_timeout_in_block(self):
+        condition = asyncio.Condition()
+        async with condition:
+            with self.assertRaises(asyncio.TimeoutError):
+                await asyncio.wait_for(condition.wait(), timeout=0.5)
 
-        loop.run_until_complete(task_timeout())
 
-
-class SemaphoreTests(test_utils.TestCase):
-
-    def setUp(self):
-        super().setUp()
-        self.loop = self.new_test_loop()
+class SemaphoreTests(unittest.IsolatedAsyncioTestCase):
 
     def test_initial_value_zero(self):
         sem = asyncio.Semaphore(0)
         self.assertTrue(sem.locked())
 
-    def test_repr(self):
+    async def test_repr(self):
         sem = asyncio.Semaphore()
         self.assertTrue(repr(sem).endswith('[unlocked, value:1]>'))
         self.assertTrue(RGX_REPR.match(repr(sem)))
 
-        self.loop.run_until_complete(sem.acquire())
+        await sem.acquire()
         self.assertTrue(repr(sem).endswith('[locked]>'))
         self.assertTrue('waiters' not in repr(sem))
         self.assertTrue(RGX_REPR.match(repr(sem)))
@@ -828,7 +790,7 @@ class SemaphoreTests(test_utils.TestCase):
         self.assertTrue('waiters:2' in repr(sem))
         self.assertTrue(RGX_REPR.match(repr(sem)))
 
-    def test_semaphore(self):
+    async def test_semaphore(self):
         sem = asyncio.Semaphore()
         self.assertEqual(1, sem._value)
 
@@ -841,7 +803,7 @@ class SemaphoreTests(test_utils.TestCase):
             TypeError,
             "'Semaphore' object is not iterable",
         ):
-            self.loop.run_until_complete(acquire_lock())
+            await acquire_lock()
 
         self.assertFalse(sem.locked())
         self.assertEqual(1, sem._value)
@@ -849,12 +811,12 @@ class SemaphoreTests(test_utils.TestCase):
     def test_semaphore_value(self):
         self.assertRaises(ValueError, asyncio.Semaphore, -1)
 
-    def test_acquire(self):
+    async def test_acquire(self):
         sem = asyncio.Semaphore(3)
         result = []
 
-        self.assertTrue(self.loop.run_until_complete(sem.acquire()))
-        self.assertTrue(self.loop.run_until_complete(sem.acquire()))
+        self.assertTrue(await sem.acquire())
+        self.assertTrue(await sem.acquire())
         self.assertFalse(sem.locked())
 
         async def c1(result):
@@ -877,23 +839,23 @@ class SemaphoreTests(test_utils.TestCase):
             result.append(4)
             return True
 
-        t1 = self.loop.create_task(c1(result))
-        t2 = self.loop.create_task(c2(result))
-        t3 = self.loop.create_task(c3(result))
+        t1 = asyncio.create_task(c1(result))
+        t2 = asyncio.create_task(c2(result))
+        t3 = asyncio.create_task(c3(result))
 
-        test_utils.run_briefly(self.loop)
+        await asyncio.sleep(0)
         self.assertEqual([1], result)
         self.assertTrue(sem.locked())
         self.assertEqual(2, len(sem._waiters))
         self.assertEqual(0, sem._value)
 
-        t4 = self.loop.create_task(c4(result))
+        t4 = asyncio.create_task(c4(result))
 
         sem.release()
         sem.release()
         self.assertEqual(2, sem._value)
 
-        test_utils.run_briefly(self.loop)
+        await asyncio.sleep(0)
         self.assertEqual(0, sem._value)
         self.assertEqual(3, len(result))
         self.assertTrue(sem.locked())
@@ -908,64 +870,64 @@ class SemaphoreTests(test_utils.TestCase):
 
         # cleanup locked semaphore
         sem.release()
-        self.loop.run_until_complete(asyncio.gather(*race_tasks))
+        await asyncio.gather(*race_tasks)
 
-    def test_acquire_cancel(self):
+    async def test_acquire_cancel(self):
         sem = asyncio.Semaphore()
-        self.loop.run_until_complete(sem.acquire())
+        await sem.acquire()
 
-        acquire = self.loop.create_task(sem.acquire())
-        self.loop.call_soon(acquire.cancel)
-        self.assertRaises(
-            asyncio.CancelledError,
-            self.loop.run_until_complete, acquire)
+        acquire = asyncio.create_task(sem.acquire())
+        asyncio.get_running_loop().call_soon(acquire.cancel)
+        with self.assertRaises(asyncio.CancelledError):
+            await acquire
         self.assertTrue((not sem._waiters) or
                         all(waiter.done() for waiter in sem._waiters))
 
-    def test_acquire_cancel_before_awoken(self):
+    async def test_acquire_cancel_before_awoken(self):
         sem = asyncio.Semaphore(value=0)
 
-        t1 = self.loop.create_task(sem.acquire())
-        t2 = self.loop.create_task(sem.acquire())
-        t3 = self.loop.create_task(sem.acquire())
-        t4 = self.loop.create_task(sem.acquire())
+        t1 = asyncio.create_task(sem.acquire())
+        t2 = asyncio.create_task(sem.acquire())
+        t3 = asyncio.create_task(sem.acquire())
+        t4 = asyncio.create_task(sem.acquire())
 
-        test_utils.run_briefly(self.loop)
+        await asyncio.sleep(0)
 
-        sem.release()
         t1.cancel()
         t2.cancel()
+        sem.release()
 
-        test_utils.run_briefly(self.loop)
+        await asyncio.sleep(0)
         num_done = sum(t.done() for t in [t3, t4])
         self.assertEqual(num_done, 1)
+        self.assertTrue(t3.done())
+        self.assertFalse(t4.done())
 
         t3.cancel()
         t4.cancel()
-        test_utils.run_briefly(self.loop)
+        await asyncio.sleep(0)
 
-    def test_acquire_hang(self):
+    async def test_acquire_hang(self):
         sem = asyncio.Semaphore(value=0)
 
-        t1 = self.loop.create_task(sem.acquire())
-        t2 = self.loop.create_task(sem.acquire())
+        t1 = asyncio.create_task(sem.acquire())
+        t2 = asyncio.create_task(sem.acquire())
+        await asyncio.sleep(0)
 
-        test_utils.run_briefly(self.loop)
-
-        sem.release()
         t1.cancel()
-
-        test_utils.run_briefly(self.loop)
+        sem.release()
+        await asyncio.sleep(0)
         self.assertTrue(sem.locked())
+        self.assertTrue(t2.done())
 
     def test_release_not_acquired(self):
         sem = asyncio.BoundedSemaphore()
 
         self.assertRaises(ValueError, sem.release)
 
-    def test_release_no_waiters(self):
+    async def test_release_no_waiters(self):
         sem = asyncio.Semaphore()
-        self.loop.run_until_complete(sem.acquire())
+        await sem.acquire()
         self.assertTrue(sem.locked())
 
         sem.release()
index 01c6986..0a5466a 100644 (file)
@@ -36,25 +36,29 @@ class MySendfileProto(asyncio.Protocol):
         self.data = bytearray()
         self.close_after = close_after
 
+    def _assert_state(self, *expected):
+        if self.state not in expected:
+            raise AssertionError(f'state: {self.state!r}, expected: {expected!r}')
+
     def connection_made(self, transport):
         self.transport = transport
-        assert self.state == 'INITIAL', self.state
+        self._assert_state('INITIAL')
         self.state = 'CONNECTED'
         if self.connected:
             self.connected.set_result(None)
 
     def eof_received(self):
-        assert self.state == 'CONNECTED', self.state
+        self._assert_state('CONNECTED')
         self.state = 'EOF'
 
     def connection_lost(self, exc):
-        assert self.state in ('CONNECTED', 'EOF'), self.state
+        self._assert_state('CONNECTED', 'EOF')
         self.state = 'CLOSED'
         if self.done:
             self.done.set_result(None)
 
     def data_received(self, data):
-        assert self.state == 'CONNECTED', self.state
+        self._assert_state('CONNECTED')
         self.nbytes += len(data)
         self.data.extend(data)
         super().data_received(data)
index d8a5df8..ab022a3 100644 (file)
@@ -23,24 +23,28 @@ class MyProto(asyncio.Protocol):
             self.connected = loop.create_future()
             self.done = loop.create_future()
 
+    def _assert_state(self, *expected):
+        if self.state not in expected:
+            raise AssertionError(f'state: {self.state!r}, expected: {expected!r}')
+
     def connection_made(self, transport):
         self.transport = transport
-        assert self.state == 'INITIAL', self.state
+        self._assert_state('INITIAL')
         self.state = 'CONNECTED'
         if self.connected:
             self.connected.set_result(None)
         transport.write(b'GET / HTTP/1.0\r\nHost: example.com\r\n\r\n')
 
     def data_received(self, data):
-        assert self.state == 'CONNECTED', self.state
+        self._assert_state('CONNECTED')
         self.nbytes += len(data)
 
     def eof_received(self):
-        assert self.state == 'CONNECTED', self.state
+        self._assert_state('CONNECTED')
         self.state = 'EOF'
 
     def connection_lost(self, exc):
-        assert self.state in ('CONNECTED', 'EOF'), self.state
+        self._assert_state('CONNECTED', 'EOF')
         self.state = 'CLOSED'
         if self.done:
             self.done.set_result(None)
@@ -451,7 +455,7 @@ class BaseSockTestsMixin:
                 else:
                     break
             else:
-                assert False, 'Can not create socket.'
+                self.fail('Can not create socket.')
 
             f = self.loop.create_connection(
                 lambda: MyProto(loop=self.loop), sock=sock)
index a47e43d..22a216a 100644 (file)
@@ -383,9 +383,9 @@ class BaseStartTLS(func_tests.FunctionalTestCaseMixin):
             def get_buffer(self, sizehint):
                 return self.buf
 
-            def buffer_updated(self, nsize):
-                assert nsize == 1
-                self.on_data.set_result(bytes(self.buf[:nsize]))
+            def buffer_updated(slf, nsize):
+                self.assertEqual(nsize, 1)
+                slf.on_data.set_result(bytes(slf.buf[:nsize]))
 
         class ClientProtoSecond(asyncio.Protocol):
             def __init__(self, on_data, on_eof):
index a6ea24c..227b227 100644 (file)
@@ -987,10 +987,10 @@ os.close(fd)
             wr.close()
             f = wr.wait_closed()
             self.loop.run_until_complete(f)
-            assert rd.at_eof()
+            self.assertTrue(rd.at_eof())
             f = rd.read()
             data = self.loop.run_until_complete(f)
-            assert data == b''
+            self.assertEqual(data, b'')
 
         self.assertEqual(messages, [])
 
index 773d505..1c05944 100644 (file)
@@ -329,7 +329,7 @@ class BaseTaskTests:
         self.set_event_loop(loop)
         fut = asyncio.ensure_future(Aw(coro()), loop=loop)
         loop.run_until_complete(fut)
-        assert fut.result() == 'ok'
+        self.assertEqual(fut.result(), 'ok')
 
     def test_ensure_future_neither(self):
         with self.assertRaises(TypeError):
@@ -1155,7 +1155,7 @@ class BaseTaskTests:
 
         async def main():
             result = await asyncio.wait_for(inner(), timeout=.01)
-            assert result == 1
+            self.assertEqual(result, 1)
 
         asyncio.run(main())
 
index 6436385..c342285 100644 (file)
@@ -34,7 +34,8 @@ def EXITCODE(exitcode):
 
 
 def SIGNAL(signum):
-    assert 1 <= signum <= 68
+    if not 1 <= signum <= 68:
+        raise AssertionError(f'invalid signum {signum}')
     return 32768 - signum
 
 
index 3765194..0b9cde6 100644 (file)
@@ -409,12 +409,13 @@ class TestLoop(base_events.BaseEventLoop):
             return False
 
     def assert_writer(self, fd, callback, *args):
-        assert fd in self.writers, 'fd {} is not registered'.format(fd)
+        if fd not in self.writers:
+            raise AssertionError(f'fd {fd} is not registered')
         handle = self.writers[fd]
-        assert handle._callback == callback, '{!r} != {!r}'.format(
-            handle._callback, callback)
-        assert handle._args == args, '{!r} != {!r}'.format(
-            handle._args, args)
+        if handle._callback != callback:
+            raise AssertionError(f'{handle._callback!r} != {callback!r}')
+        if handle._args != args:
+            raise AssertionError(f'{handle._args!r} != {args!r}')
 
     def _ensure_fd_no_transport(self, fd):
         if not isinstance(fd, int):
@@ -530,7 +531,8 @@ class TestCase(unittest.TestCase):
                         thread.join()
 
     def set_event_loop(self, loop, *, cleanup=True):
-        assert loop is not None
+        if loop is None:
+            raise AssertionError('loop is None')
         # ensure that the event loop is passed explicitly in asyncio
         events.set_event_loop(None)
         if cleanup:
index 974e3d0..ccb9d53 100644 (file)
@@ -631,6 +631,14 @@ class CAPITest(unittest.TestCase):
         s = _testcapi.pyobject_bytes_from_null()
         self.assertEqual(s, b'<NULL>')
 
+    def test_Py_CompileString(self):
+        # Check that Py_CompileString respects the coding cookie
+        _compile = _testcapi.Py_CompileString
+        code = b"# -*- coding: latin1 -*-\nprint('\xc2\xa4')\n"
+        result = _compile(code)
+        expected = compile(code, "<string>", "exec")
+        self.assertEqual(result.co_consts, expected.co_consts)
+
 
 class TestPendingCalls(unittest.TestCase):
 
@@ -842,8 +850,13 @@ class PyMemDebugTests(unittest.TestCase):
 
     def check(self, code):
         with support.SuppressCrashReport():
-            out = assert_python_failure('-c', code,
-                                        PYTHONMALLOC=self.PYTHONMALLOC)
+            out = assert_python_failure(
+                '-c', code,
+                PYTHONMALLOC=self.PYTHONMALLOC,
+                # FreeBSD: instruct jemalloc to not fill freed() memory
+                # with junk byte 0x5a, see JEMALLOC(3)
+                MALLOC_CONF="junk:false",
+            )
         stderr = out.err
         return stderr.decode('ascii', 'replace')
 
@@ -913,7 +926,11 @@ class PyMemDebugTests(unittest.TestCase):
             except _testcapi.error:
                 os._exit(1)
         ''')
-        assert_python_ok('-c', code, PYTHONMALLOC=self.PYTHONMALLOC)
+        assert_python_ok(
+            '-c', code,
+            PYTHONMALLOC=self.PYTHONMALLOC,
+            MALLOC_CONF="junk:false",
+        )
 
     def test_pyobject_null_is_freed(self):
         self.check_pyobject_is_freed('check_pyobject_null_is_freed')
@@ -1013,14 +1030,6 @@ class Test_ModuleStateAccess(unittest.TestCase):
                 with self.assertRaises(TypeError):
                     increment_count(1, 2, 3)
 
-    def test_Py_CompileString(self):
-        # Check that Py_CompileString respects the coding cookie
-        _compile = _testcapi.Py_CompileString
-        code = b"# -*- coding: latin1 -*-\nprint('\xc2\xa4')\n"
-        result = _compile(code)
-        expected = compile(code, "<string>", "exec")
-        self.assertEqual(result.co_consts, expected.co_consts)
-
 
 if __name__ == "__main__":
     unittest.main()
index 4de5448..5f80a58 100644 (file)
@@ -502,6 +502,7 @@ if 1:
         self.compile_single("if x:\n   f(x)")
         self.compile_single("if x:\n   f(x)\nelse:\n   g(x)")
         self.compile_single("class T:\n   pass")
+        self.compile_single("c = '''\na=1\nb=2\nc=3\n'''")
 
     def test_bad_single_statement(self):
         self.assertInvalidSingle('1\n2')
@@ -512,6 +513,7 @@ if 1:
         self.assertInvalidSingle('f()\n# blah\nblah()')
         self.assertInvalidSingle('f()\nxy # blah\nblah()')
         self.assertInvalidSingle('x = 5 # comment\nx = 6\n')
+        self.assertInvalidSingle("c = '''\nd=1\n'''\na = 1\n\nb = 2\n")
 
     def test_particularly_evil_undecodable(self):
         # Issue 24022
index 84209ca..29e041d 100644 (file)
@@ -579,6 +579,14 @@ create_executor_tests(ProcessPoolShutdownTest,
 
 
 class WaitTests:
+    def test_20369(self):
+        # See https://bugs.python.org/issue20369
+        future = self.executor.submit(time.sleep, 1.5)
+        done, not_done = futures.wait([future, future],
+                            return_when=futures.ALL_COMPLETED)
+        self.assertEqual({future}, done)
+        self.assertEqual(set(), not_done)
+
 
     def test_first_completed(self):
         future1 = self.executor.submit(mul, 21, 2)
index 3df69ba..f3dd1b3 100644 (file)
@@ -2545,10 +2545,8 @@ order (MRO) for bases """
         m2instance.b = 2
         m2instance.a = 1
         self.assertEqual(m2instance.__dict__, "Not a dict!")
-        try:
+        with self.assertRaises(TypeError):
             dir(m2instance)
-        except TypeError:
-            pass
 
         # Two essentially featureless objects, (Ellipsis just inherits stuff
         # from object.
@@ -4062,7 +4060,7 @@ order (MRO) for bases """
         except TypeError:
             pass
         else:
-            assert 0, "best_base calculation found wanting"
+            self.fail("best_base calculation found wanting")
 
     def test_unsubclassable_types(self):
         with self.assertRaises(TypeError):
@@ -4448,6 +4446,8 @@ order (MRO) for bases """
             print("Oops!")
         except RuntimeError:
             pass
+        else:
+            self.fail("Didn't raise RuntimeError")
         finally:
             sys.stdout = test_stdout
 
index ad2864b..86b5dcc 100644 (file)
@@ -234,6 +234,7 @@ class ExceptionTests(unittest.TestCase):
         check("ages = {'Alice'=22, 'Bob'=23}", 1, 16)
         check('match ...:\n    case {**rest, "key": value}:\n        ...', 2, 19)
         check("[a b c d e f]", 1, 2)
+        check("for x yfff:", 1, 7)
 
         # Errors thrown by compile.c
         check('class foo:return 1', 1, 11)
@@ -265,11 +266,24 @@ class ExceptionTests(unittest.TestCase):
         check("(1+)", 1, 4)
         check("[interesting\nfoo()\n", 1, 1)
         check(b"\xef\xbb\xbf#coding: utf8\nprint('\xe6\x88\x91')\n", 0, -1)
+        check("""f'''
+            {
+            (123_a)
+            }'''""", 3, 17)
+        check("""f'''
+            {
+            f\"\"\"
+            {
+            (123_a)
+            }
+            \"\"\"
+            }'''""", 5, 17)
 
         # Errors thrown by symtable.c
-        check('x = [(yield i) for i in range(3)]', 1, 5)
-        check('def f():\n  from _ import *', 1, 1)
-        check('def f(x, x):\n  pass', 1, 1)
+        check('x = [(yield i) for i in range(3)]', 1, 7)
+        check('def f():\n  from _ import *', 2, 17)
+        check('def f(x, x):\n  pass', 1, 10)
+        check('{i for i in range(5) if (j := 0) for j in range(5)}', 1, 38)
         check('def f(x):\n  nonlocal x', 2, 3)
         check('def f(x):\n  x = 1\n  global x', 3, 3)
         check('nonlocal x', 1, 1)
@@ -2366,6 +2380,18 @@ class SyntaxErrorTests(unittest.TestCase):
         finally:
             unlink(TESTFN)
 
+    def test_non_utf8(self):
+        # Check non utf-8 characters
+        try:
+            with open(TESTFN, 'bw') as testfile:
+                testfile.write(b"\x89")
+            rc, out, err = script_helper.assert_python_failure('-Wd', '-X', 'utf8', TESTFN)
+            err = err.decode('utf-8').splitlines()
+
+            self.assertIn("SyntaxError: Non-UTF-8 code starting with '\\x89' in file", err[-1])
+        finally:
+            unlink(TESTFN)
+
     def test_attributes_new_constructor(self):
         args = ("bad.py", 1, 2, "abcdefg", 1, 100)
         the_exception = SyntaxError("bad bad", args)
index 7bc355f..9343d4e 100644 (file)
@@ -2665,6 +2665,74 @@ class TestSingleDispatch(unittest.TestCase):
         with self.assertRaisesRegex(TypeError, msg):
             f()
 
+    def test_register_genericalias(self):
+        @functools.singledispatch
+        def f(arg):
+            return "default"
+
+        with self.assertRaisesRegex(TypeError, "Invalid first argument to "):
+            f.register(list[int], lambda arg: "types.GenericAlias")
+        with self.assertRaisesRegex(TypeError, "Invalid first argument to "):
+            f.register(typing.List[int], lambda arg: "typing.GenericAlias")
+        with self.assertRaisesRegex(TypeError, "Invalid first argument to "):
+            f.register(list[int] | str, lambda arg: "types.UnionTypes(types.GenericAlias)")
+        with self.assertRaisesRegex(TypeError, "Invalid first argument to "):
+            f.register(typing.List[float] | bytes, lambda arg: "typing.Union[typing.GenericAlias]")
+        with self.assertRaisesRegex(TypeError, "Invalid first argument to "):
+            f.register(typing.Any, lambda arg: "typing.Any")
+
+        self.assertEqual(f([1]), "default")
+        self.assertEqual(f([1.0]), "default")
+        self.assertEqual(f(""), "default")
+        self.assertEqual(f(b""), "default")
+
+    def test_register_genericalias_decorator(self):
+        @functools.singledispatch
+        def f(arg):
+            return "default"
+
+        with self.assertRaisesRegex(TypeError, "Invalid first argument to "):
+            f.register(list[int])
+        with self.assertRaisesRegex(TypeError, "Invalid first argument to "):
+            f.register(typing.List[int])
+        with self.assertRaisesRegex(TypeError, "Invalid first argument to "):
+            f.register(list[int] | str)
+        with self.assertRaisesRegex(TypeError, "Invalid first argument to "):
+            f.register(typing.List[int] | str)
+        with self.assertRaisesRegex(TypeError, "Invalid first argument to "):
+            f.register(typing.Any)
+
+    def test_register_genericalias_annotation(self):
+        @functools.singledispatch
+        def f(arg):
+            return "default"
+
+        with self.assertRaisesRegex(TypeError, "Invalid annotation for 'arg'"):
+            @f.register
+            def _(arg: list[int]):
+                return "types.GenericAlias"
+        with self.assertRaisesRegex(TypeError, "Invalid annotation for 'arg'"):
+            @f.register
+            def _(arg: typing.List[float]):
+                return "typing.GenericAlias"
+        with self.assertRaisesRegex(TypeError, "Invalid annotation for 'arg'"):
+            @f.register
+            def _(arg: list[int] | str):
+                return "types.UnionType(types.GenericAlias)"
+        with self.assertRaisesRegex(TypeError, "Invalid annotation for 'arg'"):
+            @f.register
+            def _(arg: typing.List[float] | bytes):
+                return "typing.Union[typing.GenericAlias]"
+        with self.assertRaisesRegex(TypeError, "Invalid annotation for 'arg'"):
+            @f.register
+            def _(arg: typing.Any):
+                return "typing.Any"
+
+        self.assertEqual(f([1]), "default")
+        self.assertEqual(f([1.0]), "default")
+        self.assertEqual(f(""), "default")
+        self.assertEqual(f(b""), "default")
+
 
 class CachedCostItem:
     _cost = 1
index d14c757..3bf5f3b 100644 (file)
@@ -161,6 +161,14 @@ class GeneratorTest(unittest.TestCase):
             with self.assertRaises((TypeError, pickle.PicklingError)):
                 pickle.dumps(g, proto)
 
+    def test_send_non_none_to_new_gen(self):
+        def f():
+            yield 1
+        g = f()
+        with self.assertRaises(TypeError):
+            g.send(0)
+        self.assertEqual(next(g), 1)
+
 
 class ExceptionTest(unittest.TestCase):
     # Tests for the issue #23353: check that the currently handled exception
index 1623bf3..110eb48 100644 (file)
@@ -48,12 +48,15 @@ else:
     builtin_hashlib = None
 
 try:
-    from _hashlib import HASH, HASHXOF, openssl_md_meth_names
+    from _hashlib import HASH, HASHXOF, openssl_md_meth_names, get_fips_mode
 except ImportError:
     HASH = None
     HASHXOF = None
     openssl_md_meth_names = frozenset()
 
+    def get_fips_mode():
+        return 0
+
 try:
     import _blake2
 except ImportError:
@@ -192,10 +195,7 @@ class HashLibTestCase(unittest.TestCase):
 
     @property
     def is_fips_mode(self):
-        if hasattr(self._hashlib, "get_fips_mode"):
-            return self._hashlib.get_fips_mode()
-        else:
-            return None
+        return get_fips_mode()
 
     def test_hash_array(self):
         a = array.array("b", range(10))
@@ -1017,7 +1017,7 @@ class KDFTests(unittest.TestCase):
                     self.assertEqual(out, expected,
                                      (digest_name, password, salt, rounds))
 
-        with self.assertRaisesRegex(ValueError, 'unsupported hash type'):
+        with self.assertRaisesRegex(ValueError, '.*unsupported.*'):
             pbkdf2('unknown', b'pass', b'salt', 1)
 
         if 'sha1' in supported:
@@ -1057,6 +1057,7 @@ class KDFTests(unittest.TestCase):
 
     @unittest.skipUnless(hasattr(hashlib, 'scrypt'),
                      '   test requires OpenSSL > 1.1')
+    @unittest.skipIf(get_fips_mode(), reason="scrypt is blocked in FIPS mode")
     def test_scrypt(self):
         for password, salt, n, r, p, expected in self.scrypt_test_vectors:
             result = hashlib.scrypt(password, salt=salt, n=n, r=r, p=p)
index c2b935f..30b5537 100644 (file)
@@ -387,7 +387,7 @@ class NewIMAPTestsMixin():
         self.assertEqual(code, 'OK')
         self.assertEqual(server.response, b'ZmFrZQ==\r\n')  # b64 encoded 'fake'
 
-    @hashlib_helper.requires_hashdigest('md5')
+    @hashlib_helper.requires_hashdigest('md5', openssl=True)
     def test_login_cram_md5_bytes(self):
         class AuthHandler(SimpleIMAPHandler):
             capabilities = 'LOGINDISABLED AUTH=CRAM-MD5'
@@ -405,7 +405,7 @@ class NewIMAPTestsMixin():
         ret, _ = client.login_cram_md5("tim", b"tanstaaftanstaaf")
         self.assertEqual(ret, "OK")
 
-    @hashlib_helper.requires_hashdigest('md5')
+    @hashlib_helper.requires_hashdigest('md5', openssl=True)
     def test_login_cram_md5_plain_text(self):
         class AuthHandler(SimpleIMAPHandler):
             capabilities = 'LOGINDISABLED AUTH=CRAM-MD5'
@@ -851,7 +851,7 @@ class ThreadedNetworkedTests(unittest.TestCase):
                              b'ZmFrZQ==\r\n')  # b64 encoded 'fake'
 
     @threading_helper.reap_threads
-    @hashlib_helper.requires_hashdigest('md5')
+    @hashlib_helper.requires_hashdigest('md5', openssl=True)
     def test_login_cram_md5(self):
 
         class AuthHandler(SimpleIMAPHandler):
index dc9c234..4a45312 100644 (file)
@@ -235,6 +235,7 @@ class APITests(
 
             [extra1]
             dep4
+            dep6@ git+https://example.com/python/dep.git@v1.0.0
 
             [extra2:python_version < "3"]
             dep5
@@ -247,6 +248,7 @@ class APITests(
             'dep3; python_version < "3"',
             'dep4; extra == "extra1"',
             'dep5; (python_version < "3") and extra == "extra2"',
+            'dep6@ git+https://example.com/python/dep.git@v1.0.0 ; extra == "extra1"',
         ]
         # It's important that the environment marker expression be
         # wrapped in parentheses to avoid the following 'and' binding more
index 93f6e5f..03d0319 100644 (file)
@@ -1,4 +1,4 @@
-# Copyright 2001-2019 by Vinay Sajip. All Rights Reserved.
+# Copyright 2001-2021 by Vinay Sajip. All Rights Reserved.
 #
 # Permission to use, copy, modify, and distribute this software and its
 # documentation for any purpose and without fee is hereby granted,
@@ -16,7 +16,7 @@
 
 """Test harness for the logging module. Run all tests.
 
-Copyright (C) 2001-2019 Vinay Sajip. All Rights Reserved.
+Copyright (C) 2001-2021 Vinay Sajip. All Rights Reserved.
 """
 
 import logging
@@ -36,6 +36,7 @@ import os
 import queue
 import random
 import re
+import shutil
 import socket
 import struct
 import sys
@@ -5167,6 +5168,9 @@ class BaseFileTest(BaseTest):
                         msg="Log file %r does not exist" % filename)
         self.rmfiles.append(filename)
 
+    def next_rec(self):
+        return logging.LogRecord('n', logging.DEBUG, 'p', 1,
+                                 self.next_message(), None, None, None)
 
 class FileHandlerTest(BaseFileTest):
     def test_delay(self):
@@ -5179,11 +5183,18 @@ class FileHandlerTest(BaseFileTest):
         self.assertTrue(os.path.exists(self.fn))
         fh.close()
 
-class RotatingFileHandlerTest(BaseFileTest):
-    def next_rec(self):
-        return logging.LogRecord('n', logging.DEBUG, 'p', 1,
-                                 self.next_message(), None, None, None)
+    def test_emit_after_closing_in_write_mode(self):
+        # Issue #42378
+        os.unlink(self.fn)
+        fh = logging.FileHandler(self.fn, encoding='utf-8', mode='w')
+        fh.setFormatter(logging.Formatter('%(message)s'))
+        fh.emit(self.next_rec())    # '1'
+        fh.close()
+        fh.emit(self.next_rec())    # '2'
+        with open(self.fn) as fp:
+            self.assertEqual(fp.read().strip(), '1')
 
+class RotatingFileHandlerTest(BaseFileTest):
     def test_should_not_rollover(self):
         # If maxbytes is zero rollover never occurs
         rh = logging.handlers.RotatingFileHandler(
@@ -5408,6 +5419,54 @@ class TimedRotatingFileHandlerTest(BaseFileTest):
             finally:
                 rh.close()
 
+    def test_compute_files_to_delete(self):
+        # See bpo-46063 for background
+        wd = tempfile.mkdtemp(prefix='test_logging_')
+        self.addCleanup(shutil.rmtree, wd)
+        times = []
+        dt = datetime.datetime.now()
+        for i in range(10):
+            times.append(dt.strftime('%Y-%m-%d_%H-%M-%S'))
+            dt += datetime.timedelta(seconds=5)
+        prefixes = ('a.b', 'a.b.c', 'd.e', 'd.e.f')
+        files = []
+        rotators = []
+        for prefix in prefixes:
+            p = os.path.join(wd, '%s.log' % prefix)
+            rotator = logging.handlers.TimedRotatingFileHandler(p, when='s',
+                                                                interval=5,
+                                                                backupCount=7,
+                                                                delay=True)
+            rotators.append(rotator)
+            if prefix.startswith('a.b'):
+                for t in times:
+                    files.append('%s.log.%s' % (prefix, t))
+            else:
+                rotator.namer = lambda name: name.replace('.log', '') + '.log'
+                for t in times:
+                    files.append('%s.%s.log' % (prefix, t))
+        # Create empty files
+        for fn in files:
+            p = os.path.join(wd, fn)
+            with open(p, 'wb') as f:
+                pass
+        # Now the checks that only the correct files are offered up for deletion
+        for i, prefix in enumerate(prefixes):
+            rotator = rotators[i]
+            candidates = rotator.getFilesToDelete()
+            self.assertEqual(len(candidates), 3)
+            if prefix.startswith('a.b'):
+                p = '%s.log.' % prefix
+                for c in candidates:
+                    d, fn = os.path.split(c)
+                    self.assertTrue(fn.startswith(p))
+            else:
+                for c in candidates:
+                    d, fn = os.path.split(c)
+                    self.assertTrue(fn.endswith('.log'))
+                    self.assertTrue(fn.startswith(prefix + '.') and
+                                    fn[len(prefix) + 2].isdigit())
+
 
 def secs(**kw):
     return datetime.timedelta(**kw) // datetime.timedelta(seconds=1)
index 5f6d9f4..555c7ee 100644 (file)
@@ -2558,13 +2558,21 @@ class PosixPathTest(_BasePathTest, unittest.TestCase):
             othername = username
             otherhome = userhome
 
+        fakename = 'fakeuser'
+        # This user can theoretically exist on a test runner. Create unique name:
+        try:
+            while pwd.getpwnam(fakename):
+                fakename += '1'
+        except KeyError:
+            pass  # Non-existent name found
+
         p1 = P('~/Documents')
-        p2 = P('~' + username + '/Documents')
-        p3 = P('~' + othername + '/Documents')
-        p4 = P('../~' + username + '/Documents')
-        p5 = P('/~' + username + '/Documents')
+        p2 = P(f'~{username}/Documents')
+        p3 = P(f'~{othername}/Documents')
+        p4 = P(f'../~{username}/Documents')
+        p5 = P(f'/~{username}/Documents')
         p6 = P('')
-        p7 = P('~fakeuser/Documents')
+        p7 = P(f'~{fakename}/Documents')
 
         with os_helper.EnvironmentVarGuard() as env:
             env.pop('HOME', None)
index 44cf523..1220ca3 100644 (file)
@@ -318,11 +318,11 @@ class TestPOP3Class(TestCase):
     def test_rpop(self):
         self.assertOK(self.client.rpop('foo'))
 
-    @hashlib_helper.requires_hashdigest('md5')
+    @hashlib_helper.requires_hashdigest('md5', openssl=True)
     def test_apop_normal(self):
         self.assertOK(self.client.apop('foo', 'dummypassword'))
 
-    @hashlib_helper.requires_hashdigest('md5')
+    @hashlib_helper.requires_hashdigest('md5', openssl=True)
     def test_apop_REDOS(self):
         # Replace welcome with very long evil welcome.
         # NB The upper bound on welcome length is currently 2048.
index 2144d61..c2b5861 100644 (file)
@@ -1,4 +1,5 @@
 import errno
+import inspect
 import os
 import random
 import signal
@@ -33,6 +34,14 @@ class GenericTests(unittest.TestCase):
                 self.assertIsInstance(sig, signal.Signals)
                 self.assertEqual(sys.platform, "win32")
 
+    def test_functions_module_attr(self):
+        # Issue #27718: If __all__ is not defined all non-builtin functions
+        # should have correct __module__ to be displayed by pydoc.
+        for name in dir(signal):
+            value = getattr(signal, name)
+            if inspect.isroutine(value) and not inspect.isbuiltin(value):
+                self.assertEqual(value.__module__, 'signal')
+
 
 @unittest.skipIf(sys.platform == "win32", "Not valid on Windows")
 class PosixTests(unittest.TestCase):
index 9761a37..1a60fef 100644 (file)
@@ -1171,7 +1171,7 @@ class SMTPSimTests(unittest.TestCase):
         finally:
             smtp.close()
 
-    @hashlib_helper.requires_hashdigest('md5')
+    @hashlib_helper.requires_hashdigest('md5', openssl=True)
     def testAUTH_CRAM_MD5(self):
         self.serv.add_feature("AUTH CRAM-MD5")
         smtp = smtplib.SMTP(HOST, self.port, local_hostname='localhost',
@@ -1180,7 +1180,7 @@ class SMTPSimTests(unittest.TestCase):
         self.assertEqual(resp, (235, b'Authentication Succeeded'))
         smtp.close()
 
-    @hashlib_helper.requires_hashdigest('md5')
+    @hashlib_helper.requires_hashdigest('md5', openssl=True)
     def testAUTH_multiple(self):
         # Test that multiple authentication methods are tried.
         self.serv.add_feature("AUTH BOGUS PLAIN LOGIN CRAM-MD5")
index a485f7d..873db64 100644 (file)
@@ -539,7 +539,11 @@ class BasicSocketTests(unittest.TestCase):
         self.assertLessEqual(status, 15)
 
         libressl_ver = f"LibreSSL {major:d}"
-        openssl_ver = f"OpenSSL {major:d}.{minor:d}.{fix:d}"
+        if major >= 3:
+            # 3.x uses 0xMNN00PP0L
+            openssl_ver = f"OpenSSL {major:d}.{minor:d}.{patch:d}"
+        else:
+            openssl_ver = f"OpenSSL {major:d}.{minor:d}.{fix:d}"
         self.assertTrue(
             s.startswith((openssl_ver, libressl_ver)),
             (s, t, hex(n))
index 8f961c6..b5bebb3 100644 (file)
@@ -1576,6 +1576,14 @@ while 1:
 """
         self._check_error(source, "too many statically nested blocks")
 
+    @support.cpython_only
+    def test_error_on_parser_stack_overflow(self):
+        source = "-" * 100000 + "4"
+        for mode in ["exec", "eval", "single"]:
+            with self.subTest(mode=mode):
+                with self.assertRaises(MemoryError):
+                    compile(source, "<string>", mode)
+
 
 def test_main():
     support.run_unittest(SyntaxTestCase)
index 875615a..d89078f 100644 (file)
@@ -113,12 +113,13 @@ class TimeTestCase(unittest.TestCase):
         clk_id = time.pthread_getcpuclockid(threading.get_ident())
         self.assertTrue(type(clk_id) is int)
         # when in 32-bit mode AIX only returns the predefined constant
-        if not platform.system() == "AIX":
-            self.assertNotEqual(clk_id, time.CLOCK_THREAD_CPUTIME_ID)
-        elif (sys.maxsize.bit_length() > 32):
-            self.assertNotEqual(clk_id, time.CLOCK_THREAD_CPUTIME_ID)
-        else:
+        if platform.system() == "AIX" and (sys.maxsize.bit_length() <= 32):
             self.assertEqual(clk_id, time.CLOCK_THREAD_CPUTIME_ID)
+        # Solaris returns CLOCK_THREAD_CPUTIME_ID when current thread is given
+        elif sys.platform.startswith("sunos"):
+            self.assertEqual(clk_id, time.CLOCK_THREAD_CPUTIME_ID)
+        else:
+            self.assertNotEqual(clk_id, time.CLOCK_THREAD_CPUTIME_ID)
         t1 = time.clock_gettime(clk_id)
         t2 = time.clock_gettime(clk_id)
         self.assertLessEqual(t1, t2)
index 92315f1..c5a230e 100644 (file)
@@ -11,7 +11,7 @@ from test.test_tools import scriptsdir, skip_if_missing
 
 skip_if_missing()
 
-@hashlib_helper.requires_hashdigest('md5')
+@hashlib_helper.requires_hashdigest('md5', openssl=True)
 class MD5SumTests(unittest.TestCase):
     @classmethod
     def setUpClass(cls):
index fdec29e..f943aed 100644 (file)
@@ -3104,6 +3104,12 @@ class GetTypeHintTests(BaseTestCase):
                           'my_inner_a2': mod_generics_cache.B.A,
                           'my_outer_a': mod_generics_cache.A})
 
+    def test_get_type_hints_classes_no_implicit_optional(self):
+        class WithNoneDefault:
+            field: int = None  # most type-checkers won't be happy with it
+
+        self.assertEqual(gth(WithNoneDefault), {'field': int})
+
     def test_respect_no_type_check(self):
         @no_type_check
         class NoTpCheck:
@@ -4994,6 +5000,17 @@ class SpecialAttrsTests(BaseTestCase):
             loaded = pickle.loads(s)
             self.assertIs(SpecialAttrsP, loaded)
 
+    def test_genericalias_dir(self):
+        class Foo(Generic[T]):
+            def bar(self):
+                pass
+            baz = 3
+        # The class attributes of the original class should be visible even
+        # in dir() of the GenericAlias. See bpo-45755.
+        self.assertIn('bar', dir(Foo[int]))
+        self.assertIn('baz', dir(Foo[int]))
+
+
 class AllTests(BaseTestCase):
     """Tests for __all__."""
 
index 36fb05d..0b2d07c 100644 (file)
@@ -317,7 +317,7 @@ class BasicAuthTests(unittest.TestCase):
         self.assertRaises(urllib.error.HTTPError, urllib.request.urlopen, self.server_url)
 
 
-@hashlib_helper.requires_hashdigest("md5")
+@hashlib_helper.requires_hashdigest("md5", openssl=True)
 class ProxyAuthTests(unittest.TestCase):
     URL = "http://localhost"
 
index b9201f1..8898a74 100644 (file)
@@ -200,6 +200,13 @@ class MiscTest(AbstractTkTest, unittest.TestCase):
             root.clipboard_get()
 
     def test_winfo_rgb(self):
+
+        def assertApprox(col1, col2):
+            # A small amount of flexibility is required (bpo-45496)
+            # 33 is ~0.05% of 65535, which is a reasonable margin
+            for col1_channel, col2_channel in zip(col1, col2):
+                self.assertAlmostEqual(col1_channel, col2_channel, delta=33)
+
         root = self.root
         rgb = root.winfo_rgb
 
@@ -209,9 +216,9 @@ class MiscTest(AbstractTkTest, unittest.TestCase):
         # #RGB - extends each 4-bit hex value to be 16-bit.
         self.assertEqual(rgb('#F0F'), (0xFFFF, 0x0000, 0xFFFF))
         # #RRGGBB - extends each 8-bit hex value to be 16-bit.
-        self.assertEqual(rgb('#4a3c8c'), (0x4a4a, 0x3c3c, 0x8c8c))
+        assertApprox(rgb('#4a3c8c'), (0x4a4a, 0x3c3c, 0x8c8c))
         # #RRRRGGGGBBBB
-        self.assertEqual(rgb('#dede14143939'), (0xdede, 0x1414, 0x3939))
+        assertApprox(rgb('#dede14143939'), (0xdede, 0x1414, 0x3939))
         # Invalid string.
         with self.assertRaises(tkinter.TclError):
             rgb('#123456789a')
index b743d40..2522547 100644 (file)
@@ -983,6 +983,9 @@ class _BaseGenericAlias(_Final, _root=True):
         raise TypeError("Subscripted generics cannot be used with"
                         " class and instance checks")
 
+    def __dir__(self):
+        return list(set(super().__dir__()
+                + [attr for attr in dir(self.__origin__) if not _is_dunder(attr)]))
 
 # Special typing constructs Union, Optional, Generic, Callable and Tuple
 # use three special attributes for internal bookkeeping of generic types:
index 4f9a80b..2323119 100644 (file)
@@ -4,7 +4,6 @@ import inspect
 from .case import TestCase
 
 
-
 class IsolatedAsyncioTestCase(TestCase):
     # Names intentionally have a long prefix
     # to reduce a chance of clashing with user-defined attributes
index 45e7e4c..caf1590 100644 (file)
@@ -59,6 +59,7 @@ class TextTestResult(result.TestResult):
         super(TextTestResult, self).addSuccess(test)
         if self.showAll:
             self.stream.writeln("ok")
+            self.stream.flush()
         elif self.dots:
             self.stream.write('.')
             self.stream.flush()
@@ -67,6 +68,7 @@ class TextTestResult(result.TestResult):
         super(TextTestResult, self).addError(test, err)
         if self.showAll:
             self.stream.writeln("ERROR")
+            self.stream.flush()
         elif self.dots:
             self.stream.write('E')
             self.stream.flush()
@@ -75,6 +77,7 @@ class TextTestResult(result.TestResult):
         super(TextTestResult, self).addFailure(test, err)
         if self.showAll:
             self.stream.writeln("FAIL")
+            self.stream.flush()
         elif self.dots:
             self.stream.write('F')
             self.stream.flush()
@@ -83,6 +86,7 @@ class TextTestResult(result.TestResult):
         super(TextTestResult, self).addSkip(test, reason)
         if self.showAll:
             self.stream.writeln("skipped {0!r}".format(reason))
+            self.stream.flush()
         elif self.dots:
             self.stream.write("s")
             self.stream.flush()
@@ -91,6 +95,7 @@ class TextTestResult(result.TestResult):
         super(TextTestResult, self).addExpectedFailure(test, err)
         if self.showAll:
             self.stream.writeln("expected failure")
+            self.stream.flush()
         elif self.dots:
             self.stream.write("x")
             self.stream.flush()
@@ -99,6 +104,7 @@ class TextTestResult(result.TestResult):
         super(TextTestResult, self).addUnexpectedSuccess(test)
         if self.showAll:
             self.stream.writeln("unexpected success")
+            self.stream.flush()
         elif self.dots:
             self.stream.write("u")
             self.stream.flush()
@@ -106,6 +112,7 @@ class TextTestResult(result.TestResult):
     def printErrors(self):
         if self.dots or self.showAll:
             self.stream.writeln()
+            self.stream.flush()
         self.printErrorList('ERROR', self.errors)
         self.printErrorList('FAIL', self.failures)
 
@@ -115,6 +122,7 @@ class TextTestResult(result.TestResult):
             self.stream.writeln("%s: %s" % (flavour,self.getDescription(test)))
             self.stream.writeln(self.separator2)
             self.stream.writeln("%s" % err)
+            self.stream.flush()
 
 
 class TextTestRunner(object):
@@ -218,4 +226,5 @@ class TextTestRunner(object):
             self.stream.writeln(" (%s)" % (", ".join(infos),))
         else:
             self.stream.write("\n")
+        self.stream.flush()
         return result
index 442651e..9b3a598 100644 (file)
@@ -611,6 +611,8 @@ class Test_TestCase(unittest.TestCase, TestEquality, TestHashing):
                  'Tests shortDescription() for a method with a longer '
                  'docstring.')
 
+    @unittest.skipIf(sys.flags.optimize >= 2,
+                     "Docstrings are omitted with -O2 and above")
     def testShortDescriptionWhitespaceTrimming(self):
         """
             Tests shortDescription() whitespace is trimmed, so that the first
index eef82ff..4746d71 100644 (file)
@@ -6,6 +6,7 @@ import subprocess
 from test import support
 import unittest
 import unittest.test
+from .test_result import BufferedWriter
 
 
 class Test_TestProgram(unittest.TestCase):
@@ -57,9 +58,9 @@ class Test_TestProgram(unittest.TestCase):
 
     class FooBar(unittest.TestCase):
         def testPass(self):
-            assert True
+            pass
         def testFail(self):
-            assert False
+            raise AssertionError
 
     class FooBarLoader(unittest.TestLoader):
         """Test loader that returns a suite containing FooBar."""
@@ -104,30 +105,39 @@ class Test_TestProgram(unittest.TestCase):
                           program.testNames)
 
     def test_NonExit(self):
+        stream = BufferedWriter()
         program = unittest.main(exit=False,
                                 argv=["foobar"],
-                                testRunner=unittest.TextTestRunner(stream=io.StringIO()),
+                                testRunner=unittest.TextTestRunner(stream=stream),
                                 testLoader=self.FooBarLoader())
         self.assertTrue(hasattr(program, 'result'))
+        self.assertIn('\nFAIL: testFail ', stream.getvalue())
+        self.assertTrue(stream.getvalue().endswith('\n\nFAILED (failures=1)\n'))
 
 
     def test_Exit(self):
+        stream = BufferedWriter()
         self.assertRaises(
             SystemExit,
             unittest.main,
             argv=["foobar"],
-            testRunner=unittest.TextTestRunner(stream=io.StringIO()),
+            testRunner=unittest.TextTestRunner(stream=stream),
             exit=True,
             testLoader=self.FooBarLoader())
+        self.assertIn('\nFAIL: testFail ', stream.getvalue())
+        self.assertTrue(stream.getvalue().endswith('\n\nFAILED (failures=1)\n'))
 
 
     def test_ExitAsDefault(self):
+        stream = BufferedWriter()
         self.assertRaises(
             SystemExit,
             unittest.main,
             argv=["foobar"],
-            testRunner=unittest.TextTestRunner(stream=io.StringIO()),
+            testRunner=unittest.TextTestRunner(stream=stream),
             testLoader=self.FooBarLoader())
+        self.assertIn('\nFAIL: testFail ', stream.getvalue())
+        self.assertTrue(stream.getvalue().endswith('\n\nFAILED (failures=1)\n'))
 
 
 class InitialisableProgram(unittest.TestProgram):
index d6efc7e..5416735 100644 (file)
@@ -33,6 +33,22 @@ def bad_cleanup2():
     raise ValueError('bad cleanup2')
 
 
+class BufferedWriter:
+    def __init__(self):
+        self.result = ''
+        self.buffer = ''
+
+    def write(self, arg):
+        self.buffer += arg
+
+    def flush(self):
+        self.result += self.buffer
+        self.buffer = ''
+
+    def getvalue(self):
+        return self.result
+
+
 class Test_TestResult(unittest.TestCase):
     # Note: there are not separate tests for TestResult.wasSuccessful(),
     # TestResult.errors, TestResult.failures, TestResult.testsRun or
@@ -444,10 +460,13 @@ class Test_TestResult(unittest.TestCase):
         self.assertTrue(result.shouldStop)
 
     def testFailFastSetByRunner(self):
-        runner = unittest.TextTestRunner(stream=io.StringIO(), failfast=True)
+        stream = BufferedWriter()
+        runner = unittest.TextTestRunner(stream=stream, failfast=True)
         def test(result):
             self.assertTrue(result.failfast)
         result = runner.run(test)
+        stream.flush()
+        self.assertTrue(stream.getvalue().endswith('\n\nOK\n'))
 
 
 classDict = dict(unittest.TestResult.__dict__)
index d8c1515..233a5af 100644 (file)
@@ -1875,9 +1875,10 @@ class PatchTest(unittest.TestCase):
             self.assertEqual(foo(), 1)
         self.assertEqual(foo(), 0)
 
+        orig_doc = foo.__doc__
         with patch.object(foo, '__doc__', "FUN"):
             self.assertEqual(foo.__doc__, "FUN")
-        self.assertEqual(foo.__doc__, "TEST")
+        self.assertEqual(foo.__doc__, orig_doc)
 
         with patch.object(foo, '__module__', "testpatch2"):
             self.assertEqual(foo.__module__, "testpatch2")
index ce1f5d7..6f1af29 100644 (file)
@@ -281,8 +281,9 @@ class EnvBuilder:
                         os.path.normcase(f).startswith(('python', 'vcruntime'))
                     ]
             else:
-                suffixes = ['python.exe', 'python_d.exe', 'pythonw.exe',
-                            'pythonw_d.exe']
+                suffixes = {'python.exe', 'python_d.exe', 'pythonw.exe', 'pythonw_d.exe'}
+                base_exe = os.path.basename(context.env_exe)
+                suffixes.add(base_exe)
 
             for suffix in suffixes:
                 src = os.path.join(dirname, suffix)
diff --git a/Mac/BuildScript/0001-Darwin-platform-allows-to-build-on-releases-before-Y.patch b/Mac/BuildScript/0001-Darwin-platform-allows-to-build-on-releases-before-Y.patch
deleted file mode 100644 (file)
index 51ccdc2..0000000
+++ /dev/null
@@ -1,59 +0,0 @@
-From cef404f1e7a598166cbc2fd2e0048f7e2d752ad5 Mon Sep 17 00:00:00 2001
-From: David Carlier <devnexen@gmail.com>
-Date: Tue, 24 Aug 2021 22:40:14 +0100
-Subject: [PATCH] Darwin platform allows to build on releases before
- Yosemite/ios 8.
-
-issue #16407 #16408
----
- crypto/rand/rand_unix.c |  5 +----
- include/crypto/rand.h   | 10 ++++++++++
- 2 files changed, 11 insertions(+), 4 deletions(-)
-
-diff --git a/crypto/rand/rand_unix.c b/crypto/rand/rand_unix.c
-index 43f1069d15..0f4525106a 100644
---- a/crypto/rand/rand_unix.c
-+++ b/crypto/rand/rand_unix.c
-@@ -34,9 +34,6 @@
- #if defined(__OpenBSD__)
- # include <sys/param.h>
- #endif
--#if defined(__APPLE__)
--# include <CommonCrypto/CommonRandom.h>
--#endif
- #if defined(OPENSSL_SYS_UNIX) || defined(__DJGPP__)
- # include <sys/types.h>
-@@ -381,7 +378,7 @@ static ssize_t syscall_random(void *buf, size_t buflen)
-         if (errno != ENOSYS)
-             return -1;
-     }
--#  elif defined(__APPLE__)
-+#  elif defined(OPENSSL_APPLE_CRYPTO_RANDOM)
-     if (CCRandomGenerateBytes(buf, buflen) == kCCSuccess)
-           return (ssize_t)buflen;
-diff --git a/include/crypto/rand.h b/include/crypto/rand.h
-index 5350d3a931..674f840fd1 100644
---- a/include/crypto/rand.h
-+++ b/include/crypto/rand.h
-@@ -20,6 +20,16 @@
- # include <openssl/rand.h>
-+# if defined(__APPLE__) && !defined(OPENSSL_NO_APPLE_CRYPTO_RANDOM)
-+#  include <Availability.h>
-+#  if (defined(__MAC_OS_X_VERSION_MIN_REQUIRED) && __MAC_OS_X_VERSION_MIN_REQUIRED >= 101000) || \
-+     (defined(__IPHONE_OS_VERSION_MIN_REQUIRED) && __IPHONE_OS_VERSION_MIN_REQUIRED >= 80000)
-+#   define OPENSSL_APPLE_CRYPTO_RANDOM 1
-+#   include <CommonCrypto/CommonCryptoError.h>
-+#   include <CommonCrypto/CommonRandom.h>
-+#  endif
-+# endif
-+
- /* forward declaration */
- typedef struct rand_pool_st RAND_POOL;
--- 
-2.33.0
-
index 9fefe67..1eef40f 100755 (executable)
@@ -246,10 +246,9 @@ def library_recipes():
 
     result.extend([
           dict(
-              name="OpenSSL 1.1.1l",
-              url="https://www.openssl.org/source/openssl-1.1.1l.tar.gz",
-              checksum='ac0d4387f3ba0ad741b0580dd45f6ff3',
-              patches=['0001-Darwin-platform-allows-to-build-on-releases-before-Y.patch'],
+              name="OpenSSL 1.1.1m",
+              url="https://www.openssl.org/source/openssl-1.1.1m.tar.gz",
+              checksum='8ec70f665c145c3103f6e330f538a9db',
               buildrecipe=build_universal_openssl,
               configure=None,
               install=None,
index 7934dd1..4edfa5f 100644 (file)
@@ -20,7 +20,7 @@ This package includes its own private copy of OpenSSL 1.1.1.   The trust certifi
 \f0\i0  command line utility are not used as defaults by the Python 
 \f3 ssl
 \f0  module.  A sample command script is included in 
-\f3 /Applications/Python 3.9
+\f3 /Applications/Python 3.10
 \f0  to install a curated bundle of default root certificates from the third-party 
 \f3 certifi
 \f0  package ({\field{\*\fldinst{HYPERLINK "https://pypi.org/project/certifi/"}}{\fldrslt https://pypi.org/project/certifi/}}).  Double-click on 
index f6b5cfe..d197c77 100644 (file)
@@ -36,7 +36,7 @@
        <key>CFBundleExecutable</key>
        <string>IDLE</string>
        <key>CFBundleGetInfoString</key>
-       <string>%version%, © 2001-2021 Python Software Foundation</string>
+       <string>%version%, © 2001-2022 Python Software Foundation</string>
        <key>CFBundleIconFile</key>
        <string>IDLE.icns</string>
        <key>CFBundleIdentifier</key>
index 3d8bc3e..dec0a2e 100644 (file)
@@ -3,7 +3,7 @@
 <plist version="1.0">
 <dict>
        <key>CFBundleDevelopmentRegion</key>
-       <string>English</string>
+       <string>en</string>
        <key>CFBundleDocumentTypes</key>
        <array>
                <dict>
        </array>
        <key>CFBundleExecutable</key>
        <string>Python Launcher</string>
+       <key>NSHumanReadableCopyright</key>
+       <string>Copyright © 2001-2022 Python Software Foundation</string>
        <key>CFBundleGetInfoString</key>
-       <string>%VERSION%, © 2001-2021 Python Software Foundation</string>
+       <string>%VERSION%, © 2001-2022 Python Software Foundation</string>
        <key>CFBundleIconFile</key>
        <string>PythonLauncher.icns</string>
        <key>CFBundleIdentifier</key>
@@ -61,5 +63,7 @@
        <string>MainMenu</string>
        <key>NSPrincipalClass</key>
        <string>NSApplication</string>
+       <key>NSAppleEventsUsageDescription</key>
+       <string>Python Launcher uses Apple events to launch your Python script in a Terminal window.</string>
 </dict>
 </plist>
index cbb783b..f07326b 100644 (file)
@@ -19,7 +19,7 @@ doscript(const char *command)
     AEDesc desc;
     OSStatus err;
 
-    [[NSWorkspace sharedWorkspace] launchApplication:@"/Applications/Utilities/Terminal.app/"];
+    [[NSWorkspace sharedWorkspace] launchApplication:@"Terminal.app"];
 
     // Build event
     err = AEBuildAppleEvent(kAECoreSuite, kAEDoScript,
index 2c80133..84843b7 100644 (file)
@@ -37,7 +37,7 @@
        <key>CFBundleInfoDictionaryVersion</key>
        <string>6.0</string>
        <key>CFBundleLongVersionString</key>
-       <string>%version%, (c) 2001-2021 Python Software Foundation.</string>
+       <string>%version%, (c) 2001-2022 Python Software Foundation.</string>
        <key>CFBundleName</key>
        <string>Python</string>
        <key>CFBundlePackageType</key>
index c866895..0fc215a 100644 (file)
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -2,6 +2,162 @@
 Python News
 +++++++++++
 
+What's New in Python 3.10.2 final?
+==================================
+
+*Release date: 2022-01-13*
+
+Core and Builtins
+-----------------
+
+- bpo-46347: Fix memory leak in PyEval_EvalCodeEx.
+
+- bpo-46289: ASDL declaration of ``FormattedValue`` has changed to reflect
+  ``conversion`` field is not optional.
+
+- bpo-46237: Fix the line number of tokenizer errors inside f-strings. Patch
+  by Pablo Galindo.
+
+- bpo-46006: Fix a regression when a type method like ``__init__()`` is
+  modified in a subinterpreter. Fix a regression in
+  ``_PyUnicode_EqualToASCIIId()`` and type ``update_slot()``. Revert the
+  change which made the Unicode dictionary of interned strings compatible
+  with subinterpreters: the internal interned dictionary is shared again by
+  all interpreters. Patch by Victor Stinner.
+
+- bpo-46085: Fix iterator cache mechanism of :class:`OrderedDict`.
+
+- bpo-46110: Add a maximum recursion check to the PEG parser to avoid stack
+  overflow. Patch by Pablo Galindo
+
+- bpo-46054: Fix parser error when parsing non-utf8 characters in source
+  files. Patch by Pablo Galindo.
+
+- bpo-46042: Improve the location of the caret in :exc:`SyntaxError`
+  exceptions emitted by the symbol table. Patch by Pablo Galindo.
+
+- bpo-46025: Fix a crash in the :mod:`atexit` module involving functions
+  that unregister themselves before raising exceptions. Patch by Pablo
+  Galindo.
+
+- bpo-46009: Restore behavior from 3.9 and earlier when sending non-None to
+  newly started generator. In 3.9 this did not affect the state of the
+  generator. In 3.10.0 and 3.10.1 ``gen_func().send(0)`` is equivalent to
+  ``gen_func().throw(TypeError(...)`` which exhausts the generator. In
+  3.10.2 onward, the behavior has been reverted to that of 3.9.
+
+- bpo-46000: Improve compatibility of the :mod:`curses` module with NetBSD
+  curses.
+
+- bpo-46004: Fix the :exc:`SyntaxError` location for errors involving for
+  loops with invalid targets. Patch by Pablo Galindo
+
+- bpo-42918: Fix bug where the built-in :func:`compile` function did not
+  always raise a :exc:`SyntaxError` when passed multiple statements in
+  'single' mode. Patch by Weipeng Hong.
+
+Library
+-------
+
+- bpo-40479: Fix :mod:`hashlib` *usedforsecurity* option to work correctly
+  with OpenSSL 3.0.0 in FIPS mode.
+
+- bpo-46070: Fix possible segfault when importing the :mod:`asyncio` module
+  from different sub-interpreters in parallel. Patch by Erlend E. Aasland.
+
+- bpo-46278: Reflect ``context`` argument in ``AbstractEventLoop.call_*()``
+  methods. Loop implementations already support it.
+
+- bpo-46239: Improve error message when importing
+  :mod:`asyncio.windows_events` on non-Windows.
+
+- bpo-20369: :func:`concurrent.futures.wait` no longer blocks forever when
+  given duplicate Futures. Patch by Kumar Aditya.
+
+- bpo-46105: Honor spec when generating requirement specs with urls and
+  extras (importlib_metadata 4.8.3).
+
+- bpo-26952: :mod:`argparse` raises :exc:`ValueError` with clear message
+  when trying to render usage for an empty mutually-exclusive group.
+  Previously it raised a cryptic :exc:`IndexError`.
+
+- bpo-27718: Fix help for the :mod:`signal` module. Some functions (e.g.
+  ``signal()`` and ``getsignal()``) were omitted.
+
+- bpo-46032: The ``registry()`` method of :func:`functools.singledispatch`
+  functions checks now the first argument or the first parameter annotation
+  and raises a TypeError if it is not supported. Previously unsupported
+  "types" were ignored (e.g. ``typing.List[int]``) or caused an error at
+  calling time (e.g. ``list[int]``).
+
+- bpo-46018: Ensure that :func:`math.expm1` does not raise on underflow.
+
+- bpo-45755: :mod:`typing` generic aliases now reveal the class attributes
+  of the original generic class when passed to ``dir()``. This was the
+  behavior up to Python 3.6, but was changed in 3.7-3.9.
+
+- bpo-13236: :class:`unittest.TextTestResult` and
+  :class:`unittest.TextTestRunner` flush now the output stream more often.
+
+- bpo-42378: Fixes the issue with log file being overwritten when
+  :class:`logging.FileHandler` is used in :mod:`atexit` with *filemode* set
+  to ``'w'``. Note this will cause the message in *atexit* not being logged
+  if the log stream is already closed due to shutdown of logging.
+
+Documentation
+-------------
+
+- bpo-46120: State that ``|`` is preferred for readability over ``Union`` in
+  the :mod:`typing` docs.
+
+- bpo-46040: Fix removal Python version for ``@asyncio.coroutine``, the
+  correct value is 3.11.
+
+- bpo-19737: Update the documentation for the :func:`globals` function.
+
+- bpo-45840: Improve cross-references in the documentation for the data
+  model.
+
+Tests
+-----
+
+- bpo-46205: Fix hang in runtest_mp due to race condition
+
+- bpo-46263: Fix test_capi on FreeBSD 14-dev: instruct jemalloc to not fill
+  freed memory with junk byte.
+
+- bpo-46150: Now ``fakename`` in
+  ``test_pathlib.PosixPathTest.test_expanduser`` is checked to be
+  non-existent.
+
+- bpo-46129: Rewrite ``asyncio.locks`` tests with
+  :class:`unittest.IsolatedAsyncioTestCase` usage.
+
+- bpo-46114: Fix test case for OpenSSL 3.0.1 version. OpenSSL 3.0 uses
+  ``0xMNN00PP0L``.
+
+Build
+-----
+
+- bpo-46263: ``configure`` no longer sets ``MULTIARCH`` on FreeBSD
+  platforms.
+
+- bpo-46106: Updated OpenSSL to 1.1.1m in Windows builds, macOS installer
+  builds, and CI. Patch by Kumar Aditya.
+
+macOS
+-----
+
+- bpo-40477: The Python Launcher app for macOS now properly launches scripts
+  and, if necessary, the Terminal app when running on recent macOS releases.
+
+C API
+-----
+
+- bpo-46236: Fix a bug in :c:func:`PyFunction_GetAnnotations` that caused it
+  to return a ``tuple`` instead of a ``dict``.
+
+
 What's New in Python 3.10.1 final?
 ==================================
 
index b483b2e..ee9bfdf 100644 (file)
@@ -12,12 +12,9 @@ can be used to force the usage of the malloc() allocator of the C library.
 If you don't want to read about the details of using Valgrind, there
 are still two things you must do to suppress the warnings.  First,
 you must use a suppressions file.  One is supplied in
-Misc/valgrind-python.supp.  Second, you must do one of the following:
-
-  * Uncomment Py_USING_MEMORY_DEBUGGER in Objects/obmalloc.c,
-    then rebuild Python
-  * Uncomment the lines in Misc/valgrind-python.supp that
-    suppress the warnings for PyObject_Free and PyObject_Realloc
+Misc/valgrind-python.supp.  Second, you must uncomment the lines in 
+Misc/valgrind-python.supp that suppress the warnings for PyObject_Free and
+PyObject_Realloc.
 
 If you want to use Valgrind more effectively and catch even more
 memory leaks, you will need to configure python --without-pymalloc.
index 56079b0..befec9a 100644 (file)
@@ -3309,17 +3309,14 @@ static int
 module_init(void)
 {
     PyObject *module = NULL;
+    if (module_initialized) {
+        return 0;
+    }
 
     asyncio_mod = PyImport_ImportModule("asyncio");
     if (asyncio_mod == NULL) {
         goto fail;
     }
-    if (module_initialized != 0) {
-        return 0;
-    }
-    else {
-        module_initialized = 1;
-    }
 
     current_tasks = PyDict_New();
     if (current_tasks == NULL) {
@@ -3380,6 +3377,7 @@ module_init(void)
         goto fail;
     }
 
+    module_initialized = 1;
     Py_DECREF(module);
     return 0;
 
index 511073f..a1de435 100644 (file)
@@ -1226,8 +1226,8 @@ PyCursesWindow_ChgAt(PyCursesWindowObject *self, PyObject *args)
         return NULL;
     }
 
-    color = (short)((attr >> 8) & 0xff);
-    attr = attr - (color << 8);
+    color = (short) PAIR_NUMBER(attr);
+    attr = attr & A_ATTRIBUTES;
 
     if (use_xy) {
         rtn = mvwchgat(self->win,y,x,num,attr,color,NULL);
index b9e68c0..cb8460a 100644 (file)
 #endif
 #define OPENSSL_NO_DEPRECATED 1
 
+#ifndef Py_BUILD_CORE_BUILTIN
+#  define Py_BUILD_CORE_MODULE 1
+#endif
+
 #define PY_SSIZE_T_CLEAN
 
 #include "Python.h"
+#include "pycore_hashtable.h"
 #include "hashlib.h"
 #include "pystrhex.h"
 
 #define PY_OPENSSL_HAS_SHAKE 1
 #define PY_OPENSSL_HAS_BLAKE2 1
 
+#if OPENSSL_VERSION_NUMBER >= 0x30000000L
+#define PY_EVP_MD EVP_MD
+#define PY_EVP_MD_fetch(algorithm, properties) EVP_MD_fetch(NULL, algorithm, properties)
+#define PY_EVP_MD_up_ref(md) EVP_MD_up_ref(md)
+#define PY_EVP_MD_free(md) EVP_MD_free(md)
+#else
+#define PY_EVP_MD const EVP_MD
+#define PY_EVP_MD_fetch(algorithm, properties) EVP_get_digestbyname(algorithm)
+#define PY_EVP_MD_up_ref(md) do {} while(0)
+#define PY_EVP_MD_free(md) do {} while(0)
+#endif
+
+/* hash alias map and fast lookup
+ *
+ * Map between Python's preferred names and OpenSSL internal names. Maintain
+ * cache of fetched EVP MD objects. The EVP_get_digestbyname() and
+ * EVP_MD_fetch() API calls have a performance impact.
+ *
+ * The py_hashentry_t items are stored in a _Py_hashtable_t with py_name and
+ * py_alias as keys.
+ */
+
+enum Py_hash_type {
+    Py_ht_evp,            // usedforsecurity=True / default
+    Py_ht_evp_nosecurity, // usedforsecurity=False
+    Py_ht_mac,            // HMAC
+    Py_ht_pbkdf2,         // PKBDF2
+};
+
+typedef struct {
+    const char *py_name;
+    const char *py_alias;
+    const char *ossl_name;
+    int ossl_nid;
+    int refcnt;
+    PY_EVP_MD *evp;
+    PY_EVP_MD *evp_nosecurity;
+} py_hashentry_t;
+
+#define Py_hash_md5 "md5"
+#define Py_hash_sha1 "sha1"
+#define Py_hash_sha224 "sha224"
+#define Py_hash_sha256 "sha256"
+#define Py_hash_sha384 "sha384"
+#define Py_hash_sha512 "sha512"
+#define Py_hash_sha512_224 "sha512_224"
+#define Py_hash_sha512_256 "sha512_256"
+#define Py_hash_sha3_224 "sha3_224"
+#define Py_hash_sha3_256 "sha3_256"
+#define Py_hash_sha3_384 "sha3_384"
+#define Py_hash_sha3_512 "sha3_512"
+#define Py_hash_shake_128 "shake_128"
+#define Py_hash_shake_256 "shake_256"
+#define Py_hash_blake2s "blake2s"
+#define Py_hash_blake2b "blake2b"
+
+#define PY_HASH_ENTRY(py_name, py_alias, ossl_name, ossl_nid) \
+    {py_name, py_alias, ossl_name, ossl_nid, 0, NULL, NULL}
+
+static const py_hashentry_t py_hashes[] = {
+    /* md5 */
+    PY_HASH_ENTRY(Py_hash_md5, "MD5", SN_md5, NID_md5),
+    /* sha1 */
+    PY_HASH_ENTRY(Py_hash_sha1, "SHA1", SN_sha1, NID_sha1),
+    /* sha2 family */
+    PY_HASH_ENTRY(Py_hash_sha224, "SHA224", SN_sha224, NID_sha224),
+    PY_HASH_ENTRY(Py_hash_sha256, "SHA256", SN_sha256, NID_sha256),
+    PY_HASH_ENTRY(Py_hash_sha384, "SHA384", SN_sha384, NID_sha384),
+    PY_HASH_ENTRY(Py_hash_sha512, "SHA512", SN_sha512, NID_sha512),
+    /* truncated sha2 */
+    PY_HASH_ENTRY(Py_hash_sha512_224, "SHA512_224", SN_sha512_224, NID_sha512_224),
+    PY_HASH_ENTRY(Py_hash_sha512_256, "SHA512_256", SN_sha512_256, NID_sha512_256),
+    /* sha3 */
+    PY_HASH_ENTRY(Py_hash_sha3_224, NULL, SN_sha3_224, NID_sha3_224),
+    PY_HASH_ENTRY(Py_hash_sha3_256, NULL, SN_sha3_256, NID_sha3_256),
+    PY_HASH_ENTRY(Py_hash_sha3_384, NULL, SN_sha3_384, NID_sha3_384),
+    PY_HASH_ENTRY(Py_hash_sha3_512, NULL, SN_sha3_512, NID_sha3_512),
+    /* sha3 shake */
+    PY_HASH_ENTRY(Py_hash_shake_128, NULL, SN_shake128, NID_shake128),
+    PY_HASH_ENTRY(Py_hash_shake_256, NULL, SN_shake256, NID_shake256),
+    /* blake2 digest */
+    PY_HASH_ENTRY(Py_hash_blake2s, "blake2s256", SN_blake2s256, NID_blake2s256),
+    PY_HASH_ENTRY(Py_hash_blake2b, "blake2b512", SN_blake2b512, NID_blake2b512),
+    PY_HASH_ENTRY(NULL, NULL, NULL, 0),
+};
+
+static Py_uhash_t
+py_hashentry_t_hash_name(const void *key) {
+    return _Py_HashBytes(key, strlen((const char *)key));
+}
+
+static int
+py_hashentry_t_compare_name(const void *key1, const void *key2) {
+    return strcmp((const char *)key1, (const char *)key2) == 0;
+}
+
+static void
+py_hashentry_t_destroy_value(void *entry) {
+    py_hashentry_t *h = (py_hashentry_t *)entry;
+    if (--(h->refcnt) == 0) {
+        if (h->evp != NULL) {
+            PY_EVP_MD_free(h->evp);
+            h->evp = NULL;
+        }
+        if (h->evp_nosecurity != NULL) {
+            PY_EVP_MD_free(h->evp_nosecurity);
+            h->evp_nosecurity = NULL;
+        }
+        PyMem_Free(entry);
+    }
+}
+
+static _Py_hashtable_t *
+py_hashentry_table_new(void) {
+    _Py_hashtable_t *ht = _Py_hashtable_new_full(
+        py_hashentry_t_hash_name,
+        py_hashentry_t_compare_name,
+        NULL,
+        py_hashentry_t_destroy_value,
+        NULL
+    );
+    if (ht == NULL) {
+        return NULL;
+    }
+
+    for (const py_hashentry_t *h = py_hashes; h->py_name != NULL; h++) {
+        py_hashentry_t *entry = (py_hashentry_t *)PyMem_Malloc(sizeof(py_hashentry_t));
+        if (entry == NULL) {
+            goto error;
+        }
+        memcpy(entry, h, sizeof(py_hashentry_t));
+
+        if (_Py_hashtable_set(ht, (const void*)entry->py_name, (void*)entry) < 0) {
+            PyMem_Free(entry);
+            goto error;
+        }
+        entry->refcnt = 1;
+
+        if (h->py_alias != NULL) {
+            if (_Py_hashtable_set(ht, (const void*)entry->py_alias, (void*)entry) < 0) {
+                PyMem_Free(entry);
+                goto error;
+            }
+            entry->refcnt++;
+        }
+    }
+
+    return ht;
+  error:
+    _Py_hashtable_destroy(ht);
+    return NULL;
+}
+
+/* Module state */
 static PyModuleDef _hashlibmodule;
 
 typedef struct {
@@ -55,6 +214,7 @@ typedef struct {
 #endif
     PyObject *constructs;
     PyObject *unsupported_digestmod_error;
+    _Py_hashtable_t *hashtable;
 } _hashlibstate;
 
 static inline _hashlibstate*
@@ -89,16 +249,26 @@ class _hashlib.HMAC "HMACobject *" "((_hashlibstate *)PyModule_GetState(module))
 
 /* LCOV_EXCL_START */
 static PyObject *
-_setException(PyObject *exc)
+_setException(PyObject *exc, const char* altmsg, ...)
 {
-    unsigned long errcode;
+    unsigned long errcode = ERR_peek_last_error();
     const char *lib, *func, *reason;
+    va_list vargs;
 
-    errcode = ERR_peek_last_error();
+#ifdef HAVE_STDARG_PROTOTYPES
+    va_start(vargs, altmsg);
+#else
+    va_start(vargs);
+#endif
     if (!errcode) {
-        PyErr_SetString(exc, "unknown reasons");
+        if (altmsg == NULL) {
+            PyErr_SetString(exc, "no reason supplied");
+        } else {
+            PyErr_FormatV(exc, altmsg, vargs);
+        }
         return NULL;
     }
+    va_end(vargs);
     ERR_clear_error();
 
     lib = ERR_lib_error_string(errcode);
@@ -123,68 +293,15 @@ py_digest_name(const EVP_MD *md)
 {
     int nid = EVP_MD_nid(md);
     const char *name = NULL;
+    const py_hashentry_t *h;
 
-    /* Hard-coded names for well-known hashing algorithms.
-     * OpenSSL uses slightly different names algorithms like SHA3.
-     */
-    switch (nid) {
-    case NID_md5:
-        name = "md5";
-        break;
-    case NID_sha1:
-        name = "sha1";
-        break;
-    case NID_sha224:
-        name ="sha224";
-        break;
-    case NID_sha256:
-        name ="sha256";
-        break;
-    case NID_sha384:
-        name ="sha384";
-        break;
-    case NID_sha512:
-        name ="sha512";
-        break;
-#ifdef NID_sha512_224
-    case NID_sha512_224:
-        name ="sha512_224";
-        break;
-    case NID_sha512_256:
-        name ="sha512_256";
-        break;
-#endif
-#ifdef PY_OPENSSL_HAS_SHA3
-    case NID_sha3_224:
-        name ="sha3_224";
-        break;
-    case NID_sha3_256:
-        name ="sha3_256";
-        break;
-    case NID_sha3_384:
-        name ="sha3_384";
-        break;
-    case NID_sha3_512:
-        name ="sha3_512";
-        break;
-#endif
-#ifdef PY_OPENSSL_HAS_SHAKE
-    case NID_shake128:
-        name ="shake_128";
-        break;
-    case NID_shake256:
-        name ="shake_256";
-        break;
-#endif
-#ifdef PY_OPENSSL_HAS_BLAKE2
-    case NID_blake2s256:
-        name ="blake2s";
-        break;
-    case NID_blake2b512:
-        name ="blake2b";
-        break;
-#endif
-    default:
+    for (h = py_hashes; h->py_name != NULL; h++) {
+        if (h->ossl_nid == nid) {
+            name = h->py_name;
+            break;
+        }
+    }
+    if (name == NULL) {
         /* Ignore aliased names and only use long, lowercase name. The aliases
          * pollute the list and OpenSSL appears to have its own definition of
          * alias as the resulting list still contains duplicate and alternate
@@ -193,67 +310,58 @@ py_digest_name(const EVP_MD *md)
         name = OBJ_nid2ln(nid);
         if (name == NULL)
             name = OBJ_nid2sn(nid);
-        break;
     }
 
     return PyUnicode_FromString(name);
 }
 
-static const EVP_MD*
-py_digest_by_name(const char *name)
+/* Get EVP_MD by HID and purpose */
+static PY_EVP_MD*
+py_digest_by_name(PyObject *module, const char *name, enum Py_hash_type py_ht)
 {
-    const EVP_MD *digest = EVP_get_digestbyname(name);
+    PY_EVP_MD *digest = NULL;
+    _hashlibstate *state = get_hashlib_state(module);
+    py_hashentry_t *entry = (py_hashentry_t *)_Py_hashtable_get(
+        state->hashtable, (const void*)name
+    );
 
-    /* OpenSSL uses dash instead of underscore in names of some algorithms
-     * like SHA3 and SHAKE. Detect different spellings. */
-    if (digest == NULL) {
-        if (0) {}
-#ifdef NID_sha512_224
-        else if (!strcmp(name, "sha512_224") || !strcmp(name, "SHA512_224")) {
-            digest = EVP_sha512_224();
-        }
-        else if (!strcmp(name, "sha512_256") || !strcmp(name, "SHA512_256")) {
-            digest = EVP_sha512_256();
-        }
-#endif
-#ifdef PY_OPENSSL_HAS_SHA3
-        /* could be sha3_ or shake_, Python never defined upper case */
-        else if (!strcmp(name, "sha3_224")) {
-            digest = EVP_sha3_224();
-        }
-        else if (!strcmp(name, "sha3_256")) {
-            digest = EVP_sha3_256();
-        }
-        else if (!strcmp(name, "sha3_384")) {
-            digest = EVP_sha3_384();
-        }
-        else if (!strcmp(name, "sha3_512")) {
-            digest = EVP_sha3_512();
+    if (entry != NULL) {
+        switch (py_ht) {
+        case Py_ht_evp:
+        case Py_ht_mac:
+        case Py_ht_pbkdf2:
+            if (entry->evp == NULL) {
+                entry->evp = PY_EVP_MD_fetch(entry->ossl_name, NULL);
+            }
+            digest = entry->evp;
+            break;
+        case Py_ht_evp_nosecurity:
+            if (entry->evp_nosecurity == NULL) {
+                entry->evp_nosecurity = PY_EVP_MD_fetch(entry->ossl_name, "-fips");
+            }
+            digest = entry->evp_nosecurity;
+            break;
         }
-#endif
-#ifdef PY_OPENSSL_HAS_SHAKE
-        else if (!strcmp(name, "shake_128")) {
-            digest = EVP_shake128();
-        }
-        else if (!strcmp(name, "shake_256")) {
-            digest = EVP_shake256();
-        }
-#endif
-#ifdef PY_OPENSSL_HAS_BLAKE2
-        else if (!strcmp(name, "blake2s256")) {
-            digest = EVP_blake2s256();
+        if (digest != NULL) {
+            PY_EVP_MD_up_ref(digest);
         }
-        else if (!strcmp(name, "blake2b512")) {
-            digest = EVP_blake2b512();
+    } else {
+        // Fall back for looking up an unindexed OpenSSL specific name.
+        switch (py_ht) {
+        case Py_ht_evp:
+        case Py_ht_mac:
+        case Py_ht_pbkdf2:
+            digest = PY_EVP_MD_fetch(name, NULL);
+            break;
+        case Py_ht_evp_nosecurity:
+            digest = PY_EVP_MD_fetch(name, "-fips");
+            break;
         }
-#endif
     }
-
     if (digest == NULL) {
-        PyErr_Format(PyExc_ValueError, "unsupported hash type %s", name);
+        _setException(PyExc_ValueError, "unsupported hash type %s", name);
         return NULL;
     }
-
     return digest;
 }
 
@@ -264,9 +372,9 @@ py_digest_by_name(const char *name)
  *
  * on error returns NULL with exception set.
  */
-static const EVP_MD*
-py_digest_by_digestmod(PyObject *module, PyObject *digestmod) {
-    const EVP_MD* evp;
+static PY_EVP_MD*
+py_digest_by_digestmod(PyObject *module, PyObject *digestmod, enum Py_hash_type py_ht) {
+    PY_EVP_MD* evp;
     PyObject *name_obj = NULL;
     const char *name;
 
@@ -291,7 +399,7 @@ py_digest_by_digestmod(PyObject *module, PyObject *digestmod) {
         return NULL;
     }
 
-    evp = py_digest_by_name(name);
+    evp = py_digest_by_name(module, name, py_ht);
     if (evp == NULL) {
         return NULL;
     }
@@ -330,7 +438,7 @@ EVP_hash(EVPobject *self, const void *vp, Py_ssize_t len)
         else
             process = Py_SAFE_DOWNCAST(len, Py_ssize_t, unsigned int);
         if (!EVP_DigestUpdate(self->ctx, (const void*)cp, process)) {
-            _setException(PyExc_ValueError);
+            _setException(PyExc_ValueError, NULL);
             return -1;
         }
         len -= process;
@@ -381,7 +489,7 @@ EVP_copy_impl(EVPobject *self)
 
     if (!locked_EVP_MD_CTX_copy(newobj->ctx, self)) {
         Py_DECREF(newobj);
-        return _setException(PyExc_ValueError);
+        return _setException(PyExc_ValueError, NULL);
     }
     return (PyObject *)newobj;
 }
@@ -408,11 +516,11 @@ EVP_digest_impl(EVPobject *self)
     }
 
     if (!locked_EVP_MD_CTX_copy(temp_ctx, self)) {
-        return _setException(PyExc_ValueError);
+        return _setException(PyExc_ValueError, NULL);
     }
     digest_size = EVP_MD_CTX_size(temp_ctx);
     if (!EVP_DigestFinal(temp_ctx, digest, NULL)) {
-        _setException(PyExc_ValueError);
+        _setException(PyExc_ValueError, NULL);
         return NULL;
     }
 
@@ -443,11 +551,11 @@ EVP_hexdigest_impl(EVPobject *self)
 
     /* Get the raw (binary) digest value */
     if (!locked_EVP_MD_CTX_copy(temp_ctx, self)) {
-        return _setException(PyExc_ValueError);
+        return _setException(PyExc_ValueError, NULL);
     }
     digest_size = EVP_MD_CTX_size(temp_ctx);
     if (!EVP_DigestFinal(temp_ctx, digest, NULL)) {
-        _setException(PyExc_ValueError);
+        _setException(PyExc_ValueError, NULL);
         return NULL;
     }
 
@@ -623,14 +731,14 @@ EVPXOF_digest_impl(EVPobject *self, Py_ssize_t length)
     if (!locked_EVP_MD_CTX_copy(temp_ctx, self)) {
         Py_DECREF(retval);
         EVP_MD_CTX_free(temp_ctx);
-        return _setException(PyExc_ValueError);
+        return _setException(PyExc_ValueError, NULL);
     }
     if (!EVP_DigestFinalXOF(temp_ctx,
                             (unsigned char*)PyBytes_AS_STRING(retval),
                             length)) {
         Py_DECREF(retval);
         EVP_MD_CTX_free(temp_ctx);
-        _setException(PyExc_ValueError);
+        _setException(PyExc_ValueError, NULL);
         return NULL;
     }
 
@@ -671,12 +779,12 @@ EVPXOF_hexdigest_impl(EVPobject *self, Py_ssize_t length)
     if (!locked_EVP_MD_CTX_copy(temp_ctx, self)) {
         PyMem_Free(digest);
         EVP_MD_CTX_free(temp_ctx);
-        return _setException(PyExc_ValueError);
+        return _setException(PyExc_ValueError, NULL);
     }
     if (!EVP_DigestFinalXOF(temp_ctx, digest, length)) {
         PyMem_Free(digest);
         EVP_MD_CTX_free(temp_ctx);
-        _setException(PyExc_ValueError);
+        _setException(PyExc_ValueError, NULL);
         return NULL;
     }
 
@@ -744,55 +852,74 @@ static PyType_Spec EVPXOFtype_spec = {
 
 #endif
 
-static PyObject *
-EVPnew(PyObject *module, const EVP_MD *digest,
-       const unsigned char *cp, Py_ssize_t len, int usedforsecurity)
+static PyObject*
+py_evp_fromname(PyObject *module, const char *digestname, PyObject *data_obj,
+                int usedforsecurity)
 {
-    int result = 0;
-    EVPobject *self;
-    PyTypeObject *type = get_hashlib_state(module)->EVPtype;
+    Py_buffer view = { 0 };
+    PY_EVP_MD *digest = NULL;
+    PyTypeObject *type;
+    EVPobject *self = NULL;
 
-    if (!digest) {
-        PyErr_SetString(PyExc_ValueError, "unsupported hash type");
-        return NULL;
+    if (data_obj != NULL) {
+        GET_BUFFER_VIEW_OR_ERROUT(data_obj, &view);
+    }
+
+    digest = py_digest_by_name(
+        module, digestname, usedforsecurity ? Py_ht_evp : Py_ht_evp_nosecurity
+    );
+    if (digest == NULL) {
+        goto exit;
     }
 
-#ifdef PY_OPENSSL_HAS_SHAKE
     if ((EVP_MD_flags(digest) & EVP_MD_FLAG_XOF) == EVP_MD_FLAG_XOF) {
         type = get_hashlib_state(module)->EVPXOFtype;
+    } else {
+        type = get_hashlib_state(module)->EVPtype;
     }
-#endif
 
-    if ((self = newEVPobject(type)) == NULL)
-        return NULL;
+    self = newEVPobject(type);
+    if (self == NULL) {
+        goto exit;
+    }
 
+#if defined(EVP_MD_CTX_FLAG_NON_FIPS_ALLOW) &&  OPENSSL_VERSION_NUMBER >= 0x30000000L
+    // In OpenSSL 1.1.1 the non FIPS allowed flag is context specific while
+    // in 3.0.0 it is a different EVP_MD provider.
     if (!usedforsecurity) {
-#ifdef EVP_MD_CTX_FLAG_NON_FIPS_ALLOW
         EVP_MD_CTX_set_flags(self->ctx, EVP_MD_CTX_FLAG_NON_FIPS_ALLOW);
-#endif
     }
+#endif
 
-
-    if (!EVP_DigestInit_ex(self->ctx, digest, NULL)) {
-        _setException(PyExc_ValueError);
-        Py_DECREF(self);
-        return NULL;
+    int result = EVP_DigestInit_ex(self->ctx, digest, NULL);
+    if (!result) {
+        _setException(PyExc_ValueError, NULL);
+        Py_CLEAR(self);
+        goto exit;
     }
 
-    if (cp && len) {
-        if (len >= HASHLIB_GIL_MINSIZE) {
+    if (view.buf && view.len) {
+        if (view.len >= HASHLIB_GIL_MINSIZE) {
             Py_BEGIN_ALLOW_THREADS
-            result = EVP_hash(self, cp, len);
+            result = EVP_hash(self, view.buf, view.len);
             Py_END_ALLOW_THREADS
         } else {
-            result = EVP_hash(self, cp, len);
+            result = EVP_hash(self, view.buf, view.len);
         }
         if (result == -1) {
-            Py_DECREF(self);
-            return NULL;
+            Py_CLEAR(self);
+            goto exit;
         }
     }
 
+  exit:
+    if (data_obj != NULL) {
+        PyBuffer_Release(&view);
+    }
+    if (digest != NULL) {
+        PY_EVP_MD_free(digest);
+    }
+
     return (PyObject *)self;
 }
 
@@ -820,53 +947,14 @@ EVP_new_impl(PyObject *module, PyObject *name_obj, PyObject *data_obj,
              int usedforsecurity)
 /*[clinic end generated code: output=ddd5053f92dffe90 input=c24554d0337be1b0]*/
 {
-    Py_buffer view = { 0 };
-    PyObject *ret_obj = NULL;
     char *name;
-    const EVP_MD *digest = NULL;
-
     if (!PyArg_Parse(name_obj, "s", &name)) {
         PyErr_SetString(PyExc_TypeError, "name must be a string");
         return NULL;
     }
-
-    if (data_obj)
-        GET_BUFFER_VIEW_OR_ERROUT(data_obj, &view);
-
-    digest = py_digest_by_name(name);
-    if (digest == NULL) {
-        goto exit;
-    }
-
-    ret_obj = EVPnew(module, digest,
-                     (unsigned char*)view.buf, view.len,
-                     usedforsecurity);
-
-exit:
-    if (data_obj)
-        PyBuffer_Release(&view);
-    return ret_obj;
+    return py_evp_fromname(module, name, data_obj, usedforsecurity);
 }
 
-static PyObject*
-EVP_fast_new(PyObject *module, PyObject *data_obj, const EVP_MD *digest,
-             int usedforsecurity)
-{
-    Py_buffer view = { 0 };
-    PyObject *ret_obj;
-
-    if (data_obj)
-        GET_BUFFER_VIEW_OR_ERROUT(data_obj, &view);
-
-    ret_obj = EVPnew(module, digest,
-                     (unsigned char*)view.buf, view.len,
-                     usedforsecurity);
-
-    if (data_obj)
-        PyBuffer_Release(&view);
-
-    return ret_obj;
-}
 
 /*[clinic input]
 _hashlib.openssl_md5
@@ -884,7 +972,7 @@ _hashlib_openssl_md5_impl(PyObject *module, PyObject *data_obj,
                           int usedforsecurity)
 /*[clinic end generated code: output=87b0186440a44f8c input=990e36d5e689b16e]*/
 {
-    return EVP_fast_new(module, data_obj, EVP_md5(), usedforsecurity);
+    return py_evp_fromname(module, Py_hash_md5, data_obj, usedforsecurity);
 }
 
 
@@ -904,7 +992,7 @@ _hashlib_openssl_sha1_impl(PyObject *module, PyObject *data_obj,
                            int usedforsecurity)
 /*[clinic end generated code: output=6813024cf690670d input=948f2f4b6deabc10]*/
 {
-    return EVP_fast_new(module, data_obj, EVP_sha1(), usedforsecurity);
+    return py_evp_fromname(module, Py_hash_sha1, data_obj, usedforsecurity);
 }
 
 
@@ -924,7 +1012,7 @@ _hashlib_openssl_sha224_impl(PyObject *module, PyObject *data_obj,
                              int usedforsecurity)
 /*[clinic end generated code: output=a2dfe7cc4eb14ebb input=f9272821fadca505]*/
 {
-    return EVP_fast_new(module, data_obj, EVP_sha224(), usedforsecurity);
+    return py_evp_fromname(module, Py_hash_sha224, data_obj, usedforsecurity);
 }
 
 
@@ -944,7 +1032,7 @@ _hashlib_openssl_sha256_impl(PyObject *module, PyObject *data_obj,
                              int usedforsecurity)
 /*[clinic end generated code: output=1f874a34870f0a68 input=549fad9d2930d4c5]*/
 {
-    return EVP_fast_new(module, data_obj, EVP_sha256(), usedforsecurity);
+    return py_evp_fromname(module, Py_hash_sha256, data_obj, usedforsecurity);
 }
 
 
@@ -964,7 +1052,7 @@ _hashlib_openssl_sha384_impl(PyObject *module, PyObject *data_obj,
                              int usedforsecurity)
 /*[clinic end generated code: output=58529eff9ca457b2 input=48601a6e3bf14ad7]*/
 {
-    return EVP_fast_new(module, data_obj, EVP_sha384(), usedforsecurity);
+    return py_evp_fromname(module, Py_hash_sha384, data_obj, usedforsecurity);
 }
 
 
@@ -984,7 +1072,7 @@ _hashlib_openssl_sha512_impl(PyObject *module, PyObject *data_obj,
                              int usedforsecurity)
 /*[clinic end generated code: output=2c744c9e4a40d5f6 input=c5c46a2a817aa98f]*/
 {
-    return EVP_fast_new(module, data_obj, EVP_sha512(), usedforsecurity);
+    return py_evp_fromname(module, Py_hash_sha512, data_obj, usedforsecurity);
 }
 
 
@@ -1006,7 +1094,7 @@ _hashlib_openssl_sha3_224_impl(PyObject *module, PyObject *data_obj,
                                int usedforsecurity)
 /*[clinic end generated code: output=144641c1d144b974 input=e3a01b2888916157]*/
 {
-    return EVP_fast_new(module, data_obj, EVP_sha3_224(), usedforsecurity);
+    return py_evp_fromname(module, Py_hash_sha3_224, data_obj, usedforsecurity);
 }
 
 /*[clinic input]
@@ -1025,7 +1113,7 @@ _hashlib_openssl_sha3_256_impl(PyObject *module, PyObject *data_obj,
                                int usedforsecurity)
 /*[clinic end generated code: output=c61f1ab772d06668 input=e2908126c1b6deed]*/
 {
-    return EVP_fast_new(module, data_obj, EVP_sha3_256(), usedforsecurity);
+    return py_evp_fromname(module, Py_hash_sha3_256, data_obj , usedforsecurity);
 }
 
 /*[clinic input]
@@ -1044,7 +1132,7 @@ _hashlib_openssl_sha3_384_impl(PyObject *module, PyObject *data_obj,
                                int usedforsecurity)
 /*[clinic end generated code: output=f68e4846858cf0ee input=ec0edf5c792f8252]*/
 {
-    return EVP_fast_new(module, data_obj, EVP_sha3_384(), usedforsecurity);
+    return py_evp_fromname(module, Py_hash_sha3_384, data_obj , usedforsecurity);
 }
 
 /*[clinic input]
@@ -1063,7 +1151,7 @@ _hashlib_openssl_sha3_512_impl(PyObject *module, PyObject *data_obj,
                                int usedforsecurity)
 /*[clinic end generated code: output=2eede478c159354a input=64e2cc0c094d56f4]*/
 {
-    return EVP_fast_new(module, data_obj, EVP_sha3_512(), usedforsecurity);
+    return py_evp_fromname(module, Py_hash_sha3_512, data_obj , usedforsecurity);
 }
 #endif /* PY_OPENSSL_HAS_SHA3 */
 
@@ -1084,7 +1172,7 @@ _hashlib_openssl_shake_128_impl(PyObject *module, PyObject *data_obj,
                                 int usedforsecurity)
 /*[clinic end generated code: output=bc49cdd8ada1fa97 input=6c9d67440eb33ec8]*/
 {
-    return EVP_fast_new(module, data_obj, EVP_shake128(), usedforsecurity);
+    return py_evp_fromname(module, Py_hash_shake_128, data_obj , usedforsecurity);
 }
 
 /*[clinic input]
@@ -1103,7 +1191,7 @@ _hashlib_openssl_shake_256_impl(PyObject *module, PyObject *data_obj,
                                 int usedforsecurity)
 /*[clinic end generated code: output=358d213be8852df7 input=479cbe9fefd4a9f8]*/
 {
-    return EVP_fast_new(module, data_obj, EVP_shake256(), usedforsecurity);
+    return py_evp_fromname(module, Py_hash_shake_256, data_obj , usedforsecurity);
 }
 #endif /* PY_OPENSSL_HAS_SHAKE */
 
@@ -1129,9 +1217,8 @@ pbkdf2_hmac_impl(PyObject *module, const char *hash_name,
     char *key;
     long dklen;
     int retval;
-    const EVP_MD *digest;
 
-    digest = py_digest_by_name(hash_name);
+    PY_EVP_MD *digest = py_digest_by_name(module, hash_name, Py_ht_pbkdf2);
     if (digest == NULL) {
         goto end;
     }
@@ -1194,11 +1281,14 @@ pbkdf2_hmac_impl(PyObject *module, const char *hash_name,
 
     if (!retval) {
         Py_CLEAR(key_obj);
-        _setException(PyExc_ValueError);
+        _setException(PyExc_ValueError, NULL);
         goto end;
     }
 
   end:
+    if (digest != NULL) {
+        PY_EVP_MD_free(digest);
+    }
     return key_obj;
 }
 
@@ -1297,9 +1387,7 @@ _hashlib_scrypt_impl(PyObject *module, Py_buffer *password, Py_buffer *salt,
     /* let OpenSSL validate the rest */
     retval = EVP_PBE_scrypt(NULL, 0, NULL, 0, n, r, p, maxmem, NULL, 0);
     if (!retval) {
-        /* sorry, can't do much better */
-        PyErr_SetString(PyExc_ValueError,
-                        "Invalid parameter combination for n, r, p, maxmem.");
+        _setException(PyExc_ValueError, "Invalid parameter combination for n, r, p, maxmem.");
         return NULL;
    }
 
@@ -1320,7 +1408,7 @@ _hashlib_scrypt_impl(PyObject *module, Py_buffer *password, Py_buffer *salt,
 
     if (!retval) {
         Py_CLEAR(key_obj);
-        _setException(PyExc_ValueError);
+        _setException(PyExc_ValueError, NULL);
         return NULL;
     }
     return key_obj;
@@ -1348,12 +1436,7 @@ _hashlib_hmac_singleshot_impl(PyObject *module, Py_buffer *key,
     unsigned char md[EVP_MAX_MD_SIZE] = {0};
     unsigned int md_len = 0;
     unsigned char *result;
-    const EVP_MD *evp;
-
-    evp = py_digest_by_digestmod(module, digest);
-    if (evp == NULL) {
-        return NULL;
-    }
+    PY_EVP_MD *evp;
 
     if (key->len > INT_MAX) {
         PyErr_SetString(PyExc_OverflowError,
@@ -1366,6 +1449,11 @@ _hashlib_hmac_singleshot_impl(PyObject *module, Py_buffer *key,
         return NULL;
     }
 
+    evp = py_digest_by_digestmod(module, digest, Py_ht_mac);
+    if (evp == NULL) {
+        return NULL;
+    }
+
     Py_BEGIN_ALLOW_THREADS
     result = HMAC(
         evp,
@@ -1374,9 +1462,10 @@ _hashlib_hmac_singleshot_impl(PyObject *module, Py_buffer *key,
         md, &md_len
     );
     Py_END_ALLOW_THREADS
+    PY_EVP_MD_free(evp);
 
     if (result == NULL) {
-        _setException(PyExc_ValueError);
+        _setException(PyExc_ValueError, NULL);
         return NULL;
     }
     return PyBytes_FromStringAndSize((const char*)md, md_len);
@@ -1403,7 +1492,7 @@ _hashlib_hmac_new_impl(PyObject *module, Py_buffer *key, PyObject *msg_obj,
 /*[clinic end generated code: output=c20d9e4d9ed6d219 input=5f4071dcc7f34362]*/
 {
     PyTypeObject *type = get_hashlib_state(module)->HMACtype;
-    const EVP_MD *digest;
+    PY_EVP_MD *digest;
     HMAC_CTX *ctx = NULL;
     HMACobject *self = NULL;
     int r;
@@ -1420,14 +1509,14 @@ _hashlib_hmac_new_impl(PyObject *module, Py_buffer *key, PyObject *msg_obj,
         return NULL;
     }
 
-    digest = py_digest_by_digestmod(module, digestmod);
+    digest = py_digest_by_digestmod(module, digestmod, Py_ht_mac);
     if (digest == NULL) {
         return NULL;
     }
 
     ctx = HMAC_CTX_new();
     if (ctx == NULL) {
-        _setException(PyExc_ValueError);
+        _setException(PyExc_ValueError, NULL);
         goto error;
     }
 
@@ -1437,8 +1526,9 @@ _hashlib_hmac_new_impl(PyObject *module, Py_buffer *key, PyObject *msg_obj,
         (int)key->len,
         digest,
         NULL /*impl*/);
+    PY_EVP_MD_free(digest);
     if (r == 0) {
-        _setException(PyExc_ValueError);
+        _setException(PyExc_ValueError, NULL);
         goto error;
     }
 
@@ -1508,7 +1598,7 @@ _hmac_update(HMACobject *self, PyObject *obj)
     PyBuffer_Release(&view);
 
     if (r == 0) {
-        _setException(PyExc_ValueError);
+        _setException(PyExc_ValueError, NULL);
         return 0;
     }
     return 1;
@@ -1528,11 +1618,11 @@ _hashlib_HMAC_copy_impl(HMACobject *self)
 
     HMAC_CTX *ctx = HMAC_CTX_new();
     if (ctx == NULL) {
-        return _setException(PyExc_ValueError);
+        return _setException(PyExc_ValueError, NULL);
     }
     if (!locked_HMAC_CTX_copy(ctx, self)) {
         HMAC_CTX_free(ctx);
-        return _setException(PyExc_ValueError);
+        return _setException(PyExc_ValueError, NULL);
     }
 
     retval = (HMACobject *)PyObject_New(HMACobject, Py_TYPE(self));
@@ -1598,13 +1688,13 @@ _hmac_digest(HMACobject *self, unsigned char *buf, unsigned int len)
         return 0;
     }
     if (!locked_HMAC_CTX_copy(temp_ctx, self)) {
-        _setException(PyExc_ValueError);
+        _setException(PyExc_ValueError, NULL);
         return 0;
     }
     int r = HMAC_Final(temp_ctx, buf, &len);
     HMAC_CTX_free(temp_ctx);
     if (r == 0) {
-        _setException(PyExc_ValueError);
+        _setException(PyExc_ValueError, NULL);
         return 0;
     }
     return 1;
@@ -1622,7 +1712,7 @@ _hashlib_HMAC_digest_impl(HMACobject *self)
     unsigned char digest[EVP_MAX_MD_SIZE];
     unsigned int digest_size = _hmac_digest_size(self);
     if (digest_size == 0) {
-        return _setException(PyExc_ValueError);
+        return _setException(PyExc_ValueError, NULL);
     }
     int r = _hmac_digest(self, digest, digest_size);
     if (r == 0) {
@@ -1647,7 +1737,7 @@ _hashlib_HMAC_hexdigest_impl(HMACobject *self)
     unsigned char digest[EVP_MAX_MD_SIZE];
     unsigned int digest_size = _hmac_digest_size(self);
     if (digest_size == 0) {
-        return _setException(PyExc_ValueError);
+        return _setException(PyExc_ValueError, NULL);
     }
     int r = _hmac_digest(self, digest, digest_size);
     if (r == 0) {
@@ -1661,7 +1751,7 @@ _hashlib_hmac_get_digest_size(HMACobject *self, void *closure)
 {
     unsigned int digest_size = _hmac_digest_size(self);
     if (digest_size == 0) {
-        return _setException(PyExc_ValueError);
+        return _setException(PyExc_ValueError, NULL);
     }
     return PyLong_FromLong(digest_size);
 }
@@ -1671,7 +1761,7 @@ _hashlib_hmac_get_block_size(HMACobject *self, void *closure)
 {
     const EVP_MD *md = HMAC_CTX_get_md(self->ctx);
     if (md == NULL) {
-        return _setException(PyExc_ValueError);
+        return _setException(PyExc_ValueError, NULL);
     }
     return PyLong_FromLong(EVP_MD_block_size(md));
 }
@@ -1824,7 +1914,7 @@ _hashlib_get_fips_mode_impl(PyObject *module)
         // But 0 is also a valid result value.
         unsigned long errcode = ERR_peek_last_error();
         if (errcode) {
-            _setException(PyExc_ValueError);
+            _setException(PyExc_ValueError, NULL);
             return -1;
         }
     }
@@ -2000,6 +2090,12 @@ hashlib_clear(PyObject *m)
 #endif
     Py_CLEAR(state->constructs);
     Py_CLEAR(state->unsupported_digestmod_error);
+
+    if (state->hashtable != NULL) {
+        _Py_hashtable_destroy(state->hashtable);
+        state->hashtable = NULL;
+    }
+
     return 0;
 }
 
@@ -2011,6 +2107,19 @@ hashlib_free(void *m)
 
 /* Py_mod_exec functions */
 static int
+hashlib_init_hashtable(PyObject *module)
+{
+    _hashlibstate *state = get_hashlib_state(module);
+
+    state->hashtable = py_hashentry_table_new();
+    if (state->hashtable == NULL) {
+        PyErr_NoMemory();
+        return -1;
+    }
+    return 0;
+}
+
+static int
 hashlib_init_evptype(PyObject *module)
 {
     _hashlibstate *state = get_hashlib_state(module);
@@ -2137,6 +2246,7 @@ hashlib_exception(PyObject *module)
 
 
 static PyModuleDef_Slot hashlib_slots[] = {
+    {Py_mod_exec, hashlib_init_hashtable},
     {Py_mod_exec, hashlib_init_evptype},
     {Py_mod_exec, hashlib_init_evpxoftype},
     {Py_mod_exec, hashlib_init_hmactype},
index 9f25b64..c5c9428 100644 (file)
@@ -400,7 +400,7 @@ pycompilestring(PyObject* self, PyObject *obj) {
     if (the_string == NULL) {
         return NULL;
     }
-    return Py_CompileString(the_string, "blech", Py_file_input);
+    return Py_CompileString(the_string, "<string>", Py_file_input);
 }
 
 static PyObject*
index e536b4a..95c653c 100644 (file)
@@ -93,13 +93,16 @@ atexit_callfuncs(struct atexit_state *state)
             continue;
         }
 
+        // bpo-46025: Increment the refcount of cb->func as the call itself may unregister it
+        PyObject* the_func = Py_NewRef(cb->func);
         PyObject *res = PyObject_Call(cb->func, cb->args, cb->kwargs);
         if (res == NULL) {
-            _PyErr_WriteUnraisableMsg("in atexit callback", cb->func);
+            _PyErr_WriteUnraisableMsg("in atexit callback", the_func);
         }
         else {
             Py_DECREF(res);
         }
+        Py_DECREF(the_func);
     }
 
     atexit_cleanup(state);
index 16da008..4534176 100644 (file)
@@ -977,9 +977,13 @@ is_error(double x)
          * On some platforms (Ubuntu/ia64) it seems that errno can be
          * set to ERANGE for subnormal results that do *not* underflow
          * to zero.  So to be safe, we'll ignore ERANGE whenever the
-         * function result is less than one in absolute value.
+         * function result is less than 1.5 in absolute value.
+         *
+         * bpo-46018: Changed to 1.5 to ensure underflows in expm1()
+         * are correctly detected, since the function may underflow
+         * toward -1.0 rather than 0.0.
          */
-        if (fabs(x) < 1.0)
+        if (fabs(x) < 1.5)
             result = 0;
         else
             PyErr_SetString(PyExc_OverflowError,
index da648b7..801478a 100644 (file)
@@ -221,6 +221,37 @@ PyFunction_SetClosure(PyObject *op, PyObject *closure)
     return 0;
 }
 
+static PyObject *
+func_get_annotation_dict(PyFunctionObject *op)
+{
+    if (op->func_annotations == NULL) {
+        return NULL;
+    }
+    if (PyTuple_CheckExact(op->func_annotations)) {
+        PyObject *ann_tuple = op->func_annotations;
+        PyObject *ann_dict = PyDict_New();
+        if (ann_dict == NULL) {
+            return NULL;
+        }
+
+        assert(PyTuple_GET_SIZE(ann_tuple) % 2 == 0);
+
+        for (Py_ssize_t i = 0; i < PyTuple_GET_SIZE(ann_tuple); i += 2) {
+            int err = PyDict_SetItem(ann_dict,
+                                     PyTuple_GET_ITEM(ann_tuple, i),
+                                     PyTuple_GET_ITEM(ann_tuple, i + 1));
+
+            if (err < 0) {
+                return NULL;
+            }
+        }
+        Py_SETREF(op->func_annotations, ann_dict);
+    }
+    Py_INCREF(op->func_annotations);
+    assert(PyDict_Check(op->func_annotations));
+    return op->func_annotations;
+}
+
 PyObject *
 PyFunction_GetAnnotations(PyObject *op)
 {
@@ -228,7 +259,7 @@ PyFunction_GetAnnotations(PyObject *op)
         PyErr_BadInternalCall();
         return NULL;
     }
-    return ((PyFunctionObject *) op) -> func_annotations;
+    return func_get_annotation_dict((PyFunctionObject *)op);
 }
 
 int
@@ -443,27 +474,7 @@ func_get_annotations(PyFunctionObject *op, void *Py_UNUSED(ignored))
         if (op->func_annotations == NULL)
             return NULL;
     }
-    if (PyTuple_CheckExact(op->func_annotations)) {
-        PyObject *ann_tuple = op->func_annotations;
-        PyObject *ann_dict = PyDict_New();
-        if (ann_dict == NULL) {
-            return NULL;
-        }
-
-        assert(PyTuple_GET_SIZE(ann_tuple) % 2 == 0);
-
-        for (Py_ssize_t i = 0; i < PyTuple_GET_SIZE(ann_tuple); i += 2) {
-            int err = PyDict_SetItem(ann_dict,
-                                     PyTuple_GET_ITEM(ann_tuple, i),
-                                     PyTuple_GET_ITEM(ann_tuple, i + 1));
-
-            if (err < 0)
-                return NULL;
-        }
-        Py_SETREF(op->func_annotations, ann_dict);
-    }
-    Py_INCREF(op->func_annotations);
-    return op->func_annotations;
+    return func_get_annotation_dict(op);
 }
 
 static int
index 3ac38de..33fc4a5 100644 (file)
@@ -145,6 +145,19 @@ gen_send_ex2(PyGenObject *gen, PyObject *arg, PyObject **presult,
     PyObject *result;
 
     *presult = NULL;
+    if (f != NULL && f->f_lasti < 0 && arg && arg != Py_None) {
+        const char *msg = "can't send non-None value to a "
+                            "just-started generator";
+        if (PyCoro_CheckExact(gen)) {
+            msg = NON_INIT_CORO_MSG;
+        }
+        else if (PyAsyncGen_CheckExact(gen)) {
+            msg = "can't send non-None value to a "
+                    "just-started async generator";
+        }
+        PyErr_SetString(PyExc_TypeError, msg);
+        return PYGEN_ERROR;
+    }
     if (f != NULL && _PyFrame_IsExecuting(f)) {
         const char *msg = "generator already executing";
         if (PyCoro_CheckExact(gen)) {
index 6c7f117..c0ccb16 100644 (file)
@@ -1288,6 +1288,7 @@ PyDoc_STRVAR(odict_reversed__doc__, "od.__reversed__() <==> reversed(od)");
 #define _odict_ITER_REVERSED 1
 #define _odict_ITER_KEYS 2
 #define _odict_ITER_VALUES 4
+#define _odict_ITER_ITEMS (_odict_ITER_KEYS|_odict_ITER_VALUES)
 
 /* forward */
 static PyObject * odictiter_new(PyODictObject *, int);
@@ -1705,7 +1706,7 @@ odictiter_dealloc(odictiterobject *di)
     _PyObject_GC_UNTRACK(di);
     Py_XDECREF(di->di_odict);
     Py_XDECREF(di->di_current);
-    if (di->kind & (_odict_ITER_KEYS | _odict_ITER_VALUES)) {
+    if ((di->kind & _odict_ITER_ITEMS) == _odict_ITER_ITEMS) {
         Py_DECREF(di->di_result);
     }
     PyObject_GC_Del(di);
@@ -1911,15 +1912,16 @@ odictiter_new(PyODictObject *od, int kind)
     if (di == NULL)
         return NULL;
 
-    if (kind & (_odict_ITER_KEYS | _odict_ITER_VALUES)){
+    if ((kind & _odict_ITER_ITEMS) == _odict_ITER_ITEMS) {
         di->di_result = PyTuple_Pack(2, Py_None, Py_None);
         if (di->di_result == NULL) {
             Py_DECREF(di);
             return NULL;
         }
     }
-    else
+    else {
         di->di_result = NULL;
+    }
 
     di->kind = kind;
     node = reversed ? _odict_LAST(od) : _odict_FIRST(od);
index 02046e5..b23e36a 100644 (file)
@@ -50,6 +50,11 @@ typedef struct PySlot_Offset {
 } PySlot_Offset;
 
 
+/* bpo-40521: Interned strings are shared by all subinterpreters */
+#ifndef EXPERIMENTAL_ISOLATED_SUBINTERPRETERS
+#  define INTERN_NAME_STRINGS
+#endif
+
 /* alphabetical order */
 _Py_IDENTIFIER(__abstractmethods__);
 _Py_IDENTIFIER(__annotations__);
@@ -3988,6 +3993,7 @@ type_setattro(PyTypeObject *type, PyObject *name, PyObject *value)
             if (name == NULL)
                 return -1;
         }
+#ifdef INTERN_NAME_STRINGS
         if (!PyUnicode_CHECK_INTERNED(name)) {
             PyUnicode_InternInPlace(&name);
             if (!PyUnicode_CHECK_INTERNED(name)) {
@@ -3997,6 +4003,7 @@ type_setattro(PyTypeObject *type, PyObject *name, PyObject *value)
                 return -1;
             }
         }
+#endif
     }
     else {
         /* Will fail in _PyObject_GenericSetAttrWithDict. */
@@ -8344,10 +8351,17 @@ _PyTypes_InitSlotDefs(void)
     for (slotdef *p = slotdefs; p->name; p++) {
         /* Slots must be ordered by their offset in the PyHeapTypeObject. */
         assert(!p[1].name || p->offset <= p[1].offset);
+#ifdef INTERN_NAME_STRINGS
         p->name_strobj = PyUnicode_InternFromString(p->name);
         if (!p->name_strobj || !PyUnicode_CHECK_INTERNED(p->name_strobj)) {
             return _PyStatus_NO_MEMORY();
         }
+#else
+        p->name_strobj = PyUnicode_FromString(p->name);
+        if (!p->name_strobj) {
+            return _PyStatus_NO_MEMORY();
+        }
+#endif
     }
     slotdefs_initialized = 1;
     return _PyStatus_OK();
@@ -8372,16 +8386,24 @@ update_slot(PyTypeObject *type, PyObject *name)
     int offset;
 
     assert(PyUnicode_CheckExact(name));
+#ifdef INTERN_NAME_STRINGS
     assert(PyUnicode_CHECK_INTERNED(name));
+#endif
 
     assert(slotdefs_initialized);
     pp = ptrs;
     for (p = slotdefs; p->name; p++) {
         assert(PyUnicode_CheckExact(p->name_strobj));
         assert(PyUnicode_CheckExact(name));
+#ifdef INTERN_NAME_STRINGS
         if (p->name_strobj == name) {
             *pp++ = p;
         }
+#else
+        if (p->name_strobj == name || _PyUnicode_EQ(p->name_strobj, name)) {
+            *pp++ = p;
+        }
+#endif
     }
     *pp = NULL;
     for (pp = ptrs; *pp; pp++) {
index c728710..077cf8d 100644 (file)
@@ -211,6 +211,22 @@ extern "C" {
 #  define OVERALLOCATE_FACTOR 4
 #endif
 
+/* bpo-40521: Interned strings are shared by all interpreters. */
+#ifndef EXPERIMENTAL_ISOLATED_SUBINTERPRETERS
+#  define INTERNED_STRINGS
+#endif
+
+/* This dictionary holds all interned unicode strings.  Note that references
+   to strings in this dictionary are *not* counted in the string's ob_refcnt.
+   When the interned string reaches a refcnt of 0 the string deallocation
+   function will delete the reference from this dictionary.
+
+   Another way to look at this is that to say that the actual reference
+   count of a string is:  s->ob_refcnt + (s->state ? 2 : 0)
+*/
+#ifdef INTERNED_STRINGS
+static PyObject *interned = NULL;
+#endif
 
 static struct _Py_unicode_state*
 get_unicode_state(void)
@@ -1936,7 +1952,7 @@ unicode_dealloc(PyObject *unicode)
 
     case SSTATE_INTERNED_MORTAL:
     {
-        struct _Py_unicode_state *state = get_unicode_state();
+#ifdef INTERNED_STRINGS
         /* Revive the dead object temporarily. PyDict_DelItem() removes two
            references (key and value) which were ignored by
            PyUnicode_InternInPlace(). Use refcnt=3 rather than refcnt=2
@@ -1944,12 +1960,13 @@ unicode_dealloc(PyObject *unicode)
            PyDict_DelItem(). */
         assert(Py_REFCNT(unicode) == 0);
         Py_SET_REFCNT(unicode, 3);
-        if (PyDict_DelItem(state->interned, unicode) != 0) {
+        if (PyDict_DelItem(interned, unicode) != 0) {
             _PyErr_WriteUnraisableMsg("deletion of interned string failed",
                                       NULL);
         }
         assert(Py_REFCNT(unicode) == 1);
         Py_SET_REFCNT(unicode, 0);
+#endif
         break;
     }
 
@@ -11600,11 +11617,13 @@ _PyUnicode_EqualToASCIIId(PyObject *left, _Py_Identifier *right)
     if (PyUnicode_CHECK_INTERNED(left))
         return 0;
 
+#ifdef INTERNED_STRINGS
     assert(_PyUnicode_HASH(right_uni) != -1);
     Py_hash_t hash = _PyUnicode_HASH(left);
     if (hash != -1 && hash != _PyUnicode_HASH(right_uni)) {
         return 0;
     }
+#endif
 
     return unicode_compare_eq(left, right_uni);
 }
@@ -15833,21 +15852,21 @@ PyUnicode_InternInPlace(PyObject **p)
         return;
     }
 
+#ifdef INTERNED_STRINGS
     if (PyUnicode_READY(s) == -1) {
         PyErr_Clear();
         return;
     }
 
-    struct _Py_unicode_state *state = get_unicode_state();
-    if (state->interned == NULL) {
-        state->interned = PyDict_New();
-        if (state->interned == NULL) {
+    if (interned == NULL) {
+        interned = PyDict_New();
+        if (interned == NULL) {
             PyErr_Clear(); /* Don't leave an exception */
             return;
         }
     }
 
-    PyObject *t = PyDict_SetDefault(state->interned, s, s);
+    PyObject *t = PyDict_SetDefault(interned, s, s);
     if (t == NULL) {
         PyErr_Clear();
         return;
@@ -15864,9 +15883,13 @@ PyUnicode_InternInPlace(PyObject **p)
        this. */
     Py_SET_REFCNT(s, Py_REFCNT(s) - 2);
     _PyUnicode_STATE(s).interned = SSTATE_INTERNED_MORTAL;
+#else
+    // PyDict expects that interned strings have their hash
+    // (PyASCIIObject.hash) already computed.
+    (void)unicode_hash(s);
+#endif
 }
 
-
 void
 PyUnicode_InternImmortal(PyObject **p)
 {
@@ -15900,11 +15923,15 @@ PyUnicode_InternFromString(const char *cp)
 void
 _PyUnicode_ClearInterned(PyInterpreterState *interp)
 {
-    struct _Py_unicode_state *state = &interp->unicode;
-    if (state->interned == NULL) {
+    if (!_Py_IsMainInterpreter(interp)) {
+        // interned dict is shared by all interpreters
+        return;
+    }
+
+    if (interned == NULL) {
         return;
     }
-    assert(PyDict_CheckExact(state->interned));
+    assert(PyDict_CheckExact(interned));
 
     /* Interned unicode strings are not forcibly deallocated; rather, we give
        them their stolen references back, and then clear and DECREF the
@@ -15912,13 +15939,13 @@ _PyUnicode_ClearInterned(PyInterpreterState *interp)
 
 #ifdef INTERNED_STATS
     fprintf(stderr, "releasing %zd interned strings\n",
-            PyDict_GET_SIZE(state->interned));
+            PyDict_GET_SIZE(interned));
 
     Py_ssize_t immortal_size = 0, mortal_size = 0;
 #endif
     Py_ssize_t pos = 0;
     PyObject *s, *ignored_value;
-    while (PyDict_Next(state->interned, &pos, &s, &ignored_value)) {
+    while (PyDict_Next(interned, &pos, &s, &ignored_value)) {
         assert(PyUnicode_IS_READY(s));
 
         switch (PyUnicode_CHECK_INTERNED(s)) {
@@ -15949,8 +15976,8 @@ _PyUnicode_ClearInterned(PyInterpreterState *interp)
             mortal_size, immortal_size);
 #endif
 
-    PyDict_Clear(state->interned);
-    Py_CLEAR(state->interned);
+    PyDict_Clear(interned);
+    Py_CLEAR(interned);
 }
 
 
@@ -16322,8 +16349,10 @@ _PyUnicode_Fini(PyInterpreterState *interp)
 {
     struct _Py_unicode_state *state = &interp->unicode;
 
-    // _PyUnicode_ClearInterned() must be called before
-    assert(state->interned == NULL);
+    if (_Py_IsMainInterpreter(interp)) {
+        // _PyUnicode_ClearInterned() must be called before _PyUnicode_Fini()
+        assert(interned == NULL);
+    }
 
     _PyUnicode_FiniEncodings(&state->fs_codec);
 
index 90fc6ba..e6c1d24 100644 (file)
@@ -5,7 +5,7 @@
 #include "winver.h"
 
 #define PYTHON_COMPANY   "Python Software Foundation"
-#define PYTHON_COPYRIGHT "Copyright \xA9 2001-2021 Python Software Foundation. Copyright \xA9 2000 BeOpen.com. Copyright \xA9 1995-2001 CNRI. Copyright \xA9 1991-1995 SMC."
+#define PYTHON_COPYRIGHT "Copyright \xA9 2001-2022 Python Software Foundation. Copyright \xA9 2000 BeOpen.com. Copyright \xA9 1995-2001 CNRI. Copyright \xA9 1991-1995 SMC."
 
 #define MS_WINDOWS
 #include "modsupport.h"
index 9dd0866..89fbf0d 100644 (file)
@@ -53,7 +53,7 @@ echo.Fetching external libraries...
 set libraries=\r
 set libraries=%libraries%                                       bzip2-1.0.6\r
 if NOT "%IncludeLibffiSrc%"=="false" set libraries=%libraries%  libffi-3.3.0\r
-if NOT "%IncludeSSLSrc%"=="false" set libraries=%libraries%     openssl-1.1.1l\r
+if NOT "%IncludeSSLSrc%"=="false" set libraries=%libraries%     openssl-1.1.1m\r
 set libraries=%libraries%                                       sqlite-3.35.5.0\r
 if NOT "%IncludeTkinterSrc%"=="false" set libraries=%libraries% tcl-core-8.6.12.0\r
 if NOT "%IncludeTkinterSrc%"=="false" set libraries=%libraries% tk-8.6.12.0\r
@@ -77,7 +77,7 @@ echo.Fetching external binaries...
 \r
 set binaries=\r
 if NOT "%IncludeLibffi%"=="false"  set binaries=%binaries% libffi-3.3.0\r
-if NOT "%IncludeSSL%"=="false"     set binaries=%binaries% openssl-bin-1.1.1l\r
+if NOT "%IncludeSSL%"=="false"     set binaries=%binaries% openssl-bin-1.1.1m\r
 if NOT "%IncludeTkinter%"=="false" set binaries=%binaries% tcltk-8.6.12.0\r
 if NOT "%IncludeSSLSrc%"=="false"  set binaries=%binaries% nasm-2.11.06\r
 \r
index 5409030..801077b 100644 (file)
@@ -63,8 +63,8 @@
     <libffiDir>$(ExternalsDir)libffi-3.3.0\</libffiDir>\r
     <libffiOutDir>$(ExternalsDir)libffi-3.3.0\$(ArchName)\</libffiOutDir>\r
     <libffiIncludeDir>$(libffiOutDir)include</libffiIncludeDir>\r
-    <opensslDir>$(ExternalsDir)openssl-1.1.1l\</opensslDir>\r
-    <opensslOutDir>$(ExternalsDir)openssl-bin-1.1.1l\$(ArchName)\</opensslOutDir>\r
+    <opensslDir>$(ExternalsDir)openssl-1.1.1m\</opensslDir>\r
+    <opensslOutDir>$(ExternalsDir)openssl-bin-1.1.1m\$(ArchName)\</opensslOutDir>\r
     <opensslIncludeDir>$(opensslOutDir)include</opensslIncludeDir>\r
     <nasmDir>$(ExternalsDir)\nasm-2.11.06\</nasmDir>\r
     <zlibDir>$(ExternalsDir)\zlib-1.2.11\</zlibDir>\r
index 85225fc..32fdc01 100644 (file)
@@ -74,7 +74,7 @@ module Python
          -- x < 4 < 3 and (x < 4) < 3
          | Compare(expr left, cmpop* ops, expr* comparators)
          | Call(expr func, expr* args, keyword* keywords)
-         | FormattedValue(expr value, int? conversion, expr? format_spec)
+         | FormattedValue(expr value, int conversion, expr? format_spec)
          | JoinedStr(expr* values)
          | Constant(constant value, string? kind)
 
index 67515ec..7e6f048 100644 (file)
@@ -6,6 +6,8 @@
 #else
 #  define D(x)
 #endif
+
+# define MAXSTACK 6000
 static const int n_keyword_lists = 9;
 static KeywordToken *reserved_keywords[] = {
     (KeywordToken[]) {{NULL, -1}},
@@ -932,16 +934,19 @@ static void *_tmp_206_rule(Parser *p);
 static mod_ty
 file_rule(Parser *p)
 {
-    D(p->level++);
+    if (p->level++ == MAXSTACK) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+    }
     if (p->error_indicator) {
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     mod_ty _res = NULL;
     int _mark = p->mark;
     { // statements? $
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> file[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "statements? $"));
@@ -957,7 +962,7 @@ file_rule(Parser *p)
             _res = _PyPegen_make_module ( p , a );
             if (_res == NULL && PyErr_Occurred()) {
                 p->error_indicator = 1;
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             goto done;
@@ -968,7 +973,7 @@ file_rule(Parser *p)
     }
     _res = NULL;
   done:
-    D(p->level--);
+    p->level--;
     return _res;
 }
 
@@ -976,16 +981,19 @@ file_rule(Parser *p)
 static mod_ty
 interactive_rule(Parser *p)
 {
-    D(p->level++);
+    if (p->level++ == MAXSTACK) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+    }
     if (p->error_indicator) {
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     mod_ty _res = NULL;
     int _mark = p->mark;
     { // statement_newline
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> interactive[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "statement_newline"));
@@ -998,7 +1006,7 @@ interactive_rule(Parser *p)
             _res = _PyAST_Interactive ( a , p -> arena );
             if (_res == NULL && PyErr_Occurred()) {
                 p->error_indicator = 1;
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             goto done;
@@ -1009,7 +1017,7 @@ interactive_rule(Parser *p)
     }
     _res = NULL;
   done:
-    D(p->level--);
+    p->level--;
     return _res;
 }
 
@@ -1017,16 +1025,19 @@ interactive_rule(Parser *p)
 static mod_ty
 eval_rule(Parser *p)
 {
-    D(p->level++);
+    if (p->level++ == MAXSTACK) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+    }
     if (p->error_indicator) {
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     mod_ty _res = NULL;
     int _mark = p->mark;
     { // expressions NEWLINE* $
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> eval[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "expressions NEWLINE* $"));
@@ -1045,7 +1056,7 @@ eval_rule(Parser *p)
             _res = _PyAST_Expression ( a , p -> arena );
             if (_res == NULL && PyErr_Occurred()) {
                 p->error_indicator = 1;
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             goto done;
@@ -1056,7 +1067,7 @@ eval_rule(Parser *p)
     }
     _res = NULL;
   done:
-    D(p->level--);
+    p->level--;
     return _res;
 }
 
@@ -1064,16 +1075,19 @@ eval_rule(Parser *p)
 static mod_ty
 func_type_rule(Parser *p)
 {
-    D(p->level++);
+    if (p->level++ == MAXSTACK) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+    }
     if (p->error_indicator) {
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     mod_ty _res = NULL;
     int _mark = p->mark;
     { // '(' type_expressions? ')' '->' expression NEWLINE* $
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> func_type[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'(' type_expressions? ')' '->' expression NEWLINE* $"));
@@ -1104,7 +1118,7 @@ func_type_rule(Parser *p)
             _res = _PyAST_FunctionType ( a , b , p -> arena );
             if (_res == NULL && PyErr_Occurred()) {
                 p->error_indicator = 1;
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             goto done;
@@ -1115,7 +1129,7 @@ func_type_rule(Parser *p)
     }
     _res = NULL;
   done:
-    D(p->level--);
+    p->level--;
     return _res;
 }
 
@@ -1123,16 +1137,19 @@ func_type_rule(Parser *p)
 static expr_ty
 fstring_rule(Parser *p)
 {
-    D(p->level++);
+    if (p->level++ == MAXSTACK) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+    }
     if (p->error_indicator) {
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     expr_ty _res = NULL;
     int _mark = p->mark;
     { // star_expressions
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> fstring[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "star_expressions"));
@@ -1151,7 +1168,7 @@ fstring_rule(Parser *p)
     }
     _res = NULL;
   done:
-    D(p->level--);
+    p->level--;
     return _res;
 }
 
@@ -1166,16 +1183,19 @@ fstring_rule(Parser *p)
 static asdl_expr_seq*
 type_expressions_rule(Parser *p)
 {
-    D(p->level++);
+    if (p->level++ == MAXSTACK) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+    }
     if (p->error_indicator) {
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     asdl_expr_seq* _res = NULL;
     int _mark = p->mark;
     { // ','.expression+ ',' '*' expression ',' '**' expression
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> type_expressions[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "','.expression+ ',' '*' expression ',' '**' expression"));
@@ -1206,7 +1226,7 @@ type_expressions_rule(Parser *p)
             _res = ( asdl_expr_seq * ) _PyPegen_seq_append_to_end ( p , CHECK ( asdl_seq * , _PyPegen_seq_append_to_end ( p , a , b ) ) , c );
             if (_res == NULL && PyErr_Occurred()) {
                 p->error_indicator = 1;
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             goto done;
@@ -1217,7 +1237,7 @@ type_expressions_rule(Parser *p)
     }
     { // ','.expression+ ',' '*' expression
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> type_expressions[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "','.expression+ ',' '*' expression"));
@@ -1239,7 +1259,7 @@ type_expressions_rule(Parser *p)
             _res = ( asdl_expr_seq * ) _PyPegen_seq_append_to_end ( p , a , b );
             if (_res == NULL && PyErr_Occurred()) {
                 p->error_indicator = 1;
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             goto done;
@@ -1250,7 +1270,7 @@ type_expressions_rule(Parser *p)
     }
     { // ','.expression+ ',' '**' expression
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> type_expressions[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "','.expression+ ',' '**' expression"));
@@ -1272,7 +1292,7 @@ type_expressions_rule(Parser *p)
             _res = ( asdl_expr_seq * ) _PyPegen_seq_append_to_end ( p , a , b );
             if (_res == NULL && PyErr_Occurred()) {
                 p->error_indicator = 1;
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             goto done;
@@ -1283,7 +1303,7 @@ type_expressions_rule(Parser *p)
     }
     { // '*' expression ',' '**' expression
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> type_expressions[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'*' expression ',' '**' expression"));
@@ -1308,7 +1328,7 @@ type_expressions_rule(Parser *p)
             _res = ( asdl_expr_seq * ) _PyPegen_seq_append_to_end ( p , CHECK ( asdl_seq * , _PyPegen_singleton_seq ( p , a ) ) , b );
             if (_res == NULL && PyErr_Occurred()) {
                 p->error_indicator = 1;
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             goto done;
@@ -1319,7 +1339,7 @@ type_expressions_rule(Parser *p)
     }
     { // '*' expression
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> type_expressions[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'*' expression"));
@@ -1335,7 +1355,7 @@ type_expressions_rule(Parser *p)
             _res = ( asdl_expr_seq * ) _PyPegen_singleton_seq ( p , a );
             if (_res == NULL && PyErr_Occurred()) {
                 p->error_indicator = 1;
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             goto done;
@@ -1346,7 +1366,7 @@ type_expressions_rule(Parser *p)
     }
     { // '**' expression
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> type_expressions[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'**' expression"));
@@ -1362,7 +1382,7 @@ type_expressions_rule(Parser *p)
             _res = ( asdl_expr_seq * ) _PyPegen_singleton_seq ( p , a );
             if (_res == NULL && PyErr_Occurred()) {
                 p->error_indicator = 1;
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             goto done;
@@ -1373,7 +1393,7 @@ type_expressions_rule(Parser *p)
     }
     { // ','.expression+
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> type_expressions[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "','.expression+"));
@@ -1386,7 +1406,7 @@ type_expressions_rule(Parser *p)
             _res = a;
             if (_res == NULL && PyErr_Occurred()) {
                 p->error_indicator = 1;
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             goto done;
@@ -1397,7 +1417,7 @@ type_expressions_rule(Parser *p)
     }
     _res = NULL;
   done:
-    D(p->level--);
+    p->level--;
     return _res;
 }
 
@@ -1405,16 +1425,19 @@ type_expressions_rule(Parser *p)
 static asdl_stmt_seq*
 statements_rule(Parser *p)
 {
-    D(p->level++);
+    if (p->level++ == MAXSTACK) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+    }
     if (p->error_indicator) {
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     asdl_stmt_seq* _res = NULL;
     int _mark = p->mark;
     { // statement+
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> statements[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "statement+"));
@@ -1427,7 +1450,7 @@ statements_rule(Parser *p)
             _res = ( asdl_stmt_seq * ) _PyPegen_seq_flatten ( p , a );
             if (_res == NULL && PyErr_Occurred()) {
                 p->error_indicator = 1;
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             goto done;
@@ -1438,7 +1461,7 @@ statements_rule(Parser *p)
     }
     _res = NULL;
   done:
-    D(p->level--);
+    p->level--;
     return _res;
 }
 
@@ -1446,16 +1469,19 @@ statements_rule(Parser *p)
 static asdl_stmt_seq*
 statement_rule(Parser *p)
 {
-    D(p->level++);
+    if (p->level++ == MAXSTACK) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+    }
     if (p->error_indicator) {
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     asdl_stmt_seq* _res = NULL;
     int _mark = p->mark;
     { // compound_stmt
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> statement[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "compound_stmt"));
@@ -1468,7 +1494,7 @@ statement_rule(Parser *p)
             _res = ( asdl_stmt_seq * ) _PyPegen_singleton_seq ( p , a );
             if (_res == NULL && PyErr_Occurred()) {
                 p->error_indicator = 1;
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             goto done;
@@ -1479,7 +1505,7 @@ statement_rule(Parser *p)
     }
     { // simple_stmts
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> statement[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "simple_stmts"));
@@ -1492,7 +1518,7 @@ statement_rule(Parser *p)
             _res = a;
             if (_res == NULL && PyErr_Occurred()) {
                 p->error_indicator = 1;
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             goto done;
@@ -1503,7 +1529,7 @@ statement_rule(Parser *p)
     }
     _res = NULL;
   done:
-    D(p->level--);
+    p->level--;
     return _res;
 }
 
@@ -1511,16 +1537,19 @@ statement_rule(Parser *p)
 static asdl_stmt_seq*
 statement_newline_rule(Parser *p)
 {
-    D(p->level++);
+    if (p->level++ == MAXSTACK) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+    }
     if (p->error_indicator) {
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     asdl_stmt_seq* _res = NULL;
     int _mark = p->mark;
     if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) {
         p->error_indicator = 1;
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     int _start_lineno = p->tokens[_mark]->lineno;
@@ -1529,7 +1558,7 @@ statement_newline_rule(Parser *p)
     UNUSED(_start_col_offset); // Only used by EXTRA macro
     { // compound_stmt NEWLINE
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> statement_newline[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "compound_stmt NEWLINE"));
@@ -1545,7 +1574,7 @@ statement_newline_rule(Parser *p)
             _res = ( asdl_stmt_seq * ) _PyPegen_singleton_seq ( p , a );
             if (_res == NULL && PyErr_Occurred()) {
                 p->error_indicator = 1;
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             goto done;
@@ -1556,7 +1585,7 @@ statement_newline_rule(Parser *p)
     }
     { // simple_stmts
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> statement_newline[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "simple_stmts"));
@@ -1575,7 +1604,7 @@ statement_newline_rule(Parser *p)
     }
     { // NEWLINE
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> statement_newline[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "NEWLINE"));
@@ -1587,7 +1616,7 @@ statement_newline_rule(Parser *p)
             D(fprintf(stderr, "%*c+ statement_newline[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "NEWLINE"));
             Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
             if (_token == NULL) {
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             int _end_lineno = _token->end_lineno;
@@ -1597,7 +1626,7 @@ statement_newline_rule(Parser *p)
             _res = ( asdl_stmt_seq * ) _PyPegen_singleton_seq ( p , CHECK ( stmt_ty , _PyAST_Pass ( EXTRA ) ) );
             if (_res == NULL && PyErr_Occurred()) {
                 p->error_indicator = 1;
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             goto done;
@@ -1608,7 +1637,7 @@ statement_newline_rule(Parser *p)
     }
     { // $
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> statement_newline[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "$"));
@@ -1621,7 +1650,7 @@ statement_newline_rule(Parser *p)
             _res = _PyPegen_interactive_exit ( p );
             if (_res == NULL && PyErr_Occurred()) {
                 p->error_indicator = 1;
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             goto done;
@@ -1632,7 +1661,7 @@ statement_newline_rule(Parser *p)
     }
     _res = NULL;
   done:
-    D(p->level--);
+    p->level--;
     return _res;
 }
 
@@ -1640,16 +1669,19 @@ statement_newline_rule(Parser *p)
 static asdl_stmt_seq*
 simple_stmts_rule(Parser *p)
 {
-    D(p->level++);
+    if (p->level++ == MAXSTACK) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+    }
     if (p->error_indicator) {
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     asdl_stmt_seq* _res = NULL;
     int _mark = p->mark;
     { // simple_stmt !';' NEWLINE
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> simple_stmts[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "simple_stmt !';' NEWLINE"));
@@ -1667,7 +1699,7 @@ simple_stmts_rule(Parser *p)
             _res = ( asdl_stmt_seq * ) _PyPegen_singleton_seq ( p , a );
             if (_res == NULL && PyErr_Occurred()) {
                 p->error_indicator = 1;
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             goto done;
@@ -1678,7 +1710,7 @@ simple_stmts_rule(Parser *p)
     }
     { // ';'.simple_stmt+ ';'? NEWLINE
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> simple_stmts[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "';'.simple_stmt+ ';'? NEWLINE"));
@@ -1698,7 +1730,7 @@ simple_stmts_rule(Parser *p)
             _res = a;
             if (_res == NULL && PyErr_Occurred()) {
                 p->error_indicator = 1;
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             goto done;
@@ -1709,7 +1741,7 @@ simple_stmts_rule(Parser *p)
     }
     _res = NULL;
   done:
-    D(p->level--);
+    p->level--;
     return _res;
 }
 
@@ -1730,20 +1762,23 @@ simple_stmts_rule(Parser *p)
 static stmt_ty
 simple_stmt_rule(Parser *p)
 {
-    D(p->level++);
+    if (p->level++ == MAXSTACK) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+    }
     if (p->error_indicator) {
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     stmt_ty _res = NULL;
     if (_PyPegen_is_memoized(p, simple_stmt_type, &_res)) {
-        D(p->level--);
+        p->level--;
         return _res;
     }
     int _mark = p->mark;
     if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) {
         p->error_indicator = 1;
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     int _start_lineno = p->tokens[_mark]->lineno;
@@ -1752,7 +1787,7 @@ simple_stmt_rule(Parser *p)
     UNUSED(_start_col_offset); // Only used by EXTRA macro
     { // assignment
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> simple_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "assignment"));
@@ -1771,7 +1806,7 @@ simple_stmt_rule(Parser *p)
     }
     { // star_expressions
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> simple_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "star_expressions"));
@@ -1783,7 +1818,7 @@ simple_stmt_rule(Parser *p)
             D(fprintf(stderr, "%*c+ simple_stmt[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "star_expressions"));
             Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
             if (_token == NULL) {
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             int _end_lineno = _token->end_lineno;
@@ -1793,7 +1828,7 @@ simple_stmt_rule(Parser *p)
             _res = _PyAST_Expr ( e , EXTRA );
             if (_res == NULL && PyErr_Occurred()) {
                 p->error_indicator = 1;
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             goto done;
@@ -1804,7 +1839,7 @@ simple_stmt_rule(Parser *p)
     }
     { // &'return' return_stmt
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> simple_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "&'return' return_stmt"));
@@ -1825,7 +1860,7 @@ simple_stmt_rule(Parser *p)
     }
     { // &('import' | 'from') import_stmt
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> simple_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "&('import' | 'from') import_stmt"));
@@ -1846,7 +1881,7 @@ simple_stmt_rule(Parser *p)
     }
     { // &'raise' raise_stmt
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> simple_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "&'raise' raise_stmt"));
@@ -1867,7 +1902,7 @@ simple_stmt_rule(Parser *p)
     }
     { // 'pass'
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> simple_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'pass'"));
@@ -1879,7 +1914,7 @@ simple_stmt_rule(Parser *p)
             D(fprintf(stderr, "%*c+ simple_stmt[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'pass'"));
             Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
             if (_token == NULL) {
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             int _end_lineno = _token->end_lineno;
@@ -1889,7 +1924,7 @@ simple_stmt_rule(Parser *p)
             _res = _PyAST_Pass ( EXTRA );
             if (_res == NULL && PyErr_Occurred()) {
                 p->error_indicator = 1;
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             goto done;
@@ -1900,7 +1935,7 @@ simple_stmt_rule(Parser *p)
     }
     { // &'del' del_stmt
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> simple_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "&'del' del_stmt"));
@@ -1921,7 +1956,7 @@ simple_stmt_rule(Parser *p)
     }
     { // &'yield' yield_stmt
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> simple_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "&'yield' yield_stmt"));
@@ -1942,7 +1977,7 @@ simple_stmt_rule(Parser *p)
     }
     { // &'assert' assert_stmt
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> simple_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "&'assert' assert_stmt"));
@@ -1963,7 +1998,7 @@ simple_stmt_rule(Parser *p)
     }
     { // 'break'
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> simple_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'break'"));
@@ -1975,7 +2010,7 @@ simple_stmt_rule(Parser *p)
             D(fprintf(stderr, "%*c+ simple_stmt[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'break'"));
             Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
             if (_token == NULL) {
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             int _end_lineno = _token->end_lineno;
@@ -1985,7 +2020,7 @@ simple_stmt_rule(Parser *p)
             _res = _PyAST_Break ( EXTRA );
             if (_res == NULL && PyErr_Occurred()) {
                 p->error_indicator = 1;
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             goto done;
@@ -1996,7 +2031,7 @@ simple_stmt_rule(Parser *p)
     }
     { // 'continue'
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> simple_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'continue'"));
@@ -2008,7 +2043,7 @@ simple_stmt_rule(Parser *p)
             D(fprintf(stderr, "%*c+ simple_stmt[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'continue'"));
             Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
             if (_token == NULL) {
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             int _end_lineno = _token->end_lineno;
@@ -2018,7 +2053,7 @@ simple_stmt_rule(Parser *p)
             _res = _PyAST_Continue ( EXTRA );
             if (_res == NULL && PyErr_Occurred()) {
                 p->error_indicator = 1;
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             goto done;
@@ -2029,7 +2064,7 @@ simple_stmt_rule(Parser *p)
     }
     { // &'global' global_stmt
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> simple_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "&'global' global_stmt"));
@@ -2050,7 +2085,7 @@ simple_stmt_rule(Parser *p)
     }
     { // &'nonlocal' nonlocal_stmt
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> simple_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "&'nonlocal' nonlocal_stmt"));
@@ -2072,7 +2107,7 @@ simple_stmt_rule(Parser *p)
     _res = NULL;
   done:
     _PyPegen_insert_memo(p, _mark, simple_stmt_type, _res);
-    D(p->level--);
+    p->level--;
     return _res;
 }
 
@@ -2088,16 +2123,19 @@ simple_stmt_rule(Parser *p)
 static stmt_ty
 compound_stmt_rule(Parser *p)
 {
-    D(p->level++);
+    if (p->level++ == MAXSTACK) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+    }
     if (p->error_indicator) {
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     stmt_ty _res = NULL;
     int _mark = p->mark;
     { // &('def' | '@' | ASYNC) function_def
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> compound_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "&('def' | '@' | ASYNC) function_def"));
@@ -2118,7 +2156,7 @@ compound_stmt_rule(Parser *p)
     }
     { // &'if' if_stmt
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> compound_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "&'if' if_stmt"));
@@ -2139,7 +2177,7 @@ compound_stmt_rule(Parser *p)
     }
     { // &('class' | '@') class_def
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> compound_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "&('class' | '@') class_def"));
@@ -2160,7 +2198,7 @@ compound_stmt_rule(Parser *p)
     }
     { // &('with' | ASYNC) with_stmt
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> compound_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "&('with' | ASYNC) with_stmt"));
@@ -2181,7 +2219,7 @@ compound_stmt_rule(Parser *p)
     }
     { // &('for' | ASYNC) for_stmt
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> compound_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "&('for' | ASYNC) for_stmt"));
@@ -2202,7 +2240,7 @@ compound_stmt_rule(Parser *p)
     }
     { // &'try' try_stmt
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> compound_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "&'try' try_stmt"));
@@ -2223,7 +2261,7 @@ compound_stmt_rule(Parser *p)
     }
     { // &'while' while_stmt
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> compound_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "&'while' while_stmt"));
@@ -2244,7 +2282,7 @@ compound_stmt_rule(Parser *p)
     }
     { // match_stmt
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> compound_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "match_stmt"));
@@ -2263,7 +2301,7 @@ compound_stmt_rule(Parser *p)
     }
     _res = NULL;
   done:
-    D(p->level--);
+    p->level--;
     return _res;
 }
 
@@ -2276,16 +2314,19 @@ compound_stmt_rule(Parser *p)
 static stmt_ty
 assignment_rule(Parser *p)
 {
-    D(p->level++);
+    if (p->level++ == MAXSTACK) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+    }
     if (p->error_indicator) {
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     stmt_ty _res = NULL;
     int _mark = p->mark;
     if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) {
         p->error_indicator = 1;
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     int _start_lineno = p->tokens[_mark]->lineno;
@@ -2294,7 +2335,7 @@ assignment_rule(Parser *p)
     UNUSED(_start_col_offset); // Only used by EXTRA macro
     { // NAME ':' expression ['=' annotated_rhs]
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> assignment[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "NAME ':' expression ['=' annotated_rhs]"));
@@ -2315,7 +2356,7 @@ assignment_rule(Parser *p)
             D(fprintf(stderr, "%*c+ assignment[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "NAME ':' expression ['=' annotated_rhs]"));
             Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
             if (_token == NULL) {
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             int _end_lineno = _token->end_lineno;
@@ -2325,7 +2366,7 @@ assignment_rule(Parser *p)
             _res = CHECK_VERSION ( stmt_ty , 6 , "Variable annotation syntax is" , _PyAST_AnnAssign ( CHECK ( expr_ty , _PyPegen_set_expr_context ( p , a , Store ) ) , b , c , 1 , EXTRA ) );
             if (_res == NULL && PyErr_Occurred()) {
                 p->error_indicator = 1;
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             goto done;
@@ -2336,7 +2377,7 @@ assignment_rule(Parser *p)
     }
     { // ('(' single_target ')' | single_subscript_attribute_target) ':' expression ['=' annotated_rhs]
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> assignment[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "('(' single_target ')' | single_subscript_attribute_target) ':' expression ['=' annotated_rhs]"));
@@ -2357,7 +2398,7 @@ assignment_rule(Parser *p)
             D(fprintf(stderr, "%*c+ assignment[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "('(' single_target ')' | single_subscript_attribute_target) ':' expression ['=' annotated_rhs]"));
             Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
             if (_token == NULL) {
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             int _end_lineno = _token->end_lineno;
@@ -2367,7 +2408,7 @@ assignment_rule(Parser *p)
             _res = CHECK_VERSION ( stmt_ty , 6 , "Variable annotations syntax is" , _PyAST_AnnAssign ( a , b , c , 0 , EXTRA ) );
             if (_res == NULL && PyErr_Occurred()) {
                 p->error_indicator = 1;
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             goto done;
@@ -2378,7 +2419,7 @@ assignment_rule(Parser *p)
     }
     { // ((star_targets '='))+ (yield_expr | star_expressions) !'=' TYPE_COMMENT?
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> assignment[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "((star_targets '='))+ (yield_expr | star_expressions) !'=' TYPE_COMMENT?"));
@@ -2398,7 +2439,7 @@ assignment_rule(Parser *p)
             D(fprintf(stderr, "%*c+ assignment[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "((star_targets '='))+ (yield_expr | star_expressions) !'=' TYPE_COMMENT?"));
             Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
             if (_token == NULL) {
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             int _end_lineno = _token->end_lineno;
@@ -2408,7 +2449,7 @@ assignment_rule(Parser *p)
             _res = _PyAST_Assign ( a , b , NEW_TYPE_COMMENT ( p , tc ) , EXTRA );
             if (_res == NULL && PyErr_Occurred()) {
                 p->error_indicator = 1;
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             goto done;
@@ -2419,7 +2460,7 @@ assignment_rule(Parser *p)
     }
     { // single_target augassign ~ (yield_expr | star_expressions)
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> assignment[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "single_target augassign ~ (yield_expr | star_expressions)"));
@@ -2440,7 +2481,7 @@ assignment_rule(Parser *p)
             D(fprintf(stderr, "%*c+ assignment[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "single_target augassign ~ (yield_expr | star_expressions)"));
             Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
             if (_token == NULL) {
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             int _end_lineno = _token->end_lineno;
@@ -2450,7 +2491,7 @@ assignment_rule(Parser *p)
             _res = _PyAST_AugAssign ( a , b -> kind , c , EXTRA );
             if (_res == NULL && PyErr_Occurred()) {
                 p->error_indicator = 1;
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             goto done;
@@ -2459,13 +2500,13 @@ assignment_rule(Parser *p)
         D(fprintf(stderr, "%*c%s assignment[%d-%d]: %s failed!\n", p->level, ' ',
                   p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "single_target augassign ~ (yield_expr | star_expressions)"));
         if (_cut_var) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
     }
     if (p->call_invalid_rules) { // invalid_assignment
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> assignment[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "invalid_assignment"));
@@ -2484,7 +2525,7 @@ assignment_rule(Parser *p)
     }
     _res = NULL;
   done:
-    D(p->level--);
+    p->level--;
     return _res;
 }
 
@@ -2505,16 +2546,19 @@ assignment_rule(Parser *p)
 static AugOperator*
 augassign_rule(Parser *p)
 {
-    D(p->level++);
+    if (p->level++ == MAXSTACK) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+    }
     if (p->error_indicator) {
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     AugOperator* _res = NULL;
     int _mark = p->mark;
     { // '+='
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> augassign[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'+='"));
@@ -2527,7 +2571,7 @@ augassign_rule(Parser *p)
             _res = _PyPegen_augoperator ( p , Add );
             if (_res == NULL && PyErr_Occurred()) {
                 p->error_indicator = 1;
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             goto done;
@@ -2538,7 +2582,7 @@ augassign_rule(Parser *p)
     }
     { // '-='
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> augassign[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'-='"));
@@ -2551,7 +2595,7 @@ augassign_rule(Parser *p)
             _res = _PyPegen_augoperator ( p , Sub );
             if (_res == NULL && PyErr_Occurred()) {
                 p->error_indicator = 1;
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             goto done;
@@ -2562,7 +2606,7 @@ augassign_rule(Parser *p)
     }
     { // '*='
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> augassign[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'*='"));
@@ -2575,7 +2619,7 @@ augassign_rule(Parser *p)
             _res = _PyPegen_augoperator ( p , Mult );
             if (_res == NULL && PyErr_Occurred()) {
                 p->error_indicator = 1;
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             goto done;
@@ -2586,7 +2630,7 @@ augassign_rule(Parser *p)
     }
     { // '@='
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> augassign[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'@='"));
@@ -2599,7 +2643,7 @@ augassign_rule(Parser *p)
             _res = CHECK_VERSION ( AugOperator * , 5 , "The '@' operator is" , _PyPegen_augoperator ( p , MatMult ) );
             if (_res == NULL && PyErr_Occurred()) {
                 p->error_indicator = 1;
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             goto done;
@@ -2610,7 +2654,7 @@ augassign_rule(Parser *p)
     }
     { // '/='
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> augassign[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'/='"));
@@ -2623,7 +2667,7 @@ augassign_rule(Parser *p)
             _res = _PyPegen_augoperator ( p , Div );
             if (_res == NULL && PyErr_Occurred()) {
                 p->error_indicator = 1;
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             goto done;
@@ -2634,7 +2678,7 @@ augassign_rule(Parser *p)
     }
     { // '%='
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> augassign[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'%='"));
@@ -2647,7 +2691,7 @@ augassign_rule(Parser *p)
             _res = _PyPegen_augoperator ( p , Mod );
             if (_res == NULL && PyErr_Occurred()) {
                 p->error_indicator = 1;
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             goto done;
@@ -2658,7 +2702,7 @@ augassign_rule(Parser *p)
     }
     { // '&='
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> augassign[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'&='"));
@@ -2671,7 +2715,7 @@ augassign_rule(Parser *p)
             _res = _PyPegen_augoperator ( p , BitAnd );
             if (_res == NULL && PyErr_Occurred()) {
                 p->error_indicator = 1;
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             goto done;
@@ -2682,7 +2726,7 @@ augassign_rule(Parser *p)
     }
     { // '|='
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> augassign[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'|='"));
@@ -2695,7 +2739,7 @@ augassign_rule(Parser *p)
             _res = _PyPegen_augoperator ( p , BitOr );
             if (_res == NULL && PyErr_Occurred()) {
                 p->error_indicator = 1;
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             goto done;
@@ -2706,7 +2750,7 @@ augassign_rule(Parser *p)
     }
     { // '^='
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> augassign[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'^='"));
@@ -2719,7 +2763,7 @@ augassign_rule(Parser *p)
             _res = _PyPegen_augoperator ( p , BitXor );
             if (_res == NULL && PyErr_Occurred()) {
                 p->error_indicator = 1;
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             goto done;
@@ -2730,7 +2774,7 @@ augassign_rule(Parser *p)
     }
     { // '<<='
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> augassign[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'<<='"));
@@ -2743,7 +2787,7 @@ augassign_rule(Parser *p)
             _res = _PyPegen_augoperator ( p , LShift );
             if (_res == NULL && PyErr_Occurred()) {
                 p->error_indicator = 1;
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             goto done;
@@ -2754,7 +2798,7 @@ augassign_rule(Parser *p)
     }
     { // '>>='
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> augassign[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'>>='"));
@@ -2767,7 +2811,7 @@ augassign_rule(Parser *p)
             _res = _PyPegen_augoperator ( p , RShift );
             if (_res == NULL && PyErr_Occurred()) {
                 p->error_indicator = 1;
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             goto done;
@@ -2778,7 +2822,7 @@ augassign_rule(Parser *p)
     }
     { // '**='
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> augassign[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'**='"));
@@ -2791,7 +2835,7 @@ augassign_rule(Parser *p)
             _res = _PyPegen_augoperator ( p , Pow );
             if (_res == NULL && PyErr_Occurred()) {
                 p->error_indicator = 1;
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             goto done;
@@ -2802,7 +2846,7 @@ augassign_rule(Parser *p)
     }
     { // '//='
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> augassign[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'//='"));
@@ -2815,7 +2859,7 @@ augassign_rule(Parser *p)
             _res = _PyPegen_augoperator ( p , FloorDiv );
             if (_res == NULL && PyErr_Occurred()) {
                 p->error_indicator = 1;
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             goto done;
@@ -2826,7 +2870,7 @@ augassign_rule(Parser *p)
     }
     _res = NULL;
   done:
-    D(p->level--);
+    p->level--;
     return _res;
 }
 
@@ -2834,16 +2878,19 @@ augassign_rule(Parser *p)
 static stmt_ty
 global_stmt_rule(Parser *p)
 {
-    D(p->level++);
+    if (p->level++ == MAXSTACK) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+    }
     if (p->error_indicator) {
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     stmt_ty _res = NULL;
     int _mark = p->mark;
     if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) {
         p->error_indicator = 1;
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     int _start_lineno = p->tokens[_mark]->lineno;
@@ -2852,7 +2899,7 @@ global_stmt_rule(Parser *p)
     UNUSED(_start_col_offset); // Only used by EXTRA macro
     { // 'global' ','.NAME+
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> global_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'global' ','.NAME+"));
@@ -2867,7 +2914,7 @@ global_stmt_rule(Parser *p)
             D(fprintf(stderr, "%*c+ global_stmt[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'global' ','.NAME+"));
             Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
             if (_token == NULL) {
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             int _end_lineno = _token->end_lineno;
@@ -2877,7 +2924,7 @@ global_stmt_rule(Parser *p)
             _res = _PyAST_Global ( CHECK ( asdl_identifier_seq * , _PyPegen_map_names_to_ids ( p , a ) ) , EXTRA );
             if (_res == NULL && PyErr_Occurred()) {
                 p->error_indicator = 1;
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             goto done;
@@ -2888,7 +2935,7 @@ global_stmt_rule(Parser *p)
     }
     _res = NULL;
   done:
-    D(p->level--);
+    p->level--;
     return _res;
 }
 
@@ -2896,16 +2943,19 @@ global_stmt_rule(Parser *p)
 static stmt_ty
 nonlocal_stmt_rule(Parser *p)
 {
-    D(p->level++);
+    if (p->level++ == MAXSTACK) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+    }
     if (p->error_indicator) {
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     stmt_ty _res = NULL;
     int _mark = p->mark;
     if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) {
         p->error_indicator = 1;
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     int _start_lineno = p->tokens[_mark]->lineno;
@@ -2914,7 +2964,7 @@ nonlocal_stmt_rule(Parser *p)
     UNUSED(_start_col_offset); // Only used by EXTRA macro
     { // 'nonlocal' ','.NAME+
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> nonlocal_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'nonlocal' ','.NAME+"));
@@ -2929,7 +2979,7 @@ nonlocal_stmt_rule(Parser *p)
             D(fprintf(stderr, "%*c+ nonlocal_stmt[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'nonlocal' ','.NAME+"));
             Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
             if (_token == NULL) {
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             int _end_lineno = _token->end_lineno;
@@ -2939,7 +2989,7 @@ nonlocal_stmt_rule(Parser *p)
             _res = _PyAST_Nonlocal ( CHECK ( asdl_identifier_seq * , _PyPegen_map_names_to_ids ( p , a ) ) , EXTRA );
             if (_res == NULL && PyErr_Occurred()) {
                 p->error_indicator = 1;
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             goto done;
@@ -2950,7 +3000,7 @@ nonlocal_stmt_rule(Parser *p)
     }
     _res = NULL;
   done:
-    D(p->level--);
+    p->level--;
     return _res;
 }
 
@@ -2958,16 +3008,19 @@ nonlocal_stmt_rule(Parser *p)
 static stmt_ty
 yield_stmt_rule(Parser *p)
 {
-    D(p->level++);
+    if (p->level++ == MAXSTACK) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+    }
     if (p->error_indicator) {
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     stmt_ty _res = NULL;
     int _mark = p->mark;
     if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) {
         p->error_indicator = 1;
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     int _start_lineno = p->tokens[_mark]->lineno;
@@ -2976,7 +3029,7 @@ yield_stmt_rule(Parser *p)
     UNUSED(_start_col_offset); // Only used by EXTRA macro
     { // yield_expr
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> yield_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "yield_expr"));
@@ -2988,7 +3041,7 @@ yield_stmt_rule(Parser *p)
             D(fprintf(stderr, "%*c+ yield_stmt[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "yield_expr"));
             Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
             if (_token == NULL) {
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             int _end_lineno = _token->end_lineno;
@@ -2998,7 +3051,7 @@ yield_stmt_rule(Parser *p)
             _res = _PyAST_Expr ( y , EXTRA );
             if (_res == NULL && PyErr_Occurred()) {
                 p->error_indicator = 1;
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             goto done;
@@ -3009,7 +3062,7 @@ yield_stmt_rule(Parser *p)
     }
     _res = NULL;
   done:
-    D(p->level--);
+    p->level--;
     return _res;
 }
 
@@ -3017,16 +3070,19 @@ yield_stmt_rule(Parser *p)
 static stmt_ty
 assert_stmt_rule(Parser *p)
 {
-    D(p->level++);
+    if (p->level++ == MAXSTACK) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+    }
     if (p->error_indicator) {
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     stmt_ty _res = NULL;
     int _mark = p->mark;
     if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) {
         p->error_indicator = 1;
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     int _start_lineno = p->tokens[_mark]->lineno;
@@ -3035,7 +3091,7 @@ assert_stmt_rule(Parser *p)
     UNUSED(_start_col_offset); // Only used by EXTRA macro
     { // 'assert' expression [',' expression]
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> assert_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'assert' expression [',' expression]"));
@@ -3053,7 +3109,7 @@ assert_stmt_rule(Parser *p)
             D(fprintf(stderr, "%*c+ assert_stmt[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'assert' expression [',' expression]"));
             Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
             if (_token == NULL) {
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             int _end_lineno = _token->end_lineno;
@@ -3063,7 +3119,7 @@ assert_stmt_rule(Parser *p)
             _res = _PyAST_Assert ( a , b , EXTRA );
             if (_res == NULL && PyErr_Occurred()) {
                 p->error_indicator = 1;
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             goto done;
@@ -3074,7 +3130,7 @@ assert_stmt_rule(Parser *p)
     }
     _res = NULL;
   done:
-    D(p->level--);
+    p->level--;
     return _res;
 }
 
@@ -3082,16 +3138,19 @@ assert_stmt_rule(Parser *p)
 static stmt_ty
 del_stmt_rule(Parser *p)
 {
-    D(p->level++);
+    if (p->level++ == MAXSTACK) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+    }
     if (p->error_indicator) {
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     stmt_ty _res = NULL;
     int _mark = p->mark;
     if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) {
         p->error_indicator = 1;
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     int _start_lineno = p->tokens[_mark]->lineno;
@@ -3100,7 +3159,7 @@ del_stmt_rule(Parser *p)
     UNUSED(_start_col_offset); // Only used by EXTRA macro
     { // 'del' del_targets &(';' | NEWLINE)
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> del_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'del' del_targets &(';' | NEWLINE)"));
@@ -3117,7 +3176,7 @@ del_stmt_rule(Parser *p)
             D(fprintf(stderr, "%*c+ del_stmt[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'del' del_targets &(';' | NEWLINE)"));
             Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
             if (_token == NULL) {
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             int _end_lineno = _token->end_lineno;
@@ -3127,7 +3186,7 @@ del_stmt_rule(Parser *p)
             _res = _PyAST_Delete ( a , EXTRA );
             if (_res == NULL && PyErr_Occurred()) {
                 p->error_indicator = 1;
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             goto done;
@@ -3138,7 +3197,7 @@ del_stmt_rule(Parser *p)
     }
     if (p->call_invalid_rules) { // invalid_del_stmt
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> del_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "invalid_del_stmt"));
@@ -3157,7 +3216,7 @@ del_stmt_rule(Parser *p)
     }
     _res = NULL;
   done:
-    D(p->level--);
+    p->level--;
     return _res;
 }
 
@@ -3165,16 +3224,19 @@ del_stmt_rule(Parser *p)
 static stmt_ty
 import_stmt_rule(Parser *p)
 {
-    D(p->level++);
+    if (p->level++ == MAXSTACK) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+    }
     if (p->error_indicator) {
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     stmt_ty _res = NULL;
     int _mark = p->mark;
     { // import_name
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> import_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "import_name"));
@@ -3193,7 +3255,7 @@ import_stmt_rule(Parser *p)
     }
     { // import_from
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> import_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "import_from"));
@@ -3212,7 +3274,7 @@ import_stmt_rule(Parser *p)
     }
     _res = NULL;
   done:
-    D(p->level--);
+    p->level--;
     return _res;
 }
 
@@ -3220,16 +3282,19 @@ import_stmt_rule(Parser *p)
 static stmt_ty
 import_name_rule(Parser *p)
 {
-    D(p->level++);
+    if (p->level++ == MAXSTACK) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+    }
     if (p->error_indicator) {
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     stmt_ty _res = NULL;
     int _mark = p->mark;
     if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) {
         p->error_indicator = 1;
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     int _start_lineno = p->tokens[_mark]->lineno;
@@ -3238,7 +3303,7 @@ import_name_rule(Parser *p)
     UNUSED(_start_col_offset); // Only used by EXTRA macro
     { // 'import' dotted_as_names
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> import_name[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'import' dotted_as_names"));
@@ -3253,7 +3318,7 @@ import_name_rule(Parser *p)
             D(fprintf(stderr, "%*c+ import_name[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'import' dotted_as_names"));
             Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
             if (_token == NULL) {
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             int _end_lineno = _token->end_lineno;
@@ -3263,7 +3328,7 @@ import_name_rule(Parser *p)
             _res = _PyAST_Import ( a , EXTRA );
             if (_res == NULL && PyErr_Occurred()) {
                 p->error_indicator = 1;
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             goto done;
@@ -3274,7 +3339,7 @@ import_name_rule(Parser *p)
     }
     _res = NULL;
   done:
-    D(p->level--);
+    p->level--;
     return _res;
 }
 
@@ -3284,16 +3349,19 @@ import_name_rule(Parser *p)
 static stmt_ty
 import_from_rule(Parser *p)
 {
-    D(p->level++);
+    if (p->level++ == MAXSTACK) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+    }
     if (p->error_indicator) {
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     stmt_ty _res = NULL;
     int _mark = p->mark;
     if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) {
         p->error_indicator = 1;
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     int _start_lineno = p->tokens[_mark]->lineno;
@@ -3302,7 +3370,7 @@ import_from_rule(Parser *p)
     UNUSED(_start_col_offset); // Only used by EXTRA macro
     { // 'from' (('.' | '...'))* dotted_name 'import' import_from_targets
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> import_from[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'from' (('.' | '...'))* dotted_name 'import' import_from_targets"));
@@ -3326,7 +3394,7 @@ import_from_rule(Parser *p)
             D(fprintf(stderr, "%*c+ import_from[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'from' (('.' | '...'))* dotted_name 'import' import_from_targets"));
             Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
             if (_token == NULL) {
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             int _end_lineno = _token->end_lineno;
@@ -3336,7 +3404,7 @@ import_from_rule(Parser *p)
             _res = _PyAST_ImportFrom ( b -> v . Name . id , c , _PyPegen_seq_count_dots ( a ) , EXTRA );
             if (_res == NULL && PyErr_Occurred()) {
                 p->error_indicator = 1;
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             goto done;
@@ -3347,7 +3415,7 @@ import_from_rule(Parser *p)
     }
     { // 'from' (('.' | '...'))+ 'import' import_from_targets
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> import_from[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'from' (('.' | '...'))+ 'import' import_from_targets"));
@@ -3368,7 +3436,7 @@ import_from_rule(Parser *p)
             D(fprintf(stderr, "%*c+ import_from[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'from' (('.' | '...'))+ 'import' import_from_targets"));
             Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
             if (_token == NULL) {
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             int _end_lineno = _token->end_lineno;
@@ -3378,7 +3446,7 @@ import_from_rule(Parser *p)
             _res = _PyAST_ImportFrom ( NULL , b , _PyPegen_seq_count_dots ( a ) , EXTRA );
             if (_res == NULL && PyErr_Occurred()) {
                 p->error_indicator = 1;
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             goto done;
@@ -3389,7 +3457,7 @@ import_from_rule(Parser *p)
     }
     _res = NULL;
   done:
-    D(p->level--);
+    p->level--;
     return _res;
 }
 
@@ -3401,16 +3469,19 @@ import_from_rule(Parser *p)
 static asdl_alias_seq*
 import_from_targets_rule(Parser *p)
 {
-    D(p->level++);
+    if (p->level++ == MAXSTACK) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+    }
     if (p->error_indicator) {
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     asdl_alias_seq* _res = NULL;
     int _mark = p->mark;
     if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) {
         p->error_indicator = 1;
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     int _start_lineno = p->tokens[_mark]->lineno;
@@ -3419,7 +3490,7 @@ import_from_targets_rule(Parser *p)
     UNUSED(_start_col_offset); // Only used by EXTRA macro
     { // '(' import_from_as_names ','? ')'
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> import_from_targets[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'(' import_from_as_names ','? ')'"));
@@ -3442,7 +3513,7 @@ import_from_targets_rule(Parser *p)
             _res = a;
             if (_res == NULL && PyErr_Occurred()) {
                 p->error_indicator = 1;
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             goto done;
@@ -3453,7 +3524,7 @@ import_from_targets_rule(Parser *p)
     }
     { // import_from_as_names !','
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> import_from_targets[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "import_from_as_names !','"));
@@ -3474,7 +3545,7 @@ import_from_targets_rule(Parser *p)
     }
     { // '*'
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> import_from_targets[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'*'"));
@@ -3486,7 +3557,7 @@ import_from_targets_rule(Parser *p)
             D(fprintf(stderr, "%*c+ import_from_targets[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'*'"));
             Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
             if (_token == NULL) {
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             int _end_lineno = _token->end_lineno;
@@ -3496,7 +3567,7 @@ import_from_targets_rule(Parser *p)
             _res = ( asdl_alias_seq * ) _PyPegen_singleton_seq ( p , CHECK ( alias_ty , _PyPegen_alias_for_star ( p , EXTRA ) ) );
             if (_res == NULL && PyErr_Occurred()) {
                 p->error_indicator = 1;
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             goto done;
@@ -3507,7 +3578,7 @@ import_from_targets_rule(Parser *p)
     }
     if (p->call_invalid_rules) { // invalid_import_from_targets
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> import_from_targets[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "invalid_import_from_targets"));
@@ -3526,7 +3597,7 @@ import_from_targets_rule(Parser *p)
     }
     _res = NULL;
   done:
-    D(p->level--);
+    p->level--;
     return _res;
 }
 
@@ -3534,16 +3605,19 @@ import_from_targets_rule(Parser *p)
 static asdl_alias_seq*
 import_from_as_names_rule(Parser *p)
 {
-    D(p->level++);
+    if (p->level++ == MAXSTACK) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+    }
     if (p->error_indicator) {
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     asdl_alias_seq* _res = NULL;
     int _mark = p->mark;
     { // ','.import_from_as_name+
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> import_from_as_names[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "','.import_from_as_name+"));
@@ -3556,7 +3630,7 @@ import_from_as_names_rule(Parser *p)
             _res = a;
             if (_res == NULL && PyErr_Occurred()) {
                 p->error_indicator = 1;
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             goto done;
@@ -3567,7 +3641,7 @@ import_from_as_names_rule(Parser *p)
     }
     _res = NULL;
   done:
-    D(p->level--);
+    p->level--;
     return _res;
 }
 
@@ -3575,16 +3649,19 @@ import_from_as_names_rule(Parser *p)
 static alias_ty
 import_from_as_name_rule(Parser *p)
 {
-    D(p->level++);
+    if (p->level++ == MAXSTACK) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+    }
     if (p->error_indicator) {
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     alias_ty _res = NULL;
     int _mark = p->mark;
     if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) {
         p->error_indicator = 1;
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     int _start_lineno = p->tokens[_mark]->lineno;
@@ -3593,7 +3670,7 @@ import_from_as_name_rule(Parser *p)
     UNUSED(_start_col_offset); // Only used by EXTRA macro
     { // NAME ['as' NAME]
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> import_from_as_name[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "NAME ['as' NAME]"));
@@ -3608,7 +3685,7 @@ import_from_as_name_rule(Parser *p)
             D(fprintf(stderr, "%*c+ import_from_as_name[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "NAME ['as' NAME]"));
             Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
             if (_token == NULL) {
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             int _end_lineno = _token->end_lineno;
@@ -3618,7 +3695,7 @@ import_from_as_name_rule(Parser *p)
             _res = _PyAST_alias ( a -> v . Name . id , ( b ) ? ( ( expr_ty ) b ) -> v . Name . id : NULL , EXTRA );
             if (_res == NULL && PyErr_Occurred()) {
                 p->error_indicator = 1;
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             goto done;
@@ -3629,7 +3706,7 @@ import_from_as_name_rule(Parser *p)
     }
     _res = NULL;
   done:
-    D(p->level--);
+    p->level--;
     return _res;
 }
 
@@ -3637,16 +3714,19 @@ import_from_as_name_rule(Parser *p)
 static asdl_alias_seq*
 dotted_as_names_rule(Parser *p)
 {
-    D(p->level++);
+    if (p->level++ == MAXSTACK) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+    }
     if (p->error_indicator) {
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     asdl_alias_seq* _res = NULL;
     int _mark = p->mark;
     { // ','.dotted_as_name+
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> dotted_as_names[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "','.dotted_as_name+"));
@@ -3659,7 +3739,7 @@ dotted_as_names_rule(Parser *p)
             _res = a;
             if (_res == NULL && PyErr_Occurred()) {
                 p->error_indicator = 1;
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             goto done;
@@ -3670,7 +3750,7 @@ dotted_as_names_rule(Parser *p)
     }
     _res = NULL;
   done:
-    D(p->level--);
+    p->level--;
     return _res;
 }
 
@@ -3678,16 +3758,19 @@ dotted_as_names_rule(Parser *p)
 static alias_ty
 dotted_as_name_rule(Parser *p)
 {
-    D(p->level++);
+    if (p->level++ == MAXSTACK) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+    }
     if (p->error_indicator) {
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     alias_ty _res = NULL;
     int _mark = p->mark;
     if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) {
         p->error_indicator = 1;
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     int _start_lineno = p->tokens[_mark]->lineno;
@@ -3696,7 +3779,7 @@ dotted_as_name_rule(Parser *p)
     UNUSED(_start_col_offset); // Only used by EXTRA macro
     { // dotted_name ['as' NAME]
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> dotted_as_name[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "dotted_name ['as' NAME]"));
@@ -3711,7 +3794,7 @@ dotted_as_name_rule(Parser *p)
             D(fprintf(stderr, "%*c+ dotted_as_name[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "dotted_name ['as' NAME]"));
             Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
             if (_token == NULL) {
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             int _end_lineno = _token->end_lineno;
@@ -3721,7 +3804,7 @@ dotted_as_name_rule(Parser *p)
             _res = _PyAST_alias ( a -> v . Name . id , ( b ) ? ( ( expr_ty ) b ) -> v . Name . id : NULL , EXTRA );
             if (_res == NULL && PyErr_Occurred()) {
                 p->error_indicator = 1;
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             goto done;
@@ -3732,7 +3815,7 @@ dotted_as_name_rule(Parser *p)
     }
     _res = NULL;
   done:
-    D(p->level--);
+    p->level--;
     return _res;
 }
 
@@ -3742,10 +3825,13 @@ static expr_ty dotted_name_raw(Parser *);
 static expr_ty
 dotted_name_rule(Parser *p)
 {
-    D(p->level++);
+    if (p->level++ == MAXSTACK) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+    }
     expr_ty _res = NULL;
     if (_PyPegen_is_memoized(p, dotted_name_type, &_res)) {
-        D(p->level--);
+        p->level--;
         return _res;
     }
     int _mark = p->mark;
@@ -3753,37 +3839,42 @@ dotted_name_rule(Parser *p)
     while (1) {
         int tmpvar_0 = _PyPegen_update_memo(p, _mark, dotted_name_type, _res);
         if (tmpvar_0) {
-            D(p->level--);
+            p->level--;
             return _res;
         }
         p->mark = _mark;
         p->in_raw_rule++;
         void *_raw = dotted_name_raw(p);
         p->in_raw_rule--;
-        if (p->error_indicator)
+        if (p->error_indicator) {
+            p->level--;
             return NULL;
+        }
         if (_raw == NULL || p->mark <= _resmark)
             break;
         _resmark = p->mark;
         _res = _raw;
     }
     p->mark = _resmark;
-    D(p->level--);
+    p->level--;
     return _res;
 }
 static expr_ty
 dotted_name_raw(Parser *p)
 {
-    D(p->level++);
+    if (p->level++ == MAXSTACK) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+    }
     if (p->error_indicator) {
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     expr_ty _res = NULL;
     int _mark = p->mark;
     { // dotted_name '.' NAME
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> dotted_name[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "dotted_name '.' NAME"));
@@ -3802,7 +3893,7 @@ dotted_name_raw(Parser *p)
             _res = _PyPegen_join_names_with_dot ( p , a , b );
             if (_res == NULL && PyErr_Occurred()) {
                 p->error_indicator = 1;
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             goto done;
@@ -3813,7 +3904,7 @@ dotted_name_raw(Parser *p)
     }
     { // NAME
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> dotted_name[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "NAME"));
@@ -3832,7 +3923,7 @@ dotted_name_raw(Parser *p)
     }
     _res = NULL;
   done:
-    D(p->level--);
+    p->level--;
     return _res;
 }
 
@@ -3843,16 +3934,19 @@ dotted_name_raw(Parser *p)
 static stmt_ty
 if_stmt_rule(Parser *p)
 {
-    D(p->level++);
+    if (p->level++ == MAXSTACK) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+    }
     if (p->error_indicator) {
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     stmt_ty _res = NULL;
     int _mark = p->mark;
     if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) {
         p->error_indicator = 1;
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     int _start_lineno = p->tokens[_mark]->lineno;
@@ -3861,7 +3955,7 @@ if_stmt_rule(Parser *p)
     UNUSED(_start_col_offset); // Only used by EXTRA macro
     if (p->call_invalid_rules) { // invalid_if_stmt
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> if_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "invalid_if_stmt"));
@@ -3880,7 +3974,7 @@ if_stmt_rule(Parser *p)
     }
     { // 'if' named_expression ':' block elif_stmt
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> if_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'if' named_expression ':' block elif_stmt"));
@@ -3904,7 +3998,7 @@ if_stmt_rule(Parser *p)
             D(fprintf(stderr, "%*c+ if_stmt[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'if' named_expression ':' block elif_stmt"));
             Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
             if (_token == NULL) {
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             int _end_lineno = _token->end_lineno;
@@ -3914,7 +4008,7 @@ if_stmt_rule(Parser *p)
             _res = _PyAST_If ( a , b , CHECK ( asdl_stmt_seq * , _PyPegen_singleton_seq ( p , c ) ) , EXTRA );
             if (_res == NULL && PyErr_Occurred()) {
                 p->error_indicator = 1;
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             goto done;
@@ -3925,7 +4019,7 @@ if_stmt_rule(Parser *p)
     }
     { // 'if' named_expression ':' block else_block?
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> if_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'if' named_expression ':' block else_block?"));
@@ -3949,7 +4043,7 @@ if_stmt_rule(Parser *p)
             D(fprintf(stderr, "%*c+ if_stmt[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'if' named_expression ':' block else_block?"));
             Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
             if (_token == NULL) {
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             int _end_lineno = _token->end_lineno;
@@ -3959,7 +4053,7 @@ if_stmt_rule(Parser *p)
             _res = _PyAST_If ( a , b , c , EXTRA );
             if (_res == NULL && PyErr_Occurred()) {
                 p->error_indicator = 1;
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             goto done;
@@ -3970,7 +4064,7 @@ if_stmt_rule(Parser *p)
     }
     _res = NULL;
   done:
-    D(p->level--);
+    p->level--;
     return _res;
 }
 
@@ -3981,16 +4075,19 @@ if_stmt_rule(Parser *p)
 static stmt_ty
 elif_stmt_rule(Parser *p)
 {
-    D(p->level++);
+    if (p->level++ == MAXSTACK) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+    }
     if (p->error_indicator) {
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     stmt_ty _res = NULL;
     int _mark = p->mark;
     if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) {
         p->error_indicator = 1;
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     int _start_lineno = p->tokens[_mark]->lineno;
@@ -3999,7 +4096,7 @@ elif_stmt_rule(Parser *p)
     UNUSED(_start_col_offset); // Only used by EXTRA macro
     if (p->call_invalid_rules) { // invalid_elif_stmt
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> elif_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "invalid_elif_stmt"));
@@ -4018,7 +4115,7 @@ elif_stmt_rule(Parser *p)
     }
     { // 'elif' named_expression ':' block elif_stmt
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> elif_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'elif' named_expression ':' block elif_stmt"));
@@ -4042,7 +4139,7 @@ elif_stmt_rule(Parser *p)
             D(fprintf(stderr, "%*c+ elif_stmt[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'elif' named_expression ':' block elif_stmt"));
             Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
             if (_token == NULL) {
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             int _end_lineno = _token->end_lineno;
@@ -4052,7 +4149,7 @@ elif_stmt_rule(Parser *p)
             _res = _PyAST_If ( a , b , CHECK ( asdl_stmt_seq * , _PyPegen_singleton_seq ( p , c ) ) , EXTRA );
             if (_res == NULL && PyErr_Occurred()) {
                 p->error_indicator = 1;
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             goto done;
@@ -4063,7 +4160,7 @@ elif_stmt_rule(Parser *p)
     }
     { // 'elif' named_expression ':' block else_block?
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> elif_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'elif' named_expression ':' block else_block?"));
@@ -4087,7 +4184,7 @@ elif_stmt_rule(Parser *p)
             D(fprintf(stderr, "%*c+ elif_stmt[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'elif' named_expression ':' block else_block?"));
             Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
             if (_token == NULL) {
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             int _end_lineno = _token->end_lineno;
@@ -4097,7 +4194,7 @@ elif_stmt_rule(Parser *p)
             _res = _PyAST_If ( a , b , c , EXTRA );
             if (_res == NULL && PyErr_Occurred()) {
                 p->error_indicator = 1;
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             goto done;
@@ -4108,7 +4205,7 @@ elif_stmt_rule(Parser *p)
     }
     _res = NULL;
   done:
-    D(p->level--);
+    p->level--;
     return _res;
 }
 
@@ -4116,16 +4213,19 @@ elif_stmt_rule(Parser *p)
 static asdl_stmt_seq*
 else_block_rule(Parser *p)
 {
-    D(p->level++);
+    if (p->level++ == MAXSTACK) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+    }
     if (p->error_indicator) {
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     asdl_stmt_seq* _res = NULL;
     int _mark = p->mark;
     if (p->call_invalid_rules) { // invalid_else_stmt
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> else_block[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "invalid_else_stmt"));
@@ -4144,7 +4244,7 @@ else_block_rule(Parser *p)
     }
     { // 'else' &&':' block
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> else_block[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'else' &&':' block"));
@@ -4163,7 +4263,7 @@ else_block_rule(Parser *p)
             _res = b;
             if (_res == NULL && PyErr_Occurred()) {
                 p->error_indicator = 1;
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             goto done;
@@ -4174,7 +4274,7 @@ else_block_rule(Parser *p)
     }
     _res = NULL;
   done:
-    D(p->level--);
+    p->level--;
     return _res;
 }
 
@@ -4182,16 +4282,19 @@ else_block_rule(Parser *p)
 static stmt_ty
 while_stmt_rule(Parser *p)
 {
-    D(p->level++);
+    if (p->level++ == MAXSTACK) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+    }
     if (p->error_indicator) {
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     stmt_ty _res = NULL;
     int _mark = p->mark;
     if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) {
         p->error_indicator = 1;
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     int _start_lineno = p->tokens[_mark]->lineno;
@@ -4200,7 +4303,7 @@ while_stmt_rule(Parser *p)
     UNUSED(_start_col_offset); // Only used by EXTRA macro
     if (p->call_invalid_rules) { // invalid_while_stmt
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> while_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "invalid_while_stmt"));
@@ -4219,7 +4322,7 @@ while_stmt_rule(Parser *p)
     }
     { // 'while' named_expression ':' block else_block?
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> while_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'while' named_expression ':' block else_block?"));
@@ -4243,7 +4346,7 @@ while_stmt_rule(Parser *p)
             D(fprintf(stderr, "%*c+ while_stmt[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'while' named_expression ':' block else_block?"));
             Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
             if (_token == NULL) {
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             int _end_lineno = _token->end_lineno;
@@ -4253,7 +4356,7 @@ while_stmt_rule(Parser *p)
             _res = _PyAST_While ( a , b , c , EXTRA );
             if (_res == NULL && PyErr_Occurred()) {
                 p->error_indicator = 1;
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             goto done;
@@ -4264,7 +4367,7 @@ while_stmt_rule(Parser *p)
     }
     _res = NULL;
   done:
-    D(p->level--);
+    p->level--;
     return _res;
 }
 
@@ -4276,16 +4379,19 @@ while_stmt_rule(Parser *p)
 static stmt_ty
 for_stmt_rule(Parser *p)
 {
-    D(p->level++);
+    if (p->level++ == MAXSTACK) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+    }
     if (p->error_indicator) {
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     stmt_ty _res = NULL;
     int _mark = p->mark;
     if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) {
         p->error_indicator = 1;
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     int _start_lineno = p->tokens[_mark]->lineno;
@@ -4294,7 +4400,7 @@ for_stmt_rule(Parser *p)
     UNUSED(_start_col_offset); // Only used by EXTRA macro
     if (p->call_invalid_rules) { // invalid_for_stmt
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> for_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "invalid_for_stmt"));
@@ -4313,7 +4419,7 @@ for_stmt_rule(Parser *p)
     }
     { // 'for' star_targets 'in' ~ star_expressions &&':' TYPE_COMMENT? block else_block?
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> for_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'for' star_targets 'in' ~ star_expressions &&':' TYPE_COMMENT? block else_block?"));
@@ -4349,7 +4455,7 @@ for_stmt_rule(Parser *p)
             D(fprintf(stderr, "%*c+ for_stmt[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'for' star_targets 'in' ~ star_expressions &&':' TYPE_COMMENT? block else_block?"));
             Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
             if (_token == NULL) {
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             int _end_lineno = _token->end_lineno;
@@ -4359,7 +4465,7 @@ for_stmt_rule(Parser *p)
             _res = _PyAST_For ( t , ex , b , el , NEW_TYPE_COMMENT ( p , tc ) , EXTRA );
             if (_res == NULL && PyErr_Occurred()) {
                 p->error_indicator = 1;
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             goto done;
@@ -4368,13 +4474,13 @@ for_stmt_rule(Parser *p)
         D(fprintf(stderr, "%*c%s for_stmt[%d-%d]: %s failed!\n", p->level, ' ',
                   p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'for' star_targets 'in' ~ star_expressions &&':' TYPE_COMMENT? block else_block?"));
         if (_cut_var) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
     }
     { // ASYNC 'for' star_targets 'in' ~ star_expressions &&':' TYPE_COMMENT? block else_block?
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> for_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "ASYNC 'for' star_targets 'in' ~ star_expressions &&':' TYPE_COMMENT? block else_block?"));
@@ -4413,7 +4519,7 @@ for_stmt_rule(Parser *p)
             D(fprintf(stderr, "%*c+ for_stmt[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "ASYNC 'for' star_targets 'in' ~ star_expressions &&':' TYPE_COMMENT? block else_block?"));
             Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
             if (_token == NULL) {
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             int _end_lineno = _token->end_lineno;
@@ -4423,7 +4529,7 @@ for_stmt_rule(Parser *p)
             _res = CHECK_VERSION ( stmt_ty , 5 , "Async for loops are" , _PyAST_AsyncFor ( t , ex , b , el , NEW_TYPE_COMMENT ( p , tc ) , EXTRA ) );
             if (_res == NULL && PyErr_Occurred()) {
                 p->error_indicator = 1;
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             goto done;
@@ -4432,13 +4538,13 @@ for_stmt_rule(Parser *p)
         D(fprintf(stderr, "%*c%s for_stmt[%d-%d]: %s failed!\n", p->level, ' ',
                   p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "ASYNC 'for' star_targets 'in' ~ star_expressions &&':' TYPE_COMMENT? block else_block?"));
         if (_cut_var) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
     }
     if (p->call_invalid_rules) { // invalid_for_target
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> for_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "invalid_for_target"));
@@ -4457,7 +4563,7 @@ for_stmt_rule(Parser *p)
     }
     _res = NULL;
   done:
-    D(p->level--);
+    p->level--;
     return _res;
 }
 
@@ -4471,16 +4577,19 @@ for_stmt_rule(Parser *p)
 static stmt_ty
 with_stmt_rule(Parser *p)
 {
-    D(p->level++);
+    if (p->level++ == MAXSTACK) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+    }
     if (p->error_indicator) {
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     stmt_ty _res = NULL;
     int _mark = p->mark;
     if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) {
         p->error_indicator = 1;
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     int _start_lineno = p->tokens[_mark]->lineno;
@@ -4489,7 +4598,7 @@ with_stmt_rule(Parser *p)
     UNUSED(_start_col_offset); // Only used by EXTRA macro
     if (p->call_invalid_rules) { // invalid_with_stmt_indent
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> with_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "invalid_with_stmt_indent"));
@@ -4508,7 +4617,7 @@ with_stmt_rule(Parser *p)
     }
     { // 'with' '(' ','.with_item+ ','? ')' ':' block
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> with_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'with' '(' ','.with_item+ ','? ')' ':' block"));
@@ -4539,7 +4648,7 @@ with_stmt_rule(Parser *p)
             D(fprintf(stderr, "%*c+ with_stmt[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'with' '(' ','.with_item+ ','? ')' ':' block"));
             Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
             if (_token == NULL) {
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             int _end_lineno = _token->end_lineno;
@@ -4549,7 +4658,7 @@ with_stmt_rule(Parser *p)
             _res = _PyAST_With ( a , b , NULL , EXTRA );
             if (_res == NULL && PyErr_Occurred()) {
                 p->error_indicator = 1;
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             goto done;
@@ -4560,7 +4669,7 @@ with_stmt_rule(Parser *p)
     }
     { // 'with' ','.with_item+ ':' TYPE_COMMENT? block
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> with_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'with' ','.with_item+ ':' TYPE_COMMENT? block"));
@@ -4584,7 +4693,7 @@ with_stmt_rule(Parser *p)
             D(fprintf(stderr, "%*c+ with_stmt[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'with' ','.with_item+ ':' TYPE_COMMENT? block"));
             Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
             if (_token == NULL) {
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             int _end_lineno = _token->end_lineno;
@@ -4594,7 +4703,7 @@ with_stmt_rule(Parser *p)
             _res = _PyAST_With ( a , b , NEW_TYPE_COMMENT ( p , tc ) , EXTRA );
             if (_res == NULL && PyErr_Occurred()) {
                 p->error_indicator = 1;
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             goto done;
@@ -4605,7 +4714,7 @@ with_stmt_rule(Parser *p)
     }
     { // ASYNC 'with' '(' ','.with_item+ ','? ')' ':' block
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> with_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "ASYNC 'with' '(' ','.with_item+ ','? ')' ':' block"));
@@ -4639,7 +4748,7 @@ with_stmt_rule(Parser *p)
             D(fprintf(stderr, "%*c+ with_stmt[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "ASYNC 'with' '(' ','.with_item+ ','? ')' ':' block"));
             Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
             if (_token == NULL) {
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             int _end_lineno = _token->end_lineno;
@@ -4649,7 +4758,7 @@ with_stmt_rule(Parser *p)
             _res = CHECK_VERSION ( stmt_ty , 5 , "Async with statements are" , _PyAST_AsyncWith ( a , b , NULL , EXTRA ) );
             if (_res == NULL && PyErr_Occurred()) {
                 p->error_indicator = 1;
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             goto done;
@@ -4660,7 +4769,7 @@ with_stmt_rule(Parser *p)
     }
     { // ASYNC 'with' ','.with_item+ ':' TYPE_COMMENT? block
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> with_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "ASYNC 'with' ','.with_item+ ':' TYPE_COMMENT? block"));
@@ -4687,7 +4796,7 @@ with_stmt_rule(Parser *p)
             D(fprintf(stderr, "%*c+ with_stmt[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "ASYNC 'with' ','.with_item+ ':' TYPE_COMMENT? block"));
             Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
             if (_token == NULL) {
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             int _end_lineno = _token->end_lineno;
@@ -4697,7 +4806,7 @@ with_stmt_rule(Parser *p)
             _res = CHECK_VERSION ( stmt_ty , 5 , "Async with statements are" , _PyAST_AsyncWith ( a , b , NEW_TYPE_COMMENT ( p , tc ) , EXTRA ) );
             if (_res == NULL && PyErr_Occurred()) {
                 p->error_indicator = 1;
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             goto done;
@@ -4708,7 +4817,7 @@ with_stmt_rule(Parser *p)
     }
     if (p->call_invalid_rules) { // invalid_with_stmt
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> with_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "invalid_with_stmt"));
@@ -4727,7 +4836,7 @@ with_stmt_rule(Parser *p)
     }
     _res = NULL;
   done:
-    D(p->level--);
+    p->level--;
     return _res;
 }
 
@@ -4738,16 +4847,19 @@ with_stmt_rule(Parser *p)
 static withitem_ty
 with_item_rule(Parser *p)
 {
-    D(p->level++);
+    if (p->level++ == MAXSTACK) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+    }
     if (p->error_indicator) {
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     withitem_ty _res = NULL;
     int _mark = p->mark;
     { // expression 'as' star_target &(',' | ')' | ':')
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> with_item[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "expression 'as' star_target &(',' | ')' | ':')"));
@@ -4768,7 +4880,7 @@ with_item_rule(Parser *p)
             _res = _PyAST_withitem ( e , t , p -> arena );
             if (_res == NULL && PyErr_Occurred()) {
                 p->error_indicator = 1;
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             goto done;
@@ -4779,7 +4891,7 @@ with_item_rule(Parser *p)
     }
     if (p->call_invalid_rules) { // invalid_with_item
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> with_item[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "invalid_with_item"));
@@ -4798,7 +4910,7 @@ with_item_rule(Parser *p)
     }
     { // expression
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> with_item[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "expression"));
@@ -4811,7 +4923,7 @@ with_item_rule(Parser *p)
             _res = _PyAST_withitem ( e , NULL , p -> arena );
             if (_res == NULL && PyErr_Occurred()) {
                 p->error_indicator = 1;
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             goto done;
@@ -4822,7 +4934,7 @@ with_item_rule(Parser *p)
     }
     _res = NULL;
   done:
-    D(p->level--);
+    p->level--;
     return _res;
 }
 
@@ -4833,16 +4945,19 @@ with_item_rule(Parser *p)
 static stmt_ty
 try_stmt_rule(Parser *p)
 {
-    D(p->level++);
+    if (p->level++ == MAXSTACK) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+    }
     if (p->error_indicator) {
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     stmt_ty _res = NULL;
     int _mark = p->mark;
     if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) {
         p->error_indicator = 1;
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     int _start_lineno = p->tokens[_mark]->lineno;
@@ -4851,7 +4966,7 @@ try_stmt_rule(Parser *p)
     UNUSED(_start_col_offset); // Only used by EXTRA macro
     if (p->call_invalid_rules) { // invalid_try_stmt
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> try_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "invalid_try_stmt"));
@@ -4870,7 +4985,7 @@ try_stmt_rule(Parser *p)
     }
     { // 'try' &&':' block finally_block
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> try_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'try' &&':' block finally_block"));
@@ -4891,7 +5006,7 @@ try_stmt_rule(Parser *p)
             D(fprintf(stderr, "%*c+ try_stmt[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'try' &&':' block finally_block"));
             Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
             if (_token == NULL) {
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             int _end_lineno = _token->end_lineno;
@@ -4901,7 +5016,7 @@ try_stmt_rule(Parser *p)
             _res = _PyAST_Try ( b , NULL , NULL , f , EXTRA );
             if (_res == NULL && PyErr_Occurred()) {
                 p->error_indicator = 1;
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             goto done;
@@ -4912,7 +5027,7 @@ try_stmt_rule(Parser *p)
     }
     { // 'try' &&':' block except_block+ else_block? finally_block?
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> try_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'try' &&':' block except_block+ else_block? finally_block?"));
@@ -4939,7 +5054,7 @@ try_stmt_rule(Parser *p)
             D(fprintf(stderr, "%*c+ try_stmt[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'try' &&':' block except_block+ else_block? finally_block?"));
             Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
             if (_token == NULL) {
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             int _end_lineno = _token->end_lineno;
@@ -4949,7 +5064,7 @@ try_stmt_rule(Parser *p)
             _res = _PyAST_Try ( b , ex , el , f , EXTRA );
             if (_res == NULL && PyErr_Occurred()) {
                 p->error_indicator = 1;
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             goto done;
@@ -4960,7 +5075,7 @@ try_stmt_rule(Parser *p)
     }
     _res = NULL;
   done:
-    D(p->level--);
+    p->level--;
     return _res;
 }
 
@@ -4972,16 +5087,19 @@ try_stmt_rule(Parser *p)
 static excepthandler_ty
 except_block_rule(Parser *p)
 {
-    D(p->level++);
+    if (p->level++ == MAXSTACK) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+    }
     if (p->error_indicator) {
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     excepthandler_ty _res = NULL;
     int _mark = p->mark;
     if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) {
         p->error_indicator = 1;
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     int _start_lineno = p->tokens[_mark]->lineno;
@@ -4990,7 +5108,7 @@ except_block_rule(Parser *p)
     UNUSED(_start_col_offset); // Only used by EXTRA macro
     if (p->call_invalid_rules) { // invalid_except_stmt_indent
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> except_block[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "invalid_except_stmt_indent"));
@@ -5009,7 +5127,7 @@ except_block_rule(Parser *p)
     }
     { // 'except' expression ['as' NAME] ':' block
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> except_block[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'except' expression ['as' NAME] ':' block"));
@@ -5033,7 +5151,7 @@ except_block_rule(Parser *p)
             D(fprintf(stderr, "%*c+ except_block[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'except' expression ['as' NAME] ':' block"));
             Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
             if (_token == NULL) {
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             int _end_lineno = _token->end_lineno;
@@ -5043,7 +5161,7 @@ except_block_rule(Parser *p)
             _res = _PyAST_ExceptHandler ( e , ( t ) ? ( ( expr_ty ) t ) -> v . Name . id : NULL , b , EXTRA );
             if (_res == NULL && PyErr_Occurred()) {
                 p->error_indicator = 1;
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             goto done;
@@ -5054,7 +5172,7 @@ except_block_rule(Parser *p)
     }
     { // 'except' ':' block
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> except_block[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'except' ':' block"));
@@ -5072,7 +5190,7 @@ except_block_rule(Parser *p)
             D(fprintf(stderr, "%*c+ except_block[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'except' ':' block"));
             Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
             if (_token == NULL) {
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             int _end_lineno = _token->end_lineno;
@@ -5082,7 +5200,7 @@ except_block_rule(Parser *p)
             _res = _PyAST_ExceptHandler ( NULL , NULL , b , EXTRA );
             if (_res == NULL && PyErr_Occurred()) {
                 p->error_indicator = 1;
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             goto done;
@@ -5093,7 +5211,7 @@ except_block_rule(Parser *p)
     }
     if (p->call_invalid_rules) { // invalid_except_stmt
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> except_block[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "invalid_except_stmt"));
@@ -5112,7 +5230,7 @@ except_block_rule(Parser *p)
     }
     _res = NULL;
   done:
-    D(p->level--);
+    p->level--;
     return _res;
 }
 
@@ -5120,16 +5238,19 @@ except_block_rule(Parser *p)
 static asdl_stmt_seq*
 finally_block_rule(Parser *p)
 {
-    D(p->level++);
+    if (p->level++ == MAXSTACK) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+    }
     if (p->error_indicator) {
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     asdl_stmt_seq* _res = NULL;
     int _mark = p->mark;
     if (p->call_invalid_rules) { // invalid_finally_stmt
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> finally_block[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "invalid_finally_stmt"));
@@ -5148,7 +5269,7 @@ finally_block_rule(Parser *p)
     }
     { // 'finally' &&':' block
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> finally_block[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'finally' &&':' block"));
@@ -5167,7 +5288,7 @@ finally_block_rule(Parser *p)
             _res = a;
             if (_res == NULL && PyErr_Occurred()) {
                 p->error_indicator = 1;
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             goto done;
@@ -5178,7 +5299,7 @@ finally_block_rule(Parser *p)
     }
     _res = NULL;
   done:
-    D(p->level--);
+    p->level--;
     return _res;
 }
 
@@ -5188,16 +5309,19 @@ finally_block_rule(Parser *p)
 static stmt_ty
 match_stmt_rule(Parser *p)
 {
-    D(p->level++);
+    if (p->level++ == MAXSTACK) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+    }
     if (p->error_indicator) {
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     stmt_ty _res = NULL;
     int _mark = p->mark;
     if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) {
         p->error_indicator = 1;
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     int _start_lineno = p->tokens[_mark]->lineno;
@@ -5206,7 +5330,7 @@ match_stmt_rule(Parser *p)
     UNUSED(_start_col_offset); // Only used by EXTRA macro
     { // "match" subject_expr ':' NEWLINE INDENT case_block+ DEDENT
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> match_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "\"match\" subject_expr ':' NEWLINE INDENT case_block+ DEDENT"));
@@ -5236,7 +5360,7 @@ match_stmt_rule(Parser *p)
             D(fprintf(stderr, "%*c+ match_stmt[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "\"match\" subject_expr ':' NEWLINE INDENT case_block+ DEDENT"));
             Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
             if (_token == NULL) {
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             int _end_lineno = _token->end_lineno;
@@ -5246,7 +5370,7 @@ match_stmt_rule(Parser *p)
             _res = CHECK_VERSION ( stmt_ty , 10 , "Pattern matching is" , _PyAST_Match ( subject , cases , EXTRA ) );
             if (_res == NULL && PyErr_Occurred()) {
                 p->error_indicator = 1;
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             goto done;
@@ -5257,7 +5381,7 @@ match_stmt_rule(Parser *p)
     }
     if (p->call_invalid_rules) { // invalid_match_stmt
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> match_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "invalid_match_stmt"));
@@ -5276,7 +5400,7 @@ match_stmt_rule(Parser *p)
     }
     _res = NULL;
   done:
-    D(p->level--);
+    p->level--;
     return _res;
 }
 
@@ -5284,16 +5408,19 @@ match_stmt_rule(Parser *p)
 static expr_ty
 subject_expr_rule(Parser *p)
 {
-    D(p->level++);
+    if (p->level++ == MAXSTACK) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+    }
     if (p->error_indicator) {
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     expr_ty _res = NULL;
     int _mark = p->mark;
     if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) {
         p->error_indicator = 1;
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     int _start_lineno = p->tokens[_mark]->lineno;
@@ -5302,7 +5429,7 @@ subject_expr_rule(Parser *p)
     UNUSED(_start_col_offset); // Only used by EXTRA macro
     { // star_named_expression ',' star_named_expressions?
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> subject_expr[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "star_named_expression ',' star_named_expressions?"));
@@ -5320,7 +5447,7 @@ subject_expr_rule(Parser *p)
             D(fprintf(stderr, "%*c+ subject_expr[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "star_named_expression ',' star_named_expressions?"));
             Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
             if (_token == NULL) {
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             int _end_lineno = _token->end_lineno;
@@ -5330,7 +5457,7 @@ subject_expr_rule(Parser *p)
             _res = _PyAST_Tuple ( CHECK ( asdl_expr_seq * , _PyPegen_seq_insert_in_front ( p , value , values ) ) , Load , EXTRA );
             if (_res == NULL && PyErr_Occurred()) {
                 p->error_indicator = 1;
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             goto done;
@@ -5341,7 +5468,7 @@ subject_expr_rule(Parser *p)
     }
     { // named_expression
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> subject_expr[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "named_expression"));
@@ -5360,7 +5487,7 @@ subject_expr_rule(Parser *p)
     }
     _res = NULL;
   done:
-    D(p->level--);
+    p->level--;
     return _res;
 }
 
@@ -5368,16 +5495,19 @@ subject_expr_rule(Parser *p)
 static match_case_ty
 case_block_rule(Parser *p)
 {
-    D(p->level++);
+    if (p->level++ == MAXSTACK) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+    }
     if (p->error_indicator) {
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     match_case_ty _res = NULL;
     int _mark = p->mark;
     if (p->call_invalid_rules) { // invalid_case_block
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> case_block[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "invalid_case_block"));
@@ -5396,7 +5526,7 @@ case_block_rule(Parser *p)
     }
     { // "case" patterns guard? ':' block
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> case_block[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "\"case\" patterns guard? ':' block"));
@@ -5421,7 +5551,7 @@ case_block_rule(Parser *p)
             _res = _PyAST_match_case ( pattern , guard , body , p -> arena );
             if (_res == NULL && PyErr_Occurred()) {
                 p->error_indicator = 1;
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             goto done;
@@ -5432,7 +5562,7 @@ case_block_rule(Parser *p)
     }
     _res = NULL;
   done:
-    D(p->level--);
+    p->level--;
     return _res;
 }
 
@@ -5440,16 +5570,19 @@ case_block_rule(Parser *p)
 static expr_ty
 guard_rule(Parser *p)
 {
-    D(p->level++);
+    if (p->level++ == MAXSTACK) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+    }
     if (p->error_indicator) {
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     expr_ty _res = NULL;
     int _mark = p->mark;
     { // 'if' named_expression
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> guard[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'if' named_expression"));
@@ -5465,7 +5598,7 @@ guard_rule(Parser *p)
             _res = guard;
             if (_res == NULL && PyErr_Occurred()) {
                 p->error_indicator = 1;
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             goto done;
@@ -5476,7 +5609,7 @@ guard_rule(Parser *p)
     }
     _res = NULL;
   done:
-    D(p->level--);
+    p->level--;
     return _res;
 }
 
@@ -5484,16 +5617,19 @@ guard_rule(Parser *p)
 static pattern_ty
 patterns_rule(Parser *p)
 {
-    D(p->level++);
+    if (p->level++ == MAXSTACK) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+    }
     if (p->error_indicator) {
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     pattern_ty _res = NULL;
     int _mark = p->mark;
     if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) {
         p->error_indicator = 1;
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     int _start_lineno = p->tokens[_mark]->lineno;
@@ -5502,7 +5638,7 @@ patterns_rule(Parser *p)
     UNUSED(_start_col_offset); // Only used by EXTRA macro
     { // open_sequence_pattern
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> patterns[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "open_sequence_pattern"));
@@ -5514,7 +5650,7 @@ patterns_rule(Parser *p)
             D(fprintf(stderr, "%*c+ patterns[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "open_sequence_pattern"));
             Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
             if (_token == NULL) {
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             int _end_lineno = _token->end_lineno;
@@ -5524,7 +5660,7 @@ patterns_rule(Parser *p)
             _res = _PyAST_MatchSequence ( patterns , EXTRA );
             if (_res == NULL && PyErr_Occurred()) {
                 p->error_indicator = 1;
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             goto done;
@@ -5535,7 +5671,7 @@ patterns_rule(Parser *p)
     }
     { // pattern
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> patterns[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "pattern"));
@@ -5554,7 +5690,7 @@ patterns_rule(Parser *p)
     }
     _res = NULL;
   done:
-    D(p->level--);
+    p->level--;
     return _res;
 }
 
@@ -5562,16 +5698,19 @@ patterns_rule(Parser *p)
 static pattern_ty
 pattern_rule(Parser *p)
 {
-    D(p->level++);
+    if (p->level++ == MAXSTACK) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+    }
     if (p->error_indicator) {
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     pattern_ty _res = NULL;
     int _mark = p->mark;
     { // as_pattern
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> pattern[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "as_pattern"));
@@ -5590,7 +5729,7 @@ pattern_rule(Parser *p)
     }
     { // or_pattern
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> pattern[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "or_pattern"));
@@ -5609,7 +5748,7 @@ pattern_rule(Parser *p)
     }
     _res = NULL;
   done:
-    D(p->level--);
+    p->level--;
     return _res;
 }
 
@@ -5617,16 +5756,19 @@ pattern_rule(Parser *p)
 static pattern_ty
 as_pattern_rule(Parser *p)
 {
-    D(p->level++);
+    if (p->level++ == MAXSTACK) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+    }
     if (p->error_indicator) {
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     pattern_ty _res = NULL;
     int _mark = p->mark;
     if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) {
         p->error_indicator = 1;
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     int _start_lineno = p->tokens[_mark]->lineno;
@@ -5635,7 +5777,7 @@ as_pattern_rule(Parser *p)
     UNUSED(_start_col_offset); // Only used by EXTRA macro
     { // or_pattern 'as' pattern_capture_target
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> as_pattern[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "or_pattern 'as' pattern_capture_target"));
@@ -5653,7 +5795,7 @@ as_pattern_rule(Parser *p)
             D(fprintf(stderr, "%*c+ as_pattern[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "or_pattern 'as' pattern_capture_target"));
             Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
             if (_token == NULL) {
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             int _end_lineno = _token->end_lineno;
@@ -5663,7 +5805,7 @@ as_pattern_rule(Parser *p)
             _res = _PyAST_MatchAs ( pattern , target -> v . Name . id , EXTRA );
             if (_res == NULL && PyErr_Occurred()) {
                 p->error_indicator = 1;
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             goto done;
@@ -5674,7 +5816,7 @@ as_pattern_rule(Parser *p)
     }
     if (p->call_invalid_rules) { // invalid_as_pattern
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> as_pattern[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "invalid_as_pattern"));
@@ -5693,7 +5835,7 @@ as_pattern_rule(Parser *p)
     }
     _res = NULL;
   done:
-    D(p->level--);
+    p->level--;
     return _res;
 }
 
@@ -5701,16 +5843,19 @@ as_pattern_rule(Parser *p)
 static pattern_ty
 or_pattern_rule(Parser *p)
 {
-    D(p->level++);
+    if (p->level++ == MAXSTACK) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+    }
     if (p->error_indicator) {
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     pattern_ty _res = NULL;
     int _mark = p->mark;
     if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) {
         p->error_indicator = 1;
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     int _start_lineno = p->tokens[_mark]->lineno;
@@ -5719,7 +5864,7 @@ or_pattern_rule(Parser *p)
     UNUSED(_start_col_offset); // Only used by EXTRA macro
     { // '|'.closed_pattern+
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> or_pattern[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'|'.closed_pattern+"));
@@ -5731,7 +5876,7 @@ or_pattern_rule(Parser *p)
             D(fprintf(stderr, "%*c+ or_pattern[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'|'.closed_pattern+"));
             Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
             if (_token == NULL) {
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             int _end_lineno = _token->end_lineno;
@@ -5741,7 +5886,7 @@ or_pattern_rule(Parser *p)
             _res = asdl_seq_LEN ( patterns ) == 1 ? asdl_seq_GET ( patterns , 0 ) : _PyAST_MatchOr ( patterns , EXTRA );
             if (_res == NULL && PyErr_Occurred()) {
                 p->error_indicator = 1;
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             goto done;
@@ -5752,7 +5897,7 @@ or_pattern_rule(Parser *p)
     }
     _res = NULL;
   done:
-    D(p->level--);
+    p->level--;
     return _res;
 }
 
@@ -5768,16 +5913,19 @@ or_pattern_rule(Parser *p)
 static pattern_ty
 closed_pattern_rule(Parser *p)
 {
-    D(p->level++);
+    if (p->level++ == MAXSTACK) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+    }
     if (p->error_indicator) {
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     pattern_ty _res = NULL;
     int _mark = p->mark;
     { // literal_pattern
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> closed_pattern[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "literal_pattern"));
@@ -5796,7 +5944,7 @@ closed_pattern_rule(Parser *p)
     }
     { // capture_pattern
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> closed_pattern[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "capture_pattern"));
@@ -5815,7 +5963,7 @@ closed_pattern_rule(Parser *p)
     }
     { // wildcard_pattern
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> closed_pattern[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "wildcard_pattern"));
@@ -5834,7 +5982,7 @@ closed_pattern_rule(Parser *p)
     }
     { // value_pattern
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> closed_pattern[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "value_pattern"));
@@ -5853,7 +6001,7 @@ closed_pattern_rule(Parser *p)
     }
     { // group_pattern
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> closed_pattern[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "group_pattern"));
@@ -5872,7 +6020,7 @@ closed_pattern_rule(Parser *p)
     }
     { // sequence_pattern
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> closed_pattern[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "sequence_pattern"));
@@ -5891,7 +6039,7 @@ closed_pattern_rule(Parser *p)
     }
     { // mapping_pattern
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> closed_pattern[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "mapping_pattern"));
@@ -5910,7 +6058,7 @@ closed_pattern_rule(Parser *p)
     }
     { // class_pattern
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> closed_pattern[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "class_pattern"));
@@ -5929,7 +6077,7 @@ closed_pattern_rule(Parser *p)
     }
     _res = NULL;
   done:
-    D(p->level--);
+    p->level--;
     return _res;
 }
 
@@ -5943,16 +6091,19 @@ closed_pattern_rule(Parser *p)
 static pattern_ty
 literal_pattern_rule(Parser *p)
 {
-    D(p->level++);
+    if (p->level++ == MAXSTACK) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+    }
     if (p->error_indicator) {
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     pattern_ty _res = NULL;
     int _mark = p->mark;
     if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) {
         p->error_indicator = 1;
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     int _start_lineno = p->tokens[_mark]->lineno;
@@ -5961,7 +6112,7 @@ literal_pattern_rule(Parser *p)
     UNUSED(_start_col_offset); // Only used by EXTRA macro
     { // signed_number !('+' | '-')
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> literal_pattern[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "signed_number !('+' | '-')"));
@@ -5975,7 +6126,7 @@ literal_pattern_rule(Parser *p)
             D(fprintf(stderr, "%*c+ literal_pattern[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "signed_number !('+' | '-')"));
             Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
             if (_token == NULL) {
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             int _end_lineno = _token->end_lineno;
@@ -5985,7 +6136,7 @@ literal_pattern_rule(Parser *p)
             _res = _PyAST_MatchValue ( value , EXTRA );
             if (_res == NULL && PyErr_Occurred()) {
                 p->error_indicator = 1;
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             goto done;
@@ -5996,7 +6147,7 @@ literal_pattern_rule(Parser *p)
     }
     { // complex_number
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> literal_pattern[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "complex_number"));
@@ -6008,7 +6159,7 @@ literal_pattern_rule(Parser *p)
             D(fprintf(stderr, "%*c+ literal_pattern[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "complex_number"));
             Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
             if (_token == NULL) {
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             int _end_lineno = _token->end_lineno;
@@ -6018,7 +6169,7 @@ literal_pattern_rule(Parser *p)
             _res = _PyAST_MatchValue ( value , EXTRA );
             if (_res == NULL && PyErr_Occurred()) {
                 p->error_indicator = 1;
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             goto done;
@@ -6029,7 +6180,7 @@ literal_pattern_rule(Parser *p)
     }
     { // strings
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> literal_pattern[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "strings"));
@@ -6041,7 +6192,7 @@ literal_pattern_rule(Parser *p)
             D(fprintf(stderr, "%*c+ literal_pattern[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "strings"));
             Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
             if (_token == NULL) {
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             int _end_lineno = _token->end_lineno;
@@ -6051,7 +6202,7 @@ literal_pattern_rule(Parser *p)
             _res = _PyAST_MatchValue ( value , EXTRA );
             if (_res == NULL && PyErr_Occurred()) {
                 p->error_indicator = 1;
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             goto done;
@@ -6062,7 +6213,7 @@ literal_pattern_rule(Parser *p)
     }
     { // 'None'
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> literal_pattern[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'None'"));
@@ -6074,7 +6225,7 @@ literal_pattern_rule(Parser *p)
             D(fprintf(stderr, "%*c+ literal_pattern[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'None'"));
             Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
             if (_token == NULL) {
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             int _end_lineno = _token->end_lineno;
@@ -6084,7 +6235,7 @@ literal_pattern_rule(Parser *p)
             _res = _PyAST_MatchSingleton ( Py_None , EXTRA );
             if (_res == NULL && PyErr_Occurred()) {
                 p->error_indicator = 1;
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             goto done;
@@ -6095,7 +6246,7 @@ literal_pattern_rule(Parser *p)
     }
     { // 'True'
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> literal_pattern[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'True'"));
@@ -6107,7 +6258,7 @@ literal_pattern_rule(Parser *p)
             D(fprintf(stderr, "%*c+ literal_pattern[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'True'"));
             Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
             if (_token == NULL) {
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             int _end_lineno = _token->end_lineno;
@@ -6117,7 +6268,7 @@ literal_pattern_rule(Parser *p)
             _res = _PyAST_MatchSingleton ( Py_True , EXTRA );
             if (_res == NULL && PyErr_Occurred()) {
                 p->error_indicator = 1;
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             goto done;
@@ -6128,7 +6279,7 @@ literal_pattern_rule(Parser *p)
     }
     { // 'False'
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> literal_pattern[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'False'"));
@@ -6140,7 +6291,7 @@ literal_pattern_rule(Parser *p)
             D(fprintf(stderr, "%*c+ literal_pattern[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'False'"));
             Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
             if (_token == NULL) {
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             int _end_lineno = _token->end_lineno;
@@ -6150,7 +6301,7 @@ literal_pattern_rule(Parser *p)
             _res = _PyAST_MatchSingleton ( Py_False , EXTRA );
             if (_res == NULL && PyErr_Occurred()) {
                 p->error_indicator = 1;
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             goto done;
@@ -6161,7 +6312,7 @@ literal_pattern_rule(Parser *p)
     }
     _res = NULL;
   done:
-    D(p->level--);
+    p->level--;
     return _res;
 }
 
@@ -6175,16 +6326,19 @@ literal_pattern_rule(Parser *p)
 static expr_ty
 literal_expr_rule(Parser *p)
 {
-    D(p->level++);
+    if (p->level++ == MAXSTACK) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+    }
     if (p->error_indicator) {
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     expr_ty _res = NULL;
     int _mark = p->mark;
     if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) {
         p->error_indicator = 1;
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     int _start_lineno = p->tokens[_mark]->lineno;
@@ -6193,7 +6347,7 @@ literal_expr_rule(Parser *p)
     UNUSED(_start_col_offset); // Only used by EXTRA macro
     { // signed_number !('+' | '-')
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> literal_expr[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "signed_number !('+' | '-')"));
@@ -6214,7 +6368,7 @@ literal_expr_rule(Parser *p)
     }
     { // complex_number
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> literal_expr[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "complex_number"));
@@ -6233,7 +6387,7 @@ literal_expr_rule(Parser *p)
     }
     { // strings
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> literal_expr[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "strings"));
@@ -6252,7 +6406,7 @@ literal_expr_rule(Parser *p)
     }
     { // 'None'
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> literal_expr[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'None'"));
@@ -6264,7 +6418,7 @@ literal_expr_rule(Parser *p)
             D(fprintf(stderr, "%*c+ literal_expr[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'None'"));
             Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
             if (_token == NULL) {
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             int _end_lineno = _token->end_lineno;
@@ -6274,7 +6428,7 @@ literal_expr_rule(Parser *p)
             _res = _PyAST_Constant ( Py_None , NULL , EXTRA );
             if (_res == NULL && PyErr_Occurred()) {
                 p->error_indicator = 1;
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             goto done;
@@ -6285,7 +6439,7 @@ literal_expr_rule(Parser *p)
     }
     { // 'True'
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> literal_expr[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'True'"));
@@ -6297,7 +6451,7 @@ literal_expr_rule(Parser *p)
             D(fprintf(stderr, "%*c+ literal_expr[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'True'"));
             Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
             if (_token == NULL) {
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             int _end_lineno = _token->end_lineno;
@@ -6307,7 +6461,7 @@ literal_expr_rule(Parser *p)
             _res = _PyAST_Constant ( Py_True , NULL , EXTRA );
             if (_res == NULL && PyErr_Occurred()) {
                 p->error_indicator = 1;
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             goto done;
@@ -6318,7 +6472,7 @@ literal_expr_rule(Parser *p)
     }
     { // 'False'
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> literal_expr[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'False'"));
@@ -6330,7 +6484,7 @@ literal_expr_rule(Parser *p)
             D(fprintf(stderr, "%*c+ literal_expr[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'False'"));
             Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
             if (_token == NULL) {
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             int _end_lineno = _token->end_lineno;
@@ -6340,7 +6494,7 @@ literal_expr_rule(Parser *p)
             _res = _PyAST_Constant ( Py_False , NULL , EXTRA );
             if (_res == NULL && PyErr_Occurred()) {
                 p->error_indicator = 1;
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             goto done;
@@ -6351,7 +6505,7 @@ literal_expr_rule(Parser *p)
     }
     _res = NULL;
   done:
-    D(p->level--);
+    p->level--;
     return _res;
 }
 
@@ -6361,16 +6515,19 @@ literal_expr_rule(Parser *p)
 static expr_ty
 complex_number_rule(Parser *p)
 {
-    D(p->level++);
+    if (p->level++ == MAXSTACK) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+    }
     if (p->error_indicator) {
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     expr_ty _res = NULL;
     int _mark = p->mark;
     if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) {
         p->error_indicator = 1;
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     int _start_lineno = p->tokens[_mark]->lineno;
@@ -6379,7 +6536,7 @@ complex_number_rule(Parser *p)
     UNUSED(_start_col_offset); // Only used by EXTRA macro
     { // signed_real_number '+' imaginary_number
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> complex_number[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "signed_real_number '+' imaginary_number"));
@@ -6397,7 +6554,7 @@ complex_number_rule(Parser *p)
             D(fprintf(stderr, "%*c+ complex_number[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "signed_real_number '+' imaginary_number"));
             Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
             if (_token == NULL) {
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             int _end_lineno = _token->end_lineno;
@@ -6407,7 +6564,7 @@ complex_number_rule(Parser *p)
             _res = _PyAST_BinOp ( real , Add , imag , EXTRA );
             if (_res == NULL && PyErr_Occurred()) {
                 p->error_indicator = 1;
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             goto done;
@@ -6418,7 +6575,7 @@ complex_number_rule(Parser *p)
     }
     { // signed_real_number '-' imaginary_number
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> complex_number[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "signed_real_number '-' imaginary_number"));
@@ -6436,7 +6593,7 @@ complex_number_rule(Parser *p)
             D(fprintf(stderr, "%*c+ complex_number[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "signed_real_number '-' imaginary_number"));
             Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
             if (_token == NULL) {
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             int _end_lineno = _token->end_lineno;
@@ -6446,7 +6603,7 @@ complex_number_rule(Parser *p)
             _res = _PyAST_BinOp ( real , Sub , imag , EXTRA );
             if (_res == NULL && PyErr_Occurred()) {
                 p->error_indicator = 1;
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             goto done;
@@ -6457,7 +6614,7 @@ complex_number_rule(Parser *p)
     }
     _res = NULL;
   done:
-    D(p->level--);
+    p->level--;
     return _res;
 }
 
@@ -6465,16 +6622,19 @@ complex_number_rule(Parser *p)
 static expr_ty
 signed_number_rule(Parser *p)
 {
-    D(p->level++);
+    if (p->level++ == MAXSTACK) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+    }
     if (p->error_indicator) {
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     expr_ty _res = NULL;
     int _mark = p->mark;
     if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) {
         p->error_indicator = 1;
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     int _start_lineno = p->tokens[_mark]->lineno;
@@ -6483,7 +6643,7 @@ signed_number_rule(Parser *p)
     UNUSED(_start_col_offset); // Only used by EXTRA macro
     { // NUMBER
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> signed_number[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "NUMBER"));
@@ -6502,7 +6662,7 @@ signed_number_rule(Parser *p)
     }
     { // '-' NUMBER
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> signed_number[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'-' NUMBER"));
@@ -6517,7 +6677,7 @@ signed_number_rule(Parser *p)
             D(fprintf(stderr, "%*c+ signed_number[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'-' NUMBER"));
             Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
             if (_token == NULL) {
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             int _end_lineno = _token->end_lineno;
@@ -6527,7 +6687,7 @@ signed_number_rule(Parser *p)
             _res = _PyAST_UnaryOp ( USub , number , EXTRA );
             if (_res == NULL && PyErr_Occurred()) {
                 p->error_indicator = 1;
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             goto done;
@@ -6538,7 +6698,7 @@ signed_number_rule(Parser *p)
     }
     _res = NULL;
   done:
-    D(p->level--);
+    p->level--;
     return _res;
 }
 
@@ -6546,16 +6706,19 @@ signed_number_rule(Parser *p)
 static expr_ty
 signed_real_number_rule(Parser *p)
 {
-    D(p->level++);
+    if (p->level++ == MAXSTACK) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+    }
     if (p->error_indicator) {
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     expr_ty _res = NULL;
     int _mark = p->mark;
     if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) {
         p->error_indicator = 1;
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     int _start_lineno = p->tokens[_mark]->lineno;
@@ -6564,7 +6727,7 @@ signed_real_number_rule(Parser *p)
     UNUSED(_start_col_offset); // Only used by EXTRA macro
     { // real_number
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> signed_real_number[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "real_number"));
@@ -6583,7 +6746,7 @@ signed_real_number_rule(Parser *p)
     }
     { // '-' real_number
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> signed_real_number[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'-' real_number"));
@@ -6598,7 +6761,7 @@ signed_real_number_rule(Parser *p)
             D(fprintf(stderr, "%*c+ signed_real_number[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'-' real_number"));
             Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
             if (_token == NULL) {
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             int _end_lineno = _token->end_lineno;
@@ -6608,7 +6771,7 @@ signed_real_number_rule(Parser *p)
             _res = _PyAST_UnaryOp ( USub , real , EXTRA );
             if (_res == NULL && PyErr_Occurred()) {
                 p->error_indicator = 1;
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             goto done;
@@ -6619,7 +6782,7 @@ signed_real_number_rule(Parser *p)
     }
     _res = NULL;
   done:
-    D(p->level--);
+    p->level--;
     return _res;
 }
 
@@ -6627,16 +6790,19 @@ signed_real_number_rule(Parser *p)
 static expr_ty
 real_number_rule(Parser *p)
 {
-    D(p->level++);
+    if (p->level++ == MAXSTACK) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+    }
     if (p->error_indicator) {
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     expr_ty _res = NULL;
     int _mark = p->mark;
     { // NUMBER
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> real_number[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "NUMBER"));
@@ -6649,7 +6815,7 @@ real_number_rule(Parser *p)
             _res = _PyPegen_ensure_real ( p , real );
             if (_res == NULL && PyErr_Occurred()) {
                 p->error_indicator = 1;
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             goto done;
@@ -6660,7 +6826,7 @@ real_number_rule(Parser *p)
     }
     _res = NULL;
   done:
-    D(p->level--);
+    p->level--;
     return _res;
 }
 
@@ -6668,16 +6834,19 @@ real_number_rule(Parser *p)
 static expr_ty
 imaginary_number_rule(Parser *p)
 {
-    D(p->level++);
+    if (p->level++ == MAXSTACK) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+    }
     if (p->error_indicator) {
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     expr_ty _res = NULL;
     int _mark = p->mark;
     { // NUMBER
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> imaginary_number[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "NUMBER"));
@@ -6690,7 +6859,7 @@ imaginary_number_rule(Parser *p)
             _res = _PyPegen_ensure_imaginary ( p , imag );
             if (_res == NULL && PyErr_Occurred()) {
                 p->error_indicator = 1;
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             goto done;
@@ -6701,7 +6870,7 @@ imaginary_number_rule(Parser *p)
     }
     _res = NULL;
   done:
-    D(p->level--);
+    p->level--;
     return _res;
 }
 
@@ -6709,16 +6878,19 @@ imaginary_number_rule(Parser *p)
 static pattern_ty
 capture_pattern_rule(Parser *p)
 {
-    D(p->level++);
+    if (p->level++ == MAXSTACK) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+    }
     if (p->error_indicator) {
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     pattern_ty _res = NULL;
     int _mark = p->mark;
     if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) {
         p->error_indicator = 1;
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     int _start_lineno = p->tokens[_mark]->lineno;
@@ -6727,7 +6899,7 @@ capture_pattern_rule(Parser *p)
     UNUSED(_start_col_offset); // Only used by EXTRA macro
     { // pattern_capture_target
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> capture_pattern[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "pattern_capture_target"));
@@ -6739,7 +6911,7 @@ capture_pattern_rule(Parser *p)
             D(fprintf(stderr, "%*c+ capture_pattern[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "pattern_capture_target"));
             Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
             if (_token == NULL) {
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             int _end_lineno = _token->end_lineno;
@@ -6749,7 +6921,7 @@ capture_pattern_rule(Parser *p)
             _res = _PyAST_MatchAs ( NULL , target -> v . Name . id , EXTRA );
             if (_res == NULL && PyErr_Occurred()) {
                 p->error_indicator = 1;
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             goto done;
@@ -6760,7 +6932,7 @@ capture_pattern_rule(Parser *p)
     }
     _res = NULL;
   done:
-    D(p->level--);
+    p->level--;
     return _res;
 }
 
@@ -6768,16 +6940,19 @@ capture_pattern_rule(Parser *p)
 static expr_ty
 pattern_capture_target_rule(Parser *p)
 {
-    D(p->level++);
+    if (p->level++ == MAXSTACK) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+    }
     if (p->error_indicator) {
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     expr_ty _res = NULL;
     int _mark = p->mark;
     { // !"_" NAME !('.' | '(' | '=')
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> pattern_capture_target[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "!\"_\" NAME !('.' | '(' | '=')"));
@@ -6794,7 +6969,7 @@ pattern_capture_target_rule(Parser *p)
             _res = _PyPegen_set_expr_context ( p , name , Store );
             if (_res == NULL && PyErr_Occurred()) {
                 p->error_indicator = 1;
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             goto done;
@@ -6805,7 +6980,7 @@ pattern_capture_target_rule(Parser *p)
     }
     _res = NULL;
   done:
-    D(p->level--);
+    p->level--;
     return _res;
 }
 
@@ -6813,16 +6988,19 @@ pattern_capture_target_rule(Parser *p)
 static pattern_ty
 wildcard_pattern_rule(Parser *p)
 {
-    D(p->level++);
+    if (p->level++ == MAXSTACK) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+    }
     if (p->error_indicator) {
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     pattern_ty _res = NULL;
     int _mark = p->mark;
     if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) {
         p->error_indicator = 1;
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     int _start_lineno = p->tokens[_mark]->lineno;
@@ -6831,7 +7009,7 @@ wildcard_pattern_rule(Parser *p)
     UNUSED(_start_col_offset); // Only used by EXTRA macro
     { // "_"
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> wildcard_pattern[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "\"_\""));
@@ -6843,7 +7021,7 @@ wildcard_pattern_rule(Parser *p)
             D(fprintf(stderr, "%*c+ wildcard_pattern[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "\"_\""));
             Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
             if (_token == NULL) {
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             int _end_lineno = _token->end_lineno;
@@ -6853,7 +7031,7 @@ wildcard_pattern_rule(Parser *p)
             _res = _PyAST_MatchAs ( NULL , NULL , EXTRA );
             if (_res == NULL && PyErr_Occurred()) {
                 p->error_indicator = 1;
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             goto done;
@@ -6864,7 +7042,7 @@ wildcard_pattern_rule(Parser *p)
     }
     _res = NULL;
   done:
-    D(p->level--);
+    p->level--;
     return _res;
 }
 
@@ -6872,16 +7050,19 @@ wildcard_pattern_rule(Parser *p)
 static pattern_ty
 value_pattern_rule(Parser *p)
 {
-    D(p->level++);
+    if (p->level++ == MAXSTACK) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+    }
     if (p->error_indicator) {
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     pattern_ty _res = NULL;
     int _mark = p->mark;
     if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) {
         p->error_indicator = 1;
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     int _start_lineno = p->tokens[_mark]->lineno;
@@ -6890,7 +7071,7 @@ value_pattern_rule(Parser *p)
     UNUSED(_start_col_offset); // Only used by EXTRA macro
     { // attr !('.' | '(' | '=')
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> value_pattern[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "attr !('.' | '(' | '=')"));
@@ -6904,7 +7085,7 @@ value_pattern_rule(Parser *p)
             D(fprintf(stderr, "%*c+ value_pattern[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "attr !('.' | '(' | '=')"));
             Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
             if (_token == NULL) {
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             int _end_lineno = _token->end_lineno;
@@ -6914,7 +7095,7 @@ value_pattern_rule(Parser *p)
             _res = _PyAST_MatchValue ( attr , EXTRA );
             if (_res == NULL && PyErr_Occurred()) {
                 p->error_indicator = 1;
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             goto done;
@@ -6925,7 +7106,7 @@ value_pattern_rule(Parser *p)
     }
     _res = NULL;
   done:
-    D(p->level--);
+    p->level--;
     return _res;
 }
 
@@ -6935,10 +7116,13 @@ static expr_ty attr_raw(Parser *);
 static expr_ty
 attr_rule(Parser *p)
 {
-    D(p->level++);
+    if (p->level++ == MAXSTACK) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+    }
     expr_ty _res = NULL;
     if (_PyPegen_is_memoized(p, attr_type, &_res)) {
-        D(p->level--);
+        p->level--;
         return _res;
     }
     int _mark = p->mark;
@@ -6946,37 +7130,42 @@ attr_rule(Parser *p)
     while (1) {
         int tmpvar_1 = _PyPegen_update_memo(p, _mark, attr_type, _res);
         if (tmpvar_1) {
-            D(p->level--);
+            p->level--;
             return _res;
         }
         p->mark = _mark;
         p->in_raw_rule++;
         void *_raw = attr_raw(p);
         p->in_raw_rule--;
-        if (p->error_indicator)
+        if (p->error_indicator) {
+            p->level--;
             return NULL;
+        }
         if (_raw == NULL || p->mark <= _resmark)
             break;
         _resmark = p->mark;
         _res = _raw;
     }
     p->mark = _resmark;
-    D(p->level--);
+    p->level--;
     return _res;
 }
 static expr_ty
 attr_raw(Parser *p)
 {
-    D(p->level++);
+    if (p->level++ == MAXSTACK) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+    }
     if (p->error_indicator) {
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     expr_ty _res = NULL;
     int _mark = p->mark;
     if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) {
         p->error_indicator = 1;
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     int _start_lineno = p->tokens[_mark]->lineno;
@@ -6985,7 +7174,7 @@ attr_raw(Parser *p)
     UNUSED(_start_col_offset); // Only used by EXTRA macro
     { // name_or_attr '.' NAME
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> attr[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "name_or_attr '.' NAME"));
@@ -7003,7 +7192,7 @@ attr_raw(Parser *p)
             D(fprintf(stderr, "%*c+ attr[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "name_or_attr '.' NAME"));
             Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
             if (_token == NULL) {
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             int _end_lineno = _token->end_lineno;
@@ -7013,7 +7202,7 @@ attr_raw(Parser *p)
             _res = _PyAST_Attribute ( value , attr -> v . Name . id , Load , EXTRA );
             if (_res == NULL && PyErr_Occurred()) {
                 p->error_indicator = 1;
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             goto done;
@@ -7024,7 +7213,7 @@ attr_raw(Parser *p)
     }
     _res = NULL;
   done:
-    D(p->level--);
+    p->level--;
     return _res;
 }
 
@@ -7033,16 +7222,19 @@ attr_raw(Parser *p)
 static expr_ty
 name_or_attr_rule(Parser *p)
 {
-    D(p->level++);
+    if (p->level++ == MAXSTACK) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+    }
     if (p->error_indicator) {
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     expr_ty _res = NULL;
     int _mark = p->mark;
     { // attr
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> name_or_attr[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "attr"));
@@ -7061,7 +7253,7 @@ name_or_attr_rule(Parser *p)
     }
     { // NAME
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> name_or_attr[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "NAME"));
@@ -7080,7 +7272,7 @@ name_or_attr_rule(Parser *p)
     }
     _res = NULL;
   done:
-    D(p->level--);
+    p->level--;
     return _res;
 }
 
@@ -7088,16 +7280,19 @@ name_or_attr_rule(Parser *p)
 static pattern_ty
 group_pattern_rule(Parser *p)
 {
-    D(p->level++);
+    if (p->level++ == MAXSTACK) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+    }
     if (p->error_indicator) {
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     pattern_ty _res = NULL;
     int _mark = p->mark;
     { // '(' pattern ')'
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> group_pattern[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'(' pattern ')'"));
@@ -7116,7 +7311,7 @@ group_pattern_rule(Parser *p)
             _res = pattern;
             if (_res == NULL && PyErr_Occurred()) {
                 p->error_indicator = 1;
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             goto done;
@@ -7127,7 +7322,7 @@ group_pattern_rule(Parser *p)
     }
     _res = NULL;
   done:
-    D(p->level--);
+    p->level--;
     return _res;
 }
 
@@ -7135,16 +7330,19 @@ group_pattern_rule(Parser *p)
 static pattern_ty
 sequence_pattern_rule(Parser *p)
 {
-    D(p->level++);
+    if (p->level++ == MAXSTACK) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+    }
     if (p->error_indicator) {
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     pattern_ty _res = NULL;
     int _mark = p->mark;
     if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) {
         p->error_indicator = 1;
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     int _start_lineno = p->tokens[_mark]->lineno;
@@ -7153,7 +7351,7 @@ sequence_pattern_rule(Parser *p)
     UNUSED(_start_col_offset); // Only used by EXTRA macro
     { // '[' maybe_sequence_pattern? ']'
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> sequence_pattern[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'[' maybe_sequence_pattern? ']'"));
@@ -7171,7 +7369,7 @@ sequence_pattern_rule(Parser *p)
             D(fprintf(stderr, "%*c+ sequence_pattern[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'[' maybe_sequence_pattern? ']'"));
             Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
             if (_token == NULL) {
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             int _end_lineno = _token->end_lineno;
@@ -7181,7 +7379,7 @@ sequence_pattern_rule(Parser *p)
             _res = _PyAST_MatchSequence ( patterns , EXTRA );
             if (_res == NULL && PyErr_Occurred()) {
                 p->error_indicator = 1;
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             goto done;
@@ -7192,7 +7390,7 @@ sequence_pattern_rule(Parser *p)
     }
     { // '(' open_sequence_pattern? ')'
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> sequence_pattern[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'(' open_sequence_pattern? ')'"));
@@ -7210,7 +7408,7 @@ sequence_pattern_rule(Parser *p)
             D(fprintf(stderr, "%*c+ sequence_pattern[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'(' open_sequence_pattern? ')'"));
             Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
             if (_token == NULL) {
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             int _end_lineno = _token->end_lineno;
@@ -7220,7 +7418,7 @@ sequence_pattern_rule(Parser *p)
             _res = _PyAST_MatchSequence ( patterns , EXTRA );
             if (_res == NULL && PyErr_Occurred()) {
                 p->error_indicator = 1;
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             goto done;
@@ -7231,7 +7429,7 @@ sequence_pattern_rule(Parser *p)
     }
     _res = NULL;
   done:
-    D(p->level--);
+    p->level--;
     return _res;
 }
 
@@ -7239,16 +7437,19 @@ sequence_pattern_rule(Parser *p)
 static asdl_seq*
 open_sequence_pattern_rule(Parser *p)
 {
-    D(p->level++);
+    if (p->level++ == MAXSTACK) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+    }
     if (p->error_indicator) {
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     asdl_seq* _res = NULL;
     int _mark = p->mark;
     { // maybe_star_pattern ',' maybe_sequence_pattern?
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> open_sequence_pattern[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "maybe_star_pattern ',' maybe_sequence_pattern?"));
@@ -7267,7 +7468,7 @@ open_sequence_pattern_rule(Parser *p)
             _res = _PyPegen_seq_insert_in_front ( p , pattern , patterns );
             if (_res == NULL && PyErr_Occurred()) {
                 p->error_indicator = 1;
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             goto done;
@@ -7278,7 +7479,7 @@ open_sequence_pattern_rule(Parser *p)
     }
     _res = NULL;
   done:
-    D(p->level--);
+    p->level--;
     return _res;
 }
 
@@ -7286,16 +7487,19 @@ open_sequence_pattern_rule(Parser *p)
 static asdl_seq*
 maybe_sequence_pattern_rule(Parser *p)
 {
-    D(p->level++);
+    if (p->level++ == MAXSTACK) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+    }
     if (p->error_indicator) {
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     asdl_seq* _res = NULL;
     int _mark = p->mark;
     { // ','.maybe_star_pattern+ ','?
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> maybe_sequence_pattern[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "','.maybe_star_pattern+ ','?"));
@@ -7312,7 +7516,7 @@ maybe_sequence_pattern_rule(Parser *p)
             _res = patterns;
             if (_res == NULL && PyErr_Occurred()) {
                 p->error_indicator = 1;
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             goto done;
@@ -7323,7 +7527,7 @@ maybe_sequence_pattern_rule(Parser *p)
     }
     _res = NULL;
   done:
-    D(p->level--);
+    p->level--;
     return _res;
 }
 
@@ -7331,16 +7535,19 @@ maybe_sequence_pattern_rule(Parser *p)
 static pattern_ty
 maybe_star_pattern_rule(Parser *p)
 {
-    D(p->level++);
+    if (p->level++ == MAXSTACK) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+    }
     if (p->error_indicator) {
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     pattern_ty _res = NULL;
     int _mark = p->mark;
     { // star_pattern
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> maybe_star_pattern[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "star_pattern"));
@@ -7359,7 +7566,7 @@ maybe_star_pattern_rule(Parser *p)
     }
     { // pattern
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> maybe_star_pattern[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "pattern"));
@@ -7378,7 +7585,7 @@ maybe_star_pattern_rule(Parser *p)
     }
     _res = NULL;
   done:
-    D(p->level--);
+    p->level--;
     return _res;
 }
 
@@ -7386,16 +7593,19 @@ maybe_star_pattern_rule(Parser *p)
 static pattern_ty
 star_pattern_rule(Parser *p)
 {
-    D(p->level++);
+    if (p->level++ == MAXSTACK) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+    }
     if (p->error_indicator) {
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     pattern_ty _res = NULL;
     int _mark = p->mark;
     if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) {
         p->error_indicator = 1;
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     int _start_lineno = p->tokens[_mark]->lineno;
@@ -7404,7 +7614,7 @@ star_pattern_rule(Parser *p)
     UNUSED(_start_col_offset); // Only used by EXTRA macro
     { // '*' pattern_capture_target
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> star_pattern[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'*' pattern_capture_target"));
@@ -7419,7 +7629,7 @@ star_pattern_rule(Parser *p)
             D(fprintf(stderr, "%*c+ star_pattern[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'*' pattern_capture_target"));
             Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
             if (_token == NULL) {
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             int _end_lineno = _token->end_lineno;
@@ -7429,7 +7639,7 @@ star_pattern_rule(Parser *p)
             _res = _PyAST_MatchStar ( target -> v . Name . id , EXTRA );
             if (_res == NULL && PyErr_Occurred()) {
                 p->error_indicator = 1;
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             goto done;
@@ -7440,7 +7650,7 @@ star_pattern_rule(Parser *p)
     }
     { // '*' wildcard_pattern
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> star_pattern[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'*' wildcard_pattern"));
@@ -7455,7 +7665,7 @@ star_pattern_rule(Parser *p)
             D(fprintf(stderr, "%*c+ star_pattern[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'*' wildcard_pattern"));
             Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
             if (_token == NULL) {
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             int _end_lineno = _token->end_lineno;
@@ -7465,7 +7675,7 @@ star_pattern_rule(Parser *p)
             _res = _PyAST_MatchStar ( NULL , EXTRA );
             if (_res == NULL && PyErr_Occurred()) {
                 p->error_indicator = 1;
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             goto done;
@@ -7476,7 +7686,7 @@ star_pattern_rule(Parser *p)
     }
     _res = NULL;
   done:
-    D(p->level--);
+    p->level--;
     return _res;
 }
 
@@ -7488,16 +7698,19 @@ star_pattern_rule(Parser *p)
 static pattern_ty
 mapping_pattern_rule(Parser *p)
 {
-    D(p->level++);
+    if (p->level++ == MAXSTACK) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+    }
     if (p->error_indicator) {
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     pattern_ty _res = NULL;
     int _mark = p->mark;
     if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) {
         p->error_indicator = 1;
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     int _start_lineno = p->tokens[_mark]->lineno;
@@ -7506,7 +7719,7 @@ mapping_pattern_rule(Parser *p)
     UNUSED(_start_col_offset); // Only used by EXTRA macro
     { // '{' '}'
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> mapping_pattern[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'{' '}'"));
@@ -7521,7 +7734,7 @@ mapping_pattern_rule(Parser *p)
             D(fprintf(stderr, "%*c+ mapping_pattern[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'{' '}'"));
             Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
             if (_token == NULL) {
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             int _end_lineno = _token->end_lineno;
@@ -7531,7 +7744,7 @@ mapping_pattern_rule(Parser *p)
             _res = _PyAST_MatchMapping ( NULL , NULL , NULL , EXTRA );
             if (_res == NULL && PyErr_Occurred()) {
                 p->error_indicator = 1;
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             goto done;
@@ -7542,7 +7755,7 @@ mapping_pattern_rule(Parser *p)
     }
     { // '{' double_star_pattern ','? '}'
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> mapping_pattern[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'{' double_star_pattern ','? '}'"));
@@ -7564,7 +7777,7 @@ mapping_pattern_rule(Parser *p)
             D(fprintf(stderr, "%*c+ mapping_pattern[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'{' double_star_pattern ','? '}'"));
             Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
             if (_token == NULL) {
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             int _end_lineno = _token->end_lineno;
@@ -7574,7 +7787,7 @@ mapping_pattern_rule(Parser *p)
             _res = _PyAST_MatchMapping ( NULL , NULL , rest -> v . Name . id , EXTRA );
             if (_res == NULL && PyErr_Occurred()) {
                 p->error_indicator = 1;
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             goto done;
@@ -7585,7 +7798,7 @@ mapping_pattern_rule(Parser *p)
     }
     { // '{' items_pattern ',' double_star_pattern ','? '}'
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> mapping_pattern[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'{' items_pattern ',' double_star_pattern ','? '}'"));
@@ -7613,7 +7826,7 @@ mapping_pattern_rule(Parser *p)
             D(fprintf(stderr, "%*c+ mapping_pattern[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'{' items_pattern ',' double_star_pattern ','? '}'"));
             Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
             if (_token == NULL) {
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             int _end_lineno = _token->end_lineno;
@@ -7623,7 +7836,7 @@ mapping_pattern_rule(Parser *p)
             _res = _PyAST_MatchMapping ( CHECK ( asdl_expr_seq * , _PyPegen_get_pattern_keys ( p , items ) ) , CHECK ( asdl_pattern_seq * , _PyPegen_get_patterns ( p , items ) ) , rest -> v . Name . id , EXTRA );
             if (_res == NULL && PyErr_Occurred()) {
                 p->error_indicator = 1;
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             goto done;
@@ -7634,7 +7847,7 @@ mapping_pattern_rule(Parser *p)
     }
     { // '{' items_pattern ','? '}'
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> mapping_pattern[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'{' items_pattern ','? '}'"));
@@ -7656,7 +7869,7 @@ mapping_pattern_rule(Parser *p)
             D(fprintf(stderr, "%*c+ mapping_pattern[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'{' items_pattern ','? '}'"));
             Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
             if (_token == NULL) {
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             int _end_lineno = _token->end_lineno;
@@ -7666,7 +7879,7 @@ mapping_pattern_rule(Parser *p)
             _res = _PyAST_MatchMapping ( CHECK ( asdl_expr_seq * , _PyPegen_get_pattern_keys ( p , items ) ) , CHECK ( asdl_pattern_seq * , _PyPegen_get_patterns ( p , items ) ) , NULL , EXTRA );
             if (_res == NULL && PyErr_Occurred()) {
                 p->error_indicator = 1;
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             goto done;
@@ -7677,7 +7890,7 @@ mapping_pattern_rule(Parser *p)
     }
     _res = NULL;
   done:
-    D(p->level--);
+    p->level--;
     return _res;
 }
 
@@ -7685,16 +7898,19 @@ mapping_pattern_rule(Parser *p)
 static asdl_seq*
 items_pattern_rule(Parser *p)
 {
-    D(p->level++);
+    if (p->level++ == MAXSTACK) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+    }
     if (p->error_indicator) {
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     asdl_seq* _res = NULL;
     int _mark = p->mark;
     { // ','.key_value_pattern+
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> items_pattern[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "','.key_value_pattern+"));
@@ -7713,7 +7929,7 @@ items_pattern_rule(Parser *p)
     }
     _res = NULL;
   done:
-    D(p->level--);
+    p->level--;
     return _res;
 }
 
@@ -7721,16 +7937,19 @@ items_pattern_rule(Parser *p)
 static KeyPatternPair*
 key_value_pattern_rule(Parser *p)
 {
-    D(p->level++);
+    if (p->level++ == MAXSTACK) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+    }
     if (p->error_indicator) {
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     KeyPatternPair* _res = NULL;
     int _mark = p->mark;
     { // (literal_expr | attr) ':' pattern
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> key_value_pattern[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "(literal_expr | attr) ':' pattern"));
@@ -7749,7 +7968,7 @@ key_value_pattern_rule(Parser *p)
             _res = _PyPegen_key_pattern_pair ( p , key , pattern );
             if (_res == NULL && PyErr_Occurred()) {
                 p->error_indicator = 1;
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             goto done;
@@ -7760,7 +7979,7 @@ key_value_pattern_rule(Parser *p)
     }
     _res = NULL;
   done:
-    D(p->level--);
+    p->level--;
     return _res;
 }
 
@@ -7768,16 +7987,19 @@ key_value_pattern_rule(Parser *p)
 static expr_ty
 double_star_pattern_rule(Parser *p)
 {
-    D(p->level++);
+    if (p->level++ == MAXSTACK) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+    }
     if (p->error_indicator) {
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     expr_ty _res = NULL;
     int _mark = p->mark;
     { // '**' pattern_capture_target
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> double_star_pattern[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'**' pattern_capture_target"));
@@ -7793,7 +8015,7 @@ double_star_pattern_rule(Parser *p)
             _res = target;
             if (_res == NULL && PyErr_Occurred()) {
                 p->error_indicator = 1;
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             goto done;
@@ -7804,7 +8026,7 @@ double_star_pattern_rule(Parser *p)
     }
     _res = NULL;
   done:
-    D(p->level--);
+    p->level--;
     return _res;
 }
 
@@ -7817,16 +8039,19 @@ double_star_pattern_rule(Parser *p)
 static pattern_ty
 class_pattern_rule(Parser *p)
 {
-    D(p->level++);
+    if (p->level++ == MAXSTACK) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+    }
     if (p->error_indicator) {
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     pattern_ty _res = NULL;
     int _mark = p->mark;
     if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) {
         p->error_indicator = 1;
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     int _start_lineno = p->tokens[_mark]->lineno;
@@ -7835,7 +8060,7 @@ class_pattern_rule(Parser *p)
     UNUSED(_start_col_offset); // Only used by EXTRA macro
     { // name_or_attr '(' ')'
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> class_pattern[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "name_or_attr '(' ')'"));
@@ -7853,7 +8078,7 @@ class_pattern_rule(Parser *p)
             D(fprintf(stderr, "%*c+ class_pattern[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "name_or_attr '(' ')'"));
             Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
             if (_token == NULL) {
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             int _end_lineno = _token->end_lineno;
@@ -7863,7 +8088,7 @@ class_pattern_rule(Parser *p)
             _res = _PyAST_MatchClass ( cls , NULL , NULL , NULL , EXTRA );
             if (_res == NULL && PyErr_Occurred()) {
                 p->error_indicator = 1;
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             goto done;
@@ -7874,7 +8099,7 @@ class_pattern_rule(Parser *p)
     }
     { // name_or_attr '(' positional_patterns ','? ')'
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> class_pattern[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "name_or_attr '(' positional_patterns ','? ')'"));
@@ -7899,7 +8124,7 @@ class_pattern_rule(Parser *p)
             D(fprintf(stderr, "%*c+ class_pattern[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "name_or_attr '(' positional_patterns ','? ')'"));
             Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
             if (_token == NULL) {
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             int _end_lineno = _token->end_lineno;
@@ -7909,7 +8134,7 @@ class_pattern_rule(Parser *p)
             _res = _PyAST_MatchClass ( cls , patterns , NULL , NULL , EXTRA );
             if (_res == NULL && PyErr_Occurred()) {
                 p->error_indicator = 1;
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             goto done;
@@ -7920,7 +8145,7 @@ class_pattern_rule(Parser *p)
     }
     { // name_or_attr '(' keyword_patterns ','? ')'
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> class_pattern[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "name_or_attr '(' keyword_patterns ','? ')'"));
@@ -7945,7 +8170,7 @@ class_pattern_rule(Parser *p)
             D(fprintf(stderr, "%*c+ class_pattern[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "name_or_attr '(' keyword_patterns ','? ')'"));
             Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
             if (_token == NULL) {
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             int _end_lineno = _token->end_lineno;
@@ -7955,7 +8180,7 @@ class_pattern_rule(Parser *p)
             _res = _PyAST_MatchClass ( cls , NULL , CHECK ( asdl_identifier_seq * , _PyPegen_map_names_to_ids ( p , CHECK ( asdl_expr_seq * , _PyPegen_get_pattern_keys ( p , keywords ) ) ) ) , CHECK ( asdl_pattern_seq * , _PyPegen_get_patterns ( p , keywords ) ) , EXTRA );
             if (_res == NULL && PyErr_Occurred()) {
                 p->error_indicator = 1;
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             goto done;
@@ -7966,7 +8191,7 @@ class_pattern_rule(Parser *p)
     }
     { // name_or_attr '(' positional_patterns ',' keyword_patterns ','? ')'
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> class_pattern[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "name_or_attr '(' positional_patterns ',' keyword_patterns ','? ')'"));
@@ -7997,7 +8222,7 @@ class_pattern_rule(Parser *p)
             D(fprintf(stderr, "%*c+ class_pattern[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "name_or_attr '(' positional_patterns ',' keyword_patterns ','? ')'"));
             Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
             if (_token == NULL) {
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             int _end_lineno = _token->end_lineno;
@@ -8007,7 +8232,7 @@ class_pattern_rule(Parser *p)
             _res = _PyAST_MatchClass ( cls , patterns , CHECK ( asdl_identifier_seq * , _PyPegen_map_names_to_ids ( p , CHECK ( asdl_expr_seq * , _PyPegen_get_pattern_keys ( p , keywords ) ) ) ) , CHECK ( asdl_pattern_seq * , _PyPegen_get_patterns ( p , keywords ) ) , EXTRA );
             if (_res == NULL && PyErr_Occurred()) {
                 p->error_indicator = 1;
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             goto done;
@@ -8018,7 +8243,7 @@ class_pattern_rule(Parser *p)
     }
     if (p->call_invalid_rules) { // invalid_class_pattern
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> class_pattern[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "invalid_class_pattern"));
@@ -8037,7 +8262,7 @@ class_pattern_rule(Parser *p)
     }
     _res = NULL;
   done:
-    D(p->level--);
+    p->level--;
     return _res;
 }
 
@@ -8045,16 +8270,19 @@ class_pattern_rule(Parser *p)
 static asdl_pattern_seq*
 positional_patterns_rule(Parser *p)
 {
-    D(p->level++);
+    if (p->level++ == MAXSTACK) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+    }
     if (p->error_indicator) {
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     asdl_pattern_seq* _res = NULL;
     int _mark = p->mark;
     { // ','.pattern+
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> positional_patterns[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "','.pattern+"));
@@ -8067,7 +8295,7 @@ positional_patterns_rule(Parser *p)
             _res = args;
             if (_res == NULL && PyErr_Occurred()) {
                 p->error_indicator = 1;
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             goto done;
@@ -8078,7 +8306,7 @@ positional_patterns_rule(Parser *p)
     }
     _res = NULL;
   done:
-    D(p->level--);
+    p->level--;
     return _res;
 }
 
@@ -8086,16 +8314,19 @@ positional_patterns_rule(Parser *p)
 static asdl_seq*
 keyword_patterns_rule(Parser *p)
 {
-    D(p->level++);
+    if (p->level++ == MAXSTACK) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+    }
     if (p->error_indicator) {
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     asdl_seq* _res = NULL;
     int _mark = p->mark;
     { // ','.keyword_pattern+
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> keyword_patterns[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "','.keyword_pattern+"));
@@ -8114,7 +8345,7 @@ keyword_patterns_rule(Parser *p)
     }
     _res = NULL;
   done:
-    D(p->level--);
+    p->level--;
     return _res;
 }
 
@@ -8122,16 +8353,19 @@ keyword_patterns_rule(Parser *p)
 static KeyPatternPair*
 keyword_pattern_rule(Parser *p)
 {
-    D(p->level++);
+    if (p->level++ == MAXSTACK) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+    }
     if (p->error_indicator) {
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     KeyPatternPair* _res = NULL;
     int _mark = p->mark;
     { // NAME '=' pattern
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> keyword_pattern[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "NAME '=' pattern"));
@@ -8150,7 +8384,7 @@ keyword_pattern_rule(Parser *p)
             _res = _PyPegen_key_pattern_pair ( p , arg , value );
             if (_res == NULL && PyErr_Occurred()) {
                 p->error_indicator = 1;
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             goto done;
@@ -8161,7 +8395,7 @@ keyword_pattern_rule(Parser *p)
     }
     _res = NULL;
   done:
-    D(p->level--);
+    p->level--;
     return _res;
 }
 
@@ -8169,16 +8403,19 @@ keyword_pattern_rule(Parser *p)
 static stmt_ty
 return_stmt_rule(Parser *p)
 {
-    D(p->level++);
+    if (p->level++ == MAXSTACK) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+    }
     if (p->error_indicator) {
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     stmt_ty _res = NULL;
     int _mark = p->mark;
     if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) {
         p->error_indicator = 1;
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     int _start_lineno = p->tokens[_mark]->lineno;
@@ -8187,7 +8424,7 @@ return_stmt_rule(Parser *p)
     UNUSED(_start_col_offset); // Only used by EXTRA macro
     { // 'return' star_expressions?
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> return_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'return' star_expressions?"));
@@ -8202,7 +8439,7 @@ return_stmt_rule(Parser *p)
             D(fprintf(stderr, "%*c+ return_stmt[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'return' star_expressions?"));
             Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
             if (_token == NULL) {
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             int _end_lineno = _token->end_lineno;
@@ -8212,7 +8449,7 @@ return_stmt_rule(Parser *p)
             _res = _PyAST_Return ( a , EXTRA );
             if (_res == NULL && PyErr_Occurred()) {
                 p->error_indicator = 1;
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             goto done;
@@ -8223,7 +8460,7 @@ return_stmt_rule(Parser *p)
     }
     _res = NULL;
   done:
-    D(p->level--);
+    p->level--;
     return _res;
 }
 
@@ -8231,16 +8468,19 @@ return_stmt_rule(Parser *p)
 static stmt_ty
 raise_stmt_rule(Parser *p)
 {
-    D(p->level++);
+    if (p->level++ == MAXSTACK) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+    }
     if (p->error_indicator) {
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     stmt_ty _res = NULL;
     int _mark = p->mark;
     if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) {
         p->error_indicator = 1;
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     int _start_lineno = p->tokens[_mark]->lineno;
@@ -8249,7 +8489,7 @@ raise_stmt_rule(Parser *p)
     UNUSED(_start_col_offset); // Only used by EXTRA macro
     { // 'raise' expression ['from' expression]
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> raise_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'raise' expression ['from' expression]"));
@@ -8267,7 +8507,7 @@ raise_stmt_rule(Parser *p)
             D(fprintf(stderr, "%*c+ raise_stmt[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'raise' expression ['from' expression]"));
             Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
             if (_token == NULL) {
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             int _end_lineno = _token->end_lineno;
@@ -8277,7 +8517,7 @@ raise_stmt_rule(Parser *p)
             _res = _PyAST_Raise ( a , b , EXTRA );
             if (_res == NULL && PyErr_Occurred()) {
                 p->error_indicator = 1;
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             goto done;
@@ -8288,7 +8528,7 @@ raise_stmt_rule(Parser *p)
     }
     { // 'raise'
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> raise_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'raise'"));
@@ -8300,7 +8540,7 @@ raise_stmt_rule(Parser *p)
             D(fprintf(stderr, "%*c+ raise_stmt[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'raise'"));
             Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
             if (_token == NULL) {
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             int _end_lineno = _token->end_lineno;
@@ -8310,7 +8550,7 @@ raise_stmt_rule(Parser *p)
             _res = _PyAST_Raise ( NULL , NULL , EXTRA );
             if (_res == NULL && PyErr_Occurred()) {
                 p->error_indicator = 1;
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             goto done;
@@ -8321,7 +8561,7 @@ raise_stmt_rule(Parser *p)
     }
     _res = NULL;
   done:
-    D(p->level--);
+    p->level--;
     return _res;
 }
 
@@ -8329,16 +8569,19 @@ raise_stmt_rule(Parser *p)
 static stmt_ty
 function_def_rule(Parser *p)
 {
-    D(p->level++);
+    if (p->level++ == MAXSTACK) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+    }
     if (p->error_indicator) {
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     stmt_ty _res = NULL;
     int _mark = p->mark;
     { // decorators function_def_raw
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> function_def[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "decorators function_def_raw"));
@@ -8354,7 +8597,7 @@ function_def_rule(Parser *p)
             _res = _PyPegen_function_def_decorators ( p , d , f );
             if (_res == NULL && PyErr_Occurred()) {
                 p->error_indicator = 1;
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             goto done;
@@ -8365,7 +8608,7 @@ function_def_rule(Parser *p)
     }
     { // function_def_raw
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> function_def[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "function_def_raw"));
@@ -8384,7 +8627,7 @@ function_def_rule(Parser *p)
     }
     _res = NULL;
   done:
-    D(p->level--);
+    p->level--;
     return _res;
 }
 
@@ -8395,16 +8638,19 @@ function_def_rule(Parser *p)
 static stmt_ty
 function_def_raw_rule(Parser *p)
 {
-    D(p->level++);
+    if (p->level++ == MAXSTACK) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+    }
     if (p->error_indicator) {
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     stmt_ty _res = NULL;
     int _mark = p->mark;
     if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) {
         p->error_indicator = 1;
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     int _start_lineno = p->tokens[_mark]->lineno;
@@ -8413,7 +8659,7 @@ function_def_raw_rule(Parser *p)
     UNUSED(_start_col_offset); // Only used by EXTRA macro
     if (p->call_invalid_rules) { // invalid_def_raw
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> function_def_raw[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "invalid_def_raw"));
@@ -8432,7 +8678,7 @@ function_def_raw_rule(Parser *p)
     }
     { // 'def' NAME '(' params? ')' ['->' expression] &&':' func_type_comment? block
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> function_def_raw[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'def' NAME '(' params? ')' ['->' expression] &&':' func_type_comment? block"));
@@ -8468,7 +8714,7 @@ function_def_raw_rule(Parser *p)
             D(fprintf(stderr, "%*c+ function_def_raw[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'def' NAME '(' params? ')' ['->' expression] &&':' func_type_comment? block"));
             Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
             if (_token == NULL) {
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             int _end_lineno = _token->end_lineno;
@@ -8478,7 +8724,7 @@ function_def_raw_rule(Parser *p)
             _res = _PyAST_FunctionDef ( n -> v . Name . id , ( params ) ? params : CHECK ( arguments_ty , _PyPegen_empty_arguments ( p ) ) , b , NULL , a , NEW_TYPE_COMMENT ( p , tc ) , EXTRA );
             if (_res == NULL && PyErr_Occurred()) {
                 p->error_indicator = 1;
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             goto done;
@@ -8489,7 +8735,7 @@ function_def_raw_rule(Parser *p)
     }
     { // ASYNC 'def' NAME '(' params? ')' ['->' expression] &&':' func_type_comment? block
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> function_def_raw[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "ASYNC 'def' NAME '(' params? ')' ['->' expression] &&':' func_type_comment? block"));
@@ -8528,7 +8774,7 @@ function_def_raw_rule(Parser *p)
             D(fprintf(stderr, "%*c+ function_def_raw[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "ASYNC 'def' NAME '(' params? ')' ['->' expression] &&':' func_type_comment? block"));
             Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
             if (_token == NULL) {
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             int _end_lineno = _token->end_lineno;
@@ -8538,7 +8784,7 @@ function_def_raw_rule(Parser *p)
             _res = CHECK_VERSION ( stmt_ty , 5 , "Async functions are" , _PyAST_AsyncFunctionDef ( n -> v . Name . id , ( params ) ? params : CHECK ( arguments_ty , _PyPegen_empty_arguments ( p ) ) , b , NULL , a , NEW_TYPE_COMMENT ( p , tc ) , EXTRA ) );
             if (_res == NULL && PyErr_Occurred()) {
                 p->error_indicator = 1;
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             goto done;
@@ -8549,7 +8795,7 @@ function_def_raw_rule(Parser *p)
     }
     _res = NULL;
   done:
-    D(p->level--);
+    p->level--;
     return _res;
 }
 
@@ -8560,16 +8806,19 @@ function_def_raw_rule(Parser *p)
 static Token*
 func_type_comment_rule(Parser *p)
 {
-    D(p->level++);
+    if (p->level++ == MAXSTACK) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+    }
     if (p->error_indicator) {
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     Token* _res = NULL;
     int _mark = p->mark;
     { // NEWLINE TYPE_COMMENT &(NEWLINE INDENT)
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> func_type_comment[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "NEWLINE TYPE_COMMENT &(NEWLINE INDENT)"));
@@ -8587,7 +8836,7 @@ func_type_comment_rule(Parser *p)
             _res = t;
             if (_res == NULL && PyErr_Occurred()) {
                 p->error_indicator = 1;
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             goto done;
@@ -8598,7 +8847,7 @@ func_type_comment_rule(Parser *p)
     }
     if (p->call_invalid_rules) { // invalid_double_type_comments
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> func_type_comment[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "invalid_double_type_comments"));
@@ -8617,7 +8866,7 @@ func_type_comment_rule(Parser *p)
     }
     { // TYPE_COMMENT
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> func_type_comment[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "TYPE_COMMENT"));
@@ -8636,7 +8885,7 @@ func_type_comment_rule(Parser *p)
     }
     _res = NULL;
   done:
-    D(p->level--);
+    p->level--;
     return _res;
 }
 
@@ -8644,16 +8893,19 @@ func_type_comment_rule(Parser *p)
 static arguments_ty
 params_rule(Parser *p)
 {
-    D(p->level++);
+    if (p->level++ == MAXSTACK) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+    }
     if (p->error_indicator) {
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     arguments_ty _res = NULL;
     int _mark = p->mark;
     if (p->call_invalid_rules) { // invalid_parameters
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> params[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "invalid_parameters"));
@@ -8672,7 +8924,7 @@ params_rule(Parser *p)
     }
     { // parameters
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> params[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "parameters"));
@@ -8691,7 +8943,7 @@ params_rule(Parser *p)
     }
     _res = NULL;
   done:
-    D(p->level--);
+    p->level--;
     return _res;
 }
 
@@ -8704,16 +8956,19 @@ params_rule(Parser *p)
 static arguments_ty
 parameters_rule(Parser *p)
 {
-    D(p->level++);
+    if (p->level++ == MAXSTACK) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+    }
     if (p->error_indicator) {
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     arguments_ty _res = NULL;
     int _mark = p->mark;
     { // slash_no_default param_no_default* param_with_default* star_etc?
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> parameters[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "slash_no_default param_no_default* param_with_default* star_etc?"));
@@ -8735,7 +8990,7 @@ parameters_rule(Parser *p)
             _res = _PyPegen_make_arguments ( p , a , NULL , b , c , d );
             if (_res == NULL && PyErr_Occurred()) {
                 p->error_indicator = 1;
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             goto done;
@@ -8746,7 +9001,7 @@ parameters_rule(Parser *p)
     }
     { // slash_with_default param_with_default* star_etc?
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> parameters[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "slash_with_default param_with_default* star_etc?"));
@@ -8765,7 +9020,7 @@ parameters_rule(Parser *p)
             _res = _PyPegen_make_arguments ( p , NULL , a , NULL , b , c );
             if (_res == NULL && PyErr_Occurred()) {
                 p->error_indicator = 1;
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             goto done;
@@ -8776,7 +9031,7 @@ parameters_rule(Parser *p)
     }
     { // param_no_default+ param_with_default* star_etc?
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> parameters[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "param_no_default+ param_with_default* star_etc?"));
@@ -8795,7 +9050,7 @@ parameters_rule(Parser *p)
             _res = _PyPegen_make_arguments ( p , NULL , NULL , a , b , c );
             if (_res == NULL && PyErr_Occurred()) {
                 p->error_indicator = 1;
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             goto done;
@@ -8806,7 +9061,7 @@ parameters_rule(Parser *p)
     }
     { // param_with_default+ star_etc?
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> parameters[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "param_with_default+ star_etc?"));
@@ -8822,7 +9077,7 @@ parameters_rule(Parser *p)
             _res = _PyPegen_make_arguments ( p , NULL , NULL , NULL , a , b );
             if (_res == NULL && PyErr_Occurred()) {
                 p->error_indicator = 1;
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             goto done;
@@ -8833,7 +9088,7 @@ parameters_rule(Parser *p)
     }
     { // star_etc
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> parameters[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "star_etc"));
@@ -8846,7 +9101,7 @@ parameters_rule(Parser *p)
             _res = _PyPegen_make_arguments ( p , NULL , NULL , NULL , NULL , a );
             if (_res == NULL && PyErr_Occurred()) {
                 p->error_indicator = 1;
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             goto done;
@@ -8857,7 +9112,7 @@ parameters_rule(Parser *p)
     }
     _res = NULL;
   done:
-    D(p->level--);
+    p->level--;
     return _res;
 }
 
@@ -8865,16 +9120,19 @@ parameters_rule(Parser *p)
 static asdl_arg_seq*
 slash_no_default_rule(Parser *p)
 {
-    D(p->level++);
-    if (p->error_indicator) {
-        D(p->level--);
-        return NULL;
+    if (p->level++ == MAXSTACK) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+    }
+    if (p->error_indicator) {
+        p->level--;
+        return NULL;
     }
     asdl_arg_seq* _res = NULL;
     int _mark = p->mark;
     { // param_no_default+ '/' ','
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> slash_no_default[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "param_no_default+ '/' ','"));
@@ -8893,7 +9151,7 @@ slash_no_default_rule(Parser *p)
             _res = a;
             if (_res == NULL && PyErr_Occurred()) {
                 p->error_indicator = 1;
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             goto done;
@@ -8904,7 +9162,7 @@ slash_no_default_rule(Parser *p)
     }
     { // param_no_default+ '/' &')'
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> slash_no_default[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "param_no_default+ '/' &')'"));
@@ -8922,7 +9180,7 @@ slash_no_default_rule(Parser *p)
             _res = a;
             if (_res == NULL && PyErr_Occurred()) {
                 p->error_indicator = 1;
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             goto done;
@@ -8933,7 +9191,7 @@ slash_no_default_rule(Parser *p)
     }
     _res = NULL;
   done:
-    D(p->level--);
+    p->level--;
     return _res;
 }
 
@@ -8943,16 +9201,19 @@ slash_no_default_rule(Parser *p)
 static SlashWithDefault*
 slash_with_default_rule(Parser *p)
 {
-    D(p->level++);
+    if (p->level++ == MAXSTACK) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+    }
     if (p->error_indicator) {
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     SlashWithDefault* _res = NULL;
     int _mark = p->mark;
     { // param_no_default* param_with_default+ '/' ','
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> slash_with_default[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "param_no_default* param_with_default+ '/' ','"));
@@ -8974,7 +9235,7 @@ slash_with_default_rule(Parser *p)
             _res = _PyPegen_slash_with_default ( p , ( asdl_arg_seq * ) a , b );
             if (_res == NULL && PyErr_Occurred()) {
                 p->error_indicator = 1;
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             goto done;
@@ -8985,7 +9246,7 @@ slash_with_default_rule(Parser *p)
     }
     { // param_no_default* param_with_default+ '/' &')'
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> slash_with_default[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "param_no_default* param_with_default+ '/' &')'"));
@@ -9006,7 +9267,7 @@ slash_with_default_rule(Parser *p)
             _res = _PyPegen_slash_with_default ( p , ( asdl_arg_seq * ) a , b );
             if (_res == NULL && PyErr_Occurred()) {
                 p->error_indicator = 1;
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             goto done;
@@ -9017,7 +9278,7 @@ slash_with_default_rule(Parser *p)
     }
     _res = NULL;
   done:
-    D(p->level--);
+    p->level--;
     return _res;
 }
 
@@ -9029,16 +9290,19 @@ slash_with_default_rule(Parser *p)
 static StarEtc*
 star_etc_rule(Parser *p)
 {
-    D(p->level++);
+    if (p->level++ == MAXSTACK) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+    }
     if (p->error_indicator) {
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     StarEtc* _res = NULL;
     int _mark = p->mark;
     { // '*' param_no_default param_maybe_default* kwds?
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> star_etc[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'*' param_no_default param_maybe_default* kwds?"));
@@ -9060,7 +9324,7 @@ star_etc_rule(Parser *p)
             _res = _PyPegen_star_etc ( p , a , b , c );
             if (_res == NULL && PyErr_Occurred()) {
                 p->error_indicator = 1;
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             goto done;
@@ -9071,7 +9335,7 @@ star_etc_rule(Parser *p)
     }
     { // '*' ',' param_maybe_default+ kwds?
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> star_etc[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'*' ',' param_maybe_default+ kwds?"));
@@ -9093,7 +9357,7 @@ star_etc_rule(Parser *p)
             _res = _PyPegen_star_etc ( p , NULL , b , c );
             if (_res == NULL && PyErr_Occurred()) {
                 p->error_indicator = 1;
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             goto done;
@@ -9104,7 +9368,7 @@ star_etc_rule(Parser *p)
     }
     { // kwds
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> star_etc[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "kwds"));
@@ -9117,7 +9381,7 @@ star_etc_rule(Parser *p)
             _res = _PyPegen_star_etc ( p , NULL , NULL , a );
             if (_res == NULL && PyErr_Occurred()) {
                 p->error_indicator = 1;
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             goto done;
@@ -9128,7 +9392,7 @@ star_etc_rule(Parser *p)
     }
     if (p->call_invalid_rules) { // invalid_star_etc
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> star_etc[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "invalid_star_etc"));
@@ -9147,7 +9411,7 @@ star_etc_rule(Parser *p)
     }
     _res = NULL;
   done:
-    D(p->level--);
+    p->level--;
     return _res;
 }
 
@@ -9155,16 +9419,19 @@ star_etc_rule(Parser *p)
 static arg_ty
 kwds_rule(Parser *p)
 {
-    D(p->level++);
+    if (p->level++ == MAXSTACK) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+    }
     if (p->error_indicator) {
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     arg_ty _res = NULL;
     int _mark = p->mark;
     { // '**' param_no_default
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> kwds[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'**' param_no_default"));
@@ -9180,7 +9447,7 @@ kwds_rule(Parser *p)
             _res = a;
             if (_res == NULL && PyErr_Occurred()) {
                 p->error_indicator = 1;
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             goto done;
@@ -9191,7 +9458,7 @@ kwds_rule(Parser *p)
     }
     _res = NULL;
   done:
-    D(p->level--);
+    p->level--;
     return _res;
 }
 
@@ -9199,16 +9466,19 @@ kwds_rule(Parser *p)
 static arg_ty
 param_no_default_rule(Parser *p)
 {
-    D(p->level++);
+    if (p->level++ == MAXSTACK) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+    }
     if (p->error_indicator) {
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     arg_ty _res = NULL;
     int _mark = p->mark;
     { // param ',' TYPE_COMMENT?
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> param_no_default[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "param ',' TYPE_COMMENT?"));
@@ -9227,7 +9497,7 @@ param_no_default_rule(Parser *p)
             _res = _PyPegen_add_type_comment_to_arg ( p , a , tc );
             if (_res == NULL && PyErr_Occurred()) {
                 p->error_indicator = 1;
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             goto done;
@@ -9238,7 +9508,7 @@ param_no_default_rule(Parser *p)
     }
     { // param TYPE_COMMENT? &')'
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> param_no_default[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "param TYPE_COMMENT? &')'"));
@@ -9256,7 +9526,7 @@ param_no_default_rule(Parser *p)
             _res = _PyPegen_add_type_comment_to_arg ( p , a , tc );
             if (_res == NULL && PyErr_Occurred()) {
                 p->error_indicator = 1;
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             goto done;
@@ -9267,7 +9537,7 @@ param_no_default_rule(Parser *p)
     }
     _res = NULL;
   done:
-    D(p->level--);
+    p->level--;
     return _res;
 }
 
@@ -9275,16 +9545,19 @@ param_no_default_rule(Parser *p)
 static NameDefaultPair*
 param_with_default_rule(Parser *p)
 {
-    D(p->level++);
+    if (p->level++ == MAXSTACK) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+    }
     if (p->error_indicator) {
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     NameDefaultPair* _res = NULL;
     int _mark = p->mark;
     { // param default ',' TYPE_COMMENT?
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> param_with_default[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "param default ',' TYPE_COMMENT?"));
@@ -9306,7 +9579,7 @@ param_with_default_rule(Parser *p)
             _res = _PyPegen_name_default_pair ( p , a , c , tc );
             if (_res == NULL && PyErr_Occurred()) {
                 p->error_indicator = 1;
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             goto done;
@@ -9317,7 +9590,7 @@ param_with_default_rule(Parser *p)
     }
     { // param default TYPE_COMMENT? &')'
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> param_with_default[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "param default TYPE_COMMENT? &')'"));
@@ -9338,7 +9611,7 @@ param_with_default_rule(Parser *p)
             _res = _PyPegen_name_default_pair ( p , a , c , tc );
             if (_res == NULL && PyErr_Occurred()) {
                 p->error_indicator = 1;
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             goto done;
@@ -9349,7 +9622,7 @@ param_with_default_rule(Parser *p)
     }
     _res = NULL;
   done:
-    D(p->level--);
+    p->level--;
     return _res;
 }
 
@@ -9359,16 +9632,19 @@ param_with_default_rule(Parser *p)
 static NameDefaultPair*
 param_maybe_default_rule(Parser *p)
 {
-    D(p->level++);
+    if (p->level++ == MAXSTACK) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+    }
     if (p->error_indicator) {
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     NameDefaultPair* _res = NULL;
     int _mark = p->mark;
     { // param default? ',' TYPE_COMMENT?
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> param_maybe_default[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "param default? ',' TYPE_COMMENT?"));
@@ -9390,7 +9666,7 @@ param_maybe_default_rule(Parser *p)
             _res = _PyPegen_name_default_pair ( p , a , c , tc );
             if (_res == NULL && PyErr_Occurred()) {
                 p->error_indicator = 1;
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             goto done;
@@ -9401,7 +9677,7 @@ param_maybe_default_rule(Parser *p)
     }
     { // param default? TYPE_COMMENT? &')'
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> param_maybe_default[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "param default? TYPE_COMMENT? &')'"));
@@ -9422,7 +9698,7 @@ param_maybe_default_rule(Parser *p)
             _res = _PyPegen_name_default_pair ( p , a , c , tc );
             if (_res == NULL && PyErr_Occurred()) {
                 p->error_indicator = 1;
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             goto done;
@@ -9433,7 +9709,7 @@ param_maybe_default_rule(Parser *p)
     }
     _res = NULL;
   done:
-    D(p->level--);
+    p->level--;
     return _res;
 }
 
@@ -9441,16 +9717,19 @@ param_maybe_default_rule(Parser *p)
 static arg_ty
 param_rule(Parser *p)
 {
-    D(p->level++);
+    if (p->level++ == MAXSTACK) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+    }
     if (p->error_indicator) {
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     arg_ty _res = NULL;
     int _mark = p->mark;
     if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) {
         p->error_indicator = 1;
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     int _start_lineno = p->tokens[_mark]->lineno;
@@ -9459,7 +9738,7 @@ param_rule(Parser *p)
     UNUSED(_start_col_offset); // Only used by EXTRA macro
     { // NAME annotation?
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> param[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "NAME annotation?"));
@@ -9474,7 +9753,7 @@ param_rule(Parser *p)
             D(fprintf(stderr, "%*c+ param[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "NAME annotation?"));
             Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
             if (_token == NULL) {
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             int _end_lineno = _token->end_lineno;
@@ -9484,7 +9763,7 @@ param_rule(Parser *p)
             _res = _PyAST_arg ( a -> v . Name . id , b , NULL , EXTRA );
             if (_res == NULL && PyErr_Occurred()) {
                 p->error_indicator = 1;
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             goto done;
@@ -9495,7 +9774,7 @@ param_rule(Parser *p)
     }
     _res = NULL;
   done:
-    D(p->level--);
+    p->level--;
     return _res;
 }
 
@@ -9503,16 +9782,19 @@ param_rule(Parser *p)
 static expr_ty
 annotation_rule(Parser *p)
 {
-    D(p->level++);
+    if (p->level++ == MAXSTACK) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+    }
     if (p->error_indicator) {
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     expr_ty _res = NULL;
     int _mark = p->mark;
     { // ':' expression
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> annotation[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "':' expression"));
@@ -9528,7 +9810,7 @@ annotation_rule(Parser *p)
             _res = a;
             if (_res == NULL && PyErr_Occurred()) {
                 p->error_indicator = 1;
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             goto done;
@@ -9539,7 +9821,7 @@ annotation_rule(Parser *p)
     }
     _res = NULL;
   done:
-    D(p->level--);
+    p->level--;
     return _res;
 }
 
@@ -9547,16 +9829,19 @@ annotation_rule(Parser *p)
 static expr_ty
 default_rule(Parser *p)
 {
-    D(p->level++);
+    if (p->level++ == MAXSTACK) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+    }
     if (p->error_indicator) {
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     expr_ty _res = NULL;
     int _mark = p->mark;
     { // '=' expression
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> default[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'=' expression"));
@@ -9572,7 +9857,7 @@ default_rule(Parser *p)
             _res = a;
             if (_res == NULL && PyErr_Occurred()) {
                 p->error_indicator = 1;
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             goto done;
@@ -9583,7 +9868,7 @@ default_rule(Parser *p)
     }
     _res = NULL;
   done:
-    D(p->level--);
+    p->level--;
     return _res;
 }
 
@@ -9591,16 +9876,19 @@ default_rule(Parser *p)
 static asdl_expr_seq*
 decorators_rule(Parser *p)
 {
-    D(p->level++);
+    if (p->level++ == MAXSTACK) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+    }
     if (p->error_indicator) {
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     asdl_expr_seq* _res = NULL;
     int _mark = p->mark;
     { // (('@' named_expression NEWLINE))+
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> decorators[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "(('@' named_expression NEWLINE))+"));
@@ -9613,7 +9901,7 @@ decorators_rule(Parser *p)
             _res = a;
             if (_res == NULL && PyErr_Occurred()) {
                 p->error_indicator = 1;
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             goto done;
@@ -9624,7 +9912,7 @@ decorators_rule(Parser *p)
     }
     _res = NULL;
   done:
-    D(p->level--);
+    p->level--;
     return _res;
 }
 
@@ -9632,16 +9920,19 @@ decorators_rule(Parser *p)
 static stmt_ty
 class_def_rule(Parser *p)
 {
-    D(p->level++);
+    if (p->level++ == MAXSTACK) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+    }
     if (p->error_indicator) {
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     stmt_ty _res = NULL;
     int _mark = p->mark;
     { // decorators class_def_raw
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> class_def[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "decorators class_def_raw"));
@@ -9657,7 +9948,7 @@ class_def_rule(Parser *p)
             _res = _PyPegen_class_def_decorators ( p , a , b );
             if (_res == NULL && PyErr_Occurred()) {
                 p->error_indicator = 1;
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             goto done;
@@ -9668,7 +9959,7 @@ class_def_rule(Parser *p)
     }
     { // class_def_raw
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> class_def[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "class_def_raw"));
@@ -9687,7 +9978,7 @@ class_def_rule(Parser *p)
     }
     _res = NULL;
   done:
-    D(p->level--);
+    p->level--;
     return _res;
 }
 
@@ -9695,16 +9986,19 @@ class_def_rule(Parser *p)
 static stmt_ty
 class_def_raw_rule(Parser *p)
 {
-    D(p->level++);
+    if (p->level++ == MAXSTACK) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+    }
     if (p->error_indicator) {
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     stmt_ty _res = NULL;
     int _mark = p->mark;
     if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) {
         p->error_indicator = 1;
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     int _start_lineno = p->tokens[_mark]->lineno;
@@ -9713,7 +10007,7 @@ class_def_raw_rule(Parser *p)
     UNUSED(_start_col_offset); // Only used by EXTRA macro
     if (p->call_invalid_rules) { // invalid_class_def_raw
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> class_def_raw[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "invalid_class_def_raw"));
@@ -9732,7 +10026,7 @@ class_def_raw_rule(Parser *p)
     }
     { // 'class' NAME ['(' arguments? ')'] &&':' block
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> class_def_raw[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'class' NAME ['(' arguments? ')'] &&':' block"));
@@ -9756,7 +10050,7 @@ class_def_raw_rule(Parser *p)
             D(fprintf(stderr, "%*c+ class_def_raw[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'class' NAME ['(' arguments? ')'] &&':' block"));
             Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
             if (_token == NULL) {
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             int _end_lineno = _token->end_lineno;
@@ -9766,7 +10060,7 @@ class_def_raw_rule(Parser *p)
             _res = _PyAST_ClassDef ( a -> v . Name . id , ( b ) ? ( ( expr_ty ) b ) -> v . Call . args : NULL , ( b ) ? ( ( expr_ty ) b ) -> v . Call . keywords : NULL , c , NULL , EXTRA );
             if (_res == NULL && PyErr_Occurred()) {
                 p->error_indicator = 1;
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             goto done;
@@ -9777,7 +10071,7 @@ class_def_raw_rule(Parser *p)
     }
     _res = NULL;
   done:
-    D(p->level--);
+    p->level--;
     return _res;
 }
 
@@ -9785,20 +10079,23 @@ class_def_raw_rule(Parser *p)
 static asdl_stmt_seq*
 block_rule(Parser *p)
 {
-    D(p->level++);
+    if (p->level++ == MAXSTACK) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+    }
     if (p->error_indicator) {
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     asdl_stmt_seq* _res = NULL;
     if (_PyPegen_is_memoized(p, block_type, &_res)) {
-        D(p->level--);
+        p->level--;
         return _res;
     }
     int _mark = p->mark;
     { // NEWLINE INDENT statements DEDENT
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> block[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "NEWLINE INDENT statements DEDENT"));
@@ -9820,7 +10117,7 @@ block_rule(Parser *p)
             _res = a;
             if (_res == NULL && PyErr_Occurred()) {
                 p->error_indicator = 1;
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             goto done;
@@ -9831,7 +10128,7 @@ block_rule(Parser *p)
     }
     { // simple_stmts
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> block[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "simple_stmts"));
@@ -9850,7 +10147,7 @@ block_rule(Parser *p)
     }
     if (p->call_invalid_rules) { // invalid_block
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> block[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "invalid_block"));
@@ -9870,7 +10167,7 @@ block_rule(Parser *p)
     _res = NULL;
   done:
     _PyPegen_insert_memo(p, _mark, block_type, _res);
-    D(p->level--);
+    p->level--;
     return _res;
 }
 
@@ -9881,16 +10178,19 @@ block_rule(Parser *p)
 static expr_ty
 star_expressions_rule(Parser *p)
 {
-    D(p->level++);
+    if (p->level++ == MAXSTACK) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+    }
     if (p->error_indicator) {
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     expr_ty _res = NULL;
     int _mark = p->mark;
     if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) {
         p->error_indicator = 1;
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     int _start_lineno = p->tokens[_mark]->lineno;
@@ -9899,7 +10199,7 @@ star_expressions_rule(Parser *p)
     UNUSED(_start_col_offset); // Only used by EXTRA macro
     { // star_expression ((',' star_expression))+ ','?
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> star_expressions[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "star_expression ((',' star_expression))+ ','?"));
@@ -9918,7 +10218,7 @@ star_expressions_rule(Parser *p)
             D(fprintf(stderr, "%*c+ star_expressions[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "star_expression ((',' star_expression))+ ','?"));
             Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
             if (_token == NULL) {
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             int _end_lineno = _token->end_lineno;
@@ -9928,7 +10228,7 @@ star_expressions_rule(Parser *p)
             _res = _PyAST_Tuple ( CHECK ( asdl_expr_seq * , _PyPegen_seq_insert_in_front ( p , a , b ) ) , Load , EXTRA );
             if (_res == NULL && PyErr_Occurred()) {
                 p->error_indicator = 1;
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             goto done;
@@ -9939,7 +10239,7 @@ star_expressions_rule(Parser *p)
     }
     { // star_expression ','
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> star_expressions[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "star_expression ','"));
@@ -9954,7 +10254,7 @@ star_expressions_rule(Parser *p)
             D(fprintf(stderr, "%*c+ star_expressions[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "star_expression ','"));
             Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
             if (_token == NULL) {
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             int _end_lineno = _token->end_lineno;
@@ -9964,7 +10264,7 @@ star_expressions_rule(Parser *p)
             _res = _PyAST_Tuple ( CHECK ( asdl_expr_seq * , _PyPegen_singleton_seq ( p , a ) ) , Load , EXTRA );
             if (_res == NULL && PyErr_Occurred()) {
                 p->error_indicator = 1;
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             goto done;
@@ -9975,7 +10275,7 @@ star_expressions_rule(Parser *p)
     }
     { // star_expression
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> star_expressions[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "star_expression"));
@@ -9994,7 +10294,7 @@ star_expressions_rule(Parser *p)
     }
     _res = NULL;
   done:
-    D(p->level--);
+    p->level--;
     return _res;
 }
 
@@ -10002,20 +10302,23 @@ star_expressions_rule(Parser *p)
 static expr_ty
 star_expression_rule(Parser *p)
 {
-    D(p->level++);
+    if (p->level++ == MAXSTACK) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+    }
     if (p->error_indicator) {
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     expr_ty _res = NULL;
     if (_PyPegen_is_memoized(p, star_expression_type, &_res)) {
-        D(p->level--);
+        p->level--;
         return _res;
     }
     int _mark = p->mark;
     if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) {
         p->error_indicator = 1;
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     int _start_lineno = p->tokens[_mark]->lineno;
@@ -10024,7 +10327,7 @@ star_expression_rule(Parser *p)
     UNUSED(_start_col_offset); // Only used by EXTRA macro
     { // '*' bitwise_or
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> star_expression[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'*' bitwise_or"));
@@ -10039,7 +10342,7 @@ star_expression_rule(Parser *p)
             D(fprintf(stderr, "%*c+ star_expression[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'*' bitwise_or"));
             Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
             if (_token == NULL) {
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             int _end_lineno = _token->end_lineno;
@@ -10049,7 +10352,7 @@ star_expression_rule(Parser *p)
             _res = _PyAST_Starred ( a , Load , EXTRA );
             if (_res == NULL && PyErr_Occurred()) {
                 p->error_indicator = 1;
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             goto done;
@@ -10060,7 +10363,7 @@ star_expression_rule(Parser *p)
     }
     { // expression
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> star_expression[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "expression"));
@@ -10080,7 +10383,7 @@ star_expression_rule(Parser *p)
     _res = NULL;
   done:
     _PyPegen_insert_memo(p, _mark, star_expression_type, _res);
-    D(p->level--);
+    p->level--;
     return _res;
 }
 
@@ -10088,16 +10391,19 @@ star_expression_rule(Parser *p)
 static asdl_expr_seq*
 star_named_expressions_rule(Parser *p)
 {
-    D(p->level++);
+    if (p->level++ == MAXSTACK) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+    }
     if (p->error_indicator) {
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     asdl_expr_seq* _res = NULL;
     int _mark = p->mark;
     { // ','.star_named_expression+ ','?
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> star_named_expressions[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "','.star_named_expression+ ','?"));
@@ -10114,7 +10420,7 @@ star_named_expressions_rule(Parser *p)
             _res = a;
             if (_res == NULL && PyErr_Occurred()) {
                 p->error_indicator = 1;
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             goto done;
@@ -10125,7 +10431,7 @@ star_named_expressions_rule(Parser *p)
     }
     _res = NULL;
   done:
-    D(p->level--);
+    p->level--;
     return _res;
 }
 
@@ -10133,16 +10439,19 @@ star_named_expressions_rule(Parser *p)
 static expr_ty
 star_named_expression_rule(Parser *p)
 {
-    D(p->level++);
+    if (p->level++ == MAXSTACK) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+    }
     if (p->error_indicator) {
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     expr_ty _res = NULL;
     int _mark = p->mark;
     if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) {
         p->error_indicator = 1;
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     int _start_lineno = p->tokens[_mark]->lineno;
@@ -10151,7 +10460,7 @@ star_named_expression_rule(Parser *p)
     UNUSED(_start_col_offset); // Only used by EXTRA macro
     { // '*' bitwise_or
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> star_named_expression[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'*' bitwise_or"));
@@ -10166,7 +10475,7 @@ star_named_expression_rule(Parser *p)
             D(fprintf(stderr, "%*c+ star_named_expression[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'*' bitwise_or"));
             Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
             if (_token == NULL) {
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             int _end_lineno = _token->end_lineno;
@@ -10176,7 +10485,7 @@ star_named_expression_rule(Parser *p)
             _res = _PyAST_Starred ( a , Load , EXTRA );
             if (_res == NULL && PyErr_Occurred()) {
                 p->error_indicator = 1;
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             goto done;
@@ -10187,7 +10496,7 @@ star_named_expression_rule(Parser *p)
     }
     { // named_expression
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> star_named_expression[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "named_expression"));
@@ -10206,7 +10515,7 @@ star_named_expression_rule(Parser *p)
     }
     _res = NULL;
   done:
-    D(p->level--);
+    p->level--;
     return _res;
 }
 
@@ -10214,16 +10523,19 @@ star_named_expression_rule(Parser *p)
 static expr_ty
 assignment_expression_rule(Parser *p)
 {
-    D(p->level++);
+    if (p->level++ == MAXSTACK) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+    }
     if (p->error_indicator) {
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     expr_ty _res = NULL;
     int _mark = p->mark;
     if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) {
         p->error_indicator = 1;
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     int _start_lineno = p->tokens[_mark]->lineno;
@@ -10232,7 +10544,7 @@ assignment_expression_rule(Parser *p)
     UNUSED(_start_col_offset); // Only used by EXTRA macro
     { // NAME ':=' ~ expression
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> assignment_expression[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "NAME ':=' ~ expression"));
@@ -10253,7 +10565,7 @@ assignment_expression_rule(Parser *p)
             D(fprintf(stderr, "%*c+ assignment_expression[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "NAME ':=' ~ expression"));
             Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
             if (_token == NULL) {
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             int _end_lineno = _token->end_lineno;
@@ -10263,7 +10575,7 @@ assignment_expression_rule(Parser *p)
             _res = _PyAST_NamedExpr ( CHECK ( expr_ty , _PyPegen_set_expr_context ( p , a , Store ) ) , b , EXTRA );
             if (_res == NULL && PyErr_Occurred()) {
                 p->error_indicator = 1;
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             goto done;
@@ -10272,13 +10584,13 @@ assignment_expression_rule(Parser *p)
         D(fprintf(stderr, "%*c%s assignment_expression[%d-%d]: %s failed!\n", p->level, ' ',
                   p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "NAME ':=' ~ expression"));
         if (_cut_var) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
     }
     _res = NULL;
   done:
-    D(p->level--);
+    p->level--;
     return _res;
 }
 
@@ -10286,16 +10598,19 @@ assignment_expression_rule(Parser *p)
 static expr_ty
 named_expression_rule(Parser *p)
 {
-    D(p->level++);
+    if (p->level++ == MAXSTACK) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+    }
     if (p->error_indicator) {
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     expr_ty _res = NULL;
     int _mark = p->mark;
     { // assignment_expression
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> named_expression[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "assignment_expression"));
@@ -10314,7 +10629,7 @@ named_expression_rule(Parser *p)
     }
     if (p->call_invalid_rules) { // invalid_named_expression
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> named_expression[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "invalid_named_expression"));
@@ -10333,7 +10648,7 @@ named_expression_rule(Parser *p)
     }
     { // expression !':='
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> named_expression[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "expression !':='"));
@@ -10354,7 +10669,7 @@ named_expression_rule(Parser *p)
     }
     _res = NULL;
   done:
-    D(p->level--);
+    p->level--;
     return _res;
 }
 
@@ -10362,16 +10677,19 @@ named_expression_rule(Parser *p)
 static expr_ty
 annotated_rhs_rule(Parser *p)
 {
-    D(p->level++);
+    if (p->level++ == MAXSTACK) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+    }
     if (p->error_indicator) {
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     expr_ty _res = NULL;
     int _mark = p->mark;
     { // yield_expr
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> annotated_rhs[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "yield_expr"));
@@ -10390,7 +10708,7 @@ annotated_rhs_rule(Parser *p)
     }
     { // star_expressions
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> annotated_rhs[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "star_expressions"));
@@ -10409,7 +10727,7 @@ annotated_rhs_rule(Parser *p)
     }
     _res = NULL;
   done:
-    D(p->level--);
+    p->level--;
     return _res;
 }
 
@@ -10417,16 +10735,19 @@ annotated_rhs_rule(Parser *p)
 static expr_ty
 expressions_rule(Parser *p)
 {
-    D(p->level++);
+    if (p->level++ == MAXSTACK) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+    }
     if (p->error_indicator) {
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     expr_ty _res = NULL;
     int _mark = p->mark;
     if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) {
         p->error_indicator = 1;
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     int _start_lineno = p->tokens[_mark]->lineno;
@@ -10435,7 +10756,7 @@ expressions_rule(Parser *p)
     UNUSED(_start_col_offset); // Only used by EXTRA macro
     { // expression ((',' expression))+ ','?
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> expressions[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "expression ((',' expression))+ ','?"));
@@ -10454,7 +10775,7 @@ expressions_rule(Parser *p)
             D(fprintf(stderr, "%*c+ expressions[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "expression ((',' expression))+ ','?"));
             Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
             if (_token == NULL) {
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             int _end_lineno = _token->end_lineno;
@@ -10464,7 +10785,7 @@ expressions_rule(Parser *p)
             _res = _PyAST_Tuple ( CHECK ( asdl_expr_seq * , _PyPegen_seq_insert_in_front ( p , a , b ) ) , Load , EXTRA );
             if (_res == NULL && PyErr_Occurred()) {
                 p->error_indicator = 1;
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             goto done;
@@ -10475,7 +10796,7 @@ expressions_rule(Parser *p)
     }
     { // expression ','
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> expressions[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "expression ','"));
@@ -10490,7 +10811,7 @@ expressions_rule(Parser *p)
             D(fprintf(stderr, "%*c+ expressions[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "expression ','"));
             Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
             if (_token == NULL) {
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             int _end_lineno = _token->end_lineno;
@@ -10500,7 +10821,7 @@ expressions_rule(Parser *p)
             _res = _PyAST_Tuple ( CHECK ( asdl_expr_seq * , _PyPegen_singleton_seq ( p , a ) ) , Load , EXTRA );
             if (_res == NULL && PyErr_Occurred()) {
                 p->error_indicator = 1;
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             goto done;
@@ -10511,7 +10832,7 @@ expressions_rule(Parser *p)
     }
     { // expression
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> expressions[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "expression"));
@@ -10530,7 +10851,7 @@ expressions_rule(Parser *p)
     }
     _res = NULL;
   done:
-    D(p->level--);
+    p->level--;
     return _res;
 }
 
@@ -10543,20 +10864,23 @@ expressions_rule(Parser *p)
 static expr_ty
 expression_rule(Parser *p)
 {
-    D(p->level++);
+    if (p->level++ == MAXSTACK) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+    }
     if (p->error_indicator) {
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     expr_ty _res = NULL;
     if (_PyPegen_is_memoized(p, expression_type, &_res)) {
-        D(p->level--);
+        p->level--;
         return _res;
     }
     int _mark = p->mark;
     if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) {
         p->error_indicator = 1;
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     int _start_lineno = p->tokens[_mark]->lineno;
@@ -10565,7 +10889,7 @@ expression_rule(Parser *p)
     UNUSED(_start_col_offset); // Only used by EXTRA macro
     if (p->call_invalid_rules) { // invalid_expression
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> expression[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "invalid_expression"));
@@ -10584,7 +10908,7 @@ expression_rule(Parser *p)
     }
     if (p->call_invalid_rules) { // invalid_legacy_expression
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> expression[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "invalid_legacy_expression"));
@@ -10603,7 +10927,7 @@ expression_rule(Parser *p)
     }
     { // disjunction 'if' disjunction 'else' expression
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> expression[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "disjunction 'if' disjunction 'else' expression"));
@@ -10627,7 +10951,7 @@ expression_rule(Parser *p)
             D(fprintf(stderr, "%*c+ expression[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "disjunction 'if' disjunction 'else' expression"));
             Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
             if (_token == NULL) {
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             int _end_lineno = _token->end_lineno;
@@ -10637,7 +10961,7 @@ expression_rule(Parser *p)
             _res = _PyAST_IfExp ( b , a , c , EXTRA );
             if (_res == NULL && PyErr_Occurred()) {
                 p->error_indicator = 1;
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             goto done;
@@ -10648,7 +10972,7 @@ expression_rule(Parser *p)
     }
     { // disjunction
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> expression[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "disjunction"));
@@ -10667,7 +10991,7 @@ expression_rule(Parser *p)
     }
     { // lambdef
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> expression[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "lambdef"));
@@ -10687,7 +11011,7 @@ expression_rule(Parser *p)
     _res = NULL;
   done:
     _PyPegen_insert_memo(p, _mark, expression_type, _res);
-    D(p->level--);
+    p->level--;
     return _res;
 }
 
@@ -10695,16 +11019,19 @@ expression_rule(Parser *p)
 static expr_ty
 lambdef_rule(Parser *p)
 {
-    D(p->level++);
+    if (p->level++ == MAXSTACK) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+    }
     if (p->error_indicator) {
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     expr_ty _res = NULL;
     int _mark = p->mark;
     if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) {
         p->error_indicator = 1;
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     int _start_lineno = p->tokens[_mark]->lineno;
@@ -10713,7 +11040,7 @@ lambdef_rule(Parser *p)
     UNUSED(_start_col_offset); // Only used by EXTRA macro
     { // 'lambda' lambda_params? ':' expression
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> lambdef[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'lambda' lambda_params? ':' expression"));
@@ -10734,7 +11061,7 @@ lambdef_rule(Parser *p)
             D(fprintf(stderr, "%*c+ lambdef[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'lambda' lambda_params? ':' expression"));
             Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
             if (_token == NULL) {
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             int _end_lineno = _token->end_lineno;
@@ -10744,7 +11071,7 @@ lambdef_rule(Parser *p)
             _res = _PyAST_Lambda ( ( a ) ? a : CHECK ( arguments_ty , _PyPegen_empty_arguments ( p ) ) , b , EXTRA );
             if (_res == NULL && PyErr_Occurred()) {
                 p->error_indicator = 1;
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             goto done;
@@ -10755,7 +11082,7 @@ lambdef_rule(Parser *p)
     }
     _res = NULL;
   done:
-    D(p->level--);
+    p->level--;
     return _res;
 }
 
@@ -10763,16 +11090,19 @@ lambdef_rule(Parser *p)
 static arguments_ty
 lambda_params_rule(Parser *p)
 {
-    D(p->level++);
+    if (p->level++ == MAXSTACK) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+    }
     if (p->error_indicator) {
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     arguments_ty _res = NULL;
     int _mark = p->mark;
     if (p->call_invalid_rules) { // invalid_lambda_parameters
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> lambda_params[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "invalid_lambda_parameters"));
@@ -10791,7 +11121,7 @@ lambda_params_rule(Parser *p)
     }
     { // lambda_parameters
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> lambda_params[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "lambda_parameters"));
@@ -10810,7 +11140,7 @@ lambda_params_rule(Parser *p)
     }
     _res = NULL;
   done:
-    D(p->level--);
+    p->level--;
     return _res;
 }
 
@@ -10823,16 +11153,19 @@ lambda_params_rule(Parser *p)
 static arguments_ty
 lambda_parameters_rule(Parser *p)
 {
-    D(p->level++);
+    if (p->level++ == MAXSTACK) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+    }
     if (p->error_indicator) {
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     arguments_ty _res = NULL;
     int _mark = p->mark;
     { // lambda_slash_no_default lambda_param_no_default* lambda_param_with_default* lambda_star_etc?
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> lambda_parameters[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "lambda_slash_no_default lambda_param_no_default* lambda_param_with_default* lambda_star_etc?"));
@@ -10854,7 +11187,7 @@ lambda_parameters_rule(Parser *p)
             _res = _PyPegen_make_arguments ( p , a , NULL , b , c , d );
             if (_res == NULL && PyErr_Occurred()) {
                 p->error_indicator = 1;
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             goto done;
@@ -10865,7 +11198,7 @@ lambda_parameters_rule(Parser *p)
     }
     { // lambda_slash_with_default lambda_param_with_default* lambda_star_etc?
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> lambda_parameters[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "lambda_slash_with_default lambda_param_with_default* lambda_star_etc?"));
@@ -10884,7 +11217,7 @@ lambda_parameters_rule(Parser *p)
             _res = _PyPegen_make_arguments ( p , NULL , a , NULL , b , c );
             if (_res == NULL && PyErr_Occurred()) {
                 p->error_indicator = 1;
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             goto done;
@@ -10895,7 +11228,7 @@ lambda_parameters_rule(Parser *p)
     }
     { // lambda_param_no_default+ lambda_param_with_default* lambda_star_etc?
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> lambda_parameters[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "lambda_param_no_default+ lambda_param_with_default* lambda_star_etc?"));
@@ -10914,7 +11247,7 @@ lambda_parameters_rule(Parser *p)
             _res = _PyPegen_make_arguments ( p , NULL , NULL , a , b , c );
             if (_res == NULL && PyErr_Occurred()) {
                 p->error_indicator = 1;
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             goto done;
@@ -10925,7 +11258,7 @@ lambda_parameters_rule(Parser *p)
     }
     { // lambda_param_with_default+ lambda_star_etc?
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> lambda_parameters[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "lambda_param_with_default+ lambda_star_etc?"));
@@ -10941,7 +11274,7 @@ lambda_parameters_rule(Parser *p)
             _res = _PyPegen_make_arguments ( p , NULL , NULL , NULL , a , b );
             if (_res == NULL && PyErr_Occurred()) {
                 p->error_indicator = 1;
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             goto done;
@@ -10952,7 +11285,7 @@ lambda_parameters_rule(Parser *p)
     }
     { // lambda_star_etc
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> lambda_parameters[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "lambda_star_etc"));
@@ -10965,7 +11298,7 @@ lambda_parameters_rule(Parser *p)
             _res = _PyPegen_make_arguments ( p , NULL , NULL , NULL , NULL , a );
             if (_res == NULL && PyErr_Occurred()) {
                 p->error_indicator = 1;
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             goto done;
@@ -10976,7 +11309,7 @@ lambda_parameters_rule(Parser *p)
     }
     _res = NULL;
   done:
-    D(p->level--);
+    p->level--;
     return _res;
 }
 
@@ -10986,16 +11319,19 @@ lambda_parameters_rule(Parser *p)
 static asdl_arg_seq*
 lambda_slash_no_default_rule(Parser *p)
 {
-    D(p->level++);
+    if (p->level++ == MAXSTACK) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+    }
     if (p->error_indicator) {
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     asdl_arg_seq* _res = NULL;
     int _mark = p->mark;
     { // lambda_param_no_default+ '/' ','
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> lambda_slash_no_default[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "lambda_param_no_default+ '/' ','"));
@@ -11014,7 +11350,7 @@ lambda_slash_no_default_rule(Parser *p)
             _res = a;
             if (_res == NULL && PyErr_Occurred()) {
                 p->error_indicator = 1;
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             goto done;
@@ -11025,7 +11361,7 @@ lambda_slash_no_default_rule(Parser *p)
     }
     { // lambda_param_no_default+ '/' &':'
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> lambda_slash_no_default[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "lambda_param_no_default+ '/' &':'"));
@@ -11043,7 +11379,7 @@ lambda_slash_no_default_rule(Parser *p)
             _res = a;
             if (_res == NULL && PyErr_Occurred()) {
                 p->error_indicator = 1;
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             goto done;
@@ -11054,7 +11390,7 @@ lambda_slash_no_default_rule(Parser *p)
     }
     _res = NULL;
   done:
-    D(p->level--);
+    p->level--;
     return _res;
 }
 
@@ -11064,16 +11400,19 @@ lambda_slash_no_default_rule(Parser *p)
 static SlashWithDefault*
 lambda_slash_with_default_rule(Parser *p)
 {
-    D(p->level++);
+    if (p->level++ == MAXSTACK) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+    }
     if (p->error_indicator) {
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     SlashWithDefault* _res = NULL;
     int _mark = p->mark;
     { // lambda_param_no_default* lambda_param_with_default+ '/' ','
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> lambda_slash_with_default[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "lambda_param_no_default* lambda_param_with_default+ '/' ','"));
@@ -11095,7 +11434,7 @@ lambda_slash_with_default_rule(Parser *p)
             _res = _PyPegen_slash_with_default ( p , ( asdl_arg_seq * ) a , b );
             if (_res == NULL && PyErr_Occurred()) {
                 p->error_indicator = 1;
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             goto done;
@@ -11106,7 +11445,7 @@ lambda_slash_with_default_rule(Parser *p)
     }
     { // lambda_param_no_default* lambda_param_with_default+ '/' &':'
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> lambda_slash_with_default[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "lambda_param_no_default* lambda_param_with_default+ '/' &':'"));
@@ -11127,7 +11466,7 @@ lambda_slash_with_default_rule(Parser *p)
             _res = _PyPegen_slash_with_default ( p , ( asdl_arg_seq * ) a , b );
             if (_res == NULL && PyErr_Occurred()) {
                 p->error_indicator = 1;
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             goto done;
@@ -11138,7 +11477,7 @@ lambda_slash_with_default_rule(Parser *p)
     }
     _res = NULL;
   done:
-    D(p->level--);
+    p->level--;
     return _res;
 }
 
@@ -11150,16 +11489,19 @@ lambda_slash_with_default_rule(Parser *p)
 static StarEtc*
 lambda_star_etc_rule(Parser *p)
 {
-    D(p->level++);
+    if (p->level++ == MAXSTACK) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+    }
     if (p->error_indicator) {
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     StarEtc* _res = NULL;
     int _mark = p->mark;
     { // '*' lambda_param_no_default lambda_param_maybe_default* lambda_kwds?
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> lambda_star_etc[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'*' lambda_param_no_default lambda_param_maybe_default* lambda_kwds?"));
@@ -11181,7 +11523,7 @@ lambda_star_etc_rule(Parser *p)
             _res = _PyPegen_star_etc ( p , a , b , c );
             if (_res == NULL && PyErr_Occurred()) {
                 p->error_indicator = 1;
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             goto done;
@@ -11192,7 +11534,7 @@ lambda_star_etc_rule(Parser *p)
     }
     { // '*' ',' lambda_param_maybe_default+ lambda_kwds?
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> lambda_star_etc[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'*' ',' lambda_param_maybe_default+ lambda_kwds?"));
@@ -11214,7 +11556,7 @@ lambda_star_etc_rule(Parser *p)
             _res = _PyPegen_star_etc ( p , NULL , b , c );
             if (_res == NULL && PyErr_Occurred()) {
                 p->error_indicator = 1;
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             goto done;
@@ -11225,7 +11567,7 @@ lambda_star_etc_rule(Parser *p)
     }
     { // lambda_kwds
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> lambda_star_etc[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "lambda_kwds"));
@@ -11238,7 +11580,7 @@ lambda_star_etc_rule(Parser *p)
             _res = _PyPegen_star_etc ( p , NULL , NULL , a );
             if (_res == NULL && PyErr_Occurred()) {
                 p->error_indicator = 1;
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             goto done;
@@ -11249,7 +11591,7 @@ lambda_star_etc_rule(Parser *p)
     }
     if (p->call_invalid_rules) { // invalid_lambda_star_etc
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> lambda_star_etc[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "invalid_lambda_star_etc"));
@@ -11268,7 +11610,7 @@ lambda_star_etc_rule(Parser *p)
     }
     _res = NULL;
   done:
-    D(p->level--);
+    p->level--;
     return _res;
 }
 
@@ -11276,16 +11618,19 @@ lambda_star_etc_rule(Parser *p)
 static arg_ty
 lambda_kwds_rule(Parser *p)
 {
-    D(p->level++);
+    if (p->level++ == MAXSTACK) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+    }
     if (p->error_indicator) {
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     arg_ty _res = NULL;
     int _mark = p->mark;
     { // '**' lambda_param_no_default
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> lambda_kwds[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'**' lambda_param_no_default"));
@@ -11301,7 +11646,7 @@ lambda_kwds_rule(Parser *p)
             _res = a;
             if (_res == NULL && PyErr_Occurred()) {
                 p->error_indicator = 1;
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             goto done;
@@ -11312,7 +11657,7 @@ lambda_kwds_rule(Parser *p)
     }
     _res = NULL;
   done:
-    D(p->level--);
+    p->level--;
     return _res;
 }
 
@@ -11320,16 +11665,19 @@ lambda_kwds_rule(Parser *p)
 static arg_ty
 lambda_param_no_default_rule(Parser *p)
 {
-    D(p->level++);
+    if (p->level++ == MAXSTACK) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+    }
     if (p->error_indicator) {
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     arg_ty _res = NULL;
     int _mark = p->mark;
     { // lambda_param ','
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> lambda_param_no_default[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "lambda_param ','"));
@@ -11345,7 +11693,7 @@ lambda_param_no_default_rule(Parser *p)
             _res = a;
             if (_res == NULL && PyErr_Occurred()) {
                 p->error_indicator = 1;
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             goto done;
@@ -11356,7 +11704,7 @@ lambda_param_no_default_rule(Parser *p)
     }
     { // lambda_param &':'
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> lambda_param_no_default[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "lambda_param &':'"));
@@ -11371,7 +11719,7 @@ lambda_param_no_default_rule(Parser *p)
             _res = a;
             if (_res == NULL && PyErr_Occurred()) {
                 p->error_indicator = 1;
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             goto done;
@@ -11382,7 +11730,7 @@ lambda_param_no_default_rule(Parser *p)
     }
     _res = NULL;
   done:
-    D(p->level--);
+    p->level--;
     return _res;
 }
 
@@ -11390,16 +11738,19 @@ lambda_param_no_default_rule(Parser *p)
 static NameDefaultPair*
 lambda_param_with_default_rule(Parser *p)
 {
-    D(p->level++);
+    if (p->level++ == MAXSTACK) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+    }
     if (p->error_indicator) {
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     NameDefaultPair* _res = NULL;
     int _mark = p->mark;
     { // lambda_param default ','
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> lambda_param_with_default[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "lambda_param default ','"));
@@ -11418,7 +11769,7 @@ lambda_param_with_default_rule(Parser *p)
             _res = _PyPegen_name_default_pair ( p , a , c , NULL );
             if (_res == NULL && PyErr_Occurred()) {
                 p->error_indicator = 1;
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             goto done;
@@ -11429,7 +11780,7 @@ lambda_param_with_default_rule(Parser *p)
     }
     { // lambda_param default &':'
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> lambda_param_with_default[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "lambda_param default &':'"));
@@ -11447,7 +11798,7 @@ lambda_param_with_default_rule(Parser *p)
             _res = _PyPegen_name_default_pair ( p , a , c , NULL );
             if (_res == NULL && PyErr_Occurred()) {
                 p->error_indicator = 1;
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             goto done;
@@ -11458,7 +11809,7 @@ lambda_param_with_default_rule(Parser *p)
     }
     _res = NULL;
   done:
-    D(p->level--);
+    p->level--;
     return _res;
 }
 
@@ -11466,16 +11817,19 @@ lambda_param_with_default_rule(Parser *p)
 static NameDefaultPair*
 lambda_param_maybe_default_rule(Parser *p)
 {
-    D(p->level++);
+    if (p->level++ == MAXSTACK) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+    }
     if (p->error_indicator) {
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     NameDefaultPair* _res = NULL;
     int _mark = p->mark;
     { // lambda_param default? ','
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> lambda_param_maybe_default[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "lambda_param default? ','"));
@@ -11494,7 +11848,7 @@ lambda_param_maybe_default_rule(Parser *p)
             _res = _PyPegen_name_default_pair ( p , a , c , NULL );
             if (_res == NULL && PyErr_Occurred()) {
                 p->error_indicator = 1;
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             goto done;
@@ -11505,7 +11859,7 @@ lambda_param_maybe_default_rule(Parser *p)
     }
     { // lambda_param default? &':'
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> lambda_param_maybe_default[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "lambda_param default? &':'"));
@@ -11523,7 +11877,7 @@ lambda_param_maybe_default_rule(Parser *p)
             _res = _PyPegen_name_default_pair ( p , a , c , NULL );
             if (_res == NULL && PyErr_Occurred()) {
                 p->error_indicator = 1;
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             goto done;
@@ -11534,7 +11888,7 @@ lambda_param_maybe_default_rule(Parser *p)
     }
     _res = NULL;
   done:
-    D(p->level--);
+    p->level--;
     return _res;
 }
 
@@ -11542,16 +11896,19 @@ lambda_param_maybe_default_rule(Parser *p)
 static arg_ty
 lambda_param_rule(Parser *p)
 {
-    D(p->level++);
+    if (p->level++ == MAXSTACK) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+    }
     if (p->error_indicator) {
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     arg_ty _res = NULL;
     int _mark = p->mark;
     if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) {
         p->error_indicator = 1;
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     int _start_lineno = p->tokens[_mark]->lineno;
@@ -11560,7 +11917,7 @@ lambda_param_rule(Parser *p)
     UNUSED(_start_col_offset); // Only used by EXTRA macro
     { // NAME
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> lambda_param[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "NAME"));
@@ -11572,7 +11929,7 @@ lambda_param_rule(Parser *p)
             D(fprintf(stderr, "%*c+ lambda_param[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "NAME"));
             Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
             if (_token == NULL) {
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             int _end_lineno = _token->end_lineno;
@@ -11582,7 +11939,7 @@ lambda_param_rule(Parser *p)
             _res = _PyAST_arg ( a -> v . Name . id , NULL , NULL , EXTRA );
             if (_res == NULL && PyErr_Occurred()) {
                 p->error_indicator = 1;
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             goto done;
@@ -11593,7 +11950,7 @@ lambda_param_rule(Parser *p)
     }
     _res = NULL;
   done:
-    D(p->level--);
+    p->level--;
     return _res;
 }
 
@@ -11601,20 +11958,23 @@ lambda_param_rule(Parser *p)
 static expr_ty
 disjunction_rule(Parser *p)
 {
-    D(p->level++);
+    if (p->level++ == MAXSTACK) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+    }
     if (p->error_indicator) {
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     expr_ty _res = NULL;
     if (_PyPegen_is_memoized(p, disjunction_type, &_res)) {
-        D(p->level--);
+        p->level--;
         return _res;
     }
     int _mark = p->mark;
     if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) {
         p->error_indicator = 1;
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     int _start_lineno = p->tokens[_mark]->lineno;
@@ -11623,7 +11983,7 @@ disjunction_rule(Parser *p)
     UNUSED(_start_col_offset); // Only used by EXTRA macro
     { // conjunction (('or' conjunction))+
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> disjunction[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "conjunction (('or' conjunction))+"));
@@ -11638,7 +11998,7 @@ disjunction_rule(Parser *p)
             D(fprintf(stderr, "%*c+ disjunction[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "conjunction (('or' conjunction))+"));
             Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
             if (_token == NULL) {
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             int _end_lineno = _token->end_lineno;
@@ -11648,7 +12008,7 @@ disjunction_rule(Parser *p)
             _res = _PyAST_BoolOp ( Or , CHECK ( asdl_expr_seq * , _PyPegen_seq_insert_in_front ( p , a , b ) ) , EXTRA );
             if (_res == NULL && PyErr_Occurred()) {
                 p->error_indicator = 1;
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             goto done;
@@ -11659,7 +12019,7 @@ disjunction_rule(Parser *p)
     }
     { // conjunction
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> disjunction[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "conjunction"));
@@ -11679,7 +12039,7 @@ disjunction_rule(Parser *p)
     _res = NULL;
   done:
     _PyPegen_insert_memo(p, _mark, disjunction_type, _res);
-    D(p->level--);
+    p->level--;
     return _res;
 }
 
@@ -11687,20 +12047,23 @@ disjunction_rule(Parser *p)
 static expr_ty
 conjunction_rule(Parser *p)
 {
-    D(p->level++);
+    if (p->level++ == MAXSTACK) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+    }
     if (p->error_indicator) {
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     expr_ty _res = NULL;
     if (_PyPegen_is_memoized(p, conjunction_type, &_res)) {
-        D(p->level--);
+        p->level--;
         return _res;
     }
     int _mark = p->mark;
     if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) {
         p->error_indicator = 1;
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     int _start_lineno = p->tokens[_mark]->lineno;
@@ -11709,7 +12072,7 @@ conjunction_rule(Parser *p)
     UNUSED(_start_col_offset); // Only used by EXTRA macro
     { // inversion (('and' inversion))+
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> conjunction[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "inversion (('and' inversion))+"));
@@ -11724,7 +12087,7 @@ conjunction_rule(Parser *p)
             D(fprintf(stderr, "%*c+ conjunction[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "inversion (('and' inversion))+"));
             Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
             if (_token == NULL) {
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             int _end_lineno = _token->end_lineno;
@@ -11734,7 +12097,7 @@ conjunction_rule(Parser *p)
             _res = _PyAST_BoolOp ( And , CHECK ( asdl_expr_seq * , _PyPegen_seq_insert_in_front ( p , a , b ) ) , EXTRA );
             if (_res == NULL && PyErr_Occurred()) {
                 p->error_indicator = 1;
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             goto done;
@@ -11745,7 +12108,7 @@ conjunction_rule(Parser *p)
     }
     { // inversion
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> conjunction[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "inversion"));
@@ -11765,7 +12128,7 @@ conjunction_rule(Parser *p)
     _res = NULL;
   done:
     _PyPegen_insert_memo(p, _mark, conjunction_type, _res);
-    D(p->level--);
+    p->level--;
     return _res;
 }
 
@@ -11773,20 +12136,23 @@ conjunction_rule(Parser *p)
 static expr_ty
 inversion_rule(Parser *p)
 {
-    D(p->level++);
+    if (p->level++ == MAXSTACK) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+    }
     if (p->error_indicator) {
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     expr_ty _res = NULL;
     if (_PyPegen_is_memoized(p, inversion_type, &_res)) {
-        D(p->level--);
+        p->level--;
         return _res;
     }
     int _mark = p->mark;
     if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) {
         p->error_indicator = 1;
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     int _start_lineno = p->tokens[_mark]->lineno;
@@ -11795,7 +12161,7 @@ inversion_rule(Parser *p)
     UNUSED(_start_col_offset); // Only used by EXTRA macro
     { // 'not' inversion
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> inversion[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'not' inversion"));
@@ -11810,7 +12176,7 @@ inversion_rule(Parser *p)
             D(fprintf(stderr, "%*c+ inversion[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'not' inversion"));
             Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
             if (_token == NULL) {
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             int _end_lineno = _token->end_lineno;
@@ -11820,7 +12186,7 @@ inversion_rule(Parser *p)
             _res = _PyAST_UnaryOp ( Not , a , EXTRA );
             if (_res == NULL && PyErr_Occurred()) {
                 p->error_indicator = 1;
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             goto done;
@@ -11831,7 +12197,7 @@ inversion_rule(Parser *p)
     }
     { // comparison
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> inversion[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "comparison"));
@@ -11851,7 +12217,7 @@ inversion_rule(Parser *p)
     _res = NULL;
   done:
     _PyPegen_insert_memo(p, _mark, inversion_type, _res);
-    D(p->level--);
+    p->level--;
     return _res;
 }
 
@@ -11859,16 +12225,19 @@ inversion_rule(Parser *p)
 static expr_ty
 comparison_rule(Parser *p)
 {
-    D(p->level++);
+    if (p->level++ == MAXSTACK) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+    }
     if (p->error_indicator) {
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     expr_ty _res = NULL;
     int _mark = p->mark;
     if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) {
         p->error_indicator = 1;
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     int _start_lineno = p->tokens[_mark]->lineno;
@@ -11877,7 +12246,7 @@ comparison_rule(Parser *p)
     UNUSED(_start_col_offset); // Only used by EXTRA macro
     { // bitwise_or compare_op_bitwise_or_pair+
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> comparison[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "bitwise_or compare_op_bitwise_or_pair+"));
@@ -11892,7 +12261,7 @@ comparison_rule(Parser *p)
             D(fprintf(stderr, "%*c+ comparison[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "bitwise_or compare_op_bitwise_or_pair+"));
             Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
             if (_token == NULL) {
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             int _end_lineno = _token->end_lineno;
@@ -11902,7 +12271,7 @@ comparison_rule(Parser *p)
             _res = _PyAST_Compare ( a , CHECK ( asdl_int_seq * , _PyPegen_get_cmpops ( p , b ) ) , CHECK ( asdl_expr_seq * , _PyPegen_get_exprs ( p , b ) ) , EXTRA );
             if (_res == NULL && PyErr_Occurred()) {
                 p->error_indicator = 1;
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             goto done;
@@ -11913,7 +12282,7 @@ comparison_rule(Parser *p)
     }
     { // bitwise_or
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> comparison[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "bitwise_or"));
@@ -11932,7 +12301,7 @@ comparison_rule(Parser *p)
     }
     _res = NULL;
   done:
-    D(p->level--);
+    p->level--;
     return _res;
 }
 
@@ -11950,16 +12319,19 @@ comparison_rule(Parser *p)
 static CmpopExprPair*
 compare_op_bitwise_or_pair_rule(Parser *p)
 {
-    D(p->level++);
+    if (p->level++ == MAXSTACK) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+    }
     if (p->error_indicator) {
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     CmpopExprPair* _res = NULL;
     int _mark = p->mark;
     { // eq_bitwise_or
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> compare_op_bitwise_or_pair[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "eq_bitwise_or"));
@@ -11978,7 +12350,7 @@ compare_op_bitwise_or_pair_rule(Parser *p)
     }
     { // noteq_bitwise_or
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> compare_op_bitwise_or_pair[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "noteq_bitwise_or"));
@@ -11997,7 +12369,7 @@ compare_op_bitwise_or_pair_rule(Parser *p)
     }
     { // lte_bitwise_or
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> compare_op_bitwise_or_pair[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "lte_bitwise_or"));
@@ -12016,7 +12388,7 @@ compare_op_bitwise_or_pair_rule(Parser *p)
     }
     { // lt_bitwise_or
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> compare_op_bitwise_or_pair[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "lt_bitwise_or"));
@@ -12035,7 +12407,7 @@ compare_op_bitwise_or_pair_rule(Parser *p)
     }
     { // gte_bitwise_or
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> compare_op_bitwise_or_pair[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "gte_bitwise_or"));
@@ -12054,7 +12426,7 @@ compare_op_bitwise_or_pair_rule(Parser *p)
     }
     { // gt_bitwise_or
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> compare_op_bitwise_or_pair[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "gt_bitwise_or"));
@@ -12073,7 +12445,7 @@ compare_op_bitwise_or_pair_rule(Parser *p)
     }
     { // notin_bitwise_or
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> compare_op_bitwise_or_pair[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "notin_bitwise_or"));
@@ -12092,7 +12464,7 @@ compare_op_bitwise_or_pair_rule(Parser *p)
     }
     { // in_bitwise_or
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> compare_op_bitwise_or_pair[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "in_bitwise_or"));
@@ -12111,7 +12483,7 @@ compare_op_bitwise_or_pair_rule(Parser *p)
     }
     { // isnot_bitwise_or
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> compare_op_bitwise_or_pair[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "isnot_bitwise_or"));
@@ -12130,7 +12502,7 @@ compare_op_bitwise_or_pair_rule(Parser *p)
     }
     { // is_bitwise_or
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> compare_op_bitwise_or_pair[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "is_bitwise_or"));
@@ -12149,7 +12521,7 @@ compare_op_bitwise_or_pair_rule(Parser *p)
     }
     _res = NULL;
   done:
-    D(p->level--);
+    p->level--;
     return _res;
 }
 
@@ -12157,16 +12529,19 @@ compare_op_bitwise_or_pair_rule(Parser *p)
 static CmpopExprPair*
 eq_bitwise_or_rule(Parser *p)
 {
-    D(p->level++);
+    if (p->level++ == MAXSTACK) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+    }
     if (p->error_indicator) {
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     CmpopExprPair* _res = NULL;
     int _mark = p->mark;
     { // '==' bitwise_or
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> eq_bitwise_or[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'==' bitwise_or"));
@@ -12182,7 +12557,7 @@ eq_bitwise_or_rule(Parser *p)
             _res = _PyPegen_cmpop_expr_pair ( p , Eq , a );
             if (_res == NULL && PyErr_Occurred()) {
                 p->error_indicator = 1;
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             goto done;
@@ -12193,7 +12568,7 @@ eq_bitwise_or_rule(Parser *p)
     }
     _res = NULL;
   done:
-    D(p->level--);
+    p->level--;
     return _res;
 }
 
@@ -12201,16 +12576,19 @@ eq_bitwise_or_rule(Parser *p)
 static CmpopExprPair*
 noteq_bitwise_or_rule(Parser *p)
 {
-    D(p->level++);
+    if (p->level++ == MAXSTACK) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+    }
     if (p->error_indicator) {
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     CmpopExprPair* _res = NULL;
     int _mark = p->mark;
     { // ('!=') bitwise_or
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> noteq_bitwise_or[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "('!=') bitwise_or"));
@@ -12226,7 +12604,7 @@ noteq_bitwise_or_rule(Parser *p)
             _res = _PyPegen_cmpop_expr_pair ( p , NotEq , a );
             if (_res == NULL && PyErr_Occurred()) {
                 p->error_indicator = 1;
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             goto done;
@@ -12237,7 +12615,7 @@ noteq_bitwise_or_rule(Parser *p)
     }
     _res = NULL;
   done:
-    D(p->level--);
+    p->level--;
     return _res;
 }
 
@@ -12245,16 +12623,19 @@ noteq_bitwise_or_rule(Parser *p)
 static CmpopExprPair*
 lte_bitwise_or_rule(Parser *p)
 {
-    D(p->level++);
+    if (p->level++ == MAXSTACK) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+    }
     if (p->error_indicator) {
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     CmpopExprPair* _res = NULL;
     int _mark = p->mark;
     { // '<=' bitwise_or
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> lte_bitwise_or[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'<=' bitwise_or"));
@@ -12270,7 +12651,7 @@ lte_bitwise_or_rule(Parser *p)
             _res = _PyPegen_cmpop_expr_pair ( p , LtE , a );
             if (_res == NULL && PyErr_Occurred()) {
                 p->error_indicator = 1;
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             goto done;
@@ -12281,7 +12662,7 @@ lte_bitwise_or_rule(Parser *p)
     }
     _res = NULL;
   done:
-    D(p->level--);
+    p->level--;
     return _res;
 }
 
@@ -12289,16 +12670,19 @@ lte_bitwise_or_rule(Parser *p)
 static CmpopExprPair*
 lt_bitwise_or_rule(Parser *p)
 {
-    D(p->level++);
+    if (p->level++ == MAXSTACK) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+    }
     if (p->error_indicator) {
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     CmpopExprPair* _res = NULL;
     int _mark = p->mark;
     { // '<' bitwise_or
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> lt_bitwise_or[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'<' bitwise_or"));
@@ -12314,7 +12698,7 @@ lt_bitwise_or_rule(Parser *p)
             _res = _PyPegen_cmpop_expr_pair ( p , Lt , a );
             if (_res == NULL && PyErr_Occurred()) {
                 p->error_indicator = 1;
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             goto done;
@@ -12325,7 +12709,7 @@ lt_bitwise_or_rule(Parser *p)
     }
     _res = NULL;
   done:
-    D(p->level--);
+    p->level--;
     return _res;
 }
 
@@ -12333,16 +12717,19 @@ lt_bitwise_or_rule(Parser *p)
 static CmpopExprPair*
 gte_bitwise_or_rule(Parser *p)
 {
-    D(p->level++);
+    if (p->level++ == MAXSTACK) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+    }
     if (p->error_indicator) {
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     CmpopExprPair* _res = NULL;
     int _mark = p->mark;
     { // '>=' bitwise_or
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> gte_bitwise_or[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'>=' bitwise_or"));
@@ -12358,7 +12745,7 @@ gte_bitwise_or_rule(Parser *p)
             _res = _PyPegen_cmpop_expr_pair ( p , GtE , a );
             if (_res == NULL && PyErr_Occurred()) {
                 p->error_indicator = 1;
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             goto done;
@@ -12369,7 +12756,7 @@ gte_bitwise_or_rule(Parser *p)
     }
     _res = NULL;
   done:
-    D(p->level--);
+    p->level--;
     return _res;
 }
 
@@ -12377,16 +12764,19 @@ gte_bitwise_or_rule(Parser *p)
 static CmpopExprPair*
 gt_bitwise_or_rule(Parser *p)
 {
-    D(p->level++);
+    if (p->level++ == MAXSTACK) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+    }
     if (p->error_indicator) {
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     CmpopExprPair* _res = NULL;
     int _mark = p->mark;
     { // '>' bitwise_or
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> gt_bitwise_or[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'>' bitwise_or"));
@@ -12402,7 +12792,7 @@ gt_bitwise_or_rule(Parser *p)
             _res = _PyPegen_cmpop_expr_pair ( p , Gt , a );
             if (_res == NULL && PyErr_Occurred()) {
                 p->error_indicator = 1;
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             goto done;
@@ -12413,7 +12803,7 @@ gt_bitwise_or_rule(Parser *p)
     }
     _res = NULL;
   done:
-    D(p->level--);
+    p->level--;
     return _res;
 }
 
@@ -12421,16 +12811,19 @@ gt_bitwise_or_rule(Parser *p)
 static CmpopExprPair*
 notin_bitwise_or_rule(Parser *p)
 {
-    D(p->level++);
+    if (p->level++ == MAXSTACK) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+    }
     if (p->error_indicator) {
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     CmpopExprPair* _res = NULL;
     int _mark = p->mark;
     { // 'not' 'in' bitwise_or
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> notin_bitwise_or[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'not' 'in' bitwise_or"));
@@ -12449,7 +12842,7 @@ notin_bitwise_or_rule(Parser *p)
             _res = _PyPegen_cmpop_expr_pair ( p , NotIn , a );
             if (_res == NULL && PyErr_Occurred()) {
                 p->error_indicator = 1;
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             goto done;
@@ -12460,7 +12853,7 @@ notin_bitwise_or_rule(Parser *p)
     }
     _res = NULL;
   done:
-    D(p->level--);
+    p->level--;
     return _res;
 }
 
@@ -12468,16 +12861,19 @@ notin_bitwise_or_rule(Parser *p)
 static CmpopExprPair*
 in_bitwise_or_rule(Parser *p)
 {
-    D(p->level++);
+    if (p->level++ == MAXSTACK) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+    }
     if (p->error_indicator) {
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     CmpopExprPair* _res = NULL;
     int _mark = p->mark;
     { // 'in' bitwise_or
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> in_bitwise_or[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'in' bitwise_or"));
@@ -12493,7 +12889,7 @@ in_bitwise_or_rule(Parser *p)
             _res = _PyPegen_cmpop_expr_pair ( p , In , a );
             if (_res == NULL && PyErr_Occurred()) {
                 p->error_indicator = 1;
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             goto done;
@@ -12504,7 +12900,7 @@ in_bitwise_or_rule(Parser *p)
     }
     _res = NULL;
   done:
-    D(p->level--);
+    p->level--;
     return _res;
 }
 
@@ -12512,16 +12908,19 @@ in_bitwise_or_rule(Parser *p)
 static CmpopExprPair*
 isnot_bitwise_or_rule(Parser *p)
 {
-    D(p->level++);
+    if (p->level++ == MAXSTACK) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+    }
     if (p->error_indicator) {
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     CmpopExprPair* _res = NULL;
     int _mark = p->mark;
     { // 'is' 'not' bitwise_or
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> isnot_bitwise_or[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'is' 'not' bitwise_or"));
@@ -12540,7 +12939,7 @@ isnot_bitwise_or_rule(Parser *p)
             _res = _PyPegen_cmpop_expr_pair ( p , IsNot , a );
             if (_res == NULL && PyErr_Occurred()) {
                 p->error_indicator = 1;
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             goto done;
@@ -12551,7 +12950,7 @@ isnot_bitwise_or_rule(Parser *p)
     }
     _res = NULL;
   done:
-    D(p->level--);
+    p->level--;
     return _res;
 }
 
@@ -12559,16 +12958,19 @@ isnot_bitwise_or_rule(Parser *p)
 static CmpopExprPair*
 is_bitwise_or_rule(Parser *p)
 {
-    D(p->level++);
+    if (p->level++ == MAXSTACK) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+    }
     if (p->error_indicator) {
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     CmpopExprPair* _res = NULL;
     int _mark = p->mark;
     { // 'is' bitwise_or
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> is_bitwise_or[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'is' bitwise_or"));
@@ -12584,7 +12986,7 @@ is_bitwise_or_rule(Parser *p)
             _res = _PyPegen_cmpop_expr_pair ( p , Is , a );
             if (_res == NULL && PyErr_Occurred()) {
                 p->error_indicator = 1;
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             goto done;
@@ -12595,7 +12997,7 @@ is_bitwise_or_rule(Parser *p)
     }
     _res = NULL;
   done:
-    D(p->level--);
+    p->level--;
     return _res;
 }
 
@@ -12605,10 +13007,13 @@ static expr_ty bitwise_or_raw(Parser *);
 static expr_ty
 bitwise_or_rule(Parser *p)
 {
-    D(p->level++);
+    if (p->level++ == MAXSTACK) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+    }
     expr_ty _res = NULL;
     if (_PyPegen_is_memoized(p, bitwise_or_type, &_res)) {
-        D(p->level--);
+        p->level--;
         return _res;
     }
     int _mark = p->mark;
@@ -12616,37 +13021,42 @@ bitwise_or_rule(Parser *p)
     while (1) {
         int tmpvar_2 = _PyPegen_update_memo(p, _mark, bitwise_or_type, _res);
         if (tmpvar_2) {
-            D(p->level--);
+            p->level--;
             return _res;
         }
         p->mark = _mark;
         p->in_raw_rule++;
         void *_raw = bitwise_or_raw(p);
         p->in_raw_rule--;
-        if (p->error_indicator)
+        if (p->error_indicator) {
+            p->level--;
             return NULL;
+        }
         if (_raw == NULL || p->mark <= _resmark)
             break;
         _resmark = p->mark;
         _res = _raw;
     }
     p->mark = _resmark;
-    D(p->level--);
+    p->level--;
     return _res;
 }
 static expr_ty
 bitwise_or_raw(Parser *p)
 {
-    D(p->level++);
+    if (p->level++ == MAXSTACK) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+    }
     if (p->error_indicator) {
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     expr_ty _res = NULL;
     int _mark = p->mark;
     if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) {
         p->error_indicator = 1;
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     int _start_lineno = p->tokens[_mark]->lineno;
@@ -12655,7 +13065,7 @@ bitwise_or_raw(Parser *p)
     UNUSED(_start_col_offset); // Only used by EXTRA macro
     { // bitwise_or '|' bitwise_xor
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> bitwise_or[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "bitwise_or '|' bitwise_xor"));
@@ -12673,7 +13083,7 @@ bitwise_or_raw(Parser *p)
             D(fprintf(stderr, "%*c+ bitwise_or[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "bitwise_or '|' bitwise_xor"));
             Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
             if (_token == NULL) {
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             int _end_lineno = _token->end_lineno;
@@ -12683,7 +13093,7 @@ bitwise_or_raw(Parser *p)
             _res = _PyAST_BinOp ( a , BitOr , b , EXTRA );
             if (_res == NULL && PyErr_Occurred()) {
                 p->error_indicator = 1;
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             goto done;
@@ -12694,7 +13104,7 @@ bitwise_or_raw(Parser *p)
     }
     { // bitwise_xor
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> bitwise_or[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "bitwise_xor"));
@@ -12713,7 +13123,7 @@ bitwise_or_raw(Parser *p)
     }
     _res = NULL;
   done:
-    D(p->level--);
+    p->level--;
     return _res;
 }
 
@@ -12723,10 +13133,13 @@ static expr_ty bitwise_xor_raw(Parser *);
 static expr_ty
 bitwise_xor_rule(Parser *p)
 {
-    D(p->level++);
+    if (p->level++ == MAXSTACK) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+    }
     expr_ty _res = NULL;
     if (_PyPegen_is_memoized(p, bitwise_xor_type, &_res)) {
-        D(p->level--);
+        p->level--;
         return _res;
     }
     int _mark = p->mark;
@@ -12734,37 +13147,42 @@ bitwise_xor_rule(Parser *p)
     while (1) {
         int tmpvar_3 = _PyPegen_update_memo(p, _mark, bitwise_xor_type, _res);
         if (tmpvar_3) {
-            D(p->level--);
+            p->level--;
             return _res;
         }
         p->mark = _mark;
         p->in_raw_rule++;
         void *_raw = bitwise_xor_raw(p);
         p->in_raw_rule--;
-        if (p->error_indicator)
+        if (p->error_indicator) {
+            p->level--;
             return NULL;
+        }
         if (_raw == NULL || p->mark <= _resmark)
             break;
         _resmark = p->mark;
         _res = _raw;
     }
     p->mark = _resmark;
-    D(p->level--);
+    p->level--;
     return _res;
 }
 static expr_ty
 bitwise_xor_raw(Parser *p)
 {
-    D(p->level++);
+    if (p->level++ == MAXSTACK) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+    }
     if (p->error_indicator) {
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     expr_ty _res = NULL;
     int _mark = p->mark;
     if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) {
         p->error_indicator = 1;
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     int _start_lineno = p->tokens[_mark]->lineno;
@@ -12773,7 +13191,7 @@ bitwise_xor_raw(Parser *p)
     UNUSED(_start_col_offset); // Only used by EXTRA macro
     { // bitwise_xor '^' bitwise_and
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> bitwise_xor[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "bitwise_xor '^' bitwise_and"));
@@ -12791,7 +13209,7 @@ bitwise_xor_raw(Parser *p)
             D(fprintf(stderr, "%*c+ bitwise_xor[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "bitwise_xor '^' bitwise_and"));
             Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
             if (_token == NULL) {
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             int _end_lineno = _token->end_lineno;
@@ -12801,7 +13219,7 @@ bitwise_xor_raw(Parser *p)
             _res = _PyAST_BinOp ( a , BitXor , b , EXTRA );
             if (_res == NULL && PyErr_Occurred()) {
                 p->error_indicator = 1;
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             goto done;
@@ -12812,7 +13230,7 @@ bitwise_xor_raw(Parser *p)
     }
     { // bitwise_and
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> bitwise_xor[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "bitwise_and"));
@@ -12831,7 +13249,7 @@ bitwise_xor_raw(Parser *p)
     }
     _res = NULL;
   done:
-    D(p->level--);
+    p->level--;
     return _res;
 }
 
@@ -12841,10 +13259,13 @@ static expr_ty bitwise_and_raw(Parser *);
 static expr_ty
 bitwise_and_rule(Parser *p)
 {
-    D(p->level++);
+    if (p->level++ == MAXSTACK) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+    }
     expr_ty _res = NULL;
     if (_PyPegen_is_memoized(p, bitwise_and_type, &_res)) {
-        D(p->level--);
+        p->level--;
         return _res;
     }
     int _mark = p->mark;
@@ -12852,37 +13273,42 @@ bitwise_and_rule(Parser *p)
     while (1) {
         int tmpvar_4 = _PyPegen_update_memo(p, _mark, bitwise_and_type, _res);
         if (tmpvar_4) {
-            D(p->level--);
+            p->level--;
             return _res;
         }
         p->mark = _mark;
         p->in_raw_rule++;
         void *_raw = bitwise_and_raw(p);
         p->in_raw_rule--;
-        if (p->error_indicator)
+        if (p->error_indicator) {
+            p->level--;
             return NULL;
+        }
         if (_raw == NULL || p->mark <= _resmark)
             break;
         _resmark = p->mark;
         _res = _raw;
     }
     p->mark = _resmark;
-    D(p->level--);
+    p->level--;
     return _res;
 }
 static expr_ty
 bitwise_and_raw(Parser *p)
 {
-    D(p->level++);
+    if (p->level++ == MAXSTACK) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+    }
     if (p->error_indicator) {
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     expr_ty _res = NULL;
     int _mark = p->mark;
     if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) {
         p->error_indicator = 1;
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     int _start_lineno = p->tokens[_mark]->lineno;
@@ -12891,7 +13317,7 @@ bitwise_and_raw(Parser *p)
     UNUSED(_start_col_offset); // Only used by EXTRA macro
     { // bitwise_and '&' shift_expr
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> bitwise_and[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "bitwise_and '&' shift_expr"));
@@ -12909,7 +13335,7 @@ bitwise_and_raw(Parser *p)
             D(fprintf(stderr, "%*c+ bitwise_and[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "bitwise_and '&' shift_expr"));
             Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
             if (_token == NULL) {
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             int _end_lineno = _token->end_lineno;
@@ -12919,7 +13345,7 @@ bitwise_and_raw(Parser *p)
             _res = _PyAST_BinOp ( a , BitAnd , b , EXTRA );
             if (_res == NULL && PyErr_Occurred()) {
                 p->error_indicator = 1;
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             goto done;
@@ -12930,7 +13356,7 @@ bitwise_and_raw(Parser *p)
     }
     { // shift_expr
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> bitwise_and[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "shift_expr"));
@@ -12949,7 +13375,7 @@ bitwise_and_raw(Parser *p)
     }
     _res = NULL;
   done:
-    D(p->level--);
+    p->level--;
     return _res;
 }
 
@@ -12959,10 +13385,13 @@ static expr_ty shift_expr_raw(Parser *);
 static expr_ty
 shift_expr_rule(Parser *p)
 {
-    D(p->level++);
+    if (p->level++ == MAXSTACK) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+    }
     expr_ty _res = NULL;
     if (_PyPegen_is_memoized(p, shift_expr_type, &_res)) {
-        D(p->level--);
+        p->level--;
         return _res;
     }
     int _mark = p->mark;
@@ -12970,37 +13399,42 @@ shift_expr_rule(Parser *p)
     while (1) {
         int tmpvar_5 = _PyPegen_update_memo(p, _mark, shift_expr_type, _res);
         if (tmpvar_5) {
-            D(p->level--);
+            p->level--;
             return _res;
         }
         p->mark = _mark;
         p->in_raw_rule++;
         void *_raw = shift_expr_raw(p);
         p->in_raw_rule--;
-        if (p->error_indicator)
+        if (p->error_indicator) {
+            p->level--;
             return NULL;
+        }
         if (_raw == NULL || p->mark <= _resmark)
             break;
         _resmark = p->mark;
         _res = _raw;
     }
     p->mark = _resmark;
-    D(p->level--);
+    p->level--;
     return _res;
 }
 static expr_ty
 shift_expr_raw(Parser *p)
 {
-    D(p->level++);
+    if (p->level++ == MAXSTACK) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+    }
     if (p->error_indicator) {
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     expr_ty _res = NULL;
     int _mark = p->mark;
     if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) {
         p->error_indicator = 1;
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     int _start_lineno = p->tokens[_mark]->lineno;
@@ -13009,7 +13443,7 @@ shift_expr_raw(Parser *p)
     UNUSED(_start_col_offset); // Only used by EXTRA macro
     { // shift_expr '<<' sum
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> shift_expr[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "shift_expr '<<' sum"));
@@ -13027,7 +13461,7 @@ shift_expr_raw(Parser *p)
             D(fprintf(stderr, "%*c+ shift_expr[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "shift_expr '<<' sum"));
             Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
             if (_token == NULL) {
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             int _end_lineno = _token->end_lineno;
@@ -13037,7 +13471,7 @@ shift_expr_raw(Parser *p)
             _res = _PyAST_BinOp ( a , LShift , b , EXTRA );
             if (_res == NULL && PyErr_Occurred()) {
                 p->error_indicator = 1;
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             goto done;
@@ -13048,7 +13482,7 @@ shift_expr_raw(Parser *p)
     }
     { // shift_expr '>>' sum
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> shift_expr[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "shift_expr '>>' sum"));
@@ -13066,7 +13500,7 @@ shift_expr_raw(Parser *p)
             D(fprintf(stderr, "%*c+ shift_expr[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "shift_expr '>>' sum"));
             Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
             if (_token == NULL) {
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             int _end_lineno = _token->end_lineno;
@@ -13076,7 +13510,7 @@ shift_expr_raw(Parser *p)
             _res = _PyAST_BinOp ( a , RShift , b , EXTRA );
             if (_res == NULL && PyErr_Occurred()) {
                 p->error_indicator = 1;
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             goto done;
@@ -13087,7 +13521,7 @@ shift_expr_raw(Parser *p)
     }
     { // sum
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> shift_expr[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "sum"));
@@ -13106,7 +13540,7 @@ shift_expr_raw(Parser *p)
     }
     _res = NULL;
   done:
-    D(p->level--);
+    p->level--;
     return _res;
 }
 
@@ -13116,10 +13550,13 @@ static expr_ty sum_raw(Parser *);
 static expr_ty
 sum_rule(Parser *p)
 {
-    D(p->level++);
+    if (p->level++ == MAXSTACK) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+    }
     expr_ty _res = NULL;
     if (_PyPegen_is_memoized(p, sum_type, &_res)) {
-        D(p->level--);
+        p->level--;
         return _res;
     }
     int _mark = p->mark;
@@ -13127,37 +13564,42 @@ sum_rule(Parser *p)
     while (1) {
         int tmpvar_6 = _PyPegen_update_memo(p, _mark, sum_type, _res);
         if (tmpvar_6) {
-            D(p->level--);
+            p->level--;
             return _res;
         }
         p->mark = _mark;
         p->in_raw_rule++;
         void *_raw = sum_raw(p);
         p->in_raw_rule--;
-        if (p->error_indicator)
+        if (p->error_indicator) {
+            p->level--;
             return NULL;
+        }
         if (_raw == NULL || p->mark <= _resmark)
             break;
         _resmark = p->mark;
         _res = _raw;
     }
     p->mark = _resmark;
-    D(p->level--);
+    p->level--;
     return _res;
 }
 static expr_ty
 sum_raw(Parser *p)
 {
-    D(p->level++);
+    if (p->level++ == MAXSTACK) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+    }
     if (p->error_indicator) {
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     expr_ty _res = NULL;
     int _mark = p->mark;
     if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) {
         p->error_indicator = 1;
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     int _start_lineno = p->tokens[_mark]->lineno;
@@ -13166,7 +13608,7 @@ sum_raw(Parser *p)
     UNUSED(_start_col_offset); // Only used by EXTRA macro
     { // sum '+' term
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> sum[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "sum '+' term"));
@@ -13184,7 +13626,7 @@ sum_raw(Parser *p)
             D(fprintf(stderr, "%*c+ sum[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "sum '+' term"));
             Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
             if (_token == NULL) {
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             int _end_lineno = _token->end_lineno;
@@ -13194,7 +13636,7 @@ sum_raw(Parser *p)
             _res = _PyAST_BinOp ( a , Add , b , EXTRA );
             if (_res == NULL && PyErr_Occurred()) {
                 p->error_indicator = 1;
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             goto done;
@@ -13205,7 +13647,7 @@ sum_raw(Parser *p)
     }
     { // sum '-' term
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> sum[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "sum '-' term"));
@@ -13223,7 +13665,7 @@ sum_raw(Parser *p)
             D(fprintf(stderr, "%*c+ sum[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "sum '-' term"));
             Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
             if (_token == NULL) {
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             int _end_lineno = _token->end_lineno;
@@ -13233,7 +13675,7 @@ sum_raw(Parser *p)
             _res = _PyAST_BinOp ( a , Sub , b , EXTRA );
             if (_res == NULL && PyErr_Occurred()) {
                 p->error_indicator = 1;
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             goto done;
@@ -13244,7 +13686,7 @@ sum_raw(Parser *p)
     }
     { // term
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> sum[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "term"));
@@ -13263,7 +13705,7 @@ sum_raw(Parser *p)
     }
     _res = NULL;
   done:
-    D(p->level--);
+    p->level--;
     return _res;
 }
 
@@ -13279,10 +13721,13 @@ static expr_ty term_raw(Parser *);
 static expr_ty
 term_rule(Parser *p)
 {
-    D(p->level++);
+    if (p->level++ == MAXSTACK) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+    }
     expr_ty _res = NULL;
     if (_PyPegen_is_memoized(p, term_type, &_res)) {
-        D(p->level--);
+        p->level--;
         return _res;
     }
     int _mark = p->mark;
@@ -13290,37 +13735,42 @@ term_rule(Parser *p)
     while (1) {
         int tmpvar_7 = _PyPegen_update_memo(p, _mark, term_type, _res);
         if (tmpvar_7) {
-            D(p->level--);
+            p->level--;
             return _res;
         }
         p->mark = _mark;
         p->in_raw_rule++;
         void *_raw = term_raw(p);
         p->in_raw_rule--;
-        if (p->error_indicator)
+        if (p->error_indicator) {
+            p->level--;
             return NULL;
+        }
         if (_raw == NULL || p->mark <= _resmark)
             break;
         _resmark = p->mark;
         _res = _raw;
     }
     p->mark = _resmark;
-    D(p->level--);
+    p->level--;
     return _res;
 }
 static expr_ty
 term_raw(Parser *p)
 {
-    D(p->level++);
+    if (p->level++ == MAXSTACK) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+    }
     if (p->error_indicator) {
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     expr_ty _res = NULL;
     int _mark = p->mark;
     if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) {
         p->error_indicator = 1;
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     int _start_lineno = p->tokens[_mark]->lineno;
@@ -13329,7 +13779,7 @@ term_raw(Parser *p)
     UNUSED(_start_col_offset); // Only used by EXTRA macro
     { // term '*' factor
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> term[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "term '*' factor"));
@@ -13347,7 +13797,7 @@ term_raw(Parser *p)
             D(fprintf(stderr, "%*c+ term[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "term '*' factor"));
             Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
             if (_token == NULL) {
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             int _end_lineno = _token->end_lineno;
@@ -13357,7 +13807,7 @@ term_raw(Parser *p)
             _res = _PyAST_BinOp ( a , Mult , b , EXTRA );
             if (_res == NULL && PyErr_Occurred()) {
                 p->error_indicator = 1;
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             goto done;
@@ -13368,7 +13818,7 @@ term_raw(Parser *p)
     }
     { // term '/' factor
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> term[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "term '/' factor"));
@@ -13386,7 +13836,7 @@ term_raw(Parser *p)
             D(fprintf(stderr, "%*c+ term[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "term '/' factor"));
             Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
             if (_token == NULL) {
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             int _end_lineno = _token->end_lineno;
@@ -13396,7 +13846,7 @@ term_raw(Parser *p)
             _res = _PyAST_BinOp ( a , Div , b , EXTRA );
             if (_res == NULL && PyErr_Occurred()) {
                 p->error_indicator = 1;
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             goto done;
@@ -13407,7 +13857,7 @@ term_raw(Parser *p)
     }
     { // term '//' factor
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> term[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "term '//' factor"));
@@ -13425,7 +13875,7 @@ term_raw(Parser *p)
             D(fprintf(stderr, "%*c+ term[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "term '//' factor"));
             Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
             if (_token == NULL) {
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             int _end_lineno = _token->end_lineno;
@@ -13435,7 +13885,7 @@ term_raw(Parser *p)
             _res = _PyAST_BinOp ( a , FloorDiv , b , EXTRA );
             if (_res == NULL && PyErr_Occurred()) {
                 p->error_indicator = 1;
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             goto done;
@@ -13446,7 +13896,7 @@ term_raw(Parser *p)
     }
     { // term '%' factor
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> term[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "term '%' factor"));
@@ -13464,7 +13914,7 @@ term_raw(Parser *p)
             D(fprintf(stderr, "%*c+ term[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "term '%' factor"));
             Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
             if (_token == NULL) {
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             int _end_lineno = _token->end_lineno;
@@ -13474,7 +13924,7 @@ term_raw(Parser *p)
             _res = _PyAST_BinOp ( a , Mod , b , EXTRA );
             if (_res == NULL && PyErr_Occurred()) {
                 p->error_indicator = 1;
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             goto done;
@@ -13485,7 +13935,7 @@ term_raw(Parser *p)
     }
     { // term '@' factor
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> term[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "term '@' factor"));
@@ -13503,7 +13953,7 @@ term_raw(Parser *p)
             D(fprintf(stderr, "%*c+ term[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "term '@' factor"));
             Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
             if (_token == NULL) {
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             int _end_lineno = _token->end_lineno;
@@ -13513,7 +13963,7 @@ term_raw(Parser *p)
             _res = CHECK_VERSION ( expr_ty , 5 , "The '@' operator is" , _PyAST_BinOp ( a , MatMult , b , EXTRA ) );
             if (_res == NULL && PyErr_Occurred()) {
                 p->error_indicator = 1;
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             goto done;
@@ -13524,7 +13974,7 @@ term_raw(Parser *p)
     }
     { // factor
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> term[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "factor"));
@@ -13543,7 +13993,7 @@ term_raw(Parser *p)
     }
     _res = NULL;
   done:
-    D(p->level--);
+    p->level--;
     return _res;
 }
 
@@ -13551,20 +14001,23 @@ term_raw(Parser *p)
 static expr_ty
 factor_rule(Parser *p)
 {
-    D(p->level++);
+    if (p->level++ == MAXSTACK) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+    }
     if (p->error_indicator) {
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     expr_ty _res = NULL;
     if (_PyPegen_is_memoized(p, factor_type, &_res)) {
-        D(p->level--);
+        p->level--;
         return _res;
     }
     int _mark = p->mark;
     if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) {
         p->error_indicator = 1;
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     int _start_lineno = p->tokens[_mark]->lineno;
@@ -13573,7 +14026,7 @@ factor_rule(Parser *p)
     UNUSED(_start_col_offset); // Only used by EXTRA macro
     { // '+' factor
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> factor[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'+' factor"));
@@ -13588,7 +14041,7 @@ factor_rule(Parser *p)
             D(fprintf(stderr, "%*c+ factor[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'+' factor"));
             Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
             if (_token == NULL) {
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             int _end_lineno = _token->end_lineno;
@@ -13598,7 +14051,7 @@ factor_rule(Parser *p)
             _res = _PyAST_UnaryOp ( UAdd , a , EXTRA );
             if (_res == NULL && PyErr_Occurred()) {
                 p->error_indicator = 1;
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             goto done;
@@ -13609,7 +14062,7 @@ factor_rule(Parser *p)
     }
     { // '-' factor
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> factor[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'-' factor"));
@@ -13624,7 +14077,7 @@ factor_rule(Parser *p)
             D(fprintf(stderr, "%*c+ factor[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'-' factor"));
             Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
             if (_token == NULL) {
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             int _end_lineno = _token->end_lineno;
@@ -13634,7 +14087,7 @@ factor_rule(Parser *p)
             _res = _PyAST_UnaryOp ( USub , a , EXTRA );
             if (_res == NULL && PyErr_Occurred()) {
                 p->error_indicator = 1;
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             goto done;
@@ -13645,7 +14098,7 @@ factor_rule(Parser *p)
     }
     { // '~' factor
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> factor[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'~' factor"));
@@ -13660,7 +14113,7 @@ factor_rule(Parser *p)
             D(fprintf(stderr, "%*c+ factor[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'~' factor"));
             Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
             if (_token == NULL) {
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             int _end_lineno = _token->end_lineno;
@@ -13670,7 +14123,7 @@ factor_rule(Parser *p)
             _res = _PyAST_UnaryOp ( Invert , a , EXTRA );
             if (_res == NULL && PyErr_Occurred()) {
                 p->error_indicator = 1;
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             goto done;
@@ -13681,7 +14134,7 @@ factor_rule(Parser *p)
     }
     { // power
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> factor[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "power"));
@@ -13701,7 +14154,7 @@ factor_rule(Parser *p)
     _res = NULL;
   done:
     _PyPegen_insert_memo(p, _mark, factor_type, _res);
-    D(p->level--);
+    p->level--;
     return _res;
 }
 
@@ -13709,16 +14162,19 @@ factor_rule(Parser *p)
 static expr_ty
 power_rule(Parser *p)
 {
-    D(p->level++);
+    if (p->level++ == MAXSTACK) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+    }
     if (p->error_indicator) {
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     expr_ty _res = NULL;
     int _mark = p->mark;
     if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) {
         p->error_indicator = 1;
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     int _start_lineno = p->tokens[_mark]->lineno;
@@ -13727,7 +14183,7 @@ power_rule(Parser *p)
     UNUSED(_start_col_offset); // Only used by EXTRA macro
     { // await_primary '**' factor
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> power[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "await_primary '**' factor"));
@@ -13745,7 +14201,7 @@ power_rule(Parser *p)
             D(fprintf(stderr, "%*c+ power[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "await_primary '**' factor"));
             Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
             if (_token == NULL) {
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             int _end_lineno = _token->end_lineno;
@@ -13755,7 +14211,7 @@ power_rule(Parser *p)
             _res = _PyAST_BinOp ( a , Pow , b , EXTRA );
             if (_res == NULL && PyErr_Occurred()) {
                 p->error_indicator = 1;
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             goto done;
@@ -13766,7 +14222,7 @@ power_rule(Parser *p)
     }
     { // await_primary
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> power[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "await_primary"));
@@ -13785,7 +14241,7 @@ power_rule(Parser *p)
     }
     _res = NULL;
   done:
-    D(p->level--);
+    p->level--;
     return _res;
 }
 
@@ -13793,20 +14249,23 @@ power_rule(Parser *p)
 static expr_ty
 await_primary_rule(Parser *p)
 {
-    D(p->level++);
+    if (p->level++ == MAXSTACK) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+    }
     if (p->error_indicator) {
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     expr_ty _res = NULL;
     if (_PyPegen_is_memoized(p, await_primary_type, &_res)) {
-        D(p->level--);
+        p->level--;
         return _res;
     }
     int _mark = p->mark;
     if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) {
         p->error_indicator = 1;
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     int _start_lineno = p->tokens[_mark]->lineno;
@@ -13815,7 +14274,7 @@ await_primary_rule(Parser *p)
     UNUSED(_start_col_offset); // Only used by EXTRA macro
     { // AWAIT primary
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> await_primary[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "AWAIT primary"));
@@ -13830,7 +14289,7 @@ await_primary_rule(Parser *p)
             D(fprintf(stderr, "%*c+ await_primary[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "AWAIT primary"));
             Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
             if (_token == NULL) {
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             int _end_lineno = _token->end_lineno;
@@ -13840,7 +14299,7 @@ await_primary_rule(Parser *p)
             _res = CHECK_VERSION ( expr_ty , 5 , "Await expressions are" , _PyAST_Await ( a , EXTRA ) );
             if (_res == NULL && PyErr_Occurred()) {
                 p->error_indicator = 1;
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             goto done;
@@ -13851,7 +14310,7 @@ await_primary_rule(Parser *p)
     }
     { // primary
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> await_primary[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "primary"));
@@ -13871,7 +14330,7 @@ await_primary_rule(Parser *p)
     _res = NULL;
   done:
     _PyPegen_insert_memo(p, _mark, await_primary_type, _res);
-    D(p->level--);
+    p->level--;
     return _res;
 }
 
@@ -13886,10 +14345,13 @@ static expr_ty primary_raw(Parser *);
 static expr_ty
 primary_rule(Parser *p)
 {
-    D(p->level++);
+    if (p->level++ == MAXSTACK) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+    }
     expr_ty _res = NULL;
     if (_PyPegen_is_memoized(p, primary_type, &_res)) {
-        D(p->level--);
+        p->level--;
         return _res;
     }
     int _mark = p->mark;
@@ -13897,37 +14359,42 @@ primary_rule(Parser *p)
     while (1) {
         int tmpvar_8 = _PyPegen_update_memo(p, _mark, primary_type, _res);
         if (tmpvar_8) {
-            D(p->level--);
+            p->level--;
             return _res;
         }
         p->mark = _mark;
         p->in_raw_rule++;
         void *_raw = primary_raw(p);
         p->in_raw_rule--;
-        if (p->error_indicator)
+        if (p->error_indicator) {
+            p->level--;
             return NULL;
+        }
         if (_raw == NULL || p->mark <= _resmark)
             break;
         _resmark = p->mark;
         _res = _raw;
     }
     p->mark = _resmark;
-    D(p->level--);
+    p->level--;
     return _res;
 }
 static expr_ty
 primary_raw(Parser *p)
 {
-    D(p->level++);
+    if (p->level++ == MAXSTACK) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+    }
     if (p->error_indicator) {
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     expr_ty _res = NULL;
     int _mark = p->mark;
     if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) {
         p->error_indicator = 1;
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     int _start_lineno = p->tokens[_mark]->lineno;
@@ -13936,7 +14403,7 @@ primary_raw(Parser *p)
     UNUSED(_start_col_offset); // Only used by EXTRA macro
     { // primary '.' NAME
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> primary[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "primary '.' NAME"));
@@ -13954,7 +14421,7 @@ primary_raw(Parser *p)
             D(fprintf(stderr, "%*c+ primary[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "primary '.' NAME"));
             Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
             if (_token == NULL) {
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             int _end_lineno = _token->end_lineno;
@@ -13964,7 +14431,7 @@ primary_raw(Parser *p)
             _res = _PyAST_Attribute ( a , b -> v . Name . id , Load , EXTRA );
             if (_res == NULL && PyErr_Occurred()) {
                 p->error_indicator = 1;
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             goto done;
@@ -13975,7 +14442,7 @@ primary_raw(Parser *p)
     }
     { // primary genexp
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> primary[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "primary genexp"));
@@ -13990,7 +14457,7 @@ primary_raw(Parser *p)
             D(fprintf(stderr, "%*c+ primary[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "primary genexp"));
             Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
             if (_token == NULL) {
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             int _end_lineno = _token->end_lineno;
@@ -14000,7 +14467,7 @@ primary_raw(Parser *p)
             _res = _PyAST_Call ( a , CHECK ( asdl_expr_seq * , ( asdl_expr_seq * ) _PyPegen_singleton_seq ( p , b ) ) , NULL , EXTRA );
             if (_res == NULL && PyErr_Occurred()) {
                 p->error_indicator = 1;
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             goto done;
@@ -14011,7 +14478,7 @@ primary_raw(Parser *p)
     }
     { // primary '(' arguments? ')'
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> primary[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "primary '(' arguments? ')'"));
@@ -14032,7 +14499,7 @@ primary_raw(Parser *p)
             D(fprintf(stderr, "%*c+ primary[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "primary '(' arguments? ')'"));
             Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
             if (_token == NULL) {
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             int _end_lineno = _token->end_lineno;
@@ -14042,7 +14509,7 @@ primary_raw(Parser *p)
             _res = _PyAST_Call ( a , ( b ) ? ( ( expr_ty ) b ) -> v . Call . args : NULL , ( b ) ? ( ( expr_ty ) b ) -> v . Call . keywords : NULL , EXTRA );
             if (_res == NULL && PyErr_Occurred()) {
                 p->error_indicator = 1;
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             goto done;
@@ -14053,7 +14520,7 @@ primary_raw(Parser *p)
     }
     { // primary '[' slices ']'
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> primary[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "primary '[' slices ']'"));
@@ -14074,7 +14541,7 @@ primary_raw(Parser *p)
             D(fprintf(stderr, "%*c+ primary[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "primary '[' slices ']'"));
             Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
             if (_token == NULL) {
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             int _end_lineno = _token->end_lineno;
@@ -14084,7 +14551,7 @@ primary_raw(Parser *p)
             _res = _PyAST_Subscript ( a , b , Load , EXTRA );
             if (_res == NULL && PyErr_Occurred()) {
                 p->error_indicator = 1;
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             goto done;
@@ -14095,7 +14562,7 @@ primary_raw(Parser *p)
     }
     { // atom
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> primary[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "atom"));
@@ -14114,7 +14581,7 @@ primary_raw(Parser *p)
     }
     _res = NULL;
   done:
-    D(p->level--);
+    p->level--;
     return _res;
 }
 
@@ -14122,16 +14589,19 @@ primary_raw(Parser *p)
 static expr_ty
 slices_rule(Parser *p)
 {
-    D(p->level++);
+    if (p->level++ == MAXSTACK) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+    }
     if (p->error_indicator) {
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     expr_ty _res = NULL;
     int _mark = p->mark;
     if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) {
         p->error_indicator = 1;
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     int _start_lineno = p->tokens[_mark]->lineno;
@@ -14140,7 +14610,7 @@ slices_rule(Parser *p)
     UNUSED(_start_col_offset); // Only used by EXTRA macro
     { // slice !','
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> slices[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "slice !','"));
@@ -14155,7 +14625,7 @@ slices_rule(Parser *p)
             _res = a;
             if (_res == NULL && PyErr_Occurred()) {
                 p->error_indicator = 1;
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             goto done;
@@ -14166,7 +14636,7 @@ slices_rule(Parser *p)
     }
     { // ','.slice+ ','?
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> slices[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "','.slice+ ','?"));
@@ -14182,7 +14652,7 @@ slices_rule(Parser *p)
             D(fprintf(stderr, "%*c+ slices[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "','.slice+ ','?"));
             Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
             if (_token == NULL) {
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             int _end_lineno = _token->end_lineno;
@@ -14192,7 +14662,7 @@ slices_rule(Parser *p)
             _res = _PyAST_Tuple ( a , Load , EXTRA );
             if (_res == NULL && PyErr_Occurred()) {
                 p->error_indicator = 1;
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             goto done;
@@ -14203,7 +14673,7 @@ slices_rule(Parser *p)
     }
     _res = NULL;
   done:
-    D(p->level--);
+    p->level--;
     return _res;
 }
 
@@ -14211,16 +14681,19 @@ slices_rule(Parser *p)
 static expr_ty
 slice_rule(Parser *p)
 {
-    D(p->level++);
+    if (p->level++ == MAXSTACK) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+    }
     if (p->error_indicator) {
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     expr_ty _res = NULL;
     int _mark = p->mark;
     if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) {
         p->error_indicator = 1;
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     int _start_lineno = p->tokens[_mark]->lineno;
@@ -14229,7 +14702,7 @@ slice_rule(Parser *p)
     UNUSED(_start_col_offset); // Only used by EXTRA macro
     { // expression? ':' expression? [':' expression?]
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> slice[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "expression? ':' expression? [':' expression?]"));
@@ -14250,7 +14723,7 @@ slice_rule(Parser *p)
             D(fprintf(stderr, "%*c+ slice[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "expression? ':' expression? [':' expression?]"));
             Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
             if (_token == NULL) {
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             int _end_lineno = _token->end_lineno;
@@ -14260,7 +14733,7 @@ slice_rule(Parser *p)
             _res = _PyAST_Slice ( a , b , c , EXTRA );
             if (_res == NULL && PyErr_Occurred()) {
                 p->error_indicator = 1;
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             goto done;
@@ -14271,7 +14744,7 @@ slice_rule(Parser *p)
     }
     { // named_expression
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> slice[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "named_expression"));
@@ -14284,7 +14757,7 @@ slice_rule(Parser *p)
             _res = a;
             if (_res == NULL && PyErr_Occurred()) {
                 p->error_indicator = 1;
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             goto done;
@@ -14295,7 +14768,7 @@ slice_rule(Parser *p)
     }
     _res = NULL;
   done:
-    D(p->level--);
+    p->level--;
     return _res;
 }
 
@@ -14313,16 +14786,19 @@ slice_rule(Parser *p)
 static expr_ty
 atom_rule(Parser *p)
 {
-    D(p->level++);
+    if (p->level++ == MAXSTACK) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+    }
     if (p->error_indicator) {
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     expr_ty _res = NULL;
     int _mark = p->mark;
     if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) {
         p->error_indicator = 1;
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     int _start_lineno = p->tokens[_mark]->lineno;
@@ -14331,7 +14807,7 @@ atom_rule(Parser *p)
     UNUSED(_start_col_offset); // Only used by EXTRA macro
     { // NAME
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> atom[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "NAME"));
@@ -14350,7 +14826,7 @@ atom_rule(Parser *p)
     }
     { // 'True'
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> atom[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'True'"));
@@ -14362,7 +14838,7 @@ atom_rule(Parser *p)
             D(fprintf(stderr, "%*c+ atom[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'True'"));
             Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
             if (_token == NULL) {
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             int _end_lineno = _token->end_lineno;
@@ -14372,7 +14848,7 @@ atom_rule(Parser *p)
             _res = _PyAST_Constant ( Py_True , NULL , EXTRA );
             if (_res == NULL && PyErr_Occurred()) {
                 p->error_indicator = 1;
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             goto done;
@@ -14383,7 +14859,7 @@ atom_rule(Parser *p)
     }
     { // 'False'
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> atom[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'False'"));
@@ -14395,7 +14871,7 @@ atom_rule(Parser *p)
             D(fprintf(stderr, "%*c+ atom[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'False'"));
             Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
             if (_token == NULL) {
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             int _end_lineno = _token->end_lineno;
@@ -14405,7 +14881,7 @@ atom_rule(Parser *p)
             _res = _PyAST_Constant ( Py_False , NULL , EXTRA );
             if (_res == NULL && PyErr_Occurred()) {
                 p->error_indicator = 1;
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             goto done;
@@ -14416,7 +14892,7 @@ atom_rule(Parser *p)
     }
     { // 'None'
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> atom[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'None'"));
@@ -14428,7 +14904,7 @@ atom_rule(Parser *p)
             D(fprintf(stderr, "%*c+ atom[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'None'"));
             Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
             if (_token == NULL) {
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             int _end_lineno = _token->end_lineno;
@@ -14438,7 +14914,7 @@ atom_rule(Parser *p)
             _res = _PyAST_Constant ( Py_None , NULL , EXTRA );
             if (_res == NULL && PyErr_Occurred()) {
                 p->error_indicator = 1;
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             goto done;
@@ -14449,7 +14925,7 @@ atom_rule(Parser *p)
     }
     { // &STRING strings
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> atom[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "&STRING strings"));
@@ -14470,7 +14946,7 @@ atom_rule(Parser *p)
     }
     { // NUMBER
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> atom[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "NUMBER"));
@@ -14489,7 +14965,7 @@ atom_rule(Parser *p)
     }
     { // &'(' (tuple | group | genexp)
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> atom[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "&'(' (tuple | group | genexp)"));
@@ -14510,7 +14986,7 @@ atom_rule(Parser *p)
     }
     { // &'[' (list | listcomp)
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> atom[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "&'[' (list | listcomp)"));
@@ -14531,7 +15007,7 @@ atom_rule(Parser *p)
     }
     { // &'{' (dict | set | dictcomp | setcomp)
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> atom[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "&'{' (dict | set | dictcomp | setcomp)"));
@@ -14552,7 +15028,7 @@ atom_rule(Parser *p)
     }
     { // '...'
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> atom[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'...'"));
@@ -14564,7 +15040,7 @@ atom_rule(Parser *p)
             D(fprintf(stderr, "%*c+ atom[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'...'"));
             Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
             if (_token == NULL) {
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             int _end_lineno = _token->end_lineno;
@@ -14574,7 +15050,7 @@ atom_rule(Parser *p)
             _res = _PyAST_Constant ( Py_Ellipsis , NULL , EXTRA );
             if (_res == NULL && PyErr_Occurred()) {
                 p->error_indicator = 1;
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             goto done;
@@ -14585,7 +15061,7 @@ atom_rule(Parser *p)
     }
     _res = NULL;
   done:
-    D(p->level--);
+    p->level--;
     return _res;
 }
 
@@ -14593,20 +15069,23 @@ atom_rule(Parser *p)
 static expr_ty
 strings_rule(Parser *p)
 {
-    D(p->level++);
+    if (p->level++ == MAXSTACK) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+    }
     if (p->error_indicator) {
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     expr_ty _res = NULL;
     if (_PyPegen_is_memoized(p, strings_type, &_res)) {
-        D(p->level--);
+        p->level--;
         return _res;
     }
     int _mark = p->mark;
     { // STRING+
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> strings[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "STRING+"));
@@ -14619,7 +15098,7 @@ strings_rule(Parser *p)
             _res = _PyPegen_concatenate_strings ( p , a );
             if (_res == NULL && PyErr_Occurred()) {
                 p->error_indicator = 1;
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             goto done;
@@ -14631,7 +15110,7 @@ strings_rule(Parser *p)
     _res = NULL;
   done:
     _PyPegen_insert_memo(p, _mark, strings_type, _res);
-    D(p->level--);
+    p->level--;
     return _res;
 }
 
@@ -14639,16 +15118,19 @@ strings_rule(Parser *p)
 static expr_ty
 list_rule(Parser *p)
 {
-    D(p->level++);
+    if (p->level++ == MAXSTACK) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+    }
     if (p->error_indicator) {
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     expr_ty _res = NULL;
     int _mark = p->mark;
     if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) {
         p->error_indicator = 1;
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     int _start_lineno = p->tokens[_mark]->lineno;
@@ -14657,7 +15139,7 @@ list_rule(Parser *p)
     UNUSED(_start_col_offset); // Only used by EXTRA macro
     { // '[' star_named_expressions? ']'
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> list[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'[' star_named_expressions? ']'"));
@@ -14675,7 +15157,7 @@ list_rule(Parser *p)
             D(fprintf(stderr, "%*c+ list[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'[' star_named_expressions? ']'"));
             Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
             if (_token == NULL) {
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             int _end_lineno = _token->end_lineno;
@@ -14685,7 +15167,7 @@ list_rule(Parser *p)
             _res = _PyAST_List ( a , Load , EXTRA );
             if (_res == NULL && PyErr_Occurred()) {
                 p->error_indicator = 1;
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             goto done;
@@ -14696,7 +15178,7 @@ list_rule(Parser *p)
     }
     _res = NULL;
   done:
-    D(p->level--);
+    p->level--;
     return _res;
 }
 
@@ -14704,16 +15186,19 @@ list_rule(Parser *p)
 static expr_ty
 listcomp_rule(Parser *p)
 {
-    D(p->level++);
+    if (p->level++ == MAXSTACK) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+    }
     if (p->error_indicator) {
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     expr_ty _res = NULL;
     int _mark = p->mark;
     if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) {
         p->error_indicator = 1;
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     int _start_lineno = p->tokens[_mark]->lineno;
@@ -14722,7 +15207,7 @@ listcomp_rule(Parser *p)
     UNUSED(_start_col_offset); // Only used by EXTRA macro
     { // '[' named_expression for_if_clauses ']'
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> listcomp[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'[' named_expression for_if_clauses ']'"));
@@ -14743,7 +15228,7 @@ listcomp_rule(Parser *p)
             D(fprintf(stderr, "%*c+ listcomp[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'[' named_expression for_if_clauses ']'"));
             Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
             if (_token == NULL) {
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             int _end_lineno = _token->end_lineno;
@@ -14753,7 +15238,7 @@ listcomp_rule(Parser *p)
             _res = _PyAST_ListComp ( a , b , EXTRA );
             if (_res == NULL && PyErr_Occurred()) {
                 p->error_indicator = 1;
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             goto done;
@@ -14764,7 +15249,7 @@ listcomp_rule(Parser *p)
     }
     if (p->call_invalid_rules) { // invalid_comprehension
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> listcomp[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "invalid_comprehension"));
@@ -14783,7 +15268,7 @@ listcomp_rule(Parser *p)
     }
     _res = NULL;
   done:
-    D(p->level--);
+    p->level--;
     return _res;
 }
 
@@ -14791,16 +15276,19 @@ listcomp_rule(Parser *p)
 static expr_ty
 tuple_rule(Parser *p)
 {
-    D(p->level++);
+    if (p->level++ == MAXSTACK) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+    }
     if (p->error_indicator) {
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     expr_ty _res = NULL;
     int _mark = p->mark;
     if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) {
         p->error_indicator = 1;
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     int _start_lineno = p->tokens[_mark]->lineno;
@@ -14809,7 +15297,7 @@ tuple_rule(Parser *p)
     UNUSED(_start_col_offset); // Only used by EXTRA macro
     { // '(' [star_named_expression ',' star_named_expressions?] ')'
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> tuple[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'(' [star_named_expression ',' star_named_expressions?] ')'"));
@@ -14827,7 +15315,7 @@ tuple_rule(Parser *p)
             D(fprintf(stderr, "%*c+ tuple[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'(' [star_named_expression ',' star_named_expressions?] ')'"));
             Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
             if (_token == NULL) {
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             int _end_lineno = _token->end_lineno;
@@ -14837,7 +15325,7 @@ tuple_rule(Parser *p)
             _res = _PyAST_Tuple ( a , Load , EXTRA );
             if (_res == NULL && PyErr_Occurred()) {
                 p->error_indicator = 1;
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             goto done;
@@ -14848,7 +15336,7 @@ tuple_rule(Parser *p)
     }
     _res = NULL;
   done:
-    D(p->level--);
+    p->level--;
     return _res;
 }
 
@@ -14856,16 +15344,19 @@ tuple_rule(Parser *p)
 static expr_ty
 group_rule(Parser *p)
 {
-    D(p->level++);
+    if (p->level++ == MAXSTACK) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+    }
     if (p->error_indicator) {
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     expr_ty _res = NULL;
     int _mark = p->mark;
     { // '(' (yield_expr | named_expression) ')'
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> group[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'(' (yield_expr | named_expression) ')'"));
@@ -14884,7 +15375,7 @@ group_rule(Parser *p)
             _res = a;
             if (_res == NULL && PyErr_Occurred()) {
                 p->error_indicator = 1;
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             goto done;
@@ -14895,7 +15386,7 @@ group_rule(Parser *p)
     }
     if (p->call_invalid_rules) { // invalid_group
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> group[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "invalid_group"));
@@ -14914,7 +15405,7 @@ group_rule(Parser *p)
     }
     _res = NULL;
   done:
-    D(p->level--);
+    p->level--;
     return _res;
 }
 
@@ -14924,16 +15415,19 @@ group_rule(Parser *p)
 static expr_ty
 genexp_rule(Parser *p)
 {
-    D(p->level++);
+    if (p->level++ == MAXSTACK) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+    }
     if (p->error_indicator) {
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     expr_ty _res = NULL;
     int _mark = p->mark;
     if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) {
         p->error_indicator = 1;
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     int _start_lineno = p->tokens[_mark]->lineno;
@@ -14942,7 +15436,7 @@ genexp_rule(Parser *p)
     UNUSED(_start_col_offset); // Only used by EXTRA macro
     { // '(' (assignment_expression | expression !':=') for_if_clauses ')'
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> genexp[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'(' (assignment_expression | expression !':=') for_if_clauses ')'"));
@@ -14963,7 +15457,7 @@ genexp_rule(Parser *p)
             D(fprintf(stderr, "%*c+ genexp[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'(' (assignment_expression | expression !':=') for_if_clauses ')'"));
             Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
             if (_token == NULL) {
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             int _end_lineno = _token->end_lineno;
@@ -14973,7 +15467,7 @@ genexp_rule(Parser *p)
             _res = _PyAST_GeneratorExp ( a , b , EXTRA );
             if (_res == NULL && PyErr_Occurred()) {
                 p->error_indicator = 1;
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             goto done;
@@ -14984,7 +15478,7 @@ genexp_rule(Parser *p)
     }
     if (p->call_invalid_rules) { // invalid_comprehension
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> genexp[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "invalid_comprehension"));
@@ -15003,7 +15497,7 @@ genexp_rule(Parser *p)
     }
     _res = NULL;
   done:
-    D(p->level--);
+    p->level--;
     return _res;
 }
 
@@ -15011,16 +15505,19 @@ genexp_rule(Parser *p)
 static expr_ty
 set_rule(Parser *p)
 {
-    D(p->level++);
+    if (p->level++ == MAXSTACK) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+    }
     if (p->error_indicator) {
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     expr_ty _res = NULL;
     int _mark = p->mark;
     if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) {
         p->error_indicator = 1;
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     int _start_lineno = p->tokens[_mark]->lineno;
@@ -15029,7 +15526,7 @@ set_rule(Parser *p)
     UNUSED(_start_col_offset); // Only used by EXTRA macro
     { // '{' star_named_expressions '}'
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> set[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'{' star_named_expressions '}'"));
@@ -15047,7 +15544,7 @@ set_rule(Parser *p)
             D(fprintf(stderr, "%*c+ set[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'{' star_named_expressions '}'"));
             Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
             if (_token == NULL) {
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             int _end_lineno = _token->end_lineno;
@@ -15057,7 +15554,7 @@ set_rule(Parser *p)
             _res = _PyAST_Set ( a , EXTRA );
             if (_res == NULL && PyErr_Occurred()) {
                 p->error_indicator = 1;
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             goto done;
@@ -15068,7 +15565,7 @@ set_rule(Parser *p)
     }
     _res = NULL;
   done:
-    D(p->level--);
+    p->level--;
     return _res;
 }
 
@@ -15076,16 +15573,19 @@ set_rule(Parser *p)
 static expr_ty
 setcomp_rule(Parser *p)
 {
-    D(p->level++);
+    if (p->level++ == MAXSTACK) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+    }
     if (p->error_indicator) {
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     expr_ty _res = NULL;
     int _mark = p->mark;
     if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) {
         p->error_indicator = 1;
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     int _start_lineno = p->tokens[_mark]->lineno;
@@ -15094,7 +15594,7 @@ setcomp_rule(Parser *p)
     UNUSED(_start_col_offset); // Only used by EXTRA macro
     { // '{' named_expression for_if_clauses '}'
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> setcomp[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'{' named_expression for_if_clauses '}'"));
@@ -15115,7 +15615,7 @@ setcomp_rule(Parser *p)
             D(fprintf(stderr, "%*c+ setcomp[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'{' named_expression for_if_clauses '}'"));
             Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
             if (_token == NULL) {
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             int _end_lineno = _token->end_lineno;
@@ -15125,7 +15625,7 @@ setcomp_rule(Parser *p)
             _res = _PyAST_SetComp ( a , b , EXTRA );
             if (_res == NULL && PyErr_Occurred()) {
                 p->error_indicator = 1;
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             goto done;
@@ -15136,7 +15636,7 @@ setcomp_rule(Parser *p)
     }
     if (p->call_invalid_rules) { // invalid_comprehension
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> setcomp[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "invalid_comprehension"));
@@ -15155,7 +15655,7 @@ setcomp_rule(Parser *p)
     }
     _res = NULL;
   done:
-    D(p->level--);
+    p->level--;
     return _res;
 }
 
@@ -15163,16 +15663,19 @@ setcomp_rule(Parser *p)
 static expr_ty
 dict_rule(Parser *p)
 {
-    D(p->level++);
+    if (p->level++ == MAXSTACK) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+    }
     if (p->error_indicator) {
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     expr_ty _res = NULL;
     int _mark = p->mark;
     if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) {
         p->error_indicator = 1;
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     int _start_lineno = p->tokens[_mark]->lineno;
@@ -15181,7 +15684,7 @@ dict_rule(Parser *p)
     UNUSED(_start_col_offset); // Only used by EXTRA macro
     { // '{' double_starred_kvpairs? '}'
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> dict[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'{' double_starred_kvpairs? '}'"));
@@ -15199,7 +15702,7 @@ dict_rule(Parser *p)
             D(fprintf(stderr, "%*c+ dict[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'{' double_starred_kvpairs? '}'"));
             Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
             if (_token == NULL) {
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             int _end_lineno = _token->end_lineno;
@@ -15209,7 +15712,7 @@ dict_rule(Parser *p)
             _res = _PyAST_Dict ( CHECK ( asdl_expr_seq * , _PyPegen_get_keys ( p , a ) ) , CHECK ( asdl_expr_seq * , _PyPegen_get_values ( p , a ) ) , EXTRA );
             if (_res == NULL && PyErr_Occurred()) {
                 p->error_indicator = 1;
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             goto done;
@@ -15220,7 +15723,7 @@ dict_rule(Parser *p)
     }
     { // '{' invalid_double_starred_kvpairs '}'
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> dict[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'{' invalid_double_starred_kvpairs '}'"));
@@ -15245,7 +15748,7 @@ dict_rule(Parser *p)
     }
     _res = NULL;
   done:
-    D(p->level--);
+    p->level--;
     return _res;
 }
 
@@ -15253,16 +15756,19 @@ dict_rule(Parser *p)
 static expr_ty
 dictcomp_rule(Parser *p)
 {
-    D(p->level++);
+    if (p->level++ == MAXSTACK) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+    }
     if (p->error_indicator) {
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     expr_ty _res = NULL;
     int _mark = p->mark;
     if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) {
         p->error_indicator = 1;
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     int _start_lineno = p->tokens[_mark]->lineno;
@@ -15271,7 +15777,7 @@ dictcomp_rule(Parser *p)
     UNUSED(_start_col_offset); // Only used by EXTRA macro
     { // '{' kvpair for_if_clauses '}'
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> dictcomp[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'{' kvpair for_if_clauses '}'"));
@@ -15292,7 +15798,7 @@ dictcomp_rule(Parser *p)
             D(fprintf(stderr, "%*c+ dictcomp[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'{' kvpair for_if_clauses '}'"));
             Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
             if (_token == NULL) {
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             int _end_lineno = _token->end_lineno;
@@ -15302,7 +15808,7 @@ dictcomp_rule(Parser *p)
             _res = _PyAST_DictComp ( a -> key , a -> value , b , EXTRA );
             if (_res == NULL && PyErr_Occurred()) {
                 p->error_indicator = 1;
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             goto done;
@@ -15313,7 +15819,7 @@ dictcomp_rule(Parser *p)
     }
     if (p->call_invalid_rules) { // invalid_dict_comprehension
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> dictcomp[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "invalid_dict_comprehension"));
@@ -15332,7 +15838,7 @@ dictcomp_rule(Parser *p)
     }
     _res = NULL;
   done:
-    D(p->level--);
+    p->level--;
     return _res;
 }
 
@@ -15340,16 +15846,19 @@ dictcomp_rule(Parser *p)
 static asdl_seq*
 double_starred_kvpairs_rule(Parser *p)
 {
-    D(p->level++);
+    if (p->level++ == MAXSTACK) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+    }
     if (p->error_indicator) {
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     asdl_seq* _res = NULL;
     int _mark = p->mark;
     { // ','.double_starred_kvpair+ ','?
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> double_starred_kvpairs[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "','.double_starred_kvpair+ ','?"));
@@ -15366,7 +15875,7 @@ double_starred_kvpairs_rule(Parser *p)
             _res = a;
             if (_res == NULL && PyErr_Occurred()) {
                 p->error_indicator = 1;
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             goto done;
@@ -15377,7 +15886,7 @@ double_starred_kvpairs_rule(Parser *p)
     }
     _res = NULL;
   done:
-    D(p->level--);
+    p->level--;
     return _res;
 }
 
@@ -15385,16 +15894,19 @@ double_starred_kvpairs_rule(Parser *p)
 static KeyValuePair*
 double_starred_kvpair_rule(Parser *p)
 {
-    D(p->level++);
+    if (p->level++ == MAXSTACK) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+    }
     if (p->error_indicator) {
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     KeyValuePair* _res = NULL;
     int _mark = p->mark;
     { // '**' bitwise_or
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> double_starred_kvpair[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'**' bitwise_or"));
@@ -15410,7 +15922,7 @@ double_starred_kvpair_rule(Parser *p)
             _res = _PyPegen_key_value_pair ( p , NULL , a );
             if (_res == NULL && PyErr_Occurred()) {
                 p->error_indicator = 1;
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             goto done;
@@ -15421,7 +15933,7 @@ double_starred_kvpair_rule(Parser *p)
     }
     { // kvpair
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> double_starred_kvpair[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "kvpair"));
@@ -15440,7 +15952,7 @@ double_starred_kvpair_rule(Parser *p)
     }
     _res = NULL;
   done:
-    D(p->level--);
+    p->level--;
     return _res;
 }
 
@@ -15448,16 +15960,19 @@ double_starred_kvpair_rule(Parser *p)
 static KeyValuePair*
 kvpair_rule(Parser *p)
 {
-    D(p->level++);
+    if (p->level++ == MAXSTACK) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+    }
     if (p->error_indicator) {
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     KeyValuePair* _res = NULL;
     int _mark = p->mark;
     { // expression ':' expression
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> kvpair[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "expression ':' expression"));
@@ -15476,7 +15991,7 @@ kvpair_rule(Parser *p)
             _res = _PyPegen_key_value_pair ( p , a , b );
             if (_res == NULL && PyErr_Occurred()) {
                 p->error_indicator = 1;
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             goto done;
@@ -15487,7 +16002,7 @@ kvpair_rule(Parser *p)
     }
     _res = NULL;
   done:
-    D(p->level--);
+    p->level--;
     return _res;
 }
 
@@ -15495,16 +16010,19 @@ kvpair_rule(Parser *p)
 static asdl_comprehension_seq*
 for_if_clauses_rule(Parser *p)
 {
-    D(p->level++);
+    if (p->level++ == MAXSTACK) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+    }
     if (p->error_indicator) {
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     asdl_comprehension_seq* _res = NULL;
     int _mark = p->mark;
     { // for_if_clause+
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> for_if_clauses[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "for_if_clause+"));
@@ -15517,7 +16035,7 @@ for_if_clauses_rule(Parser *p)
             _res = a;
             if (_res == NULL && PyErr_Occurred()) {
                 p->error_indicator = 1;
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             goto done;
@@ -15528,7 +16046,7 @@ for_if_clauses_rule(Parser *p)
     }
     _res = NULL;
   done:
-    D(p->level--);
+    p->level--;
     return _res;
 }
 
@@ -15539,16 +16057,19 @@ for_if_clauses_rule(Parser *p)
 static comprehension_ty
 for_if_clause_rule(Parser *p)
 {
-    D(p->level++);
+    if (p->level++ == MAXSTACK) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+    }
     if (p->error_indicator) {
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     comprehension_ty _res = NULL;
     int _mark = p->mark;
     { // ASYNC 'for' star_targets 'in' ~ disjunction (('if' disjunction))*
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> for_if_clause[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "ASYNC 'for' star_targets 'in' ~ disjunction (('if' disjunction))*"));
@@ -15579,7 +16100,7 @@ for_if_clause_rule(Parser *p)
             _res = CHECK_VERSION ( comprehension_ty , 6 , "Async comprehensions are" , _PyAST_comprehension ( a , b , c , 1 , p -> arena ) );
             if (_res == NULL && PyErr_Occurred()) {
                 p->error_indicator = 1;
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             goto done;
@@ -15588,13 +16109,13 @@ for_if_clause_rule(Parser *p)
         D(fprintf(stderr, "%*c%s for_if_clause[%d-%d]: %s failed!\n", p->level, ' ',
                   p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "ASYNC 'for' star_targets 'in' ~ disjunction (('if' disjunction))*"));
         if (_cut_var) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
     }
     { // 'for' star_targets 'in' ~ disjunction (('if' disjunction))*
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> for_if_clause[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'for' star_targets 'in' ~ disjunction (('if' disjunction))*"));
@@ -15622,7 +16143,7 @@ for_if_clause_rule(Parser *p)
             _res = _PyAST_comprehension ( a , b , c , 0 , p -> arena );
             if (_res == NULL && PyErr_Occurred()) {
                 p->error_indicator = 1;
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             goto done;
@@ -15631,13 +16152,13 @@ for_if_clause_rule(Parser *p)
         D(fprintf(stderr, "%*c%s for_if_clause[%d-%d]: %s failed!\n", p->level, ' ',
                   p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'for' star_targets 'in' ~ disjunction (('if' disjunction))*"));
         if (_cut_var) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
     }
     if (p->call_invalid_rules) { // invalid_for_target
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> for_if_clause[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "invalid_for_target"));
@@ -15656,7 +16177,7 @@ for_if_clause_rule(Parser *p)
     }
     _res = NULL;
   done:
-    D(p->level--);
+    p->level--;
     return _res;
 }
 
@@ -15664,16 +16185,19 @@ for_if_clause_rule(Parser *p)
 static expr_ty
 yield_expr_rule(Parser *p)
 {
-    D(p->level++);
+    if (p->level++ == MAXSTACK) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+    }
     if (p->error_indicator) {
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     expr_ty _res = NULL;
     int _mark = p->mark;
     if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) {
         p->error_indicator = 1;
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     int _start_lineno = p->tokens[_mark]->lineno;
@@ -15682,7 +16206,7 @@ yield_expr_rule(Parser *p)
     UNUSED(_start_col_offset); // Only used by EXTRA macro
     { // 'yield' 'from' expression
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> yield_expr[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'yield' 'from' expression"));
@@ -15700,7 +16224,7 @@ yield_expr_rule(Parser *p)
             D(fprintf(stderr, "%*c+ yield_expr[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'yield' 'from' expression"));
             Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
             if (_token == NULL) {
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             int _end_lineno = _token->end_lineno;
@@ -15710,7 +16234,7 @@ yield_expr_rule(Parser *p)
             _res = _PyAST_YieldFrom ( a , EXTRA );
             if (_res == NULL && PyErr_Occurred()) {
                 p->error_indicator = 1;
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             goto done;
@@ -15721,7 +16245,7 @@ yield_expr_rule(Parser *p)
     }
     { // 'yield' star_expressions?
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> yield_expr[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'yield' star_expressions?"));
@@ -15736,7 +16260,7 @@ yield_expr_rule(Parser *p)
             D(fprintf(stderr, "%*c+ yield_expr[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'yield' star_expressions?"));
             Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
             if (_token == NULL) {
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             int _end_lineno = _token->end_lineno;
@@ -15746,7 +16270,7 @@ yield_expr_rule(Parser *p)
             _res = _PyAST_Yield ( a , EXTRA );
             if (_res == NULL && PyErr_Occurred()) {
                 p->error_indicator = 1;
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             goto done;
@@ -15757,7 +16281,7 @@ yield_expr_rule(Parser *p)
     }
     _res = NULL;
   done:
-    D(p->level--);
+    p->level--;
     return _res;
 }
 
@@ -15765,20 +16289,23 @@ yield_expr_rule(Parser *p)
 static expr_ty
 arguments_rule(Parser *p)
 {
-    D(p->level++);
+    if (p->level++ == MAXSTACK) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+    }
     if (p->error_indicator) {
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     expr_ty _res = NULL;
     if (_PyPegen_is_memoized(p, arguments_type, &_res)) {
-        D(p->level--);
+        p->level--;
         return _res;
     }
     int _mark = p->mark;
     { // args ','? &')'
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> arguments[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "args ','? &')'"));
@@ -15797,7 +16324,7 @@ arguments_rule(Parser *p)
             _res = a;
             if (_res == NULL && PyErr_Occurred()) {
                 p->error_indicator = 1;
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             goto done;
@@ -15808,7 +16335,7 @@ arguments_rule(Parser *p)
     }
     if (p->call_invalid_rules) { // invalid_arguments
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> arguments[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "invalid_arguments"));
@@ -15828,7 +16355,7 @@ arguments_rule(Parser *p)
     _res = NULL;
   done:
     _PyPegen_insert_memo(p, _mark, arguments_type, _res);
-    D(p->level--);
+    p->level--;
     return _res;
 }
 
@@ -15838,16 +16365,19 @@ arguments_rule(Parser *p)
 static expr_ty
 args_rule(Parser *p)
 {
-    D(p->level++);
+    if (p->level++ == MAXSTACK) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+    }
     if (p->error_indicator) {
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     expr_ty _res = NULL;
     int _mark = p->mark;
     if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) {
         p->error_indicator = 1;
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     int _start_lineno = p->tokens[_mark]->lineno;
@@ -15856,7 +16386,7 @@ args_rule(Parser *p)
     UNUSED(_start_col_offset); // Only used by EXTRA macro
     { // ','.(starred_expression | (assignment_expression | expression !':=') !'=')+ [',' kwargs]
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> args[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "','.(starred_expression | (assignment_expression | expression !':=') !'=')+ [',' kwargs]"));
@@ -15871,7 +16401,7 @@ args_rule(Parser *p)
             D(fprintf(stderr, "%*c+ args[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "','.(starred_expression | (assignment_expression | expression !':=') !'=')+ [',' kwargs]"));
             Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
             if (_token == NULL) {
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             int _end_lineno = _token->end_lineno;
@@ -15881,7 +16411,7 @@ args_rule(Parser *p)
             _res = _PyPegen_collect_call_seqs ( p , a , b , EXTRA );
             if (_res == NULL && PyErr_Occurred()) {
                 p->error_indicator = 1;
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             goto done;
@@ -15892,7 +16422,7 @@ args_rule(Parser *p)
     }
     { // kwargs
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> args[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "kwargs"));
@@ -15904,7 +16434,7 @@ args_rule(Parser *p)
             D(fprintf(stderr, "%*c+ args[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "kwargs"));
             Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
             if (_token == NULL) {
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             int _end_lineno = _token->end_lineno;
@@ -15914,7 +16444,7 @@ args_rule(Parser *p)
             _res = _PyAST_Call ( _PyPegen_dummy_name ( p ) , CHECK_NULL_ALLOWED ( asdl_expr_seq * , _PyPegen_seq_extract_starred_exprs ( p , a ) ) , CHECK_NULL_ALLOWED ( asdl_keyword_seq * , _PyPegen_seq_delete_starred_exprs ( p , a ) ) , EXTRA );
             if (_res == NULL && PyErr_Occurred()) {
                 p->error_indicator = 1;
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             goto done;
@@ -15925,7 +16455,7 @@ args_rule(Parser *p)
     }
     _res = NULL;
   done:
-    D(p->level--);
+    p->level--;
     return _res;
 }
 
@@ -15936,16 +16466,19 @@ args_rule(Parser *p)
 static asdl_seq*
 kwargs_rule(Parser *p)
 {
-    D(p->level++);
+    if (p->level++ == MAXSTACK) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+    }
     if (p->error_indicator) {
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     asdl_seq* _res = NULL;
     int _mark = p->mark;
     { // ','.kwarg_or_starred+ ',' ','.kwarg_or_double_starred+
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> kwargs[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "','.kwarg_or_starred+ ',' ','.kwarg_or_double_starred+"));
@@ -15964,7 +16497,7 @@ kwargs_rule(Parser *p)
             _res = _PyPegen_join_sequences ( p , a , b );
             if (_res == NULL && PyErr_Occurred()) {
                 p->error_indicator = 1;
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             goto done;
@@ -15975,7 +16508,7 @@ kwargs_rule(Parser *p)
     }
     { // ','.kwarg_or_starred+
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> kwargs[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "','.kwarg_or_starred+"));
@@ -15994,7 +16527,7 @@ kwargs_rule(Parser *p)
     }
     { // ','.kwarg_or_double_starred+
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> kwargs[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "','.kwarg_or_double_starred+"));
@@ -16013,7 +16546,7 @@ kwargs_rule(Parser *p)
     }
     _res = NULL;
   done:
-    D(p->level--);
+    p->level--;
     return _res;
 }
 
@@ -16021,16 +16554,19 @@ kwargs_rule(Parser *p)
 static expr_ty
 starred_expression_rule(Parser *p)
 {
-    D(p->level++);
+    if (p->level++ == MAXSTACK) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+    }
     if (p->error_indicator) {
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     expr_ty _res = NULL;
     int _mark = p->mark;
     if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) {
         p->error_indicator = 1;
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     int _start_lineno = p->tokens[_mark]->lineno;
@@ -16039,7 +16575,7 @@ starred_expression_rule(Parser *p)
     UNUSED(_start_col_offset); // Only used by EXTRA macro
     { // '*' expression
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> starred_expression[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'*' expression"));
@@ -16054,7 +16590,7 @@ starred_expression_rule(Parser *p)
             D(fprintf(stderr, "%*c+ starred_expression[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'*' expression"));
             Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
             if (_token == NULL) {
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             int _end_lineno = _token->end_lineno;
@@ -16064,7 +16600,7 @@ starred_expression_rule(Parser *p)
             _res = _PyAST_Starred ( a , Load , EXTRA );
             if (_res == NULL && PyErr_Occurred()) {
                 p->error_indicator = 1;
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             goto done;
@@ -16075,7 +16611,7 @@ starred_expression_rule(Parser *p)
     }
     _res = NULL;
   done:
-    D(p->level--);
+    p->level--;
     return _res;
 }
 
@@ -16083,16 +16619,19 @@ starred_expression_rule(Parser *p)
 static KeywordOrStarred*
 kwarg_or_starred_rule(Parser *p)
 {
-    D(p->level++);
+    if (p->level++ == MAXSTACK) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+    }
     if (p->error_indicator) {
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     KeywordOrStarred* _res = NULL;
     int _mark = p->mark;
     if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) {
         p->error_indicator = 1;
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     int _start_lineno = p->tokens[_mark]->lineno;
@@ -16101,7 +16640,7 @@ kwarg_or_starred_rule(Parser *p)
     UNUSED(_start_col_offset); // Only used by EXTRA macro
     if (p->call_invalid_rules) { // invalid_kwarg
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> kwarg_or_starred[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "invalid_kwarg"));
@@ -16120,7 +16659,7 @@ kwarg_or_starred_rule(Parser *p)
     }
     { // NAME '=' expression
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> kwarg_or_starred[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "NAME '=' expression"));
@@ -16138,7 +16677,7 @@ kwarg_or_starred_rule(Parser *p)
             D(fprintf(stderr, "%*c+ kwarg_or_starred[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "NAME '=' expression"));
             Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
             if (_token == NULL) {
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             int _end_lineno = _token->end_lineno;
@@ -16148,7 +16687,7 @@ kwarg_or_starred_rule(Parser *p)
             _res = _PyPegen_keyword_or_starred ( p , CHECK ( keyword_ty , _PyAST_keyword ( a -> v . Name . id , b , EXTRA ) ) , 1 );
             if (_res == NULL && PyErr_Occurred()) {
                 p->error_indicator = 1;
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             goto done;
@@ -16159,7 +16698,7 @@ kwarg_or_starred_rule(Parser *p)
     }
     { // starred_expression
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> kwarg_or_starred[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "starred_expression"));
@@ -16172,7 +16711,7 @@ kwarg_or_starred_rule(Parser *p)
             _res = _PyPegen_keyword_or_starred ( p , a , 0 );
             if (_res == NULL && PyErr_Occurred()) {
                 p->error_indicator = 1;
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             goto done;
@@ -16183,7 +16722,7 @@ kwarg_or_starred_rule(Parser *p)
     }
     _res = NULL;
   done:
-    D(p->level--);
+    p->level--;
     return _res;
 }
 
@@ -16191,16 +16730,19 @@ kwarg_or_starred_rule(Parser *p)
 static KeywordOrStarred*
 kwarg_or_double_starred_rule(Parser *p)
 {
-    D(p->level++);
+    if (p->level++ == MAXSTACK) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+    }
     if (p->error_indicator) {
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     KeywordOrStarred* _res = NULL;
     int _mark = p->mark;
     if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) {
         p->error_indicator = 1;
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     int _start_lineno = p->tokens[_mark]->lineno;
@@ -16209,7 +16751,7 @@ kwarg_or_double_starred_rule(Parser *p)
     UNUSED(_start_col_offset); // Only used by EXTRA macro
     if (p->call_invalid_rules) { // invalid_kwarg
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> kwarg_or_double_starred[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "invalid_kwarg"));
@@ -16228,7 +16770,7 @@ kwarg_or_double_starred_rule(Parser *p)
     }
     { // NAME '=' expression
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> kwarg_or_double_starred[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "NAME '=' expression"));
@@ -16246,7 +16788,7 @@ kwarg_or_double_starred_rule(Parser *p)
             D(fprintf(stderr, "%*c+ kwarg_or_double_starred[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "NAME '=' expression"));
             Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
             if (_token == NULL) {
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             int _end_lineno = _token->end_lineno;
@@ -16256,7 +16798,7 @@ kwarg_or_double_starred_rule(Parser *p)
             _res = _PyPegen_keyword_or_starred ( p , CHECK ( keyword_ty , _PyAST_keyword ( a -> v . Name . id , b , EXTRA ) ) , 1 );
             if (_res == NULL && PyErr_Occurred()) {
                 p->error_indicator = 1;
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             goto done;
@@ -16267,7 +16809,7 @@ kwarg_or_double_starred_rule(Parser *p)
     }
     { // '**' expression
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> kwarg_or_double_starred[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'**' expression"));
@@ -16282,7 +16824,7 @@ kwarg_or_double_starred_rule(Parser *p)
             D(fprintf(stderr, "%*c+ kwarg_or_double_starred[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'**' expression"));
             Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
             if (_token == NULL) {
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             int _end_lineno = _token->end_lineno;
@@ -16292,7 +16834,7 @@ kwarg_or_double_starred_rule(Parser *p)
             _res = _PyPegen_keyword_or_starred ( p , CHECK ( keyword_ty , _PyAST_keyword ( NULL , a , EXTRA ) ) , 1 );
             if (_res == NULL && PyErr_Occurred()) {
                 p->error_indicator = 1;
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             goto done;
@@ -16303,7 +16845,7 @@ kwarg_or_double_starred_rule(Parser *p)
     }
     _res = NULL;
   done:
-    D(p->level--);
+    p->level--;
     return _res;
 }
 
@@ -16311,16 +16853,19 @@ kwarg_or_double_starred_rule(Parser *p)
 static expr_ty
 star_targets_rule(Parser *p)
 {
-    D(p->level++);
+    if (p->level++ == MAXSTACK) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+    }
     if (p->error_indicator) {
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     expr_ty _res = NULL;
     int _mark = p->mark;
     if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) {
         p->error_indicator = 1;
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     int _start_lineno = p->tokens[_mark]->lineno;
@@ -16329,7 +16874,7 @@ star_targets_rule(Parser *p)
     UNUSED(_start_col_offset); // Only used by EXTRA macro
     { // star_target !','
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> star_targets[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "star_target !','"));
@@ -16344,7 +16889,7 @@ star_targets_rule(Parser *p)
             _res = a;
             if (_res == NULL && PyErr_Occurred()) {
                 p->error_indicator = 1;
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             goto done;
@@ -16355,7 +16900,7 @@ star_targets_rule(Parser *p)
     }
     { // star_target ((',' star_target))* ','?
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> star_targets[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "star_target ((',' star_target))* ','?"));
@@ -16374,7 +16919,7 @@ star_targets_rule(Parser *p)
             D(fprintf(stderr, "%*c+ star_targets[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "star_target ((',' star_target))* ','?"));
             Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
             if (_token == NULL) {
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             int _end_lineno = _token->end_lineno;
@@ -16384,7 +16929,7 @@ star_targets_rule(Parser *p)
             _res = _PyAST_Tuple ( CHECK ( asdl_expr_seq * , _PyPegen_seq_insert_in_front ( p , a , b ) ) , Store , EXTRA );
             if (_res == NULL && PyErr_Occurred()) {
                 p->error_indicator = 1;
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             goto done;
@@ -16395,7 +16940,7 @@ star_targets_rule(Parser *p)
     }
     _res = NULL;
   done:
-    D(p->level--);
+    p->level--;
     return _res;
 }
 
@@ -16403,16 +16948,19 @@ star_targets_rule(Parser *p)
 static asdl_expr_seq*
 star_targets_list_seq_rule(Parser *p)
 {
-    D(p->level++);
+    if (p->level++ == MAXSTACK) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+    }
     if (p->error_indicator) {
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     asdl_expr_seq* _res = NULL;
     int _mark = p->mark;
     { // ','.star_target+ ','?
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> star_targets_list_seq[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "','.star_target+ ','?"));
@@ -16429,7 +16977,7 @@ star_targets_list_seq_rule(Parser *p)
             _res = a;
             if (_res == NULL && PyErr_Occurred()) {
                 p->error_indicator = 1;
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             goto done;
@@ -16440,7 +16988,7 @@ star_targets_list_seq_rule(Parser *p)
     }
     _res = NULL;
   done:
-    D(p->level--);
+    p->level--;
     return _res;
 }
 
@@ -16448,16 +16996,19 @@ star_targets_list_seq_rule(Parser *p)
 static asdl_expr_seq*
 star_targets_tuple_seq_rule(Parser *p)
 {
-    D(p->level++);
+    if (p->level++ == MAXSTACK) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+    }
     if (p->error_indicator) {
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     asdl_expr_seq* _res = NULL;
     int _mark = p->mark;
     { // star_target ((',' star_target))+ ','?
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> star_targets_tuple_seq[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "star_target ((',' star_target))+ ','?"));
@@ -16477,7 +17028,7 @@ star_targets_tuple_seq_rule(Parser *p)
             _res = ( asdl_expr_seq * ) _PyPegen_seq_insert_in_front ( p , a , b );
             if (_res == NULL && PyErr_Occurred()) {
                 p->error_indicator = 1;
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             goto done;
@@ -16488,7 +17039,7 @@ star_targets_tuple_seq_rule(Parser *p)
     }
     { // star_target ','
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> star_targets_tuple_seq[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "star_target ','"));
@@ -16504,7 +17055,7 @@ star_targets_tuple_seq_rule(Parser *p)
             _res = ( asdl_expr_seq * ) _PyPegen_singleton_seq ( p , a );
             if (_res == NULL && PyErr_Occurred()) {
                 p->error_indicator = 1;
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             goto done;
@@ -16515,7 +17066,7 @@ star_targets_tuple_seq_rule(Parser *p)
     }
     _res = NULL;
   done:
-    D(p->level--);
+    p->level--;
     return _res;
 }
 
@@ -16523,20 +17074,23 @@ star_targets_tuple_seq_rule(Parser *p)
 static expr_ty
 star_target_rule(Parser *p)
 {
-    D(p->level++);
+    if (p->level++ == MAXSTACK) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+    }
     if (p->error_indicator) {
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     expr_ty _res = NULL;
     if (_PyPegen_is_memoized(p, star_target_type, &_res)) {
-        D(p->level--);
+        p->level--;
         return _res;
     }
     int _mark = p->mark;
     if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) {
         p->error_indicator = 1;
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     int _start_lineno = p->tokens[_mark]->lineno;
@@ -16545,7 +17099,7 @@ star_target_rule(Parser *p)
     UNUSED(_start_col_offset); // Only used by EXTRA macro
     { // '*' (!'*' star_target)
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> star_target[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'*' (!'*' star_target)"));
@@ -16560,7 +17114,7 @@ star_target_rule(Parser *p)
             D(fprintf(stderr, "%*c+ star_target[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'*' (!'*' star_target)"));
             Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
             if (_token == NULL) {
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             int _end_lineno = _token->end_lineno;
@@ -16570,7 +17124,7 @@ star_target_rule(Parser *p)
             _res = _PyAST_Starred ( CHECK ( expr_ty , _PyPegen_set_expr_context ( p , a , Store ) ) , Store , EXTRA );
             if (_res == NULL && PyErr_Occurred()) {
                 p->error_indicator = 1;
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             goto done;
@@ -16581,7 +17135,7 @@ star_target_rule(Parser *p)
     }
     { // target_with_star_atom
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> star_target[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "target_with_star_atom"));
@@ -16601,7 +17155,7 @@ star_target_rule(Parser *p)
     _res = NULL;
   done:
     _PyPegen_insert_memo(p, _mark, star_target_type, _res);
-    D(p->level--);
+    p->level--;
     return _res;
 }
 
@@ -16612,20 +17166,23 @@ star_target_rule(Parser *p)
 static expr_ty
 target_with_star_atom_rule(Parser *p)
 {
-    D(p->level++);
+    if (p->level++ == MAXSTACK) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+    }
     if (p->error_indicator) {
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     expr_ty _res = NULL;
     if (_PyPegen_is_memoized(p, target_with_star_atom_type, &_res)) {
-        D(p->level--);
+        p->level--;
         return _res;
     }
     int _mark = p->mark;
     if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) {
         p->error_indicator = 1;
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     int _start_lineno = p->tokens[_mark]->lineno;
@@ -16634,7 +17191,7 @@ target_with_star_atom_rule(Parser *p)
     UNUSED(_start_col_offset); // Only used by EXTRA macro
     { // t_primary '.' NAME !t_lookahead
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> target_with_star_atom[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "t_primary '.' NAME !t_lookahead"));
@@ -16654,7 +17211,7 @@ target_with_star_atom_rule(Parser *p)
             D(fprintf(stderr, "%*c+ target_with_star_atom[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "t_primary '.' NAME !t_lookahead"));
             Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
             if (_token == NULL) {
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             int _end_lineno = _token->end_lineno;
@@ -16664,7 +17221,7 @@ target_with_star_atom_rule(Parser *p)
             _res = _PyAST_Attribute ( a , b -> v . Name . id , Store , EXTRA );
             if (_res == NULL && PyErr_Occurred()) {
                 p->error_indicator = 1;
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             goto done;
@@ -16675,7 +17232,7 @@ target_with_star_atom_rule(Parser *p)
     }
     { // t_primary '[' slices ']' !t_lookahead
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> target_with_star_atom[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "t_primary '[' slices ']' !t_lookahead"));
@@ -16698,7 +17255,7 @@ target_with_star_atom_rule(Parser *p)
             D(fprintf(stderr, "%*c+ target_with_star_atom[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "t_primary '[' slices ']' !t_lookahead"));
             Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
             if (_token == NULL) {
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             int _end_lineno = _token->end_lineno;
@@ -16708,7 +17265,7 @@ target_with_star_atom_rule(Parser *p)
             _res = _PyAST_Subscript ( a , b , Store , EXTRA );
             if (_res == NULL && PyErr_Occurred()) {
                 p->error_indicator = 1;
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             goto done;
@@ -16719,7 +17276,7 @@ target_with_star_atom_rule(Parser *p)
     }
     { // star_atom
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> target_with_star_atom[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "star_atom"));
@@ -16739,7 +17296,7 @@ target_with_star_atom_rule(Parser *p)
     _res = NULL;
   done:
     _PyPegen_insert_memo(p, _mark, target_with_star_atom_type, _res);
-    D(p->level--);
+    p->level--;
     return _res;
 }
 
@@ -16751,16 +17308,19 @@ target_with_star_atom_rule(Parser *p)
 static expr_ty
 star_atom_rule(Parser *p)
 {
-    D(p->level++);
+    if (p->level++ == MAXSTACK) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+    }
     if (p->error_indicator) {
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     expr_ty _res = NULL;
     int _mark = p->mark;
     if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) {
         p->error_indicator = 1;
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     int _start_lineno = p->tokens[_mark]->lineno;
@@ -16769,7 +17329,7 @@ star_atom_rule(Parser *p)
     UNUSED(_start_col_offset); // Only used by EXTRA macro
     { // NAME
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> star_atom[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "NAME"));
@@ -16782,7 +17342,7 @@ star_atom_rule(Parser *p)
             _res = _PyPegen_set_expr_context ( p , a , Store );
             if (_res == NULL && PyErr_Occurred()) {
                 p->error_indicator = 1;
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             goto done;
@@ -16793,7 +17353,7 @@ star_atom_rule(Parser *p)
     }
     { // '(' target_with_star_atom ')'
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> star_atom[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'(' target_with_star_atom ')'"));
@@ -16812,7 +17372,7 @@ star_atom_rule(Parser *p)
             _res = _PyPegen_set_expr_context ( p , a , Store );
             if (_res == NULL && PyErr_Occurred()) {
                 p->error_indicator = 1;
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             goto done;
@@ -16823,7 +17383,7 @@ star_atom_rule(Parser *p)
     }
     { // '(' star_targets_tuple_seq? ')'
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> star_atom[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'(' star_targets_tuple_seq? ')'"));
@@ -16841,7 +17401,7 @@ star_atom_rule(Parser *p)
             D(fprintf(stderr, "%*c+ star_atom[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'(' star_targets_tuple_seq? ')'"));
             Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
             if (_token == NULL) {
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             int _end_lineno = _token->end_lineno;
@@ -16851,7 +17411,7 @@ star_atom_rule(Parser *p)
             _res = _PyAST_Tuple ( a , Store , EXTRA );
             if (_res == NULL && PyErr_Occurred()) {
                 p->error_indicator = 1;
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             goto done;
@@ -16862,7 +17422,7 @@ star_atom_rule(Parser *p)
     }
     { // '[' star_targets_list_seq? ']'
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> star_atom[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'[' star_targets_list_seq? ']'"));
@@ -16880,7 +17440,7 @@ star_atom_rule(Parser *p)
             D(fprintf(stderr, "%*c+ star_atom[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'[' star_targets_list_seq? ']'"));
             Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
             if (_token == NULL) {
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             int _end_lineno = _token->end_lineno;
@@ -16890,7 +17450,7 @@ star_atom_rule(Parser *p)
             _res = _PyAST_List ( a , Store , EXTRA );
             if (_res == NULL && PyErr_Occurred()) {
                 p->error_indicator = 1;
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             goto done;
@@ -16901,7 +17461,7 @@ star_atom_rule(Parser *p)
     }
     _res = NULL;
   done:
-    D(p->level--);
+    p->level--;
     return _res;
 }
 
@@ -16909,16 +17469,19 @@ star_atom_rule(Parser *p)
 static expr_ty
 single_target_rule(Parser *p)
 {
-    D(p->level++);
+    if (p->level++ == MAXSTACK) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+    }
     if (p->error_indicator) {
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     expr_ty _res = NULL;
     int _mark = p->mark;
     { // single_subscript_attribute_target
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> single_target[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "single_subscript_attribute_target"));
@@ -16937,7 +17500,7 @@ single_target_rule(Parser *p)
     }
     { // NAME
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> single_target[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "NAME"));
@@ -16950,7 +17513,7 @@ single_target_rule(Parser *p)
             _res = _PyPegen_set_expr_context ( p , a , Store );
             if (_res == NULL && PyErr_Occurred()) {
                 p->error_indicator = 1;
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             goto done;
@@ -16961,7 +17524,7 @@ single_target_rule(Parser *p)
     }
     { // '(' single_target ')'
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> single_target[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'(' single_target ')'"));
@@ -16980,7 +17543,7 @@ single_target_rule(Parser *p)
             _res = a;
             if (_res == NULL && PyErr_Occurred()) {
                 p->error_indicator = 1;
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             goto done;
@@ -16991,7 +17554,7 @@ single_target_rule(Parser *p)
     }
     _res = NULL;
   done:
-    D(p->level--);
+    p->level--;
     return _res;
 }
 
@@ -17001,16 +17564,19 @@ single_target_rule(Parser *p)
 static expr_ty
 single_subscript_attribute_target_rule(Parser *p)
 {
-    D(p->level++);
+    if (p->level++ == MAXSTACK) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+    }
     if (p->error_indicator) {
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     expr_ty _res = NULL;
     int _mark = p->mark;
     if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) {
         p->error_indicator = 1;
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     int _start_lineno = p->tokens[_mark]->lineno;
@@ -17019,7 +17585,7 @@ single_subscript_attribute_target_rule(Parser *p)
     UNUSED(_start_col_offset); // Only used by EXTRA macro
     { // t_primary '.' NAME !t_lookahead
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> single_subscript_attribute_target[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "t_primary '.' NAME !t_lookahead"));
@@ -17039,7 +17605,7 @@ single_subscript_attribute_target_rule(Parser *p)
             D(fprintf(stderr, "%*c+ single_subscript_attribute_target[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "t_primary '.' NAME !t_lookahead"));
             Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
             if (_token == NULL) {
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             int _end_lineno = _token->end_lineno;
@@ -17049,7 +17615,7 @@ single_subscript_attribute_target_rule(Parser *p)
             _res = _PyAST_Attribute ( a , b -> v . Name . id , Store , EXTRA );
             if (_res == NULL && PyErr_Occurred()) {
                 p->error_indicator = 1;
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             goto done;
@@ -17060,7 +17626,7 @@ single_subscript_attribute_target_rule(Parser *p)
     }
     { // t_primary '[' slices ']' !t_lookahead
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> single_subscript_attribute_target[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "t_primary '[' slices ']' !t_lookahead"));
@@ -17083,7 +17649,7 @@ single_subscript_attribute_target_rule(Parser *p)
             D(fprintf(stderr, "%*c+ single_subscript_attribute_target[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "t_primary '[' slices ']' !t_lookahead"));
             Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
             if (_token == NULL) {
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             int _end_lineno = _token->end_lineno;
@@ -17093,7 +17659,7 @@ single_subscript_attribute_target_rule(Parser *p)
             _res = _PyAST_Subscript ( a , b , Store , EXTRA );
             if (_res == NULL && PyErr_Occurred()) {
                 p->error_indicator = 1;
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             goto done;
@@ -17104,7 +17670,7 @@ single_subscript_attribute_target_rule(Parser *p)
     }
     _res = NULL;
   done:
-    D(p->level--);
+    p->level--;
     return _res;
 }
 
@@ -17112,16 +17678,19 @@ single_subscript_attribute_target_rule(Parser *p)
 static asdl_expr_seq*
 del_targets_rule(Parser *p)
 {
-    D(p->level++);
+    if (p->level++ == MAXSTACK) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+    }
     if (p->error_indicator) {
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     asdl_expr_seq* _res = NULL;
     int _mark = p->mark;
     { // ','.del_target+ ','?
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> del_targets[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "','.del_target+ ','?"));
@@ -17138,7 +17707,7 @@ del_targets_rule(Parser *p)
             _res = a;
             if (_res == NULL && PyErr_Occurred()) {
                 p->error_indicator = 1;
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             goto done;
@@ -17149,7 +17718,7 @@ del_targets_rule(Parser *p)
     }
     _res = NULL;
   done:
-    D(p->level--);
+    p->level--;
     return _res;
 }
 
@@ -17160,20 +17729,23 @@ del_targets_rule(Parser *p)
 static expr_ty
 del_target_rule(Parser *p)
 {
-    D(p->level++);
+    if (p->level++ == MAXSTACK) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+    }
     if (p->error_indicator) {
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     expr_ty _res = NULL;
     if (_PyPegen_is_memoized(p, del_target_type, &_res)) {
-        D(p->level--);
+        p->level--;
         return _res;
     }
     int _mark = p->mark;
     if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) {
         p->error_indicator = 1;
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     int _start_lineno = p->tokens[_mark]->lineno;
@@ -17182,7 +17754,7 @@ del_target_rule(Parser *p)
     UNUSED(_start_col_offset); // Only used by EXTRA macro
     { // t_primary '.' NAME !t_lookahead
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> del_target[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "t_primary '.' NAME !t_lookahead"));
@@ -17202,7 +17774,7 @@ del_target_rule(Parser *p)
             D(fprintf(stderr, "%*c+ del_target[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "t_primary '.' NAME !t_lookahead"));
             Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
             if (_token == NULL) {
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             int _end_lineno = _token->end_lineno;
@@ -17212,7 +17784,7 @@ del_target_rule(Parser *p)
             _res = _PyAST_Attribute ( a , b -> v . Name . id , Del , EXTRA );
             if (_res == NULL && PyErr_Occurred()) {
                 p->error_indicator = 1;
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             goto done;
@@ -17223,7 +17795,7 @@ del_target_rule(Parser *p)
     }
     { // t_primary '[' slices ']' !t_lookahead
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> del_target[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "t_primary '[' slices ']' !t_lookahead"));
@@ -17246,7 +17818,7 @@ del_target_rule(Parser *p)
             D(fprintf(stderr, "%*c+ del_target[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "t_primary '[' slices ']' !t_lookahead"));
             Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
             if (_token == NULL) {
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             int _end_lineno = _token->end_lineno;
@@ -17256,7 +17828,7 @@ del_target_rule(Parser *p)
             _res = _PyAST_Subscript ( a , b , Del , EXTRA );
             if (_res == NULL && PyErr_Occurred()) {
                 p->error_indicator = 1;
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             goto done;
@@ -17267,7 +17839,7 @@ del_target_rule(Parser *p)
     }
     { // del_t_atom
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> del_target[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "del_t_atom"));
@@ -17287,7 +17859,7 @@ del_target_rule(Parser *p)
     _res = NULL;
   done:
     _PyPegen_insert_memo(p, _mark, del_target_type, _res);
-    D(p->level--);
+    p->level--;
     return _res;
 }
 
@@ -17295,16 +17867,19 @@ del_target_rule(Parser *p)
 static expr_ty
 del_t_atom_rule(Parser *p)
 {
-    D(p->level++);
+    if (p->level++ == MAXSTACK) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+    }
     if (p->error_indicator) {
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     expr_ty _res = NULL;
     int _mark = p->mark;
     if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) {
         p->error_indicator = 1;
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     int _start_lineno = p->tokens[_mark]->lineno;
@@ -17313,7 +17888,7 @@ del_t_atom_rule(Parser *p)
     UNUSED(_start_col_offset); // Only used by EXTRA macro
     { // NAME
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> del_t_atom[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "NAME"));
@@ -17326,7 +17901,7 @@ del_t_atom_rule(Parser *p)
             _res = _PyPegen_set_expr_context ( p , a , Del );
             if (_res == NULL && PyErr_Occurred()) {
                 p->error_indicator = 1;
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             goto done;
@@ -17337,7 +17912,7 @@ del_t_atom_rule(Parser *p)
     }
     { // '(' del_target ')'
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> del_t_atom[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'(' del_target ')'"));
@@ -17356,7 +17931,7 @@ del_t_atom_rule(Parser *p)
             _res = _PyPegen_set_expr_context ( p , a , Del );
             if (_res == NULL && PyErr_Occurred()) {
                 p->error_indicator = 1;
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             goto done;
@@ -17367,7 +17942,7 @@ del_t_atom_rule(Parser *p)
     }
     { // '(' del_targets? ')'
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> del_t_atom[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'(' del_targets? ')'"));
@@ -17385,7 +17960,7 @@ del_t_atom_rule(Parser *p)
             D(fprintf(stderr, "%*c+ del_t_atom[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'(' del_targets? ')'"));
             Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
             if (_token == NULL) {
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             int _end_lineno = _token->end_lineno;
@@ -17395,7 +17970,7 @@ del_t_atom_rule(Parser *p)
             _res = _PyAST_Tuple ( a , Del , EXTRA );
             if (_res == NULL && PyErr_Occurred()) {
                 p->error_indicator = 1;
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             goto done;
@@ -17406,7 +17981,7 @@ del_t_atom_rule(Parser *p)
     }
     { // '[' del_targets? ']'
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> del_t_atom[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'[' del_targets? ']'"));
@@ -17424,7 +17999,7 @@ del_t_atom_rule(Parser *p)
             D(fprintf(stderr, "%*c+ del_t_atom[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'[' del_targets? ']'"));
             Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
             if (_token == NULL) {
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             int _end_lineno = _token->end_lineno;
@@ -17434,7 +18009,7 @@ del_t_atom_rule(Parser *p)
             _res = _PyAST_List ( a , Del , EXTRA );
             if (_res == NULL && PyErr_Occurred()) {
                 p->error_indicator = 1;
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             goto done;
@@ -17445,7 +18020,7 @@ del_t_atom_rule(Parser *p)
     }
     _res = NULL;
   done:
-    D(p->level--);
+    p->level--;
     return _res;
 }
 
@@ -17460,10 +18035,13 @@ static expr_ty t_primary_raw(Parser *);
 static expr_ty
 t_primary_rule(Parser *p)
 {
-    D(p->level++);
+    if (p->level++ == MAXSTACK) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+    }
     expr_ty _res = NULL;
     if (_PyPegen_is_memoized(p, t_primary_type, &_res)) {
-        D(p->level--);
+        p->level--;
         return _res;
     }
     int _mark = p->mark;
@@ -17471,37 +18049,42 @@ t_primary_rule(Parser *p)
     while (1) {
         int tmpvar_9 = _PyPegen_update_memo(p, _mark, t_primary_type, _res);
         if (tmpvar_9) {
-            D(p->level--);
+            p->level--;
             return _res;
         }
         p->mark = _mark;
         p->in_raw_rule++;
         void *_raw = t_primary_raw(p);
         p->in_raw_rule--;
-        if (p->error_indicator)
+        if (p->error_indicator) {
+            p->level--;
             return NULL;
+        }
         if (_raw == NULL || p->mark <= _resmark)
             break;
         _resmark = p->mark;
         _res = _raw;
     }
     p->mark = _resmark;
-    D(p->level--);
+    p->level--;
     return _res;
 }
 static expr_ty
 t_primary_raw(Parser *p)
 {
-    D(p->level++);
+    if (p->level++ == MAXSTACK) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+    }
     if (p->error_indicator) {
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     expr_ty _res = NULL;
     int _mark = p->mark;
     if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) {
         p->error_indicator = 1;
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     int _start_lineno = p->tokens[_mark]->lineno;
@@ -17510,7 +18093,7 @@ t_primary_raw(Parser *p)
     UNUSED(_start_col_offset); // Only used by EXTRA macro
     { // t_primary '.' NAME &t_lookahead
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> t_primary[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "t_primary '.' NAME &t_lookahead"));
@@ -17530,7 +18113,7 @@ t_primary_raw(Parser *p)
             D(fprintf(stderr, "%*c+ t_primary[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "t_primary '.' NAME &t_lookahead"));
             Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
             if (_token == NULL) {
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             int _end_lineno = _token->end_lineno;
@@ -17540,7 +18123,7 @@ t_primary_raw(Parser *p)
             _res = _PyAST_Attribute ( a , b -> v . Name . id , Load , EXTRA );
             if (_res == NULL && PyErr_Occurred()) {
                 p->error_indicator = 1;
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             goto done;
@@ -17551,7 +18134,7 @@ t_primary_raw(Parser *p)
     }
     { // t_primary '[' slices ']' &t_lookahead
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> t_primary[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "t_primary '[' slices ']' &t_lookahead"));
@@ -17574,7 +18157,7 @@ t_primary_raw(Parser *p)
             D(fprintf(stderr, "%*c+ t_primary[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "t_primary '[' slices ']' &t_lookahead"));
             Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
             if (_token == NULL) {
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             int _end_lineno = _token->end_lineno;
@@ -17584,7 +18167,7 @@ t_primary_raw(Parser *p)
             _res = _PyAST_Subscript ( a , b , Load , EXTRA );
             if (_res == NULL && PyErr_Occurred()) {
                 p->error_indicator = 1;
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             goto done;
@@ -17595,7 +18178,7 @@ t_primary_raw(Parser *p)
     }
     { // t_primary genexp &t_lookahead
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> t_primary[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "t_primary genexp &t_lookahead"));
@@ -17612,7 +18195,7 @@ t_primary_raw(Parser *p)
             D(fprintf(stderr, "%*c+ t_primary[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "t_primary genexp &t_lookahead"));
             Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
             if (_token == NULL) {
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             int _end_lineno = _token->end_lineno;
@@ -17622,7 +18205,7 @@ t_primary_raw(Parser *p)
             _res = _PyAST_Call ( a , CHECK ( asdl_expr_seq * , ( asdl_expr_seq * ) _PyPegen_singleton_seq ( p , b ) ) , NULL , EXTRA );
             if (_res == NULL && PyErr_Occurred()) {
                 p->error_indicator = 1;
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             goto done;
@@ -17633,7 +18216,7 @@ t_primary_raw(Parser *p)
     }
     { // t_primary '(' arguments? ')' &t_lookahead
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> t_primary[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "t_primary '(' arguments? ')' &t_lookahead"));
@@ -17656,7 +18239,7 @@ t_primary_raw(Parser *p)
             D(fprintf(stderr, "%*c+ t_primary[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "t_primary '(' arguments? ')' &t_lookahead"));
             Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
             if (_token == NULL) {
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             int _end_lineno = _token->end_lineno;
@@ -17666,7 +18249,7 @@ t_primary_raw(Parser *p)
             _res = _PyAST_Call ( a , ( b ) ? ( ( expr_ty ) b ) -> v . Call . args : NULL , ( b ) ? ( ( expr_ty ) b ) -> v . Call . keywords : NULL , EXTRA );
             if (_res == NULL && PyErr_Occurred()) {
                 p->error_indicator = 1;
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             goto done;
@@ -17677,7 +18260,7 @@ t_primary_raw(Parser *p)
     }
     { // atom &t_lookahead
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> t_primary[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "atom &t_lookahead"));
@@ -17692,7 +18275,7 @@ t_primary_raw(Parser *p)
             _res = a;
             if (_res == NULL && PyErr_Occurred()) {
                 p->error_indicator = 1;
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             goto done;
@@ -17703,7 +18286,7 @@ t_primary_raw(Parser *p)
     }
     _res = NULL;
   done:
-    D(p->level--);
+    p->level--;
     return _res;
 }
 
@@ -17711,16 +18294,19 @@ t_primary_raw(Parser *p)
 static void *
 t_lookahead_rule(Parser *p)
 {
-    D(p->level++);
+    if (p->level++ == MAXSTACK) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+    }
     if (p->error_indicator) {
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     void * _res = NULL;
     int _mark = p->mark;
     { // '('
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> t_lookahead[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'('"));
@@ -17739,7 +18325,7 @@ t_lookahead_rule(Parser *p)
     }
     { // '['
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> t_lookahead[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'['"));
@@ -17758,7 +18344,7 @@ t_lookahead_rule(Parser *p)
     }
     { // '.'
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> t_lookahead[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'.'"));
@@ -17777,7 +18363,7 @@ t_lookahead_rule(Parser *p)
     }
     _res = NULL;
   done:
-    D(p->level--);
+    p->level--;
     return _res;
 }
 
@@ -17791,16 +18377,19 @@ t_lookahead_rule(Parser *p)
 static void *
 invalid_arguments_rule(Parser *p)
 {
-    D(p->level++);
+    if (p->level++ == MAXSTACK) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+    }
     if (p->error_indicator) {
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     void * _res = NULL;
     int _mark = p->mark;
     { // args ',' '*'
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> invalid_arguments[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "args ',' '*'"));
@@ -17819,7 +18408,7 @@ invalid_arguments_rule(Parser *p)
             _res = RAISE_SYNTAX_ERROR_KNOWN_LOCATION ( a , "iterable argument unpacking follows keyword argument unpacking" );
             if (_res == NULL && PyErr_Occurred()) {
                 p->error_indicator = 1;
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             goto done;
@@ -17830,7 +18419,7 @@ invalid_arguments_rule(Parser *p)
     }
     { // expression for_if_clauses ',' [args | expression for_if_clauses]
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> invalid_arguments[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "expression for_if_clauses ',' [args | expression for_if_clauses]"));
@@ -17853,7 +18442,7 @@ invalid_arguments_rule(Parser *p)
             _res = RAISE_SYNTAX_ERROR_KNOWN_RANGE ( a , PyPegen_last_item ( b , comprehension_ty ) -> target , "Generator expression must be parenthesized" );
             if (_res == NULL && PyErr_Occurred()) {
                 p->error_indicator = 1;
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             goto done;
@@ -17864,7 +18453,7 @@ invalid_arguments_rule(Parser *p)
     }
     { // NAME '=' expression for_if_clauses
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> invalid_arguments[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "NAME '=' expression for_if_clauses"));
@@ -17886,7 +18475,7 @@ invalid_arguments_rule(Parser *p)
             _res = RAISE_SYNTAX_ERROR_KNOWN_RANGE ( a , b , "invalid syntax. Maybe you meant '==' or ':=' instead of '='?" );
             if (_res == NULL && PyErr_Occurred()) {
                 p->error_indicator = 1;
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             goto done;
@@ -17897,7 +18486,7 @@ invalid_arguments_rule(Parser *p)
     }
     { // args for_if_clauses
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> invalid_arguments[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "args for_if_clauses"));
@@ -17913,7 +18502,7 @@ invalid_arguments_rule(Parser *p)
             _res = _PyPegen_nonparen_genexp_in_call ( p , a , b );
             if (_res == NULL && PyErr_Occurred()) {
                 p->error_indicator = 1;
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             goto done;
@@ -17924,7 +18513,7 @@ invalid_arguments_rule(Parser *p)
     }
     { // args ',' expression for_if_clauses
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> invalid_arguments[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "args ',' expression for_if_clauses"));
@@ -17946,7 +18535,7 @@ invalid_arguments_rule(Parser *p)
             _res = RAISE_SYNTAX_ERROR_KNOWN_RANGE ( a , asdl_seq_GET ( b , b -> size - 1 ) -> target , "Generator expression must be parenthesized" );
             if (_res == NULL && PyErr_Occurred()) {
                 p->error_indicator = 1;
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             goto done;
@@ -17957,7 +18546,7 @@ invalid_arguments_rule(Parser *p)
     }
     { // args ',' args
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> invalid_arguments[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "args ',' args"));
@@ -17976,7 +18565,7 @@ invalid_arguments_rule(Parser *p)
             _res = _PyPegen_arguments_parsing_error ( p , a );
             if (_res == NULL && PyErr_Occurred()) {
                 p->error_indicator = 1;
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             goto done;
@@ -17987,7 +18576,7 @@ invalid_arguments_rule(Parser *p)
     }
     _res = NULL;
   done:
-    D(p->level--);
+    p->level--;
     return _res;
 }
 
@@ -17998,16 +18587,19 @@ invalid_arguments_rule(Parser *p)
 static void *
 invalid_kwarg_rule(Parser *p)
 {
-    D(p->level++);
+    if (p->level++ == MAXSTACK) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+    }
     if (p->error_indicator) {
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     void * _res = NULL;
     int _mark = p->mark;
     { // ('True' | 'False' | 'None') '='
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> invalid_kwarg[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "('True' | 'False' | 'None') '='"));
@@ -18023,7 +18615,7 @@ invalid_kwarg_rule(Parser *p)
             _res = RAISE_SYNTAX_ERROR_KNOWN_RANGE ( a , b , "cannot assign to %s" , PyBytes_AS_STRING ( a -> bytes ) );
             if (_res == NULL && PyErr_Occurred()) {
                 p->error_indicator = 1;
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             goto done;
@@ -18034,7 +18626,7 @@ invalid_kwarg_rule(Parser *p)
     }
     { // NAME '=' expression for_if_clauses
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> invalid_kwarg[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "NAME '=' expression for_if_clauses"));
@@ -18056,7 +18648,7 @@ invalid_kwarg_rule(Parser *p)
             _res = RAISE_SYNTAX_ERROR_KNOWN_RANGE ( a , b , "invalid syntax. Maybe you meant '==' or ':=' instead of '='?" );
             if (_res == NULL && PyErr_Occurred()) {
                 p->error_indicator = 1;
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             goto done;
@@ -18067,7 +18659,7 @@ invalid_kwarg_rule(Parser *p)
     }
     { // !(NAME '=') expression '='
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> invalid_kwarg[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "!(NAME '=') expression '='"));
@@ -18085,7 +18677,7 @@ invalid_kwarg_rule(Parser *p)
             _res = RAISE_SYNTAX_ERROR_KNOWN_RANGE ( a , b , "expression cannot contain assignment, perhaps you meant \"==\"?" );
             if (_res == NULL && PyErr_Occurred()) {
                 p->error_indicator = 1;
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             goto done;
@@ -18096,7 +18688,7 @@ invalid_kwarg_rule(Parser *p)
     }
     _res = NULL;
   done:
-    D(p->level--);
+    p->level--;
     return _res;
 }
 
@@ -18107,16 +18699,19 @@ invalid_kwarg_rule(Parser *p)
 static expr_ty
 expression_without_invalid_rule(Parser *p)
 {
-    D(p->level++);
+    if (p->level++ == MAXSTACK) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+    }
     if (p->error_indicator) {
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     expr_ty _res = NULL;
     int _mark = p->mark;
     if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) {
         p->error_indicator = 1;
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     int _start_lineno = p->tokens[_mark]->lineno;
@@ -18125,7 +18720,7 @@ expression_without_invalid_rule(Parser *p)
     UNUSED(_start_col_offset); // Only used by EXTRA macro
     { // disjunction 'if' disjunction 'else' expression
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> expression_without_invalid[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "disjunction 'if' disjunction 'else' expression"));
@@ -18149,7 +18744,7 @@ expression_without_invalid_rule(Parser *p)
             D(fprintf(stderr, "%*c+ expression_without_invalid[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "disjunction 'if' disjunction 'else' expression"));
             Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
             if (_token == NULL) {
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             int _end_lineno = _token->end_lineno;
@@ -18159,7 +18754,7 @@ expression_without_invalid_rule(Parser *p)
             _res = _PyAST_IfExp ( b , a , c , EXTRA );
             if (_res == NULL && PyErr_Occurred()) {
                 p->error_indicator = 1;
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             goto done;
@@ -18170,7 +18765,7 @@ expression_without_invalid_rule(Parser *p)
     }
     { // disjunction
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> expression_without_invalid[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "disjunction"));
@@ -18189,7 +18784,7 @@ expression_without_invalid_rule(Parser *p)
     }
     { // lambdef
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> expression_without_invalid[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "lambdef"));
@@ -18208,7 +18803,7 @@ expression_without_invalid_rule(Parser *p)
     }
     _res = NULL;
   done:
-    D(p->level--);
+    p->level--;
     return _res;
 }
 
@@ -18216,16 +18811,19 @@ expression_without_invalid_rule(Parser *p)
 static void *
 invalid_legacy_expression_rule(Parser *p)
 {
-    D(p->level++);
+    if (p->level++ == MAXSTACK) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+    }
     if (p->error_indicator) {
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     void * _res = NULL;
     int _mark = p->mark;
     { // NAME !'(' star_expressions
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> invalid_legacy_expression[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "NAME !'(' star_expressions"));
@@ -18243,7 +18841,7 @@ invalid_legacy_expression_rule(Parser *p)
             _res = _PyPegen_check_legacy_stmt ( p , a ) ? RAISE_SYNTAX_ERROR_KNOWN_RANGE ( a , b , "Missing parentheses in call to '%U'. Did you mean %U(...)?" , a -> v . Name . id , a -> v . Name . id ) : NULL;
             if (_res == NULL && PyErr_Occurred()) {
                 p->error_indicator = 1;
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             goto done;
@@ -18254,7 +18852,7 @@ invalid_legacy_expression_rule(Parser *p)
     }
     _res = NULL;
   done:
-    D(p->level--);
+    p->level--;
     return _res;
 }
 
@@ -18264,16 +18862,19 @@ invalid_legacy_expression_rule(Parser *p)
 static void *
 invalid_expression_rule(Parser *p)
 {
-    D(p->level++);
+    if (p->level++ == MAXSTACK) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+    }
     if (p->error_indicator) {
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     void * _res = NULL;
     int _mark = p->mark;
     { // !(NAME STRING | SOFT_KEYWORD) disjunction expression_without_invalid
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> invalid_expression[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "!(NAME STRING | SOFT_KEYWORD) disjunction expression_without_invalid"));
@@ -18291,7 +18892,7 @@ invalid_expression_rule(Parser *p)
             _res = _PyPegen_check_legacy_stmt ( p , a ) ? NULL : p -> tokens [ p -> mark - 1 ] -> level == 0 ? NULL : RAISE_SYNTAX_ERROR_KNOWN_RANGE ( a , b , "invalid syntax. Perhaps you forgot a comma?" );
             if (_res == NULL && PyErr_Occurred()) {
                 p->error_indicator = 1;
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             goto done;
@@ -18302,7 +18903,7 @@ invalid_expression_rule(Parser *p)
     }
     { // disjunction 'if' disjunction !('else' | ':')
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> invalid_expression[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "disjunction 'if' disjunction !('else' | ':')"));
@@ -18323,7 +18924,7 @@ invalid_expression_rule(Parser *p)
             _res = RAISE_SYNTAX_ERROR_KNOWN_RANGE ( a , b , "expected 'else' after 'if' expression" );
             if (_res == NULL && PyErr_Occurred()) {
                 p->error_indicator = 1;
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             goto done;
@@ -18334,7 +18935,7 @@ invalid_expression_rule(Parser *p)
     }
     _res = NULL;
   done:
-    D(p->level--);
+    p->level--;
     return _res;
 }
 
@@ -18345,16 +18946,19 @@ invalid_expression_rule(Parser *p)
 static void *
 invalid_named_expression_rule(Parser *p)
 {
-    D(p->level++);
+    if (p->level++ == MAXSTACK) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+    }
     if (p->error_indicator) {
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     void * _res = NULL;
     int _mark = p->mark;
     { // expression ':=' expression
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> invalid_named_expression[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "expression ':=' expression"));
@@ -18373,7 +18977,7 @@ invalid_named_expression_rule(Parser *p)
             _res = RAISE_SYNTAX_ERROR_KNOWN_LOCATION ( a , "cannot use assignment expressions with %s" , _PyPegen_get_expr_name ( a ) );
             if (_res == NULL && PyErr_Occurred()) {
                 p->error_indicator = 1;
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             goto done;
@@ -18384,7 +18988,7 @@ invalid_named_expression_rule(Parser *p)
     }
     { // NAME '=' bitwise_or !('=' | ':=')
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> invalid_named_expression[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "NAME '=' bitwise_or !('=' | ':=')"));
@@ -18405,7 +19009,7 @@ invalid_named_expression_rule(Parser *p)
             _res = p -> in_raw_rule ? NULL : RAISE_SYNTAX_ERROR_KNOWN_RANGE ( a , b , "invalid syntax. Maybe you meant '==' or ':=' instead of '='?" );
             if (_res == NULL && PyErr_Occurred()) {
                 p->error_indicator = 1;
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             goto done;
@@ -18416,7 +19020,7 @@ invalid_named_expression_rule(Parser *p)
     }
     { // !(list | tuple | genexp | 'True' | 'None' | 'False') bitwise_or '=' bitwise_or !('=' | ':=')
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> invalid_named_expression[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "!(list | tuple | genexp | 'True' | 'None' | 'False') bitwise_or '=' bitwise_or !('=' | ':=')"));
@@ -18439,7 +19043,7 @@ invalid_named_expression_rule(Parser *p)
             _res = p -> in_raw_rule ? NULL : RAISE_SYNTAX_ERROR_KNOWN_LOCATION ( a , "cannot assign to %s here. Maybe you meant '==' instead of '='?" , _PyPegen_get_expr_name ( a ) );
             if (_res == NULL && PyErr_Occurred()) {
                 p->error_indicator = 1;
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             goto done;
@@ -18450,7 +19054,7 @@ invalid_named_expression_rule(Parser *p)
     }
     _res = NULL;
   done:
-    D(p->level--);
+    p->level--;
     return _res;
 }
 
@@ -18464,16 +19068,19 @@ invalid_named_expression_rule(Parser *p)
 static void *
 invalid_assignment_rule(Parser *p)
 {
-    D(p->level++);
+    if (p->level++ == MAXSTACK) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+    }
     if (p->error_indicator) {
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     void * _res = NULL;
     int _mark = p->mark;
     { // invalid_ann_assign_target ':' expression
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> invalid_assignment[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "invalid_ann_assign_target ':' expression"));
@@ -18492,7 +19099,7 @@ invalid_assignment_rule(Parser *p)
             _res = RAISE_SYNTAX_ERROR_KNOWN_LOCATION ( a , "only single target (not %s) can be annotated" , _PyPegen_get_expr_name ( a ) );
             if (_res == NULL && PyErr_Occurred()) {
                 p->error_indicator = 1;
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             goto done;
@@ -18503,7 +19110,7 @@ invalid_assignment_rule(Parser *p)
     }
     { // star_named_expression ',' star_named_expressions* ':' expression
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> invalid_assignment[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "star_named_expression ',' star_named_expressions* ':' expression"));
@@ -18528,7 +19135,7 @@ invalid_assignment_rule(Parser *p)
             _res = RAISE_SYNTAX_ERROR_KNOWN_LOCATION ( a , "only single target (not tuple) can be annotated" );
             if (_res == NULL && PyErr_Occurred()) {
                 p->error_indicator = 1;
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             goto done;
@@ -18539,7 +19146,7 @@ invalid_assignment_rule(Parser *p)
     }
     { // expression ':' expression
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> invalid_assignment[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "expression ':' expression"));
@@ -18558,7 +19165,7 @@ invalid_assignment_rule(Parser *p)
             _res = RAISE_SYNTAX_ERROR_KNOWN_LOCATION ( a , "illegal target for annotation" );
             if (_res == NULL && PyErr_Occurred()) {
                 p->error_indicator = 1;
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             goto done;
@@ -18569,7 +19176,7 @@ invalid_assignment_rule(Parser *p)
     }
     { // ((star_targets '='))* star_expressions '='
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> invalid_assignment[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "((star_targets '='))* star_expressions '='"));
@@ -18588,7 +19195,7 @@ invalid_assignment_rule(Parser *p)
             _res = RAISE_SYNTAX_ERROR_INVALID_TARGET ( STAR_TARGETS , a );
             if (_res == NULL && PyErr_Occurred()) {
                 p->error_indicator = 1;
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             goto done;
@@ -18599,7 +19206,7 @@ invalid_assignment_rule(Parser *p)
     }
     { // ((star_targets '='))* yield_expr '='
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> invalid_assignment[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "((star_targets '='))* yield_expr '='"));
@@ -18618,7 +19225,7 @@ invalid_assignment_rule(Parser *p)
             _res = RAISE_SYNTAX_ERROR_KNOWN_LOCATION ( a , "assignment to yield expression not possible" );
             if (_res == NULL && PyErr_Occurred()) {
                 p->error_indicator = 1;
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             goto done;
@@ -18629,7 +19236,7 @@ invalid_assignment_rule(Parser *p)
     }
     { // star_expressions augassign (yield_expr | star_expressions)
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> invalid_assignment[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "star_expressions augassign (yield_expr | star_expressions)"));
@@ -18648,7 +19255,7 @@ invalid_assignment_rule(Parser *p)
             _res = RAISE_SYNTAX_ERROR_KNOWN_LOCATION ( a , "'%s' is an illegal expression for augmented assignment" , _PyPegen_get_expr_name ( a ) );
             if (_res == NULL && PyErr_Occurred()) {
                 p->error_indicator = 1;
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             goto done;
@@ -18659,7 +19266,7 @@ invalid_assignment_rule(Parser *p)
     }
     _res = NULL;
   done:
-    D(p->level--);
+    p->level--;
     return _res;
 }
 
@@ -18667,16 +19274,19 @@ invalid_assignment_rule(Parser *p)
 static expr_ty
 invalid_ann_assign_target_rule(Parser *p)
 {
-    D(p->level++);
+    if (p->level++ == MAXSTACK) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+    }
     if (p->error_indicator) {
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     expr_ty _res = NULL;
     int _mark = p->mark;
     { // list
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> invalid_ann_assign_target[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "list"));
@@ -18695,7 +19305,7 @@ invalid_ann_assign_target_rule(Parser *p)
     }
     { // tuple
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> invalid_ann_assign_target[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "tuple"));
@@ -18714,7 +19324,7 @@ invalid_ann_assign_target_rule(Parser *p)
     }
     { // '(' invalid_ann_assign_target ')'
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> invalid_ann_assign_target[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'(' invalid_ann_assign_target ')'"));
@@ -18733,7 +19343,7 @@ invalid_ann_assign_target_rule(Parser *p)
             _res = a;
             if (_res == NULL && PyErr_Occurred()) {
                 p->error_indicator = 1;
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             goto done;
@@ -18744,7 +19354,7 @@ invalid_ann_assign_target_rule(Parser *p)
     }
     _res = NULL;
   done:
-    D(p->level--);
+    p->level--;
     return _res;
 }
 
@@ -18752,16 +19362,19 @@ invalid_ann_assign_target_rule(Parser *p)
 static void *
 invalid_del_stmt_rule(Parser *p)
 {
-    D(p->level++);
+    if (p->level++ == MAXSTACK) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+    }
     if (p->error_indicator) {
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     void * _res = NULL;
     int _mark = p->mark;
     { // 'del' star_expressions
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> invalid_del_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'del' star_expressions"));
@@ -18777,7 +19390,7 @@ invalid_del_stmt_rule(Parser *p)
             _res = RAISE_SYNTAX_ERROR_INVALID_TARGET ( DEL_TARGETS , a );
             if (_res == NULL && PyErr_Occurred()) {
                 p->error_indicator = 1;
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             goto done;
@@ -18788,7 +19401,7 @@ invalid_del_stmt_rule(Parser *p)
     }
     _res = NULL;
   done:
-    D(p->level--);
+    p->level--;
     return _res;
 }
 
@@ -18796,16 +19409,19 @@ invalid_del_stmt_rule(Parser *p)
 static void *
 invalid_block_rule(Parser *p)
 {
-    D(p->level++);
+    if (p->level++ == MAXSTACK) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+    }
     if (p->error_indicator) {
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     void * _res = NULL;
     int _mark = p->mark;
     { // NEWLINE !INDENT
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> invalid_block[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "NEWLINE !INDENT"));
@@ -18820,7 +19436,7 @@ invalid_block_rule(Parser *p)
             _res = RAISE_INDENTATION_ERROR ( "expected an indented block" );
             if (_res == NULL && PyErr_Occurred()) {
                 p->error_indicator = 1;
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             goto done;
@@ -18831,7 +19447,7 @@ invalid_block_rule(Parser *p)
     }
     _res = NULL;
   done:
-    D(p->level--);
+    p->level--;
     return _res;
 }
 
@@ -18842,16 +19458,19 @@ invalid_block_rule(Parser *p)
 static void *
 invalid_comprehension_rule(Parser *p)
 {
-    D(p->level++);
+    if (p->level++ == MAXSTACK) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+    }
     if (p->error_indicator) {
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     void * _res = NULL;
     int _mark = p->mark;
     { // ('[' | '(' | '{') starred_expression for_if_clauses
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> invalid_comprehension[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "('[' | '(' | '{') starred_expression for_if_clauses"));
@@ -18870,7 +19489,7 @@ invalid_comprehension_rule(Parser *p)
             _res = RAISE_SYNTAX_ERROR_KNOWN_LOCATION ( a , "iterable unpacking cannot be used in comprehension" );
             if (_res == NULL && PyErr_Occurred()) {
                 p->error_indicator = 1;
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             goto done;
@@ -18881,7 +19500,7 @@ invalid_comprehension_rule(Parser *p)
     }
     { // ('[' | '{') star_named_expression ',' star_named_expressions for_if_clauses
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> invalid_comprehension[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "('[' | '{') star_named_expression ',' star_named_expressions for_if_clauses"));
@@ -18906,7 +19525,7 @@ invalid_comprehension_rule(Parser *p)
             _res = RAISE_SYNTAX_ERROR_KNOWN_RANGE ( a , PyPegen_last_item ( b , expr_ty ) , "did you forget parentheses around the comprehension target?" );
             if (_res == NULL && PyErr_Occurred()) {
                 p->error_indicator = 1;
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             goto done;
@@ -18917,7 +19536,7 @@ invalid_comprehension_rule(Parser *p)
     }
     { // ('[' | '{') star_named_expression ',' for_if_clauses
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> invalid_comprehension[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "('[' | '{') star_named_expression ',' for_if_clauses"));
@@ -18939,7 +19558,7 @@ invalid_comprehension_rule(Parser *p)
             _res = RAISE_SYNTAX_ERROR_KNOWN_RANGE ( a , b , "did you forget parentheses around the comprehension target?" );
             if (_res == NULL && PyErr_Occurred()) {
                 p->error_indicator = 1;
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             goto done;
@@ -18950,7 +19569,7 @@ invalid_comprehension_rule(Parser *p)
     }
     _res = NULL;
   done:
-    D(p->level--);
+    p->level--;
     return _res;
 }
 
@@ -18958,16 +19577,19 @@ invalid_comprehension_rule(Parser *p)
 static void *
 invalid_dict_comprehension_rule(Parser *p)
 {
-    D(p->level++);
+    if (p->level++ == MAXSTACK) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+    }
     if (p->error_indicator) {
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     void * _res = NULL;
     int _mark = p->mark;
     { // '{' '**' bitwise_or for_if_clauses '}'
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> invalid_dict_comprehension[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'{' '**' bitwise_or for_if_clauses '}'"));
@@ -18992,7 +19614,7 @@ invalid_dict_comprehension_rule(Parser *p)
             _res = RAISE_SYNTAX_ERROR_KNOWN_LOCATION ( a , "dict unpacking cannot be used in dict comprehension" );
             if (_res == NULL && PyErr_Occurred()) {
                 p->error_indicator = 1;
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             goto done;
@@ -19003,7 +19625,7 @@ invalid_dict_comprehension_rule(Parser *p)
     }
     _res = NULL;
   done:
-    D(p->level--);
+    p->level--;
     return _res;
 }
 
@@ -19011,16 +19633,19 @@ invalid_dict_comprehension_rule(Parser *p)
 static void *
 invalid_parameters_rule(Parser *p)
 {
-    D(p->level++);
+    if (p->level++ == MAXSTACK) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+    }
     if (p->error_indicator) {
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     void * _res = NULL;
     int _mark = p->mark;
     { // param_no_default* invalid_parameters_helper param_no_default
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> invalid_parameters[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "param_no_default* invalid_parameters_helper param_no_default"));
@@ -19039,7 +19664,7 @@ invalid_parameters_rule(Parser *p)
             _res = RAISE_SYNTAX_ERROR_KNOWN_LOCATION ( a , "non-default argument follows default argument" );
             if (_res == NULL && PyErr_Occurred()) {
                 p->error_indicator = 1;
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             goto done;
@@ -19050,7 +19675,7 @@ invalid_parameters_rule(Parser *p)
     }
     _res = NULL;
   done:
-    D(p->level--);
+    p->level--;
     return _res;
 }
 
@@ -19058,16 +19683,19 @@ invalid_parameters_rule(Parser *p)
 static void *
 invalid_parameters_helper_rule(Parser *p)
 {
-    D(p->level++);
+    if (p->level++ == MAXSTACK) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+    }
     if (p->error_indicator) {
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     void * _res = NULL;
     int _mark = p->mark;
     { // slash_with_default
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> invalid_parameters_helper[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "slash_with_default"));
@@ -19080,7 +19708,7 @@ invalid_parameters_helper_rule(Parser *p)
             _res = _PyPegen_singleton_seq ( p , a );
             if (_res == NULL && PyErr_Occurred()) {
                 p->error_indicator = 1;
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             goto done;
@@ -19091,7 +19719,7 @@ invalid_parameters_helper_rule(Parser *p)
     }
     { // param_with_default+
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> invalid_parameters_helper[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "param_with_default+"));
@@ -19110,7 +19738,7 @@ invalid_parameters_helper_rule(Parser *p)
     }
     _res = NULL;
   done:
-    D(p->level--);
+    p->level--;
     return _res;
 }
 
@@ -19119,16 +19747,19 @@ invalid_parameters_helper_rule(Parser *p)
 static void *
 invalid_lambda_parameters_rule(Parser *p)
 {
-    D(p->level++);
+    if (p->level++ == MAXSTACK) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+    }
     if (p->error_indicator) {
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     void * _res = NULL;
     int _mark = p->mark;
     { // lambda_param_no_default* invalid_lambda_parameters_helper lambda_param_no_default
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> invalid_lambda_parameters[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "lambda_param_no_default* invalid_lambda_parameters_helper lambda_param_no_default"));
@@ -19147,7 +19778,7 @@ invalid_lambda_parameters_rule(Parser *p)
             _res = RAISE_SYNTAX_ERROR_KNOWN_LOCATION ( a , "non-default argument follows default argument" );
             if (_res == NULL && PyErr_Occurred()) {
                 p->error_indicator = 1;
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             goto done;
@@ -19158,7 +19789,7 @@ invalid_lambda_parameters_rule(Parser *p)
     }
     _res = NULL;
   done:
-    D(p->level--);
+    p->level--;
     return _res;
 }
 
@@ -19168,16 +19799,19 @@ invalid_lambda_parameters_rule(Parser *p)
 static void *
 invalid_lambda_parameters_helper_rule(Parser *p)
 {
-    D(p->level++);
+    if (p->level++ == MAXSTACK) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+    }
     if (p->error_indicator) {
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     void * _res = NULL;
     int _mark = p->mark;
     { // lambda_slash_with_default
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> invalid_lambda_parameters_helper[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "lambda_slash_with_default"));
@@ -19190,7 +19824,7 @@ invalid_lambda_parameters_helper_rule(Parser *p)
             _res = _PyPegen_singleton_seq ( p , a );
             if (_res == NULL && PyErr_Occurred()) {
                 p->error_indicator = 1;
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             goto done;
@@ -19201,7 +19835,7 @@ invalid_lambda_parameters_helper_rule(Parser *p)
     }
     { // lambda_param_with_default+
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> invalid_lambda_parameters_helper[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "lambda_param_with_default+"));
@@ -19220,7 +19854,7 @@ invalid_lambda_parameters_helper_rule(Parser *p)
     }
     _res = NULL;
   done:
-    D(p->level--);
+    p->level--;
     return _res;
 }
 
@@ -19228,16 +19862,19 @@ invalid_lambda_parameters_helper_rule(Parser *p)
 static void *
 invalid_star_etc_rule(Parser *p)
 {
-    D(p->level++);
+    if (p->level++ == MAXSTACK) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+    }
     if (p->error_indicator) {
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     void * _res = NULL;
     int _mark = p->mark;
     { // '*' (')' | ',' (')' | '**'))
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> invalid_star_etc[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'*' (')' | ',' (')' | '**'))"));
@@ -19253,7 +19890,7 @@ invalid_star_etc_rule(Parser *p)
             _res = RAISE_SYNTAX_ERROR_KNOWN_LOCATION ( a , "named arguments must follow bare *" );
             if (_res == NULL && PyErr_Occurred()) {
                 p->error_indicator = 1;
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             goto done;
@@ -19264,7 +19901,7 @@ invalid_star_etc_rule(Parser *p)
     }
     { // '*' ',' TYPE_COMMENT
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> invalid_star_etc[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'*' ',' TYPE_COMMENT"));
@@ -19283,7 +19920,7 @@ invalid_star_etc_rule(Parser *p)
             _res = RAISE_SYNTAX_ERROR ( "bare * has associated type comment" );
             if (_res == NULL && PyErr_Occurred()) {
                 p->error_indicator = 1;
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             goto done;
@@ -19294,7 +19931,7 @@ invalid_star_etc_rule(Parser *p)
     }
     _res = NULL;
   done:
-    D(p->level--);
+    p->level--;
     return _res;
 }
 
@@ -19302,16 +19939,19 @@ invalid_star_etc_rule(Parser *p)
 static void *
 invalid_lambda_star_etc_rule(Parser *p)
 {
-    D(p->level++);
+    if (p->level++ == MAXSTACK) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+    }
     if (p->error_indicator) {
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     void * _res = NULL;
     int _mark = p->mark;
     { // '*' (':' | ',' (':' | '**'))
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> invalid_lambda_star_etc[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'*' (':' | ',' (':' | '**'))"));
@@ -19327,7 +19967,7 @@ invalid_lambda_star_etc_rule(Parser *p)
             _res = RAISE_SYNTAX_ERROR ( "named arguments must follow bare *" );
             if (_res == NULL && PyErr_Occurred()) {
                 p->error_indicator = 1;
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             goto done;
@@ -19338,7 +19978,7 @@ invalid_lambda_star_etc_rule(Parser *p)
     }
     _res = NULL;
   done:
-    D(p->level--);
+    p->level--;
     return _res;
 }
 
@@ -19346,16 +19986,19 @@ invalid_lambda_star_etc_rule(Parser *p)
 static void *
 invalid_double_type_comments_rule(Parser *p)
 {
-    D(p->level++);
+    if (p->level++ == MAXSTACK) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+    }
     if (p->error_indicator) {
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     void * _res = NULL;
     int _mark = p->mark;
     { // TYPE_COMMENT NEWLINE TYPE_COMMENT NEWLINE INDENT
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> invalid_double_type_comments[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "TYPE_COMMENT NEWLINE TYPE_COMMENT NEWLINE INDENT"));
@@ -19380,7 +20023,7 @@ invalid_double_type_comments_rule(Parser *p)
             _res = RAISE_SYNTAX_ERROR ( "Cannot have two type comments on def" );
             if (_res == NULL && PyErr_Occurred()) {
                 p->error_indicator = 1;
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             goto done;
@@ -19391,7 +20034,7 @@ invalid_double_type_comments_rule(Parser *p)
     }
     _res = NULL;
   done:
-    D(p->level--);
+    p->level--;
     return _res;
 }
 
@@ -19399,16 +20042,19 @@ invalid_double_type_comments_rule(Parser *p)
 static void *
 invalid_with_item_rule(Parser *p)
 {
-    D(p->level++);
+    if (p->level++ == MAXSTACK) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+    }
     if (p->error_indicator) {
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     void * _res = NULL;
     int _mark = p->mark;
     { // expression 'as' expression &(',' | ')' | ':')
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> invalid_with_item[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "expression 'as' expression &(',' | ')' | ':')"));
@@ -19429,7 +20075,7 @@ invalid_with_item_rule(Parser *p)
             _res = RAISE_SYNTAX_ERROR_INVALID_TARGET ( STAR_TARGETS , a );
             if (_res == NULL && PyErr_Occurred()) {
                 p->error_indicator = 1;
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             goto done;
@@ -19440,7 +20086,7 @@ invalid_with_item_rule(Parser *p)
     }
     _res = NULL;
   done:
-    D(p->level--);
+    p->level--;
     return _res;
 }
 
@@ -19448,16 +20094,19 @@ invalid_with_item_rule(Parser *p)
 static void *
 invalid_for_target_rule(Parser *p)
 {
-    D(p->level++);
+    if (p->level++ == MAXSTACK) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+    }
     if (p->error_indicator) {
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     void * _res = NULL;
     int _mark = p->mark;
     { // ASYNC? 'for' star_expressions
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> invalid_for_target[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "ASYNC? 'for' star_expressions"));
@@ -19477,7 +20126,7 @@ invalid_for_target_rule(Parser *p)
             _res = RAISE_SYNTAX_ERROR_INVALID_TARGET ( FOR_TARGETS , a );
             if (_res == NULL && PyErr_Occurred()) {
                 p->error_indicator = 1;
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             goto done;
@@ -19488,7 +20137,7 @@ invalid_for_target_rule(Parser *p)
     }
     _res = NULL;
   done:
-    D(p->level--);
+    p->level--;
     return _res;
 }
 
@@ -19496,16 +20145,19 @@ invalid_for_target_rule(Parser *p)
 static void *
 invalid_group_rule(Parser *p)
 {
-    D(p->level++);
+    if (p->level++ == MAXSTACK) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+    }
     if (p->error_indicator) {
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     void * _res = NULL;
     int _mark = p->mark;
     { // '(' starred_expression ')'
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> invalid_group[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'(' starred_expression ')'"));
@@ -19524,7 +20176,7 @@ invalid_group_rule(Parser *p)
             _res = RAISE_SYNTAX_ERROR_KNOWN_LOCATION ( a , "cannot use starred expression here" );
             if (_res == NULL && PyErr_Occurred()) {
                 p->error_indicator = 1;
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             goto done;
@@ -19535,7 +20187,7 @@ invalid_group_rule(Parser *p)
     }
     { // '(' '**' expression ')'
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> invalid_group[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'(' '**' expression ')'"));
@@ -19557,7 +20209,7 @@ invalid_group_rule(Parser *p)
             _res = RAISE_SYNTAX_ERROR_KNOWN_LOCATION ( a , "cannot use double starred expression here" );
             if (_res == NULL && PyErr_Occurred()) {
                 p->error_indicator = 1;
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             goto done;
@@ -19568,7 +20220,7 @@ invalid_group_rule(Parser *p)
     }
     _res = NULL;
   done:
-    D(p->level--);
+    p->level--;
     return _res;
 }
 
@@ -19576,16 +20228,19 @@ invalid_group_rule(Parser *p)
 static void *
 invalid_import_from_targets_rule(Parser *p)
 {
-    D(p->level++);
+    if (p->level++ == MAXSTACK) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+    }
     if (p->error_indicator) {
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     void * _res = NULL;
     int _mark = p->mark;
     { // import_from_as_names ',' NEWLINE
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> invalid_import_from_targets[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "import_from_as_names ',' NEWLINE"));
@@ -19604,7 +20259,7 @@ invalid_import_from_targets_rule(Parser *p)
             _res = RAISE_SYNTAX_ERROR ( "trailing comma not allowed without surrounding parentheses" );
             if (_res == NULL && PyErr_Occurred()) {
                 p->error_indicator = 1;
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             goto done;
@@ -19615,7 +20270,7 @@ invalid_import_from_targets_rule(Parser *p)
     }
     _res = NULL;
   done:
-    D(p->level--);
+    p->level--;
     return _res;
 }
 
@@ -19625,16 +20280,19 @@ invalid_import_from_targets_rule(Parser *p)
 static void *
 invalid_with_stmt_rule(Parser *p)
 {
-    D(p->level++);
+    if (p->level++ == MAXSTACK) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+    }
     if (p->error_indicator) {
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     void * _res = NULL;
     int _mark = p->mark;
     { // ASYNC? 'with' ','.(expression ['as' star_target])+ &&':'
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> invalid_with_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "ASYNC? 'with' ','.(expression ['as' star_target])+ &&':'"));
@@ -19663,7 +20321,7 @@ invalid_with_stmt_rule(Parser *p)
     }
     { // ASYNC? 'with' '(' ','.(expressions ['as' star_target])+ ','? ')' &&':'
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> invalid_with_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "ASYNC? 'with' '(' ','.(expressions ['as' star_target])+ ','? ')' &&':'"));
@@ -19702,7 +20360,7 @@ invalid_with_stmt_rule(Parser *p)
     }
     _res = NULL;
   done:
-    D(p->level--);
+    p->level--;
     return _res;
 }
 
@@ -19712,16 +20370,19 @@ invalid_with_stmt_rule(Parser *p)
 static void *
 invalid_with_stmt_indent_rule(Parser *p)
 {
-    D(p->level++);
+    if (p->level++ == MAXSTACK) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+    }
     if (p->error_indicator) {
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     void * _res = NULL;
     int _mark = p->mark;
     { // ASYNC? 'with' ','.(expression ['as' star_target])+ ':' NEWLINE !INDENT
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> invalid_with_stmt_indent[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "ASYNC? 'with' ','.(expression ['as' star_target])+ ':' NEWLINE !INDENT"));
@@ -19749,7 +20410,7 @@ invalid_with_stmt_indent_rule(Parser *p)
             _res = RAISE_INDENTATION_ERROR ( "expected an indented block after 'with' statement on line %d" , a -> lineno );
             if (_res == NULL && PyErr_Occurred()) {
                 p->error_indicator = 1;
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             goto done;
@@ -19760,7 +20421,7 @@ invalid_with_stmt_indent_rule(Parser *p)
     }
     { // ASYNC? 'with' '(' ','.(expressions ['as' star_target])+ ','? ')' ':' NEWLINE !INDENT
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> invalid_with_stmt_indent[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "ASYNC? 'with' '(' ','.(expressions ['as' star_target])+ ','? ')' ':' NEWLINE !INDENT"));
@@ -19798,7 +20459,7 @@ invalid_with_stmt_indent_rule(Parser *p)
             _res = RAISE_INDENTATION_ERROR ( "expected an indented block after 'with' statement on line %d" , a -> lineno );
             if (_res == NULL && PyErr_Occurred()) {
                 p->error_indicator = 1;
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             goto done;
@@ -19809,7 +20470,7 @@ invalid_with_stmt_indent_rule(Parser *p)
     }
     _res = NULL;
   done:
-    D(p->level--);
+    p->level--;
     return _res;
 }
 
@@ -19817,16 +20478,19 @@ invalid_with_stmt_indent_rule(Parser *p)
 static void *
 invalid_try_stmt_rule(Parser *p)
 {
-    D(p->level++);
+    if (p->level++ == MAXSTACK) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+    }
     if (p->error_indicator) {
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     void * _res = NULL;
     int _mark = p->mark;
     { // 'try' ':' NEWLINE !INDENT
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> invalid_try_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'try' ':' NEWLINE !INDENT"));
@@ -19847,7 +20511,7 @@ invalid_try_stmt_rule(Parser *p)
             _res = RAISE_INDENTATION_ERROR ( "expected an indented block after 'try' statement on line %d" , a -> lineno );
             if (_res == NULL && PyErr_Occurred()) {
                 p->error_indicator = 1;
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             goto done;
@@ -19858,7 +20522,7 @@ invalid_try_stmt_rule(Parser *p)
     }
     { // 'try' ':' block !('except' | 'finally')
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> invalid_try_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'try' ':' block !('except' | 'finally')"));
@@ -19879,7 +20543,7 @@ invalid_try_stmt_rule(Parser *p)
             _res = RAISE_SYNTAX_ERROR ( "expected 'except' or 'finally' block" );
             if (_res == NULL && PyErr_Occurred()) {
                 p->error_indicator = 1;
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             goto done;
@@ -19890,7 +20554,7 @@ invalid_try_stmt_rule(Parser *p)
     }
     _res = NULL;
   done:
-    D(p->level--);
+    p->level--;
     return _res;
 }
 
@@ -19901,16 +20565,19 @@ invalid_try_stmt_rule(Parser *p)
 static void *
 invalid_except_stmt_rule(Parser *p)
 {
-    D(p->level++);
+    if (p->level++ == MAXSTACK) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+    }
     if (p->error_indicator) {
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     void * _res = NULL;
     int _mark = p->mark;
     { // 'except' expression ',' expressions ['as' NAME] ':'
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> invalid_except_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'except' expression ',' expressions ['as' NAME] ':'"));
@@ -19939,7 +20606,7 @@ invalid_except_stmt_rule(Parser *p)
             _res = RAISE_SYNTAX_ERROR_STARTING_FROM ( a , "multiple exception types must be parenthesized" );
             if (_res == NULL && PyErr_Occurred()) {
                 p->error_indicator = 1;
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             goto done;
@@ -19950,7 +20617,7 @@ invalid_except_stmt_rule(Parser *p)
     }
     { // 'except' expression ['as' NAME] NEWLINE
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> invalid_except_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'except' expression ['as' NAME] NEWLINE"));
@@ -19973,7 +20640,7 @@ invalid_except_stmt_rule(Parser *p)
             _res = RAISE_SYNTAX_ERROR ( "expected ':'" );
             if (_res == NULL && PyErr_Occurred()) {
                 p->error_indicator = 1;
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             goto done;
@@ -19984,7 +20651,7 @@ invalid_except_stmt_rule(Parser *p)
     }
     { // 'except' NEWLINE
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> invalid_except_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'except' NEWLINE"));
@@ -20000,7 +20667,7 @@ invalid_except_stmt_rule(Parser *p)
             _res = RAISE_SYNTAX_ERROR ( "expected ':'" );
             if (_res == NULL && PyErr_Occurred()) {
                 p->error_indicator = 1;
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             goto done;
@@ -20011,7 +20678,7 @@ invalid_except_stmt_rule(Parser *p)
     }
     _res = NULL;
   done:
-    D(p->level--);
+    p->level--;
     return _res;
 }
 
@@ -20019,16 +20686,19 @@ invalid_except_stmt_rule(Parser *p)
 static void *
 invalid_finally_stmt_rule(Parser *p)
 {
-    D(p->level++);
+    if (p->level++ == MAXSTACK) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+    }
     if (p->error_indicator) {
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     void * _res = NULL;
     int _mark = p->mark;
     { // 'finally' ':' NEWLINE !INDENT
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> invalid_finally_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'finally' ':' NEWLINE !INDENT"));
@@ -20049,7 +20719,7 @@ invalid_finally_stmt_rule(Parser *p)
             _res = RAISE_INDENTATION_ERROR ( "expected an indented block after 'finally' statement on line %d" , a -> lineno );
             if (_res == NULL && PyErr_Occurred()) {
                 p->error_indicator = 1;
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             goto done;
@@ -20060,7 +20730,7 @@ invalid_finally_stmt_rule(Parser *p)
     }
     _res = NULL;
   done:
-    D(p->level--);
+    p->level--;
     return _res;
 }
 
@@ -20070,16 +20740,19 @@ invalid_finally_stmt_rule(Parser *p)
 static void *
 invalid_except_stmt_indent_rule(Parser *p)
 {
-    D(p->level++);
+    if (p->level++ == MAXSTACK) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+    }
     if (p->error_indicator) {
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     void * _res = NULL;
     int _mark = p->mark;
     { // 'except' expression ['as' NAME] ':' NEWLINE !INDENT
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> invalid_except_stmt_indent[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'except' expression ['as' NAME] ':' NEWLINE !INDENT"));
@@ -20107,7 +20780,7 @@ invalid_except_stmt_indent_rule(Parser *p)
             _res = RAISE_INDENTATION_ERROR ( "expected an indented block after 'except' statement on line %d" , a -> lineno );
             if (_res == NULL && PyErr_Occurred()) {
                 p->error_indicator = 1;
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             goto done;
@@ -20118,7 +20791,7 @@ invalid_except_stmt_indent_rule(Parser *p)
     }
     { // 'except' ':' NEWLINE !INDENT
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> invalid_except_stmt_indent[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'except' ':' NEWLINE !INDENT"));
@@ -20139,7 +20812,7 @@ invalid_except_stmt_indent_rule(Parser *p)
             _res = RAISE_SYNTAX_ERROR ( "expected an indented block after except statement on line %d" , a -> lineno );
             if (_res == NULL && PyErr_Occurred()) {
                 p->error_indicator = 1;
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             goto done;
@@ -20150,7 +20823,7 @@ invalid_except_stmt_indent_rule(Parser *p)
     }
     _res = NULL;
   done:
-    D(p->level--);
+    p->level--;
     return _res;
 }
 
@@ -20160,16 +20833,19 @@ invalid_except_stmt_indent_rule(Parser *p)
 static void *
 invalid_match_stmt_rule(Parser *p)
 {
-    D(p->level++);
+    if (p->level++ == MAXSTACK) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+    }
     if (p->error_indicator) {
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     void * _res = NULL;
     int _mark = p->mark;
     { // "match" subject_expr !':'
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> invalid_match_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "\"match\" subject_expr !':'"));
@@ -20187,7 +20863,7 @@ invalid_match_stmt_rule(Parser *p)
             _res = CHECK_VERSION ( void * , 10 , "Pattern matching is" , RAISE_SYNTAX_ERROR ( "expected ':'" ) );
             if (_res == NULL && PyErr_Occurred()) {
                 p->error_indicator = 1;
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             goto done;
@@ -20198,7 +20874,7 @@ invalid_match_stmt_rule(Parser *p)
     }
     { // "match" subject_expr ':' NEWLINE !INDENT
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> invalid_match_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "\"match\" subject_expr ':' NEWLINE !INDENT"));
@@ -20222,7 +20898,7 @@ invalid_match_stmt_rule(Parser *p)
             _res = RAISE_INDENTATION_ERROR ( "expected an indented block after 'match' statement on line %d" , a -> lineno );
             if (_res == NULL && PyErr_Occurred()) {
                 p->error_indicator = 1;
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             goto done;
@@ -20233,7 +20909,7 @@ invalid_match_stmt_rule(Parser *p)
     }
     _res = NULL;
   done:
-    D(p->level--);
+    p->level--;
     return _res;
 }
 
@@ -20243,16 +20919,19 @@ invalid_match_stmt_rule(Parser *p)
 static void *
 invalid_case_block_rule(Parser *p)
 {
-    D(p->level++);
+    if (p->level++ == MAXSTACK) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+    }
     if (p->error_indicator) {
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     void * _res = NULL;
     int _mark = p->mark;
     { // "case" patterns guard? !':'
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> invalid_case_block[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "\"case\" patterns guard? !':'"));
@@ -20274,7 +20953,7 @@ invalid_case_block_rule(Parser *p)
             _res = RAISE_SYNTAX_ERROR ( "expected ':'" );
             if (_res == NULL && PyErr_Occurred()) {
                 p->error_indicator = 1;
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             goto done;
@@ -20285,7 +20964,7 @@ invalid_case_block_rule(Parser *p)
     }
     { // "case" patterns guard? ':' NEWLINE !INDENT
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> invalid_case_block[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "\"case\" patterns guard? ':' NEWLINE !INDENT"));
@@ -20313,7 +20992,7 @@ invalid_case_block_rule(Parser *p)
             _res = RAISE_INDENTATION_ERROR ( "expected an indented block after 'case' statement on line %d" , a -> lineno );
             if (_res == NULL && PyErr_Occurred()) {
                 p->error_indicator = 1;
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             goto done;
@@ -20324,7 +21003,7 @@ invalid_case_block_rule(Parser *p)
     }
     _res = NULL;
   done:
-    D(p->level--);
+    p->level--;
     return _res;
 }
 
@@ -20332,16 +21011,19 @@ invalid_case_block_rule(Parser *p)
 static void *
 invalid_as_pattern_rule(Parser *p)
 {
-    D(p->level++);
+    if (p->level++ == MAXSTACK) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+    }
     if (p->error_indicator) {
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     void * _res = NULL;
     int _mark = p->mark;
     { // or_pattern 'as' "_"
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> invalid_as_pattern[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "or_pattern 'as' \"_\""));
@@ -20360,7 +21042,7 @@ invalid_as_pattern_rule(Parser *p)
             _res = RAISE_SYNTAX_ERROR_KNOWN_LOCATION ( a , "cannot use '_' as a target" );
             if (_res == NULL && PyErr_Occurred()) {
                 p->error_indicator = 1;
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             goto done;
@@ -20371,7 +21053,7 @@ invalid_as_pattern_rule(Parser *p)
     }
     { // or_pattern 'as' !NAME expression
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> invalid_as_pattern[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "or_pattern 'as' !NAME expression"));
@@ -20392,7 +21074,7 @@ invalid_as_pattern_rule(Parser *p)
             _res = RAISE_SYNTAX_ERROR_KNOWN_LOCATION ( a , "invalid pattern target" );
             if (_res == NULL && PyErr_Occurred()) {
                 p->error_indicator = 1;
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             goto done;
@@ -20403,7 +21085,7 @@ invalid_as_pattern_rule(Parser *p)
     }
     _res = NULL;
   done:
-    D(p->level--);
+    p->level--;
     return _res;
 }
 
@@ -20411,16 +21093,19 @@ invalid_as_pattern_rule(Parser *p)
 static void *
 invalid_class_pattern_rule(Parser *p)
 {
-    D(p->level++);
+    if (p->level++ == MAXSTACK) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+    }
     if (p->error_indicator) {
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     void * _res = NULL;
     int _mark = p->mark;
     { // name_or_attr '(' invalid_class_argument_pattern
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> invalid_class_pattern[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "name_or_attr '(' invalid_class_argument_pattern"));
@@ -20439,7 +21124,7 @@ invalid_class_pattern_rule(Parser *p)
             _res = RAISE_SYNTAX_ERROR_KNOWN_RANGE ( PyPegen_first_item ( a , pattern_ty ) , PyPegen_last_item ( a , pattern_ty ) , "positional patterns follow keyword patterns" );
             if (_res == NULL && PyErr_Occurred()) {
                 p->error_indicator = 1;
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             goto done;
@@ -20450,7 +21135,7 @@ invalid_class_pattern_rule(Parser *p)
     }
     _res = NULL;
   done:
-    D(p->level--);
+    p->level--;
     return _res;
 }
 
@@ -20459,16 +21144,19 @@ invalid_class_pattern_rule(Parser *p)
 static asdl_pattern_seq*
 invalid_class_argument_pattern_rule(Parser *p)
 {
-    D(p->level++);
+    if (p->level++ == MAXSTACK) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+    }
     if (p->error_indicator) {
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     asdl_pattern_seq* _res = NULL;
     int _mark = p->mark;
     { // [positional_patterns ','] keyword_patterns ',' positional_patterns
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> invalid_class_argument_pattern[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "[positional_patterns ','] keyword_patterns ',' positional_patterns"));
@@ -20491,7 +21179,7 @@ invalid_class_argument_pattern_rule(Parser *p)
             _res = a;
             if (_res == NULL && PyErr_Occurred()) {
                 p->error_indicator = 1;
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             goto done;
@@ -20502,7 +21190,7 @@ invalid_class_argument_pattern_rule(Parser *p)
     }
     _res = NULL;
   done:
-    D(p->level--);
+    p->level--;
     return _res;
 }
 
@@ -20512,16 +21200,19 @@ invalid_class_argument_pattern_rule(Parser *p)
 static void *
 invalid_if_stmt_rule(Parser *p)
 {
-    D(p->level++);
+    if (p->level++ == MAXSTACK) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+    }
     if (p->error_indicator) {
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     void * _res = NULL;
     int _mark = p->mark;
     { // 'if' named_expression NEWLINE
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> invalid_if_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'if' named_expression NEWLINE"));
@@ -20540,7 +21231,7 @@ invalid_if_stmt_rule(Parser *p)
             _res = RAISE_SYNTAX_ERROR ( "expected ':'" );
             if (_res == NULL && PyErr_Occurred()) {
                 p->error_indicator = 1;
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             goto done;
@@ -20551,7 +21242,7 @@ invalid_if_stmt_rule(Parser *p)
     }
     { // 'if' named_expression ':' NEWLINE !INDENT
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> invalid_if_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'if' named_expression ':' NEWLINE !INDENT"));
@@ -20575,7 +21266,7 @@ invalid_if_stmt_rule(Parser *p)
             _res = RAISE_INDENTATION_ERROR ( "expected an indented block after 'if' statement on line %d" , a -> lineno );
             if (_res == NULL && PyErr_Occurred()) {
                 p->error_indicator = 1;
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             goto done;
@@ -20586,7 +21277,7 @@ invalid_if_stmt_rule(Parser *p)
     }
     _res = NULL;
   done:
-    D(p->level--);
+    p->level--;
     return _res;
 }
 
@@ -20596,16 +21287,19 @@ invalid_if_stmt_rule(Parser *p)
 static void *
 invalid_elif_stmt_rule(Parser *p)
 {
-    D(p->level++);
+    if (p->level++ == MAXSTACK) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+    }
     if (p->error_indicator) {
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     void * _res = NULL;
     int _mark = p->mark;
     { // 'elif' named_expression NEWLINE
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> invalid_elif_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'elif' named_expression NEWLINE"));
@@ -20624,7 +21318,7 @@ invalid_elif_stmt_rule(Parser *p)
             _res = RAISE_SYNTAX_ERROR ( "expected ':'" );
             if (_res == NULL && PyErr_Occurred()) {
                 p->error_indicator = 1;
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             goto done;
@@ -20635,7 +21329,7 @@ invalid_elif_stmt_rule(Parser *p)
     }
     { // 'elif' named_expression ':' NEWLINE !INDENT
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> invalid_elif_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'elif' named_expression ':' NEWLINE !INDENT"));
@@ -20659,7 +21353,7 @@ invalid_elif_stmt_rule(Parser *p)
             _res = RAISE_INDENTATION_ERROR ( "expected an indented block after 'elif' statement on line %d" , a -> lineno );
             if (_res == NULL && PyErr_Occurred()) {
                 p->error_indicator = 1;
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             goto done;
@@ -20670,7 +21364,7 @@ invalid_elif_stmt_rule(Parser *p)
     }
     _res = NULL;
   done:
-    D(p->level--);
+    p->level--;
     return _res;
 }
 
@@ -20678,16 +21372,19 @@ invalid_elif_stmt_rule(Parser *p)
 static void *
 invalid_else_stmt_rule(Parser *p)
 {
-    D(p->level++);
+    if (p->level++ == MAXSTACK) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+    }
     if (p->error_indicator) {
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     void * _res = NULL;
     int _mark = p->mark;
     { // 'else' ':' NEWLINE !INDENT
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> invalid_else_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'else' ':' NEWLINE !INDENT"));
@@ -20708,7 +21405,7 @@ invalid_else_stmt_rule(Parser *p)
             _res = RAISE_INDENTATION_ERROR ( "expected an indented block after 'else' statement on line %d" , a -> lineno );
             if (_res == NULL && PyErr_Occurred()) {
                 p->error_indicator = 1;
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             goto done;
@@ -20719,7 +21416,7 @@ invalid_else_stmt_rule(Parser *p)
     }
     _res = NULL;
   done:
-    D(p->level--);
+    p->level--;
     return _res;
 }
 
@@ -20729,16 +21426,19 @@ invalid_else_stmt_rule(Parser *p)
 static void *
 invalid_while_stmt_rule(Parser *p)
 {
-    D(p->level++);
+    if (p->level++ == MAXSTACK) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+    }
     if (p->error_indicator) {
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     void * _res = NULL;
     int _mark = p->mark;
     { // 'while' named_expression NEWLINE
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> invalid_while_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'while' named_expression NEWLINE"));
@@ -20757,7 +21457,7 @@ invalid_while_stmt_rule(Parser *p)
             _res = RAISE_SYNTAX_ERROR ( "expected ':'" );
             if (_res == NULL && PyErr_Occurred()) {
                 p->error_indicator = 1;
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             goto done;
@@ -20768,7 +21468,7 @@ invalid_while_stmt_rule(Parser *p)
     }
     { // 'while' named_expression ':' NEWLINE !INDENT
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> invalid_while_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'while' named_expression ':' NEWLINE !INDENT"));
@@ -20792,7 +21492,7 @@ invalid_while_stmt_rule(Parser *p)
             _res = RAISE_INDENTATION_ERROR ( "expected an indented block after 'while' statement on line %d" , a -> lineno );
             if (_res == NULL && PyErr_Occurred()) {
                 p->error_indicator = 1;
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             goto done;
@@ -20803,7 +21503,7 @@ invalid_while_stmt_rule(Parser *p)
     }
     _res = NULL;
   done:
-    D(p->level--);
+    p->level--;
     return _res;
 }
 
@@ -20811,16 +21511,19 @@ invalid_while_stmt_rule(Parser *p)
 static void *
 invalid_for_stmt_rule(Parser *p)
 {
-    D(p->level++);
+    if (p->level++ == MAXSTACK) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+    }
     if (p->error_indicator) {
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     void * _res = NULL;
     int _mark = p->mark;
     { // ASYNC? 'for' star_targets 'in' star_expressions ':' NEWLINE !INDENT
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> invalid_for_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "ASYNC? 'for' star_targets 'in' star_expressions ':' NEWLINE !INDENT"));
@@ -20854,7 +21557,7 @@ invalid_for_stmt_rule(Parser *p)
             _res = RAISE_INDENTATION_ERROR ( "expected an indented block after 'for' statement on line %d" , a -> lineno );
             if (_res == NULL && PyErr_Occurred()) {
                 p->error_indicator = 1;
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             goto done;
@@ -20865,7 +21568,7 @@ invalid_for_stmt_rule(Parser *p)
     }
     _res = NULL;
   done:
-    D(p->level--);
+    p->level--;
     return _res;
 }
 
@@ -20874,16 +21577,19 @@ invalid_for_stmt_rule(Parser *p)
 static void *
 invalid_def_raw_rule(Parser *p)
 {
-    D(p->level++);
+    if (p->level++ == MAXSTACK) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+    }
     if (p->error_indicator) {
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     void * _res = NULL;
     int _mark = p->mark;
     { // ASYNC? 'def' NAME '(' params? ')' ['->' expression] ':' NEWLINE !INDENT
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> invalid_def_raw[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "ASYNC? 'def' NAME '(' params? ')' ['->' expression] ':' NEWLINE !INDENT"));
@@ -20925,7 +21631,7 @@ invalid_def_raw_rule(Parser *p)
             _res = RAISE_INDENTATION_ERROR ( "expected an indented block after function definition on line %d" , a -> lineno );
             if (_res == NULL && PyErr_Occurred()) {
                 p->error_indicator = 1;
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             goto done;
@@ -20936,7 +21642,7 @@ invalid_def_raw_rule(Parser *p)
     }
     _res = NULL;
   done:
-    D(p->level--);
+    p->level--;
     return _res;
 }
 
@@ -20944,16 +21650,19 @@ invalid_def_raw_rule(Parser *p)
 static void *
 invalid_class_def_raw_rule(Parser *p)
 {
-    D(p->level++);
+    if (p->level++ == MAXSTACK) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+    }
     if (p->error_indicator) {
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     void * _res = NULL;
     int _mark = p->mark;
     { // 'class' NAME ['(' arguments? ')'] ':' NEWLINE !INDENT
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> invalid_class_def_raw[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'class' NAME ['(' arguments? ')'] ':' NEWLINE !INDENT"));
@@ -20981,7 +21690,7 @@ invalid_class_def_raw_rule(Parser *p)
             _res = RAISE_INDENTATION_ERROR ( "expected an indented block after class definition on line %d" , a -> lineno );
             if (_res == NULL && PyErr_Occurred()) {
                 p->error_indicator = 1;
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             goto done;
@@ -20992,7 +21701,7 @@ invalid_class_def_raw_rule(Parser *p)
     }
     _res = NULL;
   done:
-    D(p->level--);
+    p->level--;
     return _res;
 }
 
@@ -21003,16 +21712,19 @@ invalid_class_def_raw_rule(Parser *p)
 static void *
 invalid_double_starred_kvpairs_rule(Parser *p)
 {
-    D(p->level++);
+    if (p->level++ == MAXSTACK) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+    }
     if (p->error_indicator) {
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     void * _res = NULL;
     int _mark = p->mark;
     { // ','.double_starred_kvpair+ ',' invalid_kvpair
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> invalid_double_starred_kvpairs[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "','.double_starred_kvpair+ ',' invalid_kvpair"));
@@ -21037,7 +21749,7 @@ invalid_double_starred_kvpairs_rule(Parser *p)
     }
     { // expression ':' '*' bitwise_or
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> invalid_double_starred_kvpairs[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "expression ':' '*' bitwise_or"));
@@ -21059,7 +21771,7 @@ invalid_double_starred_kvpairs_rule(Parser *p)
             _res = RAISE_SYNTAX_ERROR_STARTING_FROM ( a , "cannot use a starred expression in a dictionary value" );
             if (_res == NULL && PyErr_Occurred()) {
                 p->error_indicator = 1;
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             goto done;
@@ -21070,7 +21782,7 @@ invalid_double_starred_kvpairs_rule(Parser *p)
     }
     { // expression ':' &('}' | ',')
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> invalid_double_starred_kvpairs[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "expression ':' &('}' | ',')"));
@@ -21088,7 +21800,7 @@ invalid_double_starred_kvpairs_rule(Parser *p)
             _res = RAISE_SYNTAX_ERROR_KNOWN_LOCATION ( a , "expression expected after dictionary key and ':'" );
             if (_res == NULL && PyErr_Occurred()) {
                 p->error_indicator = 1;
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             goto done;
@@ -21099,7 +21811,7 @@ invalid_double_starred_kvpairs_rule(Parser *p)
     }
     _res = NULL;
   done:
-    D(p->level--);
+    p->level--;
     return _res;
 }
 
@@ -21107,16 +21819,19 @@ invalid_double_starred_kvpairs_rule(Parser *p)
 static void *
 invalid_kvpair_rule(Parser *p)
 {
-    D(p->level++);
+    if (p->level++ == MAXSTACK) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+    }
     if (p->error_indicator) {
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     void * _res = NULL;
     int _mark = p->mark;
     { // expression !(':')
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> invalid_kvpair[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "expression !(':')"));
@@ -21131,7 +21846,7 @@ invalid_kvpair_rule(Parser *p)
             _res = RAISE_ERROR_KNOWN_LOCATION ( p , PyExc_SyntaxError , a -> lineno , a -> end_col_offset - 1 , a -> end_lineno , - 1 , "':' expected after dictionary key" );
             if (_res == NULL && PyErr_Occurred()) {
                 p->error_indicator = 1;
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             goto done;
@@ -21142,7 +21857,7 @@ invalid_kvpair_rule(Parser *p)
     }
     { // expression ':' '*' bitwise_or
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> invalid_kvpair[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "expression ':' '*' bitwise_or"));
@@ -21164,7 +21879,7 @@ invalid_kvpair_rule(Parser *p)
             _res = RAISE_SYNTAX_ERROR_STARTING_FROM ( a , "cannot use a starred expression in a dictionary value" );
             if (_res == NULL && PyErr_Occurred()) {
                 p->error_indicator = 1;
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             goto done;
@@ -21175,7 +21890,7 @@ invalid_kvpair_rule(Parser *p)
     }
     { // expression ':'
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> invalid_kvpair[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "expression ':'"));
@@ -21191,7 +21906,7 @@ invalid_kvpair_rule(Parser *p)
             _res = RAISE_SYNTAX_ERROR_KNOWN_LOCATION ( a , "expression expected after dictionary key and ':'" );
             if (_res == NULL && PyErr_Occurred()) {
                 p->error_indicator = 1;
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             goto done;
@@ -21202,7 +21917,7 @@ invalid_kvpair_rule(Parser *p)
     }
     _res = NULL;
   done:
-    D(p->level--);
+    p->level--;
     return _res;
 }
 
@@ -21210,9 +21925,12 @@ invalid_kvpair_rule(Parser *p)
 static asdl_seq *
 _loop0_1_rule(Parser *p)
 {
-    D(p->level++);
+    if (p->level++ == MAXSTACK) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+    }
     if (p->error_indicator) {
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     void *_res = NULL;
@@ -21222,14 +21940,14 @@ _loop0_1_rule(Parser *p)
     if (!_children) {
         p->error_indicator = 1;
         PyErr_NoMemory();
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     Py_ssize_t _children_capacity = 1;
     Py_ssize_t _n = 0;
     { // NEWLINE
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> _loop0_1[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "NEWLINE"));
@@ -21245,7 +21963,7 @@ _loop0_1_rule(Parser *p)
                 if (!_new_children) {
                     p->error_indicator = 1;
                     PyErr_NoMemory();
-                    D(p->level--);
+                    p->level--;
                     return NULL;
                 }
                 _children = _new_children;
@@ -21262,13 +21980,13 @@ _loop0_1_rule(Parser *p)
         PyMem_Free(_children);
         p->error_indicator = 1;
         PyErr_NoMemory();
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     for (int i = 0; i < _n; i++) asdl_seq_SET_UNTYPED(_seq, i, _children[i]);
     PyMem_Free(_children);
     _PyPegen_insert_memo(p, _start_mark, _loop0_1_type, _seq);
-    D(p->level--);
+    p->level--;
     return _seq;
 }
 
@@ -21276,9 +21994,12 @@ _loop0_1_rule(Parser *p)
 static asdl_seq *
 _loop0_2_rule(Parser *p)
 {
-    D(p->level++);
+    if (p->level++ == MAXSTACK) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+    }
     if (p->error_indicator) {
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     void *_res = NULL;
@@ -21288,14 +22009,14 @@ _loop0_2_rule(Parser *p)
     if (!_children) {
         p->error_indicator = 1;
         PyErr_NoMemory();
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     Py_ssize_t _children_capacity = 1;
     Py_ssize_t _n = 0;
     { // NEWLINE
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> _loop0_2[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "NEWLINE"));
@@ -21311,7 +22032,7 @@ _loop0_2_rule(Parser *p)
                 if (!_new_children) {
                     p->error_indicator = 1;
                     PyErr_NoMemory();
-                    D(p->level--);
+                    p->level--;
                     return NULL;
                 }
                 _children = _new_children;
@@ -21328,13 +22049,13 @@ _loop0_2_rule(Parser *p)
         PyMem_Free(_children);
         p->error_indicator = 1;
         PyErr_NoMemory();
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     for (int i = 0; i < _n; i++) asdl_seq_SET_UNTYPED(_seq, i, _children[i]);
     PyMem_Free(_children);
     _PyPegen_insert_memo(p, _start_mark, _loop0_2_type, _seq);
-    D(p->level--);
+    p->level--;
     return _seq;
 }
 
@@ -21342,9 +22063,12 @@ _loop0_2_rule(Parser *p)
 static asdl_seq *
 _loop0_4_rule(Parser *p)
 {
-    D(p->level++);
+    if (p->level++ == MAXSTACK) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+    }
     if (p->error_indicator) {
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     void *_res = NULL;
@@ -21354,14 +22078,14 @@ _loop0_4_rule(Parser *p)
     if (!_children) {
         p->error_indicator = 1;
         PyErr_NoMemory();
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     Py_ssize_t _children_capacity = 1;
     Py_ssize_t _n = 0;
     { // ',' expression
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> _loop0_4[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "',' expression"));
@@ -21377,7 +22101,7 @@ _loop0_4_rule(Parser *p)
             if (_res == NULL && PyErr_Occurred()) {
                 p->error_indicator = 1;
                 PyMem_Free(_children);
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             if (_n == _children_capacity) {
@@ -21386,7 +22110,7 @@ _loop0_4_rule(Parser *p)
                 if (!_new_children) {
                     p->error_indicator = 1;
                     PyErr_NoMemory();
-                    D(p->level--);
+                    p->level--;
                     return NULL;
                 }
                 _children = _new_children;
@@ -21403,13 +22127,13 @@ _loop0_4_rule(Parser *p)
         PyMem_Free(_children);
         p->error_indicator = 1;
         PyErr_NoMemory();
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     for (int i = 0; i < _n; i++) asdl_seq_SET_UNTYPED(_seq, i, _children[i]);
     PyMem_Free(_children);
     _PyPegen_insert_memo(p, _start_mark, _loop0_4_type, _seq);
-    D(p->level--);
+    p->level--;
     return _seq;
 }
 
@@ -21417,16 +22141,19 @@ _loop0_4_rule(Parser *p)
 static asdl_seq *
 _gather_3_rule(Parser *p)
 {
-    D(p->level++);
+    if (p->level++ == MAXSTACK) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+    }
     if (p->error_indicator) {
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     asdl_seq * _res = NULL;
     int _mark = p->mark;
     { // expression _loop0_4
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> _gather_3[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "expression _loop0_4"));
@@ -21448,7 +22175,7 @@ _gather_3_rule(Parser *p)
     }
     _res = NULL;
   done:
-    D(p->level--);
+    p->level--;
     return _res;
 }
 
@@ -21456,9 +22183,12 @@ _gather_3_rule(Parser *p)
 static asdl_seq *
 _loop0_6_rule(Parser *p)
 {
-    D(p->level++);
+    if (p->level++ == MAXSTACK) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+    }
     if (p->error_indicator) {
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     void *_res = NULL;
@@ -21468,14 +22198,14 @@ _loop0_6_rule(Parser *p)
     if (!_children) {
         p->error_indicator = 1;
         PyErr_NoMemory();
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     Py_ssize_t _children_capacity = 1;
     Py_ssize_t _n = 0;
     { // ',' expression
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> _loop0_6[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "',' expression"));
@@ -21491,7 +22221,7 @@ _loop0_6_rule(Parser *p)
             if (_res == NULL && PyErr_Occurred()) {
                 p->error_indicator = 1;
                 PyMem_Free(_children);
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             if (_n == _children_capacity) {
@@ -21500,7 +22230,7 @@ _loop0_6_rule(Parser *p)
                 if (!_new_children) {
                     p->error_indicator = 1;
                     PyErr_NoMemory();
-                    D(p->level--);
+                    p->level--;
                     return NULL;
                 }
                 _children = _new_children;
@@ -21517,13 +22247,13 @@ _loop0_6_rule(Parser *p)
         PyMem_Free(_children);
         p->error_indicator = 1;
         PyErr_NoMemory();
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     for (int i = 0; i < _n; i++) asdl_seq_SET_UNTYPED(_seq, i, _children[i]);
     PyMem_Free(_children);
     _PyPegen_insert_memo(p, _start_mark, _loop0_6_type, _seq);
-    D(p->level--);
+    p->level--;
     return _seq;
 }
 
@@ -21531,16 +22261,19 @@ _loop0_6_rule(Parser *p)
 static asdl_seq *
 _gather_5_rule(Parser *p)
 {
-    D(p->level++);
+    if (p->level++ == MAXSTACK) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+    }
     if (p->error_indicator) {
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     asdl_seq * _res = NULL;
     int _mark = p->mark;
     { // expression _loop0_6
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> _gather_5[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "expression _loop0_6"));
@@ -21562,7 +22295,7 @@ _gather_5_rule(Parser *p)
     }
     _res = NULL;
   done:
-    D(p->level--);
+    p->level--;
     return _res;
 }
 
@@ -21570,9 +22303,12 @@ _gather_5_rule(Parser *p)
 static asdl_seq *
 _loop0_8_rule(Parser *p)
 {
-    D(p->level++);
+    if (p->level++ == MAXSTACK) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+    }
     if (p->error_indicator) {
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     void *_res = NULL;
@@ -21582,14 +22318,14 @@ _loop0_8_rule(Parser *p)
     if (!_children) {
         p->error_indicator = 1;
         PyErr_NoMemory();
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     Py_ssize_t _children_capacity = 1;
     Py_ssize_t _n = 0;
     { // ',' expression
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> _loop0_8[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "',' expression"));
@@ -21605,7 +22341,7 @@ _loop0_8_rule(Parser *p)
             if (_res == NULL && PyErr_Occurred()) {
                 p->error_indicator = 1;
                 PyMem_Free(_children);
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             if (_n == _children_capacity) {
@@ -21614,7 +22350,7 @@ _loop0_8_rule(Parser *p)
                 if (!_new_children) {
                     p->error_indicator = 1;
                     PyErr_NoMemory();
-                    D(p->level--);
+                    p->level--;
                     return NULL;
                 }
                 _children = _new_children;
@@ -21631,13 +22367,13 @@ _loop0_8_rule(Parser *p)
         PyMem_Free(_children);
         p->error_indicator = 1;
         PyErr_NoMemory();
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     for (int i = 0; i < _n; i++) asdl_seq_SET_UNTYPED(_seq, i, _children[i]);
     PyMem_Free(_children);
     _PyPegen_insert_memo(p, _start_mark, _loop0_8_type, _seq);
-    D(p->level--);
+    p->level--;
     return _seq;
 }
 
@@ -21645,16 +22381,19 @@ _loop0_8_rule(Parser *p)
 static asdl_seq *
 _gather_7_rule(Parser *p)
 {
-    D(p->level++);
+    if (p->level++ == MAXSTACK) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+    }
     if (p->error_indicator) {
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     asdl_seq * _res = NULL;
     int _mark = p->mark;
     { // expression _loop0_8
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> _gather_7[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "expression _loop0_8"));
@@ -21676,7 +22415,7 @@ _gather_7_rule(Parser *p)
     }
     _res = NULL;
   done:
-    D(p->level--);
+    p->level--;
     return _res;
 }
 
@@ -21684,9 +22423,12 @@ _gather_7_rule(Parser *p)
 static asdl_seq *
 _loop0_10_rule(Parser *p)
 {
-    D(p->level++);
+    if (p->level++ == MAXSTACK) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+    }
     if (p->error_indicator) {
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     void *_res = NULL;
@@ -21696,14 +22438,14 @@ _loop0_10_rule(Parser *p)
     if (!_children) {
         p->error_indicator = 1;
         PyErr_NoMemory();
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     Py_ssize_t _children_capacity = 1;
     Py_ssize_t _n = 0;
     { // ',' expression
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> _loop0_10[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "',' expression"));
@@ -21719,7 +22461,7 @@ _loop0_10_rule(Parser *p)
             if (_res == NULL && PyErr_Occurred()) {
                 p->error_indicator = 1;
                 PyMem_Free(_children);
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             if (_n == _children_capacity) {
@@ -21728,7 +22470,7 @@ _loop0_10_rule(Parser *p)
                 if (!_new_children) {
                     p->error_indicator = 1;
                     PyErr_NoMemory();
-                    D(p->level--);
+                    p->level--;
                     return NULL;
                 }
                 _children = _new_children;
@@ -21745,13 +22487,13 @@ _loop0_10_rule(Parser *p)
         PyMem_Free(_children);
         p->error_indicator = 1;
         PyErr_NoMemory();
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     for (int i = 0; i < _n; i++) asdl_seq_SET_UNTYPED(_seq, i, _children[i]);
     PyMem_Free(_children);
     _PyPegen_insert_memo(p, _start_mark, _loop0_10_type, _seq);
-    D(p->level--);
+    p->level--;
     return _seq;
 }
 
@@ -21759,16 +22501,19 @@ _loop0_10_rule(Parser *p)
 static asdl_seq *
 _gather_9_rule(Parser *p)
 {
-    D(p->level++);
+    if (p->level++ == MAXSTACK) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+    }
     if (p->error_indicator) {
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     asdl_seq * _res = NULL;
     int _mark = p->mark;
     { // expression _loop0_10
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> _gather_9[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "expression _loop0_10"));
@@ -21790,7 +22535,7 @@ _gather_9_rule(Parser *p)
     }
     _res = NULL;
   done:
-    D(p->level--);
+    p->level--;
     return _res;
 }
 
@@ -21798,9 +22543,12 @@ _gather_9_rule(Parser *p)
 static asdl_seq *
 _loop1_11_rule(Parser *p)
 {
-    D(p->level++);
+    if (p->level++ == MAXSTACK) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+    }
     if (p->error_indicator) {
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     void *_res = NULL;
@@ -21810,14 +22558,14 @@ _loop1_11_rule(Parser *p)
     if (!_children) {
         p->error_indicator = 1;
         PyErr_NoMemory();
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     Py_ssize_t _children_capacity = 1;
     Py_ssize_t _n = 0;
     { // statement
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> _loop1_11[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "statement"));
@@ -21833,7 +22581,7 @@ _loop1_11_rule(Parser *p)
                 if (!_new_children) {
                     p->error_indicator = 1;
                     PyErr_NoMemory();
-                    D(p->level--);
+                    p->level--;
                     return NULL;
                 }
                 _children = _new_children;
@@ -21847,7 +22595,7 @@ _loop1_11_rule(Parser *p)
     }
     if (_n == 0 || p->error_indicator) {
         PyMem_Free(_children);
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     asdl_seq *_seq = (asdl_seq*)_Py_asdl_generic_seq_new(_n, p->arena);
@@ -21855,13 +22603,13 @@ _loop1_11_rule(Parser *p)
         PyMem_Free(_children);
         p->error_indicator = 1;
         PyErr_NoMemory();
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     for (int i = 0; i < _n; i++) asdl_seq_SET_UNTYPED(_seq, i, _children[i]);
     PyMem_Free(_children);
     _PyPegen_insert_memo(p, _start_mark, _loop1_11_type, _seq);
-    D(p->level--);
+    p->level--;
     return _seq;
 }
 
@@ -21869,9 +22617,12 @@ _loop1_11_rule(Parser *p)
 static asdl_seq *
 _loop0_13_rule(Parser *p)
 {
-    D(p->level++);
+    if (p->level++ == MAXSTACK) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+    }
     if (p->error_indicator) {
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     void *_res = NULL;
@@ -21881,14 +22632,14 @@ _loop0_13_rule(Parser *p)
     if (!_children) {
         p->error_indicator = 1;
         PyErr_NoMemory();
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     Py_ssize_t _children_capacity = 1;
     Py_ssize_t _n = 0;
     { // ';' simple_stmt
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> _loop0_13[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "';' simple_stmt"));
@@ -21904,7 +22655,7 @@ _loop0_13_rule(Parser *p)
             if (_res == NULL && PyErr_Occurred()) {
                 p->error_indicator = 1;
                 PyMem_Free(_children);
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             if (_n == _children_capacity) {
@@ -21913,7 +22664,7 @@ _loop0_13_rule(Parser *p)
                 if (!_new_children) {
                     p->error_indicator = 1;
                     PyErr_NoMemory();
-                    D(p->level--);
+                    p->level--;
                     return NULL;
                 }
                 _children = _new_children;
@@ -21930,13 +22681,13 @@ _loop0_13_rule(Parser *p)
         PyMem_Free(_children);
         p->error_indicator = 1;
         PyErr_NoMemory();
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     for (int i = 0; i < _n; i++) asdl_seq_SET_UNTYPED(_seq, i, _children[i]);
     PyMem_Free(_children);
     _PyPegen_insert_memo(p, _start_mark, _loop0_13_type, _seq);
-    D(p->level--);
+    p->level--;
     return _seq;
 }
 
@@ -21944,16 +22695,19 @@ _loop0_13_rule(Parser *p)
 static asdl_seq *
 _gather_12_rule(Parser *p)
 {
-    D(p->level++);
+    if (p->level++ == MAXSTACK) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+    }
     if (p->error_indicator) {
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     asdl_seq * _res = NULL;
     int _mark = p->mark;
     { // simple_stmt _loop0_13
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> _gather_12[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "simple_stmt _loop0_13"));
@@ -21975,7 +22729,7 @@ _gather_12_rule(Parser *p)
     }
     _res = NULL;
   done:
-    D(p->level--);
+    p->level--;
     return _res;
 }
 
@@ -21983,16 +22737,19 @@ _gather_12_rule(Parser *p)
 static void *
 _tmp_14_rule(Parser *p)
 {
-    D(p->level++);
+    if (p->level++ == MAXSTACK) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+    }
     if (p->error_indicator) {
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     void * _res = NULL;
     int _mark = p->mark;
     { // 'import'
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> _tmp_14[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'import'"));
@@ -22011,7 +22768,7 @@ _tmp_14_rule(Parser *p)
     }
     { // 'from'
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> _tmp_14[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'from'"));
@@ -22030,7 +22787,7 @@ _tmp_14_rule(Parser *p)
     }
     _res = NULL;
   done:
-    D(p->level--);
+    p->level--;
     return _res;
 }
 
@@ -22038,16 +22795,19 @@ _tmp_14_rule(Parser *p)
 static void *
 _tmp_15_rule(Parser *p)
 {
-    D(p->level++);
+    if (p->level++ == MAXSTACK) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+    }
     if (p->error_indicator) {
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     void * _res = NULL;
     int _mark = p->mark;
     { // 'def'
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> _tmp_15[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'def'"));
@@ -22066,7 +22826,7 @@ _tmp_15_rule(Parser *p)
     }
     { // '@'
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> _tmp_15[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'@'"));
@@ -22085,7 +22845,7 @@ _tmp_15_rule(Parser *p)
     }
     { // ASYNC
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> _tmp_15[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "ASYNC"));
@@ -22104,7 +22864,7 @@ _tmp_15_rule(Parser *p)
     }
     _res = NULL;
   done:
-    D(p->level--);
+    p->level--;
     return _res;
 }
 
@@ -22112,16 +22872,19 @@ _tmp_15_rule(Parser *p)
 static void *
 _tmp_16_rule(Parser *p)
 {
-    D(p->level++);
+    if (p->level++ == MAXSTACK) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+    }
     if (p->error_indicator) {
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     void * _res = NULL;
     int _mark = p->mark;
     { // 'class'
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> _tmp_16[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'class'"));
@@ -22140,7 +22903,7 @@ _tmp_16_rule(Parser *p)
     }
     { // '@'
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> _tmp_16[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'@'"));
@@ -22159,7 +22922,7 @@ _tmp_16_rule(Parser *p)
     }
     _res = NULL;
   done:
-    D(p->level--);
+    p->level--;
     return _res;
 }
 
@@ -22167,16 +22930,19 @@ _tmp_16_rule(Parser *p)
 static void *
 _tmp_17_rule(Parser *p)
 {
-    D(p->level++);
-    if (p->error_indicator) {
-        D(p->level--);
-        return NULL;
+    if (p->level++ == MAXSTACK) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+    }
+    if (p->error_indicator) {
+        p->level--;
+        return NULL;
     }
     void * _res = NULL;
     int _mark = p->mark;
     { // 'with'
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> _tmp_17[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'with'"));
@@ -22195,7 +22961,7 @@ _tmp_17_rule(Parser *p)
     }
     { // ASYNC
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> _tmp_17[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "ASYNC"));
@@ -22214,7 +22980,7 @@ _tmp_17_rule(Parser *p)
     }
     _res = NULL;
   done:
-    D(p->level--);
+    p->level--;
     return _res;
 }
 
@@ -22222,16 +22988,19 @@ _tmp_17_rule(Parser *p)
 static void *
 _tmp_18_rule(Parser *p)
 {
-    D(p->level++);
+    if (p->level++ == MAXSTACK) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+    }
     if (p->error_indicator) {
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     void * _res = NULL;
     int _mark = p->mark;
     { // 'for'
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> _tmp_18[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'for'"));
@@ -22250,7 +23019,7 @@ _tmp_18_rule(Parser *p)
     }
     { // ASYNC
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> _tmp_18[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "ASYNC"));
@@ -22269,7 +23038,7 @@ _tmp_18_rule(Parser *p)
     }
     _res = NULL;
   done:
-    D(p->level--);
+    p->level--;
     return _res;
 }
 
@@ -22277,16 +23046,19 @@ _tmp_18_rule(Parser *p)
 static void *
 _tmp_19_rule(Parser *p)
 {
-    D(p->level++);
+    if (p->level++ == MAXSTACK) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+    }
     if (p->error_indicator) {
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     void * _res = NULL;
     int _mark = p->mark;
     { // '=' annotated_rhs
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> _tmp_19[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'=' annotated_rhs"));
@@ -22302,7 +23074,7 @@ _tmp_19_rule(Parser *p)
             _res = d;
             if (_res == NULL && PyErr_Occurred()) {
                 p->error_indicator = 1;
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             goto done;
@@ -22313,7 +23085,7 @@ _tmp_19_rule(Parser *p)
     }
     _res = NULL;
   done:
-    D(p->level--);
+    p->level--;
     return _res;
 }
 
@@ -22321,16 +23093,19 @@ _tmp_19_rule(Parser *p)
 static void *
 _tmp_20_rule(Parser *p)
 {
-    D(p->level++);
+    if (p->level++ == MAXSTACK) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+    }
     if (p->error_indicator) {
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     void * _res = NULL;
     int _mark = p->mark;
     { // '(' single_target ')'
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> _tmp_20[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'(' single_target ')'"));
@@ -22349,7 +23124,7 @@ _tmp_20_rule(Parser *p)
             _res = b;
             if (_res == NULL && PyErr_Occurred()) {
                 p->error_indicator = 1;
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             goto done;
@@ -22360,7 +23135,7 @@ _tmp_20_rule(Parser *p)
     }
     { // single_subscript_attribute_target
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> _tmp_20[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "single_subscript_attribute_target"));
@@ -22379,7 +23154,7 @@ _tmp_20_rule(Parser *p)
     }
     _res = NULL;
   done:
-    D(p->level--);
+    p->level--;
     return _res;
 }
 
@@ -22387,16 +23162,19 @@ _tmp_20_rule(Parser *p)
 static void *
 _tmp_21_rule(Parser *p)
 {
-    D(p->level++);
+    if (p->level++ == MAXSTACK) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+    }
     if (p->error_indicator) {
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     void * _res = NULL;
     int _mark = p->mark;
     { // '=' annotated_rhs
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> _tmp_21[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'=' annotated_rhs"));
@@ -22412,7 +23190,7 @@ _tmp_21_rule(Parser *p)
             _res = d;
             if (_res == NULL && PyErr_Occurred()) {
                 p->error_indicator = 1;
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             goto done;
@@ -22423,7 +23201,7 @@ _tmp_21_rule(Parser *p)
     }
     _res = NULL;
   done:
-    D(p->level--);
+    p->level--;
     return _res;
 }
 
@@ -22431,9 +23209,12 @@ _tmp_21_rule(Parser *p)
 static asdl_seq *
 _loop1_22_rule(Parser *p)
 {
-    D(p->level++);
+    if (p->level++ == MAXSTACK) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+    }
     if (p->error_indicator) {
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     void *_res = NULL;
@@ -22443,14 +23224,14 @@ _loop1_22_rule(Parser *p)
     if (!_children) {
         p->error_indicator = 1;
         PyErr_NoMemory();
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     Py_ssize_t _children_capacity = 1;
     Py_ssize_t _n = 0;
     { // (star_targets '=')
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> _loop1_22[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "(star_targets '=')"));
@@ -22466,7 +23247,7 @@ _loop1_22_rule(Parser *p)
                 if (!_new_children) {
                     p->error_indicator = 1;
                     PyErr_NoMemory();
-                    D(p->level--);
+                    p->level--;
                     return NULL;
                 }
                 _children = _new_children;
@@ -22480,7 +23261,7 @@ _loop1_22_rule(Parser *p)
     }
     if (_n == 0 || p->error_indicator) {
         PyMem_Free(_children);
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     asdl_seq *_seq = (asdl_seq*)_Py_asdl_generic_seq_new(_n, p->arena);
@@ -22488,13 +23269,13 @@ _loop1_22_rule(Parser *p)
         PyMem_Free(_children);
         p->error_indicator = 1;
         PyErr_NoMemory();
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     for (int i = 0; i < _n; i++) asdl_seq_SET_UNTYPED(_seq, i, _children[i]);
     PyMem_Free(_children);
     _PyPegen_insert_memo(p, _start_mark, _loop1_22_type, _seq);
-    D(p->level--);
+    p->level--;
     return _seq;
 }
 
@@ -22502,16 +23283,19 @@ _loop1_22_rule(Parser *p)
 static void *
 _tmp_23_rule(Parser *p)
 {
-    D(p->level++);
+    if (p->level++ == MAXSTACK) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+    }
     if (p->error_indicator) {
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     void * _res = NULL;
     int _mark = p->mark;
     { // yield_expr
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> _tmp_23[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "yield_expr"));
@@ -22530,7 +23314,7 @@ _tmp_23_rule(Parser *p)
     }
     { // star_expressions
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> _tmp_23[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "star_expressions"));
@@ -22549,7 +23333,7 @@ _tmp_23_rule(Parser *p)
     }
     _res = NULL;
   done:
-    D(p->level--);
+    p->level--;
     return _res;
 }
 
@@ -22557,16 +23341,19 @@ _tmp_23_rule(Parser *p)
 static void *
 _tmp_24_rule(Parser *p)
 {
-    D(p->level++);
+    if (p->level++ == MAXSTACK) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+    }
     if (p->error_indicator) {
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     void * _res = NULL;
     int _mark = p->mark;
     { // yield_expr
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> _tmp_24[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "yield_expr"));
@@ -22585,7 +23372,7 @@ _tmp_24_rule(Parser *p)
     }
     { // star_expressions
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> _tmp_24[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "star_expressions"));
@@ -22604,7 +23391,7 @@ _tmp_24_rule(Parser *p)
     }
     _res = NULL;
   done:
-    D(p->level--);
+    p->level--;
     return _res;
 }
 
@@ -22612,9 +23399,12 @@ _tmp_24_rule(Parser *p)
 static asdl_seq *
 _loop0_26_rule(Parser *p)
 {
-    D(p->level++);
+    if (p->level++ == MAXSTACK) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+    }
     if (p->error_indicator) {
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     void *_res = NULL;
@@ -22624,14 +23414,14 @@ _loop0_26_rule(Parser *p)
     if (!_children) {
         p->error_indicator = 1;
         PyErr_NoMemory();
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     Py_ssize_t _children_capacity = 1;
     Py_ssize_t _n = 0;
     { // ',' NAME
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> _loop0_26[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "',' NAME"));
@@ -22647,7 +23437,7 @@ _loop0_26_rule(Parser *p)
             if (_res == NULL && PyErr_Occurred()) {
                 p->error_indicator = 1;
                 PyMem_Free(_children);
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             if (_n == _children_capacity) {
@@ -22656,7 +23446,7 @@ _loop0_26_rule(Parser *p)
                 if (!_new_children) {
                     p->error_indicator = 1;
                     PyErr_NoMemory();
-                    D(p->level--);
+                    p->level--;
                     return NULL;
                 }
                 _children = _new_children;
@@ -22673,13 +23463,13 @@ _loop0_26_rule(Parser *p)
         PyMem_Free(_children);
         p->error_indicator = 1;
         PyErr_NoMemory();
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     for (int i = 0; i < _n; i++) asdl_seq_SET_UNTYPED(_seq, i, _children[i]);
     PyMem_Free(_children);
     _PyPegen_insert_memo(p, _start_mark, _loop0_26_type, _seq);
-    D(p->level--);
+    p->level--;
     return _seq;
 }
 
@@ -22687,16 +23477,19 @@ _loop0_26_rule(Parser *p)
 static asdl_seq *
 _gather_25_rule(Parser *p)
 {
-    D(p->level++);
+    if (p->level++ == MAXSTACK) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+    }
     if (p->error_indicator) {
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     asdl_seq * _res = NULL;
     int _mark = p->mark;
     { // NAME _loop0_26
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> _gather_25[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "NAME _loop0_26"));
@@ -22718,7 +23511,7 @@ _gather_25_rule(Parser *p)
     }
     _res = NULL;
   done:
-    D(p->level--);
+    p->level--;
     return _res;
 }
 
@@ -22726,9 +23519,12 @@ _gather_25_rule(Parser *p)
 static asdl_seq *
 _loop0_28_rule(Parser *p)
 {
-    D(p->level++);
+    if (p->level++ == MAXSTACK) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+    }
     if (p->error_indicator) {
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     void *_res = NULL;
@@ -22738,14 +23534,14 @@ _loop0_28_rule(Parser *p)
     if (!_children) {
         p->error_indicator = 1;
         PyErr_NoMemory();
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     Py_ssize_t _children_capacity = 1;
     Py_ssize_t _n = 0;
     { // ',' NAME
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> _loop0_28[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "',' NAME"));
@@ -22761,7 +23557,7 @@ _loop0_28_rule(Parser *p)
             if (_res == NULL && PyErr_Occurred()) {
                 p->error_indicator = 1;
                 PyMem_Free(_children);
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             if (_n == _children_capacity) {
@@ -22770,7 +23566,7 @@ _loop0_28_rule(Parser *p)
                 if (!_new_children) {
                     p->error_indicator = 1;
                     PyErr_NoMemory();
-                    D(p->level--);
+                    p->level--;
                     return NULL;
                 }
                 _children = _new_children;
@@ -22787,13 +23583,13 @@ _loop0_28_rule(Parser *p)
         PyMem_Free(_children);
         p->error_indicator = 1;
         PyErr_NoMemory();
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     for (int i = 0; i < _n; i++) asdl_seq_SET_UNTYPED(_seq, i, _children[i]);
     PyMem_Free(_children);
     _PyPegen_insert_memo(p, _start_mark, _loop0_28_type, _seq);
-    D(p->level--);
+    p->level--;
     return _seq;
 }
 
@@ -22801,16 +23597,19 @@ _loop0_28_rule(Parser *p)
 static asdl_seq *
 _gather_27_rule(Parser *p)
 {
-    D(p->level++);
+    if (p->level++ == MAXSTACK) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+    }
     if (p->error_indicator) {
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     asdl_seq * _res = NULL;
     int _mark = p->mark;
     { // NAME _loop0_28
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> _gather_27[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "NAME _loop0_28"));
@@ -22832,7 +23631,7 @@ _gather_27_rule(Parser *p)
     }
     _res = NULL;
   done:
-    D(p->level--);
+    p->level--;
     return _res;
 }
 
@@ -22840,16 +23639,19 @@ _gather_27_rule(Parser *p)
 static void *
 _tmp_29_rule(Parser *p)
 {
-    D(p->level++);
+    if (p->level++ == MAXSTACK) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+    }
     if (p->error_indicator) {
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     void * _res = NULL;
     int _mark = p->mark;
     { // ',' expression
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> _tmp_29[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "',' expression"));
@@ -22865,7 +23667,7 @@ _tmp_29_rule(Parser *p)
             _res = z;
             if (_res == NULL && PyErr_Occurred()) {
                 p->error_indicator = 1;
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             goto done;
@@ -22876,7 +23678,7 @@ _tmp_29_rule(Parser *p)
     }
     _res = NULL;
   done:
-    D(p->level--);
+    p->level--;
     return _res;
 }
 
@@ -22884,16 +23686,19 @@ _tmp_29_rule(Parser *p)
 static void *
 _tmp_30_rule(Parser *p)
 {
-    D(p->level++);
+    if (p->level++ == MAXSTACK) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+    }
     if (p->error_indicator) {
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     void * _res = NULL;
     int _mark = p->mark;
     { // ';'
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> _tmp_30[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "';'"));
@@ -22912,7 +23717,7 @@ _tmp_30_rule(Parser *p)
     }
     { // NEWLINE
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> _tmp_30[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "NEWLINE"));
@@ -22931,7 +23736,7 @@ _tmp_30_rule(Parser *p)
     }
     _res = NULL;
   done:
-    D(p->level--);
+    p->level--;
     return _res;
 }
 
@@ -22939,9 +23744,12 @@ _tmp_30_rule(Parser *p)
 static asdl_seq *
 _loop0_31_rule(Parser *p)
 {
-    D(p->level++);
+    if (p->level++ == MAXSTACK) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+    }
     if (p->error_indicator) {
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     void *_res = NULL;
@@ -22951,14 +23759,14 @@ _loop0_31_rule(Parser *p)
     if (!_children) {
         p->error_indicator = 1;
         PyErr_NoMemory();
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     Py_ssize_t _children_capacity = 1;
     Py_ssize_t _n = 0;
     { // ('.' | '...')
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> _loop0_31[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "('.' | '...')"));
@@ -22974,7 +23782,7 @@ _loop0_31_rule(Parser *p)
                 if (!_new_children) {
                     p->error_indicator = 1;
                     PyErr_NoMemory();
-                    D(p->level--);
+                    p->level--;
                     return NULL;
                 }
                 _children = _new_children;
@@ -22991,13 +23799,13 @@ _loop0_31_rule(Parser *p)
         PyMem_Free(_children);
         p->error_indicator = 1;
         PyErr_NoMemory();
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     for (int i = 0; i < _n; i++) asdl_seq_SET_UNTYPED(_seq, i, _children[i]);
     PyMem_Free(_children);
     _PyPegen_insert_memo(p, _start_mark, _loop0_31_type, _seq);
-    D(p->level--);
+    p->level--;
     return _seq;
 }
 
@@ -23005,9 +23813,12 @@ _loop0_31_rule(Parser *p)
 static asdl_seq *
 _loop1_32_rule(Parser *p)
 {
-    D(p->level++);
+    if (p->level++ == MAXSTACK) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+    }
     if (p->error_indicator) {
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     void *_res = NULL;
@@ -23017,14 +23828,14 @@ _loop1_32_rule(Parser *p)
     if (!_children) {
         p->error_indicator = 1;
         PyErr_NoMemory();
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     Py_ssize_t _children_capacity = 1;
     Py_ssize_t _n = 0;
     { // ('.' | '...')
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> _loop1_32[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "('.' | '...')"));
@@ -23040,7 +23851,7 @@ _loop1_32_rule(Parser *p)
                 if (!_new_children) {
                     p->error_indicator = 1;
                     PyErr_NoMemory();
-                    D(p->level--);
+                    p->level--;
                     return NULL;
                 }
                 _children = _new_children;
@@ -23054,7 +23865,7 @@ _loop1_32_rule(Parser *p)
     }
     if (_n == 0 || p->error_indicator) {
         PyMem_Free(_children);
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     asdl_seq *_seq = (asdl_seq*)_Py_asdl_generic_seq_new(_n, p->arena);
@@ -23062,13 +23873,13 @@ _loop1_32_rule(Parser *p)
         PyMem_Free(_children);
         p->error_indicator = 1;
         PyErr_NoMemory();
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     for (int i = 0; i < _n; i++) asdl_seq_SET_UNTYPED(_seq, i, _children[i]);
     PyMem_Free(_children);
     _PyPegen_insert_memo(p, _start_mark, _loop1_32_type, _seq);
-    D(p->level--);
+    p->level--;
     return _seq;
 }
 
@@ -23076,9 +23887,12 @@ _loop1_32_rule(Parser *p)
 static asdl_seq *
 _loop0_34_rule(Parser *p)
 {
-    D(p->level++);
+    if (p->level++ == MAXSTACK) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+    }
     if (p->error_indicator) {
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     void *_res = NULL;
@@ -23088,14 +23902,14 @@ _loop0_34_rule(Parser *p)
     if (!_children) {
         p->error_indicator = 1;
         PyErr_NoMemory();
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     Py_ssize_t _children_capacity = 1;
     Py_ssize_t _n = 0;
     { // ',' import_from_as_name
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> _loop0_34[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "',' import_from_as_name"));
@@ -23111,7 +23925,7 @@ _loop0_34_rule(Parser *p)
             if (_res == NULL && PyErr_Occurred()) {
                 p->error_indicator = 1;
                 PyMem_Free(_children);
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             if (_n == _children_capacity) {
@@ -23120,7 +23934,7 @@ _loop0_34_rule(Parser *p)
                 if (!_new_children) {
                     p->error_indicator = 1;
                     PyErr_NoMemory();
-                    D(p->level--);
+                    p->level--;
                     return NULL;
                 }
                 _children = _new_children;
@@ -23137,13 +23951,13 @@ _loop0_34_rule(Parser *p)
         PyMem_Free(_children);
         p->error_indicator = 1;
         PyErr_NoMemory();
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     for (int i = 0; i < _n; i++) asdl_seq_SET_UNTYPED(_seq, i, _children[i]);
     PyMem_Free(_children);
     _PyPegen_insert_memo(p, _start_mark, _loop0_34_type, _seq);
-    D(p->level--);
+    p->level--;
     return _seq;
 }
 
@@ -23151,16 +23965,19 @@ _loop0_34_rule(Parser *p)
 static asdl_seq *
 _gather_33_rule(Parser *p)
 {
-    D(p->level++);
+    if (p->level++ == MAXSTACK) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+    }
     if (p->error_indicator) {
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     asdl_seq * _res = NULL;
     int _mark = p->mark;
     { // import_from_as_name _loop0_34
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> _gather_33[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "import_from_as_name _loop0_34"));
@@ -23182,7 +23999,7 @@ _gather_33_rule(Parser *p)
     }
     _res = NULL;
   done:
-    D(p->level--);
+    p->level--;
     return _res;
 }
 
@@ -23190,16 +24007,19 @@ _gather_33_rule(Parser *p)
 static void *
 _tmp_35_rule(Parser *p)
 {
-    D(p->level++);
+    if (p->level++ == MAXSTACK) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+    }
     if (p->error_indicator) {
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     void * _res = NULL;
     int _mark = p->mark;
     { // 'as' NAME
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> _tmp_35[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'as' NAME"));
@@ -23215,7 +24035,7 @@ _tmp_35_rule(Parser *p)
             _res = z;
             if (_res == NULL && PyErr_Occurred()) {
                 p->error_indicator = 1;
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             goto done;
@@ -23226,7 +24046,7 @@ _tmp_35_rule(Parser *p)
     }
     _res = NULL;
   done:
-    D(p->level--);
+    p->level--;
     return _res;
 }
 
@@ -23234,9 +24054,12 @@ _tmp_35_rule(Parser *p)
 static asdl_seq *
 _loop0_37_rule(Parser *p)
 {
-    D(p->level++);
+    if (p->level++ == MAXSTACK) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+    }
     if (p->error_indicator) {
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     void *_res = NULL;
@@ -23246,14 +24069,14 @@ _loop0_37_rule(Parser *p)
     if (!_children) {
         p->error_indicator = 1;
         PyErr_NoMemory();
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     Py_ssize_t _children_capacity = 1;
     Py_ssize_t _n = 0;
     { // ',' dotted_as_name
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> _loop0_37[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "',' dotted_as_name"));
@@ -23269,7 +24092,7 @@ _loop0_37_rule(Parser *p)
             if (_res == NULL && PyErr_Occurred()) {
                 p->error_indicator = 1;
                 PyMem_Free(_children);
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             if (_n == _children_capacity) {
@@ -23278,7 +24101,7 @@ _loop0_37_rule(Parser *p)
                 if (!_new_children) {
                     p->error_indicator = 1;
                     PyErr_NoMemory();
-                    D(p->level--);
+                    p->level--;
                     return NULL;
                 }
                 _children = _new_children;
@@ -23295,13 +24118,13 @@ _loop0_37_rule(Parser *p)
         PyMem_Free(_children);
         p->error_indicator = 1;
         PyErr_NoMemory();
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     for (int i = 0; i < _n; i++) asdl_seq_SET_UNTYPED(_seq, i, _children[i]);
     PyMem_Free(_children);
     _PyPegen_insert_memo(p, _start_mark, _loop0_37_type, _seq);
-    D(p->level--);
+    p->level--;
     return _seq;
 }
 
@@ -23309,16 +24132,19 @@ _loop0_37_rule(Parser *p)
 static asdl_seq *
 _gather_36_rule(Parser *p)
 {
-    D(p->level++);
+    if (p->level++ == MAXSTACK) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+    }
     if (p->error_indicator) {
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     asdl_seq * _res = NULL;
     int _mark = p->mark;
     { // dotted_as_name _loop0_37
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> _gather_36[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "dotted_as_name _loop0_37"));
@@ -23340,7 +24166,7 @@ _gather_36_rule(Parser *p)
     }
     _res = NULL;
   done:
-    D(p->level--);
+    p->level--;
     return _res;
 }
 
@@ -23348,16 +24174,19 @@ _gather_36_rule(Parser *p)
 static void *
 _tmp_38_rule(Parser *p)
 {
-    D(p->level++);
+    if (p->level++ == MAXSTACK) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+    }
     if (p->error_indicator) {
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     void * _res = NULL;
     int _mark = p->mark;
     { // 'as' NAME
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> _tmp_38[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'as' NAME"));
@@ -23373,7 +24202,7 @@ _tmp_38_rule(Parser *p)
             _res = z;
             if (_res == NULL && PyErr_Occurred()) {
                 p->error_indicator = 1;
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             goto done;
@@ -23384,7 +24213,7 @@ _tmp_38_rule(Parser *p)
     }
     _res = NULL;
   done:
-    D(p->level--);
+    p->level--;
     return _res;
 }
 
@@ -23392,9 +24221,12 @@ _tmp_38_rule(Parser *p)
 static asdl_seq *
 _loop0_40_rule(Parser *p)
 {
-    D(p->level++);
+    if (p->level++ == MAXSTACK) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+    }
     if (p->error_indicator) {
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     void *_res = NULL;
@@ -23404,14 +24236,14 @@ _loop0_40_rule(Parser *p)
     if (!_children) {
         p->error_indicator = 1;
         PyErr_NoMemory();
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     Py_ssize_t _children_capacity = 1;
     Py_ssize_t _n = 0;
     { // ',' with_item
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> _loop0_40[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "',' with_item"));
@@ -23427,7 +24259,7 @@ _loop0_40_rule(Parser *p)
             if (_res == NULL && PyErr_Occurred()) {
                 p->error_indicator = 1;
                 PyMem_Free(_children);
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             if (_n == _children_capacity) {
@@ -23436,7 +24268,7 @@ _loop0_40_rule(Parser *p)
                 if (!_new_children) {
                     p->error_indicator = 1;
                     PyErr_NoMemory();
-                    D(p->level--);
+                    p->level--;
                     return NULL;
                 }
                 _children = _new_children;
@@ -23453,13 +24285,13 @@ _loop0_40_rule(Parser *p)
         PyMem_Free(_children);
         p->error_indicator = 1;
         PyErr_NoMemory();
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     for (int i = 0; i < _n; i++) asdl_seq_SET_UNTYPED(_seq, i, _children[i]);
     PyMem_Free(_children);
     _PyPegen_insert_memo(p, _start_mark, _loop0_40_type, _seq);
-    D(p->level--);
+    p->level--;
     return _seq;
 }
 
@@ -23467,16 +24299,19 @@ _loop0_40_rule(Parser *p)
 static asdl_seq *
 _gather_39_rule(Parser *p)
 {
-    D(p->level++);
+    if (p->level++ == MAXSTACK) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+    }
     if (p->error_indicator) {
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     asdl_seq * _res = NULL;
     int _mark = p->mark;
     { // with_item _loop0_40
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> _gather_39[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "with_item _loop0_40"));
@@ -23498,7 +24333,7 @@ _gather_39_rule(Parser *p)
     }
     _res = NULL;
   done:
-    D(p->level--);
+    p->level--;
     return _res;
 }
 
@@ -23506,9 +24341,12 @@ _gather_39_rule(Parser *p)
 static asdl_seq *
 _loop0_42_rule(Parser *p)
 {
-    D(p->level++);
+    if (p->level++ == MAXSTACK) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+    }
     if (p->error_indicator) {
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     void *_res = NULL;
@@ -23518,14 +24356,14 @@ _loop0_42_rule(Parser *p)
     if (!_children) {
         p->error_indicator = 1;
         PyErr_NoMemory();
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     Py_ssize_t _children_capacity = 1;
     Py_ssize_t _n = 0;
     { // ',' with_item
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> _loop0_42[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "',' with_item"));
@@ -23541,7 +24379,7 @@ _loop0_42_rule(Parser *p)
             if (_res == NULL && PyErr_Occurred()) {
                 p->error_indicator = 1;
                 PyMem_Free(_children);
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             if (_n == _children_capacity) {
@@ -23550,7 +24388,7 @@ _loop0_42_rule(Parser *p)
                 if (!_new_children) {
                     p->error_indicator = 1;
                     PyErr_NoMemory();
-                    D(p->level--);
+                    p->level--;
                     return NULL;
                 }
                 _children = _new_children;
@@ -23567,13 +24405,13 @@ _loop0_42_rule(Parser *p)
         PyMem_Free(_children);
         p->error_indicator = 1;
         PyErr_NoMemory();
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     for (int i = 0; i < _n; i++) asdl_seq_SET_UNTYPED(_seq, i, _children[i]);
     PyMem_Free(_children);
     _PyPegen_insert_memo(p, _start_mark, _loop0_42_type, _seq);
-    D(p->level--);
+    p->level--;
     return _seq;
 }
 
@@ -23581,16 +24419,19 @@ _loop0_42_rule(Parser *p)
 static asdl_seq *
 _gather_41_rule(Parser *p)
 {
-    D(p->level++);
+    if (p->level++ == MAXSTACK) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+    }
     if (p->error_indicator) {
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     asdl_seq * _res = NULL;
     int _mark = p->mark;
     { // with_item _loop0_42
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> _gather_41[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "with_item _loop0_42"));
@@ -23612,7 +24453,7 @@ _gather_41_rule(Parser *p)
     }
     _res = NULL;
   done:
-    D(p->level--);
+    p->level--;
     return _res;
 }
 
@@ -23620,9 +24461,12 @@ _gather_41_rule(Parser *p)
 static asdl_seq *
 _loop0_44_rule(Parser *p)
 {
-    D(p->level++);
+    if (p->level++ == MAXSTACK) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+    }
     if (p->error_indicator) {
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     void *_res = NULL;
@@ -23632,14 +24476,14 @@ _loop0_44_rule(Parser *p)
     if (!_children) {
         p->error_indicator = 1;
         PyErr_NoMemory();
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     Py_ssize_t _children_capacity = 1;
     Py_ssize_t _n = 0;
     { // ',' with_item
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> _loop0_44[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "',' with_item"));
@@ -23655,7 +24499,7 @@ _loop0_44_rule(Parser *p)
             if (_res == NULL && PyErr_Occurred()) {
                 p->error_indicator = 1;
                 PyMem_Free(_children);
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             if (_n == _children_capacity) {
@@ -23664,7 +24508,7 @@ _loop0_44_rule(Parser *p)
                 if (!_new_children) {
                     p->error_indicator = 1;
                     PyErr_NoMemory();
-                    D(p->level--);
+                    p->level--;
                     return NULL;
                 }
                 _children = _new_children;
@@ -23681,13 +24525,13 @@ _loop0_44_rule(Parser *p)
         PyMem_Free(_children);
         p->error_indicator = 1;
         PyErr_NoMemory();
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     for (int i = 0; i < _n; i++) asdl_seq_SET_UNTYPED(_seq, i, _children[i]);
     PyMem_Free(_children);
     _PyPegen_insert_memo(p, _start_mark, _loop0_44_type, _seq);
-    D(p->level--);
+    p->level--;
     return _seq;
 }
 
@@ -23695,16 +24539,19 @@ _loop0_44_rule(Parser *p)
 static asdl_seq *
 _gather_43_rule(Parser *p)
 {
-    D(p->level++);
+    if (p->level++ == MAXSTACK) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+    }
     if (p->error_indicator) {
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     asdl_seq * _res = NULL;
     int _mark = p->mark;
     { // with_item _loop0_44
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> _gather_43[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "with_item _loop0_44"));
@@ -23726,7 +24573,7 @@ _gather_43_rule(Parser *p)
     }
     _res = NULL;
   done:
-    D(p->level--);
+    p->level--;
     return _res;
 }
 
@@ -23734,9 +24581,12 @@ _gather_43_rule(Parser *p)
 static asdl_seq *
 _loop0_46_rule(Parser *p)
 {
-    D(p->level++);
+    if (p->level++ == MAXSTACK) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+    }
     if (p->error_indicator) {
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     void *_res = NULL;
@@ -23746,14 +24596,14 @@ _loop0_46_rule(Parser *p)
     if (!_children) {
         p->error_indicator = 1;
         PyErr_NoMemory();
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     Py_ssize_t _children_capacity = 1;
     Py_ssize_t _n = 0;
     { // ',' with_item
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> _loop0_46[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "',' with_item"));
@@ -23769,7 +24619,7 @@ _loop0_46_rule(Parser *p)
             if (_res == NULL && PyErr_Occurred()) {
                 p->error_indicator = 1;
                 PyMem_Free(_children);
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             if (_n == _children_capacity) {
@@ -23778,7 +24628,7 @@ _loop0_46_rule(Parser *p)
                 if (!_new_children) {
                     p->error_indicator = 1;
                     PyErr_NoMemory();
-                    D(p->level--);
+                    p->level--;
                     return NULL;
                 }
                 _children = _new_children;
@@ -23795,13 +24645,13 @@ _loop0_46_rule(Parser *p)
         PyMem_Free(_children);
         p->error_indicator = 1;
         PyErr_NoMemory();
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     for (int i = 0; i < _n; i++) asdl_seq_SET_UNTYPED(_seq, i, _children[i]);
     PyMem_Free(_children);
     _PyPegen_insert_memo(p, _start_mark, _loop0_46_type, _seq);
-    D(p->level--);
+    p->level--;
     return _seq;
 }
 
@@ -23809,16 +24659,19 @@ _loop0_46_rule(Parser *p)
 static asdl_seq *
 _gather_45_rule(Parser *p)
 {
-    D(p->level++);
+    if (p->level++ == MAXSTACK) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+    }
     if (p->error_indicator) {
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     asdl_seq * _res = NULL;
     int _mark = p->mark;
     { // with_item _loop0_46
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> _gather_45[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "with_item _loop0_46"));
@@ -23840,7 +24693,7 @@ _gather_45_rule(Parser *p)
     }
     _res = NULL;
   done:
-    D(p->level--);
+    p->level--;
     return _res;
 }
 
@@ -23848,16 +24701,19 @@ _gather_45_rule(Parser *p)
 static void *
 _tmp_47_rule(Parser *p)
 {
-    D(p->level++);
+    if (p->level++ == MAXSTACK) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+    }
     if (p->error_indicator) {
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     void * _res = NULL;
     int _mark = p->mark;
     { // ','
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> _tmp_47[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "','"));
@@ -23876,7 +24732,7 @@ _tmp_47_rule(Parser *p)
     }
     { // ')'
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> _tmp_47[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "')'"));
@@ -23895,7 +24751,7 @@ _tmp_47_rule(Parser *p)
     }
     { // ':'
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> _tmp_47[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "':'"));
@@ -23914,7 +24770,7 @@ _tmp_47_rule(Parser *p)
     }
     _res = NULL;
   done:
-    D(p->level--);
+    p->level--;
     return _res;
 }
 
@@ -23922,9 +24778,12 @@ _tmp_47_rule(Parser *p)
 static asdl_seq *
 _loop1_48_rule(Parser *p)
 {
-    D(p->level++);
+    if (p->level++ == MAXSTACK) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+    }
     if (p->error_indicator) {
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     void *_res = NULL;
@@ -23934,14 +24793,14 @@ _loop1_48_rule(Parser *p)
     if (!_children) {
         p->error_indicator = 1;
         PyErr_NoMemory();
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     Py_ssize_t _children_capacity = 1;
     Py_ssize_t _n = 0;
     { // except_block
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> _loop1_48[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "except_block"));
@@ -23957,7 +24816,7 @@ _loop1_48_rule(Parser *p)
                 if (!_new_children) {
                     p->error_indicator = 1;
                     PyErr_NoMemory();
-                    D(p->level--);
+                    p->level--;
                     return NULL;
                 }
                 _children = _new_children;
@@ -23971,7 +24830,7 @@ _loop1_48_rule(Parser *p)
     }
     if (_n == 0 || p->error_indicator) {
         PyMem_Free(_children);
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     asdl_seq *_seq = (asdl_seq*)_Py_asdl_generic_seq_new(_n, p->arena);
@@ -23979,13 +24838,13 @@ _loop1_48_rule(Parser *p)
         PyMem_Free(_children);
         p->error_indicator = 1;
         PyErr_NoMemory();
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     for (int i = 0; i < _n; i++) asdl_seq_SET_UNTYPED(_seq, i, _children[i]);
     PyMem_Free(_children);
     _PyPegen_insert_memo(p, _start_mark, _loop1_48_type, _seq);
-    D(p->level--);
+    p->level--;
     return _seq;
 }
 
@@ -23993,16 +24852,19 @@ _loop1_48_rule(Parser *p)
 static void *
 _tmp_49_rule(Parser *p)
 {
-    D(p->level++);
+    if (p->level++ == MAXSTACK) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+    }
     if (p->error_indicator) {
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     void * _res = NULL;
     int _mark = p->mark;
     { // 'as' NAME
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> _tmp_49[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'as' NAME"));
@@ -24018,7 +24880,7 @@ _tmp_49_rule(Parser *p)
             _res = z;
             if (_res == NULL && PyErr_Occurred()) {
                 p->error_indicator = 1;
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             goto done;
@@ -24029,7 +24891,7 @@ _tmp_49_rule(Parser *p)
     }
     _res = NULL;
   done:
-    D(p->level--);
+    p->level--;
     return _res;
 }
 
@@ -24037,9 +24899,12 @@ _tmp_49_rule(Parser *p)
 static asdl_seq *
 _loop1_50_rule(Parser *p)
 {
-    D(p->level++);
+    if (p->level++ == MAXSTACK) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+    }
     if (p->error_indicator) {
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     void *_res = NULL;
@@ -24049,14 +24914,14 @@ _loop1_50_rule(Parser *p)
     if (!_children) {
         p->error_indicator = 1;
         PyErr_NoMemory();
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     Py_ssize_t _children_capacity = 1;
     Py_ssize_t _n = 0;
     { // case_block
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> _loop1_50[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "case_block"));
@@ -24072,7 +24937,7 @@ _loop1_50_rule(Parser *p)
                 if (!_new_children) {
                     p->error_indicator = 1;
                     PyErr_NoMemory();
-                    D(p->level--);
+                    p->level--;
                     return NULL;
                 }
                 _children = _new_children;
@@ -24086,7 +24951,7 @@ _loop1_50_rule(Parser *p)
     }
     if (_n == 0 || p->error_indicator) {
         PyMem_Free(_children);
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     asdl_seq *_seq = (asdl_seq*)_Py_asdl_generic_seq_new(_n, p->arena);
@@ -24094,13 +24959,13 @@ _loop1_50_rule(Parser *p)
         PyMem_Free(_children);
         p->error_indicator = 1;
         PyErr_NoMemory();
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     for (int i = 0; i < _n; i++) asdl_seq_SET_UNTYPED(_seq, i, _children[i]);
     PyMem_Free(_children);
     _PyPegen_insert_memo(p, _start_mark, _loop1_50_type, _seq);
-    D(p->level--);
+    p->level--;
     return _seq;
 }
 
@@ -24108,9 +24973,12 @@ _loop1_50_rule(Parser *p)
 static asdl_seq *
 _loop0_52_rule(Parser *p)
 {
-    D(p->level++);
+    if (p->level++ == MAXSTACK) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+    }
     if (p->error_indicator) {
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     void *_res = NULL;
@@ -24120,14 +24988,14 @@ _loop0_52_rule(Parser *p)
     if (!_children) {
         p->error_indicator = 1;
         PyErr_NoMemory();
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     Py_ssize_t _children_capacity = 1;
     Py_ssize_t _n = 0;
     { // '|' closed_pattern
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> _loop0_52[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'|' closed_pattern"));
@@ -24143,7 +25011,7 @@ _loop0_52_rule(Parser *p)
             if (_res == NULL && PyErr_Occurred()) {
                 p->error_indicator = 1;
                 PyMem_Free(_children);
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             if (_n == _children_capacity) {
@@ -24152,7 +25020,7 @@ _loop0_52_rule(Parser *p)
                 if (!_new_children) {
                     p->error_indicator = 1;
                     PyErr_NoMemory();
-                    D(p->level--);
+                    p->level--;
                     return NULL;
                 }
                 _children = _new_children;
@@ -24169,13 +25037,13 @@ _loop0_52_rule(Parser *p)
         PyMem_Free(_children);
         p->error_indicator = 1;
         PyErr_NoMemory();
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     for (int i = 0; i < _n; i++) asdl_seq_SET_UNTYPED(_seq, i, _children[i]);
     PyMem_Free(_children);
     _PyPegen_insert_memo(p, _start_mark, _loop0_52_type, _seq);
-    D(p->level--);
+    p->level--;
     return _seq;
 }
 
@@ -24183,16 +25051,19 @@ _loop0_52_rule(Parser *p)
 static asdl_seq *
 _gather_51_rule(Parser *p)
 {
-    D(p->level++);
+    if (p->level++ == MAXSTACK) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+    }
     if (p->error_indicator) {
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     asdl_seq * _res = NULL;
     int _mark = p->mark;
     { // closed_pattern _loop0_52
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> _gather_51[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "closed_pattern _loop0_52"));
@@ -24214,7 +25085,7 @@ _gather_51_rule(Parser *p)
     }
     _res = NULL;
   done:
-    D(p->level--);
+    p->level--;
     return _res;
 }
 
@@ -24222,16 +25093,19 @@ _gather_51_rule(Parser *p)
 static void *
 _tmp_53_rule(Parser *p)
 {
-    D(p->level++);
+    if (p->level++ == MAXSTACK) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+    }
     if (p->error_indicator) {
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     void * _res = NULL;
     int _mark = p->mark;
     { // '+'
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> _tmp_53[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'+'"));
@@ -24250,7 +25124,7 @@ _tmp_53_rule(Parser *p)
     }
     { // '-'
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> _tmp_53[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'-'"));
@@ -24269,7 +25143,7 @@ _tmp_53_rule(Parser *p)
     }
     _res = NULL;
   done:
-    D(p->level--);
+    p->level--;
     return _res;
 }
 
@@ -24277,16 +25151,19 @@ _tmp_53_rule(Parser *p)
 static void *
 _tmp_54_rule(Parser *p)
 {
-    D(p->level++);
+    if (p->level++ == MAXSTACK) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+    }
     if (p->error_indicator) {
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     void * _res = NULL;
     int _mark = p->mark;
     { // '+'
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> _tmp_54[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'+'"));
@@ -24305,7 +25182,7 @@ _tmp_54_rule(Parser *p)
     }
     { // '-'
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> _tmp_54[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'-'"));
@@ -24324,7 +25201,7 @@ _tmp_54_rule(Parser *p)
     }
     _res = NULL;
   done:
-    D(p->level--);
+    p->level--;
     return _res;
 }
 
@@ -24332,16 +25209,19 @@ _tmp_54_rule(Parser *p)
 static void *
 _tmp_55_rule(Parser *p)
 {
-    D(p->level++);
+    if (p->level++ == MAXSTACK) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+    }
     if (p->error_indicator) {
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     void * _res = NULL;
     int _mark = p->mark;
     { // '.'
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> _tmp_55[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'.'"));
@@ -24360,7 +25240,7 @@ _tmp_55_rule(Parser *p)
     }
     { // '('
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> _tmp_55[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'('"));
@@ -24379,7 +25259,7 @@ _tmp_55_rule(Parser *p)
     }
     { // '='
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> _tmp_55[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'='"));
@@ -24398,7 +25278,7 @@ _tmp_55_rule(Parser *p)
     }
     _res = NULL;
   done:
-    D(p->level--);
+    p->level--;
     return _res;
 }
 
@@ -24406,16 +25286,19 @@ _tmp_55_rule(Parser *p)
 static void *
 _tmp_56_rule(Parser *p)
 {
-    D(p->level++);
+    if (p->level++ == MAXSTACK) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+    }
     if (p->error_indicator) {
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     void * _res = NULL;
     int _mark = p->mark;
     { // '.'
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> _tmp_56[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'.'"));
@@ -24434,7 +25317,7 @@ _tmp_56_rule(Parser *p)
     }
     { // '('
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> _tmp_56[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'('"));
@@ -24453,7 +25336,7 @@ _tmp_56_rule(Parser *p)
     }
     { // '='
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> _tmp_56[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'='"));
@@ -24472,7 +25355,7 @@ _tmp_56_rule(Parser *p)
     }
     _res = NULL;
   done:
-    D(p->level--);
+    p->level--;
     return _res;
 }
 
@@ -24480,9 +25363,12 @@ _tmp_56_rule(Parser *p)
 static asdl_seq *
 _loop0_58_rule(Parser *p)
 {
-    D(p->level++);
+    if (p->level++ == MAXSTACK) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+    }
     if (p->error_indicator) {
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     void *_res = NULL;
@@ -24492,14 +25378,14 @@ _loop0_58_rule(Parser *p)
     if (!_children) {
         p->error_indicator = 1;
         PyErr_NoMemory();
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     Py_ssize_t _children_capacity = 1;
     Py_ssize_t _n = 0;
     { // ',' maybe_star_pattern
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> _loop0_58[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "',' maybe_star_pattern"));
@@ -24515,7 +25401,7 @@ _loop0_58_rule(Parser *p)
             if (_res == NULL && PyErr_Occurred()) {
                 p->error_indicator = 1;
                 PyMem_Free(_children);
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             if (_n == _children_capacity) {
@@ -24524,7 +25410,7 @@ _loop0_58_rule(Parser *p)
                 if (!_new_children) {
                     p->error_indicator = 1;
                     PyErr_NoMemory();
-                    D(p->level--);
+                    p->level--;
                     return NULL;
                 }
                 _children = _new_children;
@@ -24541,13 +25427,13 @@ _loop0_58_rule(Parser *p)
         PyMem_Free(_children);
         p->error_indicator = 1;
         PyErr_NoMemory();
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     for (int i = 0; i < _n; i++) asdl_seq_SET_UNTYPED(_seq, i, _children[i]);
     PyMem_Free(_children);
     _PyPegen_insert_memo(p, _start_mark, _loop0_58_type, _seq);
-    D(p->level--);
+    p->level--;
     return _seq;
 }
 
@@ -24555,16 +25441,19 @@ _loop0_58_rule(Parser *p)
 static asdl_seq *
 _gather_57_rule(Parser *p)
 {
-    D(p->level++);
+    if (p->level++ == MAXSTACK) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+    }
     if (p->error_indicator) {
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     asdl_seq * _res = NULL;
     int _mark = p->mark;
     { // maybe_star_pattern _loop0_58
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> _gather_57[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "maybe_star_pattern _loop0_58"));
@@ -24586,7 +25475,7 @@ _gather_57_rule(Parser *p)
     }
     _res = NULL;
   done:
-    D(p->level--);
+    p->level--;
     return _res;
 }
 
@@ -24594,9 +25483,12 @@ _gather_57_rule(Parser *p)
 static asdl_seq *
 _loop0_60_rule(Parser *p)
 {
-    D(p->level++);
+    if (p->level++ == MAXSTACK) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+    }
     if (p->error_indicator) {
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     void *_res = NULL;
@@ -24606,14 +25498,14 @@ _loop0_60_rule(Parser *p)
     if (!_children) {
         p->error_indicator = 1;
         PyErr_NoMemory();
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     Py_ssize_t _children_capacity = 1;
     Py_ssize_t _n = 0;
     { // ',' key_value_pattern
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> _loop0_60[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "',' key_value_pattern"));
@@ -24629,7 +25521,7 @@ _loop0_60_rule(Parser *p)
             if (_res == NULL && PyErr_Occurred()) {
                 p->error_indicator = 1;
                 PyMem_Free(_children);
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             if (_n == _children_capacity) {
@@ -24638,7 +25530,7 @@ _loop0_60_rule(Parser *p)
                 if (!_new_children) {
                     p->error_indicator = 1;
                     PyErr_NoMemory();
-                    D(p->level--);
+                    p->level--;
                     return NULL;
                 }
                 _children = _new_children;
@@ -24655,13 +25547,13 @@ _loop0_60_rule(Parser *p)
         PyMem_Free(_children);
         p->error_indicator = 1;
         PyErr_NoMemory();
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     for (int i = 0; i < _n; i++) asdl_seq_SET_UNTYPED(_seq, i, _children[i]);
     PyMem_Free(_children);
     _PyPegen_insert_memo(p, _start_mark, _loop0_60_type, _seq);
-    D(p->level--);
+    p->level--;
     return _seq;
 }
 
@@ -24669,16 +25561,19 @@ _loop0_60_rule(Parser *p)
 static asdl_seq *
 _gather_59_rule(Parser *p)
 {
-    D(p->level++);
+    if (p->level++ == MAXSTACK) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+    }
     if (p->error_indicator) {
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     asdl_seq * _res = NULL;
     int _mark = p->mark;
     { // key_value_pattern _loop0_60
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> _gather_59[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "key_value_pattern _loop0_60"));
@@ -24700,7 +25595,7 @@ _gather_59_rule(Parser *p)
     }
     _res = NULL;
   done:
-    D(p->level--);
+    p->level--;
     return _res;
 }
 
@@ -24708,16 +25603,19 @@ _gather_59_rule(Parser *p)
 static void *
 _tmp_61_rule(Parser *p)
 {
-    D(p->level++);
+    if (p->level++ == MAXSTACK) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+    }
     if (p->error_indicator) {
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     void * _res = NULL;
     int _mark = p->mark;
     { // literal_expr
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> _tmp_61[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "literal_expr"));
@@ -24736,7 +25634,7 @@ _tmp_61_rule(Parser *p)
     }
     { // attr
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> _tmp_61[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "attr"));
@@ -24755,7 +25653,7 @@ _tmp_61_rule(Parser *p)
     }
     _res = NULL;
   done:
-    D(p->level--);
+    p->level--;
     return _res;
 }
 
@@ -24763,9 +25661,12 @@ _tmp_61_rule(Parser *p)
 static asdl_seq *
 _loop0_63_rule(Parser *p)
 {
-    D(p->level++);
+    if (p->level++ == MAXSTACK) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+    }
     if (p->error_indicator) {
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     void *_res = NULL;
@@ -24775,14 +25676,14 @@ _loop0_63_rule(Parser *p)
     if (!_children) {
         p->error_indicator = 1;
         PyErr_NoMemory();
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     Py_ssize_t _children_capacity = 1;
     Py_ssize_t _n = 0;
     { // ',' pattern
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> _loop0_63[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "',' pattern"));
@@ -24798,7 +25699,7 @@ _loop0_63_rule(Parser *p)
             if (_res == NULL && PyErr_Occurred()) {
                 p->error_indicator = 1;
                 PyMem_Free(_children);
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             if (_n == _children_capacity) {
@@ -24807,7 +25708,7 @@ _loop0_63_rule(Parser *p)
                 if (!_new_children) {
                     p->error_indicator = 1;
                     PyErr_NoMemory();
-                    D(p->level--);
+                    p->level--;
                     return NULL;
                 }
                 _children = _new_children;
@@ -24824,13 +25725,13 @@ _loop0_63_rule(Parser *p)
         PyMem_Free(_children);
         p->error_indicator = 1;
         PyErr_NoMemory();
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     for (int i = 0; i < _n; i++) asdl_seq_SET_UNTYPED(_seq, i, _children[i]);
     PyMem_Free(_children);
     _PyPegen_insert_memo(p, _start_mark, _loop0_63_type, _seq);
-    D(p->level--);
+    p->level--;
     return _seq;
 }
 
@@ -24838,16 +25739,19 @@ _loop0_63_rule(Parser *p)
 static asdl_seq *
 _gather_62_rule(Parser *p)
 {
-    D(p->level++);
+    if (p->level++ == MAXSTACK) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+    }
     if (p->error_indicator) {
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     asdl_seq * _res = NULL;
     int _mark = p->mark;
     { // pattern _loop0_63
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> _gather_62[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "pattern _loop0_63"));
@@ -24869,7 +25773,7 @@ _gather_62_rule(Parser *p)
     }
     _res = NULL;
   done:
-    D(p->level--);
+    p->level--;
     return _res;
 }
 
@@ -24877,9 +25781,12 @@ _gather_62_rule(Parser *p)
 static asdl_seq *
 _loop0_65_rule(Parser *p)
 {
-    D(p->level++);
+    if (p->level++ == MAXSTACK) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+    }
     if (p->error_indicator) {
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     void *_res = NULL;
@@ -24889,14 +25796,14 @@ _loop0_65_rule(Parser *p)
     if (!_children) {
         p->error_indicator = 1;
         PyErr_NoMemory();
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     Py_ssize_t _children_capacity = 1;
     Py_ssize_t _n = 0;
     { // ',' keyword_pattern
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> _loop0_65[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "',' keyword_pattern"));
@@ -24912,7 +25819,7 @@ _loop0_65_rule(Parser *p)
             if (_res == NULL && PyErr_Occurred()) {
                 p->error_indicator = 1;
                 PyMem_Free(_children);
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             if (_n == _children_capacity) {
@@ -24921,7 +25828,7 @@ _loop0_65_rule(Parser *p)
                 if (!_new_children) {
                     p->error_indicator = 1;
                     PyErr_NoMemory();
-                    D(p->level--);
+                    p->level--;
                     return NULL;
                 }
                 _children = _new_children;
@@ -24938,13 +25845,13 @@ _loop0_65_rule(Parser *p)
         PyMem_Free(_children);
         p->error_indicator = 1;
         PyErr_NoMemory();
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     for (int i = 0; i < _n; i++) asdl_seq_SET_UNTYPED(_seq, i, _children[i]);
     PyMem_Free(_children);
     _PyPegen_insert_memo(p, _start_mark, _loop0_65_type, _seq);
-    D(p->level--);
+    p->level--;
     return _seq;
 }
 
@@ -24952,16 +25859,19 @@ _loop0_65_rule(Parser *p)
 static asdl_seq *
 _gather_64_rule(Parser *p)
 {
-    D(p->level++);
+    if (p->level++ == MAXSTACK) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+    }
     if (p->error_indicator) {
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     asdl_seq * _res = NULL;
     int _mark = p->mark;
     { // keyword_pattern _loop0_65
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> _gather_64[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "keyword_pattern _loop0_65"));
@@ -24983,7 +25893,7 @@ _gather_64_rule(Parser *p)
     }
     _res = NULL;
   done:
-    D(p->level--);
+    p->level--;
     return _res;
 }
 
@@ -24991,16 +25901,19 @@ _gather_64_rule(Parser *p)
 static void *
 _tmp_66_rule(Parser *p)
 {
-    D(p->level++);
+    if (p->level++ == MAXSTACK) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+    }
     if (p->error_indicator) {
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     void * _res = NULL;
     int _mark = p->mark;
     { // 'from' expression
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> _tmp_66[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'from' expression"));
@@ -25016,7 +25929,7 @@ _tmp_66_rule(Parser *p)
             _res = z;
             if (_res == NULL && PyErr_Occurred()) {
                 p->error_indicator = 1;
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             goto done;
@@ -25027,7 +25940,7 @@ _tmp_66_rule(Parser *p)
     }
     _res = NULL;
   done:
-    D(p->level--);
+    p->level--;
     return _res;
 }
 
@@ -25035,16 +25948,19 @@ _tmp_66_rule(Parser *p)
 static void *
 _tmp_67_rule(Parser *p)
 {
-    D(p->level++);
+    if (p->level++ == MAXSTACK) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+    }
     if (p->error_indicator) {
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     void * _res = NULL;
     int _mark = p->mark;
     { // '->' expression
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> _tmp_67[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'->' expression"));
@@ -25060,7 +25976,7 @@ _tmp_67_rule(Parser *p)
             _res = z;
             if (_res == NULL && PyErr_Occurred()) {
                 p->error_indicator = 1;
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             goto done;
@@ -25071,7 +25987,7 @@ _tmp_67_rule(Parser *p)
     }
     _res = NULL;
   done:
-    D(p->level--);
+    p->level--;
     return _res;
 }
 
@@ -25079,16 +25995,19 @@ _tmp_67_rule(Parser *p)
 static void *
 _tmp_68_rule(Parser *p)
 {
-    D(p->level++);
+    if (p->level++ == MAXSTACK) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+    }
     if (p->error_indicator) {
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     void * _res = NULL;
     int _mark = p->mark;
     { // '->' expression
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> _tmp_68[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'->' expression"));
@@ -25104,7 +26023,7 @@ _tmp_68_rule(Parser *p)
             _res = z;
             if (_res == NULL && PyErr_Occurred()) {
                 p->error_indicator = 1;
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             goto done;
@@ -25115,7 +26034,7 @@ _tmp_68_rule(Parser *p)
     }
     _res = NULL;
   done:
-    D(p->level--);
+    p->level--;
     return _res;
 }
 
@@ -25123,16 +26042,19 @@ _tmp_68_rule(Parser *p)
 static void *
 _tmp_69_rule(Parser *p)
 {
-    D(p->level++);
+    if (p->level++ == MAXSTACK) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+    }
     if (p->error_indicator) {
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     void * _res = NULL;
     int _mark = p->mark;
     { // NEWLINE INDENT
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> _tmp_69[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "NEWLINE INDENT"));
@@ -25154,7 +26076,7 @@ _tmp_69_rule(Parser *p)
     }
     _res = NULL;
   done:
-    D(p->level--);
+    p->level--;
     return _res;
 }
 
@@ -25162,9 +26084,12 @@ _tmp_69_rule(Parser *p)
 static asdl_seq *
 _loop0_70_rule(Parser *p)
 {
-    D(p->level++);
+    if (p->level++ == MAXSTACK) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+    }
     if (p->error_indicator) {
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     void *_res = NULL;
@@ -25174,14 +26099,14 @@ _loop0_70_rule(Parser *p)
     if (!_children) {
         p->error_indicator = 1;
         PyErr_NoMemory();
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     Py_ssize_t _children_capacity = 1;
     Py_ssize_t _n = 0;
     { // param_no_default
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> _loop0_70[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "param_no_default"));
@@ -25197,7 +26122,7 @@ _loop0_70_rule(Parser *p)
                 if (!_new_children) {
                     p->error_indicator = 1;
                     PyErr_NoMemory();
-                    D(p->level--);
+                    p->level--;
                     return NULL;
                 }
                 _children = _new_children;
@@ -25214,13 +26139,13 @@ _loop0_70_rule(Parser *p)
         PyMem_Free(_children);
         p->error_indicator = 1;
         PyErr_NoMemory();
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     for (int i = 0; i < _n; i++) asdl_seq_SET_UNTYPED(_seq, i, _children[i]);
     PyMem_Free(_children);
     _PyPegen_insert_memo(p, _start_mark, _loop0_70_type, _seq);
-    D(p->level--);
+    p->level--;
     return _seq;
 }
 
@@ -25228,9 +26153,12 @@ _loop0_70_rule(Parser *p)
 static asdl_seq *
 _loop0_71_rule(Parser *p)
 {
-    D(p->level++);
+    if (p->level++ == MAXSTACK) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+    }
     if (p->error_indicator) {
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     void *_res = NULL;
@@ -25240,14 +26168,14 @@ _loop0_71_rule(Parser *p)
     if (!_children) {
         p->error_indicator = 1;
         PyErr_NoMemory();
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     Py_ssize_t _children_capacity = 1;
     Py_ssize_t _n = 0;
     { // param_with_default
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> _loop0_71[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "param_with_default"));
@@ -25263,7 +26191,7 @@ _loop0_71_rule(Parser *p)
                 if (!_new_children) {
                     p->error_indicator = 1;
                     PyErr_NoMemory();
-                    D(p->level--);
+                    p->level--;
                     return NULL;
                 }
                 _children = _new_children;
@@ -25280,13 +26208,13 @@ _loop0_71_rule(Parser *p)
         PyMem_Free(_children);
         p->error_indicator = 1;
         PyErr_NoMemory();
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     for (int i = 0; i < _n; i++) asdl_seq_SET_UNTYPED(_seq, i, _children[i]);
     PyMem_Free(_children);
     _PyPegen_insert_memo(p, _start_mark, _loop0_71_type, _seq);
-    D(p->level--);
+    p->level--;
     return _seq;
 }
 
@@ -25294,9 +26222,12 @@ _loop0_71_rule(Parser *p)
 static asdl_seq *
 _loop0_72_rule(Parser *p)
 {
-    D(p->level++);
+    if (p->level++ == MAXSTACK) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+    }
     if (p->error_indicator) {
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     void *_res = NULL;
@@ -25306,14 +26237,14 @@ _loop0_72_rule(Parser *p)
     if (!_children) {
         p->error_indicator = 1;
         PyErr_NoMemory();
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     Py_ssize_t _children_capacity = 1;
     Py_ssize_t _n = 0;
     { // param_with_default
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> _loop0_72[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "param_with_default"));
@@ -25329,7 +26260,7 @@ _loop0_72_rule(Parser *p)
                 if (!_new_children) {
                     p->error_indicator = 1;
                     PyErr_NoMemory();
-                    D(p->level--);
+                    p->level--;
                     return NULL;
                 }
                 _children = _new_children;
@@ -25346,13 +26277,13 @@ _loop0_72_rule(Parser *p)
         PyMem_Free(_children);
         p->error_indicator = 1;
         PyErr_NoMemory();
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     for (int i = 0; i < _n; i++) asdl_seq_SET_UNTYPED(_seq, i, _children[i]);
     PyMem_Free(_children);
     _PyPegen_insert_memo(p, _start_mark, _loop0_72_type, _seq);
-    D(p->level--);
+    p->level--;
     return _seq;
 }
 
@@ -25360,9 +26291,12 @@ _loop0_72_rule(Parser *p)
 static asdl_seq *
 _loop1_73_rule(Parser *p)
 {
-    D(p->level++);
+    if (p->level++ == MAXSTACK) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+    }
     if (p->error_indicator) {
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     void *_res = NULL;
@@ -25372,14 +26306,14 @@ _loop1_73_rule(Parser *p)
     if (!_children) {
         p->error_indicator = 1;
         PyErr_NoMemory();
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     Py_ssize_t _children_capacity = 1;
     Py_ssize_t _n = 0;
     { // param_no_default
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> _loop1_73[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "param_no_default"));
@@ -25395,7 +26329,7 @@ _loop1_73_rule(Parser *p)
                 if (!_new_children) {
                     p->error_indicator = 1;
                     PyErr_NoMemory();
-                    D(p->level--);
+                    p->level--;
                     return NULL;
                 }
                 _children = _new_children;
@@ -25409,7 +26343,7 @@ _loop1_73_rule(Parser *p)
     }
     if (_n == 0 || p->error_indicator) {
         PyMem_Free(_children);
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     asdl_seq *_seq = (asdl_seq*)_Py_asdl_generic_seq_new(_n, p->arena);
@@ -25417,13 +26351,13 @@ _loop1_73_rule(Parser *p)
         PyMem_Free(_children);
         p->error_indicator = 1;
         PyErr_NoMemory();
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     for (int i = 0; i < _n; i++) asdl_seq_SET_UNTYPED(_seq, i, _children[i]);
     PyMem_Free(_children);
     _PyPegen_insert_memo(p, _start_mark, _loop1_73_type, _seq);
-    D(p->level--);
+    p->level--;
     return _seq;
 }
 
@@ -25431,9 +26365,12 @@ _loop1_73_rule(Parser *p)
 static asdl_seq *
 _loop0_74_rule(Parser *p)
 {
-    D(p->level++);
+    if (p->level++ == MAXSTACK) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+    }
     if (p->error_indicator) {
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     void *_res = NULL;
@@ -25443,14 +26380,14 @@ _loop0_74_rule(Parser *p)
     if (!_children) {
         p->error_indicator = 1;
         PyErr_NoMemory();
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     Py_ssize_t _children_capacity = 1;
     Py_ssize_t _n = 0;
     { // param_with_default
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> _loop0_74[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "param_with_default"));
@@ -25466,7 +26403,7 @@ _loop0_74_rule(Parser *p)
                 if (!_new_children) {
                     p->error_indicator = 1;
                     PyErr_NoMemory();
-                    D(p->level--);
+                    p->level--;
                     return NULL;
                 }
                 _children = _new_children;
@@ -25483,13 +26420,13 @@ _loop0_74_rule(Parser *p)
         PyMem_Free(_children);
         p->error_indicator = 1;
         PyErr_NoMemory();
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     for (int i = 0; i < _n; i++) asdl_seq_SET_UNTYPED(_seq, i, _children[i]);
     PyMem_Free(_children);
     _PyPegen_insert_memo(p, _start_mark, _loop0_74_type, _seq);
-    D(p->level--);
+    p->level--;
     return _seq;
 }
 
@@ -25497,9 +26434,12 @@ _loop0_74_rule(Parser *p)
 static asdl_seq *
 _loop1_75_rule(Parser *p)
 {
-    D(p->level++);
+    if (p->level++ == MAXSTACK) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+    }
     if (p->error_indicator) {
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     void *_res = NULL;
@@ -25509,14 +26449,14 @@ _loop1_75_rule(Parser *p)
     if (!_children) {
         p->error_indicator = 1;
         PyErr_NoMemory();
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     Py_ssize_t _children_capacity = 1;
     Py_ssize_t _n = 0;
     { // param_with_default
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> _loop1_75[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "param_with_default"));
@@ -25532,7 +26472,7 @@ _loop1_75_rule(Parser *p)
                 if (!_new_children) {
                     p->error_indicator = 1;
                     PyErr_NoMemory();
-                    D(p->level--);
+                    p->level--;
                     return NULL;
                 }
                 _children = _new_children;
@@ -25546,7 +26486,7 @@ _loop1_75_rule(Parser *p)
     }
     if (_n == 0 || p->error_indicator) {
         PyMem_Free(_children);
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     asdl_seq *_seq = (asdl_seq*)_Py_asdl_generic_seq_new(_n, p->arena);
@@ -25554,13 +26494,13 @@ _loop1_75_rule(Parser *p)
         PyMem_Free(_children);
         p->error_indicator = 1;
         PyErr_NoMemory();
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     for (int i = 0; i < _n; i++) asdl_seq_SET_UNTYPED(_seq, i, _children[i]);
     PyMem_Free(_children);
     _PyPegen_insert_memo(p, _start_mark, _loop1_75_type, _seq);
-    D(p->level--);
+    p->level--;
     return _seq;
 }
 
@@ -25568,9 +26508,12 @@ _loop1_75_rule(Parser *p)
 static asdl_seq *
 _loop1_76_rule(Parser *p)
 {
-    D(p->level++);
+    if (p->level++ == MAXSTACK) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+    }
     if (p->error_indicator) {
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     void *_res = NULL;
@@ -25580,14 +26523,14 @@ _loop1_76_rule(Parser *p)
     if (!_children) {
         p->error_indicator = 1;
         PyErr_NoMemory();
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     Py_ssize_t _children_capacity = 1;
     Py_ssize_t _n = 0;
     { // param_no_default
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> _loop1_76[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "param_no_default"));
@@ -25603,7 +26546,7 @@ _loop1_76_rule(Parser *p)
                 if (!_new_children) {
                     p->error_indicator = 1;
                     PyErr_NoMemory();
-                    D(p->level--);
+                    p->level--;
                     return NULL;
                 }
                 _children = _new_children;
@@ -25617,7 +26560,7 @@ _loop1_76_rule(Parser *p)
     }
     if (_n == 0 || p->error_indicator) {
         PyMem_Free(_children);
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     asdl_seq *_seq = (asdl_seq*)_Py_asdl_generic_seq_new(_n, p->arena);
@@ -25625,13 +26568,13 @@ _loop1_76_rule(Parser *p)
         PyMem_Free(_children);
         p->error_indicator = 1;
         PyErr_NoMemory();
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     for (int i = 0; i < _n; i++) asdl_seq_SET_UNTYPED(_seq, i, _children[i]);
     PyMem_Free(_children);
     _PyPegen_insert_memo(p, _start_mark, _loop1_76_type, _seq);
-    D(p->level--);
+    p->level--;
     return _seq;
 }
 
@@ -25639,9 +26582,12 @@ _loop1_76_rule(Parser *p)
 static asdl_seq *
 _loop1_77_rule(Parser *p)
 {
-    D(p->level++);
+    if (p->level++ == MAXSTACK) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+    }
     if (p->error_indicator) {
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     void *_res = NULL;
@@ -25651,14 +26597,14 @@ _loop1_77_rule(Parser *p)
     if (!_children) {
         p->error_indicator = 1;
         PyErr_NoMemory();
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     Py_ssize_t _children_capacity = 1;
     Py_ssize_t _n = 0;
     { // param_no_default
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> _loop1_77[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "param_no_default"));
@@ -25674,7 +26620,7 @@ _loop1_77_rule(Parser *p)
                 if (!_new_children) {
                     p->error_indicator = 1;
                     PyErr_NoMemory();
-                    D(p->level--);
+                    p->level--;
                     return NULL;
                 }
                 _children = _new_children;
@@ -25688,7 +26634,7 @@ _loop1_77_rule(Parser *p)
     }
     if (_n == 0 || p->error_indicator) {
         PyMem_Free(_children);
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     asdl_seq *_seq = (asdl_seq*)_Py_asdl_generic_seq_new(_n, p->arena);
@@ -25696,13 +26642,13 @@ _loop1_77_rule(Parser *p)
         PyMem_Free(_children);
         p->error_indicator = 1;
         PyErr_NoMemory();
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     for (int i = 0; i < _n; i++) asdl_seq_SET_UNTYPED(_seq, i, _children[i]);
     PyMem_Free(_children);
     _PyPegen_insert_memo(p, _start_mark, _loop1_77_type, _seq);
-    D(p->level--);
+    p->level--;
     return _seq;
 }
 
@@ -25710,9 +26656,12 @@ _loop1_77_rule(Parser *p)
 static asdl_seq *
 _loop0_78_rule(Parser *p)
 {
-    D(p->level++);
+    if (p->level++ == MAXSTACK) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+    }
     if (p->error_indicator) {
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     void *_res = NULL;
@@ -25722,14 +26671,14 @@ _loop0_78_rule(Parser *p)
     if (!_children) {
         p->error_indicator = 1;
         PyErr_NoMemory();
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     Py_ssize_t _children_capacity = 1;
     Py_ssize_t _n = 0;
     { // param_no_default
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> _loop0_78[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "param_no_default"));
@@ -25745,7 +26694,7 @@ _loop0_78_rule(Parser *p)
                 if (!_new_children) {
                     p->error_indicator = 1;
                     PyErr_NoMemory();
-                    D(p->level--);
+                    p->level--;
                     return NULL;
                 }
                 _children = _new_children;
@@ -25762,13 +26711,13 @@ _loop0_78_rule(Parser *p)
         PyMem_Free(_children);
         p->error_indicator = 1;
         PyErr_NoMemory();
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     for (int i = 0; i < _n; i++) asdl_seq_SET_UNTYPED(_seq, i, _children[i]);
     PyMem_Free(_children);
     _PyPegen_insert_memo(p, _start_mark, _loop0_78_type, _seq);
-    D(p->level--);
+    p->level--;
     return _seq;
 }
 
@@ -25776,9 +26725,12 @@ _loop0_78_rule(Parser *p)
 static asdl_seq *
 _loop1_79_rule(Parser *p)
 {
-    D(p->level++);
+    if (p->level++ == MAXSTACK) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+    }
     if (p->error_indicator) {
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     void *_res = NULL;
@@ -25788,14 +26740,14 @@ _loop1_79_rule(Parser *p)
     if (!_children) {
         p->error_indicator = 1;
         PyErr_NoMemory();
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     Py_ssize_t _children_capacity = 1;
     Py_ssize_t _n = 0;
     { // param_with_default
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> _loop1_79[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "param_with_default"));
@@ -25811,7 +26763,7 @@ _loop1_79_rule(Parser *p)
                 if (!_new_children) {
                     p->error_indicator = 1;
                     PyErr_NoMemory();
-                    D(p->level--);
+                    p->level--;
                     return NULL;
                 }
                 _children = _new_children;
@@ -25825,7 +26777,7 @@ _loop1_79_rule(Parser *p)
     }
     if (_n == 0 || p->error_indicator) {
         PyMem_Free(_children);
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     asdl_seq *_seq = (asdl_seq*)_Py_asdl_generic_seq_new(_n, p->arena);
@@ -25833,13 +26785,13 @@ _loop1_79_rule(Parser *p)
         PyMem_Free(_children);
         p->error_indicator = 1;
         PyErr_NoMemory();
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     for (int i = 0; i < _n; i++) asdl_seq_SET_UNTYPED(_seq, i, _children[i]);
     PyMem_Free(_children);
     _PyPegen_insert_memo(p, _start_mark, _loop1_79_type, _seq);
-    D(p->level--);
+    p->level--;
     return _seq;
 }
 
@@ -25847,9 +26799,12 @@ _loop1_79_rule(Parser *p)
 static asdl_seq *
 _loop0_80_rule(Parser *p)
 {
-    D(p->level++);
+    if (p->level++ == MAXSTACK) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+    }
     if (p->error_indicator) {
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     void *_res = NULL;
@@ -25859,14 +26814,14 @@ _loop0_80_rule(Parser *p)
     if (!_children) {
         p->error_indicator = 1;
         PyErr_NoMemory();
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     Py_ssize_t _children_capacity = 1;
     Py_ssize_t _n = 0;
     { // param_no_default
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> _loop0_80[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "param_no_default"));
@@ -25882,7 +26837,7 @@ _loop0_80_rule(Parser *p)
                 if (!_new_children) {
                     p->error_indicator = 1;
                     PyErr_NoMemory();
-                    D(p->level--);
+                    p->level--;
                     return NULL;
                 }
                 _children = _new_children;
@@ -25899,13 +26854,13 @@ _loop0_80_rule(Parser *p)
         PyMem_Free(_children);
         p->error_indicator = 1;
         PyErr_NoMemory();
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     for (int i = 0; i < _n; i++) asdl_seq_SET_UNTYPED(_seq, i, _children[i]);
     PyMem_Free(_children);
     _PyPegen_insert_memo(p, _start_mark, _loop0_80_type, _seq);
-    D(p->level--);
+    p->level--;
     return _seq;
 }
 
@@ -25913,9 +26868,12 @@ _loop0_80_rule(Parser *p)
 static asdl_seq *
 _loop1_81_rule(Parser *p)
 {
-    D(p->level++);
+    if (p->level++ == MAXSTACK) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+    }
     if (p->error_indicator) {
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     void *_res = NULL;
@@ -25925,14 +26883,14 @@ _loop1_81_rule(Parser *p)
     if (!_children) {
         p->error_indicator = 1;
         PyErr_NoMemory();
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     Py_ssize_t _children_capacity = 1;
     Py_ssize_t _n = 0;
     { // param_with_default
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> _loop1_81[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "param_with_default"));
@@ -25948,7 +26906,7 @@ _loop1_81_rule(Parser *p)
                 if (!_new_children) {
                     p->error_indicator = 1;
                     PyErr_NoMemory();
-                    D(p->level--);
+                    p->level--;
                     return NULL;
                 }
                 _children = _new_children;
@@ -25962,7 +26920,7 @@ _loop1_81_rule(Parser *p)
     }
     if (_n == 0 || p->error_indicator) {
         PyMem_Free(_children);
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     asdl_seq *_seq = (asdl_seq*)_Py_asdl_generic_seq_new(_n, p->arena);
@@ -25970,13 +26928,13 @@ _loop1_81_rule(Parser *p)
         PyMem_Free(_children);
         p->error_indicator = 1;
         PyErr_NoMemory();
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     for (int i = 0; i < _n; i++) asdl_seq_SET_UNTYPED(_seq, i, _children[i]);
     PyMem_Free(_children);
     _PyPegen_insert_memo(p, _start_mark, _loop1_81_type, _seq);
-    D(p->level--);
+    p->level--;
     return _seq;
 }
 
@@ -25984,9 +26942,12 @@ _loop1_81_rule(Parser *p)
 static asdl_seq *
 _loop0_82_rule(Parser *p)
 {
-    D(p->level++);
+    if (p->level++ == MAXSTACK) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+    }
     if (p->error_indicator) {
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     void *_res = NULL;
@@ -25996,14 +26957,14 @@ _loop0_82_rule(Parser *p)
     if (!_children) {
         p->error_indicator = 1;
         PyErr_NoMemory();
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     Py_ssize_t _children_capacity = 1;
     Py_ssize_t _n = 0;
     { // param_maybe_default
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> _loop0_82[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "param_maybe_default"));
@@ -26019,7 +26980,7 @@ _loop0_82_rule(Parser *p)
                 if (!_new_children) {
                     p->error_indicator = 1;
                     PyErr_NoMemory();
-                    D(p->level--);
+                    p->level--;
                     return NULL;
                 }
                 _children = _new_children;
@@ -26036,13 +26997,13 @@ _loop0_82_rule(Parser *p)
         PyMem_Free(_children);
         p->error_indicator = 1;
         PyErr_NoMemory();
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     for (int i = 0; i < _n; i++) asdl_seq_SET_UNTYPED(_seq, i, _children[i]);
     PyMem_Free(_children);
     _PyPegen_insert_memo(p, _start_mark, _loop0_82_type, _seq);
-    D(p->level--);
+    p->level--;
     return _seq;
 }
 
@@ -26050,9 +27011,12 @@ _loop0_82_rule(Parser *p)
 static asdl_seq *
 _loop1_83_rule(Parser *p)
 {
-    D(p->level++);
+    if (p->level++ == MAXSTACK) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+    }
     if (p->error_indicator) {
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     void *_res = NULL;
@@ -26062,14 +27026,14 @@ _loop1_83_rule(Parser *p)
     if (!_children) {
         p->error_indicator = 1;
         PyErr_NoMemory();
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     Py_ssize_t _children_capacity = 1;
     Py_ssize_t _n = 0;
     { // param_maybe_default
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> _loop1_83[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "param_maybe_default"));
@@ -26085,7 +27049,7 @@ _loop1_83_rule(Parser *p)
                 if (!_new_children) {
                     p->error_indicator = 1;
                     PyErr_NoMemory();
-                    D(p->level--);
+                    p->level--;
                     return NULL;
                 }
                 _children = _new_children;
@@ -26099,7 +27063,7 @@ _loop1_83_rule(Parser *p)
     }
     if (_n == 0 || p->error_indicator) {
         PyMem_Free(_children);
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     asdl_seq *_seq = (asdl_seq*)_Py_asdl_generic_seq_new(_n, p->arena);
@@ -26107,13 +27071,13 @@ _loop1_83_rule(Parser *p)
         PyMem_Free(_children);
         p->error_indicator = 1;
         PyErr_NoMemory();
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     for (int i = 0; i < _n; i++) asdl_seq_SET_UNTYPED(_seq, i, _children[i]);
     PyMem_Free(_children);
     _PyPegen_insert_memo(p, _start_mark, _loop1_83_type, _seq);
-    D(p->level--);
+    p->level--;
     return _seq;
 }
 
@@ -26121,9 +27085,12 @@ _loop1_83_rule(Parser *p)
 static asdl_seq *
 _loop1_84_rule(Parser *p)
 {
-    D(p->level++);
+    if (p->level++ == MAXSTACK) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+    }
     if (p->error_indicator) {
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     void *_res = NULL;
@@ -26133,14 +27100,14 @@ _loop1_84_rule(Parser *p)
     if (!_children) {
         p->error_indicator = 1;
         PyErr_NoMemory();
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     Py_ssize_t _children_capacity = 1;
     Py_ssize_t _n = 0;
     { // ('@' named_expression NEWLINE)
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> _loop1_84[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "('@' named_expression NEWLINE)"));
@@ -26156,7 +27123,7 @@ _loop1_84_rule(Parser *p)
                 if (!_new_children) {
                     p->error_indicator = 1;
                     PyErr_NoMemory();
-                    D(p->level--);
+                    p->level--;
                     return NULL;
                 }
                 _children = _new_children;
@@ -26170,7 +27137,7 @@ _loop1_84_rule(Parser *p)
     }
     if (_n == 0 || p->error_indicator) {
         PyMem_Free(_children);
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     asdl_seq *_seq = (asdl_seq*)_Py_asdl_generic_seq_new(_n, p->arena);
@@ -26178,13 +27145,13 @@ _loop1_84_rule(Parser *p)
         PyMem_Free(_children);
         p->error_indicator = 1;
         PyErr_NoMemory();
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     for (int i = 0; i < _n; i++) asdl_seq_SET_UNTYPED(_seq, i, _children[i]);
     PyMem_Free(_children);
     _PyPegen_insert_memo(p, _start_mark, _loop1_84_type, _seq);
-    D(p->level--);
+    p->level--;
     return _seq;
 }
 
@@ -26192,16 +27159,19 @@ _loop1_84_rule(Parser *p)
 static void *
 _tmp_85_rule(Parser *p)
 {
-    D(p->level++);
+    if (p->level++ == MAXSTACK) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+    }
     if (p->error_indicator) {
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     void * _res = NULL;
     int _mark = p->mark;
     { // '(' arguments? ')'
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> _tmp_85[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'(' arguments? ')'"));
@@ -26220,7 +27190,7 @@ _tmp_85_rule(Parser *p)
             _res = z;
             if (_res == NULL && PyErr_Occurred()) {
                 p->error_indicator = 1;
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             goto done;
@@ -26231,7 +27201,7 @@ _tmp_85_rule(Parser *p)
     }
     _res = NULL;
   done:
-    D(p->level--);
+    p->level--;
     return _res;
 }
 
@@ -26239,9 +27209,12 @@ _tmp_85_rule(Parser *p)
 static asdl_seq *
 _loop1_86_rule(Parser *p)
 {
-    D(p->level++);
+    if (p->level++ == MAXSTACK) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+    }
     if (p->error_indicator) {
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     void *_res = NULL;
@@ -26251,14 +27224,14 @@ _loop1_86_rule(Parser *p)
     if (!_children) {
         p->error_indicator = 1;
         PyErr_NoMemory();
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     Py_ssize_t _children_capacity = 1;
     Py_ssize_t _n = 0;
     { // (',' star_expression)
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> _loop1_86[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "(',' star_expression)"));
@@ -26274,7 +27247,7 @@ _loop1_86_rule(Parser *p)
                 if (!_new_children) {
                     p->error_indicator = 1;
                     PyErr_NoMemory();
-                    D(p->level--);
+                    p->level--;
                     return NULL;
                 }
                 _children = _new_children;
@@ -26288,7 +27261,7 @@ _loop1_86_rule(Parser *p)
     }
     if (_n == 0 || p->error_indicator) {
         PyMem_Free(_children);
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     asdl_seq *_seq = (asdl_seq*)_Py_asdl_generic_seq_new(_n, p->arena);
@@ -26296,13 +27269,13 @@ _loop1_86_rule(Parser *p)
         PyMem_Free(_children);
         p->error_indicator = 1;
         PyErr_NoMemory();
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     for (int i = 0; i < _n; i++) asdl_seq_SET_UNTYPED(_seq, i, _children[i]);
     PyMem_Free(_children);
     _PyPegen_insert_memo(p, _start_mark, _loop1_86_type, _seq);
-    D(p->level--);
+    p->level--;
     return _seq;
 }
 
@@ -26310,9 +27283,12 @@ _loop1_86_rule(Parser *p)
 static asdl_seq *
 _loop0_88_rule(Parser *p)
 {
-    D(p->level++);
+    if (p->level++ == MAXSTACK) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+    }
     if (p->error_indicator) {
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     void *_res = NULL;
@@ -26322,14 +27298,14 @@ _loop0_88_rule(Parser *p)
     if (!_children) {
         p->error_indicator = 1;
         PyErr_NoMemory();
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     Py_ssize_t _children_capacity = 1;
     Py_ssize_t _n = 0;
     { // ',' star_named_expression
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> _loop0_88[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "',' star_named_expression"));
@@ -26345,7 +27321,7 @@ _loop0_88_rule(Parser *p)
             if (_res == NULL && PyErr_Occurred()) {
                 p->error_indicator = 1;
                 PyMem_Free(_children);
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             if (_n == _children_capacity) {
@@ -26354,7 +27330,7 @@ _loop0_88_rule(Parser *p)
                 if (!_new_children) {
                     p->error_indicator = 1;
                     PyErr_NoMemory();
-                    D(p->level--);
+                    p->level--;
                     return NULL;
                 }
                 _children = _new_children;
@@ -26371,13 +27347,13 @@ _loop0_88_rule(Parser *p)
         PyMem_Free(_children);
         p->error_indicator = 1;
         PyErr_NoMemory();
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     for (int i = 0; i < _n; i++) asdl_seq_SET_UNTYPED(_seq, i, _children[i]);
     PyMem_Free(_children);
     _PyPegen_insert_memo(p, _start_mark, _loop0_88_type, _seq);
-    D(p->level--);
+    p->level--;
     return _seq;
 }
 
@@ -26385,16 +27361,19 @@ _loop0_88_rule(Parser *p)
 static asdl_seq *
 _gather_87_rule(Parser *p)
 {
-    D(p->level++);
+    if (p->level++ == MAXSTACK) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+    }
     if (p->error_indicator) {
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     asdl_seq * _res = NULL;
     int _mark = p->mark;
     { // star_named_expression _loop0_88
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> _gather_87[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "star_named_expression _loop0_88"));
@@ -26416,7 +27395,7 @@ _gather_87_rule(Parser *p)
     }
     _res = NULL;
   done:
-    D(p->level--);
+    p->level--;
     return _res;
 }
 
@@ -26424,9 +27403,12 @@ _gather_87_rule(Parser *p)
 static asdl_seq *
 _loop1_89_rule(Parser *p)
 {
-    D(p->level++);
+    if (p->level++ == MAXSTACK) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+    }
     if (p->error_indicator) {
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     void *_res = NULL;
@@ -26436,14 +27418,14 @@ _loop1_89_rule(Parser *p)
     if (!_children) {
         p->error_indicator = 1;
         PyErr_NoMemory();
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     Py_ssize_t _children_capacity = 1;
     Py_ssize_t _n = 0;
     { // (',' expression)
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> _loop1_89[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "(',' expression)"));
@@ -26459,7 +27441,7 @@ _loop1_89_rule(Parser *p)
                 if (!_new_children) {
                     p->error_indicator = 1;
                     PyErr_NoMemory();
-                    D(p->level--);
+                    p->level--;
                     return NULL;
                 }
                 _children = _new_children;
@@ -26473,7 +27455,7 @@ _loop1_89_rule(Parser *p)
     }
     if (_n == 0 || p->error_indicator) {
         PyMem_Free(_children);
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     asdl_seq *_seq = (asdl_seq*)_Py_asdl_generic_seq_new(_n, p->arena);
@@ -26481,13 +27463,13 @@ _loop1_89_rule(Parser *p)
         PyMem_Free(_children);
         p->error_indicator = 1;
         PyErr_NoMemory();
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     for (int i = 0; i < _n; i++) asdl_seq_SET_UNTYPED(_seq, i, _children[i]);
     PyMem_Free(_children);
     _PyPegen_insert_memo(p, _start_mark, _loop1_89_type, _seq);
-    D(p->level--);
+    p->level--;
     return _seq;
 }
 
@@ -26495,9 +27477,12 @@ _loop1_89_rule(Parser *p)
 static asdl_seq *
 _loop0_90_rule(Parser *p)
 {
-    D(p->level++);
+    if (p->level++ == MAXSTACK) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+    }
     if (p->error_indicator) {
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     void *_res = NULL;
@@ -26507,14 +27492,14 @@ _loop0_90_rule(Parser *p)
     if (!_children) {
         p->error_indicator = 1;
         PyErr_NoMemory();
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     Py_ssize_t _children_capacity = 1;
     Py_ssize_t _n = 0;
     { // lambda_param_no_default
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> _loop0_90[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "lambda_param_no_default"));
@@ -26530,7 +27515,7 @@ _loop0_90_rule(Parser *p)
                 if (!_new_children) {
                     p->error_indicator = 1;
                     PyErr_NoMemory();
-                    D(p->level--);
+                    p->level--;
                     return NULL;
                 }
                 _children = _new_children;
@@ -26547,13 +27532,13 @@ _loop0_90_rule(Parser *p)
         PyMem_Free(_children);
         p->error_indicator = 1;
         PyErr_NoMemory();
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     for (int i = 0; i < _n; i++) asdl_seq_SET_UNTYPED(_seq, i, _children[i]);
     PyMem_Free(_children);
     _PyPegen_insert_memo(p, _start_mark, _loop0_90_type, _seq);
-    D(p->level--);
+    p->level--;
     return _seq;
 }
 
@@ -26561,9 +27546,12 @@ _loop0_90_rule(Parser *p)
 static asdl_seq *
 _loop0_91_rule(Parser *p)
 {
-    D(p->level++);
+    if (p->level++ == MAXSTACK) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+    }
     if (p->error_indicator) {
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     void *_res = NULL;
@@ -26573,14 +27561,14 @@ _loop0_91_rule(Parser *p)
     if (!_children) {
         p->error_indicator = 1;
         PyErr_NoMemory();
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     Py_ssize_t _children_capacity = 1;
     Py_ssize_t _n = 0;
     { // lambda_param_with_default
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> _loop0_91[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "lambda_param_with_default"));
@@ -26596,7 +27584,7 @@ _loop0_91_rule(Parser *p)
                 if (!_new_children) {
                     p->error_indicator = 1;
                     PyErr_NoMemory();
-                    D(p->level--);
+                    p->level--;
                     return NULL;
                 }
                 _children = _new_children;
@@ -26613,13 +27601,13 @@ _loop0_91_rule(Parser *p)
         PyMem_Free(_children);
         p->error_indicator = 1;
         PyErr_NoMemory();
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     for (int i = 0; i < _n; i++) asdl_seq_SET_UNTYPED(_seq, i, _children[i]);
     PyMem_Free(_children);
     _PyPegen_insert_memo(p, _start_mark, _loop0_91_type, _seq);
-    D(p->level--);
+    p->level--;
     return _seq;
 }
 
@@ -26627,9 +27615,12 @@ _loop0_91_rule(Parser *p)
 static asdl_seq *
 _loop0_92_rule(Parser *p)
 {
-    D(p->level++);
+    if (p->level++ == MAXSTACK) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+    }
     if (p->error_indicator) {
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     void *_res = NULL;
@@ -26639,14 +27630,14 @@ _loop0_92_rule(Parser *p)
     if (!_children) {
         p->error_indicator = 1;
         PyErr_NoMemory();
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     Py_ssize_t _children_capacity = 1;
     Py_ssize_t _n = 0;
     { // lambda_param_with_default
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> _loop0_92[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "lambda_param_with_default"));
@@ -26662,7 +27653,7 @@ _loop0_92_rule(Parser *p)
                 if (!_new_children) {
                     p->error_indicator = 1;
                     PyErr_NoMemory();
-                    D(p->level--);
+                    p->level--;
                     return NULL;
                 }
                 _children = _new_children;
@@ -26679,13 +27670,13 @@ _loop0_92_rule(Parser *p)
         PyMem_Free(_children);
         p->error_indicator = 1;
         PyErr_NoMemory();
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     for (int i = 0; i < _n; i++) asdl_seq_SET_UNTYPED(_seq, i, _children[i]);
     PyMem_Free(_children);
     _PyPegen_insert_memo(p, _start_mark, _loop0_92_type, _seq);
-    D(p->level--);
+    p->level--;
     return _seq;
 }
 
@@ -26693,9 +27684,12 @@ _loop0_92_rule(Parser *p)
 static asdl_seq *
 _loop1_93_rule(Parser *p)
 {
-    D(p->level++);
+    if (p->level++ == MAXSTACK) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+    }
     if (p->error_indicator) {
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     void *_res = NULL;
@@ -26705,14 +27699,14 @@ _loop1_93_rule(Parser *p)
     if (!_children) {
         p->error_indicator = 1;
         PyErr_NoMemory();
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     Py_ssize_t _children_capacity = 1;
     Py_ssize_t _n = 0;
     { // lambda_param_no_default
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> _loop1_93[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "lambda_param_no_default"));
@@ -26728,7 +27722,7 @@ _loop1_93_rule(Parser *p)
                 if (!_new_children) {
                     p->error_indicator = 1;
                     PyErr_NoMemory();
-                    D(p->level--);
+                    p->level--;
                     return NULL;
                 }
                 _children = _new_children;
@@ -26742,7 +27736,7 @@ _loop1_93_rule(Parser *p)
     }
     if (_n == 0 || p->error_indicator) {
         PyMem_Free(_children);
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     asdl_seq *_seq = (asdl_seq*)_Py_asdl_generic_seq_new(_n, p->arena);
@@ -26750,13 +27744,13 @@ _loop1_93_rule(Parser *p)
         PyMem_Free(_children);
         p->error_indicator = 1;
         PyErr_NoMemory();
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     for (int i = 0; i < _n; i++) asdl_seq_SET_UNTYPED(_seq, i, _children[i]);
     PyMem_Free(_children);
     _PyPegen_insert_memo(p, _start_mark, _loop1_93_type, _seq);
-    D(p->level--);
+    p->level--;
     return _seq;
 }
 
@@ -26764,9 +27758,12 @@ _loop1_93_rule(Parser *p)
 static asdl_seq *
 _loop0_94_rule(Parser *p)
 {
-    D(p->level++);
+    if (p->level++ == MAXSTACK) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+    }
     if (p->error_indicator) {
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     void *_res = NULL;
@@ -26776,14 +27773,14 @@ _loop0_94_rule(Parser *p)
     if (!_children) {
         p->error_indicator = 1;
         PyErr_NoMemory();
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     Py_ssize_t _children_capacity = 1;
     Py_ssize_t _n = 0;
     { // lambda_param_with_default
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> _loop0_94[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "lambda_param_with_default"));
@@ -26799,7 +27796,7 @@ _loop0_94_rule(Parser *p)
                 if (!_new_children) {
                     p->error_indicator = 1;
                     PyErr_NoMemory();
-                    D(p->level--);
+                    p->level--;
                     return NULL;
                 }
                 _children = _new_children;
@@ -26816,13 +27813,13 @@ _loop0_94_rule(Parser *p)
         PyMem_Free(_children);
         p->error_indicator = 1;
         PyErr_NoMemory();
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     for (int i = 0; i < _n; i++) asdl_seq_SET_UNTYPED(_seq, i, _children[i]);
     PyMem_Free(_children);
     _PyPegen_insert_memo(p, _start_mark, _loop0_94_type, _seq);
-    D(p->level--);
+    p->level--;
     return _seq;
 }
 
@@ -26830,9 +27827,12 @@ _loop0_94_rule(Parser *p)
 static asdl_seq *
 _loop1_95_rule(Parser *p)
 {
-    D(p->level++);
+    if (p->level++ == MAXSTACK) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+    }
     if (p->error_indicator) {
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     void *_res = NULL;
@@ -26842,14 +27842,14 @@ _loop1_95_rule(Parser *p)
     if (!_children) {
         p->error_indicator = 1;
         PyErr_NoMemory();
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     Py_ssize_t _children_capacity = 1;
     Py_ssize_t _n = 0;
     { // lambda_param_with_default
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> _loop1_95[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "lambda_param_with_default"));
@@ -26865,7 +27865,7 @@ _loop1_95_rule(Parser *p)
                 if (!_new_children) {
                     p->error_indicator = 1;
                     PyErr_NoMemory();
-                    D(p->level--);
+                    p->level--;
                     return NULL;
                 }
                 _children = _new_children;
@@ -26879,7 +27879,7 @@ _loop1_95_rule(Parser *p)
     }
     if (_n == 0 || p->error_indicator) {
         PyMem_Free(_children);
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     asdl_seq *_seq = (asdl_seq*)_Py_asdl_generic_seq_new(_n, p->arena);
@@ -26887,13 +27887,13 @@ _loop1_95_rule(Parser *p)
         PyMem_Free(_children);
         p->error_indicator = 1;
         PyErr_NoMemory();
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     for (int i = 0; i < _n; i++) asdl_seq_SET_UNTYPED(_seq, i, _children[i]);
     PyMem_Free(_children);
     _PyPegen_insert_memo(p, _start_mark, _loop1_95_type, _seq);
-    D(p->level--);
+    p->level--;
     return _seq;
 }
 
@@ -26901,9 +27901,12 @@ _loop1_95_rule(Parser *p)
 static asdl_seq *
 _loop1_96_rule(Parser *p)
 {
-    D(p->level++);
+    if (p->level++ == MAXSTACK) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+    }
     if (p->error_indicator) {
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     void *_res = NULL;
@@ -26913,14 +27916,14 @@ _loop1_96_rule(Parser *p)
     if (!_children) {
         p->error_indicator = 1;
         PyErr_NoMemory();
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     Py_ssize_t _children_capacity = 1;
     Py_ssize_t _n = 0;
     { // lambda_param_no_default
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> _loop1_96[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "lambda_param_no_default"));
@@ -26936,7 +27939,7 @@ _loop1_96_rule(Parser *p)
                 if (!_new_children) {
                     p->error_indicator = 1;
                     PyErr_NoMemory();
-                    D(p->level--);
+                    p->level--;
                     return NULL;
                 }
                 _children = _new_children;
@@ -26950,7 +27953,7 @@ _loop1_96_rule(Parser *p)
     }
     if (_n == 0 || p->error_indicator) {
         PyMem_Free(_children);
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     asdl_seq *_seq = (asdl_seq*)_Py_asdl_generic_seq_new(_n, p->arena);
@@ -26958,13 +27961,13 @@ _loop1_96_rule(Parser *p)
         PyMem_Free(_children);
         p->error_indicator = 1;
         PyErr_NoMemory();
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     for (int i = 0; i < _n; i++) asdl_seq_SET_UNTYPED(_seq, i, _children[i]);
     PyMem_Free(_children);
     _PyPegen_insert_memo(p, _start_mark, _loop1_96_type, _seq);
-    D(p->level--);
+    p->level--;
     return _seq;
 }
 
@@ -26972,9 +27975,12 @@ _loop1_96_rule(Parser *p)
 static asdl_seq *
 _loop1_97_rule(Parser *p)
 {
-    D(p->level++);
+    if (p->level++ == MAXSTACK) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+    }
     if (p->error_indicator) {
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     void *_res = NULL;
@@ -26984,14 +27990,14 @@ _loop1_97_rule(Parser *p)
     if (!_children) {
         p->error_indicator = 1;
         PyErr_NoMemory();
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     Py_ssize_t _children_capacity = 1;
     Py_ssize_t _n = 0;
     { // lambda_param_no_default
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> _loop1_97[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "lambda_param_no_default"));
@@ -27007,7 +28013,7 @@ _loop1_97_rule(Parser *p)
                 if (!_new_children) {
                     p->error_indicator = 1;
                     PyErr_NoMemory();
-                    D(p->level--);
+                    p->level--;
                     return NULL;
                 }
                 _children = _new_children;
@@ -27021,7 +28027,7 @@ _loop1_97_rule(Parser *p)
     }
     if (_n == 0 || p->error_indicator) {
         PyMem_Free(_children);
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     asdl_seq *_seq = (asdl_seq*)_Py_asdl_generic_seq_new(_n, p->arena);
@@ -27029,13 +28035,13 @@ _loop1_97_rule(Parser *p)
         PyMem_Free(_children);
         p->error_indicator = 1;
         PyErr_NoMemory();
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     for (int i = 0; i < _n; i++) asdl_seq_SET_UNTYPED(_seq, i, _children[i]);
     PyMem_Free(_children);
     _PyPegen_insert_memo(p, _start_mark, _loop1_97_type, _seq);
-    D(p->level--);
+    p->level--;
     return _seq;
 }
 
@@ -27043,9 +28049,12 @@ _loop1_97_rule(Parser *p)
 static asdl_seq *
 _loop0_98_rule(Parser *p)
 {
-    D(p->level++);
+    if (p->level++ == MAXSTACK) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+    }
     if (p->error_indicator) {
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     void *_res = NULL;
@@ -27055,14 +28064,14 @@ _loop0_98_rule(Parser *p)
     if (!_children) {
         p->error_indicator = 1;
         PyErr_NoMemory();
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     Py_ssize_t _children_capacity = 1;
     Py_ssize_t _n = 0;
     { // lambda_param_no_default
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> _loop0_98[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "lambda_param_no_default"));
@@ -27078,7 +28087,7 @@ _loop0_98_rule(Parser *p)
                 if (!_new_children) {
                     p->error_indicator = 1;
                     PyErr_NoMemory();
-                    D(p->level--);
+                    p->level--;
                     return NULL;
                 }
                 _children = _new_children;
@@ -27095,13 +28104,13 @@ _loop0_98_rule(Parser *p)
         PyMem_Free(_children);
         p->error_indicator = 1;
         PyErr_NoMemory();
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     for (int i = 0; i < _n; i++) asdl_seq_SET_UNTYPED(_seq, i, _children[i]);
     PyMem_Free(_children);
     _PyPegen_insert_memo(p, _start_mark, _loop0_98_type, _seq);
-    D(p->level--);
+    p->level--;
     return _seq;
 }
 
@@ -27109,9 +28118,12 @@ _loop0_98_rule(Parser *p)
 static asdl_seq *
 _loop1_99_rule(Parser *p)
 {
-    D(p->level++);
+    if (p->level++ == MAXSTACK) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+    }
     if (p->error_indicator) {
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     void *_res = NULL;
@@ -27121,14 +28133,14 @@ _loop1_99_rule(Parser *p)
     if (!_children) {
         p->error_indicator = 1;
         PyErr_NoMemory();
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     Py_ssize_t _children_capacity = 1;
     Py_ssize_t _n = 0;
     { // lambda_param_with_default
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> _loop1_99[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "lambda_param_with_default"));
@@ -27144,7 +28156,7 @@ _loop1_99_rule(Parser *p)
                 if (!_new_children) {
                     p->error_indicator = 1;
                     PyErr_NoMemory();
-                    D(p->level--);
+                    p->level--;
                     return NULL;
                 }
                 _children = _new_children;
@@ -27158,7 +28170,7 @@ _loop1_99_rule(Parser *p)
     }
     if (_n == 0 || p->error_indicator) {
         PyMem_Free(_children);
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     asdl_seq *_seq = (asdl_seq*)_Py_asdl_generic_seq_new(_n, p->arena);
@@ -27166,13 +28178,13 @@ _loop1_99_rule(Parser *p)
         PyMem_Free(_children);
         p->error_indicator = 1;
         PyErr_NoMemory();
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     for (int i = 0; i < _n; i++) asdl_seq_SET_UNTYPED(_seq, i, _children[i]);
     PyMem_Free(_children);
     _PyPegen_insert_memo(p, _start_mark, _loop1_99_type, _seq);
-    D(p->level--);
+    p->level--;
     return _seq;
 }
 
@@ -27180,9 +28192,12 @@ _loop1_99_rule(Parser *p)
 static asdl_seq *
 _loop0_100_rule(Parser *p)
 {
-    D(p->level++);
+    if (p->level++ == MAXSTACK) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+    }
     if (p->error_indicator) {
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     void *_res = NULL;
@@ -27192,14 +28207,14 @@ _loop0_100_rule(Parser *p)
     if (!_children) {
         p->error_indicator = 1;
         PyErr_NoMemory();
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     Py_ssize_t _children_capacity = 1;
     Py_ssize_t _n = 0;
     { // lambda_param_no_default
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> _loop0_100[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "lambda_param_no_default"));
@@ -27215,7 +28230,7 @@ _loop0_100_rule(Parser *p)
                 if (!_new_children) {
                     p->error_indicator = 1;
                     PyErr_NoMemory();
-                    D(p->level--);
+                    p->level--;
                     return NULL;
                 }
                 _children = _new_children;
@@ -27232,13 +28247,13 @@ _loop0_100_rule(Parser *p)
         PyMem_Free(_children);
         p->error_indicator = 1;
         PyErr_NoMemory();
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     for (int i = 0; i < _n; i++) asdl_seq_SET_UNTYPED(_seq, i, _children[i]);
     PyMem_Free(_children);
     _PyPegen_insert_memo(p, _start_mark, _loop0_100_type, _seq);
-    D(p->level--);
+    p->level--;
     return _seq;
 }
 
@@ -27246,10 +28261,13 @@ _loop0_100_rule(Parser *p)
 static asdl_seq *
 _loop1_101_rule(Parser *p)
 {
-    D(p->level++);
-    if (p->error_indicator) {
-        D(p->level--);
-        return NULL;
+    if (p->level++ == MAXSTACK) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+    }
+    if (p->error_indicator) {
+        p->level--;
+        return NULL;
     }
     void *_res = NULL;
     int _mark = p->mark;
@@ -27258,14 +28276,14 @@ _loop1_101_rule(Parser *p)
     if (!_children) {
         p->error_indicator = 1;
         PyErr_NoMemory();
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     Py_ssize_t _children_capacity = 1;
     Py_ssize_t _n = 0;
     { // lambda_param_with_default
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> _loop1_101[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "lambda_param_with_default"));
@@ -27281,7 +28299,7 @@ _loop1_101_rule(Parser *p)
                 if (!_new_children) {
                     p->error_indicator = 1;
                     PyErr_NoMemory();
-                    D(p->level--);
+                    p->level--;
                     return NULL;
                 }
                 _children = _new_children;
@@ -27295,7 +28313,7 @@ _loop1_101_rule(Parser *p)
     }
     if (_n == 0 || p->error_indicator) {
         PyMem_Free(_children);
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     asdl_seq *_seq = (asdl_seq*)_Py_asdl_generic_seq_new(_n, p->arena);
@@ -27303,13 +28321,13 @@ _loop1_101_rule(Parser *p)
         PyMem_Free(_children);
         p->error_indicator = 1;
         PyErr_NoMemory();
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     for (int i = 0; i < _n; i++) asdl_seq_SET_UNTYPED(_seq, i, _children[i]);
     PyMem_Free(_children);
     _PyPegen_insert_memo(p, _start_mark, _loop1_101_type, _seq);
-    D(p->level--);
+    p->level--;
     return _seq;
 }
 
@@ -27317,9 +28335,12 @@ _loop1_101_rule(Parser *p)
 static asdl_seq *
 _loop0_102_rule(Parser *p)
 {
-    D(p->level++);
+    if (p->level++ == MAXSTACK) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+    }
     if (p->error_indicator) {
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     void *_res = NULL;
@@ -27329,14 +28350,14 @@ _loop0_102_rule(Parser *p)
     if (!_children) {
         p->error_indicator = 1;
         PyErr_NoMemory();
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     Py_ssize_t _children_capacity = 1;
     Py_ssize_t _n = 0;
     { // lambda_param_maybe_default
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> _loop0_102[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "lambda_param_maybe_default"));
@@ -27352,7 +28373,7 @@ _loop0_102_rule(Parser *p)
                 if (!_new_children) {
                     p->error_indicator = 1;
                     PyErr_NoMemory();
-                    D(p->level--);
+                    p->level--;
                     return NULL;
                 }
                 _children = _new_children;
@@ -27369,13 +28390,13 @@ _loop0_102_rule(Parser *p)
         PyMem_Free(_children);
         p->error_indicator = 1;
         PyErr_NoMemory();
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     for (int i = 0; i < _n; i++) asdl_seq_SET_UNTYPED(_seq, i, _children[i]);
     PyMem_Free(_children);
     _PyPegen_insert_memo(p, _start_mark, _loop0_102_type, _seq);
-    D(p->level--);
+    p->level--;
     return _seq;
 }
 
@@ -27383,9 +28404,12 @@ _loop0_102_rule(Parser *p)
 static asdl_seq *
 _loop1_103_rule(Parser *p)
 {
-    D(p->level++);
+    if (p->level++ == MAXSTACK) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+    }
     if (p->error_indicator) {
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     void *_res = NULL;
@@ -27395,14 +28419,14 @@ _loop1_103_rule(Parser *p)
     if (!_children) {
         p->error_indicator = 1;
         PyErr_NoMemory();
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     Py_ssize_t _children_capacity = 1;
     Py_ssize_t _n = 0;
     { // lambda_param_maybe_default
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> _loop1_103[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "lambda_param_maybe_default"));
@@ -27418,7 +28442,7 @@ _loop1_103_rule(Parser *p)
                 if (!_new_children) {
                     p->error_indicator = 1;
                     PyErr_NoMemory();
-                    D(p->level--);
+                    p->level--;
                     return NULL;
                 }
                 _children = _new_children;
@@ -27432,7 +28456,7 @@ _loop1_103_rule(Parser *p)
     }
     if (_n == 0 || p->error_indicator) {
         PyMem_Free(_children);
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     asdl_seq *_seq = (asdl_seq*)_Py_asdl_generic_seq_new(_n, p->arena);
@@ -27440,13 +28464,13 @@ _loop1_103_rule(Parser *p)
         PyMem_Free(_children);
         p->error_indicator = 1;
         PyErr_NoMemory();
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     for (int i = 0; i < _n; i++) asdl_seq_SET_UNTYPED(_seq, i, _children[i]);
     PyMem_Free(_children);
     _PyPegen_insert_memo(p, _start_mark, _loop1_103_type, _seq);
-    D(p->level--);
+    p->level--;
     return _seq;
 }
 
@@ -27454,9 +28478,12 @@ _loop1_103_rule(Parser *p)
 static asdl_seq *
 _loop1_104_rule(Parser *p)
 {
-    D(p->level++);
+    if (p->level++ == MAXSTACK) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+    }
     if (p->error_indicator) {
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     void *_res = NULL;
@@ -27466,14 +28493,14 @@ _loop1_104_rule(Parser *p)
     if (!_children) {
         p->error_indicator = 1;
         PyErr_NoMemory();
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     Py_ssize_t _children_capacity = 1;
     Py_ssize_t _n = 0;
     { // ('or' conjunction)
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> _loop1_104[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "('or' conjunction)"));
@@ -27489,7 +28516,7 @@ _loop1_104_rule(Parser *p)
                 if (!_new_children) {
                     p->error_indicator = 1;
                     PyErr_NoMemory();
-                    D(p->level--);
+                    p->level--;
                     return NULL;
                 }
                 _children = _new_children;
@@ -27503,7 +28530,7 @@ _loop1_104_rule(Parser *p)
     }
     if (_n == 0 || p->error_indicator) {
         PyMem_Free(_children);
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     asdl_seq *_seq = (asdl_seq*)_Py_asdl_generic_seq_new(_n, p->arena);
@@ -27511,13 +28538,13 @@ _loop1_104_rule(Parser *p)
         PyMem_Free(_children);
         p->error_indicator = 1;
         PyErr_NoMemory();
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     for (int i = 0; i < _n; i++) asdl_seq_SET_UNTYPED(_seq, i, _children[i]);
     PyMem_Free(_children);
     _PyPegen_insert_memo(p, _start_mark, _loop1_104_type, _seq);
-    D(p->level--);
+    p->level--;
     return _seq;
 }
 
@@ -27525,9 +28552,12 @@ _loop1_104_rule(Parser *p)
 static asdl_seq *
 _loop1_105_rule(Parser *p)
 {
-    D(p->level++);
+    if (p->level++ == MAXSTACK) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+    }
     if (p->error_indicator) {
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     void *_res = NULL;
@@ -27537,14 +28567,14 @@ _loop1_105_rule(Parser *p)
     if (!_children) {
         p->error_indicator = 1;
         PyErr_NoMemory();
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     Py_ssize_t _children_capacity = 1;
     Py_ssize_t _n = 0;
     { // ('and' inversion)
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> _loop1_105[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "('and' inversion)"));
@@ -27560,7 +28590,7 @@ _loop1_105_rule(Parser *p)
                 if (!_new_children) {
                     p->error_indicator = 1;
                     PyErr_NoMemory();
-                    D(p->level--);
+                    p->level--;
                     return NULL;
                 }
                 _children = _new_children;
@@ -27574,7 +28604,7 @@ _loop1_105_rule(Parser *p)
     }
     if (_n == 0 || p->error_indicator) {
         PyMem_Free(_children);
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     asdl_seq *_seq = (asdl_seq*)_Py_asdl_generic_seq_new(_n, p->arena);
@@ -27582,13 +28612,13 @@ _loop1_105_rule(Parser *p)
         PyMem_Free(_children);
         p->error_indicator = 1;
         PyErr_NoMemory();
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     for (int i = 0; i < _n; i++) asdl_seq_SET_UNTYPED(_seq, i, _children[i]);
     PyMem_Free(_children);
     _PyPegen_insert_memo(p, _start_mark, _loop1_105_type, _seq);
-    D(p->level--);
+    p->level--;
     return _seq;
 }
 
@@ -27596,9 +28626,12 @@ _loop1_105_rule(Parser *p)
 static asdl_seq *
 _loop1_106_rule(Parser *p)
 {
-    D(p->level++);
+    if (p->level++ == MAXSTACK) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+    }
     if (p->error_indicator) {
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     void *_res = NULL;
@@ -27608,14 +28641,14 @@ _loop1_106_rule(Parser *p)
     if (!_children) {
         p->error_indicator = 1;
         PyErr_NoMemory();
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     Py_ssize_t _children_capacity = 1;
     Py_ssize_t _n = 0;
     { // compare_op_bitwise_or_pair
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> _loop1_106[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "compare_op_bitwise_or_pair"));
@@ -27631,7 +28664,7 @@ _loop1_106_rule(Parser *p)
                 if (!_new_children) {
                     p->error_indicator = 1;
                     PyErr_NoMemory();
-                    D(p->level--);
+                    p->level--;
                     return NULL;
                 }
                 _children = _new_children;
@@ -27645,7 +28678,7 @@ _loop1_106_rule(Parser *p)
     }
     if (_n == 0 || p->error_indicator) {
         PyMem_Free(_children);
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     asdl_seq *_seq = (asdl_seq*)_Py_asdl_generic_seq_new(_n, p->arena);
@@ -27653,13 +28686,13 @@ _loop1_106_rule(Parser *p)
         PyMem_Free(_children);
         p->error_indicator = 1;
         PyErr_NoMemory();
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     for (int i = 0; i < _n; i++) asdl_seq_SET_UNTYPED(_seq, i, _children[i]);
     PyMem_Free(_children);
     _PyPegen_insert_memo(p, _start_mark, _loop1_106_type, _seq);
-    D(p->level--);
+    p->level--;
     return _seq;
 }
 
@@ -27667,16 +28700,19 @@ _loop1_106_rule(Parser *p)
 static void *
 _tmp_107_rule(Parser *p)
 {
-    D(p->level++);
+    if (p->level++ == MAXSTACK) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+    }
     if (p->error_indicator) {
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     void * _res = NULL;
     int _mark = p->mark;
     { // '!='
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> _tmp_107[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'!='"));
@@ -27689,7 +28725,7 @@ _tmp_107_rule(Parser *p)
             _res = _PyPegen_check_barry_as_flufl ( p , tok ) ? NULL : tok;
             if (_res == NULL && PyErr_Occurred()) {
                 p->error_indicator = 1;
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             goto done;
@@ -27700,7 +28736,7 @@ _tmp_107_rule(Parser *p)
     }
     _res = NULL;
   done:
-    D(p->level--);
+    p->level--;
     return _res;
 }
 
@@ -27708,9 +28744,12 @@ _tmp_107_rule(Parser *p)
 static asdl_seq *
 _loop0_109_rule(Parser *p)
 {
-    D(p->level++);
+    if (p->level++ == MAXSTACK) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+    }
     if (p->error_indicator) {
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     void *_res = NULL;
@@ -27720,14 +28759,14 @@ _loop0_109_rule(Parser *p)
     if (!_children) {
         p->error_indicator = 1;
         PyErr_NoMemory();
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     Py_ssize_t _children_capacity = 1;
     Py_ssize_t _n = 0;
     { // ',' slice
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> _loop0_109[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "',' slice"));
@@ -27743,7 +28782,7 @@ _loop0_109_rule(Parser *p)
             if (_res == NULL && PyErr_Occurred()) {
                 p->error_indicator = 1;
                 PyMem_Free(_children);
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             if (_n == _children_capacity) {
@@ -27752,7 +28791,7 @@ _loop0_109_rule(Parser *p)
                 if (!_new_children) {
                     p->error_indicator = 1;
                     PyErr_NoMemory();
-                    D(p->level--);
+                    p->level--;
                     return NULL;
                 }
                 _children = _new_children;
@@ -27769,13 +28808,13 @@ _loop0_109_rule(Parser *p)
         PyMem_Free(_children);
         p->error_indicator = 1;
         PyErr_NoMemory();
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     for (int i = 0; i < _n; i++) asdl_seq_SET_UNTYPED(_seq, i, _children[i]);
     PyMem_Free(_children);
     _PyPegen_insert_memo(p, _start_mark, _loop0_109_type, _seq);
-    D(p->level--);
+    p->level--;
     return _seq;
 }
 
@@ -27783,16 +28822,19 @@ _loop0_109_rule(Parser *p)
 static asdl_seq *
 _gather_108_rule(Parser *p)
 {
-    D(p->level++);
+    if (p->level++ == MAXSTACK) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+    }
     if (p->error_indicator) {
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     asdl_seq * _res = NULL;
     int _mark = p->mark;
     { // slice _loop0_109
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> _gather_108[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "slice _loop0_109"));
@@ -27814,7 +28856,7 @@ _gather_108_rule(Parser *p)
     }
     _res = NULL;
   done:
-    D(p->level--);
+    p->level--;
     return _res;
 }
 
@@ -27822,16 +28864,19 @@ _gather_108_rule(Parser *p)
 static void *
 _tmp_110_rule(Parser *p)
 {
-    D(p->level++);
+    if (p->level++ == MAXSTACK) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+    }
     if (p->error_indicator) {
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     void * _res = NULL;
     int _mark = p->mark;
     { // ':' expression?
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> _tmp_110[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "':' expression?"));
@@ -27847,7 +28892,7 @@ _tmp_110_rule(Parser *p)
             _res = d;
             if (_res == NULL && PyErr_Occurred()) {
                 p->error_indicator = 1;
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             goto done;
@@ -27858,7 +28903,7 @@ _tmp_110_rule(Parser *p)
     }
     _res = NULL;
   done:
-    D(p->level--);
+    p->level--;
     return _res;
 }
 
@@ -27866,16 +28911,19 @@ _tmp_110_rule(Parser *p)
 static void *
 _tmp_111_rule(Parser *p)
 {
-    D(p->level++);
+    if (p->level++ == MAXSTACK) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+    }
     if (p->error_indicator) {
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     void * _res = NULL;
     int _mark = p->mark;
     { // tuple
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> _tmp_111[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "tuple"));
@@ -27894,7 +28942,7 @@ _tmp_111_rule(Parser *p)
     }
     { // group
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> _tmp_111[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "group"));
@@ -27913,7 +28961,7 @@ _tmp_111_rule(Parser *p)
     }
     { // genexp
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> _tmp_111[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "genexp"));
@@ -27932,7 +28980,7 @@ _tmp_111_rule(Parser *p)
     }
     _res = NULL;
   done:
-    D(p->level--);
+    p->level--;
     return _res;
 }
 
@@ -27940,16 +28988,19 @@ _tmp_111_rule(Parser *p)
 static void *
 _tmp_112_rule(Parser *p)
 {
-    D(p->level++);
+    if (p->level++ == MAXSTACK) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+    }
     if (p->error_indicator) {
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     void * _res = NULL;
     int _mark = p->mark;
     { // list
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> _tmp_112[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "list"));
@@ -27968,7 +29019,7 @@ _tmp_112_rule(Parser *p)
     }
     { // listcomp
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> _tmp_112[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "listcomp"));
@@ -27987,7 +29038,7 @@ _tmp_112_rule(Parser *p)
     }
     _res = NULL;
   done:
-    D(p->level--);
+    p->level--;
     return _res;
 }
 
@@ -27995,16 +29046,19 @@ _tmp_112_rule(Parser *p)
 static void *
 _tmp_113_rule(Parser *p)
 {
-    D(p->level++);
+    if (p->level++ == MAXSTACK) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+    }
     if (p->error_indicator) {
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     void * _res = NULL;
     int _mark = p->mark;
     { // dict
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> _tmp_113[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "dict"));
@@ -28023,7 +29077,7 @@ _tmp_113_rule(Parser *p)
     }
     { // set
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> _tmp_113[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "set"));
@@ -28042,7 +29096,7 @@ _tmp_113_rule(Parser *p)
     }
     { // dictcomp
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> _tmp_113[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "dictcomp"));
@@ -28061,7 +29115,7 @@ _tmp_113_rule(Parser *p)
     }
     { // setcomp
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> _tmp_113[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "setcomp"));
@@ -28080,7 +29134,7 @@ _tmp_113_rule(Parser *p)
     }
     _res = NULL;
   done:
-    D(p->level--);
+    p->level--;
     return _res;
 }
 
@@ -28088,9 +29142,12 @@ _tmp_113_rule(Parser *p)
 static asdl_seq *
 _loop1_114_rule(Parser *p)
 {
-    D(p->level++);
+    if (p->level++ == MAXSTACK) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+    }
     if (p->error_indicator) {
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     void *_res = NULL;
@@ -28100,14 +29157,14 @@ _loop1_114_rule(Parser *p)
     if (!_children) {
         p->error_indicator = 1;
         PyErr_NoMemory();
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     Py_ssize_t _children_capacity = 1;
     Py_ssize_t _n = 0;
     { // STRING
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> _loop1_114[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "STRING"));
@@ -28123,7 +29180,7 @@ _loop1_114_rule(Parser *p)
                 if (!_new_children) {
                     p->error_indicator = 1;
                     PyErr_NoMemory();
-                    D(p->level--);
+                    p->level--;
                     return NULL;
                 }
                 _children = _new_children;
@@ -28137,7 +29194,7 @@ _loop1_114_rule(Parser *p)
     }
     if (_n == 0 || p->error_indicator) {
         PyMem_Free(_children);
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     asdl_seq *_seq = (asdl_seq*)_Py_asdl_generic_seq_new(_n, p->arena);
@@ -28145,13 +29202,13 @@ _loop1_114_rule(Parser *p)
         PyMem_Free(_children);
         p->error_indicator = 1;
         PyErr_NoMemory();
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     for (int i = 0; i < _n; i++) asdl_seq_SET_UNTYPED(_seq, i, _children[i]);
     PyMem_Free(_children);
     _PyPegen_insert_memo(p, _start_mark, _loop1_114_type, _seq);
-    D(p->level--);
+    p->level--;
     return _seq;
 }
 
@@ -28159,16 +29216,19 @@ _loop1_114_rule(Parser *p)
 static void *
 _tmp_115_rule(Parser *p)
 {
-    D(p->level++);
+    if (p->level++ == MAXSTACK) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+    }
     if (p->error_indicator) {
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     void * _res = NULL;
     int _mark = p->mark;
     { // star_named_expression ',' star_named_expressions?
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> _tmp_115[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "star_named_expression ',' star_named_expressions?"));
@@ -28187,7 +29247,7 @@ _tmp_115_rule(Parser *p)
             _res = _PyPegen_seq_insert_in_front ( p , y , z );
             if (_res == NULL && PyErr_Occurred()) {
                 p->error_indicator = 1;
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             goto done;
@@ -28198,7 +29258,7 @@ _tmp_115_rule(Parser *p)
     }
     _res = NULL;
   done:
-    D(p->level--);
+    p->level--;
     return _res;
 }
 
@@ -28206,16 +29266,19 @@ _tmp_115_rule(Parser *p)
 static void *
 _tmp_116_rule(Parser *p)
 {
-    D(p->level++);
+    if (p->level++ == MAXSTACK) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+    }
     if (p->error_indicator) {
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     void * _res = NULL;
     int _mark = p->mark;
     { // yield_expr
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> _tmp_116[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "yield_expr"));
@@ -28234,7 +29297,7 @@ _tmp_116_rule(Parser *p)
     }
     { // named_expression
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> _tmp_116[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "named_expression"));
@@ -28253,7 +29316,7 @@ _tmp_116_rule(Parser *p)
     }
     _res = NULL;
   done:
-    D(p->level--);
+    p->level--;
     return _res;
 }
 
@@ -28261,16 +29324,19 @@ _tmp_116_rule(Parser *p)
 static void *
 _tmp_117_rule(Parser *p)
 {
-    D(p->level++);
+    if (p->level++ == MAXSTACK) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+    }
     if (p->error_indicator) {
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     void * _res = NULL;
     int _mark = p->mark;
     { // assignment_expression
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> _tmp_117[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "assignment_expression"));
@@ -28289,7 +29355,7 @@ _tmp_117_rule(Parser *p)
     }
     { // expression !':='
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> _tmp_117[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "expression !':='"));
@@ -28310,7 +29376,7 @@ _tmp_117_rule(Parser *p)
     }
     _res = NULL;
   done:
-    D(p->level--);
+    p->level--;
     return _res;
 }
 
@@ -28318,9 +29384,12 @@ _tmp_117_rule(Parser *p)
 static asdl_seq *
 _loop0_119_rule(Parser *p)
 {
-    D(p->level++);
+    if (p->level++ == MAXSTACK) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+    }
     if (p->error_indicator) {
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     void *_res = NULL;
@@ -28330,14 +29399,14 @@ _loop0_119_rule(Parser *p)
     if (!_children) {
         p->error_indicator = 1;
         PyErr_NoMemory();
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     Py_ssize_t _children_capacity = 1;
     Py_ssize_t _n = 0;
     { // ',' double_starred_kvpair
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> _loop0_119[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "',' double_starred_kvpair"));
@@ -28353,7 +29422,7 @@ _loop0_119_rule(Parser *p)
             if (_res == NULL && PyErr_Occurred()) {
                 p->error_indicator = 1;
                 PyMem_Free(_children);
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             if (_n == _children_capacity) {
@@ -28362,7 +29431,7 @@ _loop0_119_rule(Parser *p)
                 if (!_new_children) {
                     p->error_indicator = 1;
                     PyErr_NoMemory();
-                    D(p->level--);
+                    p->level--;
                     return NULL;
                 }
                 _children = _new_children;
@@ -28379,13 +29448,13 @@ _loop0_119_rule(Parser *p)
         PyMem_Free(_children);
         p->error_indicator = 1;
         PyErr_NoMemory();
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     for (int i = 0; i < _n; i++) asdl_seq_SET_UNTYPED(_seq, i, _children[i]);
     PyMem_Free(_children);
     _PyPegen_insert_memo(p, _start_mark, _loop0_119_type, _seq);
-    D(p->level--);
+    p->level--;
     return _seq;
 }
 
@@ -28393,16 +29462,19 @@ _loop0_119_rule(Parser *p)
 static asdl_seq *
 _gather_118_rule(Parser *p)
 {
-    D(p->level++);
+    if (p->level++ == MAXSTACK) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+    }
     if (p->error_indicator) {
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     asdl_seq * _res = NULL;
     int _mark = p->mark;
     { // double_starred_kvpair _loop0_119
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> _gather_118[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "double_starred_kvpair _loop0_119"));
@@ -28424,7 +29496,7 @@ _gather_118_rule(Parser *p)
     }
     _res = NULL;
   done:
-    D(p->level--);
+    p->level--;
     return _res;
 }
 
@@ -28432,9 +29504,12 @@ _gather_118_rule(Parser *p)
 static asdl_seq *
 _loop1_120_rule(Parser *p)
 {
-    D(p->level++);
+    if (p->level++ == MAXSTACK) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+    }
     if (p->error_indicator) {
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     void *_res = NULL;
@@ -28444,14 +29519,14 @@ _loop1_120_rule(Parser *p)
     if (!_children) {
         p->error_indicator = 1;
         PyErr_NoMemory();
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     Py_ssize_t _children_capacity = 1;
     Py_ssize_t _n = 0;
     { // for_if_clause
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> _loop1_120[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "for_if_clause"));
@@ -28467,7 +29542,7 @@ _loop1_120_rule(Parser *p)
                 if (!_new_children) {
                     p->error_indicator = 1;
                     PyErr_NoMemory();
-                    D(p->level--);
+                    p->level--;
                     return NULL;
                 }
                 _children = _new_children;
@@ -28481,7 +29556,7 @@ _loop1_120_rule(Parser *p)
     }
     if (_n == 0 || p->error_indicator) {
         PyMem_Free(_children);
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     asdl_seq *_seq = (asdl_seq*)_Py_asdl_generic_seq_new(_n, p->arena);
@@ -28489,13 +29564,13 @@ _loop1_120_rule(Parser *p)
         PyMem_Free(_children);
         p->error_indicator = 1;
         PyErr_NoMemory();
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     for (int i = 0; i < _n; i++) asdl_seq_SET_UNTYPED(_seq, i, _children[i]);
     PyMem_Free(_children);
     _PyPegen_insert_memo(p, _start_mark, _loop1_120_type, _seq);
-    D(p->level--);
+    p->level--;
     return _seq;
 }
 
@@ -28503,9 +29578,12 @@ _loop1_120_rule(Parser *p)
 static asdl_seq *
 _loop0_121_rule(Parser *p)
 {
-    D(p->level++);
+    if (p->level++ == MAXSTACK) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+    }
     if (p->error_indicator) {
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     void *_res = NULL;
@@ -28515,14 +29593,14 @@ _loop0_121_rule(Parser *p)
     if (!_children) {
         p->error_indicator = 1;
         PyErr_NoMemory();
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     Py_ssize_t _children_capacity = 1;
     Py_ssize_t _n = 0;
     { // ('if' disjunction)
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> _loop0_121[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "('if' disjunction)"));
@@ -28538,7 +29616,7 @@ _loop0_121_rule(Parser *p)
                 if (!_new_children) {
                     p->error_indicator = 1;
                     PyErr_NoMemory();
-                    D(p->level--);
+                    p->level--;
                     return NULL;
                 }
                 _children = _new_children;
@@ -28555,13 +29633,13 @@ _loop0_121_rule(Parser *p)
         PyMem_Free(_children);
         p->error_indicator = 1;
         PyErr_NoMemory();
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     for (int i = 0; i < _n; i++) asdl_seq_SET_UNTYPED(_seq, i, _children[i]);
     PyMem_Free(_children);
     _PyPegen_insert_memo(p, _start_mark, _loop0_121_type, _seq);
-    D(p->level--);
+    p->level--;
     return _seq;
 }
 
@@ -28569,9 +29647,12 @@ _loop0_121_rule(Parser *p)
 static asdl_seq *
 _loop0_122_rule(Parser *p)
 {
-    D(p->level++);
+    if (p->level++ == MAXSTACK) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+    }
     if (p->error_indicator) {
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     void *_res = NULL;
@@ -28581,14 +29662,14 @@ _loop0_122_rule(Parser *p)
     if (!_children) {
         p->error_indicator = 1;
         PyErr_NoMemory();
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     Py_ssize_t _children_capacity = 1;
     Py_ssize_t _n = 0;
     { // ('if' disjunction)
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> _loop0_122[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "('if' disjunction)"));
@@ -28604,7 +29685,7 @@ _loop0_122_rule(Parser *p)
                 if (!_new_children) {
                     p->error_indicator = 1;
                     PyErr_NoMemory();
-                    D(p->level--);
+                    p->level--;
                     return NULL;
                 }
                 _children = _new_children;
@@ -28621,13 +29702,13 @@ _loop0_122_rule(Parser *p)
         PyMem_Free(_children);
         p->error_indicator = 1;
         PyErr_NoMemory();
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     for (int i = 0; i < _n; i++) asdl_seq_SET_UNTYPED(_seq, i, _children[i]);
     PyMem_Free(_children);
     _PyPegen_insert_memo(p, _start_mark, _loop0_122_type, _seq);
-    D(p->level--);
+    p->level--;
     return _seq;
 }
 
@@ -28635,9 +29716,12 @@ _loop0_122_rule(Parser *p)
 static asdl_seq *
 _loop0_124_rule(Parser *p)
 {
-    D(p->level++);
+    if (p->level++ == MAXSTACK) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+    }
     if (p->error_indicator) {
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     void *_res = NULL;
@@ -28647,14 +29731,14 @@ _loop0_124_rule(Parser *p)
     if (!_children) {
         p->error_indicator = 1;
         PyErr_NoMemory();
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     Py_ssize_t _children_capacity = 1;
     Py_ssize_t _n = 0;
     { // ',' (starred_expression | (assignment_expression | expression !':=') !'=')
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> _loop0_124[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "',' (starred_expression | (assignment_expression | expression !':=') !'=')"));
@@ -28670,7 +29754,7 @@ _loop0_124_rule(Parser *p)
             if (_res == NULL && PyErr_Occurred()) {
                 p->error_indicator = 1;
                 PyMem_Free(_children);
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             if (_n == _children_capacity) {
@@ -28679,7 +29763,7 @@ _loop0_124_rule(Parser *p)
                 if (!_new_children) {
                     p->error_indicator = 1;
                     PyErr_NoMemory();
-                    D(p->level--);
+                    p->level--;
                     return NULL;
                 }
                 _children = _new_children;
@@ -28696,13 +29780,13 @@ _loop0_124_rule(Parser *p)
         PyMem_Free(_children);
         p->error_indicator = 1;
         PyErr_NoMemory();
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     for (int i = 0; i < _n; i++) asdl_seq_SET_UNTYPED(_seq, i, _children[i]);
     PyMem_Free(_children);
     _PyPegen_insert_memo(p, _start_mark, _loop0_124_type, _seq);
-    D(p->level--);
+    p->level--;
     return _seq;
 }
 
@@ -28711,16 +29795,19 @@ _loop0_124_rule(Parser *p)
 static asdl_seq *
 _gather_123_rule(Parser *p)
 {
-    D(p->level++);
+    if (p->level++ == MAXSTACK) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+    }
     if (p->error_indicator) {
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     asdl_seq * _res = NULL;
     int _mark = p->mark;
     { // (starred_expression | (assignment_expression | expression !':=') !'=') _loop0_124
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> _gather_123[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "(starred_expression | (assignment_expression | expression !':=') !'=') _loop0_124"));
@@ -28742,7 +29829,7 @@ _gather_123_rule(Parser *p)
     }
     _res = NULL;
   done:
-    D(p->level--);
+    p->level--;
     return _res;
 }
 
@@ -28750,16 +29837,19 @@ _gather_123_rule(Parser *p)
 static void *
 _tmp_125_rule(Parser *p)
 {
-    D(p->level++);
+    if (p->level++ == MAXSTACK) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+    }
     if (p->error_indicator) {
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     void * _res = NULL;
     int _mark = p->mark;
     { // ',' kwargs
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> _tmp_125[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "',' kwargs"));
@@ -28775,7 +29865,7 @@ _tmp_125_rule(Parser *p)
             _res = k;
             if (_res == NULL && PyErr_Occurred()) {
                 p->error_indicator = 1;
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             goto done;
@@ -28786,7 +29876,7 @@ _tmp_125_rule(Parser *p)
     }
     _res = NULL;
   done:
-    D(p->level--);
+    p->level--;
     return _res;
 }
 
@@ -28794,9 +29884,12 @@ _tmp_125_rule(Parser *p)
 static asdl_seq *
 _loop0_127_rule(Parser *p)
 {
-    D(p->level++);
+    if (p->level++ == MAXSTACK) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+    }
     if (p->error_indicator) {
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     void *_res = NULL;
@@ -28806,14 +29899,14 @@ _loop0_127_rule(Parser *p)
     if (!_children) {
         p->error_indicator = 1;
         PyErr_NoMemory();
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     Py_ssize_t _children_capacity = 1;
     Py_ssize_t _n = 0;
     { // ',' kwarg_or_starred
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> _loop0_127[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "',' kwarg_or_starred"));
@@ -28829,7 +29922,7 @@ _loop0_127_rule(Parser *p)
             if (_res == NULL && PyErr_Occurred()) {
                 p->error_indicator = 1;
                 PyMem_Free(_children);
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             if (_n == _children_capacity) {
@@ -28838,7 +29931,7 @@ _loop0_127_rule(Parser *p)
                 if (!_new_children) {
                     p->error_indicator = 1;
                     PyErr_NoMemory();
-                    D(p->level--);
+                    p->level--;
                     return NULL;
                 }
                 _children = _new_children;
@@ -28855,13 +29948,13 @@ _loop0_127_rule(Parser *p)
         PyMem_Free(_children);
         p->error_indicator = 1;
         PyErr_NoMemory();
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     for (int i = 0; i < _n; i++) asdl_seq_SET_UNTYPED(_seq, i, _children[i]);
     PyMem_Free(_children);
     _PyPegen_insert_memo(p, _start_mark, _loop0_127_type, _seq);
-    D(p->level--);
+    p->level--;
     return _seq;
 }
 
@@ -28869,16 +29962,19 @@ _loop0_127_rule(Parser *p)
 static asdl_seq *
 _gather_126_rule(Parser *p)
 {
-    D(p->level++);
+    if (p->level++ == MAXSTACK) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+    }
     if (p->error_indicator) {
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     asdl_seq * _res = NULL;
     int _mark = p->mark;
     { // kwarg_or_starred _loop0_127
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> _gather_126[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "kwarg_or_starred _loop0_127"));
@@ -28900,7 +29996,7 @@ _gather_126_rule(Parser *p)
     }
     _res = NULL;
   done:
-    D(p->level--);
+    p->level--;
     return _res;
 }
 
@@ -28908,9 +30004,12 @@ _gather_126_rule(Parser *p)
 static asdl_seq *
 _loop0_129_rule(Parser *p)
 {
-    D(p->level++);
+    if (p->level++ == MAXSTACK) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+    }
     if (p->error_indicator) {
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     void *_res = NULL;
@@ -28920,14 +30019,14 @@ _loop0_129_rule(Parser *p)
     if (!_children) {
         p->error_indicator = 1;
         PyErr_NoMemory();
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     Py_ssize_t _children_capacity = 1;
     Py_ssize_t _n = 0;
     { // ',' kwarg_or_double_starred
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> _loop0_129[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "',' kwarg_or_double_starred"));
@@ -28943,7 +30042,7 @@ _loop0_129_rule(Parser *p)
             if (_res == NULL && PyErr_Occurred()) {
                 p->error_indicator = 1;
                 PyMem_Free(_children);
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             if (_n == _children_capacity) {
@@ -28952,7 +30051,7 @@ _loop0_129_rule(Parser *p)
                 if (!_new_children) {
                     p->error_indicator = 1;
                     PyErr_NoMemory();
-                    D(p->level--);
+                    p->level--;
                     return NULL;
                 }
                 _children = _new_children;
@@ -28969,13 +30068,13 @@ _loop0_129_rule(Parser *p)
         PyMem_Free(_children);
         p->error_indicator = 1;
         PyErr_NoMemory();
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     for (int i = 0; i < _n; i++) asdl_seq_SET_UNTYPED(_seq, i, _children[i]);
     PyMem_Free(_children);
     _PyPegen_insert_memo(p, _start_mark, _loop0_129_type, _seq);
-    D(p->level--);
+    p->level--;
     return _seq;
 }
 
@@ -28983,16 +30082,19 @@ _loop0_129_rule(Parser *p)
 static asdl_seq *
 _gather_128_rule(Parser *p)
 {
-    D(p->level++);
+    if (p->level++ == MAXSTACK) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+    }
     if (p->error_indicator) {
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     asdl_seq * _res = NULL;
     int _mark = p->mark;
     { // kwarg_or_double_starred _loop0_129
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> _gather_128[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "kwarg_or_double_starred _loop0_129"));
@@ -29014,7 +30116,7 @@ _gather_128_rule(Parser *p)
     }
     _res = NULL;
   done:
-    D(p->level--);
+    p->level--;
     return _res;
 }
 
@@ -29022,9 +30124,12 @@ _gather_128_rule(Parser *p)
 static asdl_seq *
 _loop0_131_rule(Parser *p)
 {
-    D(p->level++);
+    if (p->level++ == MAXSTACK) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+    }
     if (p->error_indicator) {
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     void *_res = NULL;
@@ -29034,14 +30139,14 @@ _loop0_131_rule(Parser *p)
     if (!_children) {
         p->error_indicator = 1;
         PyErr_NoMemory();
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     Py_ssize_t _children_capacity = 1;
     Py_ssize_t _n = 0;
     { // ',' kwarg_or_starred
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> _loop0_131[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "',' kwarg_or_starred"));
@@ -29057,7 +30162,7 @@ _loop0_131_rule(Parser *p)
             if (_res == NULL && PyErr_Occurred()) {
                 p->error_indicator = 1;
                 PyMem_Free(_children);
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             if (_n == _children_capacity) {
@@ -29066,7 +30171,7 @@ _loop0_131_rule(Parser *p)
                 if (!_new_children) {
                     p->error_indicator = 1;
                     PyErr_NoMemory();
-                    D(p->level--);
+                    p->level--;
                     return NULL;
                 }
                 _children = _new_children;
@@ -29083,13 +30188,13 @@ _loop0_131_rule(Parser *p)
         PyMem_Free(_children);
         p->error_indicator = 1;
         PyErr_NoMemory();
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     for (int i = 0; i < _n; i++) asdl_seq_SET_UNTYPED(_seq, i, _children[i]);
     PyMem_Free(_children);
     _PyPegen_insert_memo(p, _start_mark, _loop0_131_type, _seq);
-    D(p->level--);
+    p->level--;
     return _seq;
 }
 
@@ -29097,16 +30202,19 @@ _loop0_131_rule(Parser *p)
 static asdl_seq *
 _gather_130_rule(Parser *p)
 {
-    D(p->level++);
+    if (p->level++ == MAXSTACK) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+    }
     if (p->error_indicator) {
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     asdl_seq * _res = NULL;
     int _mark = p->mark;
     { // kwarg_or_starred _loop0_131
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> _gather_130[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "kwarg_or_starred _loop0_131"));
@@ -29128,7 +30236,7 @@ _gather_130_rule(Parser *p)
     }
     _res = NULL;
   done:
-    D(p->level--);
+    p->level--;
     return _res;
 }
 
@@ -29136,9 +30244,12 @@ _gather_130_rule(Parser *p)
 static asdl_seq *
 _loop0_133_rule(Parser *p)
 {
-    D(p->level++);
+    if (p->level++ == MAXSTACK) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+    }
     if (p->error_indicator) {
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     void *_res = NULL;
@@ -29148,14 +30259,14 @@ _loop0_133_rule(Parser *p)
     if (!_children) {
         p->error_indicator = 1;
         PyErr_NoMemory();
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     Py_ssize_t _children_capacity = 1;
     Py_ssize_t _n = 0;
     { // ',' kwarg_or_double_starred
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> _loop0_133[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "',' kwarg_or_double_starred"));
@@ -29171,7 +30282,7 @@ _loop0_133_rule(Parser *p)
             if (_res == NULL && PyErr_Occurred()) {
                 p->error_indicator = 1;
                 PyMem_Free(_children);
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             if (_n == _children_capacity) {
@@ -29180,7 +30291,7 @@ _loop0_133_rule(Parser *p)
                 if (!_new_children) {
                     p->error_indicator = 1;
                     PyErr_NoMemory();
-                    D(p->level--);
+                    p->level--;
                     return NULL;
                 }
                 _children = _new_children;
@@ -29197,13 +30308,13 @@ _loop0_133_rule(Parser *p)
         PyMem_Free(_children);
         p->error_indicator = 1;
         PyErr_NoMemory();
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     for (int i = 0; i < _n; i++) asdl_seq_SET_UNTYPED(_seq, i, _children[i]);
     PyMem_Free(_children);
     _PyPegen_insert_memo(p, _start_mark, _loop0_133_type, _seq);
-    D(p->level--);
+    p->level--;
     return _seq;
 }
 
@@ -29211,16 +30322,19 @@ _loop0_133_rule(Parser *p)
 static asdl_seq *
 _gather_132_rule(Parser *p)
 {
-    D(p->level++);
+    if (p->level++ == MAXSTACK) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+    }
     if (p->error_indicator) {
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     asdl_seq * _res = NULL;
     int _mark = p->mark;
     { // kwarg_or_double_starred _loop0_133
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> _gather_132[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "kwarg_or_double_starred _loop0_133"));
@@ -29242,7 +30356,7 @@ _gather_132_rule(Parser *p)
     }
     _res = NULL;
   done:
-    D(p->level--);
+    p->level--;
     return _res;
 }
 
@@ -29250,9 +30364,12 @@ _gather_132_rule(Parser *p)
 static asdl_seq *
 _loop0_134_rule(Parser *p)
 {
-    D(p->level++);
+    if (p->level++ == MAXSTACK) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+    }
     if (p->error_indicator) {
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     void *_res = NULL;
@@ -29262,14 +30379,14 @@ _loop0_134_rule(Parser *p)
     if (!_children) {
         p->error_indicator = 1;
         PyErr_NoMemory();
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     Py_ssize_t _children_capacity = 1;
     Py_ssize_t _n = 0;
     { // (',' star_target)
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> _loop0_134[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "(',' star_target)"));
@@ -29285,7 +30402,7 @@ _loop0_134_rule(Parser *p)
                 if (!_new_children) {
                     p->error_indicator = 1;
                     PyErr_NoMemory();
-                    D(p->level--);
+                    p->level--;
                     return NULL;
                 }
                 _children = _new_children;
@@ -29302,13 +30419,13 @@ _loop0_134_rule(Parser *p)
         PyMem_Free(_children);
         p->error_indicator = 1;
         PyErr_NoMemory();
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     for (int i = 0; i < _n; i++) asdl_seq_SET_UNTYPED(_seq, i, _children[i]);
     PyMem_Free(_children);
     _PyPegen_insert_memo(p, _start_mark, _loop0_134_type, _seq);
-    D(p->level--);
+    p->level--;
     return _seq;
 }
 
@@ -29316,9 +30433,12 @@ _loop0_134_rule(Parser *p)
 static asdl_seq *
 _loop0_136_rule(Parser *p)
 {
-    D(p->level++);
+    if (p->level++ == MAXSTACK) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+    }
     if (p->error_indicator) {
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     void *_res = NULL;
@@ -29328,14 +30448,14 @@ _loop0_136_rule(Parser *p)
     if (!_children) {
         p->error_indicator = 1;
         PyErr_NoMemory();
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     Py_ssize_t _children_capacity = 1;
     Py_ssize_t _n = 0;
     { // ',' star_target
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> _loop0_136[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "',' star_target"));
@@ -29351,7 +30471,7 @@ _loop0_136_rule(Parser *p)
             if (_res == NULL && PyErr_Occurred()) {
                 p->error_indicator = 1;
                 PyMem_Free(_children);
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             if (_n == _children_capacity) {
@@ -29360,7 +30480,7 @@ _loop0_136_rule(Parser *p)
                 if (!_new_children) {
                     p->error_indicator = 1;
                     PyErr_NoMemory();
-                    D(p->level--);
+                    p->level--;
                     return NULL;
                 }
                 _children = _new_children;
@@ -29377,13 +30497,13 @@ _loop0_136_rule(Parser *p)
         PyMem_Free(_children);
         p->error_indicator = 1;
         PyErr_NoMemory();
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     for (int i = 0; i < _n; i++) asdl_seq_SET_UNTYPED(_seq, i, _children[i]);
     PyMem_Free(_children);
     _PyPegen_insert_memo(p, _start_mark, _loop0_136_type, _seq);
-    D(p->level--);
+    p->level--;
     return _seq;
 }
 
@@ -29391,16 +30511,19 @@ _loop0_136_rule(Parser *p)
 static asdl_seq *
 _gather_135_rule(Parser *p)
 {
-    D(p->level++);
+    if (p->level++ == MAXSTACK) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+    }
     if (p->error_indicator) {
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     asdl_seq * _res = NULL;
     int _mark = p->mark;
     { // star_target _loop0_136
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> _gather_135[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "star_target _loop0_136"));
@@ -29422,7 +30545,7 @@ _gather_135_rule(Parser *p)
     }
     _res = NULL;
   done:
-    D(p->level--);
+    p->level--;
     return _res;
 }
 
@@ -29430,9 +30553,12 @@ _gather_135_rule(Parser *p)
 static asdl_seq *
 _loop1_137_rule(Parser *p)
 {
-    D(p->level++);
+    if (p->level++ == MAXSTACK) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+    }
     if (p->error_indicator) {
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     void *_res = NULL;
@@ -29442,14 +30568,14 @@ _loop1_137_rule(Parser *p)
     if (!_children) {
         p->error_indicator = 1;
         PyErr_NoMemory();
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     Py_ssize_t _children_capacity = 1;
     Py_ssize_t _n = 0;
     { // (',' star_target)
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> _loop1_137[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "(',' star_target)"));
@@ -29465,7 +30591,7 @@ _loop1_137_rule(Parser *p)
                 if (!_new_children) {
                     p->error_indicator = 1;
                     PyErr_NoMemory();
-                    D(p->level--);
+                    p->level--;
                     return NULL;
                 }
                 _children = _new_children;
@@ -29479,7 +30605,7 @@ _loop1_137_rule(Parser *p)
     }
     if (_n == 0 || p->error_indicator) {
         PyMem_Free(_children);
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     asdl_seq *_seq = (asdl_seq*)_Py_asdl_generic_seq_new(_n, p->arena);
@@ -29487,13 +30613,13 @@ _loop1_137_rule(Parser *p)
         PyMem_Free(_children);
         p->error_indicator = 1;
         PyErr_NoMemory();
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     for (int i = 0; i < _n; i++) asdl_seq_SET_UNTYPED(_seq, i, _children[i]);
     PyMem_Free(_children);
     _PyPegen_insert_memo(p, _start_mark, _loop1_137_type, _seq);
-    D(p->level--);
+    p->level--;
     return _seq;
 }
 
@@ -29501,16 +30627,19 @@ _loop1_137_rule(Parser *p)
 static void *
 _tmp_138_rule(Parser *p)
 {
-    D(p->level++);
+    if (p->level++ == MAXSTACK) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+    }
     if (p->error_indicator) {
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     void * _res = NULL;
     int _mark = p->mark;
     { // !'*' star_target
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> _tmp_138[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "!'*' star_target"));
@@ -29531,7 +30660,7 @@ _tmp_138_rule(Parser *p)
     }
     _res = NULL;
   done:
-    D(p->level--);
+    p->level--;
     return _res;
 }
 
@@ -29539,9 +30668,12 @@ _tmp_138_rule(Parser *p)
 static asdl_seq *
 _loop0_140_rule(Parser *p)
 {
-    D(p->level++);
+    if (p->level++ == MAXSTACK) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+    }
     if (p->error_indicator) {
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     void *_res = NULL;
@@ -29551,14 +30683,14 @@ _loop0_140_rule(Parser *p)
     if (!_children) {
         p->error_indicator = 1;
         PyErr_NoMemory();
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     Py_ssize_t _children_capacity = 1;
     Py_ssize_t _n = 0;
     { // ',' del_target
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> _loop0_140[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "',' del_target"));
@@ -29574,7 +30706,7 @@ _loop0_140_rule(Parser *p)
             if (_res == NULL && PyErr_Occurred()) {
                 p->error_indicator = 1;
                 PyMem_Free(_children);
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             if (_n == _children_capacity) {
@@ -29583,7 +30715,7 @@ _loop0_140_rule(Parser *p)
                 if (!_new_children) {
                     p->error_indicator = 1;
                     PyErr_NoMemory();
-                    D(p->level--);
+                    p->level--;
                     return NULL;
                 }
                 _children = _new_children;
@@ -29600,13 +30732,13 @@ _loop0_140_rule(Parser *p)
         PyMem_Free(_children);
         p->error_indicator = 1;
         PyErr_NoMemory();
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     for (int i = 0; i < _n; i++) asdl_seq_SET_UNTYPED(_seq, i, _children[i]);
     PyMem_Free(_children);
     _PyPegen_insert_memo(p, _start_mark, _loop0_140_type, _seq);
-    D(p->level--);
+    p->level--;
     return _seq;
 }
 
@@ -29614,16 +30746,19 @@ _loop0_140_rule(Parser *p)
 static asdl_seq *
 _gather_139_rule(Parser *p)
 {
-    D(p->level++);
+    if (p->level++ == MAXSTACK) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+    }
     if (p->error_indicator) {
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     asdl_seq * _res = NULL;
     int _mark = p->mark;
     { // del_target _loop0_140
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> _gather_139[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "del_target _loop0_140"));
@@ -29645,7 +30780,7 @@ _gather_139_rule(Parser *p)
     }
     _res = NULL;
   done:
-    D(p->level--);
+    p->level--;
     return _res;
 }
 
@@ -29653,16 +30788,19 @@ _gather_139_rule(Parser *p)
 static void *
 _tmp_141_rule(Parser *p)
 {
-    D(p->level++);
+    if (p->level++ == MAXSTACK) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+    }
     if (p->error_indicator) {
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     void * _res = NULL;
     int _mark = p->mark;
     { // args
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> _tmp_141[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "args"));
@@ -29681,7 +30819,7 @@ _tmp_141_rule(Parser *p)
     }
     { // expression for_if_clauses
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> _tmp_141[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "expression for_if_clauses"));
@@ -29703,7 +30841,7 @@ _tmp_141_rule(Parser *p)
     }
     _res = NULL;
   done:
-    D(p->level--);
+    p->level--;
     return _res;
 }
 
@@ -29711,16 +30849,19 @@ _tmp_141_rule(Parser *p)
 static void *
 _tmp_142_rule(Parser *p)
 {
-    D(p->level++);
+    if (p->level++ == MAXSTACK) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+    }
     if (p->error_indicator) {
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     void * _res = NULL;
     int _mark = p->mark;
     { // 'True'
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> _tmp_142[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'True'"));
@@ -29739,7 +30880,7 @@ _tmp_142_rule(Parser *p)
     }
     { // 'False'
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> _tmp_142[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'False'"));
@@ -29758,7 +30899,7 @@ _tmp_142_rule(Parser *p)
     }
     { // 'None'
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> _tmp_142[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'None'"));
@@ -29777,7 +30918,7 @@ _tmp_142_rule(Parser *p)
     }
     _res = NULL;
   done:
-    D(p->level--);
+    p->level--;
     return _res;
 }
 
@@ -29785,16 +30926,19 @@ _tmp_142_rule(Parser *p)
 static void *
 _tmp_143_rule(Parser *p)
 {
-    D(p->level++);
+    if (p->level++ == MAXSTACK) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+    }
     if (p->error_indicator) {
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     void * _res = NULL;
     int _mark = p->mark;
     { // NAME '='
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> _tmp_143[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "NAME '='"));
@@ -29816,7 +30960,7 @@ _tmp_143_rule(Parser *p)
     }
     _res = NULL;
   done:
-    D(p->level--);
+    p->level--;
     return _res;
 }
 
@@ -29824,16 +30968,19 @@ _tmp_143_rule(Parser *p)
 static void *
 _tmp_144_rule(Parser *p)
 {
-    D(p->level++);
+    if (p->level++ == MAXSTACK) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+    }
     if (p->error_indicator) {
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     void * _res = NULL;
     int _mark = p->mark;
     { // NAME STRING
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> _tmp_144[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "NAME STRING"));
@@ -29855,7 +31002,7 @@ _tmp_144_rule(Parser *p)
     }
     { // SOFT_KEYWORD
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> _tmp_144[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "SOFT_KEYWORD"));
@@ -29874,7 +31021,7 @@ _tmp_144_rule(Parser *p)
     }
     _res = NULL;
   done:
-    D(p->level--);
+    p->level--;
     return _res;
 }
 
@@ -29882,16 +31029,19 @@ _tmp_144_rule(Parser *p)
 static void *
 _tmp_145_rule(Parser *p)
 {
-    D(p->level++);
+    if (p->level++ == MAXSTACK) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+    }
     if (p->error_indicator) {
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     void * _res = NULL;
     int _mark = p->mark;
     { // 'else'
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> _tmp_145[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'else'"));
@@ -29910,7 +31060,7 @@ _tmp_145_rule(Parser *p)
     }
     { // ':'
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> _tmp_145[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "':'"));
@@ -29929,7 +31079,7 @@ _tmp_145_rule(Parser *p)
     }
     _res = NULL;
   done:
-    D(p->level--);
+    p->level--;
     return _res;
 }
 
@@ -29937,16 +31087,19 @@ _tmp_145_rule(Parser *p)
 static void *
 _tmp_146_rule(Parser *p)
 {
-    D(p->level++);
+    if (p->level++ == MAXSTACK) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+    }
     if (p->error_indicator) {
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     void * _res = NULL;
     int _mark = p->mark;
     { // '='
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> _tmp_146[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'='"));
@@ -29965,7 +31118,7 @@ _tmp_146_rule(Parser *p)
     }
     { // ':='
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> _tmp_146[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "':='"));
@@ -29984,7 +31137,7 @@ _tmp_146_rule(Parser *p)
     }
     _res = NULL;
   done:
-    D(p->level--);
+    p->level--;
     return _res;
 }
 
@@ -29992,16 +31145,19 @@ _tmp_146_rule(Parser *p)
 static void *
 _tmp_147_rule(Parser *p)
 {
-    D(p->level++);
+    if (p->level++ == MAXSTACK) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+    }
     if (p->error_indicator) {
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     void * _res = NULL;
     int _mark = p->mark;
     { // list
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> _tmp_147[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "list"));
@@ -30020,7 +31176,7 @@ _tmp_147_rule(Parser *p)
     }
     { // tuple
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> _tmp_147[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "tuple"));
@@ -30039,7 +31195,7 @@ _tmp_147_rule(Parser *p)
     }
     { // genexp
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> _tmp_147[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "genexp"));
@@ -30058,7 +31214,7 @@ _tmp_147_rule(Parser *p)
     }
     { // 'True'
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> _tmp_147[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'True'"));
@@ -30077,7 +31233,7 @@ _tmp_147_rule(Parser *p)
     }
     { // 'None'
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> _tmp_147[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'None'"));
@@ -30096,7 +31252,7 @@ _tmp_147_rule(Parser *p)
     }
     { // 'False'
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> _tmp_147[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'False'"));
@@ -30115,7 +31271,7 @@ _tmp_147_rule(Parser *p)
     }
     _res = NULL;
   done:
-    D(p->level--);
+    p->level--;
     return _res;
 }
 
@@ -30123,16 +31279,19 @@ _tmp_147_rule(Parser *p)
 static void *
 _tmp_148_rule(Parser *p)
 {
-    D(p->level++);
+    if (p->level++ == MAXSTACK) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+    }
     if (p->error_indicator) {
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     void * _res = NULL;
     int _mark = p->mark;
     { // '='
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> _tmp_148[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'='"));
@@ -30151,7 +31310,7 @@ _tmp_148_rule(Parser *p)
     }
     { // ':='
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> _tmp_148[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "':='"));
@@ -30170,7 +31329,7 @@ _tmp_148_rule(Parser *p)
     }
     _res = NULL;
   done:
-    D(p->level--);
+    p->level--;
     return _res;
 }
 
@@ -30178,9 +31337,12 @@ _tmp_148_rule(Parser *p)
 static asdl_seq *
 _loop0_149_rule(Parser *p)
 {
-    D(p->level++);
+    if (p->level++ == MAXSTACK) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+    }
     if (p->error_indicator) {
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     void *_res = NULL;
@@ -30190,14 +31352,14 @@ _loop0_149_rule(Parser *p)
     if (!_children) {
         p->error_indicator = 1;
         PyErr_NoMemory();
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     Py_ssize_t _children_capacity = 1;
     Py_ssize_t _n = 0;
     { // star_named_expressions
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> _loop0_149[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "star_named_expressions"));
@@ -30213,7 +31375,7 @@ _loop0_149_rule(Parser *p)
                 if (!_new_children) {
                     p->error_indicator = 1;
                     PyErr_NoMemory();
-                    D(p->level--);
+                    p->level--;
                     return NULL;
                 }
                 _children = _new_children;
@@ -30230,13 +31392,13 @@ _loop0_149_rule(Parser *p)
         PyMem_Free(_children);
         p->error_indicator = 1;
         PyErr_NoMemory();
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     for (int i = 0; i < _n; i++) asdl_seq_SET_UNTYPED(_seq, i, _children[i]);
     PyMem_Free(_children);
     _PyPegen_insert_memo(p, _start_mark, _loop0_149_type, _seq);
-    D(p->level--);
+    p->level--;
     return _seq;
 }
 
@@ -30244,9 +31406,12 @@ _loop0_149_rule(Parser *p)
 static asdl_seq *
 _loop0_150_rule(Parser *p)
 {
-    D(p->level++);
+    if (p->level++ == MAXSTACK) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+    }
     if (p->error_indicator) {
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     void *_res = NULL;
@@ -30256,14 +31421,14 @@ _loop0_150_rule(Parser *p)
     if (!_children) {
         p->error_indicator = 1;
         PyErr_NoMemory();
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     Py_ssize_t _children_capacity = 1;
     Py_ssize_t _n = 0;
     { // (star_targets '=')
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> _loop0_150[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "(star_targets '=')"));
@@ -30279,7 +31444,7 @@ _loop0_150_rule(Parser *p)
                 if (!_new_children) {
                     p->error_indicator = 1;
                     PyErr_NoMemory();
-                    D(p->level--);
+                    p->level--;
                     return NULL;
                 }
                 _children = _new_children;
@@ -30296,13 +31461,13 @@ _loop0_150_rule(Parser *p)
         PyMem_Free(_children);
         p->error_indicator = 1;
         PyErr_NoMemory();
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     for (int i = 0; i < _n; i++) asdl_seq_SET_UNTYPED(_seq, i, _children[i]);
     PyMem_Free(_children);
     _PyPegen_insert_memo(p, _start_mark, _loop0_150_type, _seq);
-    D(p->level--);
+    p->level--;
     return _seq;
 }
 
@@ -30310,9 +31475,12 @@ _loop0_150_rule(Parser *p)
 static asdl_seq *
 _loop0_151_rule(Parser *p)
 {
-    D(p->level++);
+    if (p->level++ == MAXSTACK) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+    }
     if (p->error_indicator) {
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     void *_res = NULL;
@@ -30322,14 +31490,14 @@ _loop0_151_rule(Parser *p)
     if (!_children) {
         p->error_indicator = 1;
         PyErr_NoMemory();
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     Py_ssize_t _children_capacity = 1;
     Py_ssize_t _n = 0;
     { // (star_targets '=')
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> _loop0_151[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "(star_targets '=')"));
@@ -30345,7 +31513,7 @@ _loop0_151_rule(Parser *p)
                 if (!_new_children) {
                     p->error_indicator = 1;
                     PyErr_NoMemory();
-                    D(p->level--);
+                    p->level--;
                     return NULL;
                 }
                 _children = _new_children;
@@ -30362,13 +31530,13 @@ _loop0_151_rule(Parser *p)
         PyMem_Free(_children);
         p->error_indicator = 1;
         PyErr_NoMemory();
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     for (int i = 0; i < _n; i++) asdl_seq_SET_UNTYPED(_seq, i, _children[i]);
     PyMem_Free(_children);
     _PyPegen_insert_memo(p, _start_mark, _loop0_151_type, _seq);
-    D(p->level--);
+    p->level--;
     return _seq;
 }
 
@@ -30376,16 +31544,19 @@ _loop0_151_rule(Parser *p)
 static void *
 _tmp_152_rule(Parser *p)
 {
-    D(p->level++);
+    if (p->level++ == MAXSTACK) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+    }
     if (p->error_indicator) {
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     void * _res = NULL;
     int _mark = p->mark;
     { // yield_expr
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> _tmp_152[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "yield_expr"));
@@ -30404,7 +31575,7 @@ _tmp_152_rule(Parser *p)
     }
     { // star_expressions
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> _tmp_152[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "star_expressions"));
@@ -30423,7 +31594,7 @@ _tmp_152_rule(Parser *p)
     }
     _res = NULL;
   done:
-    D(p->level--);
+    p->level--;
     return _res;
 }
 
@@ -30431,16 +31602,19 @@ _tmp_152_rule(Parser *p)
 static void *
 _tmp_153_rule(Parser *p)
 {
-    D(p->level++);
+    if (p->level++ == MAXSTACK) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+    }
     if (p->error_indicator) {
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     void * _res = NULL;
     int _mark = p->mark;
     { // '['
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> _tmp_153[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'['"));
@@ -30459,7 +31633,7 @@ _tmp_153_rule(Parser *p)
     }
     { // '('
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> _tmp_153[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'('"));
@@ -30478,7 +31652,7 @@ _tmp_153_rule(Parser *p)
     }
     { // '{'
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> _tmp_153[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'{'"));
@@ -30497,7 +31671,7 @@ _tmp_153_rule(Parser *p)
     }
     _res = NULL;
   done:
-    D(p->level--);
+    p->level--;
     return _res;
 }
 
@@ -30505,16 +31679,19 @@ _tmp_153_rule(Parser *p)
 static void *
 _tmp_154_rule(Parser *p)
 {
-    D(p->level++);
+    if (p->level++ == MAXSTACK) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+    }
     if (p->error_indicator) {
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     void * _res = NULL;
     int _mark = p->mark;
     { // '['
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> _tmp_154[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'['"));
@@ -30533,7 +31710,7 @@ _tmp_154_rule(Parser *p)
     }
     { // '{'
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> _tmp_154[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'{'"));
@@ -30552,7 +31729,7 @@ _tmp_154_rule(Parser *p)
     }
     _res = NULL;
   done:
-    D(p->level--);
+    p->level--;
     return _res;
 }
 
@@ -30560,16 +31737,19 @@ _tmp_154_rule(Parser *p)
 static void *
 _tmp_155_rule(Parser *p)
 {
-    D(p->level++);
+    if (p->level++ == MAXSTACK) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+    }
     if (p->error_indicator) {
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     void * _res = NULL;
     int _mark = p->mark;
     { // '['
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> _tmp_155[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'['"));
@@ -30588,7 +31768,7 @@ _tmp_155_rule(Parser *p)
     }
     { // '{'
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> _tmp_155[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'{'"));
@@ -30607,7 +31787,7 @@ _tmp_155_rule(Parser *p)
     }
     _res = NULL;
   done:
-    D(p->level--);
+    p->level--;
     return _res;
 }
 
@@ -30615,9 +31795,12 @@ _tmp_155_rule(Parser *p)
 static asdl_seq *
 _loop0_156_rule(Parser *p)
 {
-    D(p->level++);
+    if (p->level++ == MAXSTACK) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+    }
     if (p->error_indicator) {
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     void *_res = NULL;
@@ -30627,14 +31810,14 @@ _loop0_156_rule(Parser *p)
     if (!_children) {
         p->error_indicator = 1;
         PyErr_NoMemory();
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     Py_ssize_t _children_capacity = 1;
     Py_ssize_t _n = 0;
     { // param_no_default
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> _loop0_156[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "param_no_default"));
@@ -30650,7 +31833,7 @@ _loop0_156_rule(Parser *p)
                 if (!_new_children) {
                     p->error_indicator = 1;
                     PyErr_NoMemory();
-                    D(p->level--);
+                    p->level--;
                     return NULL;
                 }
                 _children = _new_children;
@@ -30667,13 +31850,13 @@ _loop0_156_rule(Parser *p)
         PyMem_Free(_children);
         p->error_indicator = 1;
         PyErr_NoMemory();
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     for (int i = 0; i < _n; i++) asdl_seq_SET_UNTYPED(_seq, i, _children[i]);
     PyMem_Free(_children);
     _PyPegen_insert_memo(p, _start_mark, _loop0_156_type, _seq);
-    D(p->level--);
+    p->level--;
     return _seq;
 }
 
@@ -30681,9 +31864,12 @@ _loop0_156_rule(Parser *p)
 static asdl_seq *
 _loop1_157_rule(Parser *p)
 {
-    D(p->level++);
+    if (p->level++ == MAXSTACK) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+    }
     if (p->error_indicator) {
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     void *_res = NULL;
@@ -30693,14 +31879,14 @@ _loop1_157_rule(Parser *p)
     if (!_children) {
         p->error_indicator = 1;
         PyErr_NoMemory();
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     Py_ssize_t _children_capacity = 1;
     Py_ssize_t _n = 0;
     { // param_with_default
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> _loop1_157[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "param_with_default"));
@@ -30716,7 +31902,7 @@ _loop1_157_rule(Parser *p)
                 if (!_new_children) {
                     p->error_indicator = 1;
                     PyErr_NoMemory();
-                    D(p->level--);
+                    p->level--;
                     return NULL;
                 }
                 _children = _new_children;
@@ -30730,7 +31916,7 @@ _loop1_157_rule(Parser *p)
     }
     if (_n == 0 || p->error_indicator) {
         PyMem_Free(_children);
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     asdl_seq *_seq = (asdl_seq*)_Py_asdl_generic_seq_new(_n, p->arena);
@@ -30738,13 +31924,13 @@ _loop1_157_rule(Parser *p)
         PyMem_Free(_children);
         p->error_indicator = 1;
         PyErr_NoMemory();
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     for (int i = 0; i < _n; i++) asdl_seq_SET_UNTYPED(_seq, i, _children[i]);
     PyMem_Free(_children);
     _PyPegen_insert_memo(p, _start_mark, _loop1_157_type, _seq);
-    D(p->level--);
+    p->level--;
     return _seq;
 }
 
@@ -30752,9 +31938,12 @@ _loop1_157_rule(Parser *p)
 static asdl_seq *
 _loop0_158_rule(Parser *p)
 {
-    D(p->level++);
+    if (p->level++ == MAXSTACK) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+    }
     if (p->error_indicator) {
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     void *_res = NULL;
@@ -30764,14 +31953,14 @@ _loop0_158_rule(Parser *p)
     if (!_children) {
         p->error_indicator = 1;
         PyErr_NoMemory();
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     Py_ssize_t _children_capacity = 1;
     Py_ssize_t _n = 0;
     { // lambda_param_no_default
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> _loop0_158[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "lambda_param_no_default"));
@@ -30787,7 +31976,7 @@ _loop0_158_rule(Parser *p)
                 if (!_new_children) {
                     p->error_indicator = 1;
                     PyErr_NoMemory();
-                    D(p->level--);
+                    p->level--;
                     return NULL;
                 }
                 _children = _new_children;
@@ -30804,13 +31993,13 @@ _loop0_158_rule(Parser *p)
         PyMem_Free(_children);
         p->error_indicator = 1;
         PyErr_NoMemory();
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     for (int i = 0; i < _n; i++) asdl_seq_SET_UNTYPED(_seq, i, _children[i]);
     PyMem_Free(_children);
     _PyPegen_insert_memo(p, _start_mark, _loop0_158_type, _seq);
-    D(p->level--);
+    p->level--;
     return _seq;
 }
 
@@ -30818,9 +32007,12 @@ _loop0_158_rule(Parser *p)
 static asdl_seq *
 _loop1_159_rule(Parser *p)
 {
-    D(p->level++);
+    if (p->level++ == MAXSTACK) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+    }
     if (p->error_indicator) {
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     void *_res = NULL;
@@ -30830,14 +32022,14 @@ _loop1_159_rule(Parser *p)
     if (!_children) {
         p->error_indicator = 1;
         PyErr_NoMemory();
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     Py_ssize_t _children_capacity = 1;
     Py_ssize_t _n = 0;
     { // lambda_param_with_default
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> _loop1_159[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "lambda_param_with_default"));
@@ -30853,7 +32045,7 @@ _loop1_159_rule(Parser *p)
                 if (!_new_children) {
                     p->error_indicator = 1;
                     PyErr_NoMemory();
-                    D(p->level--);
+                    p->level--;
                     return NULL;
                 }
                 _children = _new_children;
@@ -30867,7 +32059,7 @@ _loop1_159_rule(Parser *p)
     }
     if (_n == 0 || p->error_indicator) {
         PyMem_Free(_children);
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     asdl_seq *_seq = (asdl_seq*)_Py_asdl_generic_seq_new(_n, p->arena);
@@ -30875,13 +32067,13 @@ _loop1_159_rule(Parser *p)
         PyMem_Free(_children);
         p->error_indicator = 1;
         PyErr_NoMemory();
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     for (int i = 0; i < _n; i++) asdl_seq_SET_UNTYPED(_seq, i, _children[i]);
     PyMem_Free(_children);
     _PyPegen_insert_memo(p, _start_mark, _loop1_159_type, _seq);
-    D(p->level--);
+    p->level--;
     return _seq;
 }
 
@@ -30889,16 +32081,19 @@ _loop1_159_rule(Parser *p)
 static void *
 _tmp_160_rule(Parser *p)
 {
-    D(p->level++);
+    if (p->level++ == MAXSTACK) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+    }
     if (p->error_indicator) {
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     void * _res = NULL;
     int _mark = p->mark;
     { // ')'
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> _tmp_160[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "')'"));
@@ -30917,7 +32112,7 @@ _tmp_160_rule(Parser *p)
     }
     { // ',' (')' | '**')
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> _tmp_160[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "',' (')' | '**')"));
@@ -30939,7 +32134,7 @@ _tmp_160_rule(Parser *p)
     }
     _res = NULL;
   done:
-    D(p->level--);
+    p->level--;
     return _res;
 }
 
@@ -30947,16 +32142,19 @@ _tmp_160_rule(Parser *p)
 static void *
 _tmp_161_rule(Parser *p)
 {
-    D(p->level++);
+    if (p->level++ == MAXSTACK) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+    }
     if (p->error_indicator) {
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     void * _res = NULL;
     int _mark = p->mark;
     { // ':'
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> _tmp_161[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "':'"));
@@ -30975,7 +32173,7 @@ _tmp_161_rule(Parser *p)
     }
     { // ',' (':' | '**')
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> _tmp_161[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "',' (':' | '**')"));
@@ -30997,7 +32195,7 @@ _tmp_161_rule(Parser *p)
     }
     _res = NULL;
   done:
-    D(p->level--);
+    p->level--;
     return _res;
 }
 
@@ -31005,16 +32203,19 @@ _tmp_161_rule(Parser *p)
 static void *
 _tmp_162_rule(Parser *p)
 {
-    D(p->level++);
+    if (p->level++ == MAXSTACK) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+    }
     if (p->error_indicator) {
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     void * _res = NULL;
     int _mark = p->mark;
     { // ','
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> _tmp_162[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "','"));
@@ -31033,7 +32234,7 @@ _tmp_162_rule(Parser *p)
     }
     { // ')'
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> _tmp_162[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "')'"));
@@ -31052,7 +32253,7 @@ _tmp_162_rule(Parser *p)
     }
     { // ':'
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> _tmp_162[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "':'"));
@@ -31071,7 +32272,7 @@ _tmp_162_rule(Parser *p)
     }
     _res = NULL;
   done:
-    D(p->level--);
+    p->level--;
     return _res;
 }
 
@@ -31079,9 +32280,12 @@ _tmp_162_rule(Parser *p)
 static asdl_seq *
 _loop0_164_rule(Parser *p)
 {
-    D(p->level++);
+    if (p->level++ == MAXSTACK) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+    }
     if (p->error_indicator) {
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     void *_res = NULL;
@@ -31091,14 +32295,14 @@ _loop0_164_rule(Parser *p)
     if (!_children) {
         p->error_indicator = 1;
         PyErr_NoMemory();
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     Py_ssize_t _children_capacity = 1;
     Py_ssize_t _n = 0;
     { // ',' (expression ['as' star_target])
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> _loop0_164[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "',' (expression ['as' star_target])"));
@@ -31114,7 +32318,7 @@ _loop0_164_rule(Parser *p)
             if (_res == NULL && PyErr_Occurred()) {
                 p->error_indicator = 1;
                 PyMem_Free(_children);
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             if (_n == _children_capacity) {
@@ -31123,7 +32327,7 @@ _loop0_164_rule(Parser *p)
                 if (!_new_children) {
                     p->error_indicator = 1;
                     PyErr_NoMemory();
-                    D(p->level--);
+                    p->level--;
                     return NULL;
                 }
                 _children = _new_children;
@@ -31140,13 +32344,13 @@ _loop0_164_rule(Parser *p)
         PyMem_Free(_children);
         p->error_indicator = 1;
         PyErr_NoMemory();
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     for (int i = 0; i < _n; i++) asdl_seq_SET_UNTYPED(_seq, i, _children[i]);
     PyMem_Free(_children);
     _PyPegen_insert_memo(p, _start_mark, _loop0_164_type, _seq);
-    D(p->level--);
+    p->level--;
     return _seq;
 }
 
@@ -31154,16 +32358,19 @@ _loop0_164_rule(Parser *p)
 static asdl_seq *
 _gather_163_rule(Parser *p)
 {
-    D(p->level++);
+    if (p->level++ == MAXSTACK) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+    }
     if (p->error_indicator) {
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     asdl_seq * _res = NULL;
     int _mark = p->mark;
     { // (expression ['as' star_target]) _loop0_164
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> _gather_163[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "(expression ['as' star_target]) _loop0_164"));
@@ -31185,7 +32392,7 @@ _gather_163_rule(Parser *p)
     }
     _res = NULL;
   done:
-    D(p->level--);
+    p->level--;
     return _res;
 }
 
@@ -31193,9 +32400,12 @@ _gather_163_rule(Parser *p)
 static asdl_seq *
 _loop0_166_rule(Parser *p)
 {
-    D(p->level++);
+    if (p->level++ == MAXSTACK) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+    }
     if (p->error_indicator) {
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     void *_res = NULL;
@@ -31205,14 +32415,14 @@ _loop0_166_rule(Parser *p)
     if (!_children) {
         p->error_indicator = 1;
         PyErr_NoMemory();
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     Py_ssize_t _children_capacity = 1;
     Py_ssize_t _n = 0;
     { // ',' (expressions ['as' star_target])
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> _loop0_166[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "',' (expressions ['as' star_target])"));
@@ -31228,7 +32438,7 @@ _loop0_166_rule(Parser *p)
             if (_res == NULL && PyErr_Occurred()) {
                 p->error_indicator = 1;
                 PyMem_Free(_children);
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             if (_n == _children_capacity) {
@@ -31237,7 +32447,7 @@ _loop0_166_rule(Parser *p)
                 if (!_new_children) {
                     p->error_indicator = 1;
                     PyErr_NoMemory();
-                    D(p->level--);
+                    p->level--;
                     return NULL;
                 }
                 _children = _new_children;
@@ -31254,13 +32464,13 @@ _loop0_166_rule(Parser *p)
         PyMem_Free(_children);
         p->error_indicator = 1;
         PyErr_NoMemory();
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     for (int i = 0; i < _n; i++) asdl_seq_SET_UNTYPED(_seq, i, _children[i]);
     PyMem_Free(_children);
     _PyPegen_insert_memo(p, _start_mark, _loop0_166_type, _seq);
-    D(p->level--);
+    p->level--;
     return _seq;
 }
 
@@ -31268,16 +32478,19 @@ _loop0_166_rule(Parser *p)
 static asdl_seq *
 _gather_165_rule(Parser *p)
 {
-    D(p->level++);
+    if (p->level++ == MAXSTACK) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+    }
     if (p->error_indicator) {
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     asdl_seq * _res = NULL;
     int _mark = p->mark;
     { // (expressions ['as' star_target]) _loop0_166
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> _gather_165[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "(expressions ['as' star_target]) _loop0_166"));
@@ -31299,7 +32512,7 @@ _gather_165_rule(Parser *p)
     }
     _res = NULL;
   done:
-    D(p->level--);
+    p->level--;
     return _res;
 }
 
@@ -31307,9 +32520,12 @@ _gather_165_rule(Parser *p)
 static asdl_seq *
 _loop0_168_rule(Parser *p)
 {
-    D(p->level++);
+    if (p->level++ == MAXSTACK) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+    }
     if (p->error_indicator) {
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     void *_res = NULL;
@@ -31319,14 +32535,14 @@ _loop0_168_rule(Parser *p)
     if (!_children) {
         p->error_indicator = 1;
         PyErr_NoMemory();
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     Py_ssize_t _children_capacity = 1;
     Py_ssize_t _n = 0;
     { // ',' (expression ['as' star_target])
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> _loop0_168[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "',' (expression ['as' star_target])"));
@@ -31342,7 +32558,7 @@ _loop0_168_rule(Parser *p)
             if (_res == NULL && PyErr_Occurred()) {
                 p->error_indicator = 1;
                 PyMem_Free(_children);
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             if (_n == _children_capacity) {
@@ -31351,7 +32567,7 @@ _loop0_168_rule(Parser *p)
                 if (!_new_children) {
                     p->error_indicator = 1;
                     PyErr_NoMemory();
-                    D(p->level--);
+                    p->level--;
                     return NULL;
                 }
                 _children = _new_children;
@@ -31368,13 +32584,13 @@ _loop0_168_rule(Parser *p)
         PyMem_Free(_children);
         p->error_indicator = 1;
         PyErr_NoMemory();
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     for (int i = 0; i < _n; i++) asdl_seq_SET_UNTYPED(_seq, i, _children[i]);
     PyMem_Free(_children);
     _PyPegen_insert_memo(p, _start_mark, _loop0_168_type, _seq);
-    D(p->level--);
+    p->level--;
     return _seq;
 }
 
@@ -31382,16 +32598,19 @@ _loop0_168_rule(Parser *p)
 static asdl_seq *
 _gather_167_rule(Parser *p)
 {
-    D(p->level++);
+    if (p->level++ == MAXSTACK) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+    }
     if (p->error_indicator) {
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     asdl_seq * _res = NULL;
     int _mark = p->mark;
     { // (expression ['as' star_target]) _loop0_168
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> _gather_167[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "(expression ['as' star_target]) _loop0_168"));
@@ -31413,7 +32632,7 @@ _gather_167_rule(Parser *p)
     }
     _res = NULL;
   done:
-    D(p->level--);
+    p->level--;
     return _res;
 }
 
@@ -31421,9 +32640,12 @@ _gather_167_rule(Parser *p)
 static asdl_seq *
 _loop0_170_rule(Parser *p)
 {
-    D(p->level++);
+    if (p->level++ == MAXSTACK) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+    }
     if (p->error_indicator) {
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     void *_res = NULL;
@@ -31433,14 +32655,14 @@ _loop0_170_rule(Parser *p)
     if (!_children) {
         p->error_indicator = 1;
         PyErr_NoMemory();
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     Py_ssize_t _children_capacity = 1;
     Py_ssize_t _n = 0;
     { // ',' (expressions ['as' star_target])
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> _loop0_170[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "',' (expressions ['as' star_target])"));
@@ -31456,7 +32678,7 @@ _loop0_170_rule(Parser *p)
             if (_res == NULL && PyErr_Occurred()) {
                 p->error_indicator = 1;
                 PyMem_Free(_children);
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             if (_n == _children_capacity) {
@@ -31465,7 +32687,7 @@ _loop0_170_rule(Parser *p)
                 if (!_new_children) {
                     p->error_indicator = 1;
                     PyErr_NoMemory();
-                    D(p->level--);
+                    p->level--;
                     return NULL;
                 }
                 _children = _new_children;
@@ -31482,13 +32704,13 @@ _loop0_170_rule(Parser *p)
         PyMem_Free(_children);
         p->error_indicator = 1;
         PyErr_NoMemory();
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     for (int i = 0; i < _n; i++) asdl_seq_SET_UNTYPED(_seq, i, _children[i]);
     PyMem_Free(_children);
     _PyPegen_insert_memo(p, _start_mark, _loop0_170_type, _seq);
-    D(p->level--);
+    p->level--;
     return _seq;
 }
 
@@ -31496,16 +32718,19 @@ _loop0_170_rule(Parser *p)
 static asdl_seq *
 _gather_169_rule(Parser *p)
 {
-    D(p->level++);
+    if (p->level++ == MAXSTACK) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+    }
     if (p->error_indicator) {
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     asdl_seq * _res = NULL;
     int _mark = p->mark;
     { // (expressions ['as' star_target]) _loop0_170
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> _gather_169[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "(expressions ['as' star_target]) _loop0_170"));
@@ -31527,7 +32752,7 @@ _gather_169_rule(Parser *p)
     }
     _res = NULL;
   done:
-    D(p->level--);
+    p->level--;
     return _res;
 }
 
@@ -31535,16 +32760,19 @@ _gather_169_rule(Parser *p)
 static void *
 _tmp_171_rule(Parser *p)
 {
-    D(p->level++);
+    if (p->level++ == MAXSTACK) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+    }
     if (p->error_indicator) {
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     void * _res = NULL;
     int _mark = p->mark;
     { // 'except'
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> _tmp_171[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'except'"));
@@ -31563,7 +32791,7 @@ _tmp_171_rule(Parser *p)
     }
     { // 'finally'
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> _tmp_171[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'finally'"));
@@ -31582,7 +32810,7 @@ _tmp_171_rule(Parser *p)
     }
     _res = NULL;
   done:
-    D(p->level--);
+    p->level--;
     return _res;
 }
 
@@ -31590,16 +32818,19 @@ _tmp_171_rule(Parser *p)
 static void *
 _tmp_172_rule(Parser *p)
 {
-    D(p->level++);
+    if (p->level++ == MAXSTACK) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+    }
     if (p->error_indicator) {
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     void * _res = NULL;
     int _mark = p->mark;
     { // 'as' NAME
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> _tmp_172[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'as' NAME"));
@@ -31621,7 +32852,7 @@ _tmp_172_rule(Parser *p)
     }
     _res = NULL;
   done:
-    D(p->level--);
+    p->level--;
     return _res;
 }
 
@@ -31629,16 +32860,19 @@ _tmp_172_rule(Parser *p)
 static void *
 _tmp_173_rule(Parser *p)
 {
-    D(p->level++);
+    if (p->level++ == MAXSTACK) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+    }
     if (p->error_indicator) {
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     void * _res = NULL;
     int _mark = p->mark;
     { // 'as' NAME
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> _tmp_173[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'as' NAME"));
@@ -31660,7 +32894,7 @@ _tmp_173_rule(Parser *p)
     }
     _res = NULL;
   done:
-    D(p->level--);
+    p->level--;
     return _res;
 }
 
@@ -31668,16 +32902,19 @@ _tmp_173_rule(Parser *p)
 static void *
 _tmp_174_rule(Parser *p)
 {
-    D(p->level++);
+    if (p->level++ == MAXSTACK) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+    }
     if (p->error_indicator) {
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     void * _res = NULL;
     int _mark = p->mark;
     { // 'as' NAME
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> _tmp_174[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'as' NAME"));
@@ -31699,7 +32936,7 @@ _tmp_174_rule(Parser *p)
     }
     _res = NULL;
   done:
-    D(p->level--);
+    p->level--;
     return _res;
 }
 
@@ -31707,16 +32944,19 @@ _tmp_174_rule(Parser *p)
 static void *
 _tmp_175_rule(Parser *p)
 {
-    D(p->level++);
+    if (p->level++ == MAXSTACK) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+    }
     if (p->error_indicator) {
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     void * _res = NULL;
     int _mark = p->mark;
     { // positional_patterns ','
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> _tmp_175[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "positional_patterns ','"));
@@ -31738,7 +32978,7 @@ _tmp_175_rule(Parser *p)
     }
     _res = NULL;
   done:
-    D(p->level--);
+    p->level--;
     return _res;
 }
 
@@ -31746,16 +32986,19 @@ _tmp_175_rule(Parser *p)
 static void *
 _tmp_176_rule(Parser *p)
 {
-    D(p->level++);
+    if (p->level++ == MAXSTACK) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+    }
     if (p->error_indicator) {
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     void * _res = NULL;
     int _mark = p->mark;
     { // '->' expression
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> _tmp_176[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'->' expression"));
@@ -31777,7 +33020,7 @@ _tmp_176_rule(Parser *p)
     }
     _res = NULL;
   done:
-    D(p->level--);
+    p->level--;
     return _res;
 }
 
@@ -31785,16 +33028,19 @@ _tmp_176_rule(Parser *p)
 static void *
 _tmp_177_rule(Parser *p)
 {
-    D(p->level++);
+    if (p->level++ == MAXSTACK) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+    }
     if (p->error_indicator) {
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     void * _res = NULL;
     int _mark = p->mark;
     { // '(' arguments? ')'
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> _tmp_177[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'(' arguments? ')'"));
@@ -31820,7 +33066,7 @@ _tmp_177_rule(Parser *p)
     }
     _res = NULL;
   done:
-    D(p->level--);
+    p->level--;
     return _res;
 }
 
@@ -31828,9 +33074,12 @@ _tmp_177_rule(Parser *p)
 static asdl_seq *
 _loop0_179_rule(Parser *p)
 {
-    D(p->level++);
+    if (p->level++ == MAXSTACK) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+    }
     if (p->error_indicator) {
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     void *_res = NULL;
@@ -31840,14 +33089,14 @@ _loop0_179_rule(Parser *p)
     if (!_children) {
         p->error_indicator = 1;
         PyErr_NoMemory();
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     Py_ssize_t _children_capacity = 1;
     Py_ssize_t _n = 0;
     { // ',' double_starred_kvpair
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> _loop0_179[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "',' double_starred_kvpair"));
@@ -31863,7 +33112,7 @@ _loop0_179_rule(Parser *p)
             if (_res == NULL && PyErr_Occurred()) {
                 p->error_indicator = 1;
                 PyMem_Free(_children);
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             if (_n == _children_capacity) {
@@ -31872,7 +33121,7 @@ _loop0_179_rule(Parser *p)
                 if (!_new_children) {
                     p->error_indicator = 1;
                     PyErr_NoMemory();
-                    D(p->level--);
+                    p->level--;
                     return NULL;
                 }
                 _children = _new_children;
@@ -31889,13 +33138,13 @@ _loop0_179_rule(Parser *p)
         PyMem_Free(_children);
         p->error_indicator = 1;
         PyErr_NoMemory();
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     for (int i = 0; i < _n; i++) asdl_seq_SET_UNTYPED(_seq, i, _children[i]);
     PyMem_Free(_children);
     _PyPegen_insert_memo(p, _start_mark, _loop0_179_type, _seq);
-    D(p->level--);
+    p->level--;
     return _seq;
 }
 
@@ -31903,16 +33152,19 @@ _loop0_179_rule(Parser *p)
 static asdl_seq *
 _gather_178_rule(Parser *p)
 {
-    D(p->level++);
+    if (p->level++ == MAXSTACK) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+    }
     if (p->error_indicator) {
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     asdl_seq * _res = NULL;
     int _mark = p->mark;
     { // double_starred_kvpair _loop0_179
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> _gather_178[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "double_starred_kvpair _loop0_179"));
@@ -31934,7 +33186,7 @@ _gather_178_rule(Parser *p)
     }
     _res = NULL;
   done:
-    D(p->level--);
+    p->level--;
     return _res;
 }
 
@@ -31942,16 +33194,19 @@ _gather_178_rule(Parser *p)
 static void *
 _tmp_180_rule(Parser *p)
 {
-    D(p->level++);
+    if (p->level++ == MAXSTACK) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+    }
     if (p->error_indicator) {
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     void * _res = NULL;
     int _mark = p->mark;
     { // '}'
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> _tmp_180[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'}'"));
@@ -31970,7 +33225,7 @@ _tmp_180_rule(Parser *p)
     }
     { // ','
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> _tmp_180[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "','"));
@@ -31989,7 +33244,7 @@ _tmp_180_rule(Parser *p)
     }
     _res = NULL;
   done:
-    D(p->level--);
+    p->level--;
     return _res;
 }
 
@@ -31997,16 +33252,19 @@ _tmp_180_rule(Parser *p)
 static void *
 _tmp_181_rule(Parser *p)
 {
-    D(p->level++);
+    if (p->level++ == MAXSTACK) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+    }
     if (p->error_indicator) {
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     void * _res = NULL;
     int _mark = p->mark;
     { // star_targets '='
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> _tmp_181[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "star_targets '='"));
@@ -32022,7 +33280,7 @@ _tmp_181_rule(Parser *p)
             _res = z;
             if (_res == NULL && PyErr_Occurred()) {
                 p->error_indicator = 1;
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             goto done;
@@ -32033,7 +33291,7 @@ _tmp_181_rule(Parser *p)
     }
     _res = NULL;
   done:
-    D(p->level--);
+    p->level--;
     return _res;
 }
 
@@ -32041,16 +33299,19 @@ _tmp_181_rule(Parser *p)
 static void *
 _tmp_182_rule(Parser *p)
 {
-    D(p->level++);
+    if (p->level++ == MAXSTACK) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+    }
     if (p->error_indicator) {
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     void * _res = NULL;
     int _mark = p->mark;
     { // '.'
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> _tmp_182[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'.'"));
@@ -32069,7 +33330,7 @@ _tmp_182_rule(Parser *p)
     }
     { // '...'
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> _tmp_182[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'...'"));
@@ -32088,7 +33349,7 @@ _tmp_182_rule(Parser *p)
     }
     _res = NULL;
   done:
-    D(p->level--);
+    p->level--;
     return _res;
 }
 
@@ -32096,16 +33357,19 @@ _tmp_182_rule(Parser *p)
 static void *
 _tmp_183_rule(Parser *p)
 {
-    D(p->level++);
+    if (p->level++ == MAXSTACK) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+    }
     if (p->error_indicator) {
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     void * _res = NULL;
     int _mark = p->mark;
     { // '.'
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> _tmp_183[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'.'"));
@@ -32124,7 +33388,7 @@ _tmp_183_rule(Parser *p)
     }
     { // '...'
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> _tmp_183[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'...'"));
@@ -32143,7 +33407,7 @@ _tmp_183_rule(Parser *p)
     }
     _res = NULL;
   done:
-    D(p->level--);
+    p->level--;
     return _res;
 }
 
@@ -32151,16 +33415,19 @@ _tmp_183_rule(Parser *p)
 static void *
 _tmp_184_rule(Parser *p)
 {
-    D(p->level++);
+    if (p->level++ == MAXSTACK) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+    }
     if (p->error_indicator) {
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     void * _res = NULL;
     int _mark = p->mark;
     { // '@' named_expression NEWLINE
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> _tmp_184[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'@' named_expression NEWLINE"));
@@ -32179,7 +33446,7 @@ _tmp_184_rule(Parser *p)
             _res = f;
             if (_res == NULL && PyErr_Occurred()) {
                 p->error_indicator = 1;
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             goto done;
@@ -32190,7 +33457,7 @@ _tmp_184_rule(Parser *p)
     }
     _res = NULL;
   done:
-    D(p->level--);
+    p->level--;
     return _res;
 }
 
@@ -32198,16 +33465,19 @@ _tmp_184_rule(Parser *p)
 static void *
 _tmp_185_rule(Parser *p)
 {
-    D(p->level++);
+    if (p->level++ == MAXSTACK) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+    }
     if (p->error_indicator) {
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     void * _res = NULL;
     int _mark = p->mark;
     { // ',' star_expression
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> _tmp_185[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "',' star_expression"));
@@ -32223,7 +33493,7 @@ _tmp_185_rule(Parser *p)
             _res = c;
             if (_res == NULL && PyErr_Occurred()) {
                 p->error_indicator = 1;
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             goto done;
@@ -32234,7 +33504,7 @@ _tmp_185_rule(Parser *p)
     }
     _res = NULL;
   done:
-    D(p->level--);
+    p->level--;
     return _res;
 }
 
@@ -32242,16 +33512,19 @@ _tmp_185_rule(Parser *p)
 static void *
 _tmp_186_rule(Parser *p)
 {
-    D(p->level++);
+    if (p->level++ == MAXSTACK) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+    }
     if (p->error_indicator) {
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     void * _res = NULL;
     int _mark = p->mark;
     { // ',' expression
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> _tmp_186[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "',' expression"));
@@ -32267,7 +33540,7 @@ _tmp_186_rule(Parser *p)
             _res = c;
             if (_res == NULL && PyErr_Occurred()) {
                 p->error_indicator = 1;
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             goto done;
@@ -32278,7 +33551,7 @@ _tmp_186_rule(Parser *p)
     }
     _res = NULL;
   done:
-    D(p->level--);
+    p->level--;
     return _res;
 }
 
@@ -32286,16 +33559,19 @@ _tmp_186_rule(Parser *p)
 static void *
 _tmp_187_rule(Parser *p)
 {
-    D(p->level++);
+    if (p->level++ == MAXSTACK) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+    }
     if (p->error_indicator) {
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     void * _res = NULL;
     int _mark = p->mark;
     { // 'or' conjunction
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> _tmp_187[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'or' conjunction"));
@@ -32311,7 +33587,7 @@ _tmp_187_rule(Parser *p)
             _res = c;
             if (_res == NULL && PyErr_Occurred()) {
                 p->error_indicator = 1;
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             goto done;
@@ -32322,7 +33598,7 @@ _tmp_187_rule(Parser *p)
     }
     _res = NULL;
   done:
-    D(p->level--);
+    p->level--;
     return _res;
 }
 
@@ -32330,16 +33606,19 @@ _tmp_187_rule(Parser *p)
 static void *
 _tmp_188_rule(Parser *p)
 {
-    D(p->level++);
+    if (p->level++ == MAXSTACK) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+    }
     if (p->error_indicator) {
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     void * _res = NULL;
     int _mark = p->mark;
     { // 'and' inversion
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> _tmp_188[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'and' inversion"));
@@ -32355,7 +33634,7 @@ _tmp_188_rule(Parser *p)
             _res = c;
             if (_res == NULL && PyErr_Occurred()) {
                 p->error_indicator = 1;
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             goto done;
@@ -32366,7 +33645,7 @@ _tmp_188_rule(Parser *p)
     }
     _res = NULL;
   done:
-    D(p->level--);
+    p->level--;
     return _res;
 }
 
@@ -32374,16 +33653,19 @@ _tmp_188_rule(Parser *p)
 static void *
 _tmp_189_rule(Parser *p)
 {
-    D(p->level++);
+    if (p->level++ == MAXSTACK) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+    }
     if (p->error_indicator) {
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     void * _res = NULL;
     int _mark = p->mark;
     { // 'if' disjunction
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> _tmp_189[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'if' disjunction"));
@@ -32399,7 +33681,7 @@ _tmp_189_rule(Parser *p)
             _res = z;
             if (_res == NULL && PyErr_Occurred()) {
                 p->error_indicator = 1;
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             goto done;
@@ -32410,7 +33692,7 @@ _tmp_189_rule(Parser *p)
     }
     _res = NULL;
   done:
-    D(p->level--);
+    p->level--;
     return _res;
 }
 
@@ -32418,16 +33700,19 @@ _tmp_189_rule(Parser *p)
 static void *
 _tmp_190_rule(Parser *p)
 {
-    D(p->level++);
+    if (p->level++ == MAXSTACK) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+    }
     if (p->error_indicator) {
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     void * _res = NULL;
     int _mark = p->mark;
     { // 'if' disjunction
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> _tmp_190[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'if' disjunction"));
@@ -32443,7 +33728,7 @@ _tmp_190_rule(Parser *p)
             _res = z;
             if (_res == NULL && PyErr_Occurred()) {
                 p->error_indicator = 1;
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             goto done;
@@ -32454,7 +33739,7 @@ _tmp_190_rule(Parser *p)
     }
     _res = NULL;
   done:
-    D(p->level--);
+    p->level--;
     return _res;
 }
 
@@ -32462,16 +33747,19 @@ _tmp_190_rule(Parser *p)
 static void *
 _tmp_191_rule(Parser *p)
 {
-    D(p->level++);
+    if (p->level++ == MAXSTACK) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+    }
     if (p->error_indicator) {
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     void * _res = NULL;
     int _mark = p->mark;
     { // starred_expression
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> _tmp_191[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "starred_expression"));
@@ -32490,7 +33778,7 @@ _tmp_191_rule(Parser *p)
     }
     { // (assignment_expression | expression !':=') !'='
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> _tmp_191[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "(assignment_expression | expression !':=') !'='"));
@@ -32511,7 +33799,7 @@ _tmp_191_rule(Parser *p)
     }
     _res = NULL;
   done:
-    D(p->level--);
+    p->level--;
     return _res;
 }
 
@@ -32519,16 +33807,19 @@ _tmp_191_rule(Parser *p)
 static void *
 _tmp_192_rule(Parser *p)
 {
-    D(p->level++);
+    if (p->level++ == MAXSTACK) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+    }
     if (p->error_indicator) {
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     void * _res = NULL;
     int _mark = p->mark;
     { // ',' star_target
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> _tmp_192[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "',' star_target"));
@@ -32544,7 +33835,7 @@ _tmp_192_rule(Parser *p)
             _res = c;
             if (_res == NULL && PyErr_Occurred()) {
                 p->error_indicator = 1;
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             goto done;
@@ -32555,7 +33846,7 @@ _tmp_192_rule(Parser *p)
     }
     _res = NULL;
   done:
-    D(p->level--);
+    p->level--;
     return _res;
 }
 
@@ -32563,16 +33854,19 @@ _tmp_192_rule(Parser *p)
 static void *
 _tmp_193_rule(Parser *p)
 {
-    D(p->level++);
+    if (p->level++ == MAXSTACK) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+    }
     if (p->error_indicator) {
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     void * _res = NULL;
     int _mark = p->mark;
     { // ',' star_target
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> _tmp_193[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "',' star_target"));
@@ -32588,7 +33882,7 @@ _tmp_193_rule(Parser *p)
             _res = c;
             if (_res == NULL && PyErr_Occurred()) {
                 p->error_indicator = 1;
-                D(p->level--);
+                p->level--;
                 return NULL;
             }
             goto done;
@@ -32599,7 +33893,7 @@ _tmp_193_rule(Parser *p)
     }
     _res = NULL;
   done:
-    D(p->level--);
+    p->level--;
     return _res;
 }
 
@@ -32607,16 +33901,19 @@ _tmp_193_rule(Parser *p)
 static void *
 _tmp_194_rule(Parser *p)
 {
-    D(p->level++);
+    if (p->level++ == MAXSTACK) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+    }
     if (p->error_indicator) {
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     void * _res = NULL;
     int _mark = p->mark;
     { // star_targets '='
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> _tmp_194[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "star_targets '='"));
@@ -32638,7 +33935,7 @@ _tmp_194_rule(Parser *p)
     }
     _res = NULL;
   done:
-    D(p->level--);
+    p->level--;
     return _res;
 }
 
@@ -32646,16 +33943,19 @@ _tmp_194_rule(Parser *p)
 static void *
 _tmp_195_rule(Parser *p)
 {
-    D(p->level++);
+    if (p->level++ == MAXSTACK) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+    }
     if (p->error_indicator) {
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     void * _res = NULL;
     int _mark = p->mark;
     { // star_targets '='
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> _tmp_195[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "star_targets '='"));
@@ -32677,7 +33977,7 @@ _tmp_195_rule(Parser *p)
     }
     _res = NULL;
   done:
-    D(p->level--);
+    p->level--;
     return _res;
 }
 
@@ -32685,16 +33985,19 @@ _tmp_195_rule(Parser *p)
 static void *
 _tmp_196_rule(Parser *p)
 {
-    D(p->level++);
+    if (p->level++ == MAXSTACK) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+    }
     if (p->error_indicator) {
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     void * _res = NULL;
     int _mark = p->mark;
     { // ')'
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> _tmp_196[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "')'"));
@@ -32713,7 +34016,7 @@ _tmp_196_rule(Parser *p)
     }
     { // '**'
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> _tmp_196[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'**'"));
@@ -32732,7 +34035,7 @@ _tmp_196_rule(Parser *p)
     }
     _res = NULL;
   done:
-    D(p->level--);
+    p->level--;
     return _res;
 }
 
@@ -32740,16 +34043,19 @@ _tmp_196_rule(Parser *p)
 static void *
 _tmp_197_rule(Parser *p)
 {
-    D(p->level++);
+    if (p->level++ == MAXSTACK) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+    }
     if (p->error_indicator) {
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     void * _res = NULL;
     int _mark = p->mark;
     { // ':'
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> _tmp_197[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "':'"));
@@ -32768,7 +34074,7 @@ _tmp_197_rule(Parser *p)
     }
     { // '**'
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> _tmp_197[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'**'"));
@@ -32787,7 +34093,7 @@ _tmp_197_rule(Parser *p)
     }
     _res = NULL;
   done:
-    D(p->level--);
+    p->level--;
     return _res;
 }
 
@@ -32795,16 +34101,19 @@ _tmp_197_rule(Parser *p)
 static void *
 _tmp_198_rule(Parser *p)
 {
-    D(p->level++);
+    if (p->level++ == MAXSTACK) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+    }
     if (p->error_indicator) {
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     void * _res = NULL;
     int _mark = p->mark;
     { // expression ['as' star_target]
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> _tmp_198[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "expression ['as' star_target]"));
@@ -32827,7 +34136,7 @@ _tmp_198_rule(Parser *p)
     }
     _res = NULL;
   done:
-    D(p->level--);
+    p->level--;
     return _res;
 }
 
@@ -32835,16 +34144,19 @@ _tmp_198_rule(Parser *p)
 static void *
 _tmp_199_rule(Parser *p)
 {
-    D(p->level++);
+    if (p->level++ == MAXSTACK) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+    }
     if (p->error_indicator) {
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     void * _res = NULL;
     int _mark = p->mark;
     { // expressions ['as' star_target]
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> _tmp_199[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "expressions ['as' star_target]"));
@@ -32867,7 +34179,7 @@ _tmp_199_rule(Parser *p)
     }
     _res = NULL;
   done:
-    D(p->level--);
+    p->level--;
     return _res;
 }
 
@@ -32875,16 +34187,19 @@ _tmp_199_rule(Parser *p)
 static void *
 _tmp_200_rule(Parser *p)
 {
-    D(p->level++);
+    if (p->level++ == MAXSTACK) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+    }
     if (p->error_indicator) {
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     void * _res = NULL;
     int _mark = p->mark;
     { // expression ['as' star_target]
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> _tmp_200[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "expression ['as' star_target]"));
@@ -32907,7 +34222,7 @@ _tmp_200_rule(Parser *p)
     }
     _res = NULL;
   done:
-    D(p->level--);
+    p->level--;
     return _res;
 }
 
@@ -32915,16 +34230,19 @@ _tmp_200_rule(Parser *p)
 static void *
 _tmp_201_rule(Parser *p)
 {
-    D(p->level++);
+    if (p->level++ == MAXSTACK) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+    }
     if (p->error_indicator) {
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     void * _res = NULL;
     int _mark = p->mark;
     { // expressions ['as' star_target]
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> _tmp_201[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "expressions ['as' star_target]"));
@@ -32947,7 +34265,7 @@ _tmp_201_rule(Parser *p)
     }
     _res = NULL;
   done:
-    D(p->level--);
+    p->level--;
     return _res;
 }
 
@@ -32955,16 +34273,19 @@ _tmp_201_rule(Parser *p)
 static void *
 _tmp_202_rule(Parser *p)
 {
-    D(p->level++);
+    if (p->level++ == MAXSTACK) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+    }
     if (p->error_indicator) {
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     void * _res = NULL;
     int _mark = p->mark;
     { // assignment_expression
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> _tmp_202[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "assignment_expression"));
@@ -32983,7 +34304,7 @@ _tmp_202_rule(Parser *p)
     }
     { // expression !':='
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> _tmp_202[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "expression !':='"));
@@ -33004,7 +34325,7 @@ _tmp_202_rule(Parser *p)
     }
     _res = NULL;
   done:
-    D(p->level--);
+    p->level--;
     return _res;
 }
 
@@ -33012,16 +34333,19 @@ _tmp_202_rule(Parser *p)
 static void *
 _tmp_203_rule(Parser *p)
 {
-    D(p->level++);
+    if (p->level++ == MAXSTACK) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+    }
     if (p->error_indicator) {
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     void * _res = NULL;
     int _mark = p->mark;
     { // 'as' star_target
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> _tmp_203[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'as' star_target"));
@@ -33043,7 +34367,7 @@ _tmp_203_rule(Parser *p)
     }
     _res = NULL;
   done:
-    D(p->level--);
+    p->level--;
     return _res;
 }
 
@@ -33051,16 +34375,19 @@ _tmp_203_rule(Parser *p)
 static void *
 _tmp_204_rule(Parser *p)
 {
-    D(p->level++);
+    if (p->level++ == MAXSTACK) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+    }
     if (p->error_indicator) {
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     void * _res = NULL;
     int _mark = p->mark;
     { // 'as' star_target
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> _tmp_204[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'as' star_target"));
@@ -33082,7 +34409,7 @@ _tmp_204_rule(Parser *p)
     }
     _res = NULL;
   done:
-    D(p->level--);
+    p->level--;
     return _res;
 }
 
@@ -33090,16 +34417,19 @@ _tmp_204_rule(Parser *p)
 static void *
 _tmp_205_rule(Parser *p)
 {
-    D(p->level++);
+    if (p->level++ == MAXSTACK) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+    }
     if (p->error_indicator) {
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     void * _res = NULL;
     int _mark = p->mark;
     { // 'as' star_target
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> _tmp_205[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'as' star_target"));
@@ -33121,7 +34451,7 @@ _tmp_205_rule(Parser *p)
     }
     _res = NULL;
   done:
-    D(p->level--);
+    p->level--;
     return _res;
 }
 
@@ -33129,16 +34459,19 @@ _tmp_205_rule(Parser *p)
 static void *
 _tmp_206_rule(Parser *p)
 {
-    D(p->level++);
+    if (p->level++ == MAXSTACK) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+    }
     if (p->error_indicator) {
-        D(p->level--);
+        p->level--;
         return NULL;
     }
     void * _res = NULL;
     int _mark = p->mark;
     { // 'as' star_target
         if (p->error_indicator) {
-            D(p->level--);
+            p->level--;
             return NULL;
         }
         D(fprintf(stderr, "%*c> _tmp_206[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'as' star_target"));
@@ -33160,7 +34493,7 @@ _tmp_206_rule(Parser *p)
     }
     _res = NULL;
   done:
-    D(p->level--);
+    p->level--;
     return _res;
 }
 
index e37aaf7..e507415 100644 (file)
@@ -701,10 +701,10 @@ initialize_token(Parser *p, Token *token, const char *start, const char *end, in
     int col_offset = (start != NULL && start >= line_start) ? (int)(start - line_start) : -1;
     int end_col_offset = (end != NULL && end >= p->tok->line_start) ? (int)(end - p->tok->line_start) : -1;
 
-    token->lineno = p->starting_lineno + lineno;
-    token->col_offset = p->tok->lineno == 1 ? p->starting_col_offset + col_offset : col_offset;
-    token->end_lineno = p->starting_lineno + end_lineno;
-    token->end_col_offset = p->tok->lineno == 1 ? p->starting_col_offset + end_col_offset : end_col_offset;
+    token->lineno = lineno;
+    token->col_offset = p->tok->lineno == p->starting_lineno ? p->starting_col_offset + col_offset : col_offset;
+    token->end_lineno = end_lineno;
+    token->end_col_offset = p->tok->lineno == p->starting_lineno ? p->starting_col_offset + end_col_offset : end_col_offset;
 
     p->fill += 1;
 
@@ -1131,31 +1131,13 @@ _PyPegen_number_token(Parser *p)
                            t->end_col_offset, p->arena);
 }
 
-static int // bool
-newline_in_string(Parser *p, const char *cur)
-{
-    for (const char *c = cur; c >= p->tok->buf; c--) {
-        if (*c == '\'' || *c == '"') {
-            return 1;
-        }
-    }
-    return 0;
-}
-
 /* Check that the source for a single input statement really is a single
    statement by looking at what is left in the buffer after parsing.
    Trailing whitespace and comments are OK. */
 static int // bool
 bad_single_statement(Parser *p)
 {
-    const char *cur = strchr(p->tok->buf, '\n');
-
-    /* Newlines are allowed if preceded by a line continuation character
-       or if they appear inside a string. */
-    if (!cur || (cur != p->tok->buf && *(cur - 1) == '\\')
-             || newline_in_string(p, cur)) {
-        return 0;
-    }
+    char *cur = p->tok->cur;
     char c = *cur;
 
     for (;;) {
@@ -1341,6 +1323,7 @@ void *
 _PyPegen_run_parser(Parser *p)
 {
     void *res = _PyPegen_parse(p);
+    assert(p->level == 0);
     if (res == NULL) {
         if (PyErr_Occurred() && !PyErr_ExceptionMatches(PyExc_SyntaxError)) {
             return NULL;
index 04c7b9d..29d4805 100644 (file)
@@ -321,8 +321,9 @@ _RAISE_SYNTAX_ERROR_INVALID_TARGET(Parser *p, TARGETS_TYPE type, void *e)
             msg,
             _PyPegen_get_expr_name(invalid_target)
         );
+        return RAISE_SYNTAX_ERROR_KNOWN_LOCATION(invalid_target, "invalid syntax");
     }
-    return RAISE_SYNTAX_ERROR("invalid syntax");
+    return NULL;
 }
 
 void *_PyPegen_arguments_parsing_error(Parser *, expr_ty);
index dcd298c..c83e63f 100644 (file)
@@ -392,11 +392,14 @@ fstring_compile_expr(Parser *p, const char *expr_start, const char *expr_end,
         return NULL;
     }
     Py_INCREF(p->tok->filename);
+
     tok->filename = p->tok->filename;
+    tok->lineno = t->lineno + lines - 1;
 
     Parser *p2 = _PyPegen_Parser_New(tok, Py_fstring_input, p->flags, p->feature_version,
                                      NULL, p->arena);
-    p2->starting_lineno = t->lineno + lines - 1;
+
+    p2->starting_lineno = t->lineno + lines;
     p2->starting_col_offset = t->col_offset + cols;
 
     expr = _PyPegen_run_parser(p2);
index 672fdb9..8e9c69d 100644 (file)
@@ -818,10 +818,10 @@ tok_readline_raw(struct tok_state *tok)
             tok_concatenate_interactive_new_line(tok, line) == -1) {
             return 0;
         }
-        if (*tok->inp == '\0') {
+        tok->inp = strchr(tok->inp, '\0');
+        if (tok->inp == tok->buf) {
             return 0;
         }
-        tok->inp = strchr(tok->inp, '\0');
     } while (tok->inp[-1] != '\n');
     return 1;
 }
@@ -983,12 +983,9 @@ tok_underflow_file(struct tok_state *tok) {
     }
     /* The default encoding is UTF-8, so make sure we don't have any
        non-UTF-8 sequences in it. */
-    if (!tok->encoding
-        && (tok->decoding_state != STATE_NORMAL || tok->lineno >= 2)) {
-        if (!ensure_utf8(tok->cur, tok)) {
-            error_ret(tok);
-            return 0;
-        }
+    if (!tok->encoding && !ensure_utf8(tok->cur, tok)) {
+        error_ret(tok);
+        return 0;
     }
     assert(tok->done == E_OK);
     return tok->done == E_OK;
index ce6e6a9..2f84cad 100644 (file)
@@ -1312,7 +1312,7 @@ init_types(struct ast_state *state)
         "     | YieldFrom(expr value)\n"
         "     | Compare(expr left, cmpop* ops, expr* comparators)\n"
         "     | Call(expr func, expr* args, keyword* keywords)\n"
-        "     | FormattedValue(expr value, int? conversion, expr? format_spec)\n"
+        "     | FormattedValue(expr value, int conversion, expr? format_spec)\n"
         "     | JoinedStr(expr* values)\n"
         "     | Constant(constant value, string? kind)\n"
         "     | Attribute(expr value, identifier attr, expr_context ctx)\n"
@@ -1402,11 +1402,8 @@ init_types(struct ast_state *state)
     state->FormattedValue_type = make_type(state, "FormattedValue",
                                            state->expr_type,
                                            FormattedValue_fields, 3,
-        "FormattedValue(expr value, int? conversion, expr? format_spec)");
+        "FormattedValue(expr value, int conversion, expr? format_spec)");
     if (!state->FormattedValue_type) return 0;
-    if (PyObject_SetAttr(state->FormattedValue_type, state->conversion,
-        Py_None) == -1)
-        return 0;
     if (PyObject_SetAttr(state->FormattedValue_type, state->format_spec,
         Py_None) == -1)
         return 0;
@@ -9023,9 +9020,9 @@ obj2ast_expr(struct ast_state *state, PyObject* obj, expr_ty* out, PyArena*
         if (_PyObject_LookupAttr(obj, state->conversion, &tmp) < 0) {
             return 1;
         }
-        if (tmp == NULL || tmp == Py_None) {
-            Py_CLEAR(tmp);
-            conversion = 0;
+        if (tmp == NULL) {
+            PyErr_SetString(PyExc_TypeError, "required field \"conversion\" missing from FormattedValue");
+            return 1;
         }
         else {
             int res;
index 624baf5..ab10b41 100644 (file)
@@ -2649,25 +2649,9 @@ main_loop:
 
         case TARGET(GEN_START): {
             PyObject *none = POP();
+            assert(none == Py_None);
+            assert(oparg < 3);
             Py_DECREF(none);
-            if (!Py_IsNone(none)) {
-                if (oparg > 2) {
-                    _PyErr_SetString(tstate, PyExc_SystemError,
-                        "Illegal kind for GEN_START");
-                }
-                else {
-                    static const char *gen_kind[3] = {
-                        "generator",
-                        "coroutine",
-                        "async generator"
-                    };
-                    _PyErr_Format(tstate, PyExc_TypeError,
-                        "can't send non-None value to a "
-                                "just-started %s",
-                                gen_kind[oparg]);
-                }
-                goto error;
-            }
             DISPATCH();
         }
 
@@ -5106,7 +5090,7 @@ PyEval_EvalCodeEx(PyObject *_co, PyObject *globals, PyObject *locals,
                   PyObject *kwdefs, PyObject *closure)
 {
     PyThreadState *tstate = _PyThreadState_GET();
-    PyObject *res;
+    PyObject *res = NULL;
     PyObject *defaults = _PyTuple_FromArray(defs, defcount);
     if (defaults == NULL) {
         return NULL;
@@ -5119,23 +5103,19 @@ PyEval_EvalCodeEx(PyObject *_co, PyObject *globals, PyObject *locals,
     if (locals == NULL) {
         locals = globals;
     }
-    PyObject *kwnames;
+    PyObject *kwnames = NULL;
     PyObject *const *allargs;
-    PyObject **newargs;
+    PyObject **newargs = NULL;
     if (kwcount == 0) {
         allargs = args;
-        kwnames = NULL;
     }
     else {
         kwnames = PyTuple_New(kwcount);
         if (kwnames == NULL) {
-            res = NULL;
             goto fail;
         }
         newargs = PyMem_Malloc(sizeof(PyObject *)*(kwcount+argcount));
         if (newargs == NULL) {
-            res = NULL;
-            Py_DECREF(kwnames);
             goto fail;
         }
         for (int i = 0; i < argcount; i++) {
@@ -5148,16 +5128,9 @@ PyEval_EvalCodeEx(PyObject *_co, PyObject *globals, PyObject *locals,
         }
         allargs = newargs;
     }
-    PyObject **kwargs = PyMem_Malloc(sizeof(PyObject *)*kwcount);
-    if (kwargs == NULL) {
-        res = NULL;
-        Py_DECREF(kwnames);
-        goto fail;
-    }
     for (int i = 0; i < kwcount; i++) {
         Py_INCREF(kws[2*i]);
         PyTuple_SET_ITEM(kwnames, i, kws[2*i]);
-        kwargs[i] = kws[2*i+1];
     }
     PyFrameConstructor constr = {
         .fc_globals = globals,
@@ -5172,11 +5145,9 @@ PyEval_EvalCodeEx(PyObject *_co, PyObject *globals, PyObject *locals,
     res = _PyEval_Vector(tstate, &constr, locals,
                          allargs, argcount,
                          kwnames);
-    if (kwcount) {
-        Py_DECREF(kwnames);
-        PyMem_Free(newargs);
-    }
 fail:
+    Py_XDECREF(kwnames);
+    PyMem_Free(newargs);
     Py_DECREF(defaults);
     return res;
 }
index 7fdeb31..88d1d05 100644 (file)
@@ -4,7 +4,7 @@
 
 static const char cprt[] =
 "\
-Copyright (c) 2001-2021 Python Software Foundation.\n\
+Copyright (c) 2001-2022 Python Software Foundation.\n\
 All Rights Reserved.\n\
 \n\
 Copyright (c) 2000 BeOpen.com.\n\
index 62bd1e2..07f9d11 100644 (file)
 "'%s' can not be used within an annotation"
 
 
+#define LOCATION(x) \
+ (x)->lineno, (x)->col_offset, (x)->end_lineno, (x)->end_col_offset
+
+#define ST_LOCATION(x) \
+ (x)->ste_lineno, (x)->ste_col_offset, (x)->ste_end_lineno, (x)->ste_end_col_offset
+
 static PySTEntryObject *
 ste_new(struct symtable *st, identifier name, _Py_block_ty block,
         void *key, int lineno, int col_offset,
@@ -96,7 +102,7 @@ ste_new(struct symtable *st, identifier name, _Py_block_ty block,
     ste->ste_child_free = 0;
     ste->ste_generator = 0;
     ste->ste_coroutine = 0;
-    ste->ste_comprehension = 0;
+    ste->ste_comprehension = NoComprehension;
     ste->ste_returns_value = 0;
     ste->ste_needs_class_closure = 0;
     ste->ste_comp_iter_target = 0;
@@ -221,6 +227,7 @@ static int symtable_visit_withitem(struct symtable *st, withitem_ty item);
 static int symtable_visit_match_case(struct symtable *st, match_case_ty m);
 static int symtable_visit_pattern(struct symtable *st, pattern_ty s);
 static int symtable_raise_if_annotation_block(struct symtable *st, const char *, expr_ty);
+static int symtable_raise_if_comprehension_block(struct symtable *st, expr_ty);
 
 
 static identifier top = NULL, lambda = NULL, genexpr = NULL,
@@ -1024,7 +1031,8 @@ symtable_lookup(struct symtable *st, PyObject *name)
 }
 
 static int
-symtable_add_def_helper(struct symtable *st, PyObject *name, int flag, struct _symtable_entry *ste)
+symtable_add_def_helper(struct symtable *st, PyObject *name, int flag, struct _symtable_entry *ste,
+                        int lineno, int col_offset, int end_lineno, int end_col_offset)
 {
     PyObject *o;
     PyObject *dict;
@@ -1041,10 +1049,8 @@ symtable_add_def_helper(struct symtable *st, PyObject *name, int flag, struct _s
             /* Is it better to use 'mangled' or 'name' here? */
             PyErr_Format(PyExc_SyntaxError, DUPLICATE_ARGUMENT, name);
             PyErr_RangedSyntaxLocationObject(st->st_filename,
-                                             ste->ste_lineno,
-                                             ste->ste_col_offset + 1,
-                                             ste->ste_end_lineno,
-                                             ste->ste_end_col_offset + 1);
+                                             lineno, col_offset + 1,
+                                             end_lineno, end_col_offset + 1);
             goto error;
         }
         val |= flag;
@@ -1065,10 +1071,8 @@ symtable_add_def_helper(struct symtable *st, PyObject *name, int flag, struct _s
             PyErr_Format(PyExc_SyntaxError,
                 NAMED_EXPR_COMP_INNER_LOOP_CONFLICT, name);
             PyErr_RangedSyntaxLocationObject(st->st_filename,
-                                             ste->ste_lineno,
-                                             ste->ste_col_offset + 1,
-                                             ste->ste_end_lineno,
-                                             ste->ste_end_col_offset + 1);
+                                             lineno, col_offset + 1,
+                                             end_lineno, end_col_offset + 1);
             goto error;
         }
         val |= DEF_COMP_ITER;
@@ -1113,8 +1117,11 @@ error:
 }
 
 static int
-symtable_add_def(struct symtable *st, PyObject *name, int flag) {
-    return symtable_add_def_helper(st, name, flag, st->st_cur);
+symtable_add_def(struct symtable *st, PyObject *name, int flag,
+                 int lineno, int col_offset, int end_lineno, int end_col_offset)
+{
+    return symtable_add_def_helper(st, name, flag, st->st_cur, 
+                        lineno, col_offset, end_lineno, end_col_offset);
 }
 
 /* VISIT, VISIT_SEQ and VIST_SEQ_TAIL take an ASDL type as their second argument.
@@ -1199,7 +1206,7 @@ symtable_visit_stmt(struct symtable *st, stmt_ty s)
     }
     switch (s->kind) {
     case FunctionDef_kind:
-        if (!symtable_add_def(st, s->v.FunctionDef.name, DEF_LOCAL))
+        if (!symtable_add_def(st, s->v.FunctionDef.name, DEF_LOCAL, LOCATION(s)))
             VISIT_QUIT(st, 0);
         if (s->v.FunctionDef.args->defaults)
             VISIT_SEQ(st, expr, s->v.FunctionDef.args->defaults);
@@ -1212,8 +1219,7 @@ symtable_visit_stmt(struct symtable *st, stmt_ty s)
             VISIT_SEQ(st, expr, s->v.FunctionDef.decorator_list);
         if (!symtable_enter_block(st, s->v.FunctionDef.name,
                                   FunctionBlock, (void *)s,
-                                  s->lineno, s->col_offset,
-                                  s->end_lineno, s->end_col_offset))
+                                  LOCATION(s)))
             VISIT_QUIT(st, 0);
         VISIT(st, arguments, s->v.FunctionDef.args);
         VISIT_SEQ(st, stmt, s->v.FunctionDef.body);
@@ -1222,7 +1228,7 @@ symtable_visit_stmt(struct symtable *st, stmt_ty s)
         break;
     case ClassDef_kind: {
         PyObject *tmp;
-        if (!symtable_add_def(st, s->v.ClassDef.name, DEF_LOCAL))
+        if (!symtable_add_def(st, s->v.ClassDef.name, DEF_LOCAL, LOCATION(s)))
             VISIT_QUIT(st, 0);
         VISIT_SEQ(st, expr, s->v.ClassDef.bases);
         VISIT_SEQ(st, keyword, s->v.ClassDef.keywords);
@@ -1275,12 +1281,12 @@ symtable_visit_stmt(struct symtable *st, stmt_ty s)
             }
             if (s->v.AnnAssign.simple &&
                 !symtable_add_def(st, e_name->v.Name.id,
-                                  DEF_ANNOT | DEF_LOCAL)) {
+                                  DEF_ANNOT | DEF_LOCAL, LOCATION(e_name))) {
                 VISIT_QUIT(st, 0);
             }
             else {
                 if (s->v.AnnAssign.value
-                    && !symtable_add_def(st, e_name->v.Name.id, DEF_LOCAL)) {
+                    && !symtable_add_def(st, e_name->v.Name.id, DEF_LOCAL, LOCATION(e_name))) {
                     VISIT_QUIT(st, 0);
                 }
             }
@@ -1377,7 +1383,7 @@ symtable_visit_stmt(struct symtable *st, stmt_ty s)
                                                  s->end_col_offset + 1);
                 VISIT_QUIT(st, 0);
             }
-            if (!symtable_add_def(st, name, DEF_GLOBAL))
+            if (!symtable_add_def(st, name, DEF_GLOBAL, LOCATION(s)))
                 VISIT_QUIT(st, 0);
             if (!symtable_record_directive(st, name, s->lineno, s->col_offset,
                                            s->end_lineno, s->end_col_offset))
@@ -1412,7 +1418,7 @@ symtable_visit_stmt(struct symtable *st, stmt_ty s)
                                                  s->end_col_offset + 1);
                 VISIT_QUIT(st, 0);
             }
-            if (!symtable_add_def(st, name, DEF_NONLOCAL))
+            if (!symtable_add_def(st, name, DEF_NONLOCAL, LOCATION(s)))
                 VISIT_QUIT(st, 0);
             if (!symtable_record_directive(st, name, s->lineno, s->col_offset,
                                            s->end_lineno, s->end_col_offset))
@@ -1433,7 +1439,7 @@ symtable_visit_stmt(struct symtable *st, stmt_ty s)
         VISIT_SEQ(st, stmt, s->v.With.body);
         break;
     case AsyncFunctionDef_kind:
-        if (!symtable_add_def(st, s->v.AsyncFunctionDef.name, DEF_LOCAL))
+        if (!symtable_add_def(st, s->v.AsyncFunctionDef.name, DEF_LOCAL, LOCATION(s)))
             VISIT_QUIT(st, 0);
         if (s->v.AsyncFunctionDef.args->defaults)
             VISIT_SEQ(st, expr, s->v.AsyncFunctionDef.args->defaults);
@@ -1508,27 +1514,25 @@ symtable_extend_namedexpr_scope(struct symtable *st, expr_ty e)
         if (ste->ste_type == FunctionBlock) {
             long target_in_scope = _PyST_GetSymbol(ste, target_name);
             if (target_in_scope & DEF_GLOBAL) {
-                if (!symtable_add_def(st, target_name, DEF_GLOBAL))
+                if (!symtable_add_def(st, target_name, DEF_GLOBAL, LOCATION(e)))
                     VISIT_QUIT(st, 0);
             } else {
-                if (!symtable_add_def(st, target_name, DEF_NONLOCAL))
+                if (!symtable_add_def(st, target_name, DEF_NONLOCAL, LOCATION(e)))
                     VISIT_QUIT(st, 0);
             }
-            if (!symtable_record_directive(st, target_name, e->lineno, e->col_offset,
-                                           e->end_lineno, e->end_col_offset))
+            if (!symtable_record_directive(st, target_name, LOCATION(e)))
                 VISIT_QUIT(st, 0);
 
-            return symtable_add_def_helper(st, target_name, DEF_LOCAL, ste);
+            return symtable_add_def_helper(st, target_name, DEF_LOCAL, ste, LOCATION(e));
         }
         /* If we find a ModuleBlock entry, add as GLOBAL */
         if (ste->ste_type == ModuleBlock) {
-            if (!symtable_add_def(st, target_name, DEF_GLOBAL))
+            if (!symtable_add_def(st, target_name, DEF_GLOBAL, LOCATION(e)))
                 VISIT_QUIT(st, 0);
-            if (!symtable_record_directive(st, target_name, e->lineno, e->col_offset,
-                                           e->end_lineno, e->end_col_offset))
+            if (!symtable_record_directive(st, target_name, LOCATION(e)))
                 VISIT_QUIT(st, 0);
 
-            return symtable_add_def_helper(st, target_name, DEF_GLOBAL, ste);
+            return symtable_add_def_helper(st, target_name, DEF_GLOBAL, ste, LOCATION(e));
         }
         /* Disallow usage in ClassBlock */
         if (ste->ste_type == ClassBlock) {
@@ -1651,6 +1655,9 @@ symtable_visit_expr(struct symtable *st, expr_ty e)
         if (e->v.Yield.value)
             VISIT(st, expr, e->v.Yield.value);
         st->st_cur->ste_generator = 1;
+        if (st->st_cur->ste_comprehension) {
+            return symtable_raise_if_comprehension_block(st, e);
+        }
         break;
     case YieldFrom_kind:
         if (!symtable_raise_if_annotation_block(st, "yield expression", e)) {
@@ -1658,6 +1665,9 @@ symtable_visit_expr(struct symtable *st, expr_ty e)
         }
         VISIT(st, expr, e->v.YieldFrom.value);
         st->st_cur->ste_generator = 1;
+        if (st->st_cur->ste_comprehension) {
+            return symtable_raise_if_comprehension_block(st, e);
+        }
         break;
     case Await_kind:
         if (!symtable_raise_if_annotation_block(st, "await expression", e)) {
@@ -1707,14 +1717,14 @@ symtable_visit_expr(struct symtable *st, expr_ty e)
         break;
     case Name_kind:
         if (!symtable_add_def(st, e->v.Name.id,
-                              e->v.Name.ctx == Load ? USE : DEF_LOCAL))
+                              e->v.Name.ctx == Load ? USE : DEF_LOCAL, LOCATION(e)))
             VISIT_QUIT(st, 0);
         /* Special-case super: it counts as a use of __class__ */
         if (e->v.Name.ctx == Load &&
             st->st_cur->ste_type == FunctionBlock &&
             _PyUnicode_EqualToASCIIString(e->v.Name.id, "super")) {
             if (!GET_IDENTIFIER(__class__) ||
-                !symtable_add_def(st, __class__, USE))
+                !symtable_add_def(st, __class__, USE, LOCATION(e)))
                 VISIT_QUIT(st, 0);
         }
         break;
@@ -1749,14 +1759,14 @@ symtable_visit_pattern(struct symtable *st, pattern_ty p)
         break;
     case MatchStar_kind:
         if (p->v.MatchStar.name) {
-            symtable_add_def(st, p->v.MatchStar.name, DEF_LOCAL);
+            symtable_add_def(st, p->v.MatchStar.name, DEF_LOCAL, LOCATION(p));
         }
         break;
     case MatchMapping_kind:
         VISIT_SEQ(st, expr, p->v.MatchMapping.keys);
         VISIT_SEQ(st, pattern, p->v.MatchMapping.patterns);
         if (p->v.MatchMapping.rest) {
-            symtable_add_def(st, p->v.MatchMapping.rest, DEF_LOCAL);
+            symtable_add_def(st, p->v.MatchMapping.rest, DEF_LOCAL, LOCATION(p));
         }
         break;
     case MatchClass_kind:
@@ -1769,7 +1779,7 @@ symtable_visit_pattern(struct symtable *st, pattern_ty p)
             VISIT(st, pattern, p->v.MatchAs.pattern);
         }
         if (p->v.MatchAs.name) {
-            symtable_add_def(st, p->v.MatchAs.name, DEF_LOCAL);
+            symtable_add_def(st, p->v.MatchAs.name, DEF_LOCAL, LOCATION(p));
         }
         break;
     case MatchOr_kind:
@@ -1785,7 +1795,7 @@ symtable_implicit_arg(struct symtable *st, int pos)
     PyObject *id = PyUnicode_FromFormat(".%d", pos);
     if (id == NULL)
         return 0;
-    if (!symtable_add_def(st, id, DEF_PARAM)) {
+    if (!symtable_add_def(st, id, DEF_PARAM, ST_LOCATION(st->st_cur))) {
         Py_DECREF(id);
         return 0;
     }
@@ -1803,7 +1813,7 @@ symtable_visit_params(struct symtable *st, asdl_arg_seq *args)
 
     for (i = 0; i < asdl_seq_LEN(args); i++) {
         arg_ty arg = (arg_ty)asdl_seq_GET(args, i);
-        if (!symtable_add_def(st, arg->arg, DEF_PARAM))
+        if (!symtable_add_def(st, arg->arg, DEF_PARAM, LOCATION(arg)))
             return 0;
     }
 
@@ -1887,12 +1897,12 @@ symtable_visit_arguments(struct symtable *st, arguments_ty a)
     if (a->kwonlyargs && !symtable_visit_params(st, a->kwonlyargs))
         return 0;
     if (a->vararg) {
-        if (!symtable_add_def(st, a->vararg->arg, DEF_PARAM))
+        if (!symtable_add_def(st, a->vararg->arg, DEF_PARAM, LOCATION(a->vararg)))
             return 0;
         st->st_cur->ste_varargs = 1;
     }
     if (a->kwarg) {
-        if (!symtable_add_def(st, a->kwarg->arg, DEF_PARAM))
+        if (!symtable_add_def(st, a->kwarg->arg, DEF_PARAM, LOCATION(a->kwarg)))
             return 0;
         st->st_cur->ste_varkeywords = 1;
     }
@@ -1906,7 +1916,7 @@ symtable_visit_excepthandler(struct symtable *st, excepthandler_ty eh)
     if (eh->v.ExceptHandler.type)
         VISIT(st, expr, eh->v.ExceptHandler.type);
     if (eh->v.ExceptHandler.name)
-        if (!symtable_add_def(st, eh->v.ExceptHandler.name, DEF_LOCAL))
+        if (!symtable_add_def(st, eh->v.ExceptHandler.name, DEF_LOCAL, LOCATION(eh)))
             return 0;
     VISIT_SEQ(st, stmt, eh->v.ExceptHandler.body);
     return 1;
@@ -1954,16 +1964,16 @@ symtable_visit_alias(struct symtable *st, alias_ty a)
         Py_INCREF(store_name);
     }
     if (!_PyUnicode_EqualToASCIIString(name, "*")) {
-        int r = symtable_add_def(st, store_name, DEF_IMPORT);
+        int r = symtable_add_def(st, store_name, DEF_IMPORT, LOCATION(a));
         Py_DECREF(store_name);
         return r;
     }
     else {
         if (st->st_cur->ste_type != ModuleBlock) {
-            int lineno = st->st_cur->ste_lineno;
-            int col_offset = st->st_cur->ste_col_offset;
-            int end_lineno = st->st_cur->ste_end_lineno;
-            int end_col_offset = st->st_cur->ste_end_col_offset;
+            int lineno = a->lineno;
+            int col_offset = a->col_offset;
+            int end_lineno = a->end_lineno;
+            int end_col_offset = a->end_col_offset;
             PyErr_SetString(PyExc_SyntaxError, IMPORT_STAR_WARNING);
             PyErr_RangedSyntaxLocationObject(st->st_filename,
                                              lineno, col_offset + 1,
@@ -2021,10 +2031,23 @@ symtable_handle_comprehension(struct symtable *st, expr_ty e,
                               e->end_lineno, e->end_col_offset)) {
         return 0;
     }
+    switch(e->kind) {
+        case ListComp_kind:
+            st->st_cur->ste_comprehension = ListComprehension;
+            break;
+        case SetComp_kind:
+            st->st_cur->ste_comprehension = SetComprehension;
+            break;
+        case DictComp_kind:
+            st->st_cur->ste_comprehension = DictComprehension;
+            break;
+        default:
+            st->st_cur->ste_comprehension = GeneratorExpression;
+            break;
+    }
     if (outermost->is_async) {
         st->st_cur->ste_coroutine = 1;
     }
-    st->st_cur->ste_comprehension = 1;
 
     /* Outermost iter is received as an argument */
     if (!symtable_implicit_arg(st, 0)) {
@@ -2041,20 +2064,6 @@ symtable_handle_comprehension(struct symtable *st, expr_ty e,
     if (value)
         VISIT(st, expr, value);
     VISIT(st, expr, elt);
-    if (st->st_cur->ste_generator) {
-        PyErr_SetString(PyExc_SyntaxError,
-            (e->kind == ListComp_kind) ? "'yield' inside list comprehension" :
-            (e->kind == SetComp_kind) ? "'yield' inside set comprehension" :
-            (e->kind == DictComp_kind) ? "'yield' inside dict comprehension" :
-            "'yield' inside generator expression");
-        PyErr_RangedSyntaxLocationObject(st->st_filename,
-                                         st->st_cur->ste_lineno,
-                                         st->st_cur->ste_col_offset + 1,
-                                         st->st_cur->ste_end_lineno,
-                                         st->st_cur->ste_end_col_offset + 1);
-        symtable_exit_block(st);
-        return 0;
-    }
     st->st_cur->ste_generator = is_generator;
     return symtable_exit_block(st);
 }
@@ -2108,6 +2117,20 @@ symtable_raise_if_annotation_block(struct symtable *st, const char *name, expr_t
     return 0;
 }
 
+static int
+symtable_raise_if_comprehension_block(struct symtable *st, expr_ty e) {
+    _Py_comprehension_ty type = st->st_cur->ste_comprehension;
+    PyErr_SetString(PyExc_SyntaxError, 
+            (type == ListComprehension) ? "'yield' inside list comprehension" :
+            (type == SetComprehension) ? "'yield' inside set comprehension" :
+            (type == DictComprehension) ? "'yield' inside dict comprehension" :
+            "'yield' inside generator expression");
+    PyErr_RangedSyntaxLocationObject(st->st_filename,
+                                     e->lineno, e->col_offset + 1,
+                                     e->end_lineno, e->end_col_offset + 1);
+    VISIT_QUIT(st, 0);
+}
+
 struct symtable *
 _Py_SymtableStringObjectFlags(const char *str, PyObject *filename,
                               int start, PyCompilerFlags *flags)
index d2189e5..ae35928 100644 (file)
@@ -1,4 +1,4 @@
-This is Python version 3.10.1
+This is Python version 3.10.2
 =============================
 
 .. image:: https://travis-ci.com/python/cpython.svg?branch=master
@@ -18,7 +18,7 @@ This is Python version 3.10.1
    :target: https://discuss.python.org/
 
 
-Copyright (c) 2001-2021 Python Software Foundation.  All rights reserved.
+Copyright (c) 2001-2022 Python Software Foundation.  All rights reserved.
 
 See the end of this file for further copyright and license information.
 
@@ -247,7 +247,7 @@ See :pep:`619` for Python 3.10 release details.
 Copyright and License Information
 ---------------------------------
 
-Copyright (c) 2001-2021 Python Software Foundation.  All rights reserved.
+Copyright (c) 2001-2022 Python Software Foundation.  All rights reserved.
 
 Copyright (c) 2000 BeOpen.com.  All rights reserved.
 
index 3c3baef..49cfb72 100644 (file)
@@ -37,6 +37,8 @@ EXTENSION_PREFIX = """\
 #  define D(x)
 #endif
 
+# define MAXSTACK 6000
+
 """
 
 
@@ -357,10 +359,14 @@ class CParserGenerator(ParserGenerator, GrammarVisitor):
         self.skip_actions = skip_actions
 
     def add_level(self) -> None:
-        self.print("D(p->level++);")
+        self.print("if (p->level++ == MAXSTACK) {")
+        with self.indent():
+            self.print("p->error_indicator = 1;")
+            self.print("PyErr_NoMemory();")
+        self.print("}")
 
     def remove_level(self) -> None:
-        self.print("D(p->level--);")
+        self.print("p->level--;")
 
     def add_return(self, ret_val: str) -> None:
         self.remove_level()
@@ -536,9 +542,10 @@ class CParserGenerator(ParserGenerator, GrammarVisitor):
                 self.print("p->in_raw_rule++;")
                 self.print(f"void *_raw = {node.name}_raw(p);")
                 self.print("p->in_raw_rule--;")
-                self.print("if (p->error_indicator)")
+                self.print("if (p->error_indicator) {")
                 with self.indent():
-                    self.print("return NULL;")
+                    self.add_return("NULL")
+                self.print("}")
                 self.print("if (_raw == NULL || p->mark <= _resmark)")
                 with self.indent():
                     self.print("break;")
index ba2663e..a41cabf 100755 (executable)
@@ -47,8 +47,8 @@ OPENSSL_OLD_VERSIONS = [
 ]
 
 OPENSSL_RECENT_VERSIONS = [
-    "1.1.1l",
-    "3.0.0"
+    "1.1.1m",
+    "3.0.1"
 ]
 
 LIBRESSL_OLD_VERSIONS = [
index 2e7e0b7..a7d2975 100755 (executable)
--- a/configure
+++ b/configure
@@ -5384,10 +5384,20 @@ $as_echo "none" >&6; }
 fi
 rm -f conftest.c conftest.out
 
-if test x$PLATFORM_TRIPLET != xdarwin; then
-  MULTIARCH=$($CC --print-multiarch 2>/dev/null)
-fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for multiarch" >&5
+$as_echo_n "checking for multiarch... " >&6; }
+case $ac_sys_system in #(
+  Darwin*) :
+    MULTIARCH="" ;; #(
+  FreeBSD*) :
+    MULTIARCH="" ;; #(
+  *) :
+    MULTIARCH=$($CC --print-multiarch 2>/dev/null)
+ ;;
+esac
 
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $MULTIARCH" >&5
+$as_echo "$MULTIARCH" >&6; }
 
 if test x$PLATFORM_TRIPLET != x && test x$MULTIARCH != x; then
   if test x$PLATFORM_TRIPLET != x$MULTIARCH; then
@@ -5397,6 +5407,7 @@ elif test x$PLATFORM_TRIPLET != x && test x$MULTIARCH = x; then
   MULTIARCH=$PLATFORM_TRIPLET
 fi
 
+
 if test x$MULTIARCH != x; then
   MULTIARCH_CPPFLAGS="-DMULTIARCH=\\\"$MULTIARCH\\\""
 fi
@@ -9884,7 +9895,7 @@ then
                # small for the default recursion limit. Increase the stack size
                # to ensure that tests don't crash
     stack_size="1000000"  # 16 MB
-    if test "$with_ubsan" == "yes"
+    if test "$with_ubsan" = "yes"
     then
         # Undefined behavior sanitizer requires an even deeper stack
         stack_size="4000000"  # 64 MB
index 0c06914..5aa91cb 100644 (file)
@@ -872,10 +872,14 @@ else
 fi
 rm -f conftest.c conftest.out
 
-if test x$PLATFORM_TRIPLET != xdarwin; then
-  MULTIARCH=$($CC --print-multiarch 2>/dev/null)
-fi
-AC_SUBST(MULTIARCH)
+AC_MSG_CHECKING([for multiarch])
+AS_CASE([$ac_sys_system],
+  [Darwin*], [MULTIARCH=""],
+  [FreeBSD*], [MULTIARCH=""],
+  [MULTIARCH=$($CC --print-multiarch 2>/dev/null)]
+)
+AC_SUBST([MULTIARCH])
+AC_MSG_RESULT([$MULTIARCH])
 
 if test x$PLATFORM_TRIPLET != x && test x$MULTIARCH != x; then
   if test x$PLATFORM_TRIPLET != x$MULTIARCH; then
@@ -885,6 +889,7 @@ elif test x$PLATFORM_TRIPLET != x && test x$MULTIARCH = x; then
   MULTIARCH=$PLATFORM_TRIPLET
 fi
 AC_SUBST(PLATFORM_TRIPLET)
+
 if test x$MULTIARCH != x; then
   MULTIARCH_CPPFLAGS="-DMULTIARCH=\\\"$MULTIARCH\\\""
 fi
@@ -2811,7 +2816,7 @@ then
                # small for the default recursion limit. Increase the stack size
                # to ensure that tests don't crash
     stack_size="1000000"  # 16 MB
-    if test "$with_ubsan" == "yes"
+    if test "$with_ubsan" = "yes"
     then
         # Undefined behavior sanitizer requires an even deeper stack
         stack_size="4000000"  # 64 MB