aboutsummaryrefslogtreecommitdiffstats
path: root/contrib/tools/python3/src/Python/Python-ast.c
diff options
context:
space:
mode:
authorshadchin <shadchin@yandex-team.com>2024-02-12 07:53:52 +0300
committershadchin <shadchin@yandex-team.com>2024-02-12 08:07:36 +0300
commitce1b7ca3171f9158180640c6a02a74b4afffedea (patch)
treee47c1e8391b1b0128262c1e9b1e6ed4c8fff2348 /contrib/tools/python3/src/Python/Python-ast.c
parent57350d96f030db90f220ce50ee591d5c5d403df7 (diff)
downloadydb-ce1b7ca3171f9158180640c6a02a74b4afffedea.tar.gz
Update Python from 3.11.8 to 3.12.2
Diffstat (limited to 'contrib/tools/python3/src/Python/Python-ast.c')
-rw-r--r--contrib/tools/python3/src/Python/Python-ast.c1644
1 files changed, 1198 insertions, 446 deletions
diff --git a/contrib/tools/python3/src/Python/Python-ast.c b/contrib/tools/python3/src/Python/Python-ast.c
index d5a62b9a1e..6c95f07c38 100644
--- a/contrib/tools/python3/src/Python/Python-ast.c
+++ b/contrib/tools/python3/src/Python/Python-ast.c
@@ -136,6 +136,7 @@ void _PyAST_Fini(PyInterpreterState *interp)
Py_CLEAR(state->Not_type);
Py_CLEAR(state->Or_singleton);
Py_CLEAR(state->Or_type);
+ Py_CLEAR(state->ParamSpec_type);
Py_CLEAR(state->Pass_type);
Py_CLEAR(state->Pow_singleton);
Py_CLEAR(state->Pow_type);
@@ -155,7 +156,10 @@ void _PyAST_Fini(PyInterpreterState *interp)
Py_CLEAR(state->TryStar_type);
Py_CLEAR(state->Try_type);
Py_CLEAR(state->Tuple_type);
+ Py_CLEAR(state->TypeAlias_type);
Py_CLEAR(state->TypeIgnore_type);
+ Py_CLEAR(state->TypeVarTuple_type);
+ Py_CLEAR(state->TypeVar_type);
Py_CLEAR(state->UAdd_singleton);
Py_CLEAR(state->UAdd_type);
Py_CLEAR(state->USub_singleton);
@@ -184,6 +188,7 @@ void _PyAST_Fini(PyInterpreterState *interp)
Py_CLEAR(state->bases);
Py_CLEAR(state->body);
Py_CLEAR(state->boolop_type);
+ Py_CLEAR(state->bound);
Py_CLEAR(state->cases);
Py_CLEAR(state->cause);
Py_CLEAR(state->cls);
@@ -261,6 +266,8 @@ void _PyAST_Fini(PyInterpreterState *interp)
Py_CLEAR(state->type_comment);
Py_CLEAR(state->type_ignore_type);
Py_CLEAR(state->type_ignores);
+ Py_CLEAR(state->type_param_type);
+ Py_CLEAR(state->type_params);
Py_CLEAR(state->unaryop_type);
Py_CLEAR(state->upper);
Py_CLEAR(state->value);
@@ -268,6 +275,8 @@ void _PyAST_Fini(PyInterpreterState *interp)
Py_CLEAR(state->vararg);
Py_CLEAR(state->withitem_type);
+ Py_CLEAR(_Py_INTERP_CACHED_OBJECT(interp, str_replace_inf));
+
#if !defined(NDEBUG)
state->initialized = -1;
#else
@@ -292,6 +301,7 @@ static int init_identifiers(struct ast_state *state)
if ((state->attr = PyUnicode_InternFromString("attr")) == NULL) return 0;
if ((state->bases = PyUnicode_InternFromString("bases")) == NULL) return 0;
if ((state->body = PyUnicode_InternFromString("body")) == NULL) return 0;
+ if ((state->bound = PyUnicode_InternFromString("bound")) == NULL) return 0;
if ((state->cases = PyUnicode_InternFromString("cases")) == NULL) return 0;
if ((state->cause = PyUnicode_InternFromString("cause")) == NULL) return 0;
if ((state->cls = PyUnicode_InternFromString("cls")) == NULL) return 0;
@@ -357,6 +367,7 @@ static int init_identifiers(struct ast_state *state)
if ((state->type = PyUnicode_InternFromString("type")) == NULL) return 0;
if ((state->type_comment = PyUnicode_InternFromString("type_comment")) == NULL) return 0;
if ((state->type_ignores = PyUnicode_InternFromString("type_ignores")) == NULL) return 0;
+ if ((state->type_params = PyUnicode_InternFromString("type_params")) == NULL) return 0;
if ((state->upper = PyUnicode_InternFromString("upper")) == NULL) return 0;
if ((state->value = PyUnicode_InternFromString("value")) == NULL) return 0;
if ((state->values = PyUnicode_InternFromString("values")) == NULL) return 0;
@@ -377,6 +388,7 @@ GENERATE_ASDL_SEQ_CONSTRUCTOR(withitem, withitem_ty)
GENERATE_ASDL_SEQ_CONSTRUCTOR(match_case, match_case_ty)
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*);
@@ -409,6 +421,7 @@ static const char * const FunctionDef_fields[]={
"decorator_list",
"returns",
"type_comment",
+ "type_params",
};
static const char * const AsyncFunctionDef_fields[]={
"name",
@@ -417,6 +430,7 @@ static const char * const AsyncFunctionDef_fields[]={
"decorator_list",
"returns",
"type_comment",
+ "type_params",
};
static const char * const ClassDef_fields[]={
"name",
@@ -424,6 +438,7 @@ static const char * const ClassDef_fields[]={
"keywords",
"body",
"decorator_list",
+ "type_params",
};
static const char * const Return_fields[]={
"value",
@@ -436,6 +451,11 @@ static const char * const Assign_fields[]={
"value",
"type_comment",
};
+static const char * const TypeAlias_fields[]={
+ "name",
+ "type_params",
+ "value",
+};
static const char * const AugAssign_fields[]={
"target",
"op",
@@ -778,6 +798,24 @@ static const char * const TypeIgnore_fields[]={
"lineno",
"tag",
};
+static const char * const type_param_attributes[] = {
+ "lineno",
+ "col_offset",
+ "end_lineno",
+ "end_col_offset",
+};
+static PyObject* ast2obj_type_param(struct ast_state *state, struct validator
+ *vstate, void*);
+static const char * const TypeVar_fields[]={
+ "name",
+ "bound",
+};
+static const char * const ParamSpec_fields[]={
+ "name",
+};
+static const char * const TypeVarTuple_fields[]={
+ "name",
+};
@@ -1017,10 +1055,11 @@ static PyObject* ast2obj_list(struct ast_state *state, struct validator *vstate,
static PyObject* ast2obj_object(struct ast_state *Py_UNUSED(state), struct validator *Py_UNUSED(vstate), void *o)
{
- if (!o)
- o = Py_None;
- Py_INCREF((PyObject*)o);
- return (PyObject*)o;
+ PyObject *op = (PyObject*)o;
+ if (!op) {
+ op = Py_None;
+ }
+ return Py_NewRef(op);
}
#define ast2obj_constant ast2obj_object
#define ast2obj_identifier ast2obj_object
@@ -1042,9 +1081,11 @@ static int obj2ast_object(struct ast_state *Py_UNUSED(state), PyObject* obj, PyO
*out = NULL;
return -1;
}
- Py_INCREF(obj);
+ *out = Py_NewRef(obj);
+ }
+ else {
+ *out = NULL;
}
- *out = obj;
return 0;
}
@@ -1054,8 +1095,7 @@ static int obj2ast_constant(struct ast_state *Py_UNUSED(state), PyObject* obj, P
*out = NULL;
return -1;
}
- Py_INCREF(obj);
- *out = obj;
+ *out = Py_NewRef(obj);
return 0;
}
@@ -1154,12 +1194,13 @@ init_types(struct ast_state *state)
"FunctionType(expr* argtypes, expr returns)");
if (!state->FunctionType_type) return 0;
state->stmt_type = make_type(state, "stmt", state->AST_type, NULL, 0,
- "stmt = FunctionDef(identifier name, arguments args, stmt* body, expr* decorator_list, expr? returns, string? type_comment)\n"
- " | AsyncFunctionDef(identifier name, arguments args, stmt* body, expr* decorator_list, expr? returns, string? type_comment)\n"
- " | ClassDef(identifier name, expr* bases, keyword* keywords, stmt* body, expr* decorator_list)\n"
+ "stmt = FunctionDef(identifier name, arguments args, stmt* body, expr* decorator_list, expr? returns, string? type_comment, type_param* type_params)\n"
+ " | AsyncFunctionDef(identifier name, arguments args, stmt* body, expr* decorator_list, expr? returns, string? type_comment, type_param* type_params)\n"
+ " | ClassDef(identifier name, expr* bases, keyword* keywords, stmt* body, expr* decorator_list, type_param* type_params)\n"
" | Return(expr? value)\n"
" | Delete(expr* targets)\n"
" | Assign(expr* targets, expr value, string? type_comment)\n"
+ " | TypeAlias(expr name, type_param* type_params, expr value)\n"
" | AugAssign(expr target, operator op, expr value)\n"
" | AnnAssign(expr target, expr annotation, expr? value, int simple)\n"
" | For(expr target, expr iter, stmt* body, stmt* orelse, string? type_comment)\n"
@@ -1189,8 +1230,8 @@ init_types(struct ast_state *state)
-1)
return 0;
state->FunctionDef_type = make_type(state, "FunctionDef", state->stmt_type,
- FunctionDef_fields, 6,
- "FunctionDef(identifier name, arguments args, stmt* body, expr* decorator_list, expr? returns, string? type_comment)");
+ FunctionDef_fields, 7,
+ "FunctionDef(identifier name, arguments args, stmt* body, expr* decorator_list, expr? returns, string? type_comment, type_param* type_params)");
if (!state->FunctionDef_type) return 0;
if (PyObject_SetAttr(state->FunctionDef_type, state->returns, Py_None) ==
-1)
@@ -1200,8 +1241,8 @@ init_types(struct ast_state *state)
return 0;
state->AsyncFunctionDef_type = make_type(state, "AsyncFunctionDef",
state->stmt_type,
- AsyncFunctionDef_fields, 6,
- "AsyncFunctionDef(identifier name, arguments args, stmt* body, expr* decorator_list, expr? returns, string? type_comment)");
+ AsyncFunctionDef_fields, 7,
+ "AsyncFunctionDef(identifier name, arguments args, stmt* body, expr* decorator_list, expr? returns, string? type_comment, type_param* type_params)");
if (!state->AsyncFunctionDef_type) return 0;
if (PyObject_SetAttr(state->AsyncFunctionDef_type, state->returns, Py_None)
== -1)
@@ -1210,8 +1251,8 @@ init_types(struct ast_state *state)
Py_None) == -1)
return 0;
state->ClassDef_type = make_type(state, "ClassDef", state->stmt_type,
- ClassDef_fields, 5,
- "ClassDef(identifier name, expr* bases, keyword* keywords, stmt* body, expr* decorator_list)");
+ ClassDef_fields, 6,
+ "ClassDef(identifier name, expr* bases, keyword* keywords, stmt* body, expr* decorator_list, type_param* type_params)");
if (!state->ClassDef_type) return 0;
state->Return_type = make_type(state, "Return", state->stmt_type,
Return_fields, 1,
@@ -1230,6 +1271,10 @@ init_types(struct ast_state *state)
if (PyObject_SetAttr(state->Assign_type, state->type_comment, Py_None) ==
-1)
return 0;
+ state->TypeAlias_type = make_type(state, "TypeAlias", state->stmt_type,
+ TypeAlias_fields, 3,
+ "TypeAlias(expr name, type_param* type_params, expr value)");
+ if (!state->TypeAlias_type) return 0;
state->AugAssign_type = make_type(state, "AugAssign", state->stmt_type,
AugAssign_fields, 3,
"AugAssign(expr target, operator op, expr value)");
@@ -1874,6 +1919,30 @@ init_types(struct ast_state *state)
TypeIgnore_fields, 2,
"TypeIgnore(int lineno, string tag)");
if (!state->TypeIgnore_type) return 0;
+ state->type_param_type = make_type(state, "type_param", state->AST_type,
+ NULL, 0,
+ "type_param = TypeVar(identifier name, expr? bound)\n"
+ " | ParamSpec(identifier name)\n"
+ " | TypeVarTuple(identifier name)");
+ if (!state->type_param_type) return 0;
+ if (!add_attributes(state, state->type_param_type, type_param_attributes,
+ 4)) return 0;
+ state->TypeVar_type = make_type(state, "TypeVar", state->type_param_type,
+ TypeVar_fields, 2,
+ "TypeVar(identifier name, expr? bound)");
+ if (!state->TypeVar_type) return 0;
+ if (PyObject_SetAttr(state->TypeVar_type, state->bound, Py_None) == -1)
+ return 0;
+ state->ParamSpec_type = make_type(state, "ParamSpec",
+ state->type_param_type, ParamSpec_fields,
+ 1,
+ "ParamSpec(identifier name)");
+ if (!state->ParamSpec_type) return 0;
+ state->TypeVarTuple_type = make_type(state, "TypeVarTuple",
+ state->type_param_type,
+ TypeVarTuple_fields, 1,
+ "TypeVarTuple(identifier name)");
+ if (!state->TypeVarTuple_type) return 0;
state->initialized = 1;
return 1;
@@ -1915,6 +1984,8 @@ static int obj2ast_pattern(struct ast_state *state, PyObject* obj, pattern_ty*
out, PyArena* arena);
static int obj2ast_type_ignore(struct ast_state *state, PyObject* obj,
type_ignore_ty* out, PyArena* arena);
+static int obj2ast_type_param(struct ast_state *state, PyObject* obj,
+ type_param_ty* out, PyArena* arena);
mod_ty
_PyAST_Module(asdl_stmt_seq * body, asdl_type_ignore_seq * type_ignores,
@@ -1980,8 +2051,9 @@ _PyAST_FunctionType(asdl_expr_seq * argtypes, expr_ty returns, PyArena *arena)
stmt_ty
_PyAST_FunctionDef(identifier name, arguments_ty args, asdl_stmt_seq * body,
asdl_expr_seq * decorator_list, expr_ty returns, string
- type_comment, int lineno, int col_offset, int end_lineno,
- int end_col_offset, PyArena *arena)
+ type_comment, asdl_type_param_seq * type_params, int lineno,
+ int col_offset, int end_lineno, int end_col_offset, PyArena
+ *arena)
{
stmt_ty p;
if (!name) {
@@ -2004,6 +2076,7 @@ _PyAST_FunctionDef(identifier name, arguments_ty args, asdl_stmt_seq * body,
p->v.FunctionDef.decorator_list = decorator_list;
p->v.FunctionDef.returns = returns;
p->v.FunctionDef.type_comment = type_comment;
+ p->v.FunctionDef.type_params = type_params;
p->lineno = lineno;
p->col_offset = col_offset;
p->end_lineno = end_lineno;
@@ -2014,8 +2087,9 @@ _PyAST_FunctionDef(identifier name, arguments_ty args, asdl_stmt_seq * body,
stmt_ty
_PyAST_AsyncFunctionDef(identifier name, arguments_ty args, asdl_stmt_seq *
body, asdl_expr_seq * decorator_list, expr_ty returns,
- string type_comment, int lineno, int col_offset, int
- end_lineno, int end_col_offset, PyArena *arena)
+ string type_comment, asdl_type_param_seq * type_params,
+ int lineno, int col_offset, int end_lineno, int
+ end_col_offset, PyArena *arena)
{
stmt_ty p;
if (!name) {
@@ -2038,6 +2112,7 @@ _PyAST_AsyncFunctionDef(identifier name, arguments_ty args, asdl_stmt_seq *
p->v.AsyncFunctionDef.decorator_list = decorator_list;
p->v.AsyncFunctionDef.returns = returns;
p->v.AsyncFunctionDef.type_comment = type_comment;
+ p->v.AsyncFunctionDef.type_params = type_params;
p->lineno = lineno;
p->col_offset = col_offset;
p->end_lineno = end_lineno;
@@ -2048,8 +2123,8 @@ _PyAST_AsyncFunctionDef(identifier name, arguments_ty args, asdl_stmt_seq *
stmt_ty
_PyAST_ClassDef(identifier name, asdl_expr_seq * bases, asdl_keyword_seq *
keywords, asdl_stmt_seq * body, asdl_expr_seq * decorator_list,
- int lineno, int col_offset, int end_lineno, int end_col_offset,
- PyArena *arena)
+ asdl_type_param_seq * type_params, int lineno, int col_offset,
+ int end_lineno, int end_col_offset, PyArena *arena)
{
stmt_ty p;
if (!name) {
@@ -2066,6 +2141,7 @@ _PyAST_ClassDef(identifier name, asdl_expr_seq * bases, asdl_keyword_seq *
p->v.ClassDef.keywords = keywords;
p->v.ClassDef.body = body;
p->v.ClassDef.decorator_list = decorator_list;
+ p->v.ClassDef.type_params = type_params;
p->lineno = lineno;
p->col_offset = col_offset;
p->end_lineno = end_lineno;
@@ -2133,6 +2209,36 @@ _PyAST_Assign(asdl_expr_seq * targets, expr_ty value, string type_comment, int
}
stmt_ty
+_PyAST_TypeAlias(expr_ty name, asdl_type_param_seq * type_params, expr_ty
+ value, int lineno, int col_offset, int end_lineno, int
+ end_col_offset, PyArena *arena)
+{
+ stmt_ty p;
+ if (!name) {
+ PyErr_SetString(PyExc_ValueError,
+ "field 'name' is required for TypeAlias");
+ return NULL;
+ }
+ if (!value) {
+ PyErr_SetString(PyExc_ValueError,
+ "field 'value' is required for TypeAlias");
+ return NULL;
+ }
+ p = (stmt_ty)_PyArena_Malloc(arena, sizeof(*p));
+ if (!p)
+ return NULL;
+ p->kind = TypeAlias_kind;
+ p->v.TypeAlias.name = name;
+ p->v.TypeAlias.type_params = type_params;
+ p->v.TypeAlias.value = value;
+ p->lineno = lineno;
+ p->col_offset = col_offset;
+ p->end_lineno = end_lineno;
+ p->end_col_offset = end_col_offset;
+ return p;
+}
+
+stmt_ty
_PyAST_AugAssign(expr_ty target, operator_ty op, expr_ty value, int lineno, int
col_offset, int end_lineno, int end_col_offset, PyArena *arena)
{
@@ -3624,6 +3730,73 @@ _PyAST_TypeIgnore(int lineno, string tag, PyArena *arena)
return p;
}
+type_param_ty
+_PyAST_TypeVar(identifier name, expr_ty bound, int lineno, int col_offset, int
+ end_lineno, int end_col_offset, PyArena *arena)
+{
+ type_param_ty p;
+ if (!name) {
+ PyErr_SetString(PyExc_ValueError,
+ "field 'name' is required for TypeVar");
+ return NULL;
+ }
+ p = (type_param_ty)_PyArena_Malloc(arena, sizeof(*p));
+ if (!p)
+ return NULL;
+ p->kind = TypeVar_kind;
+ p->v.TypeVar.name = name;
+ p->v.TypeVar.bound = bound;
+ p->lineno = lineno;
+ p->col_offset = col_offset;
+ p->end_lineno = end_lineno;
+ p->end_col_offset = end_col_offset;
+ return p;
+}
+
+type_param_ty
+_PyAST_ParamSpec(identifier name, int lineno, int col_offset, int end_lineno,
+ int end_col_offset, PyArena *arena)
+{
+ type_param_ty p;
+ if (!name) {
+ PyErr_SetString(PyExc_ValueError,
+ "field 'name' is required for ParamSpec");
+ return NULL;
+ }
+ p = (type_param_ty)_PyArena_Malloc(arena, sizeof(*p));
+ if (!p)
+ return NULL;
+ p->kind = ParamSpec_kind;
+ p->v.ParamSpec.name = name;
+ p->lineno = lineno;
+ p->col_offset = col_offset;
+ p->end_lineno = end_lineno;
+ p->end_col_offset = end_col_offset;
+ return p;
+}
+
+type_param_ty
+_PyAST_TypeVarTuple(identifier name, int lineno, int col_offset, int
+ end_lineno, int end_col_offset, PyArena *arena)
+{
+ type_param_ty p;
+ if (!name) {
+ PyErr_SetString(PyExc_ValueError,
+ "field 'name' is required for TypeVarTuple");
+ return NULL;
+ }
+ p = (type_param_ty)_PyArena_Malloc(arena, sizeof(*p));
+ if (!p)
+ return NULL;
+ p->kind = TypeVarTuple_kind;
+ p->v.TypeVarTuple.name = name;
+ p->lineno = lineno;
+ p->col_offset = col_offset;
+ p->end_lineno = end_lineno;
+ p->end_col_offset = end_col_offset;
+ return p;
+}
+
PyObject*
ast2obj_mod(struct ast_state *state, struct validator *vstate, void* _o)
@@ -3758,6 +3931,13 @@ ast2obj_stmt(struct ast_state *state, struct validator *vstate, void* _o)
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,
+ ast2obj_type_param);
+ if (!value) goto failed;
+ if (PyObject_SetAttr(result, state->type_params, value) == -1)
+ goto failed;
+ Py_DECREF(value);
break;
case AsyncFunctionDef_kind:
tp = (PyTypeObject *)state->AsyncFunctionDef_type;
@@ -3797,6 +3977,13 @@ ast2obj_stmt(struct ast_state *state, struct validator *vstate, void* _o)
if (PyObject_SetAttr(result, state->type_comment, value) == -1)
goto failed;
Py_DECREF(value);
+ value = ast2obj_list(state, vstate,
+ (asdl_seq*)o->v.AsyncFunctionDef.type_params,
+ ast2obj_type_param);
+ if (!value) goto failed;
+ if (PyObject_SetAttr(result, state->type_params, value) == -1)
+ goto failed;
+ Py_DECREF(value);
break;
case ClassDef_kind:
tp = (PyTypeObject *)state->ClassDef_type;
@@ -3832,6 +4019,13 @@ ast2obj_stmt(struct ast_state *state, struct validator *vstate, void* _o)
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,
+ ast2obj_type_param);
+ if (!value) goto failed;
+ if (PyObject_SetAttr(result, state->type_params, value) == -1)
+ goto failed;
+ Py_DECREF(value);
break;
case Return_kind:
tp = (PyTypeObject *)state->Return_type;
@@ -3875,6 +4069,28 @@ ast2obj_stmt(struct ast_state *state, struct validator *vstate, void* _o)
goto failed;
Py_DECREF(value);
break;
+ case TypeAlias_kind:
+ tp = (PyTypeObject *)state->TypeAlias_type;
+ result = PyType_GenericNew(tp, NULL, NULL);
+ if (!result) goto failed;
+ value = ast2obj_expr(state, vstate, 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,
+ 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);
+ if (!value) goto failed;
+ if (PyObject_SetAttr(result, state->value, value) == -1)
+ goto failed;
+ Py_DECREF(value);
+ break;
case AugAssign_kind:
tp = (PyTypeObject *)state->AugAssign_type;
result = PyType_GenericNew(tp, NULL, NULL);
@@ -4783,14 +4999,11 @@ PyObject* ast2obj_expr_context(struct ast_state *state, struct validator
{
switch(o) {
case Load:
- Py_INCREF(state->Load_singleton);
- return state->Load_singleton;
+ return Py_NewRef(state->Load_singleton);
case Store:
- Py_INCREF(state->Store_singleton);
- return state->Store_singleton;
+ return Py_NewRef(state->Store_singleton);
case Del:
- Py_INCREF(state->Del_singleton);
- return state->Del_singleton;
+ return Py_NewRef(state->Del_singleton);
}
Py_UNREACHABLE();
}
@@ -4799,11 +5012,9 @@ PyObject* ast2obj_boolop(struct ast_state *state, struct validator *vstate,
{
switch(o) {
case And:
- Py_INCREF(state->And_singleton);
- return state->And_singleton;
+ return Py_NewRef(state->And_singleton);
case Or:
- Py_INCREF(state->Or_singleton);
- return state->Or_singleton;
+ return Py_NewRef(state->Or_singleton);
}
Py_UNREACHABLE();
}
@@ -4812,44 +5023,31 @@ PyObject* ast2obj_operator(struct ast_state *state, struct validator *vstate,
{
switch(o) {
case Add:
- Py_INCREF(state->Add_singleton);
- return state->Add_singleton;
+ return Py_NewRef(state->Add_singleton);
case Sub:
- Py_INCREF(state->Sub_singleton);
- return state->Sub_singleton;
+ return Py_NewRef(state->Sub_singleton);
case Mult:
- Py_INCREF(state->Mult_singleton);
- return state->Mult_singleton;
+ return Py_NewRef(state->Mult_singleton);
case MatMult:
- Py_INCREF(state->MatMult_singleton);
- return state->MatMult_singleton;
+ return Py_NewRef(state->MatMult_singleton);
case Div:
- Py_INCREF(state->Div_singleton);
- return state->Div_singleton;
+ return Py_NewRef(state->Div_singleton);
case Mod:
- Py_INCREF(state->Mod_singleton);
- return state->Mod_singleton;
+ return Py_NewRef(state->Mod_singleton);
case Pow:
- Py_INCREF(state->Pow_singleton);
- return state->Pow_singleton;
+ return Py_NewRef(state->Pow_singleton);
case LShift:
- Py_INCREF(state->LShift_singleton);
- return state->LShift_singleton;
+ return Py_NewRef(state->LShift_singleton);
case RShift:
- Py_INCREF(state->RShift_singleton);
- return state->RShift_singleton;
+ return Py_NewRef(state->RShift_singleton);
case BitOr:
- Py_INCREF(state->BitOr_singleton);
- return state->BitOr_singleton;
+ return Py_NewRef(state->BitOr_singleton);
case BitXor:
- Py_INCREF(state->BitXor_singleton);
- return state->BitXor_singleton;
+ return Py_NewRef(state->BitXor_singleton);
case BitAnd:
- Py_INCREF(state->BitAnd_singleton);
- return state->BitAnd_singleton;
+ return Py_NewRef(state->BitAnd_singleton);
case FloorDiv:
- Py_INCREF(state->FloorDiv_singleton);
- return state->FloorDiv_singleton;
+ return Py_NewRef(state->FloorDiv_singleton);
}
Py_UNREACHABLE();
}
@@ -4858,17 +5056,13 @@ PyObject* ast2obj_unaryop(struct ast_state *state, struct validator *vstate,
{
switch(o) {
case Invert:
- Py_INCREF(state->Invert_singleton);
- return state->Invert_singleton;
+ return Py_NewRef(state->Invert_singleton);
case Not:
- Py_INCREF(state->Not_singleton);
- return state->Not_singleton;
+ return Py_NewRef(state->Not_singleton);
case UAdd:
- Py_INCREF(state->UAdd_singleton);
- return state->UAdd_singleton;
+ return Py_NewRef(state->UAdd_singleton);
case USub:
- Py_INCREF(state->USub_singleton);
- return state->USub_singleton;
+ return Py_NewRef(state->USub_singleton);
}
Py_UNREACHABLE();
}
@@ -4877,35 +5071,25 @@ PyObject* ast2obj_cmpop(struct ast_state *state, struct validator *vstate,
{
switch(o) {
case Eq:
- Py_INCREF(state->Eq_singleton);
- return state->Eq_singleton;
+ return Py_NewRef(state->Eq_singleton);
case NotEq:
- Py_INCREF(state->NotEq_singleton);
- return state->NotEq_singleton;
+ return Py_NewRef(state->NotEq_singleton);
case Lt:
- Py_INCREF(state->Lt_singleton);
- return state->Lt_singleton;
+ return Py_NewRef(state->Lt_singleton);
case LtE:
- Py_INCREF(state->LtE_singleton);
- return state->LtE_singleton;
+ return Py_NewRef(state->LtE_singleton);
case Gt:
- Py_INCREF(state->Gt_singleton);
- return state->Gt_singleton;
+ return Py_NewRef(state->Gt_singleton);
case GtE:
- Py_INCREF(state->GtE_singleton);
- return state->GtE_singleton;
+ return Py_NewRef(state->GtE_singleton);
case Is:
- Py_INCREF(state->Is_singleton);
- return state->Is_singleton;
+ return Py_NewRef(state->Is_singleton);
case IsNot:
- Py_INCREF(state->IsNot_singleton);
- return state->IsNot_singleton;
+ return Py_NewRef(state->IsNot_singleton);
case In:
- Py_INCREF(state->In_singleton);
- return state->In_singleton;
+ return Py_NewRef(state->In_singleton);
case NotIn:
- Py_INCREF(state->NotIn_singleton);
- return state->NotIn_singleton;
+ return Py_NewRef(state->NotIn_singleton);
}
Py_UNREACHABLE();
}
@@ -5542,6 +5726,86 @@ failed:
return NULL;
}
+PyObject*
+ast2obj_type_param(struct ast_state *state, struct validator *vstate, void* _o)
+{
+ type_param_ty o = (type_param_ty)_o;
+ PyObject *result = NULL, *value = NULL;
+ PyTypeObject *tp;
+ if (!o) {
+ Py_RETURN_NONE;
+ }
+ if (++vstate->recursion_depth > vstate->recursion_limit) {
+ PyErr_SetString(PyExc_RecursionError,
+ "maximum recursion depth exceeded during ast construction");
+ return 0;
+ }
+ switch (o->kind) {
+ case TypeVar_kind:
+ tp = (PyTypeObject *)state->TypeVar_type;
+ result = PyType_GenericNew(tp, NULL, NULL);
+ if (!result) goto failed;
+ value = ast2obj_identifier(state, vstate, 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);
+ if (!value) goto failed;
+ if (PyObject_SetAttr(result, state->bound, value) == -1)
+ goto failed;
+ Py_DECREF(value);
+ break;
+ case ParamSpec_kind:
+ tp = (PyTypeObject *)state->ParamSpec_type;
+ result = PyType_GenericNew(tp, NULL, NULL);
+ if (!result) goto failed;
+ value = ast2obj_identifier(state, vstate, o->v.ParamSpec.name);
+ if (!value) goto failed;
+ if (PyObject_SetAttr(result, state->name, value) == -1)
+ goto failed;
+ Py_DECREF(value);
+ break;
+ case TypeVarTuple_kind:
+ tp = (PyTypeObject *)state->TypeVarTuple_type;
+ result = PyType_GenericNew(tp, NULL, NULL);
+ if (!result) goto failed;
+ value = ast2obj_identifier(state, vstate, o->v.TypeVarTuple.name);
+ if (!value) goto failed;
+ if (PyObject_SetAttr(result, state->name, value) == -1)
+ goto failed;
+ Py_DECREF(value);
+ break;
+ }
+ value = ast2obj_int(state, vstate, 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);
+ 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);
+ 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);
+ if (!value) goto failed;
+ if (PyObject_SetAttr(result, state->end_col_offset, value) < 0)
+ goto failed;
+ Py_DECREF(value);
+ vstate->recursion_depth--;
+ return result;
+failed:
+ vstate->recursion_depth--;
+ Py_XDECREF(value);
+ Py_XDECREF(result);
+ return NULL;
+}
+
int
obj2ast_mod(struct ast_state *state, PyObject* obj, mod_ty* out, PyArena* arena)
@@ -5568,10 +5832,12 @@ obj2ast_mod(struct ast_state *state, PyObject* obj, mod_ty* out, PyArena* arena)
return 1;
}
if (tmp == NULL) {
- PyErr_SetString(PyExc_TypeError, "required field \"body\" missing from Module");
- return 1;
+ tmp = PyList_New(0);
+ if (tmp == NULL) {
+ return 1;
+ }
}
- else {
+ {
int res;
Py_ssize_t len;
Py_ssize_t i;
@@ -5584,8 +5850,7 @@ obj2ast_mod(struct ast_state *state, PyObject* obj, mod_ty* out, PyArena* arena)
if (body == NULL) goto failed;
for (i = 0; i < len; i++) {
stmt_ty val;
- PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
- Py_INCREF(tmp2);
+ PyObject *tmp2 = Py_NewRef(PyList_GET_ITEM(tmp, i));
if (_Py_EnterRecursiveCall(" while traversing 'Module' node")) {
goto failed;
}
@@ -5605,10 +5870,12 @@ obj2ast_mod(struct ast_state *state, PyObject* obj, mod_ty* out, PyArena* arena)
return 1;
}
if (tmp == NULL) {
- PyErr_SetString(PyExc_TypeError, "required field \"type_ignores\" missing from Module");
- return 1;
+ tmp = PyList_New(0);
+ if (tmp == NULL) {
+ return 1;
+ }
}
- else {
+ {
int res;
Py_ssize_t len;
Py_ssize_t i;
@@ -5621,8 +5888,7 @@ obj2ast_mod(struct ast_state *state, PyObject* obj, mod_ty* out, PyArena* arena)
if (type_ignores == NULL) goto failed;
for (i = 0; i < len; i++) {
type_ignore_ty val;
- PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
- Py_INCREF(tmp2);
+ PyObject *tmp2 = Py_NewRef(PyList_GET_ITEM(tmp, i));
if (_Py_EnterRecursiveCall(" while traversing 'Module' node")) {
goto failed;
}
@@ -5654,10 +5920,12 @@ obj2ast_mod(struct ast_state *state, PyObject* obj, mod_ty* out, PyArena* arena)
return 1;
}
if (tmp == NULL) {
- PyErr_SetString(PyExc_TypeError, "required field \"body\" missing from Interactive");
- return 1;
+ tmp = PyList_New(0);
+ if (tmp == NULL) {
+ return 1;
+ }
}
- else {
+ {
int res;
Py_ssize_t len;
Py_ssize_t i;
@@ -5670,8 +5938,7 @@ obj2ast_mod(struct ast_state *state, PyObject* obj, mod_ty* out, PyArena* arena)
if (body == NULL) goto failed;
for (i = 0; i < len; i++) {
stmt_ty val;
- PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
- Py_INCREF(tmp2);
+ PyObject *tmp2 = Py_NewRef(PyList_GET_ITEM(tmp, i));
if (_Py_EnterRecursiveCall(" while traversing 'Interactive' node")) {
goto failed;
}
@@ -5733,10 +6000,12 @@ obj2ast_mod(struct ast_state *state, PyObject* obj, mod_ty* out, PyArena* arena)
return 1;
}
if (tmp == NULL) {
- PyErr_SetString(PyExc_TypeError, "required field \"argtypes\" missing from FunctionType");
- return 1;
+ tmp = PyList_New(0);
+ if (tmp == NULL) {
+ return 1;
+ }
}
- else {
+ {
int res;
Py_ssize_t len;
Py_ssize_t i;
@@ -5749,8 +6018,7 @@ obj2ast_mod(struct ast_state *state, PyObject* obj, mod_ty* out, PyArena* arena)
if (argtypes == NULL) goto failed;
for (i = 0; i < len; i++) {
expr_ty val;
- PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
- Py_INCREF(tmp2);
+ PyObject *tmp2 = Py_NewRef(PyList_GET_ITEM(tmp, i));
if (_Py_EnterRecursiveCall(" while traversing 'FunctionType' node")) {
goto failed;
}
@@ -5891,6 +6159,7 @@ obj2ast_stmt(struct ast_state *state, PyObject* obj, stmt_ty* out, PyArena*
asdl_expr_seq* decorator_list;
expr_ty returns;
string type_comment;
+ asdl_type_param_seq* type_params;
if (_PyObject_LookupAttr(obj, state->name, &tmp) < 0) {
return 1;
@@ -5930,10 +6199,12 @@ obj2ast_stmt(struct ast_state *state, PyObject* obj, stmt_ty* out, PyArena*
return 1;
}
if (tmp == NULL) {
- PyErr_SetString(PyExc_TypeError, "required field \"body\" missing from FunctionDef");
- return 1;
+ tmp = PyList_New(0);
+ if (tmp == NULL) {
+ return 1;
+ }
}
- else {
+ {
int res;
Py_ssize_t len;
Py_ssize_t i;
@@ -5946,8 +6217,7 @@ obj2ast_stmt(struct ast_state *state, PyObject* obj, stmt_ty* out, PyArena*
if (body == NULL) goto failed;
for (i = 0; i < len; i++) {
stmt_ty val;
- PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
- Py_INCREF(tmp2);
+ PyObject *tmp2 = Py_NewRef(PyList_GET_ITEM(tmp, i));
if (_Py_EnterRecursiveCall(" while traversing 'FunctionDef' node")) {
goto failed;
}
@@ -5967,10 +6237,12 @@ obj2ast_stmt(struct ast_state *state, PyObject* obj, stmt_ty* out, PyArena*
return 1;
}
if (tmp == NULL) {
- PyErr_SetString(PyExc_TypeError, "required field \"decorator_list\" missing from FunctionDef");
- return 1;
+ tmp = PyList_New(0);
+ if (tmp == NULL) {
+ return 1;
+ }
}
- else {
+ {
int res;
Py_ssize_t len;
Py_ssize_t i;
@@ -5983,8 +6255,7 @@ obj2ast_stmt(struct ast_state *state, PyObject* obj, stmt_ty* out, PyArena*
if (decorator_list == NULL) goto failed;
for (i = 0; i < len; i++) {
expr_ty val;
- PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
- Py_INCREF(tmp2);
+ PyObject *tmp2 = Py_NewRef(PyList_GET_ITEM(tmp, i));
if (_Py_EnterRecursiveCall(" while traversing 'FunctionDef' node")) {
goto failed;
}
@@ -6034,9 +6305,48 @@ obj2ast_stmt(struct ast_state *state, PyObject* obj, stmt_ty* out, PyArena*
if (res != 0) goto failed;
Py_CLEAR(tmp);
}
+ if (_PyObject_LookupAttr(obj, state->type_params, &tmp) < 0) {
+ return 1;
+ }
+ if (tmp == NULL) {
+ tmp = PyList_New(0);
+ if (tmp == NULL) {
+ return 1;
+ }
+ }
+ {
+ int res;
+ Py_ssize_t len;
+ Py_ssize_t i;
+ if (!PyList_Check(tmp)) {
+ PyErr_Format(PyExc_TypeError, "FunctionDef field \"type_params\" must be a list, not a %.200s", _PyType_Name(Py_TYPE(tmp)));
+ goto failed;
+ }
+ len = PyList_GET_SIZE(tmp);
+ type_params = _Py_asdl_type_param_seq_new(len, arena);
+ if (type_params == NULL) goto failed;
+ for (i = 0; i < len; i++) {
+ type_param_ty val;
+ PyObject *tmp2 = Py_NewRef(PyList_GET_ITEM(tmp, i));
+ if (_Py_EnterRecursiveCall(" while traversing 'FunctionDef' node")) {
+ goto failed;
+ }
+ res = obj2ast_type_param(state, tmp2, &val, arena);
+ _Py_LeaveRecursiveCall();
+ Py_DECREF(tmp2);
+ if (res != 0) goto failed;
+ if (len != PyList_GET_SIZE(tmp)) {
+ PyErr_SetString(PyExc_RuntimeError, "FunctionDef field \"type_params\" changed size during iteration");
+ goto failed;
+ }
+ asdl_seq_SET(type_params, i, val);
+ }
+ Py_CLEAR(tmp);
+ }
*out = _PyAST_FunctionDef(name, args, body, decorator_list, returns,
- type_comment, lineno, col_offset, end_lineno,
- end_col_offset, arena);
+ type_comment, type_params, lineno,
+ col_offset, end_lineno, end_col_offset,
+ arena);
if (*out == NULL) goto failed;
return 0;
}
@@ -6052,6 +6362,7 @@ obj2ast_stmt(struct ast_state *state, PyObject* obj, stmt_ty* out, PyArena*
asdl_expr_seq* decorator_list;
expr_ty returns;
string type_comment;
+ asdl_type_param_seq* type_params;
if (_PyObject_LookupAttr(obj, state->name, &tmp) < 0) {
return 1;
@@ -6091,10 +6402,12 @@ obj2ast_stmt(struct ast_state *state, PyObject* obj, stmt_ty* out, PyArena*
return 1;
}
if (tmp == NULL) {
- PyErr_SetString(PyExc_TypeError, "required field \"body\" missing from AsyncFunctionDef");
- return 1;
+ tmp = PyList_New(0);
+ if (tmp == NULL) {
+ return 1;
+ }
}
- else {
+ {
int res;
Py_ssize_t len;
Py_ssize_t i;
@@ -6107,8 +6420,7 @@ obj2ast_stmt(struct ast_state *state, PyObject* obj, stmt_ty* out, PyArena*
if (body == NULL) goto failed;
for (i = 0; i < len; i++) {
stmt_ty val;
- PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
- Py_INCREF(tmp2);
+ PyObject *tmp2 = Py_NewRef(PyList_GET_ITEM(tmp, i));
if (_Py_EnterRecursiveCall(" while traversing 'AsyncFunctionDef' node")) {
goto failed;
}
@@ -6128,10 +6440,12 @@ obj2ast_stmt(struct ast_state *state, PyObject* obj, stmt_ty* out, PyArena*
return 1;
}
if (tmp == NULL) {
- PyErr_SetString(PyExc_TypeError, "required field \"decorator_list\" missing from AsyncFunctionDef");
- return 1;
+ tmp = PyList_New(0);
+ if (tmp == NULL) {
+ return 1;
+ }
}
- else {
+ {
int res;
Py_ssize_t len;
Py_ssize_t i;
@@ -6144,8 +6458,7 @@ obj2ast_stmt(struct ast_state *state, PyObject* obj, stmt_ty* out, PyArena*
if (decorator_list == NULL) goto failed;
for (i = 0; i < len; i++) {
expr_ty val;
- PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
- Py_INCREF(tmp2);
+ PyObject *tmp2 = Py_NewRef(PyList_GET_ITEM(tmp, i));
if (_Py_EnterRecursiveCall(" while traversing 'AsyncFunctionDef' node")) {
goto failed;
}
@@ -6195,10 +6508,48 @@ obj2ast_stmt(struct ast_state *state, PyObject* obj, stmt_ty* out, PyArena*
if (res != 0) goto failed;
Py_CLEAR(tmp);
}
+ if (_PyObject_LookupAttr(obj, state->type_params, &tmp) < 0) {
+ return 1;
+ }
+ if (tmp == NULL) {
+ tmp = PyList_New(0);
+ if (tmp == NULL) {
+ return 1;
+ }
+ }
+ {
+ int res;
+ Py_ssize_t len;
+ Py_ssize_t i;
+ if (!PyList_Check(tmp)) {
+ PyErr_Format(PyExc_TypeError, "AsyncFunctionDef field \"type_params\" must be a list, not a %.200s", _PyType_Name(Py_TYPE(tmp)));
+ goto failed;
+ }
+ len = PyList_GET_SIZE(tmp);
+ type_params = _Py_asdl_type_param_seq_new(len, arena);
+ if (type_params == NULL) goto failed;
+ for (i = 0; i < len; i++) {
+ type_param_ty val;
+ PyObject *tmp2 = Py_NewRef(PyList_GET_ITEM(tmp, i));
+ if (_Py_EnterRecursiveCall(" while traversing 'AsyncFunctionDef' node")) {
+ goto failed;
+ }
+ res = obj2ast_type_param(state, tmp2, &val, arena);
+ _Py_LeaveRecursiveCall();
+ Py_DECREF(tmp2);
+ if (res != 0) goto failed;
+ if (len != PyList_GET_SIZE(tmp)) {
+ PyErr_SetString(PyExc_RuntimeError, "AsyncFunctionDef field \"type_params\" changed size during iteration");
+ goto failed;
+ }
+ asdl_seq_SET(type_params, i, val);
+ }
+ Py_CLEAR(tmp);
+ }
*out = _PyAST_AsyncFunctionDef(name, args, body, decorator_list,
- returns, type_comment, lineno,
- col_offset, end_lineno, end_col_offset,
- arena);
+ returns, type_comment, type_params,
+ lineno, col_offset, end_lineno,
+ end_col_offset, arena);
if (*out == NULL) goto failed;
return 0;
}
@@ -6213,6 +6564,7 @@ obj2ast_stmt(struct ast_state *state, PyObject* obj, stmt_ty* out, PyArena*
asdl_keyword_seq* keywords;
asdl_stmt_seq* body;
asdl_expr_seq* decorator_list;
+ asdl_type_param_seq* type_params;
if (_PyObject_LookupAttr(obj, state->name, &tmp) < 0) {
return 1;
@@ -6235,10 +6587,12 @@ obj2ast_stmt(struct ast_state *state, PyObject* obj, stmt_ty* out, PyArena*
return 1;
}
if (tmp == NULL) {
- PyErr_SetString(PyExc_TypeError, "required field \"bases\" missing from ClassDef");
- return 1;
+ tmp = PyList_New(0);
+ if (tmp == NULL) {
+ return 1;
+ }
}
- else {
+ {
int res;
Py_ssize_t len;
Py_ssize_t i;
@@ -6251,8 +6605,7 @@ obj2ast_stmt(struct ast_state *state, PyObject* obj, stmt_ty* out, PyArena*
if (bases == NULL) goto failed;
for (i = 0; i < len; i++) {
expr_ty val;
- PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
- Py_INCREF(tmp2);
+ PyObject *tmp2 = Py_NewRef(PyList_GET_ITEM(tmp, i));
if (_Py_EnterRecursiveCall(" while traversing 'ClassDef' node")) {
goto failed;
}
@@ -6272,10 +6625,12 @@ obj2ast_stmt(struct ast_state *state, PyObject* obj, stmt_ty* out, PyArena*
return 1;
}
if (tmp == NULL) {
- PyErr_SetString(PyExc_TypeError, "required field \"keywords\" missing from ClassDef");
- return 1;
+ tmp = PyList_New(0);
+ if (tmp == NULL) {
+ return 1;
+ }
}
- else {
+ {
int res;
Py_ssize_t len;
Py_ssize_t i;
@@ -6288,8 +6643,7 @@ obj2ast_stmt(struct ast_state *state, PyObject* obj, stmt_ty* out, PyArena*
if (keywords == NULL) goto failed;
for (i = 0; i < len; i++) {
keyword_ty val;
- PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
- Py_INCREF(tmp2);
+ PyObject *tmp2 = Py_NewRef(PyList_GET_ITEM(tmp, i));
if (_Py_EnterRecursiveCall(" while traversing 'ClassDef' node")) {
goto failed;
}
@@ -6309,10 +6663,12 @@ obj2ast_stmt(struct ast_state *state, PyObject* obj, stmt_ty* out, PyArena*
return 1;
}
if (tmp == NULL) {
- PyErr_SetString(PyExc_TypeError, "required field \"body\" missing from ClassDef");
- return 1;
+ tmp = PyList_New(0);
+ if (tmp == NULL) {
+ return 1;
+ }
}
- else {
+ {
int res;
Py_ssize_t len;
Py_ssize_t i;
@@ -6325,8 +6681,7 @@ obj2ast_stmt(struct ast_state *state, PyObject* obj, stmt_ty* out, PyArena*
if (body == NULL) goto failed;
for (i = 0; i < len; i++) {
stmt_ty val;
- PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
- Py_INCREF(tmp2);
+ PyObject *tmp2 = Py_NewRef(PyList_GET_ITEM(tmp, i));
if (_Py_EnterRecursiveCall(" while traversing 'ClassDef' node")) {
goto failed;
}
@@ -6346,10 +6701,12 @@ obj2ast_stmt(struct ast_state *state, PyObject* obj, stmt_ty* out, PyArena*
return 1;
}
if (tmp == NULL) {
- PyErr_SetString(PyExc_TypeError, "required field \"decorator_list\" missing from ClassDef");
- return 1;
+ tmp = PyList_New(0);
+ if (tmp == NULL) {
+ return 1;
+ }
}
- else {
+ {
int res;
Py_ssize_t len;
Py_ssize_t i;
@@ -6362,8 +6719,7 @@ obj2ast_stmt(struct ast_state *state, PyObject* obj, stmt_ty* out, PyArena*
if (decorator_list == NULL) goto failed;
for (i = 0; i < len; i++) {
expr_ty val;
- PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
- Py_INCREF(tmp2);
+ PyObject *tmp2 = Py_NewRef(PyList_GET_ITEM(tmp, i));
if (_Py_EnterRecursiveCall(" while traversing 'ClassDef' node")) {
goto failed;
}
@@ -6379,9 +6735,47 @@ obj2ast_stmt(struct ast_state *state, PyObject* obj, stmt_ty* out, PyArena*
}
Py_CLEAR(tmp);
}
+ if (_PyObject_LookupAttr(obj, state->type_params, &tmp) < 0) {
+ return 1;
+ }
+ if (tmp == NULL) {
+ tmp = PyList_New(0);
+ if (tmp == NULL) {
+ return 1;
+ }
+ }
+ {
+ int res;
+ Py_ssize_t len;
+ Py_ssize_t i;
+ if (!PyList_Check(tmp)) {
+ PyErr_Format(PyExc_TypeError, "ClassDef field \"type_params\" must be a list, not a %.200s", _PyType_Name(Py_TYPE(tmp)));
+ goto failed;
+ }
+ len = PyList_GET_SIZE(tmp);
+ type_params = _Py_asdl_type_param_seq_new(len, arena);
+ if (type_params == NULL) goto failed;
+ for (i = 0; i < len; i++) {
+ type_param_ty val;
+ PyObject *tmp2 = Py_NewRef(PyList_GET_ITEM(tmp, i));
+ if (_Py_EnterRecursiveCall(" while traversing 'ClassDef' node")) {
+ goto failed;
+ }
+ res = obj2ast_type_param(state, tmp2, &val, arena);
+ _Py_LeaveRecursiveCall();
+ Py_DECREF(tmp2);
+ if (res != 0) goto failed;
+ if (len != PyList_GET_SIZE(tmp)) {
+ PyErr_SetString(PyExc_RuntimeError, "ClassDef field \"type_params\" changed size during iteration");
+ goto failed;
+ }
+ asdl_seq_SET(type_params, i, val);
+ }
+ Py_CLEAR(tmp);
+ }
*out = _PyAST_ClassDef(name, bases, keywords, body, decorator_list,
- lineno, col_offset, end_lineno, end_col_offset,
- arena);
+ type_params, lineno, col_offset, end_lineno,
+ end_col_offset, arena);
if (*out == NULL) goto failed;
return 0;
}
@@ -6427,10 +6821,12 @@ obj2ast_stmt(struct ast_state *state, PyObject* obj, stmt_ty* out, PyArena*
return 1;
}
if (tmp == NULL) {
- PyErr_SetString(PyExc_TypeError, "required field \"targets\" missing from Delete");
- return 1;
+ tmp = PyList_New(0);
+ if (tmp == NULL) {
+ return 1;
+ }
}
- else {
+ {
int res;
Py_ssize_t len;
Py_ssize_t i;
@@ -6443,8 +6839,7 @@ obj2ast_stmt(struct ast_state *state, PyObject* obj, stmt_ty* out, PyArena*
if (targets == NULL) goto failed;
for (i = 0; i < len; i++) {
expr_ty val;
- PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
- Py_INCREF(tmp2);
+ PyObject *tmp2 = Py_NewRef(PyList_GET_ITEM(tmp, i));
if (_Py_EnterRecursiveCall(" while traversing 'Delete' node")) {
goto failed;
}
@@ -6479,10 +6874,12 @@ obj2ast_stmt(struct ast_state *state, PyObject* obj, stmt_ty* out, PyArena*
return 1;
}
if (tmp == NULL) {
- PyErr_SetString(PyExc_TypeError, "required field \"targets\" missing from Assign");
- return 1;
+ tmp = PyList_New(0);
+ if (tmp == NULL) {
+ return 1;
+ }
}
- else {
+ {
int res;
Py_ssize_t len;
Py_ssize_t i;
@@ -6495,8 +6892,7 @@ obj2ast_stmt(struct ast_state *state, PyObject* obj, stmt_ty* out, PyArena*
if (targets == NULL) goto failed;
for (i = 0; i < len; i++) {
expr_ty val;
- PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
- Py_INCREF(tmp2);
+ PyObject *tmp2 = Py_NewRef(PyList_GET_ITEM(tmp, i));
if (_Py_EnterRecursiveCall(" while traversing 'Assign' node")) {
goto failed;
}
@@ -6551,6 +6947,93 @@ obj2ast_stmt(struct ast_state *state, PyObject* obj, stmt_ty* out, PyArena*
if (*out == NULL) goto failed;
return 0;
}
+ tp = state->TypeAlias_type;
+ isinstance = PyObject_IsInstance(obj, tp);
+ if (isinstance == -1) {
+ return 1;
+ }
+ if (isinstance) {
+ expr_ty name;
+ asdl_type_param_seq* type_params;
+ expr_ty value;
+
+ if (_PyObject_LookupAttr(obj, state->name, &tmp) < 0) {
+ return 1;
+ }
+ if (tmp == NULL) {
+ PyErr_SetString(PyExc_TypeError, "required field \"name\" missing from TypeAlias");
+ return 1;
+ }
+ else {
+ int res;
+ if (_Py_EnterRecursiveCall(" while traversing 'TypeAlias' node")) {
+ goto failed;
+ }
+ res = obj2ast_expr(state, tmp, &name, arena);
+ _Py_LeaveRecursiveCall();
+ if (res != 0) goto failed;
+ Py_CLEAR(tmp);
+ }
+ if (_PyObject_LookupAttr(obj, state->type_params, &tmp) < 0) {
+ return 1;
+ }
+ if (tmp == NULL) {
+ tmp = PyList_New(0);
+ if (tmp == NULL) {
+ return 1;
+ }
+ }
+ {
+ int res;
+ Py_ssize_t len;
+ Py_ssize_t i;
+ if (!PyList_Check(tmp)) {
+ PyErr_Format(PyExc_TypeError, "TypeAlias field \"type_params\" must be a list, not a %.200s", _PyType_Name(Py_TYPE(tmp)));
+ goto failed;
+ }
+ len = PyList_GET_SIZE(tmp);
+ type_params = _Py_asdl_type_param_seq_new(len, arena);
+ if (type_params == NULL) goto failed;
+ for (i = 0; i < len; i++) {
+ type_param_ty val;
+ PyObject *tmp2 = Py_NewRef(PyList_GET_ITEM(tmp, i));
+ if (_Py_EnterRecursiveCall(" while traversing 'TypeAlias' node")) {
+ goto failed;
+ }
+ res = obj2ast_type_param(state, tmp2, &val, arena);
+ _Py_LeaveRecursiveCall();
+ Py_DECREF(tmp2);
+ if (res != 0) goto failed;
+ if (len != PyList_GET_SIZE(tmp)) {
+ PyErr_SetString(PyExc_RuntimeError, "TypeAlias field \"type_params\" changed size during iteration");
+ goto failed;
+ }
+ asdl_seq_SET(type_params, i, val);
+ }
+ Py_CLEAR(tmp);
+ }
+ if (_PyObject_LookupAttr(obj, state->value, &tmp) < 0) {
+ return 1;
+ }
+ if (tmp == NULL) {
+ PyErr_SetString(PyExc_TypeError, "required field \"value\" missing from TypeAlias");
+ return 1;
+ }
+ else {
+ int res;
+ if (_Py_EnterRecursiveCall(" while traversing 'TypeAlias' node")) {
+ goto failed;
+ }
+ res = obj2ast_expr(state, tmp, &value, arena);
+ _Py_LeaveRecursiveCall();
+ if (res != 0) goto failed;
+ Py_CLEAR(tmp);
+ }
+ *out = _PyAST_TypeAlias(name, type_params, value, lineno, col_offset,
+ end_lineno, end_col_offset, arena);
+ if (*out == NULL) goto failed;
+ return 0;
+ }
tp = state->AugAssign_type;
isinstance = PyObject_IsInstance(obj, tp);
if (isinstance == -1) {
@@ -6751,10 +7234,12 @@ obj2ast_stmt(struct ast_state *state, PyObject* obj, stmt_ty* out, PyArena*
return 1;
}
if (tmp == NULL) {
- PyErr_SetString(PyExc_TypeError, "required field \"body\" missing from For");
- return 1;
+ tmp = PyList_New(0);
+ if (tmp == NULL) {
+ return 1;
+ }
}
- else {
+ {
int res;
Py_ssize_t len;
Py_ssize_t i;
@@ -6767,8 +7252,7 @@ obj2ast_stmt(struct ast_state *state, PyObject* obj, stmt_ty* out, PyArena*
if (body == NULL) goto failed;
for (i = 0; i < len; i++) {
stmt_ty val;
- PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
- Py_INCREF(tmp2);
+ PyObject *tmp2 = Py_NewRef(PyList_GET_ITEM(tmp, i));
if (_Py_EnterRecursiveCall(" while traversing 'For' node")) {
goto failed;
}
@@ -6788,10 +7272,12 @@ obj2ast_stmt(struct ast_state *state, PyObject* obj, stmt_ty* out, PyArena*
return 1;
}
if (tmp == NULL) {
- PyErr_SetString(PyExc_TypeError, "required field \"orelse\" missing from For");
- return 1;
+ tmp = PyList_New(0);
+ if (tmp == NULL) {
+ return 1;
+ }
}
- else {
+ {
int res;
Py_ssize_t len;
Py_ssize_t i;
@@ -6804,8 +7290,7 @@ obj2ast_stmt(struct ast_state *state, PyObject* obj, stmt_ty* out, PyArena*
if (orelse == NULL) goto failed;
for (i = 0; i < len; i++) {
stmt_ty val;
- PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
- Py_INCREF(tmp2);
+ PyObject *tmp2 = Py_NewRef(PyList_GET_ITEM(tmp, i));
if (_Py_EnterRecursiveCall(" while traversing 'For' node")) {
goto failed;
}
@@ -6893,10 +7378,12 @@ obj2ast_stmt(struct ast_state *state, PyObject* obj, stmt_ty* out, PyArena*
return 1;
}
if (tmp == NULL) {
- PyErr_SetString(PyExc_TypeError, "required field \"body\" missing from AsyncFor");
- return 1;
+ tmp = PyList_New(0);
+ if (tmp == NULL) {
+ return 1;
+ }
}
- else {
+ {
int res;
Py_ssize_t len;
Py_ssize_t i;
@@ -6909,8 +7396,7 @@ obj2ast_stmt(struct ast_state *state, PyObject* obj, stmt_ty* out, PyArena*
if (body == NULL) goto failed;
for (i = 0; i < len; i++) {
stmt_ty val;
- PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
- Py_INCREF(tmp2);
+ PyObject *tmp2 = Py_NewRef(PyList_GET_ITEM(tmp, i));
if (_Py_EnterRecursiveCall(" while traversing 'AsyncFor' node")) {
goto failed;
}
@@ -6930,10 +7416,12 @@ obj2ast_stmt(struct ast_state *state, PyObject* obj, stmt_ty* out, PyArena*
return 1;
}
if (tmp == NULL) {
- PyErr_SetString(PyExc_TypeError, "required field \"orelse\" missing from AsyncFor");
- return 1;
+ tmp = PyList_New(0);
+ if (tmp == NULL) {
+ return 1;
+ }
}
- else {
+ {
int res;
Py_ssize_t len;
Py_ssize_t i;
@@ -6946,8 +7434,7 @@ obj2ast_stmt(struct ast_state *state, PyObject* obj, stmt_ty* out, PyArena*
if (orelse == NULL) goto failed;
for (i = 0; i < len; i++) {
stmt_ty val;
- PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
- Py_INCREF(tmp2);
+ PyObject *tmp2 = Py_NewRef(PyList_GET_ITEM(tmp, i));
if (_Py_EnterRecursiveCall(" while traversing 'AsyncFor' node")) {
goto failed;
}
@@ -7017,10 +7504,12 @@ obj2ast_stmt(struct ast_state *state, PyObject* obj, stmt_ty* out, PyArena*
return 1;
}
if (tmp == NULL) {
- PyErr_SetString(PyExc_TypeError, "required field \"body\" missing from While");
- return 1;
+ tmp = PyList_New(0);
+ if (tmp == NULL) {
+ return 1;
+ }
}
- else {
+ {
int res;
Py_ssize_t len;
Py_ssize_t i;
@@ -7033,8 +7522,7 @@ obj2ast_stmt(struct ast_state *state, PyObject* obj, stmt_ty* out, PyArena*
if (body == NULL) goto failed;
for (i = 0; i < len; i++) {
stmt_ty val;
- PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
- Py_INCREF(tmp2);
+ PyObject *tmp2 = Py_NewRef(PyList_GET_ITEM(tmp, i));
if (_Py_EnterRecursiveCall(" while traversing 'While' node")) {
goto failed;
}
@@ -7054,10 +7542,12 @@ obj2ast_stmt(struct ast_state *state, PyObject* obj, stmt_ty* out, PyArena*
return 1;
}
if (tmp == NULL) {
- PyErr_SetString(PyExc_TypeError, "required field \"orelse\" missing from While");
- return 1;
+ tmp = PyList_New(0);
+ if (tmp == NULL) {
+ return 1;
+ }
}
- else {
+ {
int res;
Py_ssize_t len;
Py_ssize_t i;
@@ -7070,8 +7560,7 @@ obj2ast_stmt(struct ast_state *state, PyObject* obj, stmt_ty* out, PyArena*
if (orelse == NULL) goto failed;
for (i = 0; i < len; i++) {
stmt_ty val;
- PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
- Py_INCREF(tmp2);
+ PyObject *tmp2 = Py_NewRef(PyList_GET_ITEM(tmp, i));
if (_Py_EnterRecursiveCall(" while traversing 'While' node")) {
goto failed;
}
@@ -7123,10 +7612,12 @@ obj2ast_stmt(struct ast_state *state, PyObject* obj, stmt_ty* out, PyArena*
return 1;
}
if (tmp == NULL) {
- PyErr_SetString(PyExc_TypeError, "required field \"body\" missing from If");
- return 1;
+ tmp = PyList_New(0);
+ if (tmp == NULL) {
+ return 1;
+ }
}
- else {
+ {
int res;
Py_ssize_t len;
Py_ssize_t i;
@@ -7139,8 +7630,7 @@ obj2ast_stmt(struct ast_state *state, PyObject* obj, stmt_ty* out, PyArena*
if (body == NULL) goto failed;
for (i = 0; i < len; i++) {
stmt_ty val;
- PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
- Py_INCREF(tmp2);
+ PyObject *tmp2 = Py_NewRef(PyList_GET_ITEM(tmp, i));
if (_Py_EnterRecursiveCall(" while traversing 'If' node")) {
goto failed;
}
@@ -7160,10 +7650,12 @@ obj2ast_stmt(struct ast_state *state, PyObject* obj, stmt_ty* out, PyArena*
return 1;
}
if (tmp == NULL) {
- PyErr_SetString(PyExc_TypeError, "required field \"orelse\" missing from If");
- return 1;
+ tmp = PyList_New(0);
+ if (tmp == NULL) {
+ return 1;
+ }
}
- else {
+ {
int res;
Py_ssize_t len;
Py_ssize_t i;
@@ -7176,8 +7668,7 @@ obj2ast_stmt(struct ast_state *state, PyObject* obj, stmt_ty* out, PyArena*
if (orelse == NULL) goto failed;
for (i = 0; i < len; i++) {
stmt_ty val;
- PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
- Py_INCREF(tmp2);
+ PyObject *tmp2 = Py_NewRef(PyList_GET_ITEM(tmp, i));
if (_Py_EnterRecursiveCall(" while traversing 'If' node")) {
goto failed;
}
@@ -7212,10 +7703,12 @@ obj2ast_stmt(struct ast_state *state, PyObject* obj, stmt_ty* out, PyArena*
return 1;
}
if (tmp == NULL) {
- PyErr_SetString(PyExc_TypeError, "required field \"items\" missing from With");
- return 1;
+ tmp = PyList_New(0);
+ if (tmp == NULL) {
+ return 1;
+ }
}
- else {
+ {
int res;
Py_ssize_t len;
Py_ssize_t i;
@@ -7228,8 +7721,7 @@ obj2ast_stmt(struct ast_state *state, PyObject* obj, stmt_ty* out, PyArena*
if (items == NULL) goto failed;
for (i = 0; i < len; i++) {
withitem_ty val;
- PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
- Py_INCREF(tmp2);
+ PyObject *tmp2 = Py_NewRef(PyList_GET_ITEM(tmp, i));
if (_Py_EnterRecursiveCall(" while traversing 'With' node")) {
goto failed;
}
@@ -7249,10 +7741,12 @@ obj2ast_stmt(struct ast_state *state, PyObject* obj, stmt_ty* out, PyArena*
return 1;
}
if (tmp == NULL) {
- PyErr_SetString(PyExc_TypeError, "required field \"body\" missing from With");
- return 1;
+ tmp = PyList_New(0);
+ if (tmp == NULL) {
+ return 1;
+ }
}
- else {
+ {
int res;
Py_ssize_t len;
Py_ssize_t i;
@@ -7265,8 +7759,7 @@ obj2ast_stmt(struct ast_state *state, PyObject* obj, stmt_ty* out, PyArena*
if (body == NULL) goto failed;
for (i = 0; i < len; i++) {
stmt_ty val;
- PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
- Py_INCREF(tmp2);
+ PyObject *tmp2 = Py_NewRef(PyList_GET_ITEM(tmp, i));
if (_Py_EnterRecursiveCall(" while traversing 'With' node")) {
goto failed;
}
@@ -7318,10 +7811,12 @@ obj2ast_stmt(struct ast_state *state, PyObject* obj, stmt_ty* out, PyArena*
return 1;
}
if (tmp == NULL) {
- PyErr_SetString(PyExc_TypeError, "required field \"items\" missing from AsyncWith");
- return 1;
+ tmp = PyList_New(0);
+ if (tmp == NULL) {
+ return 1;
+ }
}
- else {
+ {
int res;
Py_ssize_t len;
Py_ssize_t i;
@@ -7334,8 +7829,7 @@ obj2ast_stmt(struct ast_state *state, PyObject* obj, stmt_ty* out, PyArena*
if (items == NULL) goto failed;
for (i = 0; i < len; i++) {
withitem_ty val;
- PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
- Py_INCREF(tmp2);
+ PyObject *tmp2 = Py_NewRef(PyList_GET_ITEM(tmp, i));
if (_Py_EnterRecursiveCall(" while traversing 'AsyncWith' node")) {
goto failed;
}
@@ -7355,10 +7849,12 @@ obj2ast_stmt(struct ast_state *state, PyObject* obj, stmt_ty* out, PyArena*
return 1;
}
if (tmp == NULL) {
- PyErr_SetString(PyExc_TypeError, "required field \"body\" missing from AsyncWith");
- return 1;
+ tmp = PyList_New(0);
+ if (tmp == NULL) {
+ return 1;
+ }
}
- else {
+ {
int res;
Py_ssize_t len;
Py_ssize_t i;
@@ -7371,8 +7867,7 @@ obj2ast_stmt(struct ast_state *state, PyObject* obj, stmt_ty* out, PyArena*
if (body == NULL) goto failed;
for (i = 0; i < len; i++) {
stmt_ty val;
- PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
- Py_INCREF(tmp2);
+ PyObject *tmp2 = Py_NewRef(PyList_GET_ITEM(tmp, i));
if (_Py_EnterRecursiveCall(" while traversing 'AsyncWith' node")) {
goto failed;
}
@@ -7440,10 +7935,12 @@ obj2ast_stmt(struct ast_state *state, PyObject* obj, stmt_ty* out, PyArena*
return 1;
}
if (tmp == NULL) {
- PyErr_SetString(PyExc_TypeError, "required field \"cases\" missing from Match");
- return 1;
+ tmp = PyList_New(0);
+ if (tmp == NULL) {
+ return 1;
+ }
}
- else {
+ {
int res;
Py_ssize_t len;
Py_ssize_t i;
@@ -7456,8 +7953,7 @@ obj2ast_stmt(struct ast_state *state, PyObject* obj, stmt_ty* out, PyArena*
if (cases == NULL) goto failed;
for (i = 0; i < len; i++) {
match_case_ty val;
- PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
- Py_INCREF(tmp2);
+ PyObject *tmp2 = Py_NewRef(PyList_GET_ITEM(tmp, i));
if (_Py_EnterRecursiveCall(" while traversing 'Match' node")) {
goto failed;
}
@@ -7541,10 +8037,12 @@ obj2ast_stmt(struct ast_state *state, PyObject* obj, stmt_ty* out, PyArena*
return 1;
}
if (tmp == NULL) {
- PyErr_SetString(PyExc_TypeError, "required field \"body\" missing from Try");
- return 1;
+ tmp = PyList_New(0);
+ if (tmp == NULL) {
+ return 1;
+ }
}
- else {
+ {
int res;
Py_ssize_t len;
Py_ssize_t i;
@@ -7557,8 +8055,7 @@ obj2ast_stmt(struct ast_state *state, PyObject* obj, stmt_ty* out, PyArena*
if (body == NULL) goto failed;
for (i = 0; i < len; i++) {
stmt_ty val;
- PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
- Py_INCREF(tmp2);
+ PyObject *tmp2 = Py_NewRef(PyList_GET_ITEM(tmp, i));
if (_Py_EnterRecursiveCall(" while traversing 'Try' node")) {
goto failed;
}
@@ -7578,10 +8075,12 @@ obj2ast_stmt(struct ast_state *state, PyObject* obj, stmt_ty* out, PyArena*
return 1;
}
if (tmp == NULL) {
- PyErr_SetString(PyExc_TypeError, "required field \"handlers\" missing from Try");
- return 1;
+ tmp = PyList_New(0);
+ if (tmp == NULL) {
+ return 1;
+ }
}
- else {
+ {
int res;
Py_ssize_t len;
Py_ssize_t i;
@@ -7594,8 +8093,7 @@ obj2ast_stmt(struct ast_state *state, PyObject* obj, stmt_ty* out, PyArena*
if (handlers == NULL) goto failed;
for (i = 0; i < len; i++) {
excepthandler_ty val;
- PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
- Py_INCREF(tmp2);
+ PyObject *tmp2 = Py_NewRef(PyList_GET_ITEM(tmp, i));
if (_Py_EnterRecursiveCall(" while traversing 'Try' node")) {
goto failed;
}
@@ -7615,10 +8113,12 @@ obj2ast_stmt(struct ast_state *state, PyObject* obj, stmt_ty* out, PyArena*
return 1;
}
if (tmp == NULL) {
- PyErr_SetString(PyExc_TypeError, "required field \"orelse\" missing from Try");
- return 1;
+ tmp = PyList_New(0);
+ if (tmp == NULL) {
+ return 1;
+ }
}
- else {
+ {
int res;
Py_ssize_t len;
Py_ssize_t i;
@@ -7631,8 +8131,7 @@ obj2ast_stmt(struct ast_state *state, PyObject* obj, stmt_ty* out, PyArena*
if (orelse == NULL) goto failed;
for (i = 0; i < len; i++) {
stmt_ty val;
- PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
- Py_INCREF(tmp2);
+ PyObject *tmp2 = Py_NewRef(PyList_GET_ITEM(tmp, i));
if (_Py_EnterRecursiveCall(" while traversing 'Try' node")) {
goto failed;
}
@@ -7652,10 +8151,12 @@ obj2ast_stmt(struct ast_state *state, PyObject* obj, stmt_ty* out, PyArena*
return 1;
}
if (tmp == NULL) {
- PyErr_SetString(PyExc_TypeError, "required field \"finalbody\" missing from Try");
- return 1;
+ tmp = PyList_New(0);
+ if (tmp == NULL) {
+ return 1;
+ }
}
- else {
+ {
int res;
Py_ssize_t len;
Py_ssize_t i;
@@ -7668,8 +8169,7 @@ obj2ast_stmt(struct ast_state *state, PyObject* obj, stmt_ty* out, PyArena*
if (finalbody == NULL) goto failed;
for (i = 0; i < len; i++) {
stmt_ty val;
- PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
- Py_INCREF(tmp2);
+ PyObject *tmp2 = Py_NewRef(PyList_GET_ITEM(tmp, i));
if (_Py_EnterRecursiveCall(" while traversing 'Try' node")) {
goto failed;
}
@@ -7705,10 +8205,12 @@ obj2ast_stmt(struct ast_state *state, PyObject* obj, stmt_ty* out, PyArena*
return 1;
}
if (tmp == NULL) {
- PyErr_SetString(PyExc_TypeError, "required field \"body\" missing from TryStar");
- return 1;
+ tmp = PyList_New(0);
+ if (tmp == NULL) {
+ return 1;
+ }
}
- else {
+ {
int res;
Py_ssize_t len;
Py_ssize_t i;
@@ -7721,8 +8223,7 @@ obj2ast_stmt(struct ast_state *state, PyObject* obj, stmt_ty* out, PyArena*
if (body == NULL) goto failed;
for (i = 0; i < len; i++) {
stmt_ty val;
- PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
- Py_INCREF(tmp2);
+ PyObject *tmp2 = Py_NewRef(PyList_GET_ITEM(tmp, i));
if (_Py_EnterRecursiveCall(" while traversing 'TryStar' node")) {
goto failed;
}
@@ -7742,10 +8243,12 @@ obj2ast_stmt(struct ast_state *state, PyObject* obj, stmt_ty* out, PyArena*
return 1;
}
if (tmp == NULL) {
- PyErr_SetString(PyExc_TypeError, "required field \"handlers\" missing from TryStar");
- return 1;
+ tmp = PyList_New(0);
+ if (tmp == NULL) {
+ return 1;
+ }
}
- else {
+ {
int res;
Py_ssize_t len;
Py_ssize_t i;
@@ -7758,8 +8261,7 @@ obj2ast_stmt(struct ast_state *state, PyObject* obj, stmt_ty* out, PyArena*
if (handlers == NULL) goto failed;
for (i = 0; i < len; i++) {
excepthandler_ty val;
- PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
- Py_INCREF(tmp2);
+ PyObject *tmp2 = Py_NewRef(PyList_GET_ITEM(tmp, i));
if (_Py_EnterRecursiveCall(" while traversing 'TryStar' node")) {
goto failed;
}
@@ -7779,10 +8281,12 @@ obj2ast_stmt(struct ast_state *state, PyObject* obj, stmt_ty* out, PyArena*
return 1;
}
if (tmp == NULL) {
- PyErr_SetString(PyExc_TypeError, "required field \"orelse\" missing from TryStar");
- return 1;
+ tmp = PyList_New(0);
+ if (tmp == NULL) {
+ return 1;
+ }
}
- else {
+ {
int res;
Py_ssize_t len;
Py_ssize_t i;
@@ -7795,8 +8299,7 @@ obj2ast_stmt(struct ast_state *state, PyObject* obj, stmt_ty* out, PyArena*
if (orelse == NULL) goto failed;
for (i = 0; i < len; i++) {
stmt_ty val;
- PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
- Py_INCREF(tmp2);
+ PyObject *tmp2 = Py_NewRef(PyList_GET_ITEM(tmp, i));
if (_Py_EnterRecursiveCall(" while traversing 'TryStar' node")) {
goto failed;
}
@@ -7816,10 +8319,12 @@ obj2ast_stmt(struct ast_state *state, PyObject* obj, stmt_ty* out, PyArena*
return 1;
}
if (tmp == NULL) {
- PyErr_SetString(PyExc_TypeError, "required field \"finalbody\" missing from TryStar");
- return 1;
+ tmp = PyList_New(0);
+ if (tmp == NULL) {
+ return 1;
+ }
}
- else {
+ {
int res;
Py_ssize_t len;
Py_ssize_t i;
@@ -7832,8 +8337,7 @@ obj2ast_stmt(struct ast_state *state, PyObject* obj, stmt_ty* out, PyArena*
if (finalbody == NULL) goto failed;
for (i = 0; i < len; i++) {
stmt_ty val;
- PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
- Py_INCREF(tmp2);
+ PyObject *tmp2 = Py_NewRef(PyList_GET_ITEM(tmp, i));
if (_Py_EnterRecursiveCall(" while traversing 'TryStar' node")) {
goto failed;
}
@@ -7914,10 +8418,12 @@ obj2ast_stmt(struct ast_state *state, PyObject* obj, stmt_ty* out, PyArena*
return 1;
}
if (tmp == NULL) {
- PyErr_SetString(PyExc_TypeError, "required field \"names\" missing from Import");
- return 1;
+ tmp = PyList_New(0);
+ if (tmp == NULL) {
+ return 1;
+ }
}
- else {
+ {
int res;
Py_ssize_t len;
Py_ssize_t i;
@@ -7930,8 +8436,7 @@ obj2ast_stmt(struct ast_state *state, PyObject* obj, stmt_ty* out, PyArena*
if (names == NULL) goto failed;
for (i = 0; i < len; i++) {
alias_ty val;
- PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
- Py_INCREF(tmp2);
+ PyObject *tmp2 = Py_NewRef(PyList_GET_ITEM(tmp, i));
if (_Py_EnterRecursiveCall(" while traversing 'Import' node")) {
goto failed;
}
@@ -7983,10 +8488,12 @@ obj2ast_stmt(struct ast_state *state, PyObject* obj, stmt_ty* out, PyArena*
return 1;
}
if (tmp == NULL) {
- PyErr_SetString(PyExc_TypeError, "required field \"names\" missing from ImportFrom");
- return 1;
+ tmp = PyList_New(0);
+ if (tmp == NULL) {
+ return 1;
+ }
}
- else {
+ {
int res;
Py_ssize_t len;
Py_ssize_t i;
@@ -7999,8 +8506,7 @@ obj2ast_stmt(struct ast_state *state, PyObject* obj, stmt_ty* out, PyArena*
if (names == NULL) goto failed;
for (i = 0; i < len; i++) {
alias_ty val;
- PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
- Py_INCREF(tmp2);
+ PyObject *tmp2 = Py_NewRef(PyList_GET_ITEM(tmp, i));
if (_Py_EnterRecursiveCall(" while traversing 'ImportFrom' node")) {
goto failed;
}
@@ -8050,10 +8556,12 @@ obj2ast_stmt(struct ast_state *state, PyObject* obj, stmt_ty* out, PyArena*
return 1;
}
if (tmp == NULL) {
- PyErr_SetString(PyExc_TypeError, "required field \"names\" missing from Global");
- return 1;
+ tmp = PyList_New(0);
+ if (tmp == NULL) {
+ return 1;
+ }
}
- else {
+ {
int res;
Py_ssize_t len;
Py_ssize_t i;
@@ -8066,8 +8574,7 @@ obj2ast_stmt(struct ast_state *state, PyObject* obj, stmt_ty* out, PyArena*
if (names == NULL) goto failed;
for (i = 0; i < len; i++) {
identifier val;
- PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
- Py_INCREF(tmp2);
+ PyObject *tmp2 = Py_NewRef(PyList_GET_ITEM(tmp, i));
if (_Py_EnterRecursiveCall(" while traversing 'Global' node")) {
goto failed;
}
@@ -8100,10 +8607,12 @@ obj2ast_stmt(struct ast_state *state, PyObject* obj, stmt_ty* out, PyArena*
return 1;
}
if (tmp == NULL) {
- PyErr_SetString(PyExc_TypeError, "required field \"names\" missing from Nonlocal");
- return 1;
+ tmp = PyList_New(0);
+ if (tmp == NULL) {
+ return 1;
+ }
}
- else {
+ {
int res;
Py_ssize_t len;
Py_ssize_t i;
@@ -8116,8 +8625,7 @@ obj2ast_stmt(struct ast_state *state, PyObject* obj, stmt_ty* out, PyArena*
if (names == NULL) goto failed;
for (i = 0; i < len; i++) {
identifier val;
- PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
- Py_INCREF(tmp2);
+ PyObject *tmp2 = Py_NewRef(PyList_GET_ITEM(tmp, i));
if (_Py_EnterRecursiveCall(" while traversing 'Nonlocal' node")) {
goto failed;
}
@@ -8326,10 +8834,12 @@ obj2ast_expr(struct ast_state *state, PyObject* obj, expr_ty* out, PyArena*
return 1;
}
if (tmp == NULL) {
- PyErr_SetString(PyExc_TypeError, "required field \"values\" missing from BoolOp");
- return 1;
+ tmp = PyList_New(0);
+ if (tmp == NULL) {
+ return 1;
+ }
}
- else {
+ {
int res;
Py_ssize_t len;
Py_ssize_t i;
@@ -8342,8 +8852,7 @@ obj2ast_expr(struct ast_state *state, PyObject* obj, expr_ty* out, PyArena*
if (values == NULL) goto failed;
for (i = 0; i < len; i++) {
expr_ty val;
- PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
- Py_INCREF(tmp2);
+ PyObject *tmp2 = Py_NewRef(PyList_GET_ITEM(tmp, i));
if (_Py_EnterRecursiveCall(" while traversing 'BoolOp' node")) {
goto failed;
}
@@ -8653,10 +9162,12 @@ obj2ast_expr(struct ast_state *state, PyObject* obj, expr_ty* out, PyArena*
return 1;
}
if (tmp == NULL) {
- PyErr_SetString(PyExc_TypeError, "required field \"keys\" missing from Dict");
- return 1;
+ tmp = PyList_New(0);
+ if (tmp == NULL) {
+ return 1;
+ }
}
- else {
+ {
int res;
Py_ssize_t len;
Py_ssize_t i;
@@ -8669,8 +9180,7 @@ obj2ast_expr(struct ast_state *state, PyObject* obj, expr_ty* out, PyArena*
if (keys == NULL) goto failed;
for (i = 0; i < len; i++) {
expr_ty val;
- PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
- Py_INCREF(tmp2);
+ PyObject *tmp2 = Py_NewRef(PyList_GET_ITEM(tmp, i));
if (_Py_EnterRecursiveCall(" while traversing 'Dict' node")) {
goto failed;
}
@@ -8690,10 +9200,12 @@ obj2ast_expr(struct ast_state *state, PyObject* obj, expr_ty* out, PyArena*
return 1;
}
if (tmp == NULL) {
- PyErr_SetString(PyExc_TypeError, "required field \"values\" missing from Dict");
- return 1;
+ tmp = PyList_New(0);
+ if (tmp == NULL) {
+ return 1;
+ }
}
- else {
+ {
int res;
Py_ssize_t len;
Py_ssize_t i;
@@ -8706,8 +9218,7 @@ obj2ast_expr(struct ast_state *state, PyObject* obj, expr_ty* out, PyArena*
if (values == NULL) goto failed;
for (i = 0; i < len; i++) {
expr_ty val;
- PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
- Py_INCREF(tmp2);
+ PyObject *tmp2 = Py_NewRef(PyList_GET_ITEM(tmp, i));
if (_Py_EnterRecursiveCall(" while traversing 'Dict' node")) {
goto failed;
}
@@ -8740,10 +9251,12 @@ obj2ast_expr(struct ast_state *state, PyObject* obj, expr_ty* out, PyArena*
return 1;
}
if (tmp == NULL) {
- PyErr_SetString(PyExc_TypeError, "required field \"elts\" missing from Set");
- return 1;
+ tmp = PyList_New(0);
+ if (tmp == NULL) {
+ return 1;
+ }
}
- else {
+ {
int res;
Py_ssize_t len;
Py_ssize_t i;
@@ -8756,8 +9269,7 @@ obj2ast_expr(struct ast_state *state, PyObject* obj, expr_ty* out, PyArena*
if (elts == NULL) goto failed;
for (i = 0; i < len; i++) {
expr_ty val;
- PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
- Py_INCREF(tmp2);
+ PyObject *tmp2 = Py_NewRef(PyList_GET_ITEM(tmp, i));
if (_Py_EnterRecursiveCall(" while traversing 'Set' node")) {
goto failed;
}
@@ -8808,10 +9320,12 @@ obj2ast_expr(struct ast_state *state, PyObject* obj, expr_ty* out, PyArena*
return 1;
}
if (tmp == NULL) {
- PyErr_SetString(PyExc_TypeError, "required field \"generators\" missing from ListComp");
- return 1;
+ tmp = PyList_New(0);
+ if (tmp == NULL) {
+ return 1;
+ }
}
- else {
+ {
int res;
Py_ssize_t len;
Py_ssize_t i;
@@ -8824,8 +9338,7 @@ obj2ast_expr(struct ast_state *state, PyObject* obj, expr_ty* out, PyArena*
if (generators == NULL) goto failed;
for (i = 0; i < len; i++) {
comprehension_ty val;
- PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
- Py_INCREF(tmp2);
+ PyObject *tmp2 = Py_NewRef(PyList_GET_ITEM(tmp, i));
if (_Py_EnterRecursiveCall(" while traversing 'ListComp' node")) {
goto failed;
}
@@ -8876,10 +9389,12 @@ obj2ast_expr(struct ast_state *state, PyObject* obj, expr_ty* out, PyArena*
return 1;
}
if (tmp == NULL) {
- PyErr_SetString(PyExc_TypeError, "required field \"generators\" missing from SetComp");
- return 1;
+ tmp = PyList_New(0);
+ if (tmp == NULL) {
+ return 1;
+ }
}
- else {
+ {
int res;
Py_ssize_t len;
Py_ssize_t i;
@@ -8892,8 +9407,7 @@ obj2ast_expr(struct ast_state *state, PyObject* obj, expr_ty* out, PyArena*
if (generators == NULL) goto failed;
for (i = 0; i < len; i++) {
comprehension_ty val;
- PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
- Py_INCREF(tmp2);
+ PyObject *tmp2 = Py_NewRef(PyList_GET_ITEM(tmp, i));
if (_Py_EnterRecursiveCall(" while traversing 'SetComp' node")) {
goto failed;
}
@@ -8962,10 +9476,12 @@ obj2ast_expr(struct ast_state *state, PyObject* obj, expr_ty* out, PyArena*
return 1;
}
if (tmp == NULL) {
- PyErr_SetString(PyExc_TypeError, "required field \"generators\" missing from DictComp");
- return 1;
+ tmp = PyList_New(0);
+ if (tmp == NULL) {
+ return 1;
+ }
}
- else {
+ {
int res;
Py_ssize_t len;
Py_ssize_t i;
@@ -8978,8 +9494,7 @@ obj2ast_expr(struct ast_state *state, PyObject* obj, expr_ty* out, PyArena*
if (generators == NULL) goto failed;
for (i = 0; i < len; i++) {
comprehension_ty val;
- PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
- Py_INCREF(tmp2);
+ PyObject *tmp2 = Py_NewRef(PyList_GET_ITEM(tmp, i));
if (_Py_EnterRecursiveCall(" while traversing 'DictComp' node")) {
goto failed;
}
@@ -9030,10 +9545,12 @@ obj2ast_expr(struct ast_state *state, PyObject* obj, expr_ty* out, PyArena*
return 1;
}
if (tmp == NULL) {
- PyErr_SetString(PyExc_TypeError, "required field \"generators\" missing from GeneratorExp");
- return 1;
+ tmp = PyList_New(0);
+ if (tmp == NULL) {
+ return 1;
+ }
}
- else {
+ {
int res;
Py_ssize_t len;
Py_ssize_t i;
@@ -9046,8 +9563,7 @@ obj2ast_expr(struct ast_state *state, PyObject* obj, expr_ty* out, PyArena*
if (generators == NULL) goto failed;
for (i = 0; i < len; i++) {
comprehension_ty val;
- PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
- Py_INCREF(tmp2);
+ PyObject *tmp2 = Py_NewRef(PyList_GET_ITEM(tmp, i));
if (_Py_EnterRecursiveCall(" while traversing 'GeneratorExp' node")) {
goto failed;
}
@@ -9189,10 +9705,12 @@ obj2ast_expr(struct ast_state *state, PyObject* obj, expr_ty* out, PyArena*
return 1;
}
if (tmp == NULL) {
- PyErr_SetString(PyExc_TypeError, "required field \"ops\" missing from Compare");
- return 1;
+ tmp = PyList_New(0);
+ if (tmp == NULL) {
+ return 1;
+ }
}
- else {
+ {
int res;
Py_ssize_t len;
Py_ssize_t i;
@@ -9205,8 +9723,7 @@ obj2ast_expr(struct ast_state *state, PyObject* obj, expr_ty* out, PyArena*
if (ops == NULL) goto failed;
for (i = 0; i < len; i++) {
cmpop_ty val;
- PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
- Py_INCREF(tmp2);
+ PyObject *tmp2 = Py_NewRef(PyList_GET_ITEM(tmp, i));
if (_Py_EnterRecursiveCall(" while traversing 'Compare' node")) {
goto failed;
}
@@ -9226,10 +9743,12 @@ obj2ast_expr(struct ast_state *state, PyObject* obj, expr_ty* out, PyArena*
return 1;
}
if (tmp == NULL) {
- PyErr_SetString(PyExc_TypeError, "required field \"comparators\" missing from Compare");
- return 1;
+ tmp = PyList_New(0);
+ if (tmp == NULL) {
+ return 1;
+ }
}
- else {
+ {
int res;
Py_ssize_t len;
Py_ssize_t i;
@@ -9242,8 +9761,7 @@ obj2ast_expr(struct ast_state *state, PyObject* obj, expr_ty* out, PyArena*
if (comparators == NULL) goto failed;
for (i = 0; i < len; i++) {
expr_ty val;
- PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
- Py_INCREF(tmp2);
+ PyObject *tmp2 = Py_NewRef(PyList_GET_ITEM(tmp, i));
if (_Py_EnterRecursiveCall(" while traversing 'Compare' node")) {
goto failed;
}
@@ -9295,10 +9813,12 @@ obj2ast_expr(struct ast_state *state, PyObject* obj, expr_ty* out, PyArena*
return 1;
}
if (tmp == NULL) {
- PyErr_SetString(PyExc_TypeError, "required field \"args\" missing from Call");
- return 1;
+ tmp = PyList_New(0);
+ if (tmp == NULL) {
+ return 1;
+ }
}
- else {
+ {
int res;
Py_ssize_t len;
Py_ssize_t i;
@@ -9311,8 +9831,7 @@ obj2ast_expr(struct ast_state *state, PyObject* obj, expr_ty* out, PyArena*
if (args == NULL) goto failed;
for (i = 0; i < len; i++) {
expr_ty val;
- PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
- Py_INCREF(tmp2);
+ PyObject *tmp2 = Py_NewRef(PyList_GET_ITEM(tmp, i));
if (_Py_EnterRecursiveCall(" while traversing 'Call' node")) {
goto failed;
}
@@ -9332,10 +9851,12 @@ obj2ast_expr(struct ast_state *state, PyObject* obj, expr_ty* out, PyArena*
return 1;
}
if (tmp == NULL) {
- PyErr_SetString(PyExc_TypeError, "required field \"keywords\" missing from Call");
- return 1;
+ tmp = PyList_New(0);
+ if (tmp == NULL) {
+ return 1;
+ }
}
- else {
+ {
int res;
Py_ssize_t len;
Py_ssize_t i;
@@ -9348,8 +9869,7 @@ obj2ast_expr(struct ast_state *state, PyObject* obj, expr_ty* out, PyArena*
if (keywords == NULL) goto failed;
for (i = 0; i < len; i++) {
keyword_ty val;
- PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
- Py_INCREF(tmp2);
+ PyObject *tmp2 = Py_NewRef(PyList_GET_ITEM(tmp, i));
if (_Py_EnterRecursiveCall(" while traversing 'Call' node")) {
goto failed;
}
@@ -9449,10 +9969,12 @@ obj2ast_expr(struct ast_state *state, PyObject* obj, expr_ty* out, PyArena*
return 1;
}
if (tmp == NULL) {
- PyErr_SetString(PyExc_TypeError, "required field \"values\" missing from JoinedStr");
- return 1;
+ tmp = PyList_New(0);
+ if (tmp == NULL) {
+ return 1;
+ }
}
- else {
+ {
int res;
Py_ssize_t len;
Py_ssize_t i;
@@ -9465,8 +9987,7 @@ obj2ast_expr(struct ast_state *state, PyObject* obj, expr_ty* out, PyArena*
if (values == NULL) goto failed;
for (i = 0; i < len; i++) {
expr_ty val;
- PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
- Py_INCREF(tmp2);
+ PyObject *tmp2 = Py_NewRef(PyList_GET_ITEM(tmp, i));
if (_Py_EnterRecursiveCall(" while traversing 'JoinedStr' node")) {
goto failed;
}
@@ -9776,10 +10297,12 @@ obj2ast_expr(struct ast_state *state, PyObject* obj, expr_ty* out, PyArena*
return 1;
}
if (tmp == NULL) {
- PyErr_SetString(PyExc_TypeError, "required field \"elts\" missing from List");
- return 1;
+ tmp = PyList_New(0);
+ if (tmp == NULL) {
+ return 1;
+ }
}
- else {
+ {
int res;
Py_ssize_t len;
Py_ssize_t i;
@@ -9792,8 +10315,7 @@ obj2ast_expr(struct ast_state *state, PyObject* obj, expr_ty* out, PyArena*
if (elts == NULL) goto failed;
for (i = 0; i < len; i++) {
expr_ty val;
- PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
- Py_INCREF(tmp2);
+ PyObject *tmp2 = Py_NewRef(PyList_GET_ITEM(tmp, i));
if (_Py_EnterRecursiveCall(" while traversing 'List' node")) {
goto failed;
}
@@ -9844,10 +10366,12 @@ obj2ast_expr(struct ast_state *state, PyObject* obj, expr_ty* out, PyArena*
return 1;
}
if (tmp == NULL) {
- PyErr_SetString(PyExc_TypeError, "required field \"elts\" missing from Tuple");
- return 1;
+ tmp = PyList_New(0);
+ if (tmp == NULL) {
+ return 1;
+ }
}
- else {
+ {
int res;
Py_ssize_t len;
Py_ssize_t i;
@@ -9860,8 +10384,7 @@ obj2ast_expr(struct ast_state *state, PyObject* obj, expr_ty* out, PyArena*
if (elts == NULL) goto failed;
for (i = 0; i < len; i++) {
expr_ty val;
- PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
- Py_INCREF(tmp2);
+ PyObject *tmp2 = Py_NewRef(PyList_GET_ITEM(tmp, i));
if (_Py_EnterRecursiveCall(" while traversing 'Tuple' node")) {
goto failed;
}
@@ -10331,10 +10854,12 @@ obj2ast_comprehension(struct ast_state *state, PyObject* obj, comprehension_ty*
return 1;
}
if (tmp == NULL) {
- PyErr_SetString(PyExc_TypeError, "required field \"ifs\" missing from comprehension");
- return 1;
+ tmp = PyList_New(0);
+ if (tmp == NULL) {
+ return 1;
+ }
}
- else {
+ {
int res;
Py_ssize_t len;
Py_ssize_t i;
@@ -10347,8 +10872,7 @@ obj2ast_comprehension(struct ast_state *state, PyObject* obj, comprehension_ty*
if (ifs == NULL) goto failed;
for (i = 0; i < len; i++) {
expr_ty val;
- PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
- Py_INCREF(tmp2);
+ PyObject *tmp2 = Py_NewRef(PyList_GET_ITEM(tmp, i));
if (_Py_EnterRecursiveCall(" while traversing 'comprehension' node")) {
goto failed;
}
@@ -10522,10 +11046,12 @@ obj2ast_excepthandler(struct ast_state *state, PyObject* obj, excepthandler_ty*
return 1;
}
if (tmp == NULL) {
- PyErr_SetString(PyExc_TypeError, "required field \"body\" missing from ExceptHandler");
- return 1;
+ tmp = PyList_New(0);
+ if (tmp == NULL) {
+ return 1;
+ }
}
- else {
+ {
int res;
Py_ssize_t len;
Py_ssize_t i;
@@ -10538,8 +11064,7 @@ obj2ast_excepthandler(struct ast_state *state, PyObject* obj, excepthandler_ty*
if (body == NULL) goto failed;
for (i = 0; i < len; i++) {
stmt_ty val;
- PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
- Py_INCREF(tmp2);
+ PyObject *tmp2 = Py_NewRef(PyList_GET_ITEM(tmp, i));
if (_Py_EnterRecursiveCall(" while traversing 'ExceptHandler' node")) {
goto failed;
}
@@ -10584,10 +11109,12 @@ obj2ast_arguments(struct ast_state *state, PyObject* obj, arguments_ty* out,
return 1;
}
if (tmp == NULL) {
- PyErr_SetString(PyExc_TypeError, "required field \"posonlyargs\" missing from arguments");
- return 1;
+ tmp = PyList_New(0);
+ if (tmp == NULL) {
+ return 1;
+ }
}
- else {
+ {
int res;
Py_ssize_t len;
Py_ssize_t i;
@@ -10600,8 +11127,7 @@ obj2ast_arguments(struct ast_state *state, PyObject* obj, arguments_ty* out,
if (posonlyargs == NULL) goto failed;
for (i = 0; i < len; i++) {
arg_ty val;
- PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
- Py_INCREF(tmp2);
+ PyObject *tmp2 = Py_NewRef(PyList_GET_ITEM(tmp, i));
if (_Py_EnterRecursiveCall(" while traversing 'arguments' node")) {
goto failed;
}
@@ -10621,10 +11147,12 @@ obj2ast_arguments(struct ast_state *state, PyObject* obj, arguments_ty* out,
return 1;
}
if (tmp == NULL) {
- PyErr_SetString(PyExc_TypeError, "required field \"args\" missing from arguments");
- return 1;
+ tmp = PyList_New(0);
+ if (tmp == NULL) {
+ return 1;
+ }
}
- else {
+ {
int res;
Py_ssize_t len;
Py_ssize_t i;
@@ -10637,8 +11165,7 @@ obj2ast_arguments(struct ast_state *state, PyObject* obj, arguments_ty* out,
if (args == NULL) goto failed;
for (i = 0; i < len; i++) {
arg_ty val;
- PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
- Py_INCREF(tmp2);
+ PyObject *tmp2 = Py_NewRef(PyList_GET_ITEM(tmp, i));
if (_Py_EnterRecursiveCall(" while traversing 'arguments' node")) {
goto failed;
}
@@ -10675,10 +11202,12 @@ obj2ast_arguments(struct ast_state *state, PyObject* obj, arguments_ty* out,
return 1;
}
if (tmp == NULL) {
- PyErr_SetString(PyExc_TypeError, "required field \"kwonlyargs\" missing from arguments");
- return 1;
+ tmp = PyList_New(0);
+ if (tmp == NULL) {
+ return 1;
+ }
}
- else {
+ {
int res;
Py_ssize_t len;
Py_ssize_t i;
@@ -10691,8 +11220,7 @@ obj2ast_arguments(struct ast_state *state, PyObject* obj, arguments_ty* out,
if (kwonlyargs == NULL) goto failed;
for (i = 0; i < len; i++) {
arg_ty val;
- PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
- Py_INCREF(tmp2);
+ PyObject *tmp2 = Py_NewRef(PyList_GET_ITEM(tmp, i));
if (_Py_EnterRecursiveCall(" while traversing 'arguments' node")) {
goto failed;
}
@@ -10712,10 +11240,12 @@ obj2ast_arguments(struct ast_state *state, PyObject* obj, arguments_ty* out,
return 1;
}
if (tmp == NULL) {
- PyErr_SetString(PyExc_TypeError, "required field \"kw_defaults\" missing from arguments");
- return 1;
+ tmp = PyList_New(0);
+ if (tmp == NULL) {
+ return 1;
+ }
}
- else {
+ {
int res;
Py_ssize_t len;
Py_ssize_t i;
@@ -10728,8 +11258,7 @@ obj2ast_arguments(struct ast_state *state, PyObject* obj, arguments_ty* out,
if (kw_defaults == NULL) goto failed;
for (i = 0; i < len; i++) {
expr_ty val;
- PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
- Py_INCREF(tmp2);
+ PyObject *tmp2 = Py_NewRef(PyList_GET_ITEM(tmp, i));
if (_Py_EnterRecursiveCall(" while traversing 'arguments' node")) {
goto failed;
}
@@ -10766,10 +11295,12 @@ obj2ast_arguments(struct ast_state *state, PyObject* obj, arguments_ty* out,
return 1;
}
if (tmp == NULL) {
- PyErr_SetString(PyExc_TypeError, "required field \"defaults\" missing from arguments");
- return 1;
+ tmp = PyList_New(0);
+ if (tmp == NULL) {
+ return 1;
+ }
}
- else {
+ {
int res;
Py_ssize_t len;
Py_ssize_t i;
@@ -10782,8 +11313,7 @@ obj2ast_arguments(struct ast_state *state, PyObject* obj, arguments_ty* out,
if (defaults == NULL) goto failed;
for (i = 0; i < len; i++) {
expr_ty val;
- PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
- Py_INCREF(tmp2);
+ PyObject *tmp2 = Py_NewRef(PyList_GET_ITEM(tmp, i));
if (_Py_EnterRecursiveCall(" while traversing 'arguments' node")) {
goto failed;
}
@@ -11291,10 +11821,12 @@ obj2ast_match_case(struct ast_state *state, PyObject* obj, match_case_ty* out,
return 1;
}
if (tmp == NULL) {
- PyErr_SetString(PyExc_TypeError, "required field \"body\" missing from match_case");
- return 1;
+ tmp = PyList_New(0);
+ if (tmp == NULL) {
+ return 1;
+ }
}
- else {
+ {
int res;
Py_ssize_t len;
Py_ssize_t i;
@@ -11307,8 +11839,7 @@ obj2ast_match_case(struct ast_state *state, PyObject* obj, match_case_ty* out,
if (body == NULL) goto failed;
for (i = 0; i < len; i++) {
stmt_ty val;
- PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
- Py_INCREF(tmp2);
+ PyObject *tmp2 = Py_NewRef(PyList_GET_ITEM(tmp, i));
if (_Py_EnterRecursiveCall(" while traversing 'match_case' node")) {
goto failed;
}
@@ -11489,10 +12020,12 @@ obj2ast_pattern(struct ast_state *state, PyObject* obj, pattern_ty* out,
return 1;
}
if (tmp == NULL) {
- PyErr_SetString(PyExc_TypeError, "required field \"patterns\" missing from MatchSequence");
- return 1;
+ tmp = PyList_New(0);
+ if (tmp == NULL) {
+ return 1;
+ }
}
- else {
+ {
int res;
Py_ssize_t len;
Py_ssize_t i;
@@ -11505,8 +12038,7 @@ obj2ast_pattern(struct ast_state *state, PyObject* obj, pattern_ty* out,
if (patterns == NULL) goto failed;
for (i = 0; i < len; i++) {
pattern_ty val;
- PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
- Py_INCREF(tmp2);
+ PyObject *tmp2 = Py_NewRef(PyList_GET_ITEM(tmp, i));
if (_Py_EnterRecursiveCall(" while traversing 'MatchSequence' node")) {
goto failed;
}
@@ -11541,10 +12073,12 @@ obj2ast_pattern(struct ast_state *state, PyObject* obj, pattern_ty* out,
return 1;
}
if (tmp == NULL) {
- PyErr_SetString(PyExc_TypeError, "required field \"keys\" missing from MatchMapping");
- return 1;
+ tmp = PyList_New(0);
+ if (tmp == NULL) {
+ return 1;
+ }
}
- else {
+ {
int res;
Py_ssize_t len;
Py_ssize_t i;
@@ -11557,8 +12091,7 @@ obj2ast_pattern(struct ast_state *state, PyObject* obj, pattern_ty* out,
if (keys == NULL) goto failed;
for (i = 0; i < len; i++) {
expr_ty val;
- PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
- Py_INCREF(tmp2);
+ PyObject *tmp2 = Py_NewRef(PyList_GET_ITEM(tmp, i));
if (_Py_EnterRecursiveCall(" while traversing 'MatchMapping' node")) {
goto failed;
}
@@ -11578,10 +12111,12 @@ obj2ast_pattern(struct ast_state *state, PyObject* obj, pattern_ty* out,
return 1;
}
if (tmp == NULL) {
- PyErr_SetString(PyExc_TypeError, "required field \"patterns\" missing from MatchMapping");
- return 1;
+ tmp = PyList_New(0);
+ if (tmp == NULL) {
+ return 1;
+ }
}
- else {
+ {
int res;
Py_ssize_t len;
Py_ssize_t i;
@@ -11594,8 +12129,7 @@ obj2ast_pattern(struct ast_state *state, PyObject* obj, pattern_ty* out,
if (patterns == NULL) goto failed;
for (i = 0; i < len; i++) {
pattern_ty val;
- PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
- Py_INCREF(tmp2);
+ PyObject *tmp2 = Py_NewRef(PyList_GET_ITEM(tmp, i));
if (_Py_EnterRecursiveCall(" while traversing 'MatchMapping' node")) {
goto failed;
}
@@ -11665,10 +12199,12 @@ obj2ast_pattern(struct ast_state *state, PyObject* obj, pattern_ty* out,
return 1;
}
if (tmp == NULL) {
- PyErr_SetString(PyExc_TypeError, "required field \"patterns\" missing from MatchClass");
- return 1;
+ tmp = PyList_New(0);
+ if (tmp == NULL) {
+ return 1;
+ }
}
- else {
+ {
int res;
Py_ssize_t len;
Py_ssize_t i;
@@ -11681,8 +12217,7 @@ obj2ast_pattern(struct ast_state *state, PyObject* obj, pattern_ty* out,
if (patterns == NULL) goto failed;
for (i = 0; i < len; i++) {
pattern_ty val;
- PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
- Py_INCREF(tmp2);
+ PyObject *tmp2 = Py_NewRef(PyList_GET_ITEM(tmp, i));
if (_Py_EnterRecursiveCall(" while traversing 'MatchClass' node")) {
goto failed;
}
@@ -11702,10 +12237,12 @@ obj2ast_pattern(struct ast_state *state, PyObject* obj, pattern_ty* out,
return 1;
}
if (tmp == NULL) {
- PyErr_SetString(PyExc_TypeError, "required field \"kwd_attrs\" missing from MatchClass");
- return 1;
+ tmp = PyList_New(0);
+ if (tmp == NULL) {
+ return 1;
+ }
}
- else {
+ {
int res;
Py_ssize_t len;
Py_ssize_t i;
@@ -11718,8 +12255,7 @@ obj2ast_pattern(struct ast_state *state, PyObject* obj, pattern_ty* out,
if (kwd_attrs == NULL) goto failed;
for (i = 0; i < len; i++) {
identifier val;
- PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
- Py_INCREF(tmp2);
+ PyObject *tmp2 = Py_NewRef(PyList_GET_ITEM(tmp, i));
if (_Py_EnterRecursiveCall(" while traversing 'MatchClass' node")) {
goto failed;
}
@@ -11739,10 +12275,12 @@ obj2ast_pattern(struct ast_state *state, PyObject* obj, pattern_ty* out,
return 1;
}
if (tmp == NULL) {
- PyErr_SetString(PyExc_TypeError, "required field \"kwd_patterns\" missing from MatchClass");
- return 1;
+ tmp = PyList_New(0);
+ if (tmp == NULL) {
+ return 1;
+ }
}
- else {
+ {
int res;
Py_ssize_t len;
Py_ssize_t i;
@@ -11755,8 +12293,7 @@ obj2ast_pattern(struct ast_state *state, PyObject* obj, pattern_ty* out,
if (kwd_patterns == NULL) goto failed;
for (i = 0; i < len; i++) {
pattern_ty val;
- PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
- Py_INCREF(tmp2);
+ PyObject *tmp2 = Py_NewRef(PyList_GET_ITEM(tmp, i));
if (_Py_EnterRecursiveCall(" while traversing 'MatchClass' node")) {
goto failed;
}
@@ -11868,10 +12405,12 @@ obj2ast_pattern(struct ast_state *state, PyObject* obj, pattern_ty* out,
return 1;
}
if (tmp == NULL) {
- PyErr_SetString(PyExc_TypeError, "required field \"patterns\" missing from MatchOr");
- return 1;
+ tmp = PyList_New(0);
+ if (tmp == NULL) {
+ return 1;
+ }
}
- else {
+ {
int res;
Py_ssize_t len;
Py_ssize_t i;
@@ -11884,8 +12423,7 @@ obj2ast_pattern(struct ast_state *state, PyObject* obj, pattern_ty* out,
if (patterns == NULL) goto failed;
for (i = 0; i < len; i++) {
pattern_ty val;
- PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
- Py_INCREF(tmp2);
+ PyObject *tmp2 = Py_NewRef(PyList_GET_ITEM(tmp, i));
if (_Py_EnterRecursiveCall(" while traversing 'MatchOr' node")) {
goto failed;
}
@@ -11980,6 +12518,206 @@ obj2ast_type_ignore(struct ast_state *state, PyObject* obj, type_ignore_ty*
return 1;
}
+int
+obj2ast_type_param(struct ast_state *state, PyObject* obj, type_param_ty* out,
+ PyArena* arena)
+{
+ int isinstance;
+
+ PyObject *tmp = NULL;
+ PyObject *tp;
+ int lineno;
+ int col_offset;
+ int end_lineno;
+ int end_col_offset;
+
+ if (obj == Py_None) {
+ *out = NULL;
+ return 0;
+ }
+ if (_PyObject_LookupAttr(obj, state->lineno, &tmp) < 0) {
+ return 1;
+ }
+ if (tmp == NULL) {
+ PyErr_SetString(PyExc_TypeError, "required field \"lineno\" missing from type_param");
+ return 1;
+ }
+ else {
+ int res;
+ if (_Py_EnterRecursiveCall(" while traversing 'type_param' node")) {
+ goto failed;
+ }
+ res = obj2ast_int(state, tmp, &lineno, arena);
+ _Py_LeaveRecursiveCall();
+ if (res != 0) goto failed;
+ Py_CLEAR(tmp);
+ }
+ if (_PyObject_LookupAttr(obj, state->col_offset, &tmp) < 0) {
+ return 1;
+ }
+ if (tmp == NULL) {
+ PyErr_SetString(PyExc_TypeError, "required field \"col_offset\" missing from type_param");
+ return 1;
+ }
+ else {
+ int res;
+ if (_Py_EnterRecursiveCall(" while traversing 'type_param' node")) {
+ goto failed;
+ }
+ res = obj2ast_int(state, tmp, &col_offset, arena);
+ _Py_LeaveRecursiveCall();
+ if (res != 0) goto failed;
+ Py_CLEAR(tmp);
+ }
+ if (_PyObject_LookupAttr(obj, state->end_lineno, &tmp) < 0) {
+ return 1;
+ }
+ if (tmp == NULL) {
+ PyErr_SetString(PyExc_TypeError, "required field \"end_lineno\" missing from type_param");
+ return 1;
+ }
+ else {
+ int res;
+ if (_Py_EnterRecursiveCall(" while traversing 'type_param' node")) {
+ goto failed;
+ }
+ res = obj2ast_int(state, tmp, &end_lineno, arena);
+ _Py_LeaveRecursiveCall();
+ if (res != 0) goto failed;
+ Py_CLEAR(tmp);
+ }
+ if (_PyObject_LookupAttr(obj, state->end_col_offset, &tmp) < 0) {
+ return 1;
+ }
+ if (tmp == NULL) {
+ PyErr_SetString(PyExc_TypeError, "required field \"end_col_offset\" missing from type_param");
+ return 1;
+ }
+ else {
+ int res;
+ if (_Py_EnterRecursiveCall(" while traversing 'type_param' node")) {
+ goto failed;
+ }
+ res = obj2ast_int(state, tmp, &end_col_offset, arena);
+ _Py_LeaveRecursiveCall();
+ if (res != 0) goto failed;
+ Py_CLEAR(tmp);
+ }
+ tp = state->TypeVar_type;
+ isinstance = PyObject_IsInstance(obj, tp);
+ if (isinstance == -1) {
+ return 1;
+ }
+ if (isinstance) {
+ identifier name;
+ expr_ty bound;
+
+ if (_PyObject_LookupAttr(obj, state->name, &tmp) < 0) {
+ return 1;
+ }
+ if (tmp == NULL) {
+ PyErr_SetString(PyExc_TypeError, "required field \"name\" missing from TypeVar");
+ return 1;
+ }
+ else {
+ int res;
+ if (_Py_EnterRecursiveCall(" while traversing 'TypeVar' node")) {
+ goto failed;
+ }
+ res = obj2ast_identifier(state, tmp, &name, arena);
+ _Py_LeaveRecursiveCall();
+ if (res != 0) goto failed;
+ Py_CLEAR(tmp);
+ }
+ if (_PyObject_LookupAttr(obj, state->bound, &tmp) < 0) {
+ return 1;
+ }
+ if (tmp == NULL || tmp == Py_None) {
+ Py_CLEAR(tmp);
+ bound = NULL;
+ }
+ else {
+ int res;
+ if (_Py_EnterRecursiveCall(" while traversing 'TypeVar' node")) {
+ goto failed;
+ }
+ res = obj2ast_expr(state, tmp, &bound, arena);
+ _Py_LeaveRecursiveCall();
+ if (res != 0) goto failed;
+ Py_CLEAR(tmp);
+ }
+ *out = _PyAST_TypeVar(name, bound, lineno, col_offset, end_lineno,
+ end_col_offset, arena);
+ if (*out == NULL) goto failed;
+ return 0;
+ }
+ tp = state->ParamSpec_type;
+ isinstance = PyObject_IsInstance(obj, tp);
+ if (isinstance == -1) {
+ return 1;
+ }
+ if (isinstance) {
+ identifier name;
+
+ if (_PyObject_LookupAttr(obj, state->name, &tmp) < 0) {
+ return 1;
+ }
+ if (tmp == NULL) {
+ PyErr_SetString(PyExc_TypeError, "required field \"name\" missing from ParamSpec");
+ return 1;
+ }
+ else {
+ int res;
+ if (_Py_EnterRecursiveCall(" while traversing 'ParamSpec' node")) {
+ goto failed;
+ }
+ res = obj2ast_identifier(state, tmp, &name, arena);
+ _Py_LeaveRecursiveCall();
+ if (res != 0) goto failed;
+ Py_CLEAR(tmp);
+ }
+ *out = _PyAST_ParamSpec(name, lineno, col_offset, end_lineno,
+ end_col_offset, arena);
+ if (*out == NULL) goto failed;
+ return 0;
+ }
+ tp = state->TypeVarTuple_type;
+ isinstance = PyObject_IsInstance(obj, tp);
+ if (isinstance == -1) {
+ return 1;
+ }
+ if (isinstance) {
+ identifier name;
+
+ if (_PyObject_LookupAttr(obj, state->name, &tmp) < 0) {
+ return 1;
+ }
+ if (tmp == NULL) {
+ PyErr_SetString(PyExc_TypeError, "required field \"name\" missing from TypeVarTuple");
+ return 1;
+ }
+ else {
+ int res;
+ if (_Py_EnterRecursiveCall(" while traversing 'TypeVarTuple' node")) {
+ goto failed;
+ }
+ res = obj2ast_identifier(state, tmp, &name, arena);
+ _Py_LeaveRecursiveCall();
+ if (res != 0) goto failed;
+ Py_CLEAR(tmp);
+ }
+ *out = _PyAST_TypeVarTuple(name, lineno, col_offset, end_lineno,
+ end_col_offset, arena);
+ if (*out == NULL) goto failed;
+ return 0;
+ }
+
+ PyErr_Format(PyExc_TypeError, "expected some sort of type_param, but got %R", obj);
+ failed:
+ Py_XDECREF(tmp);
+ return 1;
+}
+
static int
astmodule_exec(PyObject *m)
@@ -12038,6 +12776,9 @@ astmodule_exec(PyObject *m)
if (PyModule_AddObjectRef(m, "Assign", state->Assign_type) < 0) {
return -1;
}
+ if (PyModule_AddObjectRef(m, "TypeAlias", state->TypeAlias_type) < 0) {
+ return -1;
+ }
if (PyModule_AddObjectRef(m, "AugAssign", state->AugAssign_type) < 0) {
return -1;
}
@@ -12365,11 +13106,25 @@ astmodule_exec(PyObject *m)
if (PyModule_AddObjectRef(m, "TypeIgnore", state->TypeIgnore_type) < 0) {
return -1;
}
+ if (PyModule_AddObjectRef(m, "type_param", state->type_param_type) < 0) {
+ return -1;
+ }
+ if (PyModule_AddObjectRef(m, "TypeVar", state->TypeVar_type) < 0) {
+ return -1;
+ }
+ if (PyModule_AddObjectRef(m, "ParamSpec", state->ParamSpec_type) < 0) {
+ return -1;
+ }
+ if (PyModule_AddObjectRef(m, "TypeVarTuple", state->TypeVarTuple_type) < 0)
+ {
+ return -1;
+ }
return 0;
}
static PyModuleDef_Slot astmodule_slots[] = {
{Py_mod_exec, astmodule_exec},
+ {Py_mod_multiple_interpreters, Py_MOD_PER_INTERPRETER_GIL_SUPPORTED},
{0, NULL}
};
@@ -12395,20 +13150,17 @@ PyObject* PyAST_mod2obj(mod_ty t)
return NULL;
}
- int recursion_limit = Py_GetRecursionLimit();
int starting_recursion_depth;
/* Be careful here to prevent overflow. */
- int COMPILER_STACK_FRAME_SCALE = 3;
+ int COMPILER_STACK_FRAME_SCALE = 2;
PyThreadState *tstate = _PyThreadState_GET();
if (!tstate) {
return NULL;
}
struct validator vstate;
- vstate.recursion_limit = (recursion_limit < INT_MAX / COMPILER_STACK_FRAME_SCALE) ?
- recursion_limit * COMPILER_STACK_FRAME_SCALE : recursion_limit;
- int recursion_depth = tstate->recursion_limit - tstate->recursion_remaining;
- starting_recursion_depth = (recursion_depth < INT_MAX / COMPILER_STACK_FRAME_SCALE) ?
- recursion_depth * COMPILER_STACK_FRAME_SCALE : recursion_depth;
+ vstate.recursion_limit = C_RECURSION_LIMIT * COMPILER_STACK_FRAME_SCALE;
+ int recursion_depth = C_RECURSION_LIMIT - tstate->c_recursion_remaining;
+ starting_recursion_depth = recursion_depth * COMPILER_STACK_FRAME_SCALE;
vstate.recursion_depth = starting_recursion_depth;
PyObject *result = ast2obj_mod(state, &vstate, t);