summaryrefslogtreecommitdiffstats
path: root/Python/Python-ast.c
diff options
context:
space:
mode:
authorMark Shannon <mark@hotpy.org>2025-02-19 11:44:57 (GMT)
committerGitHub <noreply@github.com>2025-02-19 11:44:57 (GMT)
commit2498c22fa0a2b560491bc503fa676585c1a603d0 (patch)
tree1e045c5f71ff6674cdd2c247c99565697e088a87 /Python/Python-ast.c
parentc637bce20aaaf836ab2cfbb123b9472e5ad0ab47 (diff)
downloadcpython-2498c22fa0a2b560491bc503fa676585c1a603d0.zip
cpython-2498c22fa0a2b560491bc503fa676585c1a603d0.tar.gz
cpython-2498c22fa0a2b560491bc503fa676585c1a603d0.tar.bz2
GH-91079: Implement C stack limits using addresses, not counters. (GH-130007)
* Implement C recursion protection with limit pointers * Remove calls to PyOS_CheckStack * Add stack protection to parser * Make tests more robust to low stacks * Improve error messages for stack overflow
Diffstat (limited to 'Python/Python-ast.c')
-rw-r--r--Python/Python-ast.c733
1 files changed, 310 insertions, 423 deletions
diff --git a/Python/Python-ast.c b/Python/Python-ast.c
index 4adf72a..638e3f6 100644
--- a/Python/Python-ast.c
+++ b/Python/Python-ast.c
@@ -13,11 +13,6 @@
#include "structmember.h"
#include <stddef.h>
-struct validator {
- int recursion_depth; /* current recursion depth */
- int recursion_limit; /* recursion limit */
-};
-
// Forward declaration
static int init_types(void *arg);
@@ -392,8 +387,7 @@ GENERATE_ASDL_SEQ_CONSTRUCTOR(pattern, pattern_ty)
GENERATE_ASDL_SEQ_CONSTRUCTOR(type_ignore, type_ignore_ty)
GENERATE_ASDL_SEQ_CONSTRUCTOR(type_param, type_param_ty)
-static PyObject* ast2obj_mod(struct ast_state *state, struct validator *vstate,
- void*);
+static PyObject* ast2obj_mod(struct ast_state *state, void*);
static const char * const Module_fields[]={
"body",
"type_ignores",
@@ -414,8 +408,7 @@ static const char * const stmt_attributes[] = {
"end_lineno",
"end_col_offset",
};
-static PyObject* ast2obj_stmt(struct ast_state *state, struct validator
- *vstate, void*);
+static PyObject* ast2obj_stmt(struct ast_state *state, void*);
static const char * const FunctionDef_fields[]={
"name",
"args",
@@ -550,8 +543,7 @@ static const char * const expr_attributes[] = {
"end_lineno",
"end_col_offset",
};
-static PyObject* ast2obj_expr(struct ast_state *state, struct validator
- *vstate, void*);
+static PyObject* ast2obj_expr(struct ast_state *state, void*);
static const char * const BoolOp_fields[]={
"op",
"values",
@@ -664,18 +656,12 @@ static const char * const Slice_fields[]={
"upper",
"step",
};
-static PyObject* ast2obj_expr_context(struct ast_state *state, struct validator
- *vstate, expr_context_ty);
-static PyObject* ast2obj_boolop(struct ast_state *state, struct validator
- *vstate, boolop_ty);
-static PyObject* ast2obj_operator(struct ast_state *state, struct validator
- *vstate, operator_ty);
-static PyObject* ast2obj_unaryop(struct ast_state *state, struct validator
- *vstate, unaryop_ty);
-static PyObject* ast2obj_cmpop(struct ast_state *state, struct validator
- *vstate, cmpop_ty);
-static PyObject* ast2obj_comprehension(struct ast_state *state, struct
- validator *vstate, void*);
+static PyObject* ast2obj_expr_context(struct ast_state *state, expr_context_ty);
+static PyObject* ast2obj_boolop(struct ast_state *state, boolop_ty);
+static PyObject* ast2obj_operator(struct ast_state *state, operator_ty);
+static PyObject* ast2obj_unaryop(struct ast_state *state, unaryop_ty);
+static PyObject* ast2obj_cmpop(struct ast_state *state, cmpop_ty);
+static PyObject* ast2obj_comprehension(struct ast_state *state, void*);
static const char * const comprehension_fields[]={
"target",
"iter",
@@ -688,15 +674,13 @@ static const char * const excepthandler_attributes[] = {
"end_lineno",
"end_col_offset",
};
-static PyObject* ast2obj_excepthandler(struct ast_state *state, struct
- validator *vstate, void*);
+static PyObject* ast2obj_excepthandler(struct ast_state *state, void*);
static const char * const ExceptHandler_fields[]={
"type",
"name",
"body",
};
-static PyObject* ast2obj_arguments(struct ast_state *state, struct validator
- *vstate, void*);
+static PyObject* ast2obj_arguments(struct ast_state *state, void*);
static const char * const arguments_fields[]={
"posonlyargs",
"args",
@@ -706,8 +690,7 @@ static const char * const arguments_fields[]={
"kwarg",
"defaults",
};
-static PyObject* ast2obj_arg(struct ast_state *state, struct validator *vstate,
- void*);
+static PyObject* ast2obj_arg(struct ast_state *state, void*);
static const char * const arg_attributes[] = {
"lineno",
"col_offset",
@@ -719,8 +702,7 @@ static const char * const arg_fields[]={
"annotation",
"type_comment",
};
-static PyObject* ast2obj_keyword(struct ast_state *state, struct validator
- *vstate, void*);
+static PyObject* ast2obj_keyword(struct ast_state *state, void*);
static const char * const keyword_attributes[] = {
"lineno",
"col_offset",
@@ -731,8 +713,7 @@ static const char * const keyword_fields[]={
"arg",
"value",
};
-static PyObject* ast2obj_alias(struct ast_state *state, struct validator
- *vstate, void*);
+static PyObject* ast2obj_alias(struct ast_state *state, void*);
static const char * const alias_attributes[] = {
"lineno",
"col_offset",
@@ -743,14 +724,12 @@ static const char * const alias_fields[]={
"name",
"asname",
};
-static PyObject* ast2obj_withitem(struct ast_state *state, struct validator
- *vstate, void*);
+static PyObject* ast2obj_withitem(struct ast_state *state, void*);
static const char * const withitem_fields[]={
"context_expr",
"optional_vars",
};
-static PyObject* ast2obj_match_case(struct ast_state *state, struct validator
- *vstate, void*);
+static PyObject* ast2obj_match_case(struct ast_state *state, void*);
static const char * const match_case_fields[]={
"pattern",
"guard",
@@ -762,8 +741,7 @@ static const char * const pattern_attributes[] = {
"end_lineno",
"end_col_offset",
};
-static PyObject* ast2obj_pattern(struct ast_state *state, struct validator
- *vstate, void*);
+static PyObject* ast2obj_pattern(struct ast_state *state, void*);
static const char * const MatchValue_fields[]={
"value",
};
@@ -794,8 +772,7 @@ static const char * const MatchAs_fields[]={
static const char * const MatchOr_fields[]={
"patterns",
};
-static PyObject* ast2obj_type_ignore(struct ast_state *state, struct validator
- *vstate, void*);
+static PyObject* ast2obj_type_ignore(struct ast_state *state, void*);
static const char * const TypeIgnore_fields[]={
"lineno",
"tag",
@@ -806,8 +783,7 @@ static const char * const type_param_attributes[] = {
"end_lineno",
"end_col_offset",
};
-static PyObject* ast2obj_type_param(struct ast_state *state, struct validator
- *vstate, void*);
+static PyObject* ast2obj_type_param(struct ast_state *state, void*);
static const char * const TypeVar_fields[]={
"name",
"bound",
@@ -5933,8 +5909,8 @@ add_attributes(struct ast_state *state, PyObject *type, const char * const *attr
/* Conversion AST -> Python */
-static PyObject* ast2obj_list(struct ast_state *state, struct validator *vstate, asdl_seq *seq,
- PyObject* (*func)(struct ast_state *state, struct validator *vstate, void*))
+static PyObject* ast2obj_list(struct ast_state *state, asdl_seq *seq,
+ PyObject* (*func)(struct ast_state *state, void*))
{
Py_ssize_t i, n = asdl_seq_LEN(seq);
PyObject *result = PyList_New(n);
@@ -5942,7 +5918,7 @@ static PyObject* ast2obj_list(struct ast_state *state, struct validator *vstate,
if (!result)
return NULL;
for (i = 0; i < n; i++) {
- value = func(state, vstate, asdl_seq_GET_UNTYPED(seq, i));
+ value = func(state, asdl_seq_GET_UNTYPED(seq, i));
if (!value) {
Py_DECREF(result);
return NULL;
@@ -5952,7 +5928,7 @@ static PyObject* ast2obj_list(struct ast_state *state, struct validator *vstate,
return result;
}
-static PyObject* ast2obj_object(struct ast_state *Py_UNUSED(state), struct validator *Py_UNUSED(vstate), void *o)
+static PyObject* ast2obj_object(struct ast_state *Py_UNUSED(state), void *o)
{
PyObject *op = (PyObject*)o;
if (!op) {
@@ -5964,7 +5940,7 @@ static PyObject* ast2obj_object(struct ast_state *Py_UNUSED(state), struct valid
#define ast2obj_identifier ast2obj_object
#define ast2obj_string ast2obj_object
-static PyObject* ast2obj_int(struct ast_state *Py_UNUSED(state), struct validator *Py_UNUSED(vstate), long b)
+static PyObject* ast2obj_int(struct ast_state *Py_UNUSED(state), long b)
{
return PyLong_FromLong(b);
}
@@ -8712,7 +8688,7 @@ _PyAST_TypeVarTuple(identifier name, expr_ty default_value, int lineno, int
PyObject*
-ast2obj_mod(struct ast_state *state, struct validator *vstate, void* _o)
+ast2obj_mod(struct ast_state *state, void* _o)
{
mod_ty o = (mod_ty)_o;
PyObject *result = NULL, *value = NULL;
@@ -8720,9 +8696,7 @@ ast2obj_mod(struct ast_state *state, struct validator *vstate, void* _o)
if (!o) {
Py_RETURN_NONE;
}
- if (++vstate->recursion_depth > vstate->recursion_limit) {
- PyErr_SetString(PyExc_RecursionError,
- "maximum recursion depth exceeded during ast construction");
+ if (Py_EnterRecursiveCall("during ast construction")) {
return NULL;
}
switch (o->kind) {
@@ -8730,14 +8704,12 @@ ast2obj_mod(struct ast_state *state, struct validator *vstate, void* _o)
tp = (PyTypeObject *)state->Module_type;
result = PyType_GenericNew(tp, NULL, NULL);
if (!result) goto failed;
- value = ast2obj_list(state, vstate, (asdl_seq*)o->v.Module.body,
- ast2obj_stmt);
+ value = ast2obj_list(state, (asdl_seq*)o->v.Module.body, ast2obj_stmt);
if (!value) goto failed;
if (PyObject_SetAttr(result, state->body, value) == -1)
goto failed;
Py_DECREF(value);
- value = ast2obj_list(state, vstate,
- (asdl_seq*)o->v.Module.type_ignores,
+ value = ast2obj_list(state, (asdl_seq*)o->v.Module.type_ignores,
ast2obj_type_ignore);
if (!value) goto failed;
if (PyObject_SetAttr(result, state->type_ignores, value) == -1)
@@ -8748,7 +8720,7 @@ ast2obj_mod(struct ast_state *state, struct validator *vstate, void* _o)
tp = (PyTypeObject *)state->Interactive_type;
result = PyType_GenericNew(tp, NULL, NULL);
if (!result) goto failed;
- value = ast2obj_list(state, vstate, (asdl_seq*)o->v.Interactive.body,
+ value = ast2obj_list(state, (asdl_seq*)o->v.Interactive.body,
ast2obj_stmt);
if (!value) goto failed;
if (PyObject_SetAttr(result, state->body, value) == -1)
@@ -8759,7 +8731,7 @@ ast2obj_mod(struct ast_state *state, struct validator *vstate, void* _o)
tp = (PyTypeObject *)state->Expression_type;
result = PyType_GenericNew(tp, NULL, NULL);
if (!result) goto failed;
- value = ast2obj_expr(state, vstate, o->v.Expression.body);
+ value = ast2obj_expr(state, o->v.Expression.body);
if (!value) goto failed;
if (PyObject_SetAttr(result, state->body, value) == -1)
goto failed;
@@ -8769,31 +8741,30 @@ ast2obj_mod(struct ast_state *state, struct validator *vstate, void* _o)
tp = (PyTypeObject *)state->FunctionType_type;
result = PyType_GenericNew(tp, NULL, NULL);
if (!result) goto failed;
- value = ast2obj_list(state, vstate,
- (asdl_seq*)o->v.FunctionType.argtypes,
+ value = ast2obj_list(state, (asdl_seq*)o->v.FunctionType.argtypes,
ast2obj_expr);
if (!value) goto failed;
if (PyObject_SetAttr(result, state->argtypes, value) == -1)
goto failed;
Py_DECREF(value);
- value = ast2obj_expr(state, vstate, o->v.FunctionType.returns);
+ value = ast2obj_expr(state, o->v.FunctionType.returns);
if (!value) goto failed;
if (PyObject_SetAttr(result, state->returns, value) == -1)
goto failed;
Py_DECREF(value);
break;
}
- vstate->recursion_depth--;
+ Py_LeaveRecursiveCall();
return result;
failed:
- vstate->recursion_depth--;
+ Py_LeaveRecursiveCall();
Py_XDECREF(value);
Py_XDECREF(result);
return NULL;
}
PyObject*
-ast2obj_stmt(struct ast_state *state, struct validator *vstate, void* _o)
+ast2obj_stmt(struct ast_state *state, void* _o)
{
stmt_ty o = (stmt_ty)_o;
PyObject *result = NULL, *value = NULL;
@@ -8801,9 +8772,7 @@ ast2obj_stmt(struct ast_state *state, struct validator *vstate, void* _o)
if (!o) {
Py_RETURN_NONE;
}
- if (++vstate->recursion_depth > vstate->recursion_limit) {
- PyErr_SetString(PyExc_RecursionError,
- "maximum recursion depth exceeded during ast construction");
+ if (Py_EnterRecursiveCall("during ast construction")) {
return NULL;
}
switch (o->kind) {
@@ -8811,41 +8780,39 @@ ast2obj_stmt(struct ast_state *state, struct validator *vstate, void* _o)
tp = (PyTypeObject *)state->FunctionDef_type;
result = PyType_GenericNew(tp, NULL, NULL);
if (!result) goto failed;
- value = ast2obj_identifier(state, vstate, o->v.FunctionDef.name);
+ value = ast2obj_identifier(state, o->v.FunctionDef.name);
if (!value) goto failed;
if (PyObject_SetAttr(result, state->name, value) == -1)
goto failed;
Py_DECREF(value);
- value = ast2obj_arguments(state, vstate, o->v.FunctionDef.args);
+ value = ast2obj_arguments(state, o->v.FunctionDef.args);
if (!value) goto failed;
if (PyObject_SetAttr(result, state->args, value) == -1)
goto failed;
Py_DECREF(value);
- value = ast2obj_list(state, vstate, (asdl_seq*)o->v.FunctionDef.body,
+ value = ast2obj_list(state, (asdl_seq*)o->v.FunctionDef.body,
ast2obj_stmt);
if (!value) goto failed;
if (PyObject_SetAttr(result, state->body, value) == -1)
goto failed;
Py_DECREF(value);
- value = ast2obj_list(state, vstate,
- (asdl_seq*)o->v.FunctionDef.decorator_list,
+ value = ast2obj_list(state, (asdl_seq*)o->v.FunctionDef.decorator_list,
ast2obj_expr);
if (!value) goto failed;
if (PyObject_SetAttr(result, state->decorator_list, value) == -1)
goto failed;
Py_DECREF(value);
- value = ast2obj_expr(state, vstate, o->v.FunctionDef.returns);
+ value = ast2obj_expr(state, o->v.FunctionDef.returns);
if (!value) goto failed;
if (PyObject_SetAttr(result, state->returns, value) == -1)
goto failed;
Py_DECREF(value);
- value = ast2obj_string(state, vstate, o->v.FunctionDef.type_comment);
+ value = ast2obj_string(state, o->v.FunctionDef.type_comment);
if (!value) goto failed;
if (PyObject_SetAttr(result, state->type_comment, value) == -1)
goto failed;
Py_DECREF(value);
- value = ast2obj_list(state, vstate,
- (asdl_seq*)o->v.FunctionDef.type_params,
+ value = ast2obj_list(state, (asdl_seq*)o->v.FunctionDef.type_params,
ast2obj_type_param);
if (!value) goto failed;
if (PyObject_SetAttr(result, state->type_params, value) == -1)
@@ -8856,41 +8823,40 @@ ast2obj_stmt(struct ast_state *state, struct validator *vstate, void* _o)
tp = (PyTypeObject *)state->AsyncFunctionDef_type;
result = PyType_GenericNew(tp, NULL, NULL);
if (!result) goto failed;
- value = ast2obj_identifier(state, vstate, o->v.AsyncFunctionDef.name);
+ value = ast2obj_identifier(state, o->v.AsyncFunctionDef.name);
if (!value) goto failed;
if (PyObject_SetAttr(result, state->name, value) == -1)
goto failed;
Py_DECREF(value);
- value = ast2obj_arguments(state, vstate, o->v.AsyncFunctionDef.args);
+ value = ast2obj_arguments(state, o->v.AsyncFunctionDef.args);
if (!value) goto failed;
if (PyObject_SetAttr(result, state->args, value) == -1)
goto failed;
Py_DECREF(value);
- value = ast2obj_list(state, vstate,
- (asdl_seq*)o->v.AsyncFunctionDef.body,
+ value = ast2obj_list(state, (asdl_seq*)o->v.AsyncFunctionDef.body,
ast2obj_stmt);
if (!value) goto failed;
if (PyObject_SetAttr(result, state->body, value) == -1)
goto failed;
Py_DECREF(value);
- value = ast2obj_list(state, vstate,
+ value = ast2obj_list(state,
(asdl_seq*)o->v.AsyncFunctionDef.decorator_list,
ast2obj_expr);
if (!value) goto failed;
if (PyObject_SetAttr(result, state->decorator_list, value) == -1)
goto failed;
Py_DECREF(value);
- value = ast2obj_expr(state, vstate, o->v.AsyncFunctionDef.returns);
+ value = ast2obj_expr(state, o->v.AsyncFunctionDef.returns);
if (!value) goto failed;
if (PyObject_SetAttr(result, state->returns, value) == -1)
goto failed;
Py_DECREF(value);
- value = ast2obj_string(state, vstate, o->v.AsyncFunctionDef.type_comment);
+ value = ast2obj_string(state, o->v.AsyncFunctionDef.type_comment);
if (!value) goto failed;
if (PyObject_SetAttr(result, state->type_comment, value) == -1)
goto failed;
Py_DECREF(value);
- value = ast2obj_list(state, vstate,
+ value = ast2obj_list(state,
(asdl_seq*)o->v.AsyncFunctionDef.type_params,
ast2obj_type_param);
if (!value) goto failed;
@@ -8902,38 +8868,36 @@ ast2obj_stmt(struct ast_state *state, struct validator *vstate, void* _o)
tp = (PyTypeObject *)state->ClassDef_type;
result = PyType_GenericNew(tp, NULL, NULL);
if (!result) goto failed;
- value = ast2obj_identifier(state, vstate, o->v.ClassDef.name);
+ value = ast2obj_identifier(state, o->v.ClassDef.name);
if (!value) goto failed;
if (PyObject_SetAttr(result, state->name, value) == -1)
goto failed;
Py_DECREF(value);
- value = ast2obj_list(state, vstate, (asdl_seq*)o->v.ClassDef.bases,
+ value = ast2obj_list(state, (asdl_seq*)o->v.ClassDef.bases,
ast2obj_expr);
if (!value) goto failed;
if (PyObject_SetAttr(result, state->bases, value) == -1)
goto failed;
Py_DECREF(value);
- value = ast2obj_list(state, vstate, (asdl_seq*)o->v.ClassDef.keywords,
+ value = ast2obj_list(state, (asdl_seq*)o->v.ClassDef.keywords,
ast2obj_keyword);
if (!value) goto failed;
if (PyObject_SetAttr(result, state->keywords, value) == -1)
goto failed;
Py_DECREF(value);
- value = ast2obj_list(state, vstate, (asdl_seq*)o->v.ClassDef.body,
+ value = ast2obj_list(state, (asdl_seq*)o->v.ClassDef.body,
ast2obj_stmt);
if (!value) goto failed;
if (PyObject_SetAttr(result, state->body, value) == -1)
goto failed;
Py_DECREF(value);
- value = ast2obj_list(state, vstate,
- (asdl_seq*)o->v.ClassDef.decorator_list,
+ value = ast2obj_list(state, (asdl_seq*)o->v.ClassDef.decorator_list,
ast2obj_expr);
if (!value) goto failed;
if (PyObject_SetAttr(result, state->decorator_list, value) == -1)
goto failed;
Py_DECREF(value);
- value = ast2obj_list(state, vstate,
- (asdl_seq*)o->v.ClassDef.type_params,
+ value = ast2obj_list(state, (asdl_seq*)o->v.ClassDef.type_params,
ast2obj_type_param);
if (!value) goto failed;
if (PyObject_SetAttr(result, state->type_params, value) == -1)
@@ -8944,7 +8908,7 @@ ast2obj_stmt(struct ast_state *state, struct validator *vstate, void* _o)
tp = (PyTypeObject *)state->Return_type;
result = PyType_GenericNew(tp, NULL, NULL);
if (!result) goto failed;
- value = ast2obj_expr(state, vstate, o->v.Return.value);
+ value = ast2obj_expr(state, o->v.Return.value);
if (!value) goto failed;
if (PyObject_SetAttr(result, state->value, value) == -1)
goto failed;
@@ -8954,7 +8918,7 @@ ast2obj_stmt(struct ast_state *state, struct validator *vstate, void* _o)
tp = (PyTypeObject *)state->Delete_type;
result = PyType_GenericNew(tp, NULL, NULL);
if (!result) goto failed;
- value = ast2obj_list(state, vstate, (asdl_seq*)o->v.Delete.targets,
+ value = ast2obj_list(state, (asdl_seq*)o->v.Delete.targets,
ast2obj_expr);
if (!value) goto failed;
if (PyObject_SetAttr(result, state->targets, value) == -1)
@@ -8965,18 +8929,18 @@ ast2obj_stmt(struct ast_state *state, struct validator *vstate, void* _o)
tp = (PyTypeObject *)state->Assign_type;
result = PyType_GenericNew(tp, NULL, NULL);
if (!result) goto failed;
- value = ast2obj_list(state, vstate, (asdl_seq*)o->v.Assign.targets,
+ value = ast2obj_list(state, (asdl_seq*)o->v.Assign.targets,
ast2obj_expr);
if (!value) goto failed;
if (PyObject_SetAttr(result, state->targets, value) == -1)
goto failed;
Py_DECREF(value);
- value = ast2obj_expr(state, vstate, o->v.Assign.value);
+ value = ast2obj_expr(state, o->v.Assign.value);
if (!value) goto failed;
if (PyObject_SetAttr(result, state->value, value) == -1)
goto failed;
Py_DECREF(value);
- value = ast2obj_string(state, vstate, o->v.Assign.type_comment);
+ value = ast2obj_string(state, o->v.Assign.type_comment);
if (!value) goto failed;
if (PyObject_SetAttr(result, state->type_comment, value) == -1)
goto failed;
@@ -8986,19 +8950,18 @@ ast2obj_stmt(struct ast_state *state, struct validator *vstate, void* _o)
tp = (PyTypeObject *)state->TypeAlias_type;
result = PyType_GenericNew(tp, NULL, NULL);
if (!result) goto failed;
- value = ast2obj_expr(state, vstate, o->v.TypeAlias.name);
+ value = ast2obj_expr(state, o->v.TypeAlias.name);
if (!value) goto failed;
if (PyObject_SetAttr(result, state->name, value) == -1)
goto failed;
Py_DECREF(value);
- value = ast2obj_list(state, vstate,
- (asdl_seq*)o->v.TypeAlias.type_params,
+ value = ast2obj_list(state, (asdl_seq*)o->v.TypeAlias.type_params,
ast2obj_type_param);
if (!value) goto failed;
if (PyObject_SetAttr(result, state->type_params, value) == -1)
goto failed;
Py_DECREF(value);
- value = ast2obj_expr(state, vstate, o->v.TypeAlias.value);
+ value = ast2obj_expr(state, o->v.TypeAlias.value);
if (!value) goto failed;
if (PyObject_SetAttr(result, state->value, value) == -1)
goto failed;
@@ -9008,17 +8971,17 @@ ast2obj_stmt(struct ast_state *state, struct validator *vstate, void* _o)
tp = (PyTypeObject *)state->AugAssign_type;
result = PyType_GenericNew(tp, NULL, NULL);
if (!result) goto failed;
- value = ast2obj_expr(state, vstate, o->v.AugAssign.target);
+ value = ast2obj_expr(state, o->v.AugAssign.target);
if (!value) goto failed;
if (PyObject_SetAttr(result, state->target, value) == -1)
goto failed;
Py_DECREF(value);
- value = ast2obj_operator(state, vstate, o->v.AugAssign.op);
+ value = ast2obj_operator(state, o->v.AugAssign.op);
if (!value) goto failed;
if (PyObject_SetAttr(result, state->op, value) == -1)
goto failed;
Py_DECREF(value);
- value = ast2obj_expr(state, vstate, o->v.AugAssign.value);
+ value = ast2obj_expr(state, o->v.AugAssign.value);
if (!value) goto failed;
if (PyObject_SetAttr(result, state->value, value) == -1)
goto failed;
@@ -9028,22 +8991,22 @@ ast2obj_stmt(struct ast_state *state, struct validator *vstate, void* _o)
tp = (PyTypeObject *)state->AnnAssign_type;
result = PyType_GenericNew(tp, NULL, NULL);
if (!result) goto failed;
- value = ast2obj_expr(state, vstate, o->v.AnnAssign.target);
+ value = ast2obj_expr(state, o->v.AnnAssign.target);
if (!value) goto failed;
if (PyObject_SetAttr(result, state->target, value) == -1)
goto failed;
Py_DECREF(value);
- value = ast2obj_expr(state, vstate, o->v.AnnAssign.annotation);
+ value = ast2obj_expr(state, o->v.AnnAssign.annotation);
if (!value) goto failed;
if (PyObject_SetAttr(result, state->annotation, value) == -1)
goto failed;
Py_DECREF(value);
- value = ast2obj_expr(state, vstate, o->v.AnnAssign.value);
+ value = ast2obj_expr(state, o->v.AnnAssign.value);
if (!value) goto failed;
if (PyObject_SetAttr(result, state->value, value) == -1)
goto failed;
Py_DECREF(value);
- value = ast2obj_int(state, vstate, o->v.AnnAssign.simple);
+ value = ast2obj_int(state, o->v.AnnAssign.simple);
if (!value) goto failed;
if (PyObject_SetAttr(result, state->simple, value) == -1)
goto failed;
@@ -9053,29 +9016,27 @@ ast2obj_stmt(struct ast_state *state, struct validator *vstate, void* _o)
tp = (PyTypeObject *)state->For_type;
result = PyType_GenericNew(tp, NULL, NULL);
if (!result) goto failed;
- value = ast2obj_expr(state, vstate, o->v.For.target);
+ value = ast2obj_expr(state, o->v.For.target);
if (!value) goto failed;
if (PyObject_SetAttr(result, state->target, value) == -1)
goto failed;
Py_DECREF(value);
- value = ast2obj_expr(state, vstate, o->v.For.iter);
+ value = ast2obj_expr(state, o->v.For.iter);
if (!value) goto failed;
if (PyObject_SetAttr(result, state->iter, value) == -1)
goto failed;
Py_DECREF(value);
- value = ast2obj_list(state, vstate, (asdl_seq*)o->v.For.body,
- ast2obj_stmt);
+ value = ast2obj_list(state, (asdl_seq*)o->v.For.body, ast2obj_stmt);
if (!value) goto failed;
if (PyObject_SetAttr(result, state->body, value) == -1)
goto failed;
Py_DECREF(value);
- value = ast2obj_list(state, vstate, (asdl_seq*)o->v.For.orelse,
- ast2obj_stmt);
+ value = ast2obj_list(state, (asdl_seq*)o->v.For.orelse, ast2obj_stmt);
if (!value) goto failed;
if (PyObject_SetAttr(result, state->orelse, value) == -1)
goto failed;
Py_DECREF(value);
- value = ast2obj_string(state, vstate, o->v.For.type_comment);
+ value = ast2obj_string(state, o->v.For.type_comment);
if (!value) goto failed;
if (PyObject_SetAttr(result, state->type_comment, value) == -1)
goto failed;
@@ -9085,29 +9046,29 @@ ast2obj_stmt(struct ast_state *state, struct validator *vstate, void* _o)
tp = (PyTypeObject *)state->AsyncFor_type;
result = PyType_GenericNew(tp, NULL, NULL);
if (!result) goto failed;
- value = ast2obj_expr(state, vstate, o->v.AsyncFor.target);
+ value = ast2obj_expr(state, o->v.AsyncFor.target);
if (!value) goto failed;
if (PyObject_SetAttr(result, state->target, value) == -1)
goto failed;
Py_DECREF(value);
- value = ast2obj_expr(state, vstate, o->v.AsyncFor.iter);
+ value = ast2obj_expr(state, o->v.AsyncFor.iter);
if (!value) goto failed;
if (PyObject_SetAttr(result, state->iter, value) == -1)
goto failed;
Py_DECREF(value);
- value = ast2obj_list(state, vstate, (asdl_seq*)o->v.AsyncFor.body,
+ value = ast2obj_list(state, (asdl_seq*)o->v.AsyncFor.body,
ast2obj_stmt);
if (!value) goto failed;
if (PyObject_SetAttr(result, state->body, value) == -1)
goto failed;
Py_DECREF(value);
- value = ast2obj_list(state, vstate, (asdl_seq*)o->v.AsyncFor.orelse,
+ value = ast2obj_list(state, (asdl_seq*)o->v.AsyncFor.orelse,
ast2obj_stmt);
if (!value) goto failed;
if (PyObject_SetAttr(result, state->orelse, value) == -1)
goto failed;
Py_DECREF(value);
- value = ast2obj_string(state, vstate, o->v.AsyncFor.type_comment);
+ value = ast2obj_string(state, o->v.AsyncFor.type_comment);
if (!value) goto failed;
if (PyObject_SetAttr(result, state->type_comment, value) == -1)
goto failed;
@@ -9117,19 +9078,17 @@ ast2obj_stmt(struct ast_state *state, struct validator *vstate, void* _o)
tp = (PyTypeObject *)state->While_type;
result = PyType_GenericNew(tp, NULL, NULL);
if (!result) goto failed;
- value = ast2obj_expr(state, vstate, o->v.While.test);
+ value = ast2obj_expr(state, o->v.While.test);
if (!value) goto failed;
if (PyObject_SetAttr(result, state->test, value) == -1)
goto failed;
Py_DECREF(value);
- value = ast2obj_list(state, vstate, (asdl_seq*)o->v.While.body,
- ast2obj_stmt);
+ value = ast2obj_list(state, (asdl_seq*)o->v.While.body, ast2obj_stmt);
if (!value) goto failed;
if (PyObject_SetAttr(result, state->body, value) == -1)
goto failed;
Py_DECREF(value);
- value = ast2obj_list(state, vstate, (asdl_seq*)o->v.While.orelse,
- ast2obj_stmt);
+ value = ast2obj_list(state, (asdl_seq*)o->v.While.orelse, ast2obj_stmt);
if (!value) goto failed;
if (PyObject_SetAttr(result, state->orelse, value) == -1)
goto failed;
@@ -9139,19 +9098,17 @@ ast2obj_stmt(struct ast_state *state, struct validator *vstate, void* _o)
tp = (PyTypeObject *)state->If_type;
result = PyType_GenericNew(tp, NULL, NULL);
if (!result) goto failed;
- value = ast2obj_expr(state, vstate, o->v.If.test);
+ value = ast2obj_expr(state, o->v.If.test);
if (!value) goto failed;
if (PyObject_SetAttr(result, state->test, value) == -1)
goto failed;
Py_DECREF(value);
- value = ast2obj_list(state, vstate, (asdl_seq*)o->v.If.body,
- ast2obj_stmt);
+ value = ast2obj_list(state, (asdl_seq*)o->v.If.body, ast2obj_stmt);
if (!value) goto failed;
if (PyObject_SetAttr(result, state->body, value) == -1)
goto failed;
Py_DECREF(value);
- value = ast2obj_list(state, vstate, (asdl_seq*)o->v.If.orelse,
- ast2obj_stmt);
+ value = ast2obj_list(state, (asdl_seq*)o->v.If.orelse, ast2obj_stmt);
if (!value) goto failed;
if (PyObject_SetAttr(result, state->orelse, value) == -1)
goto failed;
@@ -9161,19 +9118,18 @@ ast2obj_stmt(struct ast_state *state, struct validator *vstate, void* _o)
tp = (PyTypeObject *)state->With_type;
result = PyType_GenericNew(tp, NULL, NULL);
if (!result) goto failed;
- value = ast2obj_list(state, vstate, (asdl_seq*)o->v.With.items,
+ value = ast2obj_list(state, (asdl_seq*)o->v.With.items,
ast2obj_withitem);
if (!value) goto failed;
if (PyObject_SetAttr(result, state->items, value) == -1)
goto failed;
Py_DECREF(value);
- value = ast2obj_list(state, vstate, (asdl_seq*)o->v.With.body,
- ast2obj_stmt);
+ value = ast2obj_list(state, (asdl_seq*)o->v.With.body, ast2obj_stmt);
if (!value) goto failed;
if (PyObject_SetAttr(result, state->body, value) == -1)
goto failed;
Py_DECREF(value);
- value = ast2obj_string(state, vstate, o->v.With.type_comment);
+ value = ast2obj_string(state, o->v.With.type_comment);
if (!value) goto failed;
if (PyObject_SetAttr(result, state->type_comment, value) == -1)
goto failed;
@@ -9183,19 +9139,19 @@ ast2obj_stmt(struct ast_state *state, struct validator *vstate, void* _o)
tp = (PyTypeObject *)state->AsyncWith_type;
result = PyType_GenericNew(tp, NULL, NULL);
if (!result) goto failed;
- value = ast2obj_list(state, vstate, (asdl_seq*)o->v.AsyncWith.items,
+ value = ast2obj_list(state, (asdl_seq*)o->v.AsyncWith.items,
ast2obj_withitem);
if (!value) goto failed;
if (PyObject_SetAttr(result, state->items, value) == -1)
goto failed;
Py_DECREF(value);
- value = ast2obj_list(state, vstate, (asdl_seq*)o->v.AsyncWith.body,
+ value = ast2obj_list(state, (asdl_seq*)o->v.AsyncWith.body,
ast2obj_stmt);
if (!value) goto failed;
if (PyObject_SetAttr(result, state->body, value) == -1)
goto failed;
Py_DECREF(value);
- value = ast2obj_string(state, vstate, o->v.AsyncWith.type_comment);
+ value = ast2obj_string(state, o->v.AsyncWith.type_comment);
if (!value) goto failed;
if (PyObject_SetAttr(result, state->type_comment, value) == -1)
goto failed;
@@ -9205,12 +9161,12 @@ ast2obj_stmt(struct ast_state *state, struct validator *vstate, void* _o)
tp = (PyTypeObject *)state->Match_type;
result = PyType_GenericNew(tp, NULL, NULL);
if (!result) goto failed;
- value = ast2obj_expr(state, vstate, o->v.Match.subject);
+ value = ast2obj_expr(state, o->v.Match.subject);
if (!value) goto failed;
if (PyObject_SetAttr(result, state->subject, value) == -1)
goto failed;
Py_DECREF(value);
- value = ast2obj_list(state, vstate, (asdl_seq*)o->v.Match.cases,
+ value = ast2obj_list(state, (asdl_seq*)o->v.Match.cases,
ast2obj_match_case);
if (!value) goto failed;
if (PyObject_SetAttr(result, state->cases, value) == -1)
@@ -9221,12 +9177,12 @@ ast2obj_stmt(struct ast_state *state, struct validator *vstate, void* _o)
tp = (PyTypeObject *)state->Raise_type;
result = PyType_GenericNew(tp, NULL, NULL);
if (!result) goto failed;
- value = ast2obj_expr(state, vstate, o->v.Raise.exc);
+ value = ast2obj_expr(state, o->v.Raise.exc);
if (!value) goto failed;
if (PyObject_SetAttr(result, state->exc, value) == -1)
goto failed;
Py_DECREF(value);
- value = ast2obj_expr(state, vstate, o->v.Raise.cause);
+ value = ast2obj_expr(state, o->v.Raise.cause);
if (!value) goto failed;
if (PyObject_SetAttr(result, state->cause, value) == -1)
goto failed;
@@ -9236,25 +9192,23 @@ ast2obj_stmt(struct ast_state *state, struct validator *vstate, void* _o)
tp = (PyTypeObject *)state->Try_type;
result = PyType_GenericNew(tp, NULL, NULL);
if (!result) goto failed;
- value = ast2obj_list(state, vstate, (asdl_seq*)o->v.Try.body,
- ast2obj_stmt);
+ value = ast2obj_list(state, (asdl_seq*)o->v.Try.body, ast2obj_stmt);
if (!value) goto failed;
if (PyObject_SetAttr(result, state->body, value) == -1)
goto failed;
Py_DECREF(value);
- value = ast2obj_list(state, vstate, (asdl_seq*)o->v.Try.handlers,
+ value = ast2obj_list(state, (asdl_seq*)o->v.Try.handlers,
ast2obj_excepthandler);
if (!value) goto failed;
if (PyObject_SetAttr(result, state->handlers, value) == -1)
goto failed;
Py_DECREF(value);
- value = ast2obj_list(state, vstate, (asdl_seq*)o->v.Try.orelse,
- ast2obj_stmt);
+ value = ast2obj_list(state, (asdl_seq*)o->v.Try.orelse, ast2obj_stmt);
if (!value) goto failed;
if (PyObject_SetAttr(result, state->orelse, value) == -1)
goto failed;
Py_DECREF(value);
- value = ast2obj_list(state, vstate, (asdl_seq*)o->v.Try.finalbody,
+ value = ast2obj_list(state, (asdl_seq*)o->v.Try.finalbody,
ast2obj_stmt);
if (!value) goto failed;
if (PyObject_SetAttr(result, state->finalbody, value) == -1)
@@ -9265,25 +9219,24 @@ ast2obj_stmt(struct ast_state *state, struct validator *vstate, void* _o)
tp = (PyTypeObject *)state->TryStar_type;
result = PyType_GenericNew(tp, NULL, NULL);
if (!result) goto failed;
- value = ast2obj_list(state, vstate, (asdl_seq*)o->v.TryStar.body,
- ast2obj_stmt);
+ value = ast2obj_list(state, (asdl_seq*)o->v.TryStar.body, ast2obj_stmt);
if (!value) goto failed;
if (PyObject_SetAttr(result, state->body, value) == -1)
goto failed;
Py_DECREF(value);
- value = ast2obj_list(state, vstate, (asdl_seq*)o->v.TryStar.handlers,
+ value = ast2obj_list(state, (asdl_seq*)o->v.TryStar.handlers,
ast2obj_excepthandler);
if (!value) goto failed;
if (PyObject_SetAttr(result, state->handlers, value) == -1)
goto failed;
Py_DECREF(value);
- value = ast2obj_list(state, vstate, (asdl_seq*)o->v.TryStar.orelse,
+ value = ast2obj_list(state, (asdl_seq*)o->v.TryStar.orelse,
ast2obj_stmt);
if (!value) goto failed;
if (PyObject_SetAttr(result, state->orelse, value) == -1)
goto failed;
Py_DECREF(value);
- value = ast2obj_list(state, vstate, (asdl_seq*)o->v.TryStar.finalbody,
+ value = ast2obj_list(state, (asdl_seq*)o->v.TryStar.finalbody,
ast2obj_stmt);
if (!value) goto failed;
if (PyObject_SetAttr(result, state->finalbody, value) == -1)
@@ -9294,12 +9247,12 @@ ast2obj_stmt(struct ast_state *state, struct validator *vstate, void* _o)
tp = (PyTypeObject *)state->Assert_type;
result = PyType_GenericNew(tp, NULL, NULL);
if (!result) goto failed;
- value = ast2obj_expr(state, vstate, o->v.Assert.test);
+ value = ast2obj_expr(state, o->v.Assert.test);
if (!value) goto failed;
if (PyObject_SetAttr(result, state->test, value) == -1)
goto failed;
Py_DECREF(value);
- value = ast2obj_expr(state, vstate, o->v.Assert.msg);
+ value = ast2obj_expr(state, o->v.Assert.msg);
if (!value) goto failed;
if (PyObject_SetAttr(result, state->msg, value) == -1)
goto failed;
@@ -9309,7 +9262,7 @@ ast2obj_stmt(struct ast_state *state, struct validator *vstate, void* _o)
tp = (PyTypeObject *)state->Import_type;
result = PyType_GenericNew(tp, NULL, NULL);
if (!result) goto failed;
- value = ast2obj_list(state, vstate, (asdl_seq*)o->v.Import.names,
+ value = ast2obj_list(state, (asdl_seq*)o->v.Import.names,
ast2obj_alias);
if (!value) goto failed;
if (PyObject_SetAttr(result, state->names, value) == -1)
@@ -9320,18 +9273,18 @@ ast2obj_stmt(struct ast_state *state, struct validator *vstate, void* _o)
tp = (PyTypeObject *)state->ImportFrom_type;
result = PyType_GenericNew(tp, NULL, NULL);
if (!result) goto failed;
- value = ast2obj_identifier(state, vstate, o->v.ImportFrom.module);
+ value = ast2obj_identifier(state, o->v.ImportFrom.module);
if (!value) goto failed;
if (PyObject_SetAttr(result, state->module, value) == -1)
goto failed;
Py_DECREF(value);
- value = ast2obj_list(state, vstate, (asdl_seq*)o->v.ImportFrom.names,
+ value = ast2obj_list(state, (asdl_seq*)o->v.ImportFrom.names,
ast2obj_alias);
if (!value) goto failed;
if (PyObject_SetAttr(result, state->names, value) == -1)
goto failed;
Py_DECREF(value);
- value = ast2obj_int(state, vstate, o->v.ImportFrom.level);
+ value = ast2obj_int(state, o->v.ImportFrom.level);
if (!value) goto failed;
if (PyObject_SetAttr(result, state->level, value) == -1)
goto failed;
@@ -9341,7 +9294,7 @@ ast2obj_stmt(struct ast_state *state, struct validator *vstate, void* _o)
tp = (PyTypeObject *)state->Global_type;
result = PyType_GenericNew(tp, NULL, NULL);
if (!result) goto failed;
- value = ast2obj_list(state, vstate, (asdl_seq*)o->v.Global.names,
+ value = ast2obj_list(state, (asdl_seq*)o->v.Global.names,
ast2obj_identifier);
if (!value) goto failed;
if (PyObject_SetAttr(result, state->names, value) == -1)
@@ -9352,7 +9305,7 @@ ast2obj_stmt(struct ast_state *state, struct validator *vstate, void* _o)
tp = (PyTypeObject *)state->Nonlocal_type;
result = PyType_GenericNew(tp, NULL, NULL);
if (!result) goto failed;
- value = ast2obj_list(state, vstate, (asdl_seq*)o->v.Nonlocal.names,
+ value = ast2obj_list(state, (asdl_seq*)o->v.Nonlocal.names,
ast2obj_identifier);
if (!value) goto failed;
if (PyObject_SetAttr(result, state->names, value) == -1)
@@ -9363,7 +9316,7 @@ ast2obj_stmt(struct ast_state *state, struct validator *vstate, void* _o)
tp = (PyTypeObject *)state->Expr_type;
result = PyType_GenericNew(tp, NULL, NULL);
if (!result) goto failed;
- value = ast2obj_expr(state, vstate, o->v.Expr.value);
+ value = ast2obj_expr(state, o->v.Expr.value);
if (!value) goto failed;
if (PyObject_SetAttr(result, state->value, value) == -1)
goto failed;
@@ -9385,37 +9338,37 @@ ast2obj_stmt(struct ast_state *state, struct validator *vstate, void* _o)
if (!result) goto failed;
break;
}
- value = ast2obj_int(state, vstate, o->lineno);
+ value = ast2obj_int(state, o->lineno);
if (!value) goto failed;
if (PyObject_SetAttr(result, state->lineno, value) < 0)
goto failed;
Py_DECREF(value);
- value = ast2obj_int(state, vstate, o->col_offset);
+ value = ast2obj_int(state, o->col_offset);
if (!value) goto failed;
if (PyObject_SetAttr(result, state->col_offset, value) < 0)
goto failed;
Py_DECREF(value);
- value = ast2obj_int(state, vstate, o->end_lineno);
+ value = ast2obj_int(state, o->end_lineno);
if (!value) goto failed;
if (PyObject_SetAttr(result, state->end_lineno, value) < 0)
goto failed;
Py_DECREF(value);
- value = ast2obj_int(state, vstate, o->end_col_offset);
+ value = ast2obj_int(state, o->end_col_offset);
if (!value) goto failed;
if (PyObject_SetAttr(result, state->end_col_offset, value) < 0)
goto failed;
Py_DECREF(value);
- vstate->recursion_depth--;
+ Py_LeaveRecursiveCall();
return result;
failed:
- vstate->recursion_depth--;
+ Py_LeaveRecursiveCall();
Py_XDECREF(value);
Py_XDECREF(result);
return NULL;
}
PyObject*
-ast2obj_expr(struct ast_state *state, struct validator *vstate, void* _o)
+ast2obj_expr(struct ast_state *state, void* _o)
{
expr_ty o = (expr_ty)_o;
PyObject *result = NULL, *value = NULL;
@@ -9423,9 +9376,7 @@ ast2obj_expr(struct ast_state *state, struct validator *vstate, void* _o)
if (!o) {
Py_RETURN_NONE;
}
- if (++vstate->recursion_depth > vstate->recursion_limit) {
- PyErr_SetString(PyExc_RecursionError,
- "maximum recursion depth exceeded during ast construction");
+ if (Py_EnterRecursiveCall("during ast construction")) {
return NULL;
}
switch (o->kind) {
@@ -9433,12 +9384,12 @@ ast2obj_expr(struct ast_state *state, struct validator *vstate, void* _o)
tp = (PyTypeObject *)state->BoolOp_type;
result = PyType_GenericNew(tp, NULL, NULL);
if (!result) goto failed;
- value = ast2obj_boolop(state, vstate, o->v.BoolOp.op);
+ value = ast2obj_boolop(state, o->v.BoolOp.op);
if (!value) goto failed;
if (PyObject_SetAttr(result, state->op, value) == -1)
goto failed;
Py_DECREF(value);
- value = ast2obj_list(state, vstate, (asdl_seq*)o->v.BoolOp.values,
+ value = ast2obj_list(state, (asdl_seq*)o->v.BoolOp.values,
ast2obj_expr);
if (!value) goto failed;
if (PyObject_SetAttr(result, state->values, value) == -1)
@@ -9449,12 +9400,12 @@ ast2obj_expr(struct ast_state *state, struct validator *vstate, void* _o)
tp = (PyTypeObject *)state->NamedExpr_type;
result = PyType_GenericNew(tp, NULL, NULL);
if (!result) goto failed;
- value = ast2obj_expr(state, vstate, o->v.NamedExpr.target);
+ value = ast2obj_expr(state, o->v.NamedExpr.target);
if (!value) goto failed;
if (PyObject_SetAttr(result, state->target, value) == -1)
goto failed;
Py_DECREF(value);
- value = ast2obj_expr(state, vstate, o->v.NamedExpr.value);
+ value = ast2obj_expr(state, o->v.NamedExpr.value);
if (!value) goto failed;
if (PyObject_SetAttr(result, state->value, value) == -1)
goto failed;
@@ -9464,17 +9415,17 @@ ast2obj_expr(struct ast_state *state, struct validator *vstate, void* _o)
tp = (PyTypeObject *)state->BinOp_type;
result = PyType_GenericNew(tp, NULL, NULL);
if (!result) goto failed;
- value = ast2obj_expr(state, vstate, o->v.BinOp.left);
+ value = ast2obj_expr(state, o->v.BinOp.left);
if (!value) goto failed;
if (PyObject_SetAttr(result, state->left, value) == -1)
goto failed;
Py_DECREF(value);
- value = ast2obj_operator(state, vstate, o->v.BinOp.op);
+ value = ast2obj_operator(state, o->v.BinOp.op);
if (!value) goto failed;
if (PyObject_SetAttr(result, state->op, value) == -1)
goto failed;
Py_DECREF(value);
- value = ast2obj_expr(state, vstate, o->v.BinOp.right);
+ value = ast2obj_expr(state, o->v.BinOp.right);
if (!value) goto failed;
if (PyObject_SetAttr(result, state->right, value) == -1)
goto failed;
@@ -9484,12 +9435,12 @@ ast2obj_expr(struct ast_state *state, struct validator *vstate, void* _o)
tp = (PyTypeObject *)state->UnaryOp_type;
result = PyType_GenericNew(tp, NULL, NULL);
if (!result) goto failed;
- value = ast2obj_unaryop(state, vstate, o->v.UnaryOp.op);
+ value = ast2obj_unaryop(state, o->v.UnaryOp.op);
if (!value) goto failed;
if (PyObject_SetAttr(result, state->op, value) == -1)
goto failed;
Py_DECREF(value);
- value = ast2obj_expr(state, vstate, o->v.UnaryOp.operand);
+ value = ast2obj_expr(state, o->v.UnaryOp.operand);
if (!value) goto failed;
if (PyObject_SetAttr(result, state->operand, value) == -1)
goto failed;
@@ -9499,12 +9450,12 @@ ast2obj_expr(struct ast_state *state, struct validator *vstate, void* _o)
tp = (PyTypeObject *)state->Lambda_type;
result = PyType_GenericNew(tp, NULL, NULL);
if (!result) goto failed;
- value = ast2obj_arguments(state, vstate, o->v.Lambda.args);
+ value = ast2obj_arguments(state, o->v.Lambda.args);
if (!value) goto failed;
if (PyObject_SetAttr(result, state->args, value) == -1)
goto failed;
Py_DECREF(value);
- value = ast2obj_expr(state, vstate, o->v.Lambda.body);
+ value = ast2obj_expr(state, o->v.Lambda.body);
if (!value) goto failed;
if (PyObject_SetAttr(result, state->body, value) == -1)
goto failed;
@@ -9514,17 +9465,17 @@ ast2obj_expr(struct ast_state *state, struct validator *vstate, void* _o)
tp = (PyTypeObject *)state->IfExp_type;
result = PyType_GenericNew(tp, NULL, NULL);
if (!result) goto failed;
- value = ast2obj_expr(state, vstate, o->v.IfExp.test);
+ value = ast2obj_expr(state, o->v.IfExp.test);
if (!value) goto failed;
if (PyObject_SetAttr(result, state->test, value) == -1)
goto failed;
Py_DECREF(value);
- value = ast2obj_expr(state, vstate, o->v.IfExp.body);
+ value = ast2obj_expr(state, o->v.IfExp.body);
if (!value) goto failed;
if (PyObject_SetAttr(result, state->body, value) == -1)
goto failed;
Py_DECREF(value);
- value = ast2obj_expr(state, vstate, o->v.IfExp.orelse);
+ value = ast2obj_expr(state, o->v.IfExp.orelse);
if (!value) goto failed;
if (PyObject_SetAttr(result, state->orelse, value) == -1)
goto failed;
@@ -9534,14 +9485,12 @@ ast2obj_expr(struct ast_state *state, struct validator *vstate, void* _o)
tp = (PyTypeObject *)state->Dict_type;
result = PyType_GenericNew(tp, NULL, NULL);
if (!result) goto failed;
- value = ast2obj_list(state, vstate, (asdl_seq*)o->v.Dict.keys,
- ast2obj_expr);
+ value = ast2obj_list(state, (asdl_seq*)o->v.Dict.keys, ast2obj_expr);
if (!value) goto failed;
if (PyObject_SetAttr(result, state->keys, value) == -1)
goto failed;
Py_DECREF(value);
- value = ast2obj_list(state, vstate, (asdl_seq*)o->v.Dict.values,
- ast2obj_expr);
+ value = ast2obj_list(state, (asdl_seq*)o->v.Dict.values, ast2obj_expr);
if (!value) goto failed;
if (PyObject_SetAttr(result, state->values, value) == -1)
goto failed;
@@ -9551,8 +9500,7 @@ ast2obj_expr(struct ast_state *state, struct validator *vstate, void* _o)
tp = (PyTypeObject *)state->Set_type;
result = PyType_GenericNew(tp, NULL, NULL);
if (!result) goto failed;
- value = ast2obj_list(state, vstate, (asdl_seq*)o->v.Set.elts,
- ast2obj_expr);
+ value = ast2obj_list(state, (asdl_seq*)o->v.Set.elts, ast2obj_expr);
if (!value) goto failed;
if (PyObject_SetAttr(result, state->elts, value) == -1)
goto failed;
@@ -9562,13 +9510,12 @@ ast2obj_expr(struct ast_state *state, struct validator *vstate, void* _o)
tp = (PyTypeObject *)state->ListComp_type;
result = PyType_GenericNew(tp, NULL, NULL);
if (!result) goto failed;
- value = ast2obj_expr(state, vstate, o->v.ListComp.elt);
+ value = ast2obj_expr(state, o->v.ListComp.elt);
if (!value) goto failed;
if (PyObject_SetAttr(result, state->elt, value) == -1)
goto failed;
Py_DECREF(value);
- value = ast2obj_list(state, vstate,
- (asdl_seq*)o->v.ListComp.generators,
+ value = ast2obj_list(state, (asdl_seq*)o->v.ListComp.generators,
ast2obj_comprehension);
if (!value) goto failed;
if (PyObject_SetAttr(result, state->generators, value) == -1)
@@ -9579,12 +9526,12 @@ ast2obj_expr(struct ast_state *state, struct validator *vstate, void* _o)
tp = (PyTypeObject *)state->SetComp_type;
result = PyType_GenericNew(tp, NULL, NULL);
if (!result) goto failed;
- value = ast2obj_expr(state, vstate, o->v.SetComp.elt);
+ value = ast2obj_expr(state, o->v.SetComp.elt);
if (!value) goto failed;
if (PyObject_SetAttr(result, state->elt, value) == -1)
goto failed;
Py_DECREF(value);
- value = ast2obj_list(state, vstate, (asdl_seq*)o->v.SetComp.generators,
+ value = ast2obj_list(state, (asdl_seq*)o->v.SetComp.generators,
ast2obj_comprehension);
if (!value) goto failed;
if (PyObject_SetAttr(result, state->generators, value) == -1)
@@ -9595,18 +9542,17 @@ ast2obj_expr(struct ast_state *state, struct validator *vstate, void* _o)
tp = (PyTypeObject *)state->DictComp_type;
result = PyType_GenericNew(tp, NULL, NULL);
if (!result) goto failed;
- value = ast2obj_expr(state, vstate, o->v.DictComp.key);
+ value = ast2obj_expr(state, o->v.DictComp.key);
if (!value) goto failed;
if (PyObject_SetAttr(result, state->key, value) == -1)
goto failed;
Py_DECREF(value);
- value = ast2obj_expr(state, vstate, o->v.DictComp.value);
+ value = ast2obj_expr(state, o->v.DictComp.value);
if (!value) goto failed;
if (PyObject_SetAttr(result, state->value, value) == -1)
goto failed;
Py_DECREF(value);
- value = ast2obj_list(state, vstate,
- (asdl_seq*)o->v.DictComp.generators,
+ value = ast2obj_list(state, (asdl_seq*)o->v.DictComp.generators,
ast2obj_comprehension);
if (!value) goto failed;
if (PyObject_SetAttr(result, state->generators, value) == -1)
@@ -9617,13 +9563,12 @@ ast2obj_expr(struct ast_state *state, struct validator *vstate, void* _o)
tp = (PyTypeObject *)state->GeneratorExp_type;
result = PyType_GenericNew(tp, NULL, NULL);
if (!result) goto failed;
- value = ast2obj_expr(state, vstate, o->v.GeneratorExp.elt);
+ value = ast2obj_expr(state, o->v.GeneratorExp.elt);
if (!value) goto failed;
if (PyObject_SetAttr(result, state->elt, value) == -1)
goto failed;
Py_DECREF(value);
- value = ast2obj_list(state, vstate,
- (asdl_seq*)o->v.GeneratorExp.generators,
+ value = ast2obj_list(state, (asdl_seq*)o->v.GeneratorExp.generators,
ast2obj_comprehension);
if (!value) goto failed;
if (PyObject_SetAttr(result, state->generators, value) == -1)
@@ -9634,7 +9579,7 @@ ast2obj_expr(struct ast_state *state, struct validator *vstate, void* _o)
tp = (PyTypeObject *)state->Await_type;
result = PyType_GenericNew(tp, NULL, NULL);
if (!result) goto failed;
- value = ast2obj_expr(state, vstate, o->v.Await.value);
+ value = ast2obj_expr(state, o->v.Await.value);
if (!value) goto failed;
if (PyObject_SetAttr(result, state->value, value) == -1)
goto failed;
@@ -9644,7 +9589,7 @@ ast2obj_expr(struct ast_state *state, struct validator *vstate, void* _o)
tp = (PyTypeObject *)state->Yield_type;
result = PyType_GenericNew(tp, NULL, NULL);
if (!result) goto failed;
- value = ast2obj_expr(state, vstate, o->v.Yield.value);
+ value = ast2obj_expr(state, o->v.Yield.value);
if (!value) goto failed;
if (PyObject_SetAttr(result, state->value, value) == -1)
goto failed;
@@ -9654,7 +9599,7 @@ ast2obj_expr(struct ast_state *state, struct validator *vstate, void* _o)
tp = (PyTypeObject *)state->YieldFrom_type;
result = PyType_GenericNew(tp, NULL, NULL);
if (!result) goto failed;
- value = ast2obj_expr(state, vstate, o->v.YieldFrom.value);
+ value = ast2obj_expr(state, o->v.YieldFrom.value);
if (!value) goto failed;
if (PyObject_SetAttr(result, state->value, value) == -1)
goto failed;
@@ -9664,7 +9609,7 @@ ast2obj_expr(struct ast_state *state, struct validator *vstate, void* _o)
tp = (PyTypeObject *)state->Compare_type;
result = PyType_GenericNew(tp, NULL, NULL);
if (!result) goto failed;
- value = ast2obj_expr(state, vstate, o->v.Compare.left);
+ value = ast2obj_expr(state, o->v.Compare.left);
if (!value) goto failed;
if (PyObject_SetAttr(result, state->left, value) == -1)
goto failed;
@@ -9674,14 +9619,14 @@ ast2obj_expr(struct ast_state *state, struct validator *vstate, void* _o)
value = PyList_New(n);
if (!value) goto failed;
for(i = 0; i < n; i++)
- PyList_SET_ITEM(value, i, ast2obj_cmpop(state, vstate, (cmpop_ty)asdl_seq_GET(o->v.Compare.ops, i)));
+ PyList_SET_ITEM(value, i, ast2obj_cmpop(state, (cmpop_ty)asdl_seq_GET(o->v.Compare.ops, i)));
}
if (!value) goto failed;
if (PyObject_SetAttr(result, state->ops, value) == -1)
goto failed;
Py_DECREF(value);
- value = ast2obj_list(state, vstate,
- (asdl_seq*)o->v.Compare.comparators, ast2obj_expr);
+ value = ast2obj_list(state, (asdl_seq*)o->v.Compare.comparators,
+ ast2obj_expr);
if (!value) goto failed;
if (PyObject_SetAttr(result, state->comparators, value) == -1)
goto failed;
@@ -9691,18 +9636,17 @@ ast2obj_expr(struct ast_state *state, struct validator *vstate, void* _o)
tp = (PyTypeObject *)state->Call_type;
result = PyType_GenericNew(tp, NULL, NULL);
if (!result) goto failed;
- value = ast2obj_expr(state, vstate, o->v.Call.func);
+ value = ast2obj_expr(state, o->v.Call.func);
if (!value) goto failed;
if (PyObject_SetAttr(result, state->func, value) == -1)
goto failed;
Py_DECREF(value);
- value = ast2obj_list(state, vstate, (asdl_seq*)o->v.Call.args,
- ast2obj_expr);
+ value = ast2obj_list(state, (asdl_seq*)o->v.Call.args, ast2obj_expr);
if (!value) goto failed;
if (PyObject_SetAttr(result, state->args, value) == -1)
goto failed;
Py_DECREF(value);
- value = ast2obj_list(state, vstate, (asdl_seq*)o->v.Call.keywords,
+ value = ast2obj_list(state, (asdl_seq*)o->v.Call.keywords,
ast2obj_keyword);
if (!value) goto failed;
if (PyObject_SetAttr(result, state->keywords, value) == -1)
@@ -9713,17 +9657,17 @@ ast2obj_expr(struct ast_state *state, struct validator *vstate, void* _o)
tp = (PyTypeObject *)state->FormattedValue_type;
result = PyType_GenericNew(tp, NULL, NULL);
if (!result) goto failed;
- value = ast2obj_expr(state, vstate, o->v.FormattedValue.value);
+ value = ast2obj_expr(state, o->v.FormattedValue.value);
if (!value) goto failed;
if (PyObject_SetAttr(result, state->value, value) == -1)
goto failed;
Py_DECREF(value);
- value = ast2obj_int(state, vstate, o->v.FormattedValue.conversion);
+ value = ast2obj_int(state, o->v.FormattedValue.conversion);
if (!value) goto failed;
if (PyObject_SetAttr(result, state->conversion, value) == -1)
goto failed;
Py_DECREF(value);
- value = ast2obj_expr(state, vstate, o->v.FormattedValue.format_spec);
+ value = ast2obj_expr(state, o->v.FormattedValue.format_spec);
if (!value) goto failed;
if (PyObject_SetAttr(result, state->format_spec, value) == -1)
goto failed;
@@ -9733,7 +9677,7 @@ ast2obj_expr(struct ast_state *state, struct validator *vstate, void* _o)
tp = (PyTypeObject *)state->JoinedStr_type;
result = PyType_GenericNew(tp, NULL, NULL);
if (!result) goto failed;
- value = ast2obj_list(state, vstate, (asdl_seq*)o->v.JoinedStr.values,
+ value = ast2obj_list(state, (asdl_seq*)o->v.JoinedStr.values,
ast2obj_expr);
if (!value) goto failed;
if (PyObject_SetAttr(result, state->values, value) == -1)
@@ -9744,12 +9688,12 @@ ast2obj_expr(struct ast_state *state, struct validator *vstate, void* _o)
tp = (PyTypeObject *)state->Constant_type;
result = PyType_GenericNew(tp, NULL, NULL);
if (!result) goto failed;
- value = ast2obj_constant(state, vstate, o->v.Constant.value);
+ value = ast2obj_constant(state, o->v.Constant.value);
if (!value) goto failed;
if (PyObject_SetAttr(result, state->value, value) == -1)
goto failed;
Py_DECREF(value);
- value = ast2obj_string(state, vstate, o->v.Constant.kind);
+ value = ast2obj_string(state, o->v.Constant.kind);
if (!value) goto failed;
if (PyObject_SetAttr(result, state->kind, value) == -1)
goto failed;
@@ -9759,17 +9703,17 @@ ast2obj_expr(struct ast_state *state, struct validator *vstate, void* _o)
tp = (PyTypeObject *)state->Attribute_type;
result = PyType_GenericNew(tp, NULL, NULL);
if (!result) goto failed;
- value = ast2obj_expr(state, vstate, o->v.Attribute.value);
+ value = ast2obj_expr(state, o->v.Attribute.value);
if (!value) goto failed;
if (PyObject_SetAttr(result, state->value, value) == -1)
goto failed;
Py_DECREF(value);
- value = ast2obj_identifier(state, vstate, o->v.Attribute.attr);
+ value = ast2obj_identifier(state, o->v.Attribute.attr);
if (!value) goto failed;
if (PyObject_SetAttr(result, state->attr, value) == -1)
goto failed;
Py_DECREF(value);
- value = ast2obj_expr_context(state, vstate, o->v.Attribute.ctx);
+ value = ast2obj_expr_context(state, o->v.Attribute.ctx);
if (!value) goto failed;
if (PyObject_SetAttr(result, state->ctx, value) == -1)
goto failed;
@@ -9779,17 +9723,17 @@ ast2obj_expr(struct ast_state *state, struct validator *vstate, void* _o)
tp = (PyTypeObject *)state->Subscript_type;
result = PyType_GenericNew(tp, NULL, NULL);
if (!result) goto failed;
- value = ast2obj_expr(state, vstate, o->v.Subscript.value);
+ value = ast2obj_expr(state, o->v.Subscript.value);
if (!value) goto failed;
if (PyObject_SetAttr(result, state->value, value) == -1)
goto failed;
Py_DECREF(value);
- value = ast2obj_expr(state, vstate, o->v.Subscript.slice);
+ value = ast2obj_expr(state, o->v.Subscript.slice);
if (!value) goto failed;
if (PyObject_SetAttr(result, state->slice, value) == -1)
goto failed;
Py_DECREF(value);
- value = ast2obj_expr_context(state, vstate, o->v.Subscript.ctx);
+ value = ast2obj_expr_context(state, o->v.Subscript.ctx);
if (!value) goto failed;
if (PyObject_SetAttr(result, state->ctx, value) == -1)
goto failed;
@@ -9799,12 +9743,12 @@ ast2obj_expr(struct ast_state *state, struct validator *vstate, void* _o)
tp = (PyTypeObject *)state->Starred_type;
result = PyType_GenericNew(tp, NULL, NULL);
if (!result) goto failed;
- value = ast2obj_expr(state, vstate, o->v.Starred.value);
+ value = ast2obj_expr(state, o->v.Starred.value);
if (!value) goto failed;
if (PyObject_SetAttr(result, state->value, value) == -1)
goto failed;
Py_DECREF(value);
- value = ast2obj_expr_context(state, vstate, o->v.Starred.ctx);
+ value = ast2obj_expr_context(state, o->v.Starred.ctx);
if (!value) goto failed;
if (PyObject_SetAttr(result, state->ctx, value) == -1)
goto failed;
@@ -9814,12 +9758,12 @@ ast2obj_expr(struct ast_state *state, struct validator *vstate, void* _o)
tp = (PyTypeObject *)state->Name_type;
result = PyType_GenericNew(tp, NULL, NULL);
if (!result) goto failed;
- value = ast2obj_identifier(state, vstate, o->v.Name.id);
+ value = ast2obj_identifier(state, o->v.Name.id);
if (!value) goto failed;
if (PyObject_SetAttr(result, state->id, value) == -1)
goto failed;
Py_DECREF(value);
- value = ast2obj_expr_context(state, vstate, o->v.Name.ctx);
+ value = ast2obj_expr_context(state, o->v.Name.ctx);
if (!value) goto failed;
if (PyObject_SetAttr(result, state->ctx, value) == -1)
goto failed;
@@ -9829,13 +9773,12 @@ ast2obj_expr(struct ast_state *state, struct validator *vstate, void* _o)
tp = (PyTypeObject *)state->List_type;
result = PyType_GenericNew(tp, NULL, NULL);
if (!result) goto failed;
- value = ast2obj_list(state, vstate, (asdl_seq*)o->v.List.elts,
- ast2obj_expr);
+ value = ast2obj_list(state, (asdl_seq*)o->v.List.elts, ast2obj_expr);
if (!value) goto failed;
if (PyObject_SetAttr(result, state->elts, value) == -1)
goto failed;
Py_DECREF(value);
- value = ast2obj_expr_context(state, vstate, o->v.List.ctx);
+ value = ast2obj_expr_context(state, o->v.List.ctx);
if (!value) goto failed;
if (PyObject_SetAttr(result, state->ctx, value) == -1)
goto failed;
@@ -9845,13 +9788,12 @@ ast2obj_expr(struct ast_state *state, struct validator *vstate, void* _o)
tp = (PyTypeObject *)state->Tuple_type;
result = PyType_GenericNew(tp, NULL, NULL);
if (!result) goto failed;
- value = ast2obj_list(state, vstate, (asdl_seq*)o->v.Tuple.elts,
- ast2obj_expr);
+ value = ast2obj_list(state, (asdl_seq*)o->v.Tuple.elts, ast2obj_expr);
if (!value) goto failed;
if (PyObject_SetAttr(result, state->elts, value) == -1)
goto failed;
Py_DECREF(value);
- value = ast2obj_expr_context(state, vstate, o->v.Tuple.ctx);
+ value = ast2obj_expr_context(state, o->v.Tuple.ctx);
if (!value) goto failed;
if (PyObject_SetAttr(result, state->ctx, value) == -1)
goto failed;
@@ -9861,54 +9803,53 @@ ast2obj_expr(struct ast_state *state, struct validator *vstate, void* _o)
tp = (PyTypeObject *)state->Slice_type;
result = PyType_GenericNew(tp, NULL, NULL);
if (!result) goto failed;
- value = ast2obj_expr(state, vstate, o->v.Slice.lower);
+ value = ast2obj_expr(state, o->v.Slice.lower);
if (!value) goto failed;
if (PyObject_SetAttr(result, state->lower, value) == -1)
goto failed;
Py_DECREF(value);
- value = ast2obj_expr(state, vstate, o->v.Slice.upper);
+ value = ast2obj_expr(state, o->v.Slice.upper);
if (!value) goto failed;
if (PyObject_SetAttr(result, state->upper, value) == -1)
goto failed;
Py_DECREF(value);
- value = ast2obj_expr(state, vstate, o->v.Slice.step);
+ value = ast2obj_expr(state, o->v.Slice.step);
if (!value) goto failed;
if (PyObject_SetAttr(result, state->step, value) == -1)
goto failed;
Py_DECREF(value);
break;
}
- value = ast2obj_int(state, vstate, o->lineno);
+ value = ast2obj_int(state, o->lineno);
if (!value) goto failed;
if (PyObject_SetAttr(result, state->lineno, value) < 0)
goto failed;
Py_DECREF(value);
- value = ast2obj_int(state, vstate, o->col_offset);
+ value = ast2obj_int(state, o->col_offset);
if (!value) goto failed;
if (PyObject_SetAttr(result, state->col_offset, value) < 0)
goto failed;
Py_DECREF(value);
- value = ast2obj_int(state, vstate, o->end_lineno);
+ value = ast2obj_int(state, o->end_lineno);
if (!value) goto failed;
if (PyObject_SetAttr(result, state->end_lineno, value) < 0)
goto failed;
Py_DECREF(value);
- value = ast2obj_int(state, vstate, o->end_col_offset);
+ value = ast2obj_int(state, o->end_col_offset);
if (!value) goto failed;
if (PyObject_SetAttr(result, state->end_col_offset, value) < 0)
goto failed;
Py_DECREF(value);
- vstate->recursion_depth--;
+ Py_LeaveRecursiveCall();
return result;
failed:
- vstate->recursion_depth--;
+ Py_LeaveRecursiveCall();
Py_XDECREF(value);
Py_XDECREF(result);
return NULL;
}
-PyObject* ast2obj_expr_context(struct ast_state *state, struct validator
- *vstate, expr_context_ty o)
+PyObject* ast2obj_expr_context(struct ast_state *state, expr_context_ty o)
{
switch(o) {
case Load:
@@ -9920,8 +9861,7 @@ PyObject* ast2obj_expr_context(struct ast_state *state, struct validator
}
Py_UNREACHABLE();
}
-PyObject* ast2obj_boolop(struct ast_state *state, struct validator *vstate,
- boolop_ty o)
+PyObject* ast2obj_boolop(struct ast_state *state, boolop_ty o)
{
switch(o) {
case And:
@@ -9931,8 +9871,7 @@ PyObject* ast2obj_boolop(struct ast_state *state, struct validator *vstate,
}
Py_UNREACHABLE();
}
-PyObject* ast2obj_operator(struct ast_state *state, struct validator *vstate,
- operator_ty o)
+PyObject* ast2obj_operator(struct ast_state *state, operator_ty o)
{
switch(o) {
case Add:
@@ -9964,8 +9903,7 @@ PyObject* ast2obj_operator(struct ast_state *state, struct validator *vstate,
}
Py_UNREACHABLE();
}
-PyObject* ast2obj_unaryop(struct ast_state *state, struct validator *vstate,
- unaryop_ty o)
+PyObject* ast2obj_unaryop(struct ast_state *state, unaryop_ty o)
{
switch(o) {
case Invert:
@@ -9979,8 +9917,7 @@ PyObject* ast2obj_unaryop(struct ast_state *state, struct validator *vstate,
}
Py_UNREACHABLE();
}
-PyObject* ast2obj_cmpop(struct ast_state *state, struct validator *vstate,
- cmpop_ty o)
+PyObject* ast2obj_cmpop(struct ast_state *state, cmpop_ty o)
{
switch(o) {
case Eq:
@@ -10007,8 +9944,7 @@ PyObject* ast2obj_cmpop(struct ast_state *state, struct validator *vstate,
Py_UNREACHABLE();
}
PyObject*
-ast2obj_comprehension(struct ast_state *state, struct validator *vstate, void*
- _o)
+ast2obj_comprehension(struct ast_state *state, void* _o)
{
comprehension_ty o = (comprehension_ty)_o;
PyObject *result = NULL, *value = NULL;
@@ -10016,46 +9952,43 @@ ast2obj_comprehension(struct ast_state *state, struct validator *vstate, void*
if (!o) {
Py_RETURN_NONE;
}
- if (++vstate->recursion_depth > vstate->recursion_limit) {
- PyErr_SetString(PyExc_RecursionError,
- "maximum recursion depth exceeded during ast construction");
+ if (Py_EnterRecursiveCall("during ast construction")) {
return NULL;
}
tp = (PyTypeObject *)state->comprehension_type;
result = PyType_GenericNew(tp, NULL, NULL);
if (!result) return NULL;
- value = ast2obj_expr(state, vstate, o->target);
+ value = ast2obj_expr(state, o->target);
if (!value) goto failed;
if (PyObject_SetAttr(result, state->target, value) == -1)
goto failed;
Py_DECREF(value);
- value = ast2obj_expr(state, vstate, o->iter);
+ value = ast2obj_expr(state, o->iter);
if (!value) goto failed;
if (PyObject_SetAttr(result, state->iter, value) == -1)
goto failed;
Py_DECREF(value);
- value = ast2obj_list(state, vstate, (asdl_seq*)o->ifs, ast2obj_expr);
+ value = ast2obj_list(state, (asdl_seq*)o->ifs, ast2obj_expr);
if (!value) goto failed;
if (PyObject_SetAttr(result, state->ifs, value) == -1)
goto failed;
Py_DECREF(value);
- value = ast2obj_int(state, vstate, o->is_async);
+ value = ast2obj_int(state, o->is_async);
if (!value) goto failed;
if (PyObject_SetAttr(result, state->is_async, value) == -1)
goto failed;
Py_DECREF(value);
- vstate->recursion_depth--;
+ Py_LeaveRecursiveCall();
return result;
failed:
- vstate->recursion_depth--;
+ Py_LeaveRecursiveCall();
Py_XDECREF(value);
Py_XDECREF(result);
return NULL;
}
PyObject*
-ast2obj_excepthandler(struct ast_state *state, struct validator *vstate, void*
- _o)
+ast2obj_excepthandler(struct ast_state *state, void* _o)
{
excepthandler_ty o = (excepthandler_ty)_o;
PyObject *result = NULL, *value = NULL;
@@ -10063,9 +9996,7 @@ ast2obj_excepthandler(struct ast_state *state, struct validator *vstate, void*
if (!o) {
Py_RETURN_NONE;
}
- if (++vstate->recursion_depth > vstate->recursion_limit) {
- PyErr_SetString(PyExc_RecursionError,
- "maximum recursion depth exceeded during ast construction");
+ if (Py_EnterRecursiveCall("during ast construction")) {
return NULL;
}
switch (o->kind) {
@@ -10073,17 +10004,17 @@ ast2obj_excepthandler(struct ast_state *state, struct validator *vstate, void*
tp = (PyTypeObject *)state->ExceptHandler_type;
result = PyType_GenericNew(tp, NULL, NULL);
if (!result) goto failed;
- value = ast2obj_expr(state, vstate, o->v.ExceptHandler.type);
+ value = ast2obj_expr(state, o->v.ExceptHandler.type);
if (!value) goto failed;
if (PyObject_SetAttr(result, state->type, value) == -1)
goto failed;
Py_DECREF(value);
- value = ast2obj_identifier(state, vstate, o->v.ExceptHandler.name);
+ value = ast2obj_identifier(state, o->v.ExceptHandler.name);
if (!value) goto failed;
if (PyObject_SetAttr(result, state->name, value) == -1)
goto failed;
Py_DECREF(value);
- value = ast2obj_list(state, vstate, (asdl_seq*)o->v.ExceptHandler.body,
+ value = ast2obj_list(state, (asdl_seq*)o->v.ExceptHandler.body,
ast2obj_stmt);
if (!value) goto failed;
if (PyObject_SetAttr(result, state->body, value) == -1)
@@ -10091,37 +10022,37 @@ ast2obj_excepthandler(struct ast_state *state, struct validator *vstate, void*
Py_DECREF(value);
break;
}
- value = ast2obj_int(state, vstate, o->lineno);
+ value = ast2obj_int(state, o->lineno);
if (!value) goto failed;
if (PyObject_SetAttr(result, state->lineno, value) < 0)
goto failed;
Py_DECREF(value);
- value = ast2obj_int(state, vstate, o->col_offset);
+ value = ast2obj_int(state, o->col_offset);
if (!value) goto failed;
if (PyObject_SetAttr(result, state->col_offset, value) < 0)
goto failed;
Py_DECREF(value);
- value = ast2obj_int(state, vstate, o->end_lineno);
+ value = ast2obj_int(state, o->end_lineno);
if (!value) goto failed;
if (PyObject_SetAttr(result, state->end_lineno, value) < 0)
goto failed;
Py_DECREF(value);
- value = ast2obj_int(state, vstate, o->end_col_offset);
+ value = ast2obj_int(state, o->end_col_offset);
if (!value) goto failed;
if (PyObject_SetAttr(result, state->end_col_offset, value) < 0)
goto failed;
Py_DECREF(value);
- vstate->recursion_depth--;
+ Py_LeaveRecursiveCall();
return result;
failed:
- vstate->recursion_depth--;
+ Py_LeaveRecursiveCall();
Py_XDECREF(value);
Py_XDECREF(result);
return NULL;
}
PyObject*
-ast2obj_arguments(struct ast_state *state, struct validator *vstate, void* _o)
+ast2obj_arguments(struct ast_state *state, void* _o)
{
arguments_ty o = (arguments_ty)_o;
PyObject *result = NULL, *value = NULL;
@@ -10129,61 +10060,58 @@ ast2obj_arguments(struct ast_state *state, struct validator *vstate, void* _o)
if (!o) {
Py_RETURN_NONE;
}
- if (++vstate->recursion_depth > vstate->recursion_limit) {
- PyErr_SetString(PyExc_RecursionError,
- "maximum recursion depth exceeded during ast construction");
+ if (Py_EnterRecursiveCall("during ast construction")) {
return NULL;
}
tp = (PyTypeObject *)state->arguments_type;
result = PyType_GenericNew(tp, NULL, NULL);
if (!result) return NULL;
- value = ast2obj_list(state, vstate, (asdl_seq*)o->posonlyargs, ast2obj_arg);
+ value = ast2obj_list(state, (asdl_seq*)o->posonlyargs, ast2obj_arg);
if (!value) goto failed;
if (PyObject_SetAttr(result, state->posonlyargs, value) == -1)
goto failed;
Py_DECREF(value);
- value = ast2obj_list(state, vstate, (asdl_seq*)o->args, ast2obj_arg);
+ value = ast2obj_list(state, (asdl_seq*)o->args, ast2obj_arg);
if (!value) goto failed;
if (PyObject_SetAttr(result, state->args, value) == -1)
goto failed;
Py_DECREF(value);
- value = ast2obj_arg(state, vstate, o->vararg);
+ value = ast2obj_arg(state, o->vararg);
if (!value) goto failed;
if (PyObject_SetAttr(result, state->vararg, value) == -1)
goto failed;
Py_DECREF(value);
- value = ast2obj_list(state, vstate, (asdl_seq*)o->kwonlyargs, ast2obj_arg);
+ value = ast2obj_list(state, (asdl_seq*)o->kwonlyargs, ast2obj_arg);
if (!value) goto failed;
if (PyObject_SetAttr(result, state->kwonlyargs, value) == -1)
goto failed;
Py_DECREF(value);
- value = ast2obj_list(state, vstate, (asdl_seq*)o->kw_defaults,
- ast2obj_expr);
+ value = ast2obj_list(state, (asdl_seq*)o->kw_defaults, ast2obj_expr);
if (!value) goto failed;
if (PyObject_SetAttr(result, state->kw_defaults, value) == -1)
goto failed;
Py_DECREF(value);
- value = ast2obj_arg(state, vstate, o->kwarg);
+ value = ast2obj_arg(state, o->kwarg);
if (!value) goto failed;
if (PyObject_SetAttr(result, state->kwarg, value) == -1)
goto failed;
Py_DECREF(value);
- value = ast2obj_list(state, vstate, (asdl_seq*)o->defaults, ast2obj_expr);
+ value = ast2obj_list(state, (asdl_seq*)o->defaults, ast2obj_expr);
if (!value) goto failed;
if (PyObject_SetAttr(result, state->defaults, value) == -1)
goto failed;
Py_DECREF(value);
- vstate->recursion_depth--;
+ Py_LeaveRecursiveCall();
return result;
failed:
- vstate->recursion_depth--;
+ Py_LeaveRecursiveCall();
Py_XDECREF(value);
Py_XDECREF(result);
return NULL;
}
PyObject*
-ast2obj_arg(struct ast_state *state, struct validator *vstate, void* _o)
+ast2obj_arg(struct ast_state *state, void* _o)
{
arg_ty o = (arg_ty)_o;
PyObject *result = NULL, *value = NULL;
@@ -10191,60 +10119,58 @@ ast2obj_arg(struct ast_state *state, struct validator *vstate, void* _o)
if (!o) {
Py_RETURN_NONE;
}
- if (++vstate->recursion_depth > vstate->recursion_limit) {
- PyErr_SetString(PyExc_RecursionError,
- "maximum recursion depth exceeded during ast construction");
+ if (Py_EnterRecursiveCall("during ast construction")) {
return NULL;
}
tp = (PyTypeObject *)state->arg_type;
result = PyType_GenericNew(tp, NULL, NULL);
if (!result) return NULL;
- value = ast2obj_identifier(state, vstate, o->arg);
+ value = ast2obj_identifier(state, o->arg);
if (!value) goto failed;
if (PyObject_SetAttr(result, state->arg, value) == -1)
goto failed;
Py_DECREF(value);
- value = ast2obj_expr(state, vstate, o->annotation);
+ value = ast2obj_expr(state, o->annotation);
if (!value) goto failed;
if (PyObject_SetAttr(result, state->annotation, value) == -1)
goto failed;
Py_DECREF(value);
- value = ast2obj_string(state, vstate, o->type_comment);
+ value = ast2obj_string(state, o->type_comment);
if (!value) goto failed;
if (PyObject_SetAttr(result, state->type_comment, value) == -1)
goto failed;
Py_DECREF(value);
- value = ast2obj_int(state, vstate, o->lineno);
+ value = ast2obj_int(state, o->lineno);
if (!value) goto failed;
if (PyObject_SetAttr(result, state->lineno, value) < 0)
goto failed;
Py_DECREF(value);
- value = ast2obj_int(state, vstate, o->col_offset);
+ value = ast2obj_int(state, o->col_offset);
if (!value) goto failed;
if (PyObject_SetAttr(result, state->col_offset, value) < 0)
goto failed;
Py_DECREF(value);
- value = ast2obj_int(state, vstate, o->end_lineno);
+ value = ast2obj_int(state, o->end_lineno);
if (!value) goto failed;
if (PyObject_SetAttr(result, state->end_lineno, value) < 0)
goto failed;
Py_DECREF(value);
- value = ast2obj_int(state, vstate, o->end_col_offset);
+ value = ast2obj_int(state, o->end_col_offset);
if (!value) goto failed;
if (PyObject_SetAttr(result, state->end_col_offset, value) < 0)
goto failed;
Py_DECREF(value);
- vstate->recursion_depth--;
+ Py_LeaveRecursiveCall();
return result;
failed:
- vstate->recursion_depth--;
+ Py_LeaveRecursiveCall();
Py_XDECREF(value);
Py_XDECREF(result);
return NULL;
}
PyObject*
-ast2obj_keyword(struct ast_state *state, struct validator *vstate, void* _o)
+ast2obj_keyword(struct ast_state *state, void* _o)
{
keyword_ty o = (keyword_ty)_o;
PyObject *result = NULL, *value = NULL;
@@ -10252,55 +10178,53 @@ ast2obj_keyword(struct ast_state *state, struct validator *vstate, void* _o)
if (!o) {
Py_RETURN_NONE;
}
- if (++vstate->recursion_depth > vstate->recursion_limit) {
- PyErr_SetString(PyExc_RecursionError,
- "maximum recursion depth exceeded during ast construction");
+ if (Py_EnterRecursiveCall("during ast construction")) {
return NULL;
}
tp = (PyTypeObject *)state->keyword_type;
result = PyType_GenericNew(tp, NULL, NULL);
if (!result) return NULL;
- value = ast2obj_identifier(state, vstate, o->arg);
+ value = ast2obj_identifier(state, o->arg);
if (!value) goto failed;
if (PyObject_SetAttr(result, state->arg, value) == -1)
goto failed;
Py_DECREF(value);
- value = ast2obj_expr(state, vstate, o->value);
+ value = ast2obj_expr(state, o->value);
if (!value) goto failed;
if (PyObject_SetAttr(result, state->value, value) == -1)
goto failed;
Py_DECREF(value);
- value = ast2obj_int(state, vstate, o->lineno);
+ value = ast2obj_int(state, o->lineno);
if (!value) goto failed;
if (PyObject_SetAttr(result, state->lineno, value) < 0)
goto failed;
Py_DECREF(value);
- value = ast2obj_int(state, vstate, o->col_offset);
+ value = ast2obj_int(state, o->col_offset);
if (!value) goto failed;
if (PyObject_SetAttr(result, state->col_offset, value) < 0)
goto failed;
Py_DECREF(value);
- value = ast2obj_int(state, vstate, o->end_lineno);
+ value = ast2obj_int(state, o->end_lineno);
if (!value) goto failed;
if (PyObject_SetAttr(result, state->end_lineno, value) < 0)
goto failed;
Py_DECREF(value);
- value = ast2obj_int(state, vstate, o->end_col_offset);
+ value = ast2obj_int(state, o->end_col_offset);
if (!value) goto failed;
if (PyObject_SetAttr(result, state->end_col_offset, value) < 0)
goto failed;
Py_DECREF(value);
- vstate->recursion_depth--;
+ Py_LeaveRecursiveCall();
return result;
failed:
- vstate->recursion_depth--;
+ Py_LeaveRecursiveCall();
Py_XDECREF(value);
Py_XDECREF(result);
return NULL;
}
PyObject*
-ast2obj_alias(struct ast_state *state, struct validator *vstate, void* _o)
+ast2obj_alias(struct ast_state *state, void* _o)
{
alias_ty o = (alias_ty)_o;
PyObject *result = NULL, *value = NULL;
@@ -10308,55 +10232,53 @@ ast2obj_alias(struct ast_state *state, struct validator *vstate, void* _o)
if (!o) {
Py_RETURN_NONE;
}
- if (++vstate->recursion_depth > vstate->recursion_limit) {
- PyErr_SetString(PyExc_RecursionError,
- "maximum recursion depth exceeded during ast construction");
+ if (Py_EnterRecursiveCall("during ast construction")) {
return NULL;
}
tp = (PyTypeObject *)state->alias_type;
result = PyType_GenericNew(tp, NULL, NULL);
if (!result) return NULL;
- value = ast2obj_identifier(state, vstate, o->name);
+ value = ast2obj_identifier(state, o->name);
if (!value) goto failed;
if (PyObject_SetAttr(result, state->name, value) == -1)
goto failed;
Py_DECREF(value);
- value = ast2obj_identifier(state, vstate, o->asname);
+ value = ast2obj_identifier(state, o->asname);
if (!value) goto failed;
if (PyObject_SetAttr(result, state->asname, value) == -1)
goto failed;
Py_DECREF(value);
- value = ast2obj_int(state, vstate, o->lineno);
+ value = ast2obj_int(state, o->lineno);
if (!value) goto failed;
if (PyObject_SetAttr(result, state->lineno, value) < 0)
goto failed;
Py_DECREF(value);
- value = ast2obj_int(state, vstate, o->col_offset);
+ value = ast2obj_int(state, o->col_offset);
if (!value) goto failed;
if (PyObject_SetAttr(result, state->col_offset, value) < 0)
goto failed;
Py_DECREF(value);
- value = ast2obj_int(state, vstate, o->end_lineno);
+ value = ast2obj_int(state, o->end_lineno);
if (!value) goto failed;
if (PyObject_SetAttr(result, state->end_lineno, value) < 0)
goto failed;
Py_DECREF(value);
- value = ast2obj_int(state, vstate, o->end_col_offset);
+ value = ast2obj_int(state, o->end_col_offset);
if (!value) goto failed;
if (PyObject_SetAttr(result, state->end_col_offset, value) < 0)
goto failed;
Py_DECREF(value);
- vstate->recursion_depth--;
+ Py_LeaveRecursiveCall();
return result;
failed:
- vstate->recursion_depth--;
+ Py_LeaveRecursiveCall();
Py_XDECREF(value);
Py_XDECREF(result);
return NULL;
}
PyObject*
-ast2obj_withitem(struct ast_state *state, struct validator *vstate, void* _o)
+ast2obj_withitem(struct ast_state *state, void* _o)
{
withitem_ty o = (withitem_ty)_o;
PyObject *result = NULL, *value = NULL;
@@ -10364,35 +10286,33 @@ ast2obj_withitem(struct ast_state *state, struct validator *vstate, void* _o)
if (!o) {
Py_RETURN_NONE;
}
- if (++vstate->recursion_depth > vstate->recursion_limit) {
- PyErr_SetString(PyExc_RecursionError,
- "maximum recursion depth exceeded during ast construction");
+ if (Py_EnterRecursiveCall("during ast construction")) {
return NULL;
}
tp = (PyTypeObject *)state->withitem_type;
result = PyType_GenericNew(tp, NULL, NULL);
if (!result) return NULL;
- value = ast2obj_expr(state, vstate, o->context_expr);
+ value = ast2obj_expr(state, o->context_expr);
if (!value) goto failed;
if (PyObject_SetAttr(result, state->context_expr, value) == -1)
goto failed;
Py_DECREF(value);
- value = ast2obj_expr(state, vstate, o->optional_vars);
+ value = ast2obj_expr(state, o->optional_vars);
if (!value) goto failed;
if (PyObject_SetAttr(result, state->optional_vars, value) == -1)
goto failed;
Py_DECREF(value);
- vstate->recursion_depth--;
+ Py_LeaveRecursiveCall();
return result;
failed:
- vstate->recursion_depth--;
+ Py_LeaveRecursiveCall();
Py_XDECREF(value);
Py_XDECREF(result);
return NULL;
}
PyObject*
-ast2obj_match_case(struct ast_state *state, struct validator *vstate, void* _o)
+ast2obj_match_case(struct ast_state *state, void* _o)
{
match_case_ty o = (match_case_ty)_o;
PyObject *result = NULL, *value = NULL;
@@ -10400,40 +10320,38 @@ ast2obj_match_case(struct ast_state *state, struct validator *vstate, void* _o)
if (!o) {
Py_RETURN_NONE;
}
- if (++vstate->recursion_depth > vstate->recursion_limit) {
- PyErr_SetString(PyExc_RecursionError,
- "maximum recursion depth exceeded during ast construction");
+ if (Py_EnterRecursiveCall("during ast construction")) {
return NULL;
}
tp = (PyTypeObject *)state->match_case_type;
result = PyType_GenericNew(tp, NULL, NULL);
if (!result) return NULL;
- value = ast2obj_pattern(state, vstate, o->pattern);
+ value = ast2obj_pattern(state, o->pattern);
if (!value) goto failed;
if (PyObject_SetAttr(result, state->pattern, value) == -1)
goto failed;
Py_DECREF(value);
- value = ast2obj_expr(state, vstate, o->guard);
+ value = ast2obj_expr(state, o->guard);
if (!value) goto failed;
if (PyObject_SetAttr(result, state->guard, value) == -1)
goto failed;
Py_DECREF(value);
- value = ast2obj_list(state, vstate, (asdl_seq*)o->body, ast2obj_stmt);
+ value = ast2obj_list(state, (asdl_seq*)o->body, ast2obj_stmt);
if (!value) goto failed;
if (PyObject_SetAttr(result, state->body, value) == -1)
goto failed;
Py_DECREF(value);
- vstate->recursion_depth--;
+ Py_LeaveRecursiveCall();
return result;
failed:
- vstate->recursion_depth--;
+ Py_LeaveRecursiveCall();
Py_XDECREF(value);
Py_XDECREF(result);
return NULL;
}
PyObject*
-ast2obj_pattern(struct ast_state *state, struct validator *vstate, void* _o)
+ast2obj_pattern(struct ast_state *state, void* _o)
{
pattern_ty o = (pattern_ty)_o;
PyObject *result = NULL, *value = NULL;
@@ -10441,9 +10359,7 @@ ast2obj_pattern(struct ast_state *state, struct validator *vstate, void* _o)
if (!o) {
Py_RETURN_NONE;
}
- if (++vstate->recursion_depth > vstate->recursion_limit) {
- PyErr_SetString(PyExc_RecursionError,
- "maximum recursion depth exceeded during ast construction");
+ if (Py_EnterRecursiveCall("during ast construction")) {
return NULL;
}
switch (o->kind) {
@@ -10451,7 +10367,7 @@ ast2obj_pattern(struct ast_state *state, struct validator *vstate, void* _o)
tp = (PyTypeObject *)state->MatchValue_type;
result = PyType_GenericNew(tp, NULL, NULL);
if (!result) goto failed;
- value = ast2obj_expr(state, vstate, o->v.MatchValue.value);
+ value = ast2obj_expr(state, o->v.MatchValue.value);
if (!value) goto failed;
if (PyObject_SetAttr(result, state->value, value) == -1)
goto failed;
@@ -10461,7 +10377,7 @@ ast2obj_pattern(struct ast_state *state, struct validator *vstate, void* _o)
tp = (PyTypeObject *)state->MatchSingleton_type;
result = PyType_GenericNew(tp, NULL, NULL);
if (!result) goto failed;
- value = ast2obj_constant(state, vstate, o->v.MatchSingleton.value);
+ value = ast2obj_constant(state, o->v.MatchSingleton.value);
if (!value) goto failed;
if (PyObject_SetAttr(result, state->value, value) == -1)
goto failed;
@@ -10471,8 +10387,7 @@ ast2obj_pattern(struct ast_state *state, struct validator *vstate, void* _o)
tp = (PyTypeObject *)state->MatchSequence_type;
result = PyType_GenericNew(tp, NULL, NULL);
if (!result) goto failed;
- value = ast2obj_list(state, vstate,
- (asdl_seq*)o->v.MatchSequence.patterns,
+ value = ast2obj_list(state, (asdl_seq*)o->v.MatchSequence.patterns,
ast2obj_pattern);
if (!value) goto failed;
if (PyObject_SetAttr(result, state->patterns, value) == -1)
@@ -10483,20 +10398,19 @@ ast2obj_pattern(struct ast_state *state, struct validator *vstate, void* _o)
tp = (PyTypeObject *)state->MatchMapping_type;
result = PyType_GenericNew(tp, NULL, NULL);
if (!result) goto failed;
- value = ast2obj_list(state, vstate, (asdl_seq*)o->v.MatchMapping.keys,
+ value = ast2obj_list(state, (asdl_seq*)o->v.MatchMapping.keys,
ast2obj_expr);
if (!value) goto failed;
if (PyObject_SetAttr(result, state->keys, value) == -1)
goto failed;
Py_DECREF(value);
- value = ast2obj_list(state, vstate,
- (asdl_seq*)o->v.MatchMapping.patterns,
+ value = ast2obj_list(state, (asdl_seq*)o->v.MatchMapping.patterns,
ast2obj_pattern);
if (!value) goto failed;
if (PyObject_SetAttr(result, state->patterns, value) == -1)
goto failed;
Py_DECREF(value);
- value = ast2obj_identifier(state, vstate, o->v.MatchMapping.rest);
+ value = ast2obj_identifier(state, o->v.MatchMapping.rest);
if (!value) goto failed;
if (PyObject_SetAttr(result, state->rest, value) == -1)
goto failed;
@@ -10506,27 +10420,24 @@ ast2obj_pattern(struct ast_state *state, struct validator *vstate, void* _o)
tp = (PyTypeObject *)state->MatchClass_type;
result = PyType_GenericNew(tp, NULL, NULL);
if (!result) goto failed;
- value = ast2obj_expr(state, vstate, o->v.MatchClass.cls);
+ value = ast2obj_expr(state, o->v.MatchClass.cls);
if (!value) goto failed;
if (PyObject_SetAttr(result, state->cls, value) == -1)
goto failed;
Py_DECREF(value);
- value = ast2obj_list(state, vstate,
- (asdl_seq*)o->v.MatchClass.patterns,
+ value = ast2obj_list(state, (asdl_seq*)o->v.MatchClass.patterns,
ast2obj_pattern);
if (!value) goto failed;
if (PyObject_SetAttr(result, state->patterns, value) == -1)
goto failed;
Py_DECREF(value);
- value = ast2obj_list(state, vstate,
- (asdl_seq*)o->v.MatchClass.kwd_attrs,
+ value = ast2obj_list(state, (asdl_seq*)o->v.MatchClass.kwd_attrs,
ast2obj_identifier);
if (!value) goto failed;
if (PyObject_SetAttr(result, state->kwd_attrs, value) == -1)
goto failed;
Py_DECREF(value);
- value = ast2obj_list(state, vstate,
- (asdl_seq*)o->v.MatchClass.kwd_patterns,
+ value = ast2obj_list(state, (asdl_seq*)o->v.MatchClass.kwd_patterns,
ast2obj_pattern);
if (!value) goto failed;
if (PyObject_SetAttr(result, state->kwd_patterns, value) == -1)
@@ -10537,7 +10448,7 @@ ast2obj_pattern(struct ast_state *state, struct validator *vstate, void* _o)
tp = (PyTypeObject *)state->MatchStar_type;
result = PyType_GenericNew(tp, NULL, NULL);
if (!result) goto failed;
- value = ast2obj_identifier(state, vstate, o->v.MatchStar.name);
+ value = ast2obj_identifier(state, o->v.MatchStar.name);
if (!value) goto failed;
if (PyObject_SetAttr(result, state->name, value) == -1)
goto failed;
@@ -10547,12 +10458,12 @@ ast2obj_pattern(struct ast_state *state, struct validator *vstate, void* _o)
tp = (PyTypeObject *)state->MatchAs_type;
result = PyType_GenericNew(tp, NULL, NULL);
if (!result) goto failed;
- value = ast2obj_pattern(state, vstate, o->v.MatchAs.pattern);
+ value = ast2obj_pattern(state, o->v.MatchAs.pattern);
if (!value) goto failed;
if (PyObject_SetAttr(result, state->pattern, value) == -1)
goto failed;
Py_DECREF(value);
- value = ast2obj_identifier(state, vstate, o->v.MatchAs.name);
+ value = ast2obj_identifier(state, o->v.MatchAs.name);
if (!value) goto failed;
if (PyObject_SetAttr(result, state->name, value) == -1)
goto failed;
@@ -10562,7 +10473,7 @@ ast2obj_pattern(struct ast_state *state, struct validator *vstate, void* _o)
tp = (PyTypeObject *)state->MatchOr_type;
result = PyType_GenericNew(tp, NULL, NULL);
if (!result) goto failed;
- value = ast2obj_list(state, vstate, (asdl_seq*)o->v.MatchOr.patterns,
+ value = ast2obj_list(state, (asdl_seq*)o->v.MatchOr.patterns,
ast2obj_pattern);
if (!value) goto failed;
if (PyObject_SetAttr(result, state->patterns, value) == -1)
@@ -10570,37 +10481,37 @@ ast2obj_pattern(struct ast_state *state, struct validator *vstate, void* _o)
Py_DECREF(value);
break;
}
- value = ast2obj_int(state, vstate, o->lineno);
+ value = ast2obj_int(state, o->lineno);
if (!value) goto failed;
if (PyObject_SetAttr(result, state->lineno, value) < 0)
goto failed;
Py_DECREF(value);
- value = ast2obj_int(state, vstate, o->col_offset);
+ value = ast2obj_int(state, o->col_offset);
if (!value) goto failed;
if (PyObject_SetAttr(result, state->col_offset, value) < 0)
goto failed;
Py_DECREF(value);
- value = ast2obj_int(state, vstate, o->end_lineno);
+ value = ast2obj_int(state, o->end_lineno);
if (!value) goto failed;
if (PyObject_SetAttr(result, state->end_lineno, value) < 0)
goto failed;
Py_DECREF(value);
- value = ast2obj_int(state, vstate, o->end_col_offset);
+ value = ast2obj_int(state, o->end_col_offset);
if (!value) goto failed;
if (PyObject_SetAttr(result, state->end_col_offset, value) < 0)
goto failed;
Py_DECREF(value);
- vstate->recursion_depth--;
+ Py_LeaveRecursiveCall();
return result;
failed:
- vstate->recursion_depth--;
+ Py_LeaveRecursiveCall();
Py_XDECREF(value);
Py_XDECREF(result);
return NULL;
}
PyObject*
-ast2obj_type_ignore(struct ast_state *state, struct validator *vstate, void* _o)
+ast2obj_type_ignore(struct ast_state *state, void* _o)
{
type_ignore_ty o = (type_ignore_ty)_o;
PyObject *result = NULL, *value = NULL;
@@ -10608,9 +10519,7 @@ ast2obj_type_ignore(struct ast_state *state, struct validator *vstate, void* _o)
if (!o) {
Py_RETURN_NONE;
}
- if (++vstate->recursion_depth > vstate->recursion_limit) {
- PyErr_SetString(PyExc_RecursionError,
- "maximum recursion depth exceeded during ast construction");
+ if (Py_EnterRecursiveCall("during ast construction")) {
return NULL;
}
switch (o->kind) {
@@ -10618,29 +10527,29 @@ ast2obj_type_ignore(struct ast_state *state, struct validator *vstate, void* _o)
tp = (PyTypeObject *)state->TypeIgnore_type;
result = PyType_GenericNew(tp, NULL, NULL);
if (!result) goto failed;
- value = ast2obj_int(state, vstate, o->v.TypeIgnore.lineno);
+ value = ast2obj_int(state, o->v.TypeIgnore.lineno);
if (!value) goto failed;
if (PyObject_SetAttr(result, state->lineno, value) == -1)
goto failed;
Py_DECREF(value);
- value = ast2obj_string(state, vstate, o->v.TypeIgnore.tag);
+ value = ast2obj_string(state, o->v.TypeIgnore.tag);
if (!value) goto failed;
if (PyObject_SetAttr(result, state->tag, value) == -1)
goto failed;
Py_DECREF(value);
break;
}
- vstate->recursion_depth--;
+ Py_LeaveRecursiveCall();
return result;
failed:
- vstate->recursion_depth--;
+ Py_LeaveRecursiveCall();
Py_XDECREF(value);
Py_XDECREF(result);
return NULL;
}
PyObject*
-ast2obj_type_param(struct ast_state *state, struct validator *vstate, void* _o)
+ast2obj_type_param(struct ast_state *state, void* _o)
{
type_param_ty o = (type_param_ty)_o;
PyObject *result = NULL, *value = NULL;
@@ -10648,9 +10557,7 @@ ast2obj_type_param(struct ast_state *state, struct validator *vstate, void* _o)
if (!o) {
Py_RETURN_NONE;
}
- if (++vstate->recursion_depth > vstate->recursion_limit) {
- PyErr_SetString(PyExc_RecursionError,
- "maximum recursion depth exceeded during ast construction");
+ if (Py_EnterRecursiveCall("during ast construction")) {
return NULL;
}
switch (o->kind) {
@@ -10658,17 +10565,17 @@ ast2obj_type_param(struct ast_state *state, struct validator *vstate, void* _o)
tp = (PyTypeObject *)state->TypeVar_type;
result = PyType_GenericNew(tp, NULL, NULL);
if (!result) goto failed;
- value = ast2obj_identifier(state, vstate, o->v.TypeVar.name);
+ value = ast2obj_identifier(state, o->v.TypeVar.name);
if (!value) goto failed;
if (PyObject_SetAttr(result, state->name, value) == -1)
goto failed;
Py_DECREF(value);
- value = ast2obj_expr(state, vstate, o->v.TypeVar.bound);
+ value = ast2obj_expr(state, o->v.TypeVar.bound);
if (!value) goto failed;
if (PyObject_SetAttr(result, state->bound, value) == -1)
goto failed;
Py_DECREF(value);
- value = ast2obj_expr(state, vstate, o->v.TypeVar.default_value);
+ value = ast2obj_expr(state, o->v.TypeVar.default_value);
if (!value) goto failed;
if (PyObject_SetAttr(result, state->default_value, value) == -1)
goto failed;
@@ -10678,12 +10585,12 @@ ast2obj_type_param(struct ast_state *state, struct validator *vstate, void* _o)
tp = (PyTypeObject *)state->ParamSpec_type;
result = PyType_GenericNew(tp, NULL, NULL);
if (!result) goto failed;
- value = ast2obj_identifier(state, vstate, o->v.ParamSpec.name);
+ value = ast2obj_identifier(state, o->v.ParamSpec.name);
if (!value) goto failed;
if (PyObject_SetAttr(result, state->name, value) == -1)
goto failed;
Py_DECREF(value);
- value = ast2obj_expr(state, vstate, o->v.ParamSpec.default_value);
+ value = ast2obj_expr(state, o->v.ParamSpec.default_value);
if (!value) goto failed;
if (PyObject_SetAttr(result, state->default_value, value) == -1)
goto failed;
@@ -10693,42 +10600,42 @@ ast2obj_type_param(struct ast_state *state, struct validator *vstate, void* _o)
tp = (PyTypeObject *)state->TypeVarTuple_type;
result = PyType_GenericNew(tp, NULL, NULL);
if (!result) goto failed;
- value = ast2obj_identifier(state, vstate, o->v.TypeVarTuple.name);
+ value = ast2obj_identifier(state, o->v.TypeVarTuple.name);
if (!value) goto failed;
if (PyObject_SetAttr(result, state->name, value) == -1)
goto failed;
Py_DECREF(value);
- value = ast2obj_expr(state, vstate, o->v.TypeVarTuple.default_value);
+ value = ast2obj_expr(state, o->v.TypeVarTuple.default_value);
if (!value) goto failed;
if (PyObject_SetAttr(result, state->default_value, value) == -1)
goto failed;
Py_DECREF(value);
break;
}
- value = ast2obj_int(state, vstate, o->lineno);
+ value = ast2obj_int(state, o->lineno);
if (!value) goto failed;
if (PyObject_SetAttr(result, state->lineno, value) < 0)
goto failed;
Py_DECREF(value);
- value = ast2obj_int(state, vstate, o->col_offset);
+ value = ast2obj_int(state, o->col_offset);
if (!value) goto failed;
if (PyObject_SetAttr(result, state->col_offset, value) < 0)
goto failed;
Py_DECREF(value);
- value = ast2obj_int(state, vstate, o->end_lineno);
+ value = ast2obj_int(state, o->end_lineno);
if (!value) goto failed;
if (PyObject_SetAttr(result, state->end_lineno, value) < 0)
goto failed;
Py_DECREF(value);
- value = ast2obj_int(state, vstate, o->end_col_offset);
+ value = ast2obj_int(state, o->end_col_offset);
if (!value) goto failed;
if (PyObject_SetAttr(result, state->end_col_offset, value) < 0)
goto failed;
Py_DECREF(value);
- vstate->recursion_depth--;
+ Py_LeaveRecursiveCall();
return result;
failed:
- vstate->recursion_depth--;
+ Py_LeaveRecursiveCall();
Py_XDECREF(value);
Py_XDECREF(result);
return NULL;
@@ -18135,28 +18042,8 @@ PyObject* PyAST_mod2obj(mod_ty t)
if (state == NULL) {
return NULL;
}
+ PyObject *result = ast2obj_mod(state, t);
- int starting_recursion_depth;
- /* Be careful here to prevent overflow. */
- PyThreadState *tstate = _PyThreadState_GET();
- if (!tstate) {
- return NULL;
- }
- struct validator vstate;
- vstate.recursion_limit = Py_C_RECURSION_LIMIT;
- int recursion_depth = Py_C_RECURSION_LIMIT - tstate->c_recursion_remaining;
- starting_recursion_depth = recursion_depth;
- vstate.recursion_depth = starting_recursion_depth;
-
- PyObject *result = ast2obj_mod(state, &vstate, t);
-
- /* Check that the recursion depth counting balanced correctly */
- if (result && vstate.recursion_depth != starting_recursion_depth) {
- PyErr_Format(PyExc_SystemError,
- "AST constructor recursion depth mismatch (before=%d, after=%d)",
- starting_recursion_depth, vstate.recursion_depth);
- return NULL;
- }
return result;
}