gh-106905: avoid incorrect SystemError about recursion depth mismatch (#106906)

* gh-106905: avoid incorrect SystemError about recursion depth mismatch

* Update Misc/NEWS.d/next/Core and Builtins/2023-07-20-11-41-16.gh-issue-106905.AyZpuB.rst

---------

Co-authored-by: Shantanu <12621235+hauntsaninja@users.noreply.github.com>
Co-authored-by: Serhiy Storchaka <storchaka@gmail.com>
This commit is contained in:
Markus Mohrhard 2023-11-13 21:05:17 +08:00 committed by GitHub
parent 1c7ed7e9eb
commit 1447af7970
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 16 additions and 0 deletions

View File

@ -0,0 +1 @@
Fix incorrect SystemError about AST constructor recursion depth mismatch.

View File

@ -1286,6 +1286,7 @@ class ObjVisitor(PickleVisitor):
self.emit("state->recursion_depth--;", 1) self.emit("state->recursion_depth--;", 1)
self.emit("return result;", 1) self.emit("return result;", 1)
self.emit("failed:", 0) self.emit("failed:", 0)
self.emit("state->recursion_depth--;", 1)
self.emit("Py_XDECREF(value);", 1) self.emit("Py_XDECREF(value);", 1)
self.emit("Py_XDECREF(result);", 1) self.emit("Py_XDECREF(result);", 1)
self.emit("return NULL;", 1) self.emit("return NULL;", 1)

14
Python/Python-ast.c generated
View File

@ -3846,6 +3846,7 @@ ast2obj_mod(struct ast_state *state, void* _o)
state->recursion_depth--; state->recursion_depth--;
return result; return result;
failed: failed:
state->recursion_depth--;
Py_XDECREF(value); Py_XDECREF(value);
Py_XDECREF(result); Py_XDECREF(result);
return NULL; return NULL;
@ -4451,6 +4452,7 @@ ast2obj_stmt(struct ast_state *state, void* _o)
state->recursion_depth--; state->recursion_depth--;
return result; return result;
failed: failed:
state->recursion_depth--;
Py_XDECREF(value); Py_XDECREF(value);
Py_XDECREF(result); Py_XDECREF(result);
return NULL; return NULL;
@ -4934,6 +4936,7 @@ ast2obj_expr(struct ast_state *state, void* _o)
state->recursion_depth--; state->recursion_depth--;
return result; return result;
failed: failed:
state->recursion_depth--;
Py_XDECREF(value); Py_XDECREF(value);
Py_XDECREF(result); Py_XDECREF(result);
return NULL; return NULL;
@ -5073,6 +5076,7 @@ ast2obj_comprehension(struct ast_state *state, void* _o)
state->recursion_depth--; state->recursion_depth--;
return result; return result;
failed: failed:
state->recursion_depth--;
Py_XDECREF(value); Py_XDECREF(value);
Py_XDECREF(result); Py_XDECREF(result);
return NULL; return NULL;
@ -5138,6 +5142,7 @@ ast2obj_excepthandler(struct ast_state *state, void* _o)
state->recursion_depth--; state->recursion_depth--;
return result; return result;
failed: failed:
state->recursion_depth--;
Py_XDECREF(value); Py_XDECREF(value);
Py_XDECREF(result); Py_XDECREF(result);
return NULL; return NULL;
@ -5198,6 +5203,7 @@ ast2obj_arguments(struct ast_state *state, void* _o)
state->recursion_depth--; state->recursion_depth--;
return result; return result;
failed: failed:
state->recursion_depth--;
Py_XDECREF(value); Py_XDECREF(value);
Py_XDECREF(result); Py_XDECREF(result);
return NULL; return NULL;
@ -5258,6 +5264,7 @@ ast2obj_arg(struct ast_state *state, void* _o)
state->recursion_depth--; state->recursion_depth--;
return result; return result;
failed: failed:
state->recursion_depth--;
Py_XDECREF(value); Py_XDECREF(value);
Py_XDECREF(result); Py_XDECREF(result);
return NULL; return NULL;
@ -5313,6 +5320,7 @@ ast2obj_keyword(struct ast_state *state, void* _o)
state->recursion_depth--; state->recursion_depth--;
return result; return result;
failed: failed:
state->recursion_depth--;
Py_XDECREF(value); Py_XDECREF(value);
Py_XDECREF(result); Py_XDECREF(result);
return NULL; return NULL;
@ -5368,6 +5376,7 @@ ast2obj_alias(struct ast_state *state, void* _o)
state->recursion_depth--; state->recursion_depth--;
return result; return result;
failed: failed:
state->recursion_depth--;
Py_XDECREF(value); Py_XDECREF(value);
Py_XDECREF(result); Py_XDECREF(result);
return NULL; return NULL;
@ -5403,6 +5412,7 @@ ast2obj_withitem(struct ast_state *state, void* _o)
state->recursion_depth--; state->recursion_depth--;
return result; return result;
failed: failed:
state->recursion_depth--;
Py_XDECREF(value); Py_XDECREF(value);
Py_XDECREF(result); Py_XDECREF(result);
return NULL; return NULL;
@ -5443,6 +5453,7 @@ ast2obj_match_case(struct ast_state *state, void* _o)
state->recursion_depth--; state->recursion_depth--;
return result; return result;
failed: failed:
state->recursion_depth--;
Py_XDECREF(value); Py_XDECREF(value);
Py_XDECREF(result); Py_XDECREF(result);
return NULL; return NULL;
@ -5604,6 +5615,7 @@ ast2obj_pattern(struct ast_state *state, void* _o)
state->recursion_depth--; state->recursion_depth--;
return result; return result;
failed: failed:
state->recursion_depth--;
Py_XDECREF(value); Py_XDECREF(value);
Py_XDECREF(result); Py_XDECREF(result);
return NULL; return NULL;
@ -5643,6 +5655,7 @@ ast2obj_type_ignore(struct ast_state *state, void* _o)
state->recursion_depth--; state->recursion_depth--;
return result; return result;
failed: failed:
state->recursion_depth--;
Py_XDECREF(value); Py_XDECREF(value);
Py_XDECREF(result); Py_XDECREF(result);
return NULL; return NULL;
@ -5722,6 +5735,7 @@ ast2obj_type_param(struct ast_state *state, void* _o)
state->recursion_depth--; state->recursion_depth--;
return result; return result;
failed: failed:
state->recursion_depth--;
Py_XDECREF(value); Py_XDECREF(value);
Py_XDECREF(result); Py_XDECREF(result);
return NULL; return NULL;