blob: 779ee3e48946d5bfebc8d1113e63a075bea08e17 [file] [log] [blame]
Victor Stinner5cf47822020-11-02 22:03:28 +01001// File automatically generated by Parser/asdl_c.py.
2
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00003#include "Python.h"
Victor Stinnerd36d6a92021-04-07 13:01:09 +02004#include "pycore_ast.h"
Victor Stinnere0bf70d2021-03-18 02:46:06 +01005#include "pycore_ast_state.h" // struct ast_state
6#include "pycore_interp.h" // _PyInterpreterState.ast
7#include "pycore_pystate.h" // _PyInterpreterState_GET()
Victor Stinnerd36d6a92021-04-07 13:01:09 +02008#include "structmember.h"
9#include <stddef.h>
Dino Viehlandac46eb42019-09-11 10:16:34 -070010
Victor Stinnere5fbe0c2020-09-15 18:03:34 +020011// Forward declaration
Victor Stinner5cf47822020-11-02 22:03:28 +010012static int init_types(struct ast_state *state);
Victor Stinnere5fbe0c2020-09-15 18:03:34 +020013
Victor Stinner5cf47822020-11-02 22:03:28 +010014static struct ast_state*
15get_ast_state(void)
Victor Stinnerb1cc6ba2020-07-03 20:01:46 +020016{
Victor Stinner5cf47822020-11-02 22:03:28 +010017 PyInterpreterState *interp = _PyInterpreterState_GET();
18 struct ast_state *state = &interp->ast;
Victor Stinnere5fbe0c2020-09-15 18:03:34 +020019 if (!init_types(state)) {
Victor Stinnerb1cc6ba2020-07-03 20:01:46 +020020 return NULL;
21 }
Victor Stinnerb1cc6ba2020-07-03 20:01:46 +020022 return state;
Victor Stinner74419f02020-07-03 11:35:37 +020023}
Victor Stinner5cf47822020-11-02 22:03:28 +010024
Victor Stinnerfd957c12020-11-03 18:07:15 +010025void _PyAST_Fini(PyInterpreterState *interp)
Victor Stinnere5fbe0c2020-09-15 18:03:34 +020026{
Victor Stinnerfd957c12020-11-03 18:07:15 +010027 struct ast_state *state = &interp->ast;
Victor Stinner5cf47822020-11-02 22:03:28 +010028
Victor Stinner74419f02020-07-03 11:35:37 +020029 Py_CLEAR(state->AST_type);
30 Py_CLEAR(state->Add_singleton);
31 Py_CLEAR(state->Add_type);
32 Py_CLEAR(state->And_singleton);
33 Py_CLEAR(state->And_type);
34 Py_CLEAR(state->AnnAssign_type);
35 Py_CLEAR(state->Assert_type);
36 Py_CLEAR(state->Assign_type);
37 Py_CLEAR(state->AsyncFor_type);
38 Py_CLEAR(state->AsyncFunctionDef_type);
39 Py_CLEAR(state->AsyncWith_type);
40 Py_CLEAR(state->Attribute_type);
41 Py_CLEAR(state->AugAssign_type);
42 Py_CLEAR(state->Await_type);
43 Py_CLEAR(state->BinOp_type);
44 Py_CLEAR(state->BitAnd_singleton);
45 Py_CLEAR(state->BitAnd_type);
46 Py_CLEAR(state->BitOr_singleton);
47 Py_CLEAR(state->BitOr_type);
48 Py_CLEAR(state->BitXor_singleton);
49 Py_CLEAR(state->BitXor_type);
50 Py_CLEAR(state->BoolOp_type);
51 Py_CLEAR(state->Break_type);
52 Py_CLEAR(state->Call_type);
53 Py_CLEAR(state->ClassDef_type);
54 Py_CLEAR(state->Compare_type);
55 Py_CLEAR(state->Constant_type);
56 Py_CLEAR(state->Continue_type);
57 Py_CLEAR(state->Del_singleton);
58 Py_CLEAR(state->Del_type);
59 Py_CLEAR(state->Delete_type);
60 Py_CLEAR(state->DictComp_type);
61 Py_CLEAR(state->Dict_type);
62 Py_CLEAR(state->Div_singleton);
63 Py_CLEAR(state->Div_type);
64 Py_CLEAR(state->Eq_singleton);
65 Py_CLEAR(state->Eq_type);
66 Py_CLEAR(state->ExceptHandler_type);
67 Py_CLEAR(state->Expr_type);
68 Py_CLEAR(state->Expression_type);
69 Py_CLEAR(state->FloorDiv_singleton);
70 Py_CLEAR(state->FloorDiv_type);
71 Py_CLEAR(state->For_type);
72 Py_CLEAR(state->FormattedValue_type);
73 Py_CLEAR(state->FunctionDef_type);
74 Py_CLEAR(state->FunctionType_type);
75 Py_CLEAR(state->GeneratorExp_type);
76 Py_CLEAR(state->Global_type);
77 Py_CLEAR(state->GtE_singleton);
78 Py_CLEAR(state->GtE_type);
79 Py_CLEAR(state->Gt_singleton);
80 Py_CLEAR(state->Gt_type);
81 Py_CLEAR(state->IfExp_type);
82 Py_CLEAR(state->If_type);
83 Py_CLEAR(state->ImportFrom_type);
84 Py_CLEAR(state->Import_type);
85 Py_CLEAR(state->In_singleton);
86 Py_CLEAR(state->In_type);
87 Py_CLEAR(state->Interactive_type);
88 Py_CLEAR(state->Invert_singleton);
89 Py_CLEAR(state->Invert_type);
90 Py_CLEAR(state->IsNot_singleton);
91 Py_CLEAR(state->IsNot_type);
92 Py_CLEAR(state->Is_singleton);
93 Py_CLEAR(state->Is_type);
94 Py_CLEAR(state->JoinedStr_type);
95 Py_CLEAR(state->LShift_singleton);
96 Py_CLEAR(state->LShift_type);
97 Py_CLEAR(state->Lambda_type);
98 Py_CLEAR(state->ListComp_type);
99 Py_CLEAR(state->List_type);
100 Py_CLEAR(state->Load_singleton);
101 Py_CLEAR(state->Load_type);
102 Py_CLEAR(state->LtE_singleton);
103 Py_CLEAR(state->LtE_type);
104 Py_CLEAR(state->Lt_singleton);
105 Py_CLEAR(state->Lt_type);
106 Py_CLEAR(state->MatMult_singleton);
107 Py_CLEAR(state->MatMult_type);
Brandt Bucher145bf262021-02-26 14:51:55 -0800108 Py_CLEAR(state->MatchAs_type);
109 Py_CLEAR(state->MatchOr_type);
110 Py_CLEAR(state->Match_type);
Victor Stinner74419f02020-07-03 11:35:37 +0200111 Py_CLEAR(state->Mod_singleton);
112 Py_CLEAR(state->Mod_type);
113 Py_CLEAR(state->Module_type);
114 Py_CLEAR(state->Mult_singleton);
115 Py_CLEAR(state->Mult_type);
116 Py_CLEAR(state->Name_type);
117 Py_CLEAR(state->NamedExpr_type);
118 Py_CLEAR(state->Nonlocal_type);
119 Py_CLEAR(state->NotEq_singleton);
120 Py_CLEAR(state->NotEq_type);
121 Py_CLEAR(state->NotIn_singleton);
122 Py_CLEAR(state->NotIn_type);
123 Py_CLEAR(state->Not_singleton);
124 Py_CLEAR(state->Not_type);
125 Py_CLEAR(state->Or_singleton);
126 Py_CLEAR(state->Or_type);
127 Py_CLEAR(state->Pass_type);
128 Py_CLEAR(state->Pow_singleton);
129 Py_CLEAR(state->Pow_type);
130 Py_CLEAR(state->RShift_singleton);
131 Py_CLEAR(state->RShift_type);
132 Py_CLEAR(state->Raise_type);
133 Py_CLEAR(state->Return_type);
134 Py_CLEAR(state->SetComp_type);
135 Py_CLEAR(state->Set_type);
136 Py_CLEAR(state->Slice_type);
137 Py_CLEAR(state->Starred_type);
138 Py_CLEAR(state->Store_singleton);
139 Py_CLEAR(state->Store_type);
140 Py_CLEAR(state->Sub_singleton);
141 Py_CLEAR(state->Sub_type);
142 Py_CLEAR(state->Subscript_type);
143 Py_CLEAR(state->Try_type);
144 Py_CLEAR(state->Tuple_type);
145 Py_CLEAR(state->TypeIgnore_type);
146 Py_CLEAR(state->UAdd_singleton);
147 Py_CLEAR(state->UAdd_type);
148 Py_CLEAR(state->USub_singleton);
149 Py_CLEAR(state->USub_type);
150 Py_CLEAR(state->UnaryOp_type);
151 Py_CLEAR(state->While_type);
152 Py_CLEAR(state->With_type);
153 Py_CLEAR(state->YieldFrom_type);
154 Py_CLEAR(state->Yield_type);
155 Py_CLEAR(state->__dict__);
156 Py_CLEAR(state->__doc__);
Brandt Bucher145bf262021-02-26 14:51:55 -0800157 Py_CLEAR(state->__match_args__);
Victor Stinner74419f02020-07-03 11:35:37 +0200158 Py_CLEAR(state->__module__);
159 Py_CLEAR(state->_attributes);
160 Py_CLEAR(state->_fields);
161 Py_CLEAR(state->alias_type);
162 Py_CLEAR(state->annotation);
163 Py_CLEAR(state->arg);
164 Py_CLEAR(state->arg_type);
165 Py_CLEAR(state->args);
166 Py_CLEAR(state->argtypes);
167 Py_CLEAR(state->arguments_type);
168 Py_CLEAR(state->asname);
169 Py_CLEAR(state->ast);
170 Py_CLEAR(state->attr);
171 Py_CLEAR(state->bases);
172 Py_CLEAR(state->body);
173 Py_CLEAR(state->boolop_type);
Brandt Bucher145bf262021-02-26 14:51:55 -0800174 Py_CLEAR(state->cases);
Victor Stinner74419f02020-07-03 11:35:37 +0200175 Py_CLEAR(state->cause);
176 Py_CLEAR(state->cmpop_type);
177 Py_CLEAR(state->col_offset);
178 Py_CLEAR(state->comparators);
179 Py_CLEAR(state->comprehension_type);
180 Py_CLEAR(state->context_expr);
181 Py_CLEAR(state->conversion);
182 Py_CLEAR(state->ctx);
183 Py_CLEAR(state->decorator_list);
184 Py_CLEAR(state->defaults);
185 Py_CLEAR(state->elt);
186 Py_CLEAR(state->elts);
187 Py_CLEAR(state->end_col_offset);
188 Py_CLEAR(state->end_lineno);
189 Py_CLEAR(state->exc);
190 Py_CLEAR(state->excepthandler_type);
191 Py_CLEAR(state->expr_context_type);
192 Py_CLEAR(state->expr_type);
193 Py_CLEAR(state->finalbody);
194 Py_CLEAR(state->format_spec);
195 Py_CLEAR(state->func);
196 Py_CLEAR(state->generators);
Brandt Bucher145bf262021-02-26 14:51:55 -0800197 Py_CLEAR(state->guard);
Victor Stinner74419f02020-07-03 11:35:37 +0200198 Py_CLEAR(state->handlers);
199 Py_CLEAR(state->id);
200 Py_CLEAR(state->ifs);
201 Py_CLEAR(state->is_async);
202 Py_CLEAR(state->items);
203 Py_CLEAR(state->iter);
204 Py_CLEAR(state->key);
205 Py_CLEAR(state->keys);
206 Py_CLEAR(state->keyword_type);
207 Py_CLEAR(state->keywords);
208 Py_CLEAR(state->kind);
209 Py_CLEAR(state->kw_defaults);
210 Py_CLEAR(state->kwarg);
211 Py_CLEAR(state->kwonlyargs);
212 Py_CLEAR(state->left);
213 Py_CLEAR(state->level);
214 Py_CLEAR(state->lineno);
215 Py_CLEAR(state->lower);
Brandt Bucher145bf262021-02-26 14:51:55 -0800216 Py_CLEAR(state->match_case_type);
Victor Stinner74419f02020-07-03 11:35:37 +0200217 Py_CLEAR(state->mod_type);
218 Py_CLEAR(state->module);
219 Py_CLEAR(state->msg);
220 Py_CLEAR(state->name);
221 Py_CLEAR(state->names);
222 Py_CLEAR(state->op);
223 Py_CLEAR(state->operand);
224 Py_CLEAR(state->operator_type);
225 Py_CLEAR(state->ops);
226 Py_CLEAR(state->optional_vars);
227 Py_CLEAR(state->orelse);
Brandt Bucher145bf262021-02-26 14:51:55 -0800228 Py_CLEAR(state->pattern);
229 Py_CLEAR(state->patterns);
Victor Stinner74419f02020-07-03 11:35:37 +0200230 Py_CLEAR(state->posonlyargs);
231 Py_CLEAR(state->returns);
232 Py_CLEAR(state->right);
233 Py_CLEAR(state->simple);
234 Py_CLEAR(state->slice);
235 Py_CLEAR(state->step);
236 Py_CLEAR(state->stmt_type);
Brandt Bucher145bf262021-02-26 14:51:55 -0800237 Py_CLEAR(state->subject);
Victor Stinner74419f02020-07-03 11:35:37 +0200238 Py_CLEAR(state->tag);
239 Py_CLEAR(state->target);
240 Py_CLEAR(state->targets);
241 Py_CLEAR(state->test);
242 Py_CLEAR(state->type);
243 Py_CLEAR(state->type_comment);
244 Py_CLEAR(state->type_ignore_type);
245 Py_CLEAR(state->type_ignores);
246 Py_CLEAR(state->unaryop_type);
247 Py_CLEAR(state->upper);
248 Py_CLEAR(state->value);
249 Py_CLEAR(state->values);
250 Py_CLEAR(state->vararg);
251 Py_CLEAR(state->withitem_type);
Dino Viehlandac46eb42019-09-11 10:16:34 -0700252
Victor Stinnere0bf70d2021-03-18 02:46:06 +0100253#if !defined(NDEBUG)
Victor Stinnerfd957c12020-11-03 18:07:15 +0100254 state->initialized = -1;
255#else
Victor Stinnere5fbe0c2020-09-15 18:03:34 +0200256 state->initialized = 0;
Victor Stinnerfd957c12020-11-03 18:07:15 +0100257#endif
Dino Viehlandac46eb42019-09-11 10:16:34 -0700258}
259
Victor Stinner5cf47822020-11-02 22:03:28 +0100260static int init_identifiers(struct ast_state *state)
Dino Viehlandac46eb42019-09-11 10:16:34 -0700261{
Dino Viehlandac46eb42019-09-11 10:16:34 -0700262 if ((state->__dict__ = PyUnicode_InternFromString("__dict__")) == NULL) return 0;
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +0300263 if ((state->__doc__ = PyUnicode_InternFromString("__doc__")) == NULL) return 0;
Brandt Bucher145bf262021-02-26 14:51:55 -0800264 if ((state->__match_args__ = PyUnicode_InternFromString("__match_args__")) == NULL) return 0;
Dino Viehlandac46eb42019-09-11 10:16:34 -0700265 if ((state->__module__ = PyUnicode_InternFromString("__module__")) == NULL) return 0;
Dino Viehlandac46eb42019-09-11 10:16:34 -0700266 if ((state->_attributes = PyUnicode_InternFromString("_attributes")) == NULL) return 0;
267 if ((state->_fields = PyUnicode_InternFromString("_fields")) == NULL) return 0;
268 if ((state->annotation = PyUnicode_InternFromString("annotation")) == NULL) return 0;
269 if ((state->arg = PyUnicode_InternFromString("arg")) == NULL) return 0;
270 if ((state->args = PyUnicode_InternFromString("args")) == NULL) return 0;
271 if ((state->argtypes = PyUnicode_InternFromString("argtypes")) == NULL) return 0;
272 if ((state->asname = PyUnicode_InternFromString("asname")) == NULL) return 0;
Serhiy Storchakabace59d2020-03-22 20:33:34 +0200273 if ((state->ast = PyUnicode_InternFromString("ast")) == NULL) return 0;
Dino Viehlandac46eb42019-09-11 10:16:34 -0700274 if ((state->attr = PyUnicode_InternFromString("attr")) == NULL) return 0;
275 if ((state->bases = PyUnicode_InternFromString("bases")) == NULL) return 0;
276 if ((state->body = PyUnicode_InternFromString("body")) == NULL) return 0;
Brandt Bucher145bf262021-02-26 14:51:55 -0800277 if ((state->cases = PyUnicode_InternFromString("cases")) == NULL) return 0;
Dino Viehlandac46eb42019-09-11 10:16:34 -0700278 if ((state->cause = PyUnicode_InternFromString("cause")) == NULL) return 0;
279 if ((state->col_offset = PyUnicode_InternFromString("col_offset")) == NULL) return 0;
280 if ((state->comparators = PyUnicode_InternFromString("comparators")) == NULL) return 0;
281 if ((state->context_expr = PyUnicode_InternFromString("context_expr")) == NULL) return 0;
282 if ((state->conversion = PyUnicode_InternFromString("conversion")) == NULL) return 0;
283 if ((state->ctx = PyUnicode_InternFromString("ctx")) == NULL) return 0;
284 if ((state->decorator_list = PyUnicode_InternFromString("decorator_list")) == NULL) return 0;
285 if ((state->defaults = PyUnicode_InternFromString("defaults")) == NULL) return 0;
Dino Viehlandac46eb42019-09-11 10:16:34 -0700286 if ((state->elt = PyUnicode_InternFromString("elt")) == NULL) return 0;
287 if ((state->elts = PyUnicode_InternFromString("elts")) == NULL) return 0;
288 if ((state->end_col_offset = PyUnicode_InternFromString("end_col_offset")) == NULL) return 0;
289 if ((state->end_lineno = PyUnicode_InternFromString("end_lineno")) == NULL) return 0;
290 if ((state->exc = PyUnicode_InternFromString("exc")) == NULL) return 0;
291 if ((state->finalbody = PyUnicode_InternFromString("finalbody")) == NULL) return 0;
292 if ((state->format_spec = PyUnicode_InternFromString("format_spec")) == NULL) return 0;
293 if ((state->func = PyUnicode_InternFromString("func")) == NULL) return 0;
294 if ((state->generators = PyUnicode_InternFromString("generators")) == NULL) return 0;
Brandt Bucher145bf262021-02-26 14:51:55 -0800295 if ((state->guard = PyUnicode_InternFromString("guard")) == NULL) return 0;
Dino Viehlandac46eb42019-09-11 10:16:34 -0700296 if ((state->handlers = PyUnicode_InternFromString("handlers")) == NULL) return 0;
297 if ((state->id = PyUnicode_InternFromString("id")) == NULL) return 0;
298 if ((state->ifs = PyUnicode_InternFromString("ifs")) == NULL) return 0;
299 if ((state->is_async = PyUnicode_InternFromString("is_async")) == NULL) return 0;
300 if ((state->items = PyUnicode_InternFromString("items")) == NULL) return 0;
301 if ((state->iter = PyUnicode_InternFromString("iter")) == NULL) return 0;
302 if ((state->key = PyUnicode_InternFromString("key")) == NULL) return 0;
303 if ((state->keys = PyUnicode_InternFromString("keys")) == NULL) return 0;
304 if ((state->keywords = PyUnicode_InternFromString("keywords")) == NULL) return 0;
305 if ((state->kind = PyUnicode_InternFromString("kind")) == NULL) return 0;
306 if ((state->kw_defaults = PyUnicode_InternFromString("kw_defaults")) == NULL) return 0;
307 if ((state->kwarg = PyUnicode_InternFromString("kwarg")) == NULL) return 0;
308 if ((state->kwonlyargs = PyUnicode_InternFromString("kwonlyargs")) == NULL) return 0;
309 if ((state->left = PyUnicode_InternFromString("left")) == NULL) return 0;
310 if ((state->level = PyUnicode_InternFromString("level")) == NULL) return 0;
311 if ((state->lineno = PyUnicode_InternFromString("lineno")) == NULL) return 0;
312 if ((state->lower = PyUnicode_InternFromString("lower")) == NULL) return 0;
313 if ((state->module = PyUnicode_InternFromString("module")) == NULL) return 0;
314 if ((state->msg = PyUnicode_InternFromString("msg")) == NULL) return 0;
315 if ((state->name = PyUnicode_InternFromString("name")) == NULL) return 0;
316 if ((state->names = PyUnicode_InternFromString("names")) == NULL) return 0;
317 if ((state->op = PyUnicode_InternFromString("op")) == NULL) return 0;
318 if ((state->operand = PyUnicode_InternFromString("operand")) == NULL) return 0;
319 if ((state->ops = PyUnicode_InternFromString("ops")) == NULL) return 0;
320 if ((state->optional_vars = PyUnicode_InternFromString("optional_vars")) == NULL) return 0;
321 if ((state->orelse = PyUnicode_InternFromString("orelse")) == NULL) return 0;
Brandt Bucher145bf262021-02-26 14:51:55 -0800322 if ((state->pattern = PyUnicode_InternFromString("pattern")) == NULL) return 0;
323 if ((state->patterns = PyUnicode_InternFromString("patterns")) == NULL) return 0;
Dino Viehlandac46eb42019-09-11 10:16:34 -0700324 if ((state->posonlyargs = PyUnicode_InternFromString("posonlyargs")) == NULL) return 0;
325 if ((state->returns = PyUnicode_InternFromString("returns")) == NULL) return 0;
326 if ((state->right = PyUnicode_InternFromString("right")) == NULL) return 0;
327 if ((state->simple = PyUnicode_InternFromString("simple")) == NULL) return 0;
328 if ((state->slice = PyUnicode_InternFromString("slice")) == NULL) return 0;
329 if ((state->step = PyUnicode_InternFromString("step")) == NULL) return 0;
Brandt Bucher145bf262021-02-26 14:51:55 -0800330 if ((state->subject = PyUnicode_InternFromString("subject")) == NULL) return 0;
Dino Viehlandac46eb42019-09-11 10:16:34 -0700331 if ((state->tag = PyUnicode_InternFromString("tag")) == NULL) return 0;
332 if ((state->target = PyUnicode_InternFromString("target")) == NULL) return 0;
333 if ((state->targets = PyUnicode_InternFromString("targets")) == NULL) return 0;
334 if ((state->test = PyUnicode_InternFromString("test")) == NULL) return 0;
335 if ((state->type = PyUnicode_InternFromString("type")) == NULL) return 0;
336 if ((state->type_comment = PyUnicode_InternFromString("type_comment")) == NULL) return 0;
337 if ((state->type_ignores = PyUnicode_InternFromString("type_ignores")) == NULL) return 0;
338 if ((state->upper = PyUnicode_InternFromString("upper")) == NULL) return 0;
339 if ((state->value = PyUnicode_InternFromString("value")) == NULL) return 0;
340 if ((state->values = PyUnicode_InternFromString("values")) == NULL) return 0;
341 if ((state->vararg = PyUnicode_InternFromString("vararg")) == NULL) return 0;
342 return 1;
343};
344
Pablo Galindoa5634c42020-09-16 19:42:00 +0100345GENERATE_ASDL_SEQ_CONSTRUCTOR(mod, mod_ty)
346GENERATE_ASDL_SEQ_CONSTRUCTOR(stmt, stmt_ty)
347GENERATE_ASDL_SEQ_CONSTRUCTOR(expr, expr_ty)
348GENERATE_ASDL_SEQ_CONSTRUCTOR(comprehension, comprehension_ty)
349GENERATE_ASDL_SEQ_CONSTRUCTOR(excepthandler, excepthandler_ty)
350GENERATE_ASDL_SEQ_CONSTRUCTOR(arguments, arguments_ty)
351GENERATE_ASDL_SEQ_CONSTRUCTOR(arg, arg_ty)
352GENERATE_ASDL_SEQ_CONSTRUCTOR(keyword, keyword_ty)
353GENERATE_ASDL_SEQ_CONSTRUCTOR(alias, alias_ty)
354GENERATE_ASDL_SEQ_CONSTRUCTOR(withitem, withitem_ty)
Brandt Bucher145bf262021-02-26 14:51:55 -0800355GENERATE_ASDL_SEQ_CONSTRUCTOR(match_case, match_case_ty)
Pablo Galindoa5634c42020-09-16 19:42:00 +0100356GENERATE_ASDL_SEQ_CONSTRUCTOR(type_ignore, type_ignore_ty)
357
Victor Stinner5cf47822020-11-02 22:03:28 +0100358static PyObject* ast2obj_mod(struct ast_state *state, void*);
Serhiy Storchaka43c97312019-09-10 13:02:30 +0300359static const char * const Module_fields[]={
Victor Stinnerce72e1c2013-07-27 00:00:36 +0200360 "body",
Guido van Rossumdcfcd142019-01-31 03:40:27 -0800361 "type_ignores",
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000362};
Serhiy Storchaka43c97312019-09-10 13:02:30 +0300363static const char * const Interactive_fields[]={
Victor Stinnerce72e1c2013-07-27 00:00:36 +0200364 "body",
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000365};
Serhiy Storchaka43c97312019-09-10 13:02:30 +0300366static const char * const Expression_fields[]={
Victor Stinnerce72e1c2013-07-27 00:00:36 +0200367 "body",
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000368};
Serhiy Storchaka43c97312019-09-10 13:02:30 +0300369static const char * const FunctionType_fields[]={
Guido van Rossumdcfcd142019-01-31 03:40:27 -0800370 "argtypes",
371 "returns",
372};
Serhiy Storchaka43c97312019-09-10 13:02:30 +0300373static const char * const stmt_attributes[] = {
Victor Stinnerce72e1c2013-07-27 00:00:36 +0200374 "lineno",
375 "col_offset",
Ivan Levkivskyi9932a222019-01-22 11:18:22 +0000376 "end_lineno",
377 "end_col_offset",
Martin v. Löwis577b5b92006-02-27 15:23:19 +0000378};
Victor Stinner5cf47822020-11-02 22:03:28 +0100379static PyObject* ast2obj_stmt(struct ast_state *state, void*);
Serhiy Storchaka43c97312019-09-10 13:02:30 +0300380static const char * const FunctionDef_fields[]={
Victor Stinnerce72e1c2013-07-27 00:00:36 +0200381 "name",
382 "args",
383 "body",
384 "decorator_list",
385 "returns",
Guido van Rossumdcfcd142019-01-31 03:40:27 -0800386 "type_comment",
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000387};
Serhiy Storchaka43c97312019-09-10 13:02:30 +0300388static const char * const AsyncFunctionDef_fields[]={
Yury Selivanov75445082015-05-11 22:57:16 -0400389 "name",
390 "args",
391 "body",
392 "decorator_list",
393 "returns",
Guido van Rossumdcfcd142019-01-31 03:40:27 -0800394 "type_comment",
Yury Selivanov75445082015-05-11 22:57:16 -0400395};
Serhiy Storchaka43c97312019-09-10 13:02:30 +0300396static const char * const ClassDef_fields[]={
Victor Stinnerce72e1c2013-07-27 00:00:36 +0200397 "name",
398 "bases",
399 "keywords",
Victor Stinnerce72e1c2013-07-27 00:00:36 +0200400 "body",
401 "decorator_list",
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000402};
Serhiy Storchaka43c97312019-09-10 13:02:30 +0300403static const char * const Return_fields[]={
Victor Stinnerce72e1c2013-07-27 00:00:36 +0200404 "value",
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000405};
Serhiy Storchaka43c97312019-09-10 13:02:30 +0300406static const char * const Delete_fields[]={
Victor Stinnerce72e1c2013-07-27 00:00:36 +0200407 "targets",
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000408};
Serhiy Storchaka43c97312019-09-10 13:02:30 +0300409static const char * const Assign_fields[]={
Victor Stinnerce72e1c2013-07-27 00:00:36 +0200410 "targets",
411 "value",
Guido van Rossumdcfcd142019-01-31 03:40:27 -0800412 "type_comment",
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000413};
Serhiy Storchaka43c97312019-09-10 13:02:30 +0300414static const char * const AugAssign_fields[]={
Victor Stinnerce72e1c2013-07-27 00:00:36 +0200415 "target",
416 "op",
417 "value",
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000418};
Serhiy Storchaka43c97312019-09-10 13:02:30 +0300419static const char * const AnnAssign_fields[]={
Yury Selivanovf8cb8a12016-09-08 20:50:03 -0700420 "target",
421 "annotation",
422 "value",
423 "simple",
424};
Serhiy Storchaka43c97312019-09-10 13:02:30 +0300425static const char * const For_fields[]={
Victor Stinnerce72e1c2013-07-27 00:00:36 +0200426 "target",
427 "iter",
428 "body",
429 "orelse",
Guido van Rossumdcfcd142019-01-31 03:40:27 -0800430 "type_comment",
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000431};
Serhiy Storchaka43c97312019-09-10 13:02:30 +0300432static const char * const AsyncFor_fields[]={
Yury Selivanov75445082015-05-11 22:57:16 -0400433 "target",
434 "iter",
435 "body",
436 "orelse",
Guido van Rossumdcfcd142019-01-31 03:40:27 -0800437 "type_comment",
Yury Selivanov75445082015-05-11 22:57:16 -0400438};
Serhiy Storchaka43c97312019-09-10 13:02:30 +0300439static const char * const While_fields[]={
Victor Stinnerce72e1c2013-07-27 00:00:36 +0200440 "test",
441 "body",
442 "orelse",
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000443};
Serhiy Storchaka43c97312019-09-10 13:02:30 +0300444static const char * const If_fields[]={
Victor Stinnerce72e1c2013-07-27 00:00:36 +0200445 "test",
446 "body",
447 "orelse",
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000448};
Serhiy Storchaka43c97312019-09-10 13:02:30 +0300449static const char * const With_fields[]={
Victor Stinnerce72e1c2013-07-27 00:00:36 +0200450 "items",
451 "body",
Guido van Rossumdcfcd142019-01-31 03:40:27 -0800452 "type_comment",
Guido van Rossumc2e20742006-02-27 22:32:47 +0000453};
Serhiy Storchaka43c97312019-09-10 13:02:30 +0300454static const char * const AsyncWith_fields[]={
Yury Selivanov75445082015-05-11 22:57:16 -0400455 "items",
456 "body",
Guido van Rossumdcfcd142019-01-31 03:40:27 -0800457 "type_comment",
Yury Selivanov75445082015-05-11 22:57:16 -0400458};
Brandt Bucher145bf262021-02-26 14:51:55 -0800459static const char * const Match_fields[]={
460 "subject",
461 "cases",
462};
Serhiy Storchaka43c97312019-09-10 13:02:30 +0300463static const char * const Raise_fields[]={
Victor Stinnerce72e1c2013-07-27 00:00:36 +0200464 "exc",
465 "cause",
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000466};
Serhiy Storchaka43c97312019-09-10 13:02:30 +0300467static const char * const Try_fields[]={
Victor Stinnerce72e1c2013-07-27 00:00:36 +0200468 "body",
469 "handlers",
470 "orelse",
471 "finalbody",
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000472};
Serhiy Storchaka43c97312019-09-10 13:02:30 +0300473static const char * const Assert_fields[]={
Victor Stinnerce72e1c2013-07-27 00:00:36 +0200474 "test",
475 "msg",
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000476};
Serhiy Storchaka43c97312019-09-10 13:02:30 +0300477static const char * const Import_fields[]={
Victor Stinnerce72e1c2013-07-27 00:00:36 +0200478 "names",
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000479};
Serhiy Storchaka43c97312019-09-10 13:02:30 +0300480static const char * const ImportFrom_fields[]={
Victor Stinnerce72e1c2013-07-27 00:00:36 +0200481 "module",
482 "names",
483 "level",
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000484};
Serhiy Storchaka43c97312019-09-10 13:02:30 +0300485static const char * const Global_fields[]={
Victor Stinnerce72e1c2013-07-27 00:00:36 +0200486 "names",
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000487};
Serhiy Storchaka43c97312019-09-10 13:02:30 +0300488static const char * const Nonlocal_fields[]={
Victor Stinnerce72e1c2013-07-27 00:00:36 +0200489 "names",
Jeremy Hylton81e95022007-02-27 06:50:52 +0000490};
Serhiy Storchaka43c97312019-09-10 13:02:30 +0300491static const char * const Expr_fields[]={
Victor Stinnerce72e1c2013-07-27 00:00:36 +0200492 "value",
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000493};
Serhiy Storchaka43c97312019-09-10 13:02:30 +0300494static const char * const expr_attributes[] = {
Victor Stinnerce72e1c2013-07-27 00:00:36 +0200495 "lineno",
496 "col_offset",
Ivan Levkivskyi9932a222019-01-22 11:18:22 +0000497 "end_lineno",
498 "end_col_offset",
Martin v. Löwis577b5b92006-02-27 15:23:19 +0000499};
Victor Stinner5cf47822020-11-02 22:03:28 +0100500static PyObject* ast2obj_expr(struct ast_state *state, void*);
Serhiy Storchaka43c97312019-09-10 13:02:30 +0300501static const char * const BoolOp_fields[]={
Victor Stinnerce72e1c2013-07-27 00:00:36 +0200502 "op",
503 "values",
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000504};
Serhiy Storchaka43c97312019-09-10 13:02:30 +0300505static const char * const NamedExpr_fields[]={
Emily Morehouse8f59ee02019-01-24 16:49:56 -0700506 "target",
507 "value",
508};
Serhiy Storchaka43c97312019-09-10 13:02:30 +0300509static const char * const BinOp_fields[]={
Victor Stinnerce72e1c2013-07-27 00:00:36 +0200510 "left",
511 "op",
512 "right",
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000513};
Serhiy Storchaka43c97312019-09-10 13:02:30 +0300514static const char * const UnaryOp_fields[]={
Victor Stinnerce72e1c2013-07-27 00:00:36 +0200515 "op",
516 "operand",
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000517};
Serhiy Storchaka43c97312019-09-10 13:02:30 +0300518static const char * const Lambda_fields[]={
Victor Stinnerce72e1c2013-07-27 00:00:36 +0200519 "args",
520 "body",
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000521};
Serhiy Storchaka43c97312019-09-10 13:02:30 +0300522static const char * const IfExp_fields[]={
Victor Stinnerce72e1c2013-07-27 00:00:36 +0200523 "test",
524 "body",
525 "orelse",
Thomas Woutersdca3b9c2006-02-27 00:24:13 +0000526};
Serhiy Storchaka43c97312019-09-10 13:02:30 +0300527static const char * const Dict_fields[]={
Victor Stinnerce72e1c2013-07-27 00:00:36 +0200528 "keys",
529 "values",
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000530};
Serhiy Storchaka43c97312019-09-10 13:02:30 +0300531static const char * const Set_fields[]={
Victor Stinnerce72e1c2013-07-27 00:00:36 +0200532 "elts",
Guido van Rossum86e58e22006-08-28 15:27:34 +0000533};
Serhiy Storchaka43c97312019-09-10 13:02:30 +0300534static const char * const ListComp_fields[]={
Victor Stinnerce72e1c2013-07-27 00:00:36 +0200535 "elt",
536 "generators",
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000537};
Serhiy Storchaka43c97312019-09-10 13:02:30 +0300538static const char * const SetComp_fields[]={
Victor Stinnerce72e1c2013-07-27 00:00:36 +0200539 "elt",
540 "generators",
Nick Coghlan650f0d02007-04-15 12:05:43 +0000541};
Serhiy Storchaka43c97312019-09-10 13:02:30 +0300542static const char * const DictComp_fields[]={
Victor Stinnerce72e1c2013-07-27 00:00:36 +0200543 "key",
544 "value",
545 "generators",
Guido van Rossum992d4a32007-07-11 13:09:30 +0000546};
Serhiy Storchaka43c97312019-09-10 13:02:30 +0300547static const char * const GeneratorExp_fields[]={
Victor Stinnerce72e1c2013-07-27 00:00:36 +0200548 "elt",
549 "generators",
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000550};
Serhiy Storchaka43c97312019-09-10 13:02:30 +0300551static const char * const Await_fields[]={
Yury Selivanov75445082015-05-11 22:57:16 -0400552 "value",
553};
Serhiy Storchaka43c97312019-09-10 13:02:30 +0300554static const char * const Yield_fields[]={
Victor Stinnerce72e1c2013-07-27 00:00:36 +0200555 "value",
Benjamin Peterson527c6222012-01-14 08:58:23 -0500556};
Serhiy Storchaka43c97312019-09-10 13:02:30 +0300557static const char * const YieldFrom_fields[]={
Victor Stinnerce72e1c2013-07-27 00:00:36 +0200558 "value",
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000559};
Serhiy Storchaka43c97312019-09-10 13:02:30 +0300560static const char * const Compare_fields[]={
Victor Stinnerce72e1c2013-07-27 00:00:36 +0200561 "left",
562 "ops",
563 "comparators",
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000564};
Serhiy Storchaka43c97312019-09-10 13:02:30 +0300565static const char * const Call_fields[]={
Victor Stinnerce72e1c2013-07-27 00:00:36 +0200566 "func",
567 "args",
568 "keywords",
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000569};
Serhiy Storchaka43c97312019-09-10 13:02:30 +0300570static const char * const FormattedValue_fields[]={
Eric V. Smith235a6f02015-09-19 14:51:32 -0400571 "value",
572 "conversion",
573 "format_spec",
574};
Serhiy Storchaka43c97312019-09-10 13:02:30 +0300575static const char * const JoinedStr_fields[]={
Eric V. Smith235a6f02015-09-19 14:51:32 -0400576 "values",
577};
Serhiy Storchaka43c97312019-09-10 13:02:30 +0300578static const char * const Constant_fields[]={
Victor Stinnerf2c1aa12016-01-26 00:40:57 +0100579 "value",
Guido van Rossum10f8ce62019-03-13 13:00:46 -0700580 "kind",
Victor Stinnerf2c1aa12016-01-26 00:40:57 +0100581};
Serhiy Storchaka43c97312019-09-10 13:02:30 +0300582static const char * const Attribute_fields[]={
Victor Stinnerce72e1c2013-07-27 00:00:36 +0200583 "value",
584 "attr",
585 "ctx",
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000586};
Serhiy Storchaka43c97312019-09-10 13:02:30 +0300587static const char * const Subscript_fields[]={
Victor Stinnerce72e1c2013-07-27 00:00:36 +0200588 "value",
589 "slice",
590 "ctx",
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000591};
Serhiy Storchaka43c97312019-09-10 13:02:30 +0300592static const char * const Starred_fields[]={
Victor Stinnerce72e1c2013-07-27 00:00:36 +0200593 "value",
594 "ctx",
Guido van Rossum0368b722007-05-11 16:50:42 +0000595};
Serhiy Storchaka43c97312019-09-10 13:02:30 +0300596static const char * const Name_fields[]={
Victor Stinnerce72e1c2013-07-27 00:00:36 +0200597 "id",
598 "ctx",
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000599};
Serhiy Storchaka43c97312019-09-10 13:02:30 +0300600static const char * const List_fields[]={
Victor Stinnerce72e1c2013-07-27 00:00:36 +0200601 "elts",
602 "ctx",
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000603};
Serhiy Storchaka43c97312019-09-10 13:02:30 +0300604static const char * const Tuple_fields[]={
Victor Stinnerce72e1c2013-07-27 00:00:36 +0200605 "elts",
606 "ctx",
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000607};
Serhiy Storchaka43c97312019-09-10 13:02:30 +0300608static const char * const Slice_fields[]={
Victor Stinnerce72e1c2013-07-27 00:00:36 +0200609 "lower",
610 "upper",
611 "step",
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000612};
Brandt Bucher145bf262021-02-26 14:51:55 -0800613static const char * const MatchAs_fields[]={
614 "pattern",
615 "name",
616};
617static const char * const MatchOr_fields[]={
618 "patterns",
619};
Victor Stinner5cf47822020-11-02 22:03:28 +0100620static PyObject* ast2obj_expr_context(struct ast_state *state, expr_context_ty);
621static PyObject* ast2obj_boolop(struct ast_state *state, boolop_ty);
622static PyObject* ast2obj_operator(struct ast_state *state, operator_ty);
623static PyObject* ast2obj_unaryop(struct ast_state *state, unaryop_ty);
624static PyObject* ast2obj_cmpop(struct ast_state *state, cmpop_ty);
625static PyObject* ast2obj_comprehension(struct ast_state *state, void*);
Serhiy Storchaka43c97312019-09-10 13:02:30 +0300626static const char * const comprehension_fields[]={
Victor Stinnerce72e1c2013-07-27 00:00:36 +0200627 "target",
628 "iter",
629 "ifs",
Yury Selivanov52c4e7c2016-09-09 10:36:01 -0700630 "is_async",
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000631};
Serhiy Storchaka43c97312019-09-10 13:02:30 +0300632static const char * const excepthandler_attributes[] = {
Victor Stinnerce72e1c2013-07-27 00:00:36 +0200633 "lineno",
634 "col_offset",
Ivan Levkivskyi9932a222019-01-22 11:18:22 +0000635 "end_lineno",
636 "end_col_offset",
Neal Norwitzad74aa82008-03-31 05:14:30 +0000637};
Victor Stinner5cf47822020-11-02 22:03:28 +0100638static PyObject* ast2obj_excepthandler(struct ast_state *state, void*);
Serhiy Storchaka43c97312019-09-10 13:02:30 +0300639static const char * const ExceptHandler_fields[]={
Victor Stinnerce72e1c2013-07-27 00:00:36 +0200640 "type",
641 "name",
642 "body",
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000643};
Victor Stinner5cf47822020-11-02 22:03:28 +0100644static PyObject* ast2obj_arguments(struct ast_state *state, void*);
Serhiy Storchaka43c97312019-09-10 13:02:30 +0300645static const char * const arguments_fields[]={
Pablo Galindo8c77b8c2019-04-29 13:36:57 +0100646 "posonlyargs",
Pablo Galindocd6e83b2019-07-15 01:32:18 +0200647 "args",
Victor Stinnerce72e1c2013-07-27 00:00:36 +0200648 "vararg",
Victor Stinnerce72e1c2013-07-27 00:00:36 +0200649 "kwonlyargs",
Victor Stinnerce72e1c2013-07-27 00:00:36 +0200650 "kw_defaults",
Victor Stinneree4b59c2013-07-27 00:01:35 +0200651 "kwarg",
652 "defaults",
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000653};
Victor Stinner5cf47822020-11-02 22:03:28 +0100654static PyObject* ast2obj_arg(struct ast_state *state, void*);
Serhiy Storchaka43c97312019-09-10 13:02:30 +0300655static const char * const arg_attributes[] = {
Victor Stinneree4b59c2013-07-27 00:01:35 +0200656 "lineno",
657 "col_offset",
Ivan Levkivskyi9932a222019-01-22 11:18:22 +0000658 "end_lineno",
659 "end_col_offset",
Benjamin Petersoncda75be2013-03-18 10:48:58 -0700660};
Serhiy Storchaka43c97312019-09-10 13:02:30 +0300661static const char * const arg_fields[]={
Victor Stinnerce72e1c2013-07-27 00:00:36 +0200662 "arg",
663 "annotation",
Guido van Rossumdcfcd142019-01-31 03:40:27 -0800664 "type_comment",
Neal Norwitzc1505362006-12-28 06:47:50 +0000665};
Victor Stinner5cf47822020-11-02 22:03:28 +0100666static PyObject* ast2obj_keyword(struct ast_state *state, void*);
Pablo Galindo168660b2020-04-02 00:47:39 +0100667static const char * const keyword_attributes[] = {
668 "lineno",
669 "col_offset",
670 "end_lineno",
671 "end_col_offset",
672};
Serhiy Storchaka43c97312019-09-10 13:02:30 +0300673static const char * const keyword_fields[]={
Victor Stinnerce72e1c2013-07-27 00:00:36 +0200674 "arg",
675 "value",
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000676};
Victor Stinner5cf47822020-11-02 22:03:28 +0100677static PyObject* ast2obj_alias(struct ast_state *state, void*);
Matthew Suozzo75a06f02021-04-10 16:56:28 -0400678static const char * const alias_attributes[] = {
679 "lineno",
680 "col_offset",
681 "end_lineno",
682 "end_col_offset",
683};
Serhiy Storchaka43c97312019-09-10 13:02:30 +0300684static const char * const alias_fields[]={
Victor Stinnerce72e1c2013-07-27 00:00:36 +0200685 "name",
686 "asname",
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000687};
Victor Stinner5cf47822020-11-02 22:03:28 +0100688static PyObject* ast2obj_withitem(struct ast_state *state, void*);
Serhiy Storchaka43c97312019-09-10 13:02:30 +0300689static const char * const withitem_fields[]={
Victor Stinnerce72e1c2013-07-27 00:00:36 +0200690 "context_expr",
691 "optional_vars",
Benjamin Petersonbf1bbc12011-05-27 13:58:08 -0500692};
Brandt Bucher145bf262021-02-26 14:51:55 -0800693static PyObject* ast2obj_match_case(struct ast_state *state, void*);
694static const char * const match_case_fields[]={
695 "pattern",
696 "guard",
697 "body",
698};
Victor Stinner5cf47822020-11-02 22:03:28 +0100699static PyObject* ast2obj_type_ignore(struct ast_state *state, void*);
Serhiy Storchaka43c97312019-09-10 13:02:30 +0300700static const char * const TypeIgnore_fields[]={
Guido van Rossumdcfcd142019-01-31 03:40:27 -0800701 "lineno",
Michael J. Sullivan933e1502019-05-22 07:54:20 -0700702 "tag",
Guido van Rossumdcfcd142019-01-31 03:40:27 -0800703};
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000704
705
INADA Naokifc489082017-01-25 22:33:43 +0900706
Benjamin Peterson7e0dbfb2012-03-12 09:46:44 -0700707typedef struct {
Victor Stinner45e50de2012-03-13 01:17:31 +0100708 PyObject_HEAD
Benjamin Peterson7e0dbfb2012-03-12 09:46:44 -0700709 PyObject *dict;
710} AST_object;
711
Benjamin Peterson1767e022012-03-14 21:50:29 -0500712static void
713ast_dealloc(AST_object *self)
714{
INADA Naokia6296d32017-08-24 14:55:17 +0900715 /* bpo-31095: UnTrack is needed before calling any callbacks */
Eddie Elizondo0247e802019-09-14 09:38:17 -0400716 PyTypeObject *tp = Py_TYPE(self);
INADA Naokia6296d32017-08-24 14:55:17 +0900717 PyObject_GC_UnTrack(self);
Benjamin Peterson1767e022012-03-14 21:50:29 -0500718 Py_CLEAR(self->dict);
Eddie Elizondo0247e802019-09-14 09:38:17 -0400719 freefunc free_func = PyType_GetSlot(tp, Py_tp_free);
720 assert(free_func != NULL);
721 free_func(self);
722 Py_DECREF(tp);
Benjamin Peterson1767e022012-03-14 21:50:29 -0500723}
724
Neal Norwitz207c9f32008-03-31 04:42:11 +0000725static int
Benjamin Peterson81071762012-07-08 11:03:46 -0700726ast_traverse(AST_object *self, visitproc visit, void *arg)
727{
Pablo Galindo1cf15af2020-05-27 10:03:38 +0100728 Py_VISIT(Py_TYPE(self));
Benjamin Peterson81071762012-07-08 11:03:46 -0700729 Py_VISIT(self->dict);
730 return 0;
731}
732
Serhiy Storchakaa5c42282018-05-31 07:34:34 +0300733static int
Benjamin Peterson81071762012-07-08 11:03:46 -0700734ast_clear(AST_object *self)
735{
736 Py_CLEAR(self->dict);
Serhiy Storchakaa5c42282018-05-31 07:34:34 +0300737 return 0;
Benjamin Peterson81071762012-07-08 11:03:46 -0700738}
739
740static int
Neal Norwitz207c9f32008-03-31 04:42:11 +0000741ast_type_init(PyObject *self, PyObject *args, PyObject *kw)
742{
Victor Stinner5cf47822020-11-02 22:03:28 +0100743 struct ast_state *state = get_ast_state();
Victor Stinner1f764532020-07-04 23:18:15 +0200744 if (state == NULL) {
745 return -1;
746 }
747
Neal Norwitz207c9f32008-03-31 04:42:11 +0000748 Py_ssize_t i, numfields = 0;
749 int res = -1;
750 PyObject *key, *value, *fields;
Victor Stinner74419f02020-07-03 11:35:37 +0200751 if (_PyObject_LookupAttr((PyObject*)Py_TYPE(self), state->_fields, &fields) < 0) {
Serhiy Storchakaf320be72018-01-25 10:49:40 +0200752 goto cleanup;
753 }
Neal Norwitz207c9f32008-03-31 04:42:11 +0000754 if (fields) {
755 numfields = PySequence_Size(fields);
Rémi Lapeyrec73914a2020-05-24 23:12:57 +0200756 if (numfields == -1) {
Neal Norwitz207c9f32008-03-31 04:42:11 +0000757 goto cleanup;
Rémi Lapeyrec73914a2020-05-24 23:12:57 +0200758 }
Neal Norwitz207c9f32008-03-31 04:42:11 +0000759 }
INADA Naoki4c78c522017-02-24 02:48:17 +0900760
Neal Norwitz207c9f32008-03-31 04:42:11 +0000761 res = 0; /* if no error occurs, this stays 0 to the end */
INADA Naoki4c78c522017-02-24 02:48:17 +0900762 if (numfields < PyTuple_GET_SIZE(args)) {
763 PyErr_Format(PyExc_TypeError, "%.400s constructor takes at most "
764 "%zd positional argument%s",
Dino Viehlandac46eb42019-09-11 10:16:34 -0700765 _PyType_Name(Py_TYPE(self)),
INADA Naoki4c78c522017-02-24 02:48:17 +0900766 numfields, numfields == 1 ? "" : "s");
767 res = -1;
768 goto cleanup;
769 }
770 for (i = 0; i < PyTuple_GET_SIZE(args); i++) {
771 /* cannot be reached when fields is NULL */
772 PyObject *name = PySequence_GetItem(fields, i);
773 if (!name) {
Neal Norwitz207c9f32008-03-31 04:42:11 +0000774 res = -1;
775 goto cleanup;
776 }
INADA Naoki4c78c522017-02-24 02:48:17 +0900777 res = PyObject_SetAttr(self, name, PyTuple_GET_ITEM(args, i));
778 Py_DECREF(name);
Rémi Lapeyrec73914a2020-05-24 23:12:57 +0200779 if (res < 0) {
INADA Naoki4c78c522017-02-24 02:48:17 +0900780 goto cleanup;
Rémi Lapeyrec73914a2020-05-24 23:12:57 +0200781 }
Neal Norwitz207c9f32008-03-31 04:42:11 +0000782 }
783 if (kw) {
784 i = 0; /* needed by PyDict_Next */
785 while (PyDict_Next(kw, &i, &key, &value)) {
Rémi Lapeyrec73914a2020-05-24 23:12:57 +0200786 int contains = PySequence_Contains(fields, key);
787 if (contains == -1) {
788 res = -1;
Neal Norwitz207c9f32008-03-31 04:42:11 +0000789 goto cleanup;
Rémi Lapeyrec73914a2020-05-24 23:12:57 +0200790 } else if (contains == 1) {
791 Py_ssize_t p = PySequence_Index(fields, key);
792 if (p == -1) {
793 res = -1;
794 goto cleanup;
795 }
796 if (p < PyTuple_GET_SIZE(args)) {
797 PyErr_Format(PyExc_TypeError,
798 "%.400s got multiple values for argument '%U'",
799 Py_TYPE(self)->tp_name, key);
800 res = -1;
801 goto cleanup;
802 }
803 }
804 res = PyObject_SetAttr(self, key, value);
805 if (res < 0) {
806 goto cleanup;
807 }
Neal Norwitz207c9f32008-03-31 04:42:11 +0000808 }
809 }
810 cleanup:
811 Py_XDECREF(fields);
812 return res;
813}
814
Neal Norwitzee9b10a2008-03-31 05:29:39 +0000815/* Pickling support */
816static PyObject *
817ast_type_reduce(PyObject *self, PyObject *unused)
818{
Victor Stinner5cf47822020-11-02 22:03:28 +0100819 struct ast_state *state = get_ast_state();
Victor Stinnerb1cc6ba2020-07-03 20:01:46 +0200820 if (state == NULL) {
821 return NULL;
822 }
823
Serhiy Storchakaf320be72018-01-25 10:49:40 +0200824 PyObject *dict;
Victor Stinner74419f02020-07-03 11:35:37 +0200825 if (_PyObject_LookupAttr(self, state->__dict__, &dict) < 0) {
Serhiy Storchakaf320be72018-01-25 10:49:40 +0200826 return NULL;
Neal Norwitzee9b10a2008-03-31 05:29:39 +0000827 }
828 if (dict) {
Serhiy Storchakaf320be72018-01-25 10:49:40 +0200829 return Py_BuildValue("O()N", Py_TYPE(self), dict);
Neal Norwitzee9b10a2008-03-31 05:29:39 +0000830 }
831 return Py_BuildValue("O()", Py_TYPE(self));
832}
833
Eddie Elizondo3368f3c2019-09-19 09:29:05 -0700834static PyMemberDef ast_type_members[] = {
835 {"__dictoffset__", T_PYSSIZET, offsetof(AST_object, dict), READONLY},
836 {NULL} /* Sentinel */
837};
838
Neal Norwitzee9b10a2008-03-31 05:29:39 +0000839static PyMethodDef ast_type_methods[] = {
840 {"__reduce__", ast_type_reduce, METH_NOARGS, NULL},
841 {NULL}
842};
843
Benjamin Peterson7e0dbfb2012-03-12 09:46:44 -0700844static PyGetSetDef ast_type_getsets[] = {
845 {"__dict__", PyObject_GenericGetDict, PyObject_GenericSetDict},
846 {NULL}
847};
848
Dino Viehlandac46eb42019-09-11 10:16:34 -0700849static PyType_Slot AST_type_slots[] = {
850 {Py_tp_dealloc, ast_dealloc},
851 {Py_tp_getattro, PyObject_GenericGetAttr},
852 {Py_tp_setattro, PyObject_GenericSetAttr},
853 {Py_tp_traverse, ast_traverse},
854 {Py_tp_clear, ast_clear},
Eddie Elizondo3368f3c2019-09-19 09:29:05 -0700855 {Py_tp_members, ast_type_members},
Dino Viehlandac46eb42019-09-11 10:16:34 -0700856 {Py_tp_methods, ast_type_methods},
857 {Py_tp_getset, ast_type_getsets},
858 {Py_tp_init, ast_type_init},
859 {Py_tp_alloc, PyType_GenericAlloc},
860 {Py_tp_new, PyType_GenericNew},
Dino Viehlandac46eb42019-09-11 10:16:34 -0700861 {Py_tp_free, PyObject_GC_Del},
862 {0, 0},
863};
864
865static PyType_Spec AST_type_spec = {
Serhiy Storchakabace59d2020-03-22 20:33:34 +0200866 "ast.AST",
Benjamin Peterson7e0dbfb2012-03-12 09:46:44 -0700867 sizeof(AST_object),
Neal Norwitz207c9f32008-03-31 04:42:11 +0000868 0,
Dino Viehlandac46eb42019-09-11 10:16:34 -0700869 Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE | Py_TPFLAGS_HAVE_GC,
870 AST_type_slots
Neal Norwitz207c9f32008-03-31 04:42:11 +0000871};
872
Dino Viehlandac46eb42019-09-11 10:16:34 -0700873static PyObject *
Victor Stinner5cf47822020-11-02 22:03:28 +0100874make_type(struct ast_state *state, const char *type, PyObject* base,
Victor Stinner74419f02020-07-03 11:35:37 +0200875 const char* const* fields, int num_fields, const char *doc)
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000876{
877 PyObject *fnames, *result;
878 int i;
Neal Norwitzee9b10a2008-03-31 05:29:39 +0000879 fnames = PyTuple_New(num_fields);
880 if (!fnames) return NULL;
881 for (i = 0; i < num_fields; i++) {
Serhiy Storchaka43c97312019-09-10 13:02:30 +0300882 PyObject *field = PyUnicode_InternFromString(fields[i]);
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000883 if (!field) {
884 Py_DECREF(fnames);
885 return NULL;
886 }
887 PyTuple_SET_ITEM(fnames, i, field);
888 }
Brandt Bucher145bf262021-02-26 14:51:55 -0800889 result = PyObject_CallFunction((PyObject*)&PyType_Type, "s(O){OOOOOOOs}",
INADA Naokifc489082017-01-25 22:33:43 +0900890 type, base,
Victor Stinner74419f02020-07-03 11:35:37 +0200891 state->_fields, fnames,
Brandt Bucher145bf262021-02-26 14:51:55 -0800892 state->__match_args__, fnames,
Victor Stinner74419f02020-07-03 11:35:37 +0200893 state->__module__,
894 state->ast,
895 state->__doc__, doc);
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000896 Py_DECREF(fnames);
Dino Viehlandac46eb42019-09-11 10:16:34 -0700897 return result;
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000898}
899
Serhiy Storchaka43c97312019-09-10 13:02:30 +0300900static int
Victor Stinner5cf47822020-11-02 22:03:28 +0100901add_attributes(struct ast_state *state, PyObject *type, const char * const *attrs, int num_fields)
Martin v. Löwis577b5b92006-02-27 15:23:19 +0000902{
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000903 int i, result;
Neal Norwitz207c9f32008-03-31 04:42:11 +0000904 PyObject *s, *l = PyTuple_New(num_fields);
Benjamin Peterson3e5cd1d2010-06-27 21:45:24 +0000905 if (!l)
906 return 0;
907 for (i = 0; i < num_fields; i++) {
Serhiy Storchaka43c97312019-09-10 13:02:30 +0300908 s = PyUnicode_InternFromString(attrs[i]);
Martin v. Löwis577b5b92006-02-27 15:23:19 +0000909 if (!s) {
910 Py_DECREF(l);
911 return 0;
912 }
Neal Norwitz207c9f32008-03-31 04:42:11 +0000913 PyTuple_SET_ITEM(l, i, s);
Martin v. Löwis577b5b92006-02-27 15:23:19 +0000914 }
Victor Stinner74419f02020-07-03 11:35:37 +0200915 result = PyObject_SetAttr(type, state->_attributes, l) >= 0;
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000916 Py_DECREF(l);
917 return result;
Martin v. Löwis577b5b92006-02-27 15:23:19 +0000918}
919
Martin v. Löwis618dc5e2008-03-30 20:03:44 +0000920/* Conversion AST -> Python */
921
Victor Stinner5cf47822020-11-02 22:03:28 +0100922static PyObject* ast2obj_list(struct ast_state *state, asdl_seq *seq, PyObject* (*func)(struct ast_state *state, void*))
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000923{
Benjamin Peterson77fa9372012-05-15 10:10:27 -0700924 Py_ssize_t i, n = asdl_seq_LEN(seq);
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000925 PyObject *result = PyList_New(n);
926 PyObject *value;
927 if (!result)
928 return NULL;
929 for (i = 0; i < n; i++) {
Pablo Galindoa5634c42020-09-16 19:42:00 +0100930 value = func(state, asdl_seq_GET_UNTYPED(seq, i));
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000931 if (!value) {
932 Py_DECREF(result);
933 return NULL;
934 }
935 PyList_SET_ITEM(result, i, value);
936 }
937 return result;
938}
939
Victor Stinner5cf47822020-11-02 22:03:28 +0100940static PyObject* ast2obj_object(struct ast_state *Py_UNUSED(state), void *o)
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000941{
942 if (!o)
943 o = Py_None;
944 Py_INCREF((PyObject*)o);
945 return (PyObject*)o;
946}
Victor Stinnerf2c1aa12016-01-26 00:40:57 +0100947#define ast2obj_constant ast2obj_object
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000948#define ast2obj_identifier ast2obj_object
949#define ast2obj_string ast2obj_object
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000950
Victor Stinner5cf47822020-11-02 22:03:28 +0100951static PyObject* ast2obj_int(struct ast_state *Py_UNUSED(state), long b)
Martin v. Löwis577b5b92006-02-27 15:23:19 +0000952{
Christian Heimes217cfd12007-12-02 14:31:20 +0000953 return PyLong_FromLong(b);
Martin v. Löwis577b5b92006-02-27 15:23:19 +0000954}
955
Martin v. Löwis618dc5e2008-03-30 20:03:44 +0000956/* Conversion Python -> AST */
957
Victor Stinner5cf47822020-11-02 22:03:28 +0100958static int obj2ast_object(struct ast_state *Py_UNUSED(state), PyObject* obj, PyObject** out, PyArena* arena)
Martin v. Löwis618dc5e2008-03-30 20:03:44 +0000959{
960 if (obj == Py_None)
961 obj = NULL;
Christian Heimes70c94e72013-07-27 00:33:13 +0200962 if (obj) {
Victor Stinner8370e072021-03-24 02:23:01 +0100963 if (_PyArena_AddPyObject(arena, obj) < 0) {
Christian Heimes70c94e72013-07-27 00:33:13 +0200964 *out = NULL;
965 return -1;
966 }
967 Py_INCREF(obj);
968 }
Martin v. Löwis618dc5e2008-03-30 20:03:44 +0000969 *out = obj;
970 return 0;
971}
972
Victor Stinner5cf47822020-11-02 22:03:28 +0100973static int obj2ast_constant(struct ast_state *Py_UNUSED(state), PyObject* obj, PyObject** out, PyArena* arena)
Victor Stinnerf2c1aa12016-01-26 00:40:57 +0100974{
Victor Stinner8370e072021-03-24 02:23:01 +0100975 if (_PyArena_AddPyObject(arena, obj) < 0) {
Serhiy Storchaka3f228112018-09-27 17:42:37 +0300976 *out = NULL;
977 return -1;
Victor Stinnerf2c1aa12016-01-26 00:40:57 +0100978 }
Serhiy Storchaka3f228112018-09-27 17:42:37 +0300979 Py_INCREF(obj);
Victor Stinnerf2c1aa12016-01-26 00:40:57 +0100980 *out = obj;
981 return 0;
982}
983
Victor Stinner5cf47822020-11-02 22:03:28 +0100984static int obj2ast_identifier(struct ast_state *state, PyObject* obj, PyObject** out, PyArena* arena)
Benjamin Peterson2193d2b2011-07-22 10:50:23 -0500985{
Benjamin Peterson180e6352011-07-22 11:09:07 -0500986 if (!PyUnicode_CheckExact(obj) && obj != Py_None) {
987 PyErr_SetString(PyExc_TypeError, "AST identifier must be of type str");
Benjamin Peterson2193d2b2011-07-22 10:50:23 -0500988 return 1;
989 }
Victor Stinner74419f02020-07-03 11:35:37 +0200990 return obj2ast_object(state, obj, out, arena);
Benjamin Peterson2193d2b2011-07-22 10:50:23 -0500991}
992
Victor Stinner5cf47822020-11-02 22:03:28 +0100993static int obj2ast_string(struct ast_state *state, PyObject* obj, PyObject** out, PyArena* arena)
Guido van Rossumdcfcd142019-01-31 03:40:27 -0800994{
995 if (!PyUnicode_CheckExact(obj) && !PyBytes_CheckExact(obj)) {
996 PyErr_SetString(PyExc_TypeError, "AST string must be of type str");
997 return 1;
998 }
Victor Stinner74419f02020-07-03 11:35:37 +0200999 return obj2ast_object(state, obj, out, arena);
Guido van Rossumdcfcd142019-01-31 03:40:27 -08001000}
1001
Victor Stinner5cf47822020-11-02 22:03:28 +01001002static int obj2ast_int(struct ast_state* Py_UNUSED(state), PyObject* obj, int* out, PyArena* arena)
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00001003{
1004 int i;
1005 if (!PyLong_Check(obj)) {
Amaury Forgeot d'Arc5e8f8102011-11-22 21:52:30 +01001006 PyErr_Format(PyExc_ValueError, "invalid integer value: %R", obj);
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00001007 return 1;
1008 }
1009
Serhiy Storchaka56f6e762015-09-06 21:25:30 +03001010 i = _PyLong_AsInt(obj);
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00001011 if (i == -1 && PyErr_Occurred())
1012 return 1;
1013 *out = i;
1014 return 0;
1015}
1016
Victor Stinner5cf47822020-11-02 22:03:28 +01001017static int add_ast_fields(struct ast_state *state)
Benjamin Petersonce825f12008-10-24 23:11:02 +00001018{
Dino Viehlandac46eb42019-09-11 10:16:34 -07001019 PyObject *empty_tuple;
Benjamin Petersonce825f12008-10-24 23:11:02 +00001020 empty_tuple = PyTuple_New(0);
1021 if (!empty_tuple ||
Victor Stinner74419f02020-07-03 11:35:37 +02001022 PyObject_SetAttrString(state->AST_type, "_fields", empty_tuple) < 0 ||
Brandt Bucher145bf262021-02-26 14:51:55 -08001023 PyObject_SetAttrString(state->AST_type, "__match_args__", empty_tuple) < 0 ||
Victor Stinner74419f02020-07-03 11:35:37 +02001024 PyObject_SetAttrString(state->AST_type, "_attributes", empty_tuple) < 0) {
Benjamin Petersonce825f12008-10-24 23:11:02 +00001025 Py_XDECREF(empty_tuple);
1026 return -1;
1027 }
1028 Py_DECREF(empty_tuple);
1029 return 0;
1030}
1031
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00001032
Victor Stinnerfd957c12020-11-03 18:07:15 +01001033
1034static int
1035init_types(struct ast_state *state)
Martin v. Löwisbd260da2006-02-26 19:42:26 +00001036{
Victor Stinnerfd957c12020-11-03 18:07:15 +01001037 // init_types() must not be called after _PyAST_Fini()
1038 // has been called
1039 assert(state->initialized >= 0);
1040
1041 if (state->initialized) {
1042 return 1;
1043 }
1044 if (init_identifiers(state) < 0) {
1045 return 0;
1046 }
Dino Viehlandac46eb42019-09-11 10:16:34 -07001047 state->AST_type = PyType_FromSpec(&AST_type_spec);
Victor Stinnerfd957c12020-11-03 18:07:15 +01001048 if (!state->AST_type) {
1049 return 0;
1050 }
1051 if (add_ast_fields(state) < 0) {
1052 return 0;
1053 }
Victor Stinner74419f02020-07-03 11:35:37 +02001054 state->mod_type = make_type(state, "mod", state->AST_type, NULL, 0,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001055 "mod = Module(stmt* body, type_ignore* type_ignores)\n"
1056 " | Interactive(stmt* body)\n"
1057 " | Expression(expr body)\n"
1058 " | FunctionType(expr* argtypes, expr returns)");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001059 if (!state->mod_type) return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001060 if (!add_attributes(state, state->mod_type, NULL, 0)) return 0;
1061 state->Module_type = make_type(state, "Module", state->mod_type,
1062 Module_fields, 2,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001063 "Module(stmt* body, type_ignore* type_ignores)");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001064 if (!state->Module_type) return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001065 state->Interactive_type = make_type(state, "Interactive", state->mod_type,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001066 Interactive_fields, 1,
1067 "Interactive(stmt* body)");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001068 if (!state->Interactive_type) return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001069 state->Expression_type = make_type(state, "Expression", state->mod_type,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001070 Expression_fields, 1,
1071 "Expression(expr body)");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001072 if (!state->Expression_type) return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001073 state->FunctionType_type = make_type(state, "FunctionType",
1074 state->mod_type, FunctionType_fields,
1075 2,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001076 "FunctionType(expr* argtypes, expr returns)");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001077 if (!state->FunctionType_type) return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001078 state->stmt_type = make_type(state, "stmt", state->AST_type, NULL, 0,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001079 "stmt = FunctionDef(identifier name, arguments args, stmt* body, expr* decorator_list, expr? returns, string? type_comment)\n"
1080 " | AsyncFunctionDef(identifier name, arguments args, stmt* body, expr* decorator_list, expr? returns, string? type_comment)\n"
1081 " | ClassDef(identifier name, expr* bases, keyword* keywords, stmt* body, expr* decorator_list)\n"
1082 " | Return(expr? value)\n"
1083 " | Delete(expr* targets)\n"
1084 " | Assign(expr* targets, expr value, string? type_comment)\n"
1085 " | AugAssign(expr target, operator op, expr value)\n"
1086 " | AnnAssign(expr target, expr annotation, expr? value, int simple)\n"
1087 " | For(expr target, expr iter, stmt* body, stmt* orelse, string? type_comment)\n"
1088 " | AsyncFor(expr target, expr iter, stmt* body, stmt* orelse, string? type_comment)\n"
1089 " | While(expr test, stmt* body, stmt* orelse)\n"
1090 " | If(expr test, stmt* body, stmt* orelse)\n"
1091 " | With(withitem* items, stmt* body, string? type_comment)\n"
1092 " | AsyncWith(withitem* items, stmt* body, string? type_comment)\n"
Brandt Bucher145bf262021-02-26 14:51:55 -08001093 " | Match(expr subject, match_case* cases)\n"
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001094 " | Raise(expr? exc, expr? cause)\n"
1095 " | Try(stmt* body, excepthandler* handlers, stmt* orelse, stmt* finalbody)\n"
1096 " | Assert(expr test, expr? msg)\n"
1097 " | Import(alias* names)\n"
1098 " | ImportFrom(identifier? module, alias* names, int? level)\n"
1099 " | Global(identifier* names)\n"
1100 " | Nonlocal(identifier* names)\n"
1101 " | Expr(expr value)\n"
1102 " | Pass\n"
1103 " | Break\n"
1104 " | Continue");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001105 if (!state->stmt_type) return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001106 if (!add_attributes(state, state->stmt_type, stmt_attributes, 4)) return 0;
Serhiy Storchakab7e95252020-03-10 00:07:47 +02001107 if (PyObject_SetAttr(state->stmt_type, state->end_lineno, Py_None) == -1)
1108 return 0;
1109 if (PyObject_SetAttr(state->stmt_type, state->end_col_offset, Py_None) ==
1110 -1)
1111 return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001112 state->FunctionDef_type = make_type(state, "FunctionDef", state->stmt_type,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001113 FunctionDef_fields, 6,
1114 "FunctionDef(identifier name, arguments args, stmt* body, expr* decorator_list, expr? returns, string? type_comment)");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001115 if (!state->FunctionDef_type) return 0;
Serhiy Storchakab7e95252020-03-10 00:07:47 +02001116 if (PyObject_SetAttr(state->FunctionDef_type, state->returns, Py_None) ==
1117 -1)
1118 return 0;
1119 if (PyObject_SetAttr(state->FunctionDef_type, state->type_comment, Py_None)
1120 == -1)
1121 return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001122 state->AsyncFunctionDef_type = make_type(state, "AsyncFunctionDef",
Dino Viehlandac46eb42019-09-11 10:16:34 -07001123 state->stmt_type,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001124 AsyncFunctionDef_fields, 6,
1125 "AsyncFunctionDef(identifier name, arguments args, stmt* body, expr* decorator_list, expr? returns, string? type_comment)");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001126 if (!state->AsyncFunctionDef_type) return 0;
Serhiy Storchakab7e95252020-03-10 00:07:47 +02001127 if (PyObject_SetAttr(state->AsyncFunctionDef_type, state->returns, Py_None)
1128 == -1)
1129 return 0;
1130 if (PyObject_SetAttr(state->AsyncFunctionDef_type, state->type_comment,
1131 Py_None) == -1)
1132 return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001133 state->ClassDef_type = make_type(state, "ClassDef", state->stmt_type,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001134 ClassDef_fields, 5,
1135 "ClassDef(identifier name, expr* bases, keyword* keywords, stmt* body, expr* decorator_list)");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001136 if (!state->ClassDef_type) return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001137 state->Return_type = make_type(state, "Return", state->stmt_type,
1138 Return_fields, 1,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001139 "Return(expr? value)");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001140 if (!state->Return_type) return 0;
Serhiy Storchakab7e95252020-03-10 00:07:47 +02001141 if (PyObject_SetAttr(state->Return_type, state->value, Py_None) == -1)
1142 return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001143 state->Delete_type = make_type(state, "Delete", state->stmt_type,
1144 Delete_fields, 1,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001145 "Delete(expr* targets)");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001146 if (!state->Delete_type) return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001147 state->Assign_type = make_type(state, "Assign", state->stmt_type,
1148 Assign_fields, 3,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001149 "Assign(expr* targets, expr value, string? type_comment)");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001150 if (!state->Assign_type) return 0;
Serhiy Storchakab7e95252020-03-10 00:07:47 +02001151 if (PyObject_SetAttr(state->Assign_type, state->type_comment, Py_None) ==
1152 -1)
1153 return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001154 state->AugAssign_type = make_type(state, "AugAssign", state->stmt_type,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001155 AugAssign_fields, 3,
1156 "AugAssign(expr target, operator op, expr value)");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001157 if (!state->AugAssign_type) return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001158 state->AnnAssign_type = make_type(state, "AnnAssign", state->stmt_type,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001159 AnnAssign_fields, 4,
1160 "AnnAssign(expr target, expr annotation, expr? value, int simple)");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001161 if (!state->AnnAssign_type) return 0;
Serhiy Storchakab7e95252020-03-10 00:07:47 +02001162 if (PyObject_SetAttr(state->AnnAssign_type, state->value, Py_None) == -1)
1163 return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001164 state->For_type = make_type(state, "For", state->stmt_type, For_fields, 5,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001165 "For(expr target, expr iter, stmt* body, stmt* orelse, string? type_comment)");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001166 if (!state->For_type) return 0;
Serhiy Storchakab7e95252020-03-10 00:07:47 +02001167 if (PyObject_SetAttr(state->For_type, state->type_comment, Py_None) == -1)
1168 return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001169 state->AsyncFor_type = make_type(state, "AsyncFor", state->stmt_type,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001170 AsyncFor_fields, 5,
1171 "AsyncFor(expr target, expr iter, stmt* body, stmt* orelse, string? type_comment)");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001172 if (!state->AsyncFor_type) return 0;
Serhiy Storchakab7e95252020-03-10 00:07:47 +02001173 if (PyObject_SetAttr(state->AsyncFor_type, state->type_comment, Py_None) ==
1174 -1)
1175 return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001176 state->While_type = make_type(state, "While", state->stmt_type,
1177 While_fields, 3,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001178 "While(expr test, stmt* body, stmt* orelse)");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001179 if (!state->While_type) return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001180 state->If_type = make_type(state, "If", state->stmt_type, If_fields, 3,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001181 "If(expr test, stmt* body, stmt* orelse)");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001182 if (!state->If_type) return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001183 state->With_type = make_type(state, "With", state->stmt_type, With_fields,
1184 3,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001185 "With(withitem* items, stmt* body, string? type_comment)");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001186 if (!state->With_type) return 0;
Serhiy Storchakab7e95252020-03-10 00:07:47 +02001187 if (PyObject_SetAttr(state->With_type, state->type_comment, Py_None) == -1)
1188 return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001189 state->AsyncWith_type = make_type(state, "AsyncWith", state->stmt_type,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001190 AsyncWith_fields, 3,
1191 "AsyncWith(withitem* items, stmt* body, string? type_comment)");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001192 if (!state->AsyncWith_type) return 0;
Serhiy Storchakab7e95252020-03-10 00:07:47 +02001193 if (PyObject_SetAttr(state->AsyncWith_type, state->type_comment, Py_None)
1194 == -1)
1195 return 0;
Brandt Bucher145bf262021-02-26 14:51:55 -08001196 state->Match_type = make_type(state, "Match", state->stmt_type,
1197 Match_fields, 2,
1198 "Match(expr subject, match_case* cases)");
1199 if (!state->Match_type) return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001200 state->Raise_type = make_type(state, "Raise", state->stmt_type,
1201 Raise_fields, 2,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001202 "Raise(expr? exc, expr? cause)");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001203 if (!state->Raise_type) return 0;
Serhiy Storchakab7e95252020-03-10 00:07:47 +02001204 if (PyObject_SetAttr(state->Raise_type, state->exc, Py_None) == -1)
1205 return 0;
1206 if (PyObject_SetAttr(state->Raise_type, state->cause, Py_None) == -1)
1207 return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001208 state->Try_type = make_type(state, "Try", state->stmt_type, Try_fields, 4,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001209 "Try(stmt* body, excepthandler* handlers, stmt* orelse, stmt* finalbody)");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001210 if (!state->Try_type) return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001211 state->Assert_type = make_type(state, "Assert", state->stmt_type,
1212 Assert_fields, 2,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001213 "Assert(expr test, expr? msg)");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001214 if (!state->Assert_type) return 0;
Serhiy Storchakab7e95252020-03-10 00:07:47 +02001215 if (PyObject_SetAttr(state->Assert_type, state->msg, Py_None) == -1)
1216 return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001217 state->Import_type = make_type(state, "Import", state->stmt_type,
1218 Import_fields, 1,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001219 "Import(alias* names)");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001220 if (!state->Import_type) return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001221 state->ImportFrom_type = make_type(state, "ImportFrom", state->stmt_type,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001222 ImportFrom_fields, 3,
1223 "ImportFrom(identifier? module, alias* names, int? level)");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001224 if (!state->ImportFrom_type) return 0;
Serhiy Storchakab7e95252020-03-10 00:07:47 +02001225 if (PyObject_SetAttr(state->ImportFrom_type, state->module, Py_None) == -1)
1226 return 0;
1227 if (PyObject_SetAttr(state->ImportFrom_type, state->level, Py_None) == -1)
1228 return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001229 state->Global_type = make_type(state, "Global", state->stmt_type,
1230 Global_fields, 1,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001231 "Global(identifier* names)");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001232 if (!state->Global_type) return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001233 state->Nonlocal_type = make_type(state, "Nonlocal", state->stmt_type,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001234 Nonlocal_fields, 1,
1235 "Nonlocal(identifier* names)");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001236 if (!state->Nonlocal_type) return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001237 state->Expr_type = make_type(state, "Expr", state->stmt_type, Expr_fields,
1238 1,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001239 "Expr(expr value)");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001240 if (!state->Expr_type) return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001241 state->Pass_type = make_type(state, "Pass", state->stmt_type, NULL, 0,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001242 "Pass");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001243 if (!state->Pass_type) return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001244 state->Break_type = make_type(state, "Break", state->stmt_type, NULL, 0,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001245 "Break");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001246 if (!state->Break_type) return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001247 state->Continue_type = make_type(state, "Continue", state->stmt_type, NULL,
1248 0,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001249 "Continue");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001250 if (!state->Continue_type) return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001251 state->expr_type = make_type(state, "expr", state->AST_type, NULL, 0,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001252 "expr = BoolOp(boolop op, expr* values)\n"
1253 " | NamedExpr(expr target, expr value)\n"
1254 " | BinOp(expr left, operator op, expr right)\n"
1255 " | UnaryOp(unaryop op, expr operand)\n"
1256 " | Lambda(arguments args, expr body)\n"
1257 " | IfExp(expr test, expr body, expr orelse)\n"
1258 " | Dict(expr* keys, expr* values)\n"
1259 " | Set(expr* elts)\n"
1260 " | ListComp(expr elt, comprehension* generators)\n"
1261 " | SetComp(expr elt, comprehension* generators)\n"
1262 " | DictComp(expr key, expr value, comprehension* generators)\n"
1263 " | GeneratorExp(expr elt, comprehension* generators)\n"
1264 " | Await(expr value)\n"
1265 " | Yield(expr? value)\n"
1266 " | YieldFrom(expr value)\n"
1267 " | Compare(expr left, cmpop* ops, expr* comparators)\n"
1268 " | Call(expr func, expr* args, keyword* keywords)\n"
1269 " | FormattedValue(expr value, int? conversion, expr? format_spec)\n"
1270 " | JoinedStr(expr* values)\n"
1271 " | Constant(constant value, string? kind)\n"
1272 " | Attribute(expr value, identifier attr, expr_context ctx)\n"
1273 " | Subscript(expr value, expr slice, expr_context ctx)\n"
1274 " | Starred(expr value, expr_context ctx)\n"
1275 " | Name(identifier id, expr_context ctx)\n"
1276 " | List(expr* elts, expr_context ctx)\n"
1277 " | Tuple(expr* elts, expr_context ctx)\n"
Brandt Bucher145bf262021-02-26 14:51:55 -08001278 " | Slice(expr? lower, expr? upper, expr? step)\n"
1279 " | MatchAs(expr pattern, identifier name)\n"
1280 " | MatchOr(expr* patterns)");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001281 if (!state->expr_type) return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001282 if (!add_attributes(state, state->expr_type, expr_attributes, 4)) return 0;
Serhiy Storchakab7e95252020-03-10 00:07:47 +02001283 if (PyObject_SetAttr(state->expr_type, state->end_lineno, Py_None) == -1)
1284 return 0;
1285 if (PyObject_SetAttr(state->expr_type, state->end_col_offset, Py_None) ==
1286 -1)
1287 return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001288 state->BoolOp_type = make_type(state, "BoolOp", state->expr_type,
1289 BoolOp_fields, 2,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001290 "BoolOp(boolop op, expr* values)");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001291 if (!state->BoolOp_type) return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001292 state->NamedExpr_type = make_type(state, "NamedExpr", state->expr_type,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001293 NamedExpr_fields, 2,
1294 "NamedExpr(expr target, expr value)");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001295 if (!state->NamedExpr_type) return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001296 state->BinOp_type = make_type(state, "BinOp", state->expr_type,
1297 BinOp_fields, 3,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001298 "BinOp(expr left, operator op, expr right)");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001299 if (!state->BinOp_type) return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001300 state->UnaryOp_type = make_type(state, "UnaryOp", state->expr_type,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001301 UnaryOp_fields, 2,
1302 "UnaryOp(unaryop op, expr operand)");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001303 if (!state->UnaryOp_type) return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001304 state->Lambda_type = make_type(state, "Lambda", state->expr_type,
1305 Lambda_fields, 2,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001306 "Lambda(arguments args, expr body)");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001307 if (!state->Lambda_type) return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001308 state->IfExp_type = make_type(state, "IfExp", state->expr_type,
1309 IfExp_fields, 3,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001310 "IfExp(expr test, expr body, expr orelse)");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001311 if (!state->IfExp_type) return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001312 state->Dict_type = make_type(state, "Dict", state->expr_type, Dict_fields,
1313 2,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001314 "Dict(expr* keys, expr* values)");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001315 if (!state->Dict_type) return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001316 state->Set_type = make_type(state, "Set", state->expr_type, Set_fields, 1,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001317 "Set(expr* elts)");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001318 if (!state->Set_type) return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001319 state->ListComp_type = make_type(state, "ListComp", state->expr_type,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001320 ListComp_fields, 2,
1321 "ListComp(expr elt, comprehension* generators)");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001322 if (!state->ListComp_type) return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001323 state->SetComp_type = make_type(state, "SetComp", state->expr_type,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001324 SetComp_fields, 2,
1325 "SetComp(expr elt, comprehension* generators)");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001326 if (!state->SetComp_type) return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001327 state->DictComp_type = make_type(state, "DictComp", state->expr_type,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001328 DictComp_fields, 3,
1329 "DictComp(expr key, expr value, comprehension* generators)");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001330 if (!state->DictComp_type) return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001331 state->GeneratorExp_type = make_type(state, "GeneratorExp",
1332 state->expr_type, GeneratorExp_fields,
1333 2,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001334 "GeneratorExp(expr elt, comprehension* generators)");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001335 if (!state->GeneratorExp_type) return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001336 state->Await_type = make_type(state, "Await", state->expr_type,
1337 Await_fields, 1,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001338 "Await(expr value)");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001339 if (!state->Await_type) return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001340 state->Yield_type = make_type(state, "Yield", state->expr_type,
1341 Yield_fields, 1,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001342 "Yield(expr? value)");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001343 if (!state->Yield_type) return 0;
Serhiy Storchakab7e95252020-03-10 00:07:47 +02001344 if (PyObject_SetAttr(state->Yield_type, state->value, Py_None) == -1)
1345 return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001346 state->YieldFrom_type = make_type(state, "YieldFrom", state->expr_type,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001347 YieldFrom_fields, 1,
1348 "YieldFrom(expr value)");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001349 if (!state->YieldFrom_type) return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001350 state->Compare_type = make_type(state, "Compare", state->expr_type,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001351 Compare_fields, 3,
1352 "Compare(expr left, cmpop* ops, expr* comparators)");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001353 if (!state->Compare_type) return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001354 state->Call_type = make_type(state, "Call", state->expr_type, Call_fields,
1355 3,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001356 "Call(expr func, expr* args, keyword* keywords)");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001357 if (!state->Call_type) return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001358 state->FormattedValue_type = make_type(state, "FormattedValue",
1359 state->expr_type,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001360 FormattedValue_fields, 3,
1361 "FormattedValue(expr value, int? conversion, expr? format_spec)");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001362 if (!state->FormattedValue_type) return 0;
Serhiy Storchakab7e95252020-03-10 00:07:47 +02001363 if (PyObject_SetAttr(state->FormattedValue_type, state->conversion,
1364 Py_None) == -1)
1365 return 0;
1366 if (PyObject_SetAttr(state->FormattedValue_type, state->format_spec,
1367 Py_None) == -1)
1368 return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001369 state->JoinedStr_type = make_type(state, "JoinedStr", state->expr_type,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001370 JoinedStr_fields, 1,
1371 "JoinedStr(expr* values)");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001372 if (!state->JoinedStr_type) return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001373 state->Constant_type = make_type(state, "Constant", state->expr_type,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001374 Constant_fields, 2,
1375 "Constant(constant value, string? kind)");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001376 if (!state->Constant_type) return 0;
Serhiy Storchakab7e95252020-03-10 00:07:47 +02001377 if (PyObject_SetAttr(state->Constant_type, state->kind, Py_None) == -1)
1378 return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001379 state->Attribute_type = make_type(state, "Attribute", state->expr_type,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001380 Attribute_fields, 3,
1381 "Attribute(expr value, identifier attr, expr_context ctx)");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001382 if (!state->Attribute_type) return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001383 state->Subscript_type = make_type(state, "Subscript", state->expr_type,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001384 Subscript_fields, 3,
1385 "Subscript(expr value, expr slice, expr_context ctx)");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001386 if (!state->Subscript_type) return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001387 state->Starred_type = make_type(state, "Starred", state->expr_type,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001388 Starred_fields, 2,
1389 "Starred(expr value, expr_context ctx)");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001390 if (!state->Starred_type) return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001391 state->Name_type = make_type(state, "Name", state->expr_type, Name_fields,
1392 2,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001393 "Name(identifier id, expr_context ctx)");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001394 if (!state->Name_type) return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001395 state->List_type = make_type(state, "List", state->expr_type, List_fields,
1396 2,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001397 "List(expr* elts, expr_context ctx)");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001398 if (!state->List_type) return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001399 state->Tuple_type = make_type(state, "Tuple", state->expr_type,
1400 Tuple_fields, 2,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001401 "Tuple(expr* elts, expr_context ctx)");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001402 if (!state->Tuple_type) return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001403 state->Slice_type = make_type(state, "Slice", state->expr_type,
1404 Slice_fields, 3,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001405 "Slice(expr? lower, expr? upper, expr? step)");
Serhiy Storchaka13d52c22020-03-10 18:52:34 +02001406 if (!state->Slice_type) return 0;
1407 if (PyObject_SetAttr(state->Slice_type, state->lower, Py_None) == -1)
1408 return 0;
1409 if (PyObject_SetAttr(state->Slice_type, state->upper, Py_None) == -1)
1410 return 0;
1411 if (PyObject_SetAttr(state->Slice_type, state->step, Py_None) == -1)
1412 return 0;
Brandt Bucher145bf262021-02-26 14:51:55 -08001413 state->MatchAs_type = make_type(state, "MatchAs", state->expr_type,
1414 MatchAs_fields, 2,
1415 "MatchAs(expr pattern, identifier name)");
1416 if (!state->MatchAs_type) return 0;
1417 state->MatchOr_type = make_type(state, "MatchOr", state->expr_type,
1418 MatchOr_fields, 1,
1419 "MatchOr(expr* patterns)");
1420 if (!state->MatchOr_type) return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001421 state->expr_context_type = make_type(state, "expr_context",
1422 state->AST_type, NULL, 0,
Serhiy Storchaka6b975982020-03-17 23:41:08 +02001423 "expr_context = Load | Store | Del");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001424 if (!state->expr_context_type) return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001425 if (!add_attributes(state, state->expr_context_type, NULL, 0)) return 0;
1426 state->Load_type = make_type(state, "Load", state->expr_context_type, NULL,
1427 0,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001428 "Load");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001429 if (!state->Load_type) return 0;
1430 state->Load_singleton = PyType_GenericNew((PyTypeObject *)state->Load_type,
1431 NULL, NULL);
1432 if (!state->Load_singleton) return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001433 state->Store_type = make_type(state, "Store", state->expr_context_type,
1434 NULL, 0,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001435 "Store");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001436 if (!state->Store_type) return 0;
1437 state->Store_singleton = PyType_GenericNew((PyTypeObject
1438 *)state->Store_type, NULL, NULL);
1439 if (!state->Store_singleton) return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001440 state->Del_type = make_type(state, "Del", state->expr_context_type, NULL, 0,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001441 "Del");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001442 if (!state->Del_type) return 0;
1443 state->Del_singleton = PyType_GenericNew((PyTypeObject *)state->Del_type,
1444 NULL, NULL);
1445 if (!state->Del_singleton) return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001446 state->boolop_type = make_type(state, "boolop", state->AST_type, NULL, 0,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001447 "boolop = And | Or");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001448 if (!state->boolop_type) return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001449 if (!add_attributes(state, state->boolop_type, NULL, 0)) return 0;
1450 state->And_type = make_type(state, "And", state->boolop_type, NULL, 0,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001451 "And");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001452 if (!state->And_type) return 0;
1453 state->And_singleton = PyType_GenericNew((PyTypeObject *)state->And_type,
1454 NULL, NULL);
1455 if (!state->And_singleton) return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001456 state->Or_type = make_type(state, "Or", state->boolop_type, NULL, 0,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001457 "Or");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001458 if (!state->Or_type) return 0;
1459 state->Or_singleton = PyType_GenericNew((PyTypeObject *)state->Or_type,
1460 NULL, NULL);
1461 if (!state->Or_singleton) return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001462 state->operator_type = make_type(state, "operator", state->AST_type, NULL,
1463 0,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001464 "operator = Add | Sub | Mult | MatMult | Div | Mod | Pow | LShift | RShift | BitOr | BitXor | BitAnd | FloorDiv");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001465 if (!state->operator_type) return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001466 if (!add_attributes(state, state->operator_type, NULL, 0)) return 0;
1467 state->Add_type = make_type(state, "Add", state->operator_type, NULL, 0,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001468 "Add");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001469 if (!state->Add_type) return 0;
1470 state->Add_singleton = PyType_GenericNew((PyTypeObject *)state->Add_type,
1471 NULL, NULL);
1472 if (!state->Add_singleton) return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001473 state->Sub_type = make_type(state, "Sub", state->operator_type, NULL, 0,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001474 "Sub");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001475 if (!state->Sub_type) return 0;
1476 state->Sub_singleton = PyType_GenericNew((PyTypeObject *)state->Sub_type,
1477 NULL, NULL);
1478 if (!state->Sub_singleton) return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001479 state->Mult_type = make_type(state, "Mult", state->operator_type, NULL, 0,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001480 "Mult");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001481 if (!state->Mult_type) return 0;
1482 state->Mult_singleton = PyType_GenericNew((PyTypeObject *)state->Mult_type,
1483 NULL, NULL);
1484 if (!state->Mult_singleton) return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001485 state->MatMult_type = make_type(state, "MatMult", state->operator_type,
1486 NULL, 0,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001487 "MatMult");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001488 if (!state->MatMult_type) return 0;
1489 state->MatMult_singleton = PyType_GenericNew((PyTypeObject
1490 *)state->MatMult_type, NULL,
1491 NULL);
1492 if (!state->MatMult_singleton) return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001493 state->Div_type = make_type(state, "Div", state->operator_type, NULL, 0,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001494 "Div");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001495 if (!state->Div_type) return 0;
1496 state->Div_singleton = PyType_GenericNew((PyTypeObject *)state->Div_type,
1497 NULL, NULL);
1498 if (!state->Div_singleton) return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001499 state->Mod_type = make_type(state, "Mod", state->operator_type, NULL, 0,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001500 "Mod");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001501 if (!state->Mod_type) return 0;
1502 state->Mod_singleton = PyType_GenericNew((PyTypeObject *)state->Mod_type,
1503 NULL, NULL);
1504 if (!state->Mod_singleton) return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001505 state->Pow_type = make_type(state, "Pow", state->operator_type, NULL, 0,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001506 "Pow");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001507 if (!state->Pow_type) return 0;
1508 state->Pow_singleton = PyType_GenericNew((PyTypeObject *)state->Pow_type,
1509 NULL, NULL);
1510 if (!state->Pow_singleton) return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001511 state->LShift_type = make_type(state, "LShift", state->operator_type, NULL,
1512 0,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001513 "LShift");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001514 if (!state->LShift_type) return 0;
1515 state->LShift_singleton = PyType_GenericNew((PyTypeObject
1516 *)state->LShift_type, NULL,
1517 NULL);
1518 if (!state->LShift_singleton) return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001519 state->RShift_type = make_type(state, "RShift", state->operator_type, NULL,
1520 0,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001521 "RShift");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001522 if (!state->RShift_type) return 0;
1523 state->RShift_singleton = PyType_GenericNew((PyTypeObject
1524 *)state->RShift_type, NULL,
1525 NULL);
1526 if (!state->RShift_singleton) return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001527 state->BitOr_type = make_type(state, "BitOr", state->operator_type, NULL, 0,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001528 "BitOr");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001529 if (!state->BitOr_type) return 0;
1530 state->BitOr_singleton = PyType_GenericNew((PyTypeObject
1531 *)state->BitOr_type, NULL, NULL);
1532 if (!state->BitOr_singleton) return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001533 state->BitXor_type = make_type(state, "BitXor", state->operator_type, NULL,
1534 0,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001535 "BitXor");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001536 if (!state->BitXor_type) return 0;
1537 state->BitXor_singleton = PyType_GenericNew((PyTypeObject
1538 *)state->BitXor_type, NULL,
1539 NULL);
1540 if (!state->BitXor_singleton) return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001541 state->BitAnd_type = make_type(state, "BitAnd", state->operator_type, NULL,
1542 0,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001543 "BitAnd");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001544 if (!state->BitAnd_type) return 0;
1545 state->BitAnd_singleton = PyType_GenericNew((PyTypeObject
1546 *)state->BitAnd_type, NULL,
1547 NULL);
1548 if (!state->BitAnd_singleton) return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001549 state->FloorDiv_type = make_type(state, "FloorDiv", state->operator_type,
1550 NULL, 0,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001551 "FloorDiv");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001552 if (!state->FloorDiv_type) return 0;
1553 state->FloorDiv_singleton = PyType_GenericNew((PyTypeObject
1554 *)state->FloorDiv_type, NULL,
1555 NULL);
1556 if (!state->FloorDiv_singleton) return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001557 state->unaryop_type = make_type(state, "unaryop", state->AST_type, NULL, 0,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001558 "unaryop = Invert | Not | UAdd | USub");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001559 if (!state->unaryop_type) return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001560 if (!add_attributes(state, state->unaryop_type, NULL, 0)) return 0;
1561 state->Invert_type = make_type(state, "Invert", state->unaryop_type, NULL,
1562 0,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001563 "Invert");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001564 if (!state->Invert_type) return 0;
1565 state->Invert_singleton = PyType_GenericNew((PyTypeObject
1566 *)state->Invert_type, NULL,
1567 NULL);
1568 if (!state->Invert_singleton) return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001569 state->Not_type = make_type(state, "Not", state->unaryop_type, NULL, 0,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001570 "Not");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001571 if (!state->Not_type) return 0;
1572 state->Not_singleton = PyType_GenericNew((PyTypeObject *)state->Not_type,
1573 NULL, NULL);
1574 if (!state->Not_singleton) return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001575 state->UAdd_type = make_type(state, "UAdd", state->unaryop_type, NULL, 0,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001576 "UAdd");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001577 if (!state->UAdd_type) return 0;
1578 state->UAdd_singleton = PyType_GenericNew((PyTypeObject *)state->UAdd_type,
1579 NULL, NULL);
1580 if (!state->UAdd_singleton) return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001581 state->USub_type = make_type(state, "USub", state->unaryop_type, NULL, 0,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001582 "USub");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001583 if (!state->USub_type) return 0;
1584 state->USub_singleton = PyType_GenericNew((PyTypeObject *)state->USub_type,
1585 NULL, NULL);
1586 if (!state->USub_singleton) return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001587 state->cmpop_type = make_type(state, "cmpop", state->AST_type, NULL, 0,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001588 "cmpop = Eq | NotEq | Lt | LtE | Gt | GtE | Is | IsNot | In | NotIn");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001589 if (!state->cmpop_type) return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001590 if (!add_attributes(state, state->cmpop_type, NULL, 0)) return 0;
1591 state->Eq_type = make_type(state, "Eq", state->cmpop_type, NULL, 0,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001592 "Eq");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001593 if (!state->Eq_type) return 0;
1594 state->Eq_singleton = PyType_GenericNew((PyTypeObject *)state->Eq_type,
1595 NULL, NULL);
1596 if (!state->Eq_singleton) return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001597 state->NotEq_type = make_type(state, "NotEq", state->cmpop_type, NULL, 0,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001598 "NotEq");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001599 if (!state->NotEq_type) return 0;
1600 state->NotEq_singleton = PyType_GenericNew((PyTypeObject
1601 *)state->NotEq_type, NULL, NULL);
1602 if (!state->NotEq_singleton) return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001603 state->Lt_type = make_type(state, "Lt", state->cmpop_type, NULL, 0,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001604 "Lt");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001605 if (!state->Lt_type) return 0;
1606 state->Lt_singleton = PyType_GenericNew((PyTypeObject *)state->Lt_type,
1607 NULL, NULL);
1608 if (!state->Lt_singleton) return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001609 state->LtE_type = make_type(state, "LtE", state->cmpop_type, NULL, 0,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001610 "LtE");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001611 if (!state->LtE_type) return 0;
1612 state->LtE_singleton = PyType_GenericNew((PyTypeObject *)state->LtE_type,
1613 NULL, NULL);
1614 if (!state->LtE_singleton) return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001615 state->Gt_type = make_type(state, "Gt", state->cmpop_type, NULL, 0,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001616 "Gt");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001617 if (!state->Gt_type) return 0;
1618 state->Gt_singleton = PyType_GenericNew((PyTypeObject *)state->Gt_type,
1619 NULL, NULL);
1620 if (!state->Gt_singleton) return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001621 state->GtE_type = make_type(state, "GtE", state->cmpop_type, NULL, 0,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001622 "GtE");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001623 if (!state->GtE_type) return 0;
1624 state->GtE_singleton = PyType_GenericNew((PyTypeObject *)state->GtE_type,
1625 NULL, NULL);
1626 if (!state->GtE_singleton) return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001627 state->Is_type = make_type(state, "Is", state->cmpop_type, NULL, 0,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001628 "Is");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001629 if (!state->Is_type) return 0;
1630 state->Is_singleton = PyType_GenericNew((PyTypeObject *)state->Is_type,
1631 NULL, NULL);
1632 if (!state->Is_singleton) return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001633 state->IsNot_type = make_type(state, "IsNot", state->cmpop_type, NULL, 0,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001634 "IsNot");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001635 if (!state->IsNot_type) return 0;
1636 state->IsNot_singleton = PyType_GenericNew((PyTypeObject
1637 *)state->IsNot_type, NULL, NULL);
1638 if (!state->IsNot_singleton) return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001639 state->In_type = make_type(state, "In", state->cmpop_type, NULL, 0,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001640 "In");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001641 if (!state->In_type) return 0;
1642 state->In_singleton = PyType_GenericNew((PyTypeObject *)state->In_type,
1643 NULL, NULL);
1644 if (!state->In_singleton) return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001645 state->NotIn_type = make_type(state, "NotIn", state->cmpop_type, NULL, 0,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001646 "NotIn");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001647 if (!state->NotIn_type) return 0;
1648 state->NotIn_singleton = PyType_GenericNew((PyTypeObject
1649 *)state->NotIn_type, NULL, NULL);
1650 if (!state->NotIn_singleton) return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001651 state->comprehension_type = make_type(state, "comprehension",
1652 state->AST_type,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001653 comprehension_fields, 4,
1654 "comprehension(expr target, expr iter, expr* ifs, int is_async)");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001655 if (!state->comprehension_type) return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001656 if (!add_attributes(state, state->comprehension_type, NULL, 0)) return 0;
1657 state->excepthandler_type = make_type(state, "excepthandler",
1658 state->AST_type, NULL, 0,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001659 "excepthandler = ExceptHandler(expr? type, identifier? name, stmt* body)");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001660 if (!state->excepthandler_type) return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001661 if (!add_attributes(state, state->excepthandler_type,
1662 excepthandler_attributes, 4)) return 0;
Serhiy Storchakab7e95252020-03-10 00:07:47 +02001663 if (PyObject_SetAttr(state->excepthandler_type, state->end_lineno, Py_None)
1664 == -1)
1665 return 0;
1666 if (PyObject_SetAttr(state->excepthandler_type, state->end_col_offset,
1667 Py_None) == -1)
1668 return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001669 state->ExceptHandler_type = make_type(state, "ExceptHandler",
Dino Viehlandac46eb42019-09-11 10:16:34 -07001670 state->excepthandler_type,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001671 ExceptHandler_fields, 3,
1672 "ExceptHandler(expr? type, identifier? name, stmt* body)");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001673 if (!state->ExceptHandler_type) return 0;
Serhiy Storchakab7e95252020-03-10 00:07:47 +02001674 if (PyObject_SetAttr(state->ExceptHandler_type, state->type, Py_None) == -1)
1675 return 0;
1676 if (PyObject_SetAttr(state->ExceptHandler_type, state->name, Py_None) == -1)
1677 return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001678 state->arguments_type = make_type(state, "arguments", state->AST_type,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001679 arguments_fields, 7,
1680 "arguments(arg* posonlyargs, arg* args, arg? vararg, arg* kwonlyargs, expr* kw_defaults, arg? kwarg, expr* defaults)");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001681 if (!state->arguments_type) return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001682 if (!add_attributes(state, state->arguments_type, NULL, 0)) return 0;
Serhiy Storchakab7e95252020-03-10 00:07:47 +02001683 if (PyObject_SetAttr(state->arguments_type, state->vararg, Py_None) == -1)
1684 return 0;
1685 if (PyObject_SetAttr(state->arguments_type, state->kwarg, Py_None) == -1)
1686 return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001687 state->arg_type = make_type(state, "arg", state->AST_type, arg_fields, 3,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001688 "arg(identifier arg, expr? annotation, string? type_comment)");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001689 if (!state->arg_type) return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001690 if (!add_attributes(state, state->arg_type, arg_attributes, 4)) return 0;
Serhiy Storchakab7e95252020-03-10 00:07:47 +02001691 if (PyObject_SetAttr(state->arg_type, state->annotation, Py_None) == -1)
1692 return 0;
1693 if (PyObject_SetAttr(state->arg_type, state->type_comment, Py_None) == -1)
1694 return 0;
1695 if (PyObject_SetAttr(state->arg_type, state->end_lineno, Py_None) == -1)
1696 return 0;
1697 if (PyObject_SetAttr(state->arg_type, state->end_col_offset, Py_None) == -1)
1698 return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001699 state->keyword_type = make_type(state, "keyword", state->AST_type,
1700 keyword_fields, 2,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001701 "keyword(identifier? arg, expr value)");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001702 if (!state->keyword_type) return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001703 if (!add_attributes(state, state->keyword_type, keyword_attributes, 4))
1704 return 0;
Serhiy Storchakab7e95252020-03-10 00:07:47 +02001705 if (PyObject_SetAttr(state->keyword_type, state->arg, Py_None) == -1)
1706 return 0;
Pablo Galindo168660b2020-04-02 00:47:39 +01001707 if (PyObject_SetAttr(state->keyword_type, state->end_lineno, Py_None) == -1)
1708 return 0;
1709 if (PyObject_SetAttr(state->keyword_type, state->end_col_offset, Py_None)
1710 == -1)
1711 return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001712 state->alias_type = make_type(state, "alias", state->AST_type,
1713 alias_fields, 2,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001714 "alias(identifier name, identifier? asname)");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001715 if (!state->alias_type) return 0;
Matthew Suozzo75a06f02021-04-10 16:56:28 -04001716 if (!add_attributes(state, state->alias_type, alias_attributes, 4)) return
1717 0;
Serhiy Storchakab7e95252020-03-10 00:07:47 +02001718 if (PyObject_SetAttr(state->alias_type, state->asname, Py_None) == -1)
1719 return 0;
Matthew Suozzo75a06f02021-04-10 16:56:28 -04001720 if (PyObject_SetAttr(state->alias_type, state->end_lineno, Py_None) == -1)
1721 return 0;
1722 if (PyObject_SetAttr(state->alias_type, state->end_col_offset, Py_None) ==
1723 -1)
1724 return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001725 state->withitem_type = make_type(state, "withitem", state->AST_type,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001726 withitem_fields, 2,
1727 "withitem(expr context_expr, expr? optional_vars)");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001728 if (!state->withitem_type) return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001729 if (!add_attributes(state, state->withitem_type, NULL, 0)) return 0;
Serhiy Storchakab7e95252020-03-10 00:07:47 +02001730 if (PyObject_SetAttr(state->withitem_type, state->optional_vars, Py_None)
1731 == -1)
1732 return 0;
Brandt Bucher145bf262021-02-26 14:51:55 -08001733 state->match_case_type = make_type(state, "match_case", state->AST_type,
1734 match_case_fields, 3,
1735 "match_case(expr pattern, expr? guard, stmt* body)");
1736 if (!state->match_case_type) return 0;
1737 if (!add_attributes(state, state->match_case_type, NULL, 0)) return 0;
1738 if (PyObject_SetAttr(state->match_case_type, state->guard, Py_None) == -1)
1739 return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001740 state->type_ignore_type = make_type(state, "type_ignore", state->AST_type,
1741 NULL, 0,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001742 "type_ignore = TypeIgnore(int lineno, string tag)");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001743 if (!state->type_ignore_type) return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001744 if (!add_attributes(state, state->type_ignore_type, NULL, 0)) return 0;
1745 state->TypeIgnore_type = make_type(state, "TypeIgnore",
1746 state->type_ignore_type,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001747 TypeIgnore_fields, 2,
1748 "TypeIgnore(int lineno, string tag)");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001749 if (!state->TypeIgnore_type) return 0;
Victor Stinnerfd957c12020-11-03 18:07:15 +01001750
Dino Viehlandac46eb42019-09-11 10:16:34 -07001751 state->initialized = 1;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02001752 return 1;
Martin v. Löwisbd260da2006-02-26 19:42:26 +00001753}
Neal Norwitz7b5a6042005-11-13 19:14:20 +00001754
Victor Stinner5cf47822020-11-02 22:03:28 +01001755static int obj2ast_mod(struct ast_state *state, PyObject* obj, mod_ty* out,
Victor Stinner74419f02020-07-03 11:35:37 +02001756 PyArena* arena);
Victor Stinner5cf47822020-11-02 22:03:28 +01001757static int obj2ast_stmt(struct ast_state *state, PyObject* obj, stmt_ty* out,
Victor Stinner74419f02020-07-03 11:35:37 +02001758 PyArena* arena);
Victor Stinner5cf47822020-11-02 22:03:28 +01001759static int obj2ast_expr(struct ast_state *state, PyObject* obj, expr_ty* out,
Victor Stinner74419f02020-07-03 11:35:37 +02001760 PyArena* arena);
Victor Stinner5cf47822020-11-02 22:03:28 +01001761static int obj2ast_expr_context(struct ast_state *state, PyObject* obj,
Victor Stinner74419f02020-07-03 11:35:37 +02001762 expr_context_ty* out, PyArena* arena);
Victor Stinner5cf47822020-11-02 22:03:28 +01001763static int obj2ast_boolop(struct ast_state *state, PyObject* obj, boolop_ty*
1764 out, PyArena* arena);
1765static int obj2ast_operator(struct ast_state *state, PyObject* obj,
1766 operator_ty* out, PyArena* arena);
1767static int obj2ast_unaryop(struct ast_state *state, PyObject* obj, unaryop_ty*
Victor Stinner74419f02020-07-03 11:35:37 +02001768 out, PyArena* arena);
Victor Stinner5cf47822020-11-02 22:03:28 +01001769static int obj2ast_cmpop(struct ast_state *state, PyObject* obj, cmpop_ty* out,
Victor Stinner74419f02020-07-03 11:35:37 +02001770 PyArena* arena);
Victor Stinner5cf47822020-11-02 22:03:28 +01001771static int obj2ast_comprehension(struct ast_state *state, PyObject* obj,
Victor Stinner74419f02020-07-03 11:35:37 +02001772 comprehension_ty* out, PyArena* arena);
Victor Stinner5cf47822020-11-02 22:03:28 +01001773static int obj2ast_excepthandler(struct ast_state *state, PyObject* obj,
Victor Stinner74419f02020-07-03 11:35:37 +02001774 excepthandler_ty* out, PyArena* arena);
Victor Stinner5cf47822020-11-02 22:03:28 +01001775static int obj2ast_arguments(struct ast_state *state, PyObject* obj,
Victor Stinner74419f02020-07-03 11:35:37 +02001776 arguments_ty* out, PyArena* arena);
Victor Stinner5cf47822020-11-02 22:03:28 +01001777static int obj2ast_arg(struct ast_state *state, PyObject* obj, arg_ty* out,
Victor Stinner74419f02020-07-03 11:35:37 +02001778 PyArena* arena);
Victor Stinner5cf47822020-11-02 22:03:28 +01001779static int obj2ast_keyword(struct ast_state *state, PyObject* obj, keyword_ty*
Victor Stinner74419f02020-07-03 11:35:37 +02001780 out, PyArena* arena);
Victor Stinner5cf47822020-11-02 22:03:28 +01001781static int obj2ast_alias(struct ast_state *state, PyObject* obj, alias_ty* out,
Victor Stinner74419f02020-07-03 11:35:37 +02001782 PyArena* arena);
Victor Stinner5cf47822020-11-02 22:03:28 +01001783static int obj2ast_withitem(struct ast_state *state, PyObject* obj,
1784 withitem_ty* out, PyArena* arena);
Brandt Bucher145bf262021-02-26 14:51:55 -08001785static int obj2ast_match_case(struct ast_state *state, PyObject* obj,
1786 match_case_ty* out, PyArena* arena);
Victor Stinner5cf47822020-11-02 22:03:28 +01001787static int obj2ast_type_ignore(struct ast_state *state, PyObject* obj,
Victor Stinner74419f02020-07-03 11:35:37 +02001788 type_ignore_ty* out, PyArena* arena);
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00001789
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001790mod_ty
Victor Stinnerd27f8d22021-04-07 21:34:22 +02001791_PyAST_Module(asdl_stmt_seq * body, asdl_type_ignore_seq * type_ignores,
1792 PyArena *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001793{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02001794 mod_ty p;
Victor Stinner8370e072021-03-24 02:23:01 +01001795 p = (mod_ty)_PyArena_Malloc(arena, sizeof(*p));
Victor Stinnerce72e1c2013-07-27 00:00:36 +02001796 if (!p)
1797 return NULL;
1798 p->kind = Module_kind;
1799 p->v.Module.body = body;
Guido van Rossumdcfcd142019-01-31 03:40:27 -08001800 p->v.Module.type_ignores = type_ignores;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02001801 return p;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001802}
1803
1804mod_ty
Victor Stinnerd27f8d22021-04-07 21:34:22 +02001805_PyAST_Interactive(asdl_stmt_seq * body, PyArena *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001806{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02001807 mod_ty p;
Victor Stinner8370e072021-03-24 02:23:01 +01001808 p = (mod_ty)_PyArena_Malloc(arena, sizeof(*p));
Victor Stinnerce72e1c2013-07-27 00:00:36 +02001809 if (!p)
1810 return NULL;
1811 p->kind = Interactive_kind;
1812 p->v.Interactive.body = body;
1813 return p;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001814}
1815
1816mod_ty
Victor Stinnerd27f8d22021-04-07 21:34:22 +02001817_PyAST_Expression(expr_ty body, PyArena *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001818{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02001819 mod_ty p;
1820 if (!body) {
1821 PyErr_SetString(PyExc_ValueError,
Batuhan Taskaya091951a2020-05-06 17:29:32 +03001822 "field 'body' is required for Expression");
Victor Stinnerce72e1c2013-07-27 00:00:36 +02001823 return NULL;
1824 }
Victor Stinner8370e072021-03-24 02:23:01 +01001825 p = (mod_ty)_PyArena_Malloc(arena, sizeof(*p));
Victor Stinnerce72e1c2013-07-27 00:00:36 +02001826 if (!p)
1827 return NULL;
1828 p->kind = Expression_kind;
1829 p->v.Expression.body = body;
1830 return p;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001831}
1832
1833mod_ty
Victor Stinnerd27f8d22021-04-07 21:34:22 +02001834_PyAST_FunctionType(asdl_expr_seq * argtypes, expr_ty returns, PyArena *arena)
Guido van Rossumdcfcd142019-01-31 03:40:27 -08001835{
1836 mod_ty p;
1837 if (!returns) {
1838 PyErr_SetString(PyExc_ValueError,
Batuhan Taskaya091951a2020-05-06 17:29:32 +03001839 "field 'returns' is required for FunctionType");
Guido van Rossumdcfcd142019-01-31 03:40:27 -08001840 return NULL;
1841 }
Victor Stinner8370e072021-03-24 02:23:01 +01001842 p = (mod_ty)_PyArena_Malloc(arena, sizeof(*p));
Guido van Rossumdcfcd142019-01-31 03:40:27 -08001843 if (!p)
1844 return NULL;
1845 p->kind = FunctionType_kind;
1846 p->v.FunctionType.argtypes = argtypes;
1847 p->v.FunctionType.returns = returns;
1848 return p;
1849}
1850
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001851stmt_ty
Victor Stinnerd27f8d22021-04-07 21:34:22 +02001852_PyAST_FunctionDef(identifier name, arguments_ty args, asdl_stmt_seq * body,
1853 asdl_expr_seq * decorator_list, expr_ty returns, string
1854 type_comment, int lineno, int col_offset, int end_lineno,
1855 int end_col_offset, PyArena *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001856{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02001857 stmt_ty p;
1858 if (!name) {
1859 PyErr_SetString(PyExc_ValueError,
Batuhan Taskaya091951a2020-05-06 17:29:32 +03001860 "field 'name' is required for FunctionDef");
Victor Stinnerce72e1c2013-07-27 00:00:36 +02001861 return NULL;
1862 }
1863 if (!args) {
1864 PyErr_SetString(PyExc_ValueError,
Batuhan Taskaya091951a2020-05-06 17:29:32 +03001865 "field 'args' is required for FunctionDef");
Victor Stinnerce72e1c2013-07-27 00:00:36 +02001866 return NULL;
1867 }
Victor Stinner8370e072021-03-24 02:23:01 +01001868 p = (stmt_ty)_PyArena_Malloc(arena, sizeof(*p));
Victor Stinnerce72e1c2013-07-27 00:00:36 +02001869 if (!p)
1870 return NULL;
1871 p->kind = FunctionDef_kind;
1872 p->v.FunctionDef.name = name;
1873 p->v.FunctionDef.args = args;
1874 p->v.FunctionDef.body = body;
1875 p->v.FunctionDef.decorator_list = decorator_list;
1876 p->v.FunctionDef.returns = returns;
Guido van Rossumdcfcd142019-01-31 03:40:27 -08001877 p->v.FunctionDef.type_comment = type_comment;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02001878 p->lineno = lineno;
1879 p->col_offset = col_offset;
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00001880 p->end_lineno = end_lineno;
1881 p->end_col_offset = end_col_offset;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02001882 return p;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001883}
1884
1885stmt_ty
Victor Stinnerd27f8d22021-04-07 21:34:22 +02001886_PyAST_AsyncFunctionDef(identifier name, arguments_ty args, asdl_stmt_seq *
1887 body, asdl_expr_seq * decorator_list, expr_ty returns,
1888 string type_comment, int lineno, int col_offset, int
1889 end_lineno, int end_col_offset, PyArena *arena)
Yury Selivanov75445082015-05-11 22:57:16 -04001890{
1891 stmt_ty p;
1892 if (!name) {
1893 PyErr_SetString(PyExc_ValueError,
Batuhan Taskaya091951a2020-05-06 17:29:32 +03001894 "field 'name' is required for AsyncFunctionDef");
Yury Selivanov75445082015-05-11 22:57:16 -04001895 return NULL;
1896 }
1897 if (!args) {
1898 PyErr_SetString(PyExc_ValueError,
Batuhan Taskaya091951a2020-05-06 17:29:32 +03001899 "field 'args' is required for AsyncFunctionDef");
Yury Selivanov75445082015-05-11 22:57:16 -04001900 return NULL;
1901 }
Victor Stinner8370e072021-03-24 02:23:01 +01001902 p = (stmt_ty)_PyArena_Malloc(arena, sizeof(*p));
Yury Selivanov75445082015-05-11 22:57:16 -04001903 if (!p)
1904 return NULL;
1905 p->kind = AsyncFunctionDef_kind;
1906 p->v.AsyncFunctionDef.name = name;
1907 p->v.AsyncFunctionDef.args = args;
1908 p->v.AsyncFunctionDef.body = body;
1909 p->v.AsyncFunctionDef.decorator_list = decorator_list;
1910 p->v.AsyncFunctionDef.returns = returns;
Guido van Rossumdcfcd142019-01-31 03:40:27 -08001911 p->v.AsyncFunctionDef.type_comment = type_comment;
Yury Selivanov75445082015-05-11 22:57:16 -04001912 p->lineno = lineno;
1913 p->col_offset = col_offset;
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00001914 p->end_lineno = end_lineno;
1915 p->end_col_offset = end_col_offset;
Yury Selivanov75445082015-05-11 22:57:16 -04001916 return p;
1917}
1918
1919stmt_ty
Victor Stinnerd27f8d22021-04-07 21:34:22 +02001920_PyAST_ClassDef(identifier name, asdl_expr_seq * bases, asdl_keyword_seq *
1921 keywords, asdl_stmt_seq * body, asdl_expr_seq * decorator_list,
1922 int lineno, int col_offset, int end_lineno, int end_col_offset,
1923 PyArena *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001924{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02001925 stmt_ty p;
1926 if (!name) {
1927 PyErr_SetString(PyExc_ValueError,
Batuhan Taskaya091951a2020-05-06 17:29:32 +03001928 "field 'name' is required for ClassDef");
Victor Stinnerce72e1c2013-07-27 00:00:36 +02001929 return NULL;
1930 }
Victor Stinner8370e072021-03-24 02:23:01 +01001931 p = (stmt_ty)_PyArena_Malloc(arena, sizeof(*p));
Victor Stinnerce72e1c2013-07-27 00:00:36 +02001932 if (!p)
1933 return NULL;
1934 p->kind = ClassDef_kind;
1935 p->v.ClassDef.name = name;
1936 p->v.ClassDef.bases = bases;
1937 p->v.ClassDef.keywords = keywords;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02001938 p->v.ClassDef.body = body;
1939 p->v.ClassDef.decorator_list = decorator_list;
1940 p->lineno = lineno;
1941 p->col_offset = col_offset;
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00001942 p->end_lineno = end_lineno;
1943 p->end_col_offset = end_col_offset;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02001944 return p;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001945}
1946
1947stmt_ty
Victor Stinnerd27f8d22021-04-07 21:34:22 +02001948_PyAST_Return(expr_ty value, int lineno, int col_offset, int end_lineno, int
1949 end_col_offset, PyArena *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001950{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02001951 stmt_ty p;
Victor Stinner8370e072021-03-24 02:23:01 +01001952 p = (stmt_ty)_PyArena_Malloc(arena, sizeof(*p));
Victor Stinnerce72e1c2013-07-27 00:00:36 +02001953 if (!p)
1954 return NULL;
1955 p->kind = Return_kind;
1956 p->v.Return.value = value;
1957 p->lineno = lineno;
1958 p->col_offset = col_offset;
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00001959 p->end_lineno = end_lineno;
1960 p->end_col_offset = end_col_offset;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02001961 return p;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001962}
1963
1964stmt_ty
Victor Stinnerd27f8d22021-04-07 21:34:22 +02001965_PyAST_Delete(asdl_expr_seq * targets, int lineno, int col_offset, int
1966 end_lineno, int end_col_offset, PyArena *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001967{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02001968 stmt_ty p;
Victor Stinner8370e072021-03-24 02:23:01 +01001969 p = (stmt_ty)_PyArena_Malloc(arena, sizeof(*p));
Victor Stinnerce72e1c2013-07-27 00:00:36 +02001970 if (!p)
1971 return NULL;
1972 p->kind = Delete_kind;
1973 p->v.Delete.targets = targets;
1974 p->lineno = lineno;
1975 p->col_offset = col_offset;
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00001976 p->end_lineno = end_lineno;
1977 p->end_col_offset = end_col_offset;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02001978 return p;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001979}
1980
1981stmt_ty
Victor Stinnerd27f8d22021-04-07 21:34:22 +02001982_PyAST_Assign(asdl_expr_seq * targets, expr_ty value, string type_comment, int
1983 lineno, int col_offset, int end_lineno, int end_col_offset,
1984 PyArena *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001985{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02001986 stmt_ty p;
1987 if (!value) {
1988 PyErr_SetString(PyExc_ValueError,
Batuhan Taskaya091951a2020-05-06 17:29:32 +03001989 "field 'value' is required for Assign");
Victor Stinnerce72e1c2013-07-27 00:00:36 +02001990 return NULL;
1991 }
Victor Stinner8370e072021-03-24 02:23:01 +01001992 p = (stmt_ty)_PyArena_Malloc(arena, sizeof(*p));
Victor Stinnerce72e1c2013-07-27 00:00:36 +02001993 if (!p)
1994 return NULL;
1995 p->kind = Assign_kind;
1996 p->v.Assign.targets = targets;
1997 p->v.Assign.value = value;
Guido van Rossumdcfcd142019-01-31 03:40:27 -08001998 p->v.Assign.type_comment = type_comment;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02001999 p->lineno = lineno;
2000 p->col_offset = col_offset;
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00002001 p->end_lineno = end_lineno;
2002 p->end_col_offset = end_col_offset;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002003 return p;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002004}
2005
2006stmt_ty
Victor Stinnerd27f8d22021-04-07 21:34:22 +02002007_PyAST_AugAssign(expr_ty target, operator_ty op, expr_ty value, int lineno, int
2008 col_offset, int end_lineno, int end_col_offset, PyArena *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002009{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002010 stmt_ty p;
2011 if (!target) {
2012 PyErr_SetString(PyExc_ValueError,
Batuhan Taskaya091951a2020-05-06 17:29:32 +03002013 "field 'target' is required for AugAssign");
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002014 return NULL;
2015 }
2016 if (!op) {
2017 PyErr_SetString(PyExc_ValueError,
Batuhan Taskaya091951a2020-05-06 17:29:32 +03002018 "field 'op' is required for AugAssign");
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002019 return NULL;
2020 }
2021 if (!value) {
2022 PyErr_SetString(PyExc_ValueError,
Batuhan Taskaya091951a2020-05-06 17:29:32 +03002023 "field 'value' is required for AugAssign");
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002024 return NULL;
2025 }
Victor Stinner8370e072021-03-24 02:23:01 +01002026 p = (stmt_ty)_PyArena_Malloc(arena, sizeof(*p));
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002027 if (!p)
2028 return NULL;
2029 p->kind = AugAssign_kind;
2030 p->v.AugAssign.target = target;
2031 p->v.AugAssign.op = op;
2032 p->v.AugAssign.value = value;
2033 p->lineno = lineno;
2034 p->col_offset = col_offset;
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00002035 p->end_lineno = end_lineno;
2036 p->end_col_offset = end_col_offset;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002037 return p;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002038}
2039
2040stmt_ty
Victor Stinnerd27f8d22021-04-07 21:34:22 +02002041_PyAST_AnnAssign(expr_ty target, expr_ty annotation, expr_ty value, int simple,
2042 int lineno, int col_offset, int end_lineno, int
2043 end_col_offset, PyArena *arena)
Yury Selivanovf8cb8a12016-09-08 20:50:03 -07002044{
2045 stmt_ty p;
2046 if (!target) {
2047 PyErr_SetString(PyExc_ValueError,
Batuhan Taskaya091951a2020-05-06 17:29:32 +03002048 "field 'target' is required for AnnAssign");
Yury Selivanovf8cb8a12016-09-08 20:50:03 -07002049 return NULL;
2050 }
2051 if (!annotation) {
2052 PyErr_SetString(PyExc_ValueError,
Batuhan Taskaya091951a2020-05-06 17:29:32 +03002053 "field 'annotation' is required for AnnAssign");
Yury Selivanovf8cb8a12016-09-08 20:50:03 -07002054 return NULL;
2055 }
Victor Stinner8370e072021-03-24 02:23:01 +01002056 p = (stmt_ty)_PyArena_Malloc(arena, sizeof(*p));
Yury Selivanovf8cb8a12016-09-08 20:50:03 -07002057 if (!p)
2058 return NULL;
2059 p->kind = AnnAssign_kind;
2060 p->v.AnnAssign.target = target;
2061 p->v.AnnAssign.annotation = annotation;
2062 p->v.AnnAssign.value = value;
2063 p->v.AnnAssign.simple = simple;
2064 p->lineno = lineno;
2065 p->col_offset = col_offset;
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00002066 p->end_lineno = end_lineno;
2067 p->end_col_offset = end_col_offset;
Yury Selivanovf8cb8a12016-09-08 20:50:03 -07002068 return p;
2069}
2070
2071stmt_ty
Victor Stinnerd27f8d22021-04-07 21:34:22 +02002072_PyAST_For(expr_ty target, expr_ty iter, asdl_stmt_seq * body, asdl_stmt_seq *
2073 orelse, string type_comment, int lineno, int col_offset, int
2074 end_lineno, int end_col_offset, PyArena *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002075{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002076 stmt_ty p;
2077 if (!target) {
2078 PyErr_SetString(PyExc_ValueError,
Batuhan Taskaya091951a2020-05-06 17:29:32 +03002079 "field 'target' is required for For");
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002080 return NULL;
2081 }
2082 if (!iter) {
2083 PyErr_SetString(PyExc_ValueError,
Batuhan Taskaya091951a2020-05-06 17:29:32 +03002084 "field 'iter' is required for For");
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002085 return NULL;
2086 }
Victor Stinner8370e072021-03-24 02:23:01 +01002087 p = (stmt_ty)_PyArena_Malloc(arena, sizeof(*p));
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002088 if (!p)
2089 return NULL;
2090 p->kind = For_kind;
2091 p->v.For.target = target;
2092 p->v.For.iter = iter;
2093 p->v.For.body = body;
2094 p->v.For.orelse = orelse;
Guido van Rossumdcfcd142019-01-31 03:40:27 -08002095 p->v.For.type_comment = type_comment;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002096 p->lineno = lineno;
2097 p->col_offset = col_offset;
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00002098 p->end_lineno = end_lineno;
2099 p->end_col_offset = end_col_offset;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002100 return p;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002101}
2102
2103stmt_ty
Victor Stinnerd27f8d22021-04-07 21:34:22 +02002104_PyAST_AsyncFor(expr_ty target, expr_ty iter, asdl_stmt_seq * body,
2105 asdl_stmt_seq * orelse, string type_comment, int lineno, int
2106 col_offset, int end_lineno, int end_col_offset, PyArena *arena)
Yury Selivanov75445082015-05-11 22:57:16 -04002107{
2108 stmt_ty p;
2109 if (!target) {
2110 PyErr_SetString(PyExc_ValueError,
Batuhan Taskaya091951a2020-05-06 17:29:32 +03002111 "field 'target' is required for AsyncFor");
Yury Selivanov75445082015-05-11 22:57:16 -04002112 return NULL;
2113 }
2114 if (!iter) {
2115 PyErr_SetString(PyExc_ValueError,
Batuhan Taskaya091951a2020-05-06 17:29:32 +03002116 "field 'iter' is required for AsyncFor");
Yury Selivanov75445082015-05-11 22:57:16 -04002117 return NULL;
2118 }
Victor Stinner8370e072021-03-24 02:23:01 +01002119 p = (stmt_ty)_PyArena_Malloc(arena, sizeof(*p));
Yury Selivanov75445082015-05-11 22:57:16 -04002120 if (!p)
2121 return NULL;
2122 p->kind = AsyncFor_kind;
2123 p->v.AsyncFor.target = target;
2124 p->v.AsyncFor.iter = iter;
2125 p->v.AsyncFor.body = body;
2126 p->v.AsyncFor.orelse = orelse;
Guido van Rossumdcfcd142019-01-31 03:40:27 -08002127 p->v.AsyncFor.type_comment = type_comment;
Yury Selivanov75445082015-05-11 22:57:16 -04002128 p->lineno = lineno;
2129 p->col_offset = col_offset;
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00002130 p->end_lineno = end_lineno;
2131 p->end_col_offset = end_col_offset;
Yury Selivanov75445082015-05-11 22:57:16 -04002132 return p;
2133}
2134
2135stmt_ty
Victor Stinnerd27f8d22021-04-07 21:34:22 +02002136_PyAST_While(expr_ty test, asdl_stmt_seq * body, asdl_stmt_seq * orelse, int
2137 lineno, int col_offset, int end_lineno, int end_col_offset,
2138 PyArena *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002139{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002140 stmt_ty p;
2141 if (!test) {
2142 PyErr_SetString(PyExc_ValueError,
Batuhan Taskaya091951a2020-05-06 17:29:32 +03002143 "field 'test' is required for While");
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002144 return NULL;
2145 }
Victor Stinner8370e072021-03-24 02:23:01 +01002146 p = (stmt_ty)_PyArena_Malloc(arena, sizeof(*p));
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002147 if (!p)
2148 return NULL;
2149 p->kind = While_kind;
2150 p->v.While.test = test;
2151 p->v.While.body = body;
2152 p->v.While.orelse = orelse;
2153 p->lineno = lineno;
2154 p->col_offset = col_offset;
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00002155 p->end_lineno = end_lineno;
2156 p->end_col_offset = end_col_offset;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002157 return p;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002158}
2159
2160stmt_ty
Victor Stinnerd27f8d22021-04-07 21:34:22 +02002161_PyAST_If(expr_ty test, asdl_stmt_seq * body, asdl_stmt_seq * orelse, int
2162 lineno, int col_offset, int end_lineno, int end_col_offset, PyArena
2163 *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002164{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002165 stmt_ty p;
2166 if (!test) {
2167 PyErr_SetString(PyExc_ValueError,
Batuhan Taskaya091951a2020-05-06 17:29:32 +03002168 "field 'test' is required for If");
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002169 return NULL;
2170 }
Victor Stinner8370e072021-03-24 02:23:01 +01002171 p = (stmt_ty)_PyArena_Malloc(arena, sizeof(*p));
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002172 if (!p)
2173 return NULL;
2174 p->kind = If_kind;
2175 p->v.If.test = test;
2176 p->v.If.body = body;
2177 p->v.If.orelse = orelse;
2178 p->lineno = lineno;
2179 p->col_offset = col_offset;
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00002180 p->end_lineno = end_lineno;
2181 p->end_col_offset = end_col_offset;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002182 return p;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002183}
2184
2185stmt_ty
Victor Stinnerd27f8d22021-04-07 21:34:22 +02002186_PyAST_With(asdl_withitem_seq * items, asdl_stmt_seq * body, string
2187 type_comment, int lineno, int col_offset, int end_lineno, int
2188 end_col_offset, PyArena *arena)
Guido van Rossumc2e20742006-02-27 22:32:47 +00002189{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002190 stmt_ty p;
Victor Stinner8370e072021-03-24 02:23:01 +01002191 p = (stmt_ty)_PyArena_Malloc(arena, sizeof(*p));
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002192 if (!p)
2193 return NULL;
2194 p->kind = With_kind;
2195 p->v.With.items = items;
2196 p->v.With.body = body;
Guido van Rossumdcfcd142019-01-31 03:40:27 -08002197 p->v.With.type_comment = type_comment;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002198 p->lineno = lineno;
2199 p->col_offset = col_offset;
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00002200 p->end_lineno = end_lineno;
2201 p->end_col_offset = end_col_offset;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002202 return p;
Guido van Rossumc2e20742006-02-27 22:32:47 +00002203}
2204
2205stmt_ty
Victor Stinnerd27f8d22021-04-07 21:34:22 +02002206_PyAST_AsyncWith(asdl_withitem_seq * items, asdl_stmt_seq * body, string
2207 type_comment, int lineno, int col_offset, int end_lineno, int
2208 end_col_offset, PyArena *arena)
Yury Selivanov75445082015-05-11 22:57:16 -04002209{
2210 stmt_ty p;
Victor Stinner8370e072021-03-24 02:23:01 +01002211 p = (stmt_ty)_PyArena_Malloc(arena, sizeof(*p));
Yury Selivanov75445082015-05-11 22:57:16 -04002212 if (!p)
2213 return NULL;
2214 p->kind = AsyncWith_kind;
2215 p->v.AsyncWith.items = items;
2216 p->v.AsyncWith.body = body;
Guido van Rossumdcfcd142019-01-31 03:40:27 -08002217 p->v.AsyncWith.type_comment = type_comment;
Yury Selivanov75445082015-05-11 22:57:16 -04002218 p->lineno = lineno;
2219 p->col_offset = col_offset;
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00002220 p->end_lineno = end_lineno;
2221 p->end_col_offset = end_col_offset;
Yury Selivanov75445082015-05-11 22:57:16 -04002222 return p;
2223}
2224
2225stmt_ty
Victor Stinnerd27f8d22021-04-07 21:34:22 +02002226_PyAST_Match(expr_ty subject, asdl_match_case_seq * cases, int lineno, int
2227 col_offset, int end_lineno, int end_col_offset, PyArena *arena)
Brandt Bucher145bf262021-02-26 14:51:55 -08002228{
2229 stmt_ty p;
2230 if (!subject) {
2231 PyErr_SetString(PyExc_ValueError,
2232 "field 'subject' is required for Match");
2233 return NULL;
2234 }
Victor Stinner8370e072021-03-24 02:23:01 +01002235 p = (stmt_ty)_PyArena_Malloc(arena, sizeof(*p));
Brandt Bucher145bf262021-02-26 14:51:55 -08002236 if (!p)
2237 return NULL;
2238 p->kind = Match_kind;
2239 p->v.Match.subject = subject;
2240 p->v.Match.cases = cases;
2241 p->lineno = lineno;
2242 p->col_offset = col_offset;
2243 p->end_lineno = end_lineno;
2244 p->end_col_offset = end_col_offset;
2245 return p;
2246}
2247
2248stmt_ty
Victor Stinnerd27f8d22021-04-07 21:34:22 +02002249_PyAST_Raise(expr_ty exc, expr_ty cause, int lineno, int col_offset, int
2250 end_lineno, int end_col_offset, PyArena *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002251{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002252 stmt_ty p;
Victor Stinner8370e072021-03-24 02:23:01 +01002253 p = (stmt_ty)_PyArena_Malloc(arena, sizeof(*p));
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002254 if (!p)
2255 return NULL;
2256 p->kind = Raise_kind;
2257 p->v.Raise.exc = exc;
2258 p->v.Raise.cause = cause;
2259 p->lineno = lineno;
2260 p->col_offset = col_offset;
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00002261 p->end_lineno = end_lineno;
2262 p->end_col_offset = end_col_offset;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002263 return p;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002264}
2265
2266stmt_ty
Victor Stinnerd27f8d22021-04-07 21:34:22 +02002267_PyAST_Try(asdl_stmt_seq * body, asdl_excepthandler_seq * handlers,
2268 asdl_stmt_seq * orelse, asdl_stmt_seq * finalbody, int lineno, int
2269 col_offset, int end_lineno, int end_col_offset, PyArena *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002270{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002271 stmt_ty p;
Victor Stinner8370e072021-03-24 02:23:01 +01002272 p = (stmt_ty)_PyArena_Malloc(arena, sizeof(*p));
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002273 if (!p)
2274 return NULL;
2275 p->kind = Try_kind;
2276 p->v.Try.body = body;
2277 p->v.Try.handlers = handlers;
2278 p->v.Try.orelse = orelse;
2279 p->v.Try.finalbody = finalbody;
2280 p->lineno = lineno;
2281 p->col_offset = col_offset;
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00002282 p->end_lineno = end_lineno;
2283 p->end_col_offset = end_col_offset;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002284 return p;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002285}
2286
2287stmt_ty
Victor Stinnerd27f8d22021-04-07 21:34:22 +02002288_PyAST_Assert(expr_ty test, expr_ty msg, int lineno, int col_offset, int
2289 end_lineno, int end_col_offset, PyArena *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002290{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002291 stmt_ty p;
2292 if (!test) {
2293 PyErr_SetString(PyExc_ValueError,
Batuhan Taskaya091951a2020-05-06 17:29:32 +03002294 "field 'test' is required for Assert");
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002295 return NULL;
2296 }
Victor Stinner8370e072021-03-24 02:23:01 +01002297 p = (stmt_ty)_PyArena_Malloc(arena, sizeof(*p));
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002298 if (!p)
2299 return NULL;
2300 p->kind = Assert_kind;
2301 p->v.Assert.test = test;
2302 p->v.Assert.msg = msg;
2303 p->lineno = lineno;
2304 p->col_offset = col_offset;
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00002305 p->end_lineno = end_lineno;
2306 p->end_col_offset = end_col_offset;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002307 return p;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002308}
2309
2310stmt_ty
Victor Stinnerd27f8d22021-04-07 21:34:22 +02002311_PyAST_Import(asdl_alias_seq * names, int lineno, int col_offset, int
2312 end_lineno, int end_col_offset, PyArena *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002313{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002314 stmt_ty p;
Victor Stinner8370e072021-03-24 02:23:01 +01002315 p = (stmt_ty)_PyArena_Malloc(arena, sizeof(*p));
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002316 if (!p)
2317 return NULL;
2318 p->kind = Import_kind;
2319 p->v.Import.names = names;
2320 p->lineno = lineno;
2321 p->col_offset = col_offset;
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00002322 p->end_lineno = end_lineno;
2323 p->end_col_offset = end_col_offset;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002324 return p;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002325}
2326
2327stmt_ty
Victor Stinnerd27f8d22021-04-07 21:34:22 +02002328_PyAST_ImportFrom(identifier module, asdl_alias_seq * names, int level, int
2329 lineno, int col_offset, int end_lineno, int end_col_offset,
2330 PyArena *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002331{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002332 stmt_ty p;
Victor Stinner8370e072021-03-24 02:23:01 +01002333 p = (stmt_ty)_PyArena_Malloc(arena, sizeof(*p));
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002334 if (!p)
2335 return NULL;
2336 p->kind = ImportFrom_kind;
2337 p->v.ImportFrom.module = module;
2338 p->v.ImportFrom.names = names;
2339 p->v.ImportFrom.level = level;
2340 p->lineno = lineno;
2341 p->col_offset = col_offset;
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00002342 p->end_lineno = end_lineno;
2343 p->end_col_offset = end_col_offset;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002344 return p;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002345}
2346
2347stmt_ty
Victor Stinnerd27f8d22021-04-07 21:34:22 +02002348_PyAST_Global(asdl_identifier_seq * names, int lineno, int col_offset, int
2349 end_lineno, int end_col_offset, PyArena *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002350{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002351 stmt_ty p;
Victor Stinner8370e072021-03-24 02:23:01 +01002352 p = (stmt_ty)_PyArena_Malloc(arena, sizeof(*p));
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002353 if (!p)
2354 return NULL;
2355 p->kind = Global_kind;
2356 p->v.Global.names = names;
2357 p->lineno = lineno;
2358 p->col_offset = col_offset;
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00002359 p->end_lineno = end_lineno;
2360 p->end_col_offset = end_col_offset;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002361 return p;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002362}
2363
2364stmt_ty
Victor Stinnerd27f8d22021-04-07 21:34:22 +02002365_PyAST_Nonlocal(asdl_identifier_seq * names, int lineno, int col_offset, int
2366 end_lineno, int end_col_offset, PyArena *arena)
Jeremy Hylton81e95022007-02-27 06:50:52 +00002367{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002368 stmt_ty p;
Victor Stinner8370e072021-03-24 02:23:01 +01002369 p = (stmt_ty)_PyArena_Malloc(arena, sizeof(*p));
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002370 if (!p)
2371 return NULL;
2372 p->kind = Nonlocal_kind;
2373 p->v.Nonlocal.names = names;
2374 p->lineno = lineno;
2375 p->col_offset = col_offset;
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00002376 p->end_lineno = end_lineno;
2377 p->end_col_offset = end_col_offset;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002378 return p;
Jeremy Hylton81e95022007-02-27 06:50:52 +00002379}
2380
2381stmt_ty
Victor Stinnerd27f8d22021-04-07 21:34:22 +02002382_PyAST_Expr(expr_ty value, int lineno, int col_offset, int end_lineno, int
2383 end_col_offset, PyArena *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002384{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002385 stmt_ty p;
2386 if (!value) {
2387 PyErr_SetString(PyExc_ValueError,
Batuhan Taskaya091951a2020-05-06 17:29:32 +03002388 "field 'value' is required for Expr");
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002389 return NULL;
2390 }
Victor Stinner8370e072021-03-24 02:23:01 +01002391 p = (stmt_ty)_PyArena_Malloc(arena, sizeof(*p));
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002392 if (!p)
2393 return NULL;
2394 p->kind = Expr_kind;
2395 p->v.Expr.value = value;
2396 p->lineno = lineno;
2397 p->col_offset = col_offset;
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00002398 p->end_lineno = end_lineno;
2399 p->end_col_offset = end_col_offset;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002400 return p;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002401}
2402
2403stmt_ty
Victor Stinnerd27f8d22021-04-07 21:34:22 +02002404_PyAST_Pass(int lineno, int col_offset, int end_lineno, int end_col_offset,
2405 PyArena *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002406{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002407 stmt_ty p;
Victor Stinner8370e072021-03-24 02:23:01 +01002408 p = (stmt_ty)_PyArena_Malloc(arena, sizeof(*p));
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002409 if (!p)
2410 return NULL;
2411 p->kind = Pass_kind;
2412 p->lineno = lineno;
2413 p->col_offset = col_offset;
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00002414 p->end_lineno = end_lineno;
2415 p->end_col_offset = end_col_offset;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002416 return p;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002417}
2418
2419stmt_ty
Victor Stinnerd27f8d22021-04-07 21:34:22 +02002420_PyAST_Break(int lineno, int col_offset, int end_lineno, int end_col_offset,
2421 PyArena *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002422{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002423 stmt_ty p;
Victor Stinner8370e072021-03-24 02:23:01 +01002424 p = (stmt_ty)_PyArena_Malloc(arena, sizeof(*p));
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002425 if (!p)
2426 return NULL;
2427 p->kind = Break_kind;
2428 p->lineno = lineno;
2429 p->col_offset = col_offset;
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00002430 p->end_lineno = end_lineno;
2431 p->end_col_offset = end_col_offset;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002432 return p;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002433}
2434
2435stmt_ty
Victor Stinnerd27f8d22021-04-07 21:34:22 +02002436_PyAST_Continue(int lineno, int col_offset, int end_lineno, int end_col_offset,
2437 PyArena *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002438{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002439 stmt_ty p;
Victor Stinner8370e072021-03-24 02:23:01 +01002440 p = (stmt_ty)_PyArena_Malloc(arena, sizeof(*p));
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002441 if (!p)
2442 return NULL;
2443 p->kind = Continue_kind;
2444 p->lineno = lineno;
2445 p->col_offset = col_offset;
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00002446 p->end_lineno = end_lineno;
2447 p->end_col_offset = end_col_offset;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002448 return p;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002449}
2450
2451expr_ty
Victor Stinnerd27f8d22021-04-07 21:34:22 +02002452_PyAST_BoolOp(boolop_ty op, asdl_expr_seq * values, int lineno, int col_offset,
2453 int end_lineno, int end_col_offset, PyArena *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002454{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002455 expr_ty p;
2456 if (!op) {
2457 PyErr_SetString(PyExc_ValueError,
Batuhan Taskaya091951a2020-05-06 17:29:32 +03002458 "field 'op' is required for BoolOp");
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002459 return NULL;
2460 }
Victor Stinner8370e072021-03-24 02:23:01 +01002461 p = (expr_ty)_PyArena_Malloc(arena, sizeof(*p));
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002462 if (!p)
2463 return NULL;
2464 p->kind = BoolOp_kind;
2465 p->v.BoolOp.op = op;
2466 p->v.BoolOp.values = values;
2467 p->lineno = lineno;
2468 p->col_offset = col_offset;
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00002469 p->end_lineno = end_lineno;
2470 p->end_col_offset = end_col_offset;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002471 return p;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002472}
2473
2474expr_ty
Victor Stinnerd27f8d22021-04-07 21:34:22 +02002475_PyAST_NamedExpr(expr_ty target, expr_ty value, int lineno, int col_offset, int
2476 end_lineno, int end_col_offset, PyArena *arena)
Emily Morehouse8f59ee02019-01-24 16:49:56 -07002477{
2478 expr_ty p;
2479 if (!target) {
2480 PyErr_SetString(PyExc_ValueError,
Batuhan Taskaya091951a2020-05-06 17:29:32 +03002481 "field 'target' is required for NamedExpr");
Emily Morehouse8f59ee02019-01-24 16:49:56 -07002482 return NULL;
2483 }
2484 if (!value) {
2485 PyErr_SetString(PyExc_ValueError,
Batuhan Taskaya091951a2020-05-06 17:29:32 +03002486 "field 'value' is required for NamedExpr");
Emily Morehouse8f59ee02019-01-24 16:49:56 -07002487 return NULL;
2488 }
Victor Stinner8370e072021-03-24 02:23:01 +01002489 p = (expr_ty)_PyArena_Malloc(arena, sizeof(*p));
Emily Morehouse8f59ee02019-01-24 16:49:56 -07002490 if (!p)
2491 return NULL;
2492 p->kind = NamedExpr_kind;
2493 p->v.NamedExpr.target = target;
2494 p->v.NamedExpr.value = value;
2495 p->lineno = lineno;
2496 p->col_offset = col_offset;
2497 p->end_lineno = end_lineno;
2498 p->end_col_offset = end_col_offset;
2499 return p;
2500}
2501
2502expr_ty
Victor Stinnerd27f8d22021-04-07 21:34:22 +02002503_PyAST_BinOp(expr_ty left, operator_ty op, expr_ty right, int lineno, int
2504 col_offset, int end_lineno, int end_col_offset, PyArena *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002505{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002506 expr_ty p;
2507 if (!left) {
2508 PyErr_SetString(PyExc_ValueError,
Batuhan Taskaya091951a2020-05-06 17:29:32 +03002509 "field 'left' is required for BinOp");
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002510 return NULL;
2511 }
2512 if (!op) {
2513 PyErr_SetString(PyExc_ValueError,
Batuhan Taskaya091951a2020-05-06 17:29:32 +03002514 "field 'op' is required for BinOp");
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002515 return NULL;
2516 }
2517 if (!right) {
2518 PyErr_SetString(PyExc_ValueError,
Batuhan Taskaya091951a2020-05-06 17:29:32 +03002519 "field 'right' is required for BinOp");
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002520 return NULL;
2521 }
Victor Stinner8370e072021-03-24 02:23:01 +01002522 p = (expr_ty)_PyArena_Malloc(arena, sizeof(*p));
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002523 if (!p)
2524 return NULL;
2525 p->kind = BinOp_kind;
2526 p->v.BinOp.left = left;
2527 p->v.BinOp.op = op;
2528 p->v.BinOp.right = right;
2529 p->lineno = lineno;
2530 p->col_offset = col_offset;
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00002531 p->end_lineno = end_lineno;
2532 p->end_col_offset = end_col_offset;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002533 return p;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002534}
2535
2536expr_ty
Victor Stinnerd27f8d22021-04-07 21:34:22 +02002537_PyAST_UnaryOp(unaryop_ty op, expr_ty operand, int lineno, int col_offset, int
2538 end_lineno, int end_col_offset, PyArena *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002539{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002540 expr_ty p;
2541 if (!op) {
2542 PyErr_SetString(PyExc_ValueError,
Batuhan Taskaya091951a2020-05-06 17:29:32 +03002543 "field 'op' is required for UnaryOp");
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002544 return NULL;
2545 }
2546 if (!operand) {
2547 PyErr_SetString(PyExc_ValueError,
Batuhan Taskaya091951a2020-05-06 17:29:32 +03002548 "field 'operand' is required for UnaryOp");
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002549 return NULL;
2550 }
Victor Stinner8370e072021-03-24 02:23:01 +01002551 p = (expr_ty)_PyArena_Malloc(arena, sizeof(*p));
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002552 if (!p)
2553 return NULL;
2554 p->kind = UnaryOp_kind;
2555 p->v.UnaryOp.op = op;
2556 p->v.UnaryOp.operand = operand;
2557 p->lineno = lineno;
2558 p->col_offset = col_offset;
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00002559 p->end_lineno = end_lineno;
2560 p->end_col_offset = end_col_offset;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002561 return p;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002562}
2563
2564expr_ty
Victor Stinnerd27f8d22021-04-07 21:34:22 +02002565_PyAST_Lambda(arguments_ty args, expr_ty body, int lineno, int col_offset, int
2566 end_lineno, int end_col_offset, PyArena *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002567{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002568 expr_ty p;
2569 if (!args) {
2570 PyErr_SetString(PyExc_ValueError,
Batuhan Taskaya091951a2020-05-06 17:29:32 +03002571 "field 'args' is required for Lambda");
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002572 return NULL;
2573 }
2574 if (!body) {
2575 PyErr_SetString(PyExc_ValueError,
Batuhan Taskaya091951a2020-05-06 17:29:32 +03002576 "field 'body' is required for Lambda");
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002577 return NULL;
2578 }
Victor Stinner8370e072021-03-24 02:23:01 +01002579 p = (expr_ty)_PyArena_Malloc(arena, sizeof(*p));
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002580 if (!p)
2581 return NULL;
2582 p->kind = Lambda_kind;
2583 p->v.Lambda.args = args;
2584 p->v.Lambda.body = body;
2585 p->lineno = lineno;
2586 p->col_offset = col_offset;
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00002587 p->end_lineno = end_lineno;
2588 p->end_col_offset = end_col_offset;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002589 return p;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002590}
2591
2592expr_ty
Victor Stinnerd27f8d22021-04-07 21:34:22 +02002593_PyAST_IfExp(expr_ty test, expr_ty body, expr_ty orelse, int lineno, int
2594 col_offset, int end_lineno, int end_col_offset, PyArena *arena)
Thomas Woutersdca3b9c2006-02-27 00:24:13 +00002595{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002596 expr_ty p;
2597 if (!test) {
2598 PyErr_SetString(PyExc_ValueError,
Batuhan Taskaya091951a2020-05-06 17:29:32 +03002599 "field 'test' is required for IfExp");
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002600 return NULL;
2601 }
2602 if (!body) {
2603 PyErr_SetString(PyExc_ValueError,
Batuhan Taskaya091951a2020-05-06 17:29:32 +03002604 "field 'body' is required for IfExp");
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002605 return NULL;
2606 }
2607 if (!orelse) {
2608 PyErr_SetString(PyExc_ValueError,
Batuhan Taskaya091951a2020-05-06 17:29:32 +03002609 "field 'orelse' is required for IfExp");
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002610 return NULL;
2611 }
Victor Stinner8370e072021-03-24 02:23:01 +01002612 p = (expr_ty)_PyArena_Malloc(arena, sizeof(*p));
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002613 if (!p)
2614 return NULL;
2615 p->kind = IfExp_kind;
2616 p->v.IfExp.test = test;
2617 p->v.IfExp.body = body;
2618 p->v.IfExp.orelse = orelse;
2619 p->lineno = lineno;
2620 p->col_offset = col_offset;
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00002621 p->end_lineno = end_lineno;
2622 p->end_col_offset = end_col_offset;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002623 return p;
Thomas Woutersdca3b9c2006-02-27 00:24:13 +00002624}
2625
2626expr_ty
Victor Stinnerd27f8d22021-04-07 21:34:22 +02002627_PyAST_Dict(asdl_expr_seq * keys, asdl_expr_seq * values, int lineno, int
2628 col_offset, int end_lineno, int end_col_offset, PyArena *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002629{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002630 expr_ty p;
Victor Stinner8370e072021-03-24 02:23:01 +01002631 p = (expr_ty)_PyArena_Malloc(arena, sizeof(*p));
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002632 if (!p)
2633 return NULL;
2634 p->kind = Dict_kind;
2635 p->v.Dict.keys = keys;
2636 p->v.Dict.values = values;
2637 p->lineno = lineno;
2638 p->col_offset = col_offset;
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00002639 p->end_lineno = end_lineno;
2640 p->end_col_offset = end_col_offset;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002641 return p;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002642}
2643
2644expr_ty
Victor Stinnerd27f8d22021-04-07 21:34:22 +02002645_PyAST_Set(asdl_expr_seq * elts, int lineno, int col_offset, int end_lineno,
2646 int end_col_offset, PyArena *arena)
Guido van Rossum86e58e22006-08-28 15:27:34 +00002647{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002648 expr_ty p;
Victor Stinner8370e072021-03-24 02:23:01 +01002649 p = (expr_ty)_PyArena_Malloc(arena, sizeof(*p));
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002650 if (!p)
2651 return NULL;
2652 p->kind = Set_kind;
2653 p->v.Set.elts = elts;
2654 p->lineno = lineno;
2655 p->col_offset = col_offset;
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00002656 p->end_lineno = end_lineno;
2657 p->end_col_offset = end_col_offset;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002658 return p;
Guido van Rossum86e58e22006-08-28 15:27:34 +00002659}
2660
2661expr_ty
Victor Stinnerd27f8d22021-04-07 21:34:22 +02002662_PyAST_ListComp(expr_ty elt, asdl_comprehension_seq * generators, int lineno,
2663 int col_offset, int end_lineno, int end_col_offset, PyArena
2664 *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002665{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002666 expr_ty p;
2667 if (!elt) {
2668 PyErr_SetString(PyExc_ValueError,
Batuhan Taskaya091951a2020-05-06 17:29:32 +03002669 "field 'elt' is required for ListComp");
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002670 return NULL;
2671 }
Victor Stinner8370e072021-03-24 02:23:01 +01002672 p = (expr_ty)_PyArena_Malloc(arena, sizeof(*p));
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002673 if (!p)
2674 return NULL;
2675 p->kind = ListComp_kind;
2676 p->v.ListComp.elt = elt;
2677 p->v.ListComp.generators = generators;
2678 p->lineno = lineno;
2679 p->col_offset = col_offset;
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00002680 p->end_lineno = end_lineno;
2681 p->end_col_offset = end_col_offset;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002682 return p;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002683}
2684
2685expr_ty
Victor Stinnerd27f8d22021-04-07 21:34:22 +02002686_PyAST_SetComp(expr_ty elt, asdl_comprehension_seq * generators, int lineno,
2687 int col_offset, int end_lineno, int end_col_offset, PyArena
2688 *arena)
Nick Coghlan650f0d02007-04-15 12:05:43 +00002689{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002690 expr_ty p;
2691 if (!elt) {
2692 PyErr_SetString(PyExc_ValueError,
Batuhan Taskaya091951a2020-05-06 17:29:32 +03002693 "field 'elt' is required for SetComp");
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002694 return NULL;
2695 }
Victor Stinner8370e072021-03-24 02:23:01 +01002696 p = (expr_ty)_PyArena_Malloc(arena, sizeof(*p));
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002697 if (!p)
2698 return NULL;
2699 p->kind = SetComp_kind;
2700 p->v.SetComp.elt = elt;
2701 p->v.SetComp.generators = generators;
2702 p->lineno = lineno;
2703 p->col_offset = col_offset;
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00002704 p->end_lineno = end_lineno;
2705 p->end_col_offset = end_col_offset;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002706 return p;
Nick Coghlan650f0d02007-04-15 12:05:43 +00002707}
2708
2709expr_ty
Victor Stinnerd27f8d22021-04-07 21:34:22 +02002710_PyAST_DictComp(expr_ty key, expr_ty value, asdl_comprehension_seq *
2711 generators, int lineno, int col_offset, int end_lineno, int
2712 end_col_offset, PyArena *arena)
Guido van Rossum992d4a32007-07-11 13:09:30 +00002713{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002714 expr_ty p;
2715 if (!key) {
2716 PyErr_SetString(PyExc_ValueError,
Batuhan Taskaya091951a2020-05-06 17:29:32 +03002717 "field 'key' is required for DictComp");
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002718 return NULL;
2719 }
2720 if (!value) {
2721 PyErr_SetString(PyExc_ValueError,
Batuhan Taskaya091951a2020-05-06 17:29:32 +03002722 "field 'value' is required for DictComp");
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002723 return NULL;
2724 }
Victor Stinner8370e072021-03-24 02:23:01 +01002725 p = (expr_ty)_PyArena_Malloc(arena, sizeof(*p));
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002726 if (!p)
2727 return NULL;
2728 p->kind = DictComp_kind;
2729 p->v.DictComp.key = key;
2730 p->v.DictComp.value = value;
2731 p->v.DictComp.generators = generators;
2732 p->lineno = lineno;
2733 p->col_offset = col_offset;
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00002734 p->end_lineno = end_lineno;
2735 p->end_col_offset = end_col_offset;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002736 return p;
Guido van Rossum992d4a32007-07-11 13:09:30 +00002737}
2738
2739expr_ty
Victor Stinnerd27f8d22021-04-07 21:34:22 +02002740_PyAST_GeneratorExp(expr_ty elt, asdl_comprehension_seq * generators, int
2741 lineno, int col_offset, int end_lineno, int end_col_offset,
2742 PyArena *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002743{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002744 expr_ty p;
2745 if (!elt) {
2746 PyErr_SetString(PyExc_ValueError,
Batuhan Taskaya091951a2020-05-06 17:29:32 +03002747 "field 'elt' is required for GeneratorExp");
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002748 return NULL;
2749 }
Victor Stinner8370e072021-03-24 02:23:01 +01002750 p = (expr_ty)_PyArena_Malloc(arena, sizeof(*p));
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002751 if (!p)
2752 return NULL;
2753 p->kind = GeneratorExp_kind;
2754 p->v.GeneratorExp.elt = elt;
2755 p->v.GeneratorExp.generators = generators;
2756 p->lineno = lineno;
2757 p->col_offset = col_offset;
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00002758 p->end_lineno = end_lineno;
2759 p->end_col_offset = end_col_offset;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002760 return p;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002761}
2762
2763expr_ty
Victor Stinnerd27f8d22021-04-07 21:34:22 +02002764_PyAST_Await(expr_ty value, int lineno, int col_offset, int end_lineno, int
2765 end_col_offset, PyArena *arena)
Yury Selivanov75445082015-05-11 22:57:16 -04002766{
2767 expr_ty p;
2768 if (!value) {
2769 PyErr_SetString(PyExc_ValueError,
Batuhan Taskaya091951a2020-05-06 17:29:32 +03002770 "field 'value' is required for Await");
Yury Selivanov75445082015-05-11 22:57:16 -04002771 return NULL;
2772 }
Victor Stinner8370e072021-03-24 02:23:01 +01002773 p = (expr_ty)_PyArena_Malloc(arena, sizeof(*p));
Yury Selivanov75445082015-05-11 22:57:16 -04002774 if (!p)
2775 return NULL;
2776 p->kind = Await_kind;
2777 p->v.Await.value = value;
2778 p->lineno = lineno;
2779 p->col_offset = col_offset;
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00002780 p->end_lineno = end_lineno;
2781 p->end_col_offset = end_col_offset;
Yury Selivanov75445082015-05-11 22:57:16 -04002782 return p;
2783}
2784
2785expr_ty
Victor Stinnerd27f8d22021-04-07 21:34:22 +02002786_PyAST_Yield(expr_ty value, int lineno, int col_offset, int end_lineno, int
2787 end_col_offset, PyArena *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002788{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002789 expr_ty p;
Victor Stinner8370e072021-03-24 02:23:01 +01002790 p = (expr_ty)_PyArena_Malloc(arena, sizeof(*p));
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002791 if (!p)
2792 return NULL;
2793 p->kind = Yield_kind;
2794 p->v.Yield.value = value;
2795 p->lineno = lineno;
2796 p->col_offset = col_offset;
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00002797 p->end_lineno = end_lineno;
2798 p->end_col_offset = end_col_offset;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002799 return p;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002800}
2801
2802expr_ty
Victor Stinnerd27f8d22021-04-07 21:34:22 +02002803_PyAST_YieldFrom(expr_ty value, int lineno, int col_offset, int end_lineno, int
2804 end_col_offset, PyArena *arena)
Benjamin Peterson527c6222012-01-14 08:58:23 -05002805{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002806 expr_ty p;
2807 if (!value) {
2808 PyErr_SetString(PyExc_ValueError,
Batuhan Taskaya091951a2020-05-06 17:29:32 +03002809 "field 'value' is required for YieldFrom");
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002810 return NULL;
2811 }
Victor Stinner8370e072021-03-24 02:23:01 +01002812 p = (expr_ty)_PyArena_Malloc(arena, sizeof(*p));
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002813 if (!p)
2814 return NULL;
2815 p->kind = YieldFrom_kind;
2816 p->v.YieldFrom.value = value;
2817 p->lineno = lineno;
2818 p->col_offset = col_offset;
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00002819 p->end_lineno = end_lineno;
2820 p->end_col_offset = end_col_offset;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002821 return p;
Benjamin Peterson527c6222012-01-14 08:58:23 -05002822}
2823
2824expr_ty
Victor Stinnerd27f8d22021-04-07 21:34:22 +02002825_PyAST_Compare(expr_ty left, asdl_int_seq * ops, asdl_expr_seq * comparators,
2826 int lineno, int col_offset, int end_lineno, int end_col_offset,
2827 PyArena *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002828{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002829 expr_ty p;
2830 if (!left) {
2831 PyErr_SetString(PyExc_ValueError,
Batuhan Taskaya091951a2020-05-06 17:29:32 +03002832 "field 'left' is required for Compare");
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002833 return NULL;
2834 }
Victor Stinner8370e072021-03-24 02:23:01 +01002835 p = (expr_ty)_PyArena_Malloc(arena, sizeof(*p));
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002836 if (!p)
2837 return NULL;
2838 p->kind = Compare_kind;
2839 p->v.Compare.left = left;
2840 p->v.Compare.ops = ops;
2841 p->v.Compare.comparators = comparators;
2842 p->lineno = lineno;
2843 p->col_offset = col_offset;
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00002844 p->end_lineno = end_lineno;
2845 p->end_col_offset = end_col_offset;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002846 return p;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002847}
2848
2849expr_ty
Victor Stinnerd27f8d22021-04-07 21:34:22 +02002850_PyAST_Call(expr_ty func, asdl_expr_seq * args, asdl_keyword_seq * keywords,
2851 int lineno, int col_offset, int end_lineno, int end_col_offset,
2852 PyArena *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002853{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002854 expr_ty p;
2855 if (!func) {
2856 PyErr_SetString(PyExc_ValueError,
Batuhan Taskaya091951a2020-05-06 17:29:32 +03002857 "field 'func' is required for Call");
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002858 return NULL;
2859 }
Victor Stinner8370e072021-03-24 02:23:01 +01002860 p = (expr_ty)_PyArena_Malloc(arena, sizeof(*p));
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002861 if (!p)
2862 return NULL;
2863 p->kind = Call_kind;
2864 p->v.Call.func = func;
2865 p->v.Call.args = args;
2866 p->v.Call.keywords = keywords;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002867 p->lineno = lineno;
2868 p->col_offset = col_offset;
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00002869 p->end_lineno = end_lineno;
2870 p->end_col_offset = end_col_offset;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002871 return p;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002872}
2873
2874expr_ty
Victor Stinnerd27f8d22021-04-07 21:34:22 +02002875_PyAST_FormattedValue(expr_ty value, int conversion, expr_ty format_spec, int
2876 lineno, int col_offset, int end_lineno, int
2877 end_col_offset, PyArena *arena)
Eric V. Smith235a6f02015-09-19 14:51:32 -04002878{
2879 expr_ty p;
2880 if (!value) {
2881 PyErr_SetString(PyExc_ValueError,
Batuhan Taskaya091951a2020-05-06 17:29:32 +03002882 "field 'value' is required for FormattedValue");
Eric V. Smith235a6f02015-09-19 14:51:32 -04002883 return NULL;
2884 }
Victor Stinner8370e072021-03-24 02:23:01 +01002885 p = (expr_ty)_PyArena_Malloc(arena, sizeof(*p));
Eric V. Smith235a6f02015-09-19 14:51:32 -04002886 if (!p)
2887 return NULL;
2888 p->kind = FormattedValue_kind;
2889 p->v.FormattedValue.value = value;
2890 p->v.FormattedValue.conversion = conversion;
2891 p->v.FormattedValue.format_spec = format_spec;
2892 p->lineno = lineno;
2893 p->col_offset = col_offset;
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00002894 p->end_lineno = end_lineno;
2895 p->end_col_offset = end_col_offset;
Eric V. Smith235a6f02015-09-19 14:51:32 -04002896 return p;
2897}
2898
2899expr_ty
Victor Stinnerd27f8d22021-04-07 21:34:22 +02002900_PyAST_JoinedStr(asdl_expr_seq * values, int lineno, int col_offset, int
2901 end_lineno, int end_col_offset, PyArena *arena)
Eric V. Smith235a6f02015-09-19 14:51:32 -04002902{
2903 expr_ty p;
Victor Stinner8370e072021-03-24 02:23:01 +01002904 p = (expr_ty)_PyArena_Malloc(arena, sizeof(*p));
Eric V. Smith235a6f02015-09-19 14:51:32 -04002905 if (!p)
2906 return NULL;
2907 p->kind = JoinedStr_kind;
2908 p->v.JoinedStr.values = values;
2909 p->lineno = lineno;
2910 p->col_offset = col_offset;
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00002911 p->end_lineno = end_lineno;
2912 p->end_col_offset = end_col_offset;
Eric V. Smith235a6f02015-09-19 14:51:32 -04002913 return p;
2914}
2915
2916expr_ty
Victor Stinnerd27f8d22021-04-07 21:34:22 +02002917_PyAST_Constant(constant value, string kind, int lineno, int col_offset, int
2918 end_lineno, int end_col_offset, PyArena *arena)
Victor Stinnerf2c1aa12016-01-26 00:40:57 +01002919{
2920 expr_ty p;
2921 if (!value) {
2922 PyErr_SetString(PyExc_ValueError,
Batuhan Taskaya091951a2020-05-06 17:29:32 +03002923 "field 'value' is required for Constant");
Victor Stinnerf2c1aa12016-01-26 00:40:57 +01002924 return NULL;
2925 }
Victor Stinner8370e072021-03-24 02:23:01 +01002926 p = (expr_ty)_PyArena_Malloc(arena, sizeof(*p));
Victor Stinnerf2c1aa12016-01-26 00:40:57 +01002927 if (!p)
2928 return NULL;
2929 p->kind = Constant_kind;
2930 p->v.Constant.value = value;
Guido van Rossum10f8ce62019-03-13 13:00:46 -07002931 p->v.Constant.kind = kind;
Victor Stinnerf2c1aa12016-01-26 00:40:57 +01002932 p->lineno = lineno;
2933 p->col_offset = col_offset;
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00002934 p->end_lineno = end_lineno;
2935 p->end_col_offset = end_col_offset;
Victor Stinnerf2c1aa12016-01-26 00:40:57 +01002936 return p;
2937}
2938
2939expr_ty
Victor Stinnerd27f8d22021-04-07 21:34:22 +02002940_PyAST_Attribute(expr_ty value, identifier attr, expr_context_ty ctx, int
2941 lineno, int col_offset, int end_lineno, int end_col_offset,
2942 PyArena *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002943{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002944 expr_ty p;
2945 if (!value) {
2946 PyErr_SetString(PyExc_ValueError,
Batuhan Taskaya091951a2020-05-06 17:29:32 +03002947 "field 'value' is required for Attribute");
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002948 return NULL;
2949 }
2950 if (!attr) {
2951 PyErr_SetString(PyExc_ValueError,
Batuhan Taskaya091951a2020-05-06 17:29:32 +03002952 "field 'attr' is required for Attribute");
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002953 return NULL;
2954 }
2955 if (!ctx) {
2956 PyErr_SetString(PyExc_ValueError,
Batuhan Taskaya091951a2020-05-06 17:29:32 +03002957 "field 'ctx' is required for Attribute");
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002958 return NULL;
2959 }
Victor Stinner8370e072021-03-24 02:23:01 +01002960 p = (expr_ty)_PyArena_Malloc(arena, sizeof(*p));
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002961 if (!p)
2962 return NULL;
2963 p->kind = Attribute_kind;
2964 p->v.Attribute.value = value;
2965 p->v.Attribute.attr = attr;
2966 p->v.Attribute.ctx = ctx;
2967 p->lineno = lineno;
2968 p->col_offset = col_offset;
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00002969 p->end_lineno = end_lineno;
2970 p->end_col_offset = end_col_offset;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002971 return p;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002972}
2973
2974expr_ty
Victor Stinnerd27f8d22021-04-07 21:34:22 +02002975_PyAST_Subscript(expr_ty value, expr_ty slice, expr_context_ty ctx, int lineno,
2976 int col_offset, int end_lineno, int end_col_offset, PyArena
2977 *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002978{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002979 expr_ty p;
2980 if (!value) {
2981 PyErr_SetString(PyExc_ValueError,
Batuhan Taskaya091951a2020-05-06 17:29:32 +03002982 "field 'value' is required for Subscript");
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002983 return NULL;
2984 }
2985 if (!slice) {
2986 PyErr_SetString(PyExc_ValueError,
Batuhan Taskaya091951a2020-05-06 17:29:32 +03002987 "field 'slice' is required for Subscript");
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002988 return NULL;
2989 }
2990 if (!ctx) {
2991 PyErr_SetString(PyExc_ValueError,
Batuhan Taskaya091951a2020-05-06 17:29:32 +03002992 "field 'ctx' is required for Subscript");
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002993 return NULL;
2994 }
Victor Stinner8370e072021-03-24 02:23:01 +01002995 p = (expr_ty)_PyArena_Malloc(arena, sizeof(*p));
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002996 if (!p)
2997 return NULL;
2998 p->kind = Subscript_kind;
2999 p->v.Subscript.value = value;
3000 p->v.Subscript.slice = slice;
3001 p->v.Subscript.ctx = ctx;
3002 p->lineno = lineno;
3003 p->col_offset = col_offset;
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00003004 p->end_lineno = end_lineno;
3005 p->end_col_offset = end_col_offset;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003006 return p;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00003007}
3008
3009expr_ty
Victor Stinnerd27f8d22021-04-07 21:34:22 +02003010_PyAST_Starred(expr_ty value, expr_context_ty ctx, int lineno, int col_offset,
3011 int end_lineno, int end_col_offset, PyArena *arena)
Guido van Rossum0368b722007-05-11 16:50:42 +00003012{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003013 expr_ty p;
3014 if (!value) {
3015 PyErr_SetString(PyExc_ValueError,
Batuhan Taskaya091951a2020-05-06 17:29:32 +03003016 "field 'value' is required for Starred");
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003017 return NULL;
3018 }
3019 if (!ctx) {
3020 PyErr_SetString(PyExc_ValueError,
Batuhan Taskaya091951a2020-05-06 17:29:32 +03003021 "field 'ctx' is required for Starred");
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003022 return NULL;
3023 }
Victor Stinner8370e072021-03-24 02:23:01 +01003024 p = (expr_ty)_PyArena_Malloc(arena, sizeof(*p));
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003025 if (!p)
3026 return NULL;
3027 p->kind = Starred_kind;
3028 p->v.Starred.value = value;
3029 p->v.Starred.ctx = ctx;
3030 p->lineno = lineno;
3031 p->col_offset = col_offset;
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00003032 p->end_lineno = end_lineno;
3033 p->end_col_offset = end_col_offset;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003034 return p;
Guido van Rossum0368b722007-05-11 16:50:42 +00003035}
3036
3037expr_ty
Victor Stinnerd27f8d22021-04-07 21:34:22 +02003038_PyAST_Name(identifier id, expr_context_ty ctx, int lineno, int col_offset, int
3039 end_lineno, int end_col_offset, PyArena *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00003040{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003041 expr_ty p;
3042 if (!id) {
3043 PyErr_SetString(PyExc_ValueError,
Batuhan Taskaya091951a2020-05-06 17:29:32 +03003044 "field 'id' is required for Name");
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003045 return NULL;
3046 }
3047 if (!ctx) {
3048 PyErr_SetString(PyExc_ValueError,
Batuhan Taskaya091951a2020-05-06 17:29:32 +03003049 "field 'ctx' is required for Name");
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003050 return NULL;
3051 }
Victor Stinner8370e072021-03-24 02:23:01 +01003052 p = (expr_ty)_PyArena_Malloc(arena, sizeof(*p));
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003053 if (!p)
3054 return NULL;
3055 p->kind = Name_kind;
3056 p->v.Name.id = id;
3057 p->v.Name.ctx = ctx;
3058 p->lineno = lineno;
3059 p->col_offset = col_offset;
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00003060 p->end_lineno = end_lineno;
3061 p->end_col_offset = end_col_offset;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003062 return p;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00003063}
3064
3065expr_ty
Victor Stinnerd27f8d22021-04-07 21:34:22 +02003066_PyAST_List(asdl_expr_seq * elts, expr_context_ty ctx, int lineno, int
3067 col_offset, int end_lineno, int end_col_offset, PyArena *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00003068{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003069 expr_ty p;
3070 if (!ctx) {
3071 PyErr_SetString(PyExc_ValueError,
Batuhan Taskaya091951a2020-05-06 17:29:32 +03003072 "field 'ctx' is required for List");
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003073 return NULL;
3074 }
Victor Stinner8370e072021-03-24 02:23:01 +01003075 p = (expr_ty)_PyArena_Malloc(arena, sizeof(*p));
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003076 if (!p)
3077 return NULL;
3078 p->kind = List_kind;
3079 p->v.List.elts = elts;
3080 p->v.List.ctx = ctx;
3081 p->lineno = lineno;
3082 p->col_offset = col_offset;
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00003083 p->end_lineno = end_lineno;
3084 p->end_col_offset = end_col_offset;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003085 return p;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00003086}
3087
3088expr_ty
Victor Stinnerd27f8d22021-04-07 21:34:22 +02003089_PyAST_Tuple(asdl_expr_seq * elts, expr_context_ty ctx, int lineno, int
3090 col_offset, int end_lineno, int end_col_offset, PyArena *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00003091{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003092 expr_ty p;
3093 if (!ctx) {
3094 PyErr_SetString(PyExc_ValueError,
Batuhan Taskaya091951a2020-05-06 17:29:32 +03003095 "field 'ctx' is required for Tuple");
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003096 return NULL;
3097 }
Victor Stinner8370e072021-03-24 02:23:01 +01003098 p = (expr_ty)_PyArena_Malloc(arena, sizeof(*p));
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003099 if (!p)
3100 return NULL;
3101 p->kind = Tuple_kind;
3102 p->v.Tuple.elts = elts;
3103 p->v.Tuple.ctx = ctx;
3104 p->lineno = lineno;
3105 p->col_offset = col_offset;
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00003106 p->end_lineno = end_lineno;
3107 p->end_col_offset = end_col_offset;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003108 return p;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00003109}
3110
Serhiy Storchaka13d52c22020-03-10 18:52:34 +02003111expr_ty
Victor Stinnerd27f8d22021-04-07 21:34:22 +02003112_PyAST_Slice(expr_ty lower, expr_ty upper, expr_ty step, int lineno, int
3113 col_offset, int end_lineno, int end_col_offset, PyArena *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00003114{
Serhiy Storchaka13d52c22020-03-10 18:52:34 +02003115 expr_ty p;
Victor Stinner8370e072021-03-24 02:23:01 +01003116 p = (expr_ty)_PyArena_Malloc(arena, sizeof(*p));
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003117 if (!p)
3118 return NULL;
3119 p->kind = Slice_kind;
3120 p->v.Slice.lower = lower;
3121 p->v.Slice.upper = upper;
3122 p->v.Slice.step = step;
Serhiy Storchaka13d52c22020-03-10 18:52:34 +02003123 p->lineno = lineno;
3124 p->col_offset = col_offset;
3125 p->end_lineno = end_lineno;
3126 p->end_col_offset = end_col_offset;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003127 return p;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00003128}
3129
Brandt Bucher145bf262021-02-26 14:51:55 -08003130expr_ty
Victor Stinnerd27f8d22021-04-07 21:34:22 +02003131_PyAST_MatchAs(expr_ty pattern, identifier name, int lineno, int col_offset,
3132 int end_lineno, int end_col_offset, PyArena *arena)
Brandt Bucher145bf262021-02-26 14:51:55 -08003133{
3134 expr_ty p;
3135 if (!pattern) {
3136 PyErr_SetString(PyExc_ValueError,
3137 "field 'pattern' is required for MatchAs");
3138 return NULL;
3139 }
3140 if (!name) {
3141 PyErr_SetString(PyExc_ValueError,
3142 "field 'name' is required for MatchAs");
3143 return NULL;
3144 }
Victor Stinner8370e072021-03-24 02:23:01 +01003145 p = (expr_ty)_PyArena_Malloc(arena, sizeof(*p));
Brandt Bucher145bf262021-02-26 14:51:55 -08003146 if (!p)
3147 return NULL;
3148 p->kind = MatchAs_kind;
3149 p->v.MatchAs.pattern = pattern;
3150 p->v.MatchAs.name = name;
3151 p->lineno = lineno;
3152 p->col_offset = col_offset;
3153 p->end_lineno = end_lineno;
3154 p->end_col_offset = end_col_offset;
3155 return p;
3156}
3157
3158expr_ty
Victor Stinnerd27f8d22021-04-07 21:34:22 +02003159_PyAST_MatchOr(asdl_expr_seq * patterns, int lineno, int col_offset, int
3160 end_lineno, int end_col_offset, PyArena *arena)
Brandt Bucher145bf262021-02-26 14:51:55 -08003161{
3162 expr_ty p;
Victor Stinner8370e072021-03-24 02:23:01 +01003163 p = (expr_ty)_PyArena_Malloc(arena, sizeof(*p));
Brandt Bucher145bf262021-02-26 14:51:55 -08003164 if (!p)
3165 return NULL;
3166 p->kind = MatchOr_kind;
3167 p->v.MatchOr.patterns = patterns;
3168 p->lineno = lineno;
3169 p->col_offset = col_offset;
3170 p->end_lineno = end_lineno;
3171 p->end_col_offset = end_col_offset;
3172 return p;
3173}
3174
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00003175comprehension_ty
Victor Stinnerd27f8d22021-04-07 21:34:22 +02003176_PyAST_comprehension(expr_ty target, expr_ty iter, asdl_expr_seq * ifs, int
3177 is_async, PyArena *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00003178{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003179 comprehension_ty p;
3180 if (!target) {
3181 PyErr_SetString(PyExc_ValueError,
Batuhan Taskaya091951a2020-05-06 17:29:32 +03003182 "field 'target' is required for comprehension");
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003183 return NULL;
3184 }
3185 if (!iter) {
3186 PyErr_SetString(PyExc_ValueError,
Batuhan Taskaya091951a2020-05-06 17:29:32 +03003187 "field 'iter' is required for comprehension");
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003188 return NULL;
3189 }
Victor Stinner8370e072021-03-24 02:23:01 +01003190 p = (comprehension_ty)_PyArena_Malloc(arena, sizeof(*p));
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003191 if (!p)
3192 return NULL;
3193 p->target = target;
3194 p->iter = iter;
3195 p->ifs = ifs;
Yury Selivanov52c4e7c2016-09-09 10:36:01 -07003196 p->is_async = is_async;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003197 return p;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00003198}
3199
3200excepthandler_ty
Victor Stinnerd27f8d22021-04-07 21:34:22 +02003201_PyAST_ExceptHandler(expr_ty type, identifier name, asdl_stmt_seq * body, int
3202 lineno, int col_offset, int end_lineno, int
3203 end_col_offset, PyArena *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00003204{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003205 excepthandler_ty p;
Victor Stinner8370e072021-03-24 02:23:01 +01003206 p = (excepthandler_ty)_PyArena_Malloc(arena, sizeof(*p));
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003207 if (!p)
3208 return NULL;
3209 p->kind = ExceptHandler_kind;
3210 p->v.ExceptHandler.type = type;
3211 p->v.ExceptHandler.name = name;
3212 p->v.ExceptHandler.body = body;
3213 p->lineno = lineno;
3214 p->col_offset = col_offset;
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00003215 p->end_lineno = end_lineno;
3216 p->end_col_offset = end_col_offset;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003217 return p;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00003218}
3219
3220arguments_ty
Victor Stinnerd27f8d22021-04-07 21:34:22 +02003221_PyAST_arguments(asdl_arg_seq * posonlyargs, asdl_arg_seq * args, arg_ty
3222 vararg, asdl_arg_seq * kwonlyargs, asdl_expr_seq *
3223 kw_defaults, arg_ty kwarg, asdl_expr_seq * defaults, PyArena
3224 *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00003225{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003226 arguments_ty p;
Victor Stinner8370e072021-03-24 02:23:01 +01003227 p = (arguments_ty)_PyArena_Malloc(arena, sizeof(*p));
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003228 if (!p)
3229 return NULL;
Pablo Galindo8c77b8c2019-04-29 13:36:57 +01003230 p->posonlyargs = posonlyargs;
Pablo Galindocd6e83b2019-07-15 01:32:18 +02003231 p->args = args;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003232 p->vararg = vararg;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003233 p->kwonlyargs = kwonlyargs;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003234 p->kw_defaults = kw_defaults;
Victor Stinneree4b59c2013-07-27 00:01:35 +02003235 p->kwarg = kwarg;
3236 p->defaults = defaults;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003237 return p;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00003238}
3239
Neal Norwitzc1505362006-12-28 06:47:50 +00003240arg_ty
Victor Stinnerd27f8d22021-04-07 21:34:22 +02003241_PyAST_arg(identifier arg, expr_ty annotation, string type_comment, int lineno,
3242 int col_offset, int end_lineno, int end_col_offset, PyArena *arena)
Neal Norwitzc1505362006-12-28 06:47:50 +00003243{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003244 arg_ty p;
3245 if (!arg) {
3246 PyErr_SetString(PyExc_ValueError,
Batuhan Taskaya091951a2020-05-06 17:29:32 +03003247 "field 'arg' is required for arg");
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003248 return NULL;
3249 }
Victor Stinner8370e072021-03-24 02:23:01 +01003250 p = (arg_ty)_PyArena_Malloc(arena, sizeof(*p));
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003251 if (!p)
3252 return NULL;
3253 p->arg = arg;
3254 p->annotation = annotation;
Guido van Rossumdcfcd142019-01-31 03:40:27 -08003255 p->type_comment = type_comment;
Victor Stinnerc106c682015-11-06 17:01:48 +01003256 p->lineno = lineno;
3257 p->col_offset = col_offset;
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00003258 p->end_lineno = end_lineno;
3259 p->end_col_offset = end_col_offset;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003260 return p;
Neal Norwitzc1505362006-12-28 06:47:50 +00003261}
3262
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00003263keyword_ty
Victor Stinnerd27f8d22021-04-07 21:34:22 +02003264_PyAST_keyword(identifier arg, expr_ty value, int lineno, int col_offset, int
3265 end_lineno, int end_col_offset, PyArena *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00003266{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003267 keyword_ty p;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003268 if (!value) {
3269 PyErr_SetString(PyExc_ValueError,
Batuhan Taskaya091951a2020-05-06 17:29:32 +03003270 "field 'value' is required for keyword");
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003271 return NULL;
3272 }
Victor Stinner8370e072021-03-24 02:23:01 +01003273 p = (keyword_ty)_PyArena_Malloc(arena, sizeof(*p));
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003274 if (!p)
3275 return NULL;
3276 p->arg = arg;
3277 p->value = value;
Pablo Galindo168660b2020-04-02 00:47:39 +01003278 p->lineno = lineno;
3279 p->col_offset = col_offset;
3280 p->end_lineno = end_lineno;
3281 p->end_col_offset = end_col_offset;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003282 return p;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00003283}
3284
3285alias_ty
Matthew Suozzo75a06f02021-04-10 16:56:28 -04003286_PyAST_alias(identifier name, identifier asname, int lineno, int col_offset,
3287 int end_lineno, int end_col_offset, PyArena *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00003288{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003289 alias_ty p;
3290 if (!name) {
3291 PyErr_SetString(PyExc_ValueError,
Batuhan Taskaya091951a2020-05-06 17:29:32 +03003292 "field 'name' is required for alias");
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003293 return NULL;
3294 }
Victor Stinner8370e072021-03-24 02:23:01 +01003295 p = (alias_ty)_PyArena_Malloc(arena, sizeof(*p));
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003296 if (!p)
3297 return NULL;
3298 p->name = name;
3299 p->asname = asname;
Matthew Suozzo75a06f02021-04-10 16:56:28 -04003300 p->lineno = lineno;
3301 p->col_offset = col_offset;
3302 p->end_lineno = end_lineno;
3303 p->end_col_offset = end_col_offset;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003304 return p;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00003305}
3306
Benjamin Petersonbf1bbc12011-05-27 13:58:08 -05003307withitem_ty
Victor Stinnerd27f8d22021-04-07 21:34:22 +02003308_PyAST_withitem(expr_ty context_expr, expr_ty optional_vars, PyArena *arena)
Benjamin Petersonbf1bbc12011-05-27 13:58:08 -05003309{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003310 withitem_ty p;
3311 if (!context_expr) {
3312 PyErr_SetString(PyExc_ValueError,
Batuhan Taskaya091951a2020-05-06 17:29:32 +03003313 "field 'context_expr' is required for withitem");
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003314 return NULL;
3315 }
Victor Stinner8370e072021-03-24 02:23:01 +01003316 p = (withitem_ty)_PyArena_Malloc(arena, sizeof(*p));
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003317 if (!p)
3318 return NULL;
3319 p->context_expr = context_expr;
3320 p->optional_vars = optional_vars;
3321 return p;
Benjamin Petersonbf1bbc12011-05-27 13:58:08 -05003322}
3323
Brandt Bucher145bf262021-02-26 14:51:55 -08003324match_case_ty
Victor Stinnerd27f8d22021-04-07 21:34:22 +02003325_PyAST_match_case(expr_ty pattern, expr_ty guard, asdl_stmt_seq * body, PyArena
3326 *arena)
Brandt Bucher145bf262021-02-26 14:51:55 -08003327{
3328 match_case_ty p;
3329 if (!pattern) {
3330 PyErr_SetString(PyExc_ValueError,
3331 "field 'pattern' is required for match_case");
3332 return NULL;
3333 }
Victor Stinner8370e072021-03-24 02:23:01 +01003334 p = (match_case_ty)_PyArena_Malloc(arena, sizeof(*p));
Brandt Bucher145bf262021-02-26 14:51:55 -08003335 if (!p)
3336 return NULL;
3337 p->pattern = pattern;
3338 p->guard = guard;
3339 p->body = body;
3340 return p;
3341}
3342
Guido van Rossumdcfcd142019-01-31 03:40:27 -08003343type_ignore_ty
Victor Stinnerd27f8d22021-04-07 21:34:22 +02003344_PyAST_TypeIgnore(int lineno, string tag, PyArena *arena)
Guido van Rossumdcfcd142019-01-31 03:40:27 -08003345{
3346 type_ignore_ty p;
Michael J. Sullivan933e1502019-05-22 07:54:20 -07003347 if (!tag) {
3348 PyErr_SetString(PyExc_ValueError,
Batuhan Taskaya091951a2020-05-06 17:29:32 +03003349 "field 'tag' is required for TypeIgnore");
Michael J. Sullivan933e1502019-05-22 07:54:20 -07003350 return NULL;
3351 }
Victor Stinner8370e072021-03-24 02:23:01 +01003352 p = (type_ignore_ty)_PyArena_Malloc(arena, sizeof(*p));
Guido van Rossumdcfcd142019-01-31 03:40:27 -08003353 if (!p)
3354 return NULL;
3355 p->kind = TypeIgnore_kind;
3356 p->v.TypeIgnore.lineno = lineno;
Michael J. Sullivan933e1502019-05-22 07:54:20 -07003357 p->v.TypeIgnore.tag = tag;
Guido van Rossumdcfcd142019-01-31 03:40:27 -08003358 return p;
3359}
3360
Neal Norwitz7b5a6042005-11-13 19:14:20 +00003361
Martin v. Löwisbd260da2006-02-26 19:42:26 +00003362PyObject*
Victor Stinner5cf47822020-11-02 22:03:28 +01003363ast2obj_mod(struct ast_state *state, void* _o)
Neal Norwitz7b5a6042005-11-13 19:14:20 +00003364{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003365 mod_ty o = (mod_ty)_o;
3366 PyObject *result = NULL, *value = NULL;
Dino Viehlandac46eb42019-09-11 10:16:34 -07003367 PyTypeObject *tp;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003368 if (!o) {
Serhiy Storchaka228b12e2017-01-23 09:47:21 +02003369 Py_RETURN_NONE;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003370 }
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003371 switch (o->kind) {
3372 case Module_kind:
Victor Stinner74419f02020-07-03 11:35:37 +02003373 tp = (PyTypeObject *)state->Module_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07003374 result = PyType_GenericNew(tp, NULL, NULL);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003375 if (!result) goto failed;
Pablo Galindoa5634c42020-09-16 19:42:00 +01003376 value = ast2obj_list(state, (asdl_seq*)o->v.Module.body, ast2obj_stmt);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003377 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02003378 if (PyObject_SetAttr(result, state->body, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003379 goto failed;
3380 Py_DECREF(value);
Pablo Galindoa5634c42020-09-16 19:42:00 +01003381 value = ast2obj_list(state, (asdl_seq*)o->v.Module.type_ignores,
Victor Stinner74419f02020-07-03 11:35:37 +02003382 ast2obj_type_ignore);
Guido van Rossumdcfcd142019-01-31 03:40:27 -08003383 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02003384 if (PyObject_SetAttr(result, state->type_ignores, value) == -1)
Guido van Rossumdcfcd142019-01-31 03:40:27 -08003385 goto failed;
3386 Py_DECREF(value);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003387 break;
3388 case Interactive_kind:
Victor Stinner74419f02020-07-03 11:35:37 +02003389 tp = (PyTypeObject *)state->Interactive_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07003390 result = PyType_GenericNew(tp, NULL, NULL);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003391 if (!result) goto failed;
Pablo Galindoa5634c42020-09-16 19:42:00 +01003392 value = ast2obj_list(state, (asdl_seq*)o->v.Interactive.body,
3393 ast2obj_stmt);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003394 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02003395 if (PyObject_SetAttr(result, state->body, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003396 goto failed;
3397 Py_DECREF(value);
3398 break;
3399 case Expression_kind:
Victor Stinner74419f02020-07-03 11:35:37 +02003400 tp = (PyTypeObject *)state->Expression_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07003401 result = PyType_GenericNew(tp, NULL, NULL);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003402 if (!result) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02003403 value = ast2obj_expr(state, o->v.Expression.body);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003404 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02003405 if (PyObject_SetAttr(result, state->body, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003406 goto failed;
3407 Py_DECREF(value);
3408 break;
Guido van Rossumdcfcd142019-01-31 03:40:27 -08003409 case FunctionType_kind:
Victor Stinner74419f02020-07-03 11:35:37 +02003410 tp = (PyTypeObject *)state->FunctionType_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07003411 result = PyType_GenericNew(tp, NULL, NULL);
Guido van Rossumdcfcd142019-01-31 03:40:27 -08003412 if (!result) goto failed;
Pablo Galindoa5634c42020-09-16 19:42:00 +01003413 value = ast2obj_list(state, (asdl_seq*)o->v.FunctionType.argtypes,
3414 ast2obj_expr);
Guido van Rossumdcfcd142019-01-31 03:40:27 -08003415 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02003416 if (PyObject_SetAttr(result, state->argtypes, value) == -1)
Guido van Rossumdcfcd142019-01-31 03:40:27 -08003417 goto failed;
3418 Py_DECREF(value);
Victor Stinner74419f02020-07-03 11:35:37 +02003419 value = ast2obj_expr(state, o->v.FunctionType.returns);
Guido van Rossumdcfcd142019-01-31 03:40:27 -08003420 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02003421 if (PyObject_SetAttr(result, state->returns, value) == -1)
Guido van Rossumdcfcd142019-01-31 03:40:27 -08003422 goto failed;
3423 Py_DECREF(value);
3424 break;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003425 }
3426 return result;
Martin v. Löwisbd260da2006-02-26 19:42:26 +00003427failed:
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003428 Py_XDECREF(value);
3429 Py_XDECREF(result);
3430 return NULL;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00003431}
3432
Martin v. Löwisbd260da2006-02-26 19:42:26 +00003433PyObject*
Victor Stinner5cf47822020-11-02 22:03:28 +01003434ast2obj_stmt(struct ast_state *state, void* _o)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00003435{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003436 stmt_ty o = (stmt_ty)_o;
3437 PyObject *result = NULL, *value = NULL;
Dino Viehlandac46eb42019-09-11 10:16:34 -07003438 PyTypeObject *tp;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003439 if (!o) {
Serhiy Storchaka228b12e2017-01-23 09:47:21 +02003440 Py_RETURN_NONE;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003441 }
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003442 switch (o->kind) {
3443 case FunctionDef_kind:
Victor Stinner74419f02020-07-03 11:35:37 +02003444 tp = (PyTypeObject *)state->FunctionDef_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07003445 result = PyType_GenericNew(tp, NULL, NULL);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003446 if (!result) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02003447 value = ast2obj_identifier(state, o->v.FunctionDef.name);
Martin v. Löwis577b5b92006-02-27 15:23:19 +00003448 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02003449 if (PyObject_SetAttr(result, state->name, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003450 goto failed;
Martin v. Löwis03e5bc02006-03-02 00:31:27 +00003451 Py_DECREF(value);
Victor Stinner74419f02020-07-03 11:35:37 +02003452 value = ast2obj_arguments(state, o->v.FunctionDef.args);
Martin v. Löwis49c5da12006-03-01 22:49:05 +00003453 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02003454 if (PyObject_SetAttr(result, state->args, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003455 goto failed;
Martin v. Löwis03e5bc02006-03-02 00:31:27 +00003456 Py_DECREF(value);
Pablo Galindoa5634c42020-09-16 19:42:00 +01003457 value = ast2obj_list(state, (asdl_seq*)o->v.FunctionDef.body,
3458 ast2obj_stmt);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003459 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02003460 if (PyObject_SetAttr(result, state->body, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003461 goto failed;
3462 Py_DECREF(value);
Pablo Galindoa5634c42020-09-16 19:42:00 +01003463 value = ast2obj_list(state, (asdl_seq*)o->v.FunctionDef.decorator_list,
Victor Stinner74419f02020-07-03 11:35:37 +02003464 ast2obj_expr);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003465 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02003466 if (PyObject_SetAttr(result, state->decorator_list, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003467 goto failed;
3468 Py_DECREF(value);
Victor Stinner74419f02020-07-03 11:35:37 +02003469 value = ast2obj_expr(state, o->v.FunctionDef.returns);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003470 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02003471 if (PyObject_SetAttr(result, state->returns, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003472 goto failed;
3473 Py_DECREF(value);
Victor Stinner74419f02020-07-03 11:35:37 +02003474 value = ast2obj_string(state, o->v.FunctionDef.type_comment);
Guido van Rossumdcfcd142019-01-31 03:40:27 -08003475 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02003476 if (PyObject_SetAttr(result, state->type_comment, value) == -1)
Guido van Rossumdcfcd142019-01-31 03:40:27 -08003477 goto failed;
3478 Py_DECREF(value);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003479 break;
Yury Selivanov75445082015-05-11 22:57:16 -04003480 case AsyncFunctionDef_kind:
Victor Stinner74419f02020-07-03 11:35:37 +02003481 tp = (PyTypeObject *)state->AsyncFunctionDef_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07003482 result = PyType_GenericNew(tp, NULL, NULL);
Yury Selivanov75445082015-05-11 22:57:16 -04003483 if (!result) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02003484 value = ast2obj_identifier(state, o->v.AsyncFunctionDef.name);
Yury Selivanov75445082015-05-11 22:57:16 -04003485 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02003486 if (PyObject_SetAttr(result, state->name, value) == -1)
Yury Selivanov75445082015-05-11 22:57:16 -04003487 goto failed;
3488 Py_DECREF(value);
Victor Stinner74419f02020-07-03 11:35:37 +02003489 value = ast2obj_arguments(state, o->v.AsyncFunctionDef.args);
Yury Selivanov75445082015-05-11 22:57:16 -04003490 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02003491 if (PyObject_SetAttr(result, state->args, value) == -1)
Yury Selivanov75445082015-05-11 22:57:16 -04003492 goto failed;
3493 Py_DECREF(value);
Pablo Galindoa5634c42020-09-16 19:42:00 +01003494 value = ast2obj_list(state, (asdl_seq*)o->v.AsyncFunctionDef.body,
3495 ast2obj_stmt);
Yury Selivanov75445082015-05-11 22:57:16 -04003496 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02003497 if (PyObject_SetAttr(result, state->body, value) == -1)
Yury Selivanov75445082015-05-11 22:57:16 -04003498 goto failed;
3499 Py_DECREF(value);
Pablo Galindoa5634c42020-09-16 19:42:00 +01003500 value = ast2obj_list(state,
3501 (asdl_seq*)o->v.AsyncFunctionDef.decorator_list,
Yury Selivanov75445082015-05-11 22:57:16 -04003502 ast2obj_expr);
3503 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02003504 if (PyObject_SetAttr(result, state->decorator_list, value) == -1)
Yury Selivanov75445082015-05-11 22:57:16 -04003505 goto failed;
3506 Py_DECREF(value);
Victor Stinner74419f02020-07-03 11:35:37 +02003507 value = ast2obj_expr(state, o->v.AsyncFunctionDef.returns);
Yury Selivanov75445082015-05-11 22:57:16 -04003508 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02003509 if (PyObject_SetAttr(result, state->returns, value) == -1)
Yury Selivanov75445082015-05-11 22:57:16 -04003510 goto failed;
3511 Py_DECREF(value);
Victor Stinner74419f02020-07-03 11:35:37 +02003512 value = ast2obj_string(state, o->v.AsyncFunctionDef.type_comment);
Guido van Rossumdcfcd142019-01-31 03:40:27 -08003513 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02003514 if (PyObject_SetAttr(result, state->type_comment, value) == -1)
Guido van Rossumdcfcd142019-01-31 03:40:27 -08003515 goto failed;
3516 Py_DECREF(value);
Yury Selivanov75445082015-05-11 22:57:16 -04003517 break;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003518 case ClassDef_kind:
Victor Stinner74419f02020-07-03 11:35:37 +02003519 tp = (PyTypeObject *)state->ClassDef_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07003520 result = PyType_GenericNew(tp, NULL, NULL);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003521 if (!result) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02003522 value = ast2obj_identifier(state, o->v.ClassDef.name);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003523 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02003524 if (PyObject_SetAttr(result, state->name, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003525 goto failed;
3526 Py_DECREF(value);
Pablo Galindoa5634c42020-09-16 19:42:00 +01003527 value = ast2obj_list(state, (asdl_seq*)o->v.ClassDef.bases,
3528 ast2obj_expr);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003529 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02003530 if (PyObject_SetAttr(result, state->bases, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003531 goto failed;
3532 Py_DECREF(value);
Pablo Galindoa5634c42020-09-16 19:42:00 +01003533 value = ast2obj_list(state, (asdl_seq*)o->v.ClassDef.keywords,
3534 ast2obj_keyword);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003535 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02003536 if (PyObject_SetAttr(result, state->keywords, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003537 goto failed;
3538 Py_DECREF(value);
Pablo Galindoa5634c42020-09-16 19:42:00 +01003539 value = ast2obj_list(state, (asdl_seq*)o->v.ClassDef.body,
3540 ast2obj_stmt);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003541 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02003542 if (PyObject_SetAttr(result, state->body, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003543 goto failed;
3544 Py_DECREF(value);
Pablo Galindoa5634c42020-09-16 19:42:00 +01003545 value = ast2obj_list(state, (asdl_seq*)o->v.ClassDef.decorator_list,
3546 ast2obj_expr);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003547 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02003548 if (PyObject_SetAttr(result, state->decorator_list, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003549 goto failed;
3550 Py_DECREF(value);
3551 break;
3552 case Return_kind:
Victor Stinner74419f02020-07-03 11:35:37 +02003553 tp = (PyTypeObject *)state->Return_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07003554 result = PyType_GenericNew(tp, NULL, NULL);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003555 if (!result) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02003556 value = ast2obj_expr(state, o->v.Return.value);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003557 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02003558 if (PyObject_SetAttr(result, state->value, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003559 goto failed;
3560 Py_DECREF(value);
3561 break;
3562 case Delete_kind:
Victor Stinner74419f02020-07-03 11:35:37 +02003563 tp = (PyTypeObject *)state->Delete_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07003564 result = PyType_GenericNew(tp, NULL, NULL);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003565 if (!result) goto failed;
Pablo Galindoa5634c42020-09-16 19:42:00 +01003566 value = ast2obj_list(state, (asdl_seq*)o->v.Delete.targets,
3567 ast2obj_expr);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003568 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02003569 if (PyObject_SetAttr(result, state->targets, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003570 goto failed;
3571 Py_DECREF(value);
3572 break;
3573 case Assign_kind:
Victor Stinner74419f02020-07-03 11:35:37 +02003574 tp = (PyTypeObject *)state->Assign_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07003575 result = PyType_GenericNew(tp, NULL, NULL);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003576 if (!result) goto failed;
Pablo Galindoa5634c42020-09-16 19:42:00 +01003577 value = ast2obj_list(state, (asdl_seq*)o->v.Assign.targets,
3578 ast2obj_expr);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003579 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02003580 if (PyObject_SetAttr(result, state->targets, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003581 goto failed;
3582 Py_DECREF(value);
Victor Stinner74419f02020-07-03 11:35:37 +02003583 value = ast2obj_expr(state, o->v.Assign.value);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003584 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02003585 if (PyObject_SetAttr(result, state->value, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003586 goto failed;
3587 Py_DECREF(value);
Victor Stinner74419f02020-07-03 11:35:37 +02003588 value = ast2obj_string(state, o->v.Assign.type_comment);
Guido van Rossumdcfcd142019-01-31 03:40:27 -08003589 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02003590 if (PyObject_SetAttr(result, state->type_comment, value) == -1)
Guido van Rossumdcfcd142019-01-31 03:40:27 -08003591 goto failed;
3592 Py_DECREF(value);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003593 break;
3594 case AugAssign_kind:
Victor Stinner74419f02020-07-03 11:35:37 +02003595 tp = (PyTypeObject *)state->AugAssign_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07003596 result = PyType_GenericNew(tp, NULL, NULL);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003597 if (!result) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02003598 value = ast2obj_expr(state, o->v.AugAssign.target);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003599 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02003600 if (PyObject_SetAttr(result, state->target, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003601 goto failed;
3602 Py_DECREF(value);
Victor Stinner74419f02020-07-03 11:35:37 +02003603 value = ast2obj_operator(state, o->v.AugAssign.op);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003604 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02003605 if (PyObject_SetAttr(result, state->op, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003606 goto failed;
3607 Py_DECREF(value);
Victor Stinner74419f02020-07-03 11:35:37 +02003608 value = ast2obj_expr(state, o->v.AugAssign.value);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003609 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02003610 if (PyObject_SetAttr(result, state->value, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003611 goto failed;
3612 Py_DECREF(value);
3613 break;
Yury Selivanovf8cb8a12016-09-08 20:50:03 -07003614 case AnnAssign_kind:
Victor Stinner74419f02020-07-03 11:35:37 +02003615 tp = (PyTypeObject *)state->AnnAssign_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07003616 result = PyType_GenericNew(tp, NULL, NULL);
Yury Selivanovf8cb8a12016-09-08 20:50:03 -07003617 if (!result) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02003618 value = ast2obj_expr(state, o->v.AnnAssign.target);
Yury Selivanovf8cb8a12016-09-08 20:50:03 -07003619 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02003620 if (PyObject_SetAttr(result, state->target, value) == -1)
Yury Selivanovf8cb8a12016-09-08 20:50:03 -07003621 goto failed;
3622 Py_DECREF(value);
Victor Stinner74419f02020-07-03 11:35:37 +02003623 value = ast2obj_expr(state, o->v.AnnAssign.annotation);
Yury Selivanovf8cb8a12016-09-08 20:50:03 -07003624 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02003625 if (PyObject_SetAttr(result, state->annotation, value) == -1)
Yury Selivanovf8cb8a12016-09-08 20:50:03 -07003626 goto failed;
3627 Py_DECREF(value);
Victor Stinner74419f02020-07-03 11:35:37 +02003628 value = ast2obj_expr(state, o->v.AnnAssign.value);
Yury Selivanovf8cb8a12016-09-08 20:50:03 -07003629 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02003630 if (PyObject_SetAttr(result, state->value, value) == -1)
Yury Selivanovf8cb8a12016-09-08 20:50:03 -07003631 goto failed;
3632 Py_DECREF(value);
Victor Stinner74419f02020-07-03 11:35:37 +02003633 value = ast2obj_int(state, o->v.AnnAssign.simple);
Yury Selivanovf8cb8a12016-09-08 20:50:03 -07003634 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02003635 if (PyObject_SetAttr(result, state->simple, value) == -1)
Yury Selivanovf8cb8a12016-09-08 20:50:03 -07003636 goto failed;
3637 Py_DECREF(value);
3638 break;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003639 case For_kind:
Victor Stinner74419f02020-07-03 11:35:37 +02003640 tp = (PyTypeObject *)state->For_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07003641 result = PyType_GenericNew(tp, NULL, NULL);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003642 if (!result) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02003643 value = ast2obj_expr(state, o->v.For.target);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003644 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02003645 if (PyObject_SetAttr(result, state->target, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003646 goto failed;
3647 Py_DECREF(value);
Victor Stinner74419f02020-07-03 11:35:37 +02003648 value = ast2obj_expr(state, o->v.For.iter);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003649 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02003650 if (PyObject_SetAttr(result, state->iter, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003651 goto failed;
3652 Py_DECREF(value);
Pablo Galindoa5634c42020-09-16 19:42:00 +01003653 value = ast2obj_list(state, (asdl_seq*)o->v.For.body, ast2obj_stmt);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003654 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02003655 if (PyObject_SetAttr(result, state->body, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003656 goto failed;
3657 Py_DECREF(value);
Pablo Galindoa5634c42020-09-16 19:42:00 +01003658 value = ast2obj_list(state, (asdl_seq*)o->v.For.orelse, ast2obj_stmt);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003659 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02003660 if (PyObject_SetAttr(result, state->orelse, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003661 goto failed;
3662 Py_DECREF(value);
Victor Stinner74419f02020-07-03 11:35:37 +02003663 value = ast2obj_string(state, o->v.For.type_comment);
Guido van Rossumdcfcd142019-01-31 03:40:27 -08003664 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02003665 if (PyObject_SetAttr(result, state->type_comment, value) == -1)
Guido van Rossumdcfcd142019-01-31 03:40:27 -08003666 goto failed;
3667 Py_DECREF(value);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003668 break;
Yury Selivanov75445082015-05-11 22:57:16 -04003669 case AsyncFor_kind:
Victor Stinner74419f02020-07-03 11:35:37 +02003670 tp = (PyTypeObject *)state->AsyncFor_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07003671 result = PyType_GenericNew(tp, NULL, NULL);
Yury Selivanov75445082015-05-11 22:57:16 -04003672 if (!result) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02003673 value = ast2obj_expr(state, o->v.AsyncFor.target);
Yury Selivanov75445082015-05-11 22:57:16 -04003674 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02003675 if (PyObject_SetAttr(result, state->target, value) == -1)
Yury Selivanov75445082015-05-11 22:57:16 -04003676 goto failed;
3677 Py_DECREF(value);
Victor Stinner74419f02020-07-03 11:35:37 +02003678 value = ast2obj_expr(state, o->v.AsyncFor.iter);
Yury Selivanov75445082015-05-11 22:57:16 -04003679 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02003680 if (PyObject_SetAttr(result, state->iter, value) == -1)
Yury Selivanov75445082015-05-11 22:57:16 -04003681 goto failed;
3682 Py_DECREF(value);
Pablo Galindoa5634c42020-09-16 19:42:00 +01003683 value = ast2obj_list(state, (asdl_seq*)o->v.AsyncFor.body,
3684 ast2obj_stmt);
Yury Selivanov75445082015-05-11 22:57:16 -04003685 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02003686 if (PyObject_SetAttr(result, state->body, value) == -1)
Yury Selivanov75445082015-05-11 22:57:16 -04003687 goto failed;
3688 Py_DECREF(value);
Pablo Galindoa5634c42020-09-16 19:42:00 +01003689 value = ast2obj_list(state, (asdl_seq*)o->v.AsyncFor.orelse,
3690 ast2obj_stmt);
Yury Selivanov75445082015-05-11 22:57:16 -04003691 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02003692 if (PyObject_SetAttr(result, state->orelse, value) == -1)
Yury Selivanov75445082015-05-11 22:57:16 -04003693 goto failed;
3694 Py_DECREF(value);
Victor Stinner74419f02020-07-03 11:35:37 +02003695 value = ast2obj_string(state, o->v.AsyncFor.type_comment);
Guido van Rossumdcfcd142019-01-31 03:40:27 -08003696 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02003697 if (PyObject_SetAttr(result, state->type_comment, value) == -1)
Guido van Rossumdcfcd142019-01-31 03:40:27 -08003698 goto failed;
3699 Py_DECREF(value);
Yury Selivanov75445082015-05-11 22:57:16 -04003700 break;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003701 case While_kind:
Victor Stinner74419f02020-07-03 11:35:37 +02003702 tp = (PyTypeObject *)state->While_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07003703 result = PyType_GenericNew(tp, NULL, NULL);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003704 if (!result) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02003705 value = ast2obj_expr(state, o->v.While.test);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003706 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02003707 if (PyObject_SetAttr(result, state->test, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003708 goto failed;
3709 Py_DECREF(value);
Pablo Galindoa5634c42020-09-16 19:42:00 +01003710 value = ast2obj_list(state, (asdl_seq*)o->v.While.body, ast2obj_stmt);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003711 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02003712 if (PyObject_SetAttr(result, state->body, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003713 goto failed;
3714 Py_DECREF(value);
Pablo Galindoa5634c42020-09-16 19:42:00 +01003715 value = ast2obj_list(state, (asdl_seq*)o->v.While.orelse, ast2obj_stmt);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003716 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02003717 if (PyObject_SetAttr(result, state->orelse, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003718 goto failed;
3719 Py_DECREF(value);
3720 break;
3721 case If_kind:
Victor Stinner74419f02020-07-03 11:35:37 +02003722 tp = (PyTypeObject *)state->If_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07003723 result = PyType_GenericNew(tp, NULL, NULL);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003724 if (!result) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02003725 value = ast2obj_expr(state, o->v.If.test);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003726 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02003727 if (PyObject_SetAttr(result, state->test, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003728 goto failed;
3729 Py_DECREF(value);
Pablo Galindoa5634c42020-09-16 19:42:00 +01003730 value = ast2obj_list(state, (asdl_seq*)o->v.If.body, ast2obj_stmt);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003731 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02003732 if (PyObject_SetAttr(result, state->body, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003733 goto failed;
3734 Py_DECREF(value);
Pablo Galindoa5634c42020-09-16 19:42:00 +01003735 value = ast2obj_list(state, (asdl_seq*)o->v.If.orelse, ast2obj_stmt);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003736 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02003737 if (PyObject_SetAttr(result, state->orelse, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003738 goto failed;
3739 Py_DECREF(value);
3740 break;
3741 case With_kind:
Victor Stinner74419f02020-07-03 11:35:37 +02003742 tp = (PyTypeObject *)state->With_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07003743 result = PyType_GenericNew(tp, NULL, NULL);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003744 if (!result) goto failed;
Pablo Galindoa5634c42020-09-16 19:42:00 +01003745 value = ast2obj_list(state, (asdl_seq*)o->v.With.items,
3746 ast2obj_withitem);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003747 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02003748 if (PyObject_SetAttr(result, state->items, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003749 goto failed;
3750 Py_DECREF(value);
Pablo Galindoa5634c42020-09-16 19:42:00 +01003751 value = ast2obj_list(state, (asdl_seq*)o->v.With.body, ast2obj_stmt);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003752 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02003753 if (PyObject_SetAttr(result, state->body, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003754 goto failed;
3755 Py_DECREF(value);
Victor Stinner74419f02020-07-03 11:35:37 +02003756 value = ast2obj_string(state, o->v.With.type_comment);
Guido van Rossumdcfcd142019-01-31 03:40:27 -08003757 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02003758 if (PyObject_SetAttr(result, state->type_comment, value) == -1)
Guido van Rossumdcfcd142019-01-31 03:40:27 -08003759 goto failed;
3760 Py_DECREF(value);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003761 break;
Yury Selivanov75445082015-05-11 22:57:16 -04003762 case AsyncWith_kind:
Victor Stinner74419f02020-07-03 11:35:37 +02003763 tp = (PyTypeObject *)state->AsyncWith_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07003764 result = PyType_GenericNew(tp, NULL, NULL);
Yury Selivanov75445082015-05-11 22:57:16 -04003765 if (!result) goto failed;
Pablo Galindoa5634c42020-09-16 19:42:00 +01003766 value = ast2obj_list(state, (asdl_seq*)o->v.AsyncWith.items,
3767 ast2obj_withitem);
Yury Selivanov75445082015-05-11 22:57:16 -04003768 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02003769 if (PyObject_SetAttr(result, state->items, value) == -1)
Yury Selivanov75445082015-05-11 22:57:16 -04003770 goto failed;
3771 Py_DECREF(value);
Pablo Galindoa5634c42020-09-16 19:42:00 +01003772 value = ast2obj_list(state, (asdl_seq*)o->v.AsyncWith.body,
3773 ast2obj_stmt);
Yury Selivanov75445082015-05-11 22:57:16 -04003774 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02003775 if (PyObject_SetAttr(result, state->body, value) == -1)
Yury Selivanov75445082015-05-11 22:57:16 -04003776 goto failed;
3777 Py_DECREF(value);
Victor Stinner74419f02020-07-03 11:35:37 +02003778 value = ast2obj_string(state, o->v.AsyncWith.type_comment);
Guido van Rossumdcfcd142019-01-31 03:40:27 -08003779 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02003780 if (PyObject_SetAttr(result, state->type_comment, value) == -1)
Guido van Rossumdcfcd142019-01-31 03:40:27 -08003781 goto failed;
3782 Py_DECREF(value);
Yury Selivanov75445082015-05-11 22:57:16 -04003783 break;
Brandt Bucher145bf262021-02-26 14:51:55 -08003784 case Match_kind:
3785 tp = (PyTypeObject *)state->Match_type;
3786 result = PyType_GenericNew(tp, NULL, NULL);
3787 if (!result) goto failed;
3788 value = ast2obj_expr(state, o->v.Match.subject);
3789 if (!value) goto failed;
3790 if (PyObject_SetAttr(result, state->subject, value) == -1)
3791 goto failed;
3792 Py_DECREF(value);
3793 value = ast2obj_list(state, (asdl_seq*)o->v.Match.cases,
3794 ast2obj_match_case);
3795 if (!value) goto failed;
3796 if (PyObject_SetAttr(result, state->cases, value) == -1)
3797 goto failed;
3798 Py_DECREF(value);
3799 break;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003800 case Raise_kind:
Victor Stinner74419f02020-07-03 11:35:37 +02003801 tp = (PyTypeObject *)state->Raise_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07003802 result = PyType_GenericNew(tp, NULL, NULL);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003803 if (!result) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02003804 value = ast2obj_expr(state, o->v.Raise.exc);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003805 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02003806 if (PyObject_SetAttr(result, state->exc, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003807 goto failed;
3808 Py_DECREF(value);
Victor Stinner74419f02020-07-03 11:35:37 +02003809 value = ast2obj_expr(state, o->v.Raise.cause);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003810 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02003811 if (PyObject_SetAttr(result, state->cause, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003812 goto failed;
3813 Py_DECREF(value);
3814 break;
3815 case Try_kind:
Victor Stinner74419f02020-07-03 11:35:37 +02003816 tp = (PyTypeObject *)state->Try_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07003817 result = PyType_GenericNew(tp, NULL, NULL);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003818 if (!result) goto failed;
Pablo Galindoa5634c42020-09-16 19:42:00 +01003819 value = ast2obj_list(state, (asdl_seq*)o->v.Try.body, ast2obj_stmt);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003820 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02003821 if (PyObject_SetAttr(result, state->body, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003822 goto failed;
3823 Py_DECREF(value);
Pablo Galindoa5634c42020-09-16 19:42:00 +01003824 value = ast2obj_list(state, (asdl_seq*)o->v.Try.handlers,
3825 ast2obj_excepthandler);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003826 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02003827 if (PyObject_SetAttr(result, state->handlers, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003828 goto failed;
3829 Py_DECREF(value);
Pablo Galindoa5634c42020-09-16 19:42:00 +01003830 value = ast2obj_list(state, (asdl_seq*)o->v.Try.orelse, ast2obj_stmt);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003831 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02003832 if (PyObject_SetAttr(result, state->orelse, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003833 goto failed;
3834 Py_DECREF(value);
Pablo Galindoa5634c42020-09-16 19:42:00 +01003835 value = ast2obj_list(state, (asdl_seq*)o->v.Try.finalbody,
3836 ast2obj_stmt);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003837 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02003838 if (PyObject_SetAttr(result, state->finalbody, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003839 goto failed;
3840 Py_DECREF(value);
3841 break;
3842 case Assert_kind:
Victor Stinner74419f02020-07-03 11:35:37 +02003843 tp = (PyTypeObject *)state->Assert_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07003844 result = PyType_GenericNew(tp, NULL, NULL);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003845 if (!result) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02003846 value = ast2obj_expr(state, o->v.Assert.test);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003847 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02003848 if (PyObject_SetAttr(result, state->test, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003849 goto failed;
3850 Py_DECREF(value);
Victor Stinner74419f02020-07-03 11:35:37 +02003851 value = ast2obj_expr(state, o->v.Assert.msg);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003852 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02003853 if (PyObject_SetAttr(result, state->msg, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003854 goto failed;
3855 Py_DECREF(value);
3856 break;
3857 case Import_kind:
Victor Stinner74419f02020-07-03 11:35:37 +02003858 tp = (PyTypeObject *)state->Import_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07003859 result = PyType_GenericNew(tp, NULL, NULL);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003860 if (!result) goto failed;
Pablo Galindoa5634c42020-09-16 19:42:00 +01003861 value = ast2obj_list(state, (asdl_seq*)o->v.Import.names,
3862 ast2obj_alias);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003863 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02003864 if (PyObject_SetAttr(result, state->names, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003865 goto failed;
3866 Py_DECREF(value);
3867 break;
3868 case ImportFrom_kind:
Victor Stinner74419f02020-07-03 11:35:37 +02003869 tp = (PyTypeObject *)state->ImportFrom_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07003870 result = PyType_GenericNew(tp, NULL, NULL);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003871 if (!result) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02003872 value = ast2obj_identifier(state, o->v.ImportFrom.module);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003873 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02003874 if (PyObject_SetAttr(result, state->module, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003875 goto failed;
3876 Py_DECREF(value);
Pablo Galindoa5634c42020-09-16 19:42:00 +01003877 value = ast2obj_list(state, (asdl_seq*)o->v.ImportFrom.names,
3878 ast2obj_alias);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003879 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02003880 if (PyObject_SetAttr(result, state->names, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003881 goto failed;
3882 Py_DECREF(value);
Victor Stinner74419f02020-07-03 11:35:37 +02003883 value = ast2obj_int(state, o->v.ImportFrom.level);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003884 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02003885 if (PyObject_SetAttr(result, state->level, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003886 goto failed;
3887 Py_DECREF(value);
3888 break;
3889 case Global_kind:
Victor Stinner74419f02020-07-03 11:35:37 +02003890 tp = (PyTypeObject *)state->Global_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07003891 result = PyType_GenericNew(tp, NULL, NULL);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003892 if (!result) goto failed;
Pablo Galindoa5634c42020-09-16 19:42:00 +01003893 value = ast2obj_list(state, (asdl_seq*)o->v.Global.names,
3894 ast2obj_identifier);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003895 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02003896 if (PyObject_SetAttr(result, state->names, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003897 goto failed;
3898 Py_DECREF(value);
3899 break;
3900 case Nonlocal_kind:
Victor Stinner74419f02020-07-03 11:35:37 +02003901 tp = (PyTypeObject *)state->Nonlocal_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07003902 result = PyType_GenericNew(tp, NULL, NULL);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003903 if (!result) goto failed;
Pablo Galindoa5634c42020-09-16 19:42:00 +01003904 value = ast2obj_list(state, (asdl_seq*)o->v.Nonlocal.names,
3905 ast2obj_identifier);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003906 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02003907 if (PyObject_SetAttr(result, state->names, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003908 goto failed;
3909 Py_DECREF(value);
3910 break;
3911 case Expr_kind:
Victor Stinner74419f02020-07-03 11:35:37 +02003912 tp = (PyTypeObject *)state->Expr_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07003913 result = PyType_GenericNew(tp, NULL, NULL);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003914 if (!result) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02003915 value = ast2obj_expr(state, o->v.Expr.value);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003916 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02003917 if (PyObject_SetAttr(result, state->value, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003918 goto failed;
3919 Py_DECREF(value);
3920 break;
3921 case Pass_kind:
Victor Stinner74419f02020-07-03 11:35:37 +02003922 tp = (PyTypeObject *)state->Pass_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07003923 result = PyType_GenericNew(tp, NULL, NULL);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003924 if (!result) goto failed;
3925 break;
3926 case Break_kind:
Victor Stinner74419f02020-07-03 11:35:37 +02003927 tp = (PyTypeObject *)state->Break_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07003928 result = PyType_GenericNew(tp, NULL, NULL);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003929 if (!result) goto failed;
3930 break;
3931 case Continue_kind:
Victor Stinner74419f02020-07-03 11:35:37 +02003932 tp = (PyTypeObject *)state->Continue_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07003933 result = PyType_GenericNew(tp, NULL, NULL);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003934 if (!result) goto failed;
3935 break;
3936 }
Victor Stinner74419f02020-07-03 11:35:37 +02003937 value = ast2obj_int(state, o->lineno);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003938 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02003939 if (PyObject_SetAttr(result, state->lineno, value) < 0)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003940 goto failed;
3941 Py_DECREF(value);
Victor Stinner74419f02020-07-03 11:35:37 +02003942 value = ast2obj_int(state, o->col_offset);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003943 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02003944 if (PyObject_SetAttr(result, state->col_offset, value) < 0)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003945 goto failed;
3946 Py_DECREF(value);
Victor Stinner74419f02020-07-03 11:35:37 +02003947 value = ast2obj_int(state, o->end_lineno);
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00003948 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02003949 if (PyObject_SetAttr(result, state->end_lineno, value) < 0)
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00003950 goto failed;
3951 Py_DECREF(value);
Victor Stinner74419f02020-07-03 11:35:37 +02003952 value = ast2obj_int(state, o->end_col_offset);
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00003953 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02003954 if (PyObject_SetAttr(result, state->end_col_offset, value) < 0)
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00003955 goto failed;
3956 Py_DECREF(value);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003957 return result;
Martin v. Löwisbd260da2006-02-26 19:42:26 +00003958failed:
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003959 Py_XDECREF(value);
3960 Py_XDECREF(result);
3961 return NULL;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00003962}
3963
Martin v. Löwisbd260da2006-02-26 19:42:26 +00003964PyObject*
Victor Stinner5cf47822020-11-02 22:03:28 +01003965ast2obj_expr(struct ast_state *state, void* _o)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00003966{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003967 expr_ty o = (expr_ty)_o;
3968 PyObject *result = NULL, *value = NULL;
Dino Viehlandac46eb42019-09-11 10:16:34 -07003969 PyTypeObject *tp;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003970 if (!o) {
Serhiy Storchaka228b12e2017-01-23 09:47:21 +02003971 Py_RETURN_NONE;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003972 }
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003973 switch (o->kind) {
3974 case BoolOp_kind:
Victor Stinner74419f02020-07-03 11:35:37 +02003975 tp = (PyTypeObject *)state->BoolOp_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07003976 result = PyType_GenericNew(tp, NULL, NULL);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003977 if (!result) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02003978 value = ast2obj_boolop(state, o->v.BoolOp.op);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003979 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02003980 if (PyObject_SetAttr(result, state->op, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003981 goto failed;
3982 Py_DECREF(value);
Pablo Galindoa5634c42020-09-16 19:42:00 +01003983 value = ast2obj_list(state, (asdl_seq*)o->v.BoolOp.values,
3984 ast2obj_expr);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003985 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02003986 if (PyObject_SetAttr(result, state->values, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003987 goto failed;
3988 Py_DECREF(value);
3989 break;
Emily Morehouse8f59ee02019-01-24 16:49:56 -07003990 case NamedExpr_kind:
Victor Stinner74419f02020-07-03 11:35:37 +02003991 tp = (PyTypeObject *)state->NamedExpr_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07003992 result = PyType_GenericNew(tp, NULL, NULL);
Emily Morehouse8f59ee02019-01-24 16:49:56 -07003993 if (!result) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02003994 value = ast2obj_expr(state, o->v.NamedExpr.target);
Emily Morehouse8f59ee02019-01-24 16:49:56 -07003995 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02003996 if (PyObject_SetAttr(result, state->target, value) == -1)
Emily Morehouse8f59ee02019-01-24 16:49:56 -07003997 goto failed;
3998 Py_DECREF(value);
Victor Stinner74419f02020-07-03 11:35:37 +02003999 value = ast2obj_expr(state, o->v.NamedExpr.value);
Emily Morehouse8f59ee02019-01-24 16:49:56 -07004000 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004001 if (PyObject_SetAttr(result, state->value, value) == -1)
Emily Morehouse8f59ee02019-01-24 16:49:56 -07004002 goto failed;
4003 Py_DECREF(value);
4004 break;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004005 case BinOp_kind:
Victor Stinner74419f02020-07-03 11:35:37 +02004006 tp = (PyTypeObject *)state->BinOp_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07004007 result = PyType_GenericNew(tp, NULL, NULL);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004008 if (!result) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004009 value = ast2obj_expr(state, o->v.BinOp.left);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004010 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004011 if (PyObject_SetAttr(result, state->left, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004012 goto failed;
4013 Py_DECREF(value);
Victor Stinner74419f02020-07-03 11:35:37 +02004014 value = ast2obj_operator(state, o->v.BinOp.op);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004015 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004016 if (PyObject_SetAttr(result, state->op, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004017 goto failed;
4018 Py_DECREF(value);
Victor Stinner74419f02020-07-03 11:35:37 +02004019 value = ast2obj_expr(state, o->v.BinOp.right);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004020 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004021 if (PyObject_SetAttr(result, state->right, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004022 goto failed;
4023 Py_DECREF(value);
4024 break;
4025 case UnaryOp_kind:
Victor Stinner74419f02020-07-03 11:35:37 +02004026 tp = (PyTypeObject *)state->UnaryOp_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07004027 result = PyType_GenericNew(tp, NULL, NULL);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004028 if (!result) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004029 value = ast2obj_unaryop(state, o->v.UnaryOp.op);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004030 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004031 if (PyObject_SetAttr(result, state->op, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004032 goto failed;
4033 Py_DECREF(value);
Victor Stinner74419f02020-07-03 11:35:37 +02004034 value = ast2obj_expr(state, o->v.UnaryOp.operand);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004035 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004036 if (PyObject_SetAttr(result, state->operand, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004037 goto failed;
4038 Py_DECREF(value);
4039 break;
4040 case Lambda_kind:
Victor Stinner74419f02020-07-03 11:35:37 +02004041 tp = (PyTypeObject *)state->Lambda_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07004042 result = PyType_GenericNew(tp, NULL, NULL);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004043 if (!result) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004044 value = ast2obj_arguments(state, o->v.Lambda.args);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004045 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004046 if (PyObject_SetAttr(result, state->args, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004047 goto failed;
4048 Py_DECREF(value);
Victor Stinner74419f02020-07-03 11:35:37 +02004049 value = ast2obj_expr(state, o->v.Lambda.body);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004050 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004051 if (PyObject_SetAttr(result, state->body, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004052 goto failed;
4053 Py_DECREF(value);
4054 break;
4055 case IfExp_kind:
Victor Stinner74419f02020-07-03 11:35:37 +02004056 tp = (PyTypeObject *)state->IfExp_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07004057 result = PyType_GenericNew(tp, NULL, NULL);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004058 if (!result) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004059 value = ast2obj_expr(state, o->v.IfExp.test);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004060 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004061 if (PyObject_SetAttr(result, state->test, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004062 goto failed;
4063 Py_DECREF(value);
Victor Stinner74419f02020-07-03 11:35:37 +02004064 value = ast2obj_expr(state, o->v.IfExp.body);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004065 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004066 if (PyObject_SetAttr(result, state->body, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004067 goto failed;
4068 Py_DECREF(value);
Victor Stinner74419f02020-07-03 11:35:37 +02004069 value = ast2obj_expr(state, o->v.IfExp.orelse);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004070 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004071 if (PyObject_SetAttr(result, state->orelse, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004072 goto failed;
4073 Py_DECREF(value);
4074 break;
4075 case Dict_kind:
Victor Stinner74419f02020-07-03 11:35:37 +02004076 tp = (PyTypeObject *)state->Dict_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07004077 result = PyType_GenericNew(tp, NULL, NULL);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004078 if (!result) goto failed;
Pablo Galindoa5634c42020-09-16 19:42:00 +01004079 value = ast2obj_list(state, (asdl_seq*)o->v.Dict.keys, ast2obj_expr);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004080 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004081 if (PyObject_SetAttr(result, state->keys, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004082 goto failed;
4083 Py_DECREF(value);
Pablo Galindoa5634c42020-09-16 19:42:00 +01004084 value = ast2obj_list(state, (asdl_seq*)o->v.Dict.values, ast2obj_expr);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004085 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004086 if (PyObject_SetAttr(result, state->values, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004087 goto failed;
4088 Py_DECREF(value);
4089 break;
4090 case Set_kind:
Victor Stinner74419f02020-07-03 11:35:37 +02004091 tp = (PyTypeObject *)state->Set_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07004092 result = PyType_GenericNew(tp, NULL, NULL);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004093 if (!result) goto failed;
Pablo Galindoa5634c42020-09-16 19:42:00 +01004094 value = ast2obj_list(state, (asdl_seq*)o->v.Set.elts, ast2obj_expr);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004095 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004096 if (PyObject_SetAttr(result, state->elts, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004097 goto failed;
4098 Py_DECREF(value);
4099 break;
4100 case ListComp_kind:
Victor Stinner74419f02020-07-03 11:35:37 +02004101 tp = (PyTypeObject *)state->ListComp_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07004102 result = PyType_GenericNew(tp, NULL, NULL);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004103 if (!result) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004104 value = ast2obj_expr(state, o->v.ListComp.elt);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004105 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004106 if (PyObject_SetAttr(result, state->elt, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004107 goto failed;
4108 Py_DECREF(value);
Pablo Galindoa5634c42020-09-16 19:42:00 +01004109 value = ast2obj_list(state, (asdl_seq*)o->v.ListComp.generators,
Victor Stinner74419f02020-07-03 11:35:37 +02004110 ast2obj_comprehension);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004111 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004112 if (PyObject_SetAttr(result, state->generators, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004113 goto failed;
4114 Py_DECREF(value);
4115 break;
4116 case SetComp_kind:
Victor Stinner74419f02020-07-03 11:35:37 +02004117 tp = (PyTypeObject *)state->SetComp_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07004118 result = PyType_GenericNew(tp, NULL, NULL);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004119 if (!result) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004120 value = ast2obj_expr(state, o->v.SetComp.elt);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004121 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004122 if (PyObject_SetAttr(result, state->elt, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004123 goto failed;
4124 Py_DECREF(value);
Pablo Galindoa5634c42020-09-16 19:42:00 +01004125 value = ast2obj_list(state, (asdl_seq*)o->v.SetComp.generators,
Victor Stinner74419f02020-07-03 11:35:37 +02004126 ast2obj_comprehension);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004127 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004128 if (PyObject_SetAttr(result, state->generators, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004129 goto failed;
4130 Py_DECREF(value);
4131 break;
4132 case DictComp_kind:
Victor Stinner74419f02020-07-03 11:35:37 +02004133 tp = (PyTypeObject *)state->DictComp_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07004134 result = PyType_GenericNew(tp, NULL, NULL);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004135 if (!result) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004136 value = ast2obj_expr(state, o->v.DictComp.key);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004137 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004138 if (PyObject_SetAttr(result, state->key, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004139 goto failed;
4140 Py_DECREF(value);
Victor Stinner74419f02020-07-03 11:35:37 +02004141 value = ast2obj_expr(state, o->v.DictComp.value);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004142 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004143 if (PyObject_SetAttr(result, state->value, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004144 goto failed;
4145 Py_DECREF(value);
Pablo Galindoa5634c42020-09-16 19:42:00 +01004146 value = ast2obj_list(state, (asdl_seq*)o->v.DictComp.generators,
Victor Stinner74419f02020-07-03 11:35:37 +02004147 ast2obj_comprehension);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004148 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004149 if (PyObject_SetAttr(result, state->generators, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004150 goto failed;
4151 Py_DECREF(value);
4152 break;
4153 case GeneratorExp_kind:
Victor Stinner74419f02020-07-03 11:35:37 +02004154 tp = (PyTypeObject *)state->GeneratorExp_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07004155 result = PyType_GenericNew(tp, NULL, NULL);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004156 if (!result) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004157 value = ast2obj_expr(state, o->v.GeneratorExp.elt);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004158 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004159 if (PyObject_SetAttr(result, state->elt, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004160 goto failed;
4161 Py_DECREF(value);
Pablo Galindoa5634c42020-09-16 19:42:00 +01004162 value = ast2obj_list(state, (asdl_seq*)o->v.GeneratorExp.generators,
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004163 ast2obj_comprehension);
4164 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004165 if (PyObject_SetAttr(result, state->generators, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004166 goto failed;
4167 Py_DECREF(value);
4168 break;
Yury Selivanov75445082015-05-11 22:57:16 -04004169 case Await_kind:
Victor Stinner74419f02020-07-03 11:35:37 +02004170 tp = (PyTypeObject *)state->Await_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07004171 result = PyType_GenericNew(tp, NULL, NULL);
Yury Selivanov75445082015-05-11 22:57:16 -04004172 if (!result) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004173 value = ast2obj_expr(state, o->v.Await.value);
Yury Selivanov75445082015-05-11 22:57:16 -04004174 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004175 if (PyObject_SetAttr(result, state->value, value) == -1)
Yury Selivanov75445082015-05-11 22:57:16 -04004176 goto failed;
4177 Py_DECREF(value);
4178 break;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004179 case Yield_kind:
Victor Stinner74419f02020-07-03 11:35:37 +02004180 tp = (PyTypeObject *)state->Yield_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07004181 result = PyType_GenericNew(tp, NULL, NULL);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004182 if (!result) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004183 value = ast2obj_expr(state, o->v.Yield.value);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004184 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004185 if (PyObject_SetAttr(result, state->value, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004186 goto failed;
4187 Py_DECREF(value);
4188 break;
4189 case YieldFrom_kind:
Victor Stinner74419f02020-07-03 11:35:37 +02004190 tp = (PyTypeObject *)state->YieldFrom_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07004191 result = PyType_GenericNew(tp, NULL, NULL);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004192 if (!result) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004193 value = ast2obj_expr(state, o->v.YieldFrom.value);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004194 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004195 if (PyObject_SetAttr(result, state->value, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004196 goto failed;
4197 Py_DECREF(value);
4198 break;
4199 case Compare_kind:
Victor Stinner74419f02020-07-03 11:35:37 +02004200 tp = (PyTypeObject *)state->Compare_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07004201 result = PyType_GenericNew(tp, NULL, NULL);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004202 if (!result) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004203 value = ast2obj_expr(state, o->v.Compare.left);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004204 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004205 if (PyObject_SetAttr(result, state->left, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004206 goto failed;
4207 Py_DECREF(value);
4208 {
4209 Py_ssize_t i, n = asdl_seq_LEN(o->v.Compare.ops);
4210 value = PyList_New(n);
4211 if (!value) goto failed;
4212 for(i = 0; i < n; i++)
Victor Stinner74419f02020-07-03 11:35:37 +02004213 PyList_SET_ITEM(value, i, ast2obj_cmpop(state, (cmpop_ty)asdl_seq_GET(o->v.Compare.ops, i)));
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00004214 }
Martin v. Löwis577b5b92006-02-27 15:23:19 +00004215 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004216 if (PyObject_SetAttr(result, state->ops, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004217 goto failed;
Martin v. Löwis03e5bc02006-03-02 00:31:27 +00004218 Py_DECREF(value);
Pablo Galindoa5634c42020-09-16 19:42:00 +01004219 value = ast2obj_list(state, (asdl_seq*)o->v.Compare.comparators,
4220 ast2obj_expr);
Martin v. Löwis49c5da12006-03-01 22:49:05 +00004221 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004222 if (PyObject_SetAttr(result, state->comparators, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004223 goto failed;
Martin v. Löwis03e5bc02006-03-02 00:31:27 +00004224 Py_DECREF(value);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004225 break;
4226 case Call_kind:
Victor Stinner74419f02020-07-03 11:35:37 +02004227 tp = (PyTypeObject *)state->Call_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07004228 result = PyType_GenericNew(tp, NULL, NULL);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004229 if (!result) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004230 value = ast2obj_expr(state, o->v.Call.func);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004231 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004232 if (PyObject_SetAttr(result, state->func, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004233 goto failed;
4234 Py_DECREF(value);
Pablo Galindoa5634c42020-09-16 19:42:00 +01004235 value = ast2obj_list(state, (asdl_seq*)o->v.Call.args, ast2obj_expr);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004236 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004237 if (PyObject_SetAttr(result, state->args, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004238 goto failed;
4239 Py_DECREF(value);
Pablo Galindoa5634c42020-09-16 19:42:00 +01004240 value = ast2obj_list(state, (asdl_seq*)o->v.Call.keywords,
4241 ast2obj_keyword);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004242 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004243 if (PyObject_SetAttr(result, state->keywords, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004244 goto failed;
4245 Py_DECREF(value);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004246 break;
Eric V. Smith235a6f02015-09-19 14:51:32 -04004247 case FormattedValue_kind:
Victor Stinner74419f02020-07-03 11:35:37 +02004248 tp = (PyTypeObject *)state->FormattedValue_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07004249 result = PyType_GenericNew(tp, NULL, NULL);
Eric V. Smith235a6f02015-09-19 14:51:32 -04004250 if (!result) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004251 value = ast2obj_expr(state, o->v.FormattedValue.value);
Eric V. Smith235a6f02015-09-19 14:51:32 -04004252 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004253 if (PyObject_SetAttr(result, state->value, value) == -1)
Eric V. Smith235a6f02015-09-19 14:51:32 -04004254 goto failed;
4255 Py_DECREF(value);
Victor Stinner74419f02020-07-03 11:35:37 +02004256 value = ast2obj_int(state, o->v.FormattedValue.conversion);
Eric V. Smith235a6f02015-09-19 14:51:32 -04004257 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004258 if (PyObject_SetAttr(result, state->conversion, value) == -1)
Eric V. Smith235a6f02015-09-19 14:51:32 -04004259 goto failed;
4260 Py_DECREF(value);
Victor Stinner74419f02020-07-03 11:35:37 +02004261 value = ast2obj_expr(state, o->v.FormattedValue.format_spec);
Eric V. Smith235a6f02015-09-19 14:51:32 -04004262 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004263 if (PyObject_SetAttr(result, state->format_spec, value) == -1)
Eric V. Smith235a6f02015-09-19 14:51:32 -04004264 goto failed;
4265 Py_DECREF(value);
4266 break;
4267 case JoinedStr_kind:
Victor Stinner74419f02020-07-03 11:35:37 +02004268 tp = (PyTypeObject *)state->JoinedStr_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07004269 result = PyType_GenericNew(tp, NULL, NULL);
Eric V. Smith235a6f02015-09-19 14:51:32 -04004270 if (!result) goto failed;
Pablo Galindoa5634c42020-09-16 19:42:00 +01004271 value = ast2obj_list(state, (asdl_seq*)o->v.JoinedStr.values,
4272 ast2obj_expr);
Eric V. Smith235a6f02015-09-19 14:51:32 -04004273 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004274 if (PyObject_SetAttr(result, state->values, value) == -1)
Eric V. Smith235a6f02015-09-19 14:51:32 -04004275 goto failed;
4276 Py_DECREF(value);
4277 break;
Victor Stinnerf2c1aa12016-01-26 00:40:57 +01004278 case Constant_kind:
Victor Stinner74419f02020-07-03 11:35:37 +02004279 tp = (PyTypeObject *)state->Constant_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07004280 result = PyType_GenericNew(tp, NULL, NULL);
Victor Stinnerf2c1aa12016-01-26 00:40:57 +01004281 if (!result) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004282 value = ast2obj_constant(state, o->v.Constant.value);
Victor Stinnerf2c1aa12016-01-26 00:40:57 +01004283 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004284 if (PyObject_SetAttr(result, state->value, value) == -1)
Victor Stinnerf2c1aa12016-01-26 00:40:57 +01004285 goto failed;
4286 Py_DECREF(value);
Victor Stinner74419f02020-07-03 11:35:37 +02004287 value = ast2obj_string(state, o->v.Constant.kind);
Guido van Rossum10f8ce62019-03-13 13:00:46 -07004288 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004289 if (PyObject_SetAttr(result, state->kind, value) == -1)
Guido van Rossum10f8ce62019-03-13 13:00:46 -07004290 goto failed;
4291 Py_DECREF(value);
Victor Stinnerf2c1aa12016-01-26 00:40:57 +01004292 break;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004293 case Attribute_kind:
Victor Stinner74419f02020-07-03 11:35:37 +02004294 tp = (PyTypeObject *)state->Attribute_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07004295 result = PyType_GenericNew(tp, NULL, NULL);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004296 if (!result) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004297 value = ast2obj_expr(state, o->v.Attribute.value);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004298 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004299 if (PyObject_SetAttr(result, state->value, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004300 goto failed;
4301 Py_DECREF(value);
Victor Stinner74419f02020-07-03 11:35:37 +02004302 value = ast2obj_identifier(state, o->v.Attribute.attr);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004303 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004304 if (PyObject_SetAttr(result, state->attr, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004305 goto failed;
4306 Py_DECREF(value);
Victor Stinner74419f02020-07-03 11:35:37 +02004307 value = ast2obj_expr_context(state, o->v.Attribute.ctx);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004308 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004309 if (PyObject_SetAttr(result, state->ctx, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004310 goto failed;
4311 Py_DECREF(value);
4312 break;
4313 case Subscript_kind:
Victor Stinner74419f02020-07-03 11:35:37 +02004314 tp = (PyTypeObject *)state->Subscript_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07004315 result = PyType_GenericNew(tp, NULL, NULL);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004316 if (!result) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004317 value = ast2obj_expr(state, o->v.Subscript.value);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004318 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004319 if (PyObject_SetAttr(result, state->value, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004320 goto failed;
4321 Py_DECREF(value);
Victor Stinner74419f02020-07-03 11:35:37 +02004322 value = ast2obj_expr(state, o->v.Subscript.slice);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004323 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004324 if (PyObject_SetAttr(result, state->slice, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004325 goto failed;
4326 Py_DECREF(value);
Victor Stinner74419f02020-07-03 11:35:37 +02004327 value = ast2obj_expr_context(state, o->v.Subscript.ctx);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004328 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004329 if (PyObject_SetAttr(result, state->ctx, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004330 goto failed;
4331 Py_DECREF(value);
4332 break;
4333 case Starred_kind:
Victor Stinner74419f02020-07-03 11:35:37 +02004334 tp = (PyTypeObject *)state->Starred_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07004335 result = PyType_GenericNew(tp, NULL, NULL);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004336 if (!result) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004337 value = ast2obj_expr(state, o->v.Starred.value);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004338 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004339 if (PyObject_SetAttr(result, state->value, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004340 goto failed;
4341 Py_DECREF(value);
Victor Stinner74419f02020-07-03 11:35:37 +02004342 value = ast2obj_expr_context(state, o->v.Starred.ctx);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004343 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004344 if (PyObject_SetAttr(result, state->ctx, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004345 goto failed;
4346 Py_DECREF(value);
4347 break;
4348 case Name_kind:
Victor Stinner74419f02020-07-03 11:35:37 +02004349 tp = (PyTypeObject *)state->Name_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07004350 result = PyType_GenericNew(tp, NULL, NULL);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004351 if (!result) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004352 value = ast2obj_identifier(state, o->v.Name.id);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004353 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004354 if (PyObject_SetAttr(result, state->id, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004355 goto failed;
4356 Py_DECREF(value);
Victor Stinner74419f02020-07-03 11:35:37 +02004357 value = ast2obj_expr_context(state, o->v.Name.ctx);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004358 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004359 if (PyObject_SetAttr(result, state->ctx, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004360 goto failed;
4361 Py_DECREF(value);
4362 break;
4363 case List_kind:
Victor Stinner74419f02020-07-03 11:35:37 +02004364 tp = (PyTypeObject *)state->List_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07004365 result = PyType_GenericNew(tp, NULL, NULL);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004366 if (!result) goto failed;
Pablo Galindoa5634c42020-09-16 19:42:00 +01004367 value = ast2obj_list(state, (asdl_seq*)o->v.List.elts, ast2obj_expr);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004368 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004369 if (PyObject_SetAttr(result, state->elts, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004370 goto failed;
4371 Py_DECREF(value);
Victor Stinner74419f02020-07-03 11:35:37 +02004372 value = ast2obj_expr_context(state, o->v.List.ctx);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004373 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004374 if (PyObject_SetAttr(result, state->ctx, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004375 goto failed;
4376 Py_DECREF(value);
4377 break;
4378 case Tuple_kind:
Victor Stinner74419f02020-07-03 11:35:37 +02004379 tp = (PyTypeObject *)state->Tuple_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07004380 result = PyType_GenericNew(tp, NULL, NULL);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004381 if (!result) goto failed;
Pablo Galindoa5634c42020-09-16 19:42:00 +01004382 value = ast2obj_list(state, (asdl_seq*)o->v.Tuple.elts, ast2obj_expr);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004383 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004384 if (PyObject_SetAttr(result, state->elts, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004385 goto failed;
4386 Py_DECREF(value);
Victor Stinner74419f02020-07-03 11:35:37 +02004387 value = ast2obj_expr_context(state, o->v.Tuple.ctx);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004388 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004389 if (PyObject_SetAttr(result, state->ctx, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004390 goto failed;
4391 Py_DECREF(value);
4392 break;
Serhiy Storchaka13d52c22020-03-10 18:52:34 +02004393 case Slice_kind:
Victor Stinner74419f02020-07-03 11:35:37 +02004394 tp = (PyTypeObject *)state->Slice_type;
Serhiy Storchaka13d52c22020-03-10 18:52:34 +02004395 result = PyType_GenericNew(tp, NULL, NULL);
4396 if (!result) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004397 value = ast2obj_expr(state, o->v.Slice.lower);
Serhiy Storchaka13d52c22020-03-10 18:52:34 +02004398 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004399 if (PyObject_SetAttr(result, state->lower, value) == -1)
Serhiy Storchaka13d52c22020-03-10 18:52:34 +02004400 goto failed;
4401 Py_DECREF(value);
Victor Stinner74419f02020-07-03 11:35:37 +02004402 value = ast2obj_expr(state, o->v.Slice.upper);
Serhiy Storchaka13d52c22020-03-10 18:52:34 +02004403 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004404 if (PyObject_SetAttr(result, state->upper, value) == -1)
Serhiy Storchaka13d52c22020-03-10 18:52:34 +02004405 goto failed;
4406 Py_DECREF(value);
Victor Stinner74419f02020-07-03 11:35:37 +02004407 value = ast2obj_expr(state, o->v.Slice.step);
Serhiy Storchaka13d52c22020-03-10 18:52:34 +02004408 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004409 if (PyObject_SetAttr(result, state->step, value) == -1)
Serhiy Storchaka13d52c22020-03-10 18:52:34 +02004410 goto failed;
4411 Py_DECREF(value);
4412 break;
Brandt Bucher145bf262021-02-26 14:51:55 -08004413 case MatchAs_kind:
4414 tp = (PyTypeObject *)state->MatchAs_type;
4415 result = PyType_GenericNew(tp, NULL, NULL);
4416 if (!result) goto failed;
4417 value = ast2obj_expr(state, o->v.MatchAs.pattern);
4418 if (!value) goto failed;
4419 if (PyObject_SetAttr(result, state->pattern, value) == -1)
4420 goto failed;
4421 Py_DECREF(value);
4422 value = ast2obj_identifier(state, o->v.MatchAs.name);
4423 if (!value) goto failed;
4424 if (PyObject_SetAttr(result, state->name, value) == -1)
4425 goto failed;
4426 Py_DECREF(value);
4427 break;
4428 case MatchOr_kind:
4429 tp = (PyTypeObject *)state->MatchOr_type;
4430 result = PyType_GenericNew(tp, NULL, NULL);
4431 if (!result) goto failed;
4432 value = ast2obj_list(state, (asdl_seq*)o->v.MatchOr.patterns,
4433 ast2obj_expr);
4434 if (!value) goto failed;
4435 if (PyObject_SetAttr(result, state->patterns, value) == -1)
4436 goto failed;
4437 Py_DECREF(value);
4438 break;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004439 }
Victor Stinner74419f02020-07-03 11:35:37 +02004440 value = ast2obj_int(state, o->lineno);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004441 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004442 if (PyObject_SetAttr(result, state->lineno, value) < 0)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004443 goto failed;
4444 Py_DECREF(value);
Victor Stinner74419f02020-07-03 11:35:37 +02004445 value = ast2obj_int(state, o->col_offset);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004446 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004447 if (PyObject_SetAttr(result, state->col_offset, value) < 0)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004448 goto failed;
4449 Py_DECREF(value);
Victor Stinner74419f02020-07-03 11:35:37 +02004450 value = ast2obj_int(state, o->end_lineno);
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00004451 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004452 if (PyObject_SetAttr(result, state->end_lineno, value) < 0)
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00004453 goto failed;
4454 Py_DECREF(value);
Victor Stinner74419f02020-07-03 11:35:37 +02004455 value = ast2obj_int(state, o->end_col_offset);
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00004456 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004457 if (PyObject_SetAttr(result, state->end_col_offset, value) < 0)
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00004458 goto failed;
4459 Py_DECREF(value);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004460 return result;
Martin v. Löwisbd260da2006-02-26 19:42:26 +00004461failed:
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004462 Py_XDECREF(value);
4463 Py_XDECREF(result);
4464 return NULL;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00004465}
4466
Victor Stinner5cf47822020-11-02 22:03:28 +01004467PyObject* ast2obj_expr_context(struct ast_state *state, expr_context_ty o)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00004468{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004469 switch(o) {
4470 case Load:
Victor Stinner74419f02020-07-03 11:35:37 +02004471 Py_INCREF(state->Load_singleton);
4472 return state->Load_singleton;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004473 case Store:
Victor Stinner74419f02020-07-03 11:35:37 +02004474 Py_INCREF(state->Store_singleton);
4475 return state->Store_singleton;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004476 case Del:
Victor Stinner74419f02020-07-03 11:35:37 +02004477 Py_INCREF(state->Del_singleton);
4478 return state->Del_singleton;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004479 }
Batuhan Taskaya091951a2020-05-06 17:29:32 +03004480 Py_UNREACHABLE();
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00004481}
Victor Stinner5cf47822020-11-02 22:03:28 +01004482PyObject* ast2obj_boolop(struct ast_state *state, boolop_ty o)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00004483{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004484 switch(o) {
4485 case And:
Victor Stinner74419f02020-07-03 11:35:37 +02004486 Py_INCREF(state->And_singleton);
4487 return state->And_singleton;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004488 case Or:
Victor Stinner74419f02020-07-03 11:35:37 +02004489 Py_INCREF(state->Or_singleton);
4490 return state->Or_singleton;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004491 }
Batuhan Taskaya091951a2020-05-06 17:29:32 +03004492 Py_UNREACHABLE();
Martin v. Löwisbd260da2006-02-26 19:42:26 +00004493}
Victor Stinner5cf47822020-11-02 22:03:28 +01004494PyObject* ast2obj_operator(struct ast_state *state, operator_ty o)
Martin v. Löwisbd260da2006-02-26 19:42:26 +00004495{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004496 switch(o) {
4497 case Add:
Victor Stinner74419f02020-07-03 11:35:37 +02004498 Py_INCREF(state->Add_singleton);
4499 return state->Add_singleton;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004500 case Sub:
Victor Stinner74419f02020-07-03 11:35:37 +02004501 Py_INCREF(state->Sub_singleton);
4502 return state->Sub_singleton;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004503 case Mult:
Victor Stinner74419f02020-07-03 11:35:37 +02004504 Py_INCREF(state->Mult_singleton);
4505 return state->Mult_singleton;
Benjamin Petersond51374e2014-04-09 23:55:56 -04004506 case MatMult:
Victor Stinner74419f02020-07-03 11:35:37 +02004507 Py_INCREF(state->MatMult_singleton);
4508 return state->MatMult_singleton;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004509 case Div:
Victor Stinner74419f02020-07-03 11:35:37 +02004510 Py_INCREF(state->Div_singleton);
4511 return state->Div_singleton;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004512 case Mod:
Victor Stinner74419f02020-07-03 11:35:37 +02004513 Py_INCREF(state->Mod_singleton);
4514 return state->Mod_singleton;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004515 case Pow:
Victor Stinner74419f02020-07-03 11:35:37 +02004516 Py_INCREF(state->Pow_singleton);
4517 return state->Pow_singleton;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004518 case LShift:
Victor Stinner74419f02020-07-03 11:35:37 +02004519 Py_INCREF(state->LShift_singleton);
4520 return state->LShift_singleton;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004521 case RShift:
Victor Stinner74419f02020-07-03 11:35:37 +02004522 Py_INCREF(state->RShift_singleton);
4523 return state->RShift_singleton;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004524 case BitOr:
Victor Stinner74419f02020-07-03 11:35:37 +02004525 Py_INCREF(state->BitOr_singleton);
4526 return state->BitOr_singleton;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004527 case BitXor:
Victor Stinner74419f02020-07-03 11:35:37 +02004528 Py_INCREF(state->BitXor_singleton);
4529 return state->BitXor_singleton;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004530 case BitAnd:
Victor Stinner74419f02020-07-03 11:35:37 +02004531 Py_INCREF(state->BitAnd_singleton);
4532 return state->BitAnd_singleton;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004533 case FloorDiv:
Victor Stinner74419f02020-07-03 11:35:37 +02004534 Py_INCREF(state->FloorDiv_singleton);
4535 return state->FloorDiv_singleton;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004536 }
Batuhan Taskaya091951a2020-05-06 17:29:32 +03004537 Py_UNREACHABLE();
Martin v. Löwisbd260da2006-02-26 19:42:26 +00004538}
Victor Stinner5cf47822020-11-02 22:03:28 +01004539PyObject* ast2obj_unaryop(struct ast_state *state, unaryop_ty o)
Martin v. Löwisbd260da2006-02-26 19:42:26 +00004540{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004541 switch(o) {
4542 case Invert:
Victor Stinner74419f02020-07-03 11:35:37 +02004543 Py_INCREF(state->Invert_singleton);
4544 return state->Invert_singleton;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004545 case Not:
Victor Stinner74419f02020-07-03 11:35:37 +02004546 Py_INCREF(state->Not_singleton);
4547 return state->Not_singleton;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004548 case UAdd:
Victor Stinner74419f02020-07-03 11:35:37 +02004549 Py_INCREF(state->UAdd_singleton);
4550 return state->UAdd_singleton;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004551 case USub:
Victor Stinner74419f02020-07-03 11:35:37 +02004552 Py_INCREF(state->USub_singleton);
4553 return state->USub_singleton;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004554 }
Batuhan Taskaya091951a2020-05-06 17:29:32 +03004555 Py_UNREACHABLE();
Martin v. Löwisbd260da2006-02-26 19:42:26 +00004556}
Victor Stinner5cf47822020-11-02 22:03:28 +01004557PyObject* ast2obj_cmpop(struct ast_state *state, cmpop_ty o)
Martin v. Löwisbd260da2006-02-26 19:42:26 +00004558{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004559 switch(o) {
4560 case Eq:
Victor Stinner74419f02020-07-03 11:35:37 +02004561 Py_INCREF(state->Eq_singleton);
4562 return state->Eq_singleton;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004563 case NotEq:
Victor Stinner74419f02020-07-03 11:35:37 +02004564 Py_INCREF(state->NotEq_singleton);
4565 return state->NotEq_singleton;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004566 case Lt:
Victor Stinner74419f02020-07-03 11:35:37 +02004567 Py_INCREF(state->Lt_singleton);
4568 return state->Lt_singleton;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004569 case LtE:
Victor Stinner74419f02020-07-03 11:35:37 +02004570 Py_INCREF(state->LtE_singleton);
4571 return state->LtE_singleton;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004572 case Gt:
Victor Stinner74419f02020-07-03 11:35:37 +02004573 Py_INCREF(state->Gt_singleton);
4574 return state->Gt_singleton;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004575 case GtE:
Victor Stinner74419f02020-07-03 11:35:37 +02004576 Py_INCREF(state->GtE_singleton);
4577 return state->GtE_singleton;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004578 case Is:
Victor Stinner74419f02020-07-03 11:35:37 +02004579 Py_INCREF(state->Is_singleton);
4580 return state->Is_singleton;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004581 case IsNot:
Victor Stinner74419f02020-07-03 11:35:37 +02004582 Py_INCREF(state->IsNot_singleton);
4583 return state->IsNot_singleton;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004584 case In:
Victor Stinner74419f02020-07-03 11:35:37 +02004585 Py_INCREF(state->In_singleton);
4586 return state->In_singleton;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004587 case NotIn:
Victor Stinner74419f02020-07-03 11:35:37 +02004588 Py_INCREF(state->NotIn_singleton);
4589 return state->NotIn_singleton;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004590 }
Batuhan Taskaya091951a2020-05-06 17:29:32 +03004591 Py_UNREACHABLE();
Martin v. Löwisbd260da2006-02-26 19:42:26 +00004592}
4593PyObject*
Victor Stinner5cf47822020-11-02 22:03:28 +01004594ast2obj_comprehension(struct ast_state *state, void* _o)
Martin v. Löwisbd260da2006-02-26 19:42:26 +00004595{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004596 comprehension_ty o = (comprehension_ty)_o;
4597 PyObject *result = NULL, *value = NULL;
Dino Viehlandac46eb42019-09-11 10:16:34 -07004598 PyTypeObject *tp;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004599 if (!o) {
Serhiy Storchaka228b12e2017-01-23 09:47:21 +02004600 Py_RETURN_NONE;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004601 }
Victor Stinner74419f02020-07-03 11:35:37 +02004602 tp = (PyTypeObject *)state->comprehension_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07004603 result = PyType_GenericNew(tp, NULL, NULL);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004604 if (!result) return NULL;
Victor Stinner74419f02020-07-03 11:35:37 +02004605 value = ast2obj_expr(state, o->target);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004606 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004607 if (PyObject_SetAttr(result, state->target, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004608 goto failed;
4609 Py_DECREF(value);
Victor Stinner74419f02020-07-03 11:35:37 +02004610 value = ast2obj_expr(state, o->iter);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004611 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004612 if (PyObject_SetAttr(result, state->iter, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004613 goto failed;
4614 Py_DECREF(value);
Pablo Galindoa5634c42020-09-16 19:42:00 +01004615 value = ast2obj_list(state, (asdl_seq*)o->ifs, ast2obj_expr);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004616 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004617 if (PyObject_SetAttr(result, state->ifs, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004618 goto failed;
4619 Py_DECREF(value);
Victor Stinner74419f02020-07-03 11:35:37 +02004620 value = ast2obj_int(state, o->is_async);
Yury Selivanov52c4e7c2016-09-09 10:36:01 -07004621 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004622 if (PyObject_SetAttr(result, state->is_async, value) == -1)
Yury Selivanov52c4e7c2016-09-09 10:36:01 -07004623 goto failed;
4624 Py_DECREF(value);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004625 return result;
Martin v. Löwisbd260da2006-02-26 19:42:26 +00004626failed:
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004627 Py_XDECREF(value);
4628 Py_XDECREF(result);
4629 return NULL;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00004630}
4631
Martin v. Löwisbd260da2006-02-26 19:42:26 +00004632PyObject*
Victor Stinner5cf47822020-11-02 22:03:28 +01004633ast2obj_excepthandler(struct ast_state *state, void* _o)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00004634{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004635 excepthandler_ty o = (excepthandler_ty)_o;
4636 PyObject *result = NULL, *value = NULL;
Dino Viehlandac46eb42019-09-11 10:16:34 -07004637 PyTypeObject *tp;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004638 if (!o) {
Serhiy Storchaka228b12e2017-01-23 09:47:21 +02004639 Py_RETURN_NONE;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004640 }
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004641 switch (o->kind) {
4642 case ExceptHandler_kind:
Victor Stinner74419f02020-07-03 11:35:37 +02004643 tp = (PyTypeObject *)state->ExceptHandler_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07004644 result = PyType_GenericNew(tp, NULL, NULL);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004645 if (!result) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004646 value = ast2obj_expr(state, o->v.ExceptHandler.type);
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00004647 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004648 if (PyObject_SetAttr(result, state->type, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004649 goto failed;
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00004650 Py_DECREF(value);
Victor Stinner74419f02020-07-03 11:35:37 +02004651 value = ast2obj_identifier(state, o->v.ExceptHandler.name);
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00004652 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004653 if (PyObject_SetAttr(result, state->name, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004654 goto failed;
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00004655 Py_DECREF(value);
Pablo Galindoa5634c42020-09-16 19:42:00 +01004656 value = ast2obj_list(state, (asdl_seq*)o->v.ExceptHandler.body,
4657 ast2obj_stmt);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004658 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004659 if (PyObject_SetAttr(result, state->body, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004660 goto failed;
4661 Py_DECREF(value);
4662 break;
4663 }
Victor Stinner74419f02020-07-03 11:35:37 +02004664 value = ast2obj_int(state, o->lineno);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004665 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004666 if (PyObject_SetAttr(result, state->lineno, value) < 0)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004667 goto failed;
4668 Py_DECREF(value);
Victor Stinner74419f02020-07-03 11:35:37 +02004669 value = ast2obj_int(state, o->col_offset);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004670 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004671 if (PyObject_SetAttr(result, state->col_offset, value) < 0)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004672 goto failed;
4673 Py_DECREF(value);
Victor Stinner74419f02020-07-03 11:35:37 +02004674 value = ast2obj_int(state, o->end_lineno);
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00004675 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004676 if (PyObject_SetAttr(result, state->end_lineno, value) < 0)
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00004677 goto failed;
4678 Py_DECREF(value);
Victor Stinner74419f02020-07-03 11:35:37 +02004679 value = ast2obj_int(state, o->end_col_offset);
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00004680 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004681 if (PyObject_SetAttr(result, state->end_col_offset, value) < 0)
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00004682 goto failed;
4683 Py_DECREF(value);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004684 return result;
Martin v. Löwisbd260da2006-02-26 19:42:26 +00004685failed:
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004686 Py_XDECREF(value);
4687 Py_XDECREF(result);
4688 return NULL;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00004689}
4690
Martin v. Löwisbd260da2006-02-26 19:42:26 +00004691PyObject*
Victor Stinner5cf47822020-11-02 22:03:28 +01004692ast2obj_arguments(struct ast_state *state, void* _o)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00004693{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004694 arguments_ty o = (arguments_ty)_o;
4695 PyObject *result = NULL, *value = NULL;
Dino Viehlandac46eb42019-09-11 10:16:34 -07004696 PyTypeObject *tp;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004697 if (!o) {
Serhiy Storchaka228b12e2017-01-23 09:47:21 +02004698 Py_RETURN_NONE;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004699 }
Victor Stinner74419f02020-07-03 11:35:37 +02004700 tp = (PyTypeObject *)state->arguments_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07004701 result = PyType_GenericNew(tp, NULL, NULL);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004702 if (!result) return NULL;
Pablo Galindoa5634c42020-09-16 19:42:00 +01004703 value = ast2obj_list(state, (asdl_seq*)o->posonlyargs, ast2obj_arg);
Pablo Galindo8c77b8c2019-04-29 13:36:57 +01004704 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004705 if (PyObject_SetAttr(result, state->posonlyargs, value) == -1)
Pablo Galindo8c77b8c2019-04-29 13:36:57 +01004706 goto failed;
4707 Py_DECREF(value);
Pablo Galindoa5634c42020-09-16 19:42:00 +01004708 value = ast2obj_list(state, (asdl_seq*)o->args, ast2obj_arg);
Pablo Galindocd6e83b2019-07-15 01:32:18 +02004709 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004710 if (PyObject_SetAttr(result, state->args, value) == -1)
Pablo Galindocd6e83b2019-07-15 01:32:18 +02004711 goto failed;
4712 Py_DECREF(value);
Victor Stinner74419f02020-07-03 11:35:37 +02004713 value = ast2obj_arg(state, o->vararg);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004714 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004715 if (PyObject_SetAttr(result, state->vararg, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004716 goto failed;
4717 Py_DECREF(value);
Pablo Galindoa5634c42020-09-16 19:42:00 +01004718 value = ast2obj_list(state, (asdl_seq*)o->kwonlyargs, ast2obj_arg);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004719 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004720 if (PyObject_SetAttr(result, state->kwonlyargs, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004721 goto failed;
4722 Py_DECREF(value);
Pablo Galindoa5634c42020-09-16 19:42:00 +01004723 value = ast2obj_list(state, (asdl_seq*)o->kw_defaults, ast2obj_expr);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004724 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004725 if (PyObject_SetAttr(result, state->kw_defaults, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004726 goto failed;
4727 Py_DECREF(value);
Victor Stinner74419f02020-07-03 11:35:37 +02004728 value = ast2obj_arg(state, o->kwarg);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004729 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004730 if (PyObject_SetAttr(result, state->kwarg, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004731 goto failed;
4732 Py_DECREF(value);
Pablo Galindoa5634c42020-09-16 19:42:00 +01004733 value = ast2obj_list(state, (asdl_seq*)o->defaults, ast2obj_expr);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004734 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004735 if (PyObject_SetAttr(result, state->defaults, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004736 goto failed;
4737 Py_DECREF(value);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004738 return result;
Martin v. Löwisbd260da2006-02-26 19:42:26 +00004739failed:
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004740 Py_XDECREF(value);
4741 Py_XDECREF(result);
4742 return NULL;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00004743}
4744
Martin v. Löwisbd260da2006-02-26 19:42:26 +00004745PyObject*
Victor Stinner5cf47822020-11-02 22:03:28 +01004746ast2obj_arg(struct ast_state *state, void* _o)
Neal Norwitzc1505362006-12-28 06:47:50 +00004747{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004748 arg_ty o = (arg_ty)_o;
4749 PyObject *result = NULL, *value = NULL;
Dino Viehlandac46eb42019-09-11 10:16:34 -07004750 PyTypeObject *tp;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004751 if (!o) {
Serhiy Storchaka228b12e2017-01-23 09:47:21 +02004752 Py_RETURN_NONE;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004753 }
Victor Stinner74419f02020-07-03 11:35:37 +02004754 tp = (PyTypeObject *)state->arg_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07004755 result = PyType_GenericNew(tp, NULL, NULL);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004756 if (!result) return NULL;
Victor Stinner74419f02020-07-03 11:35:37 +02004757 value = ast2obj_identifier(state, o->arg);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004758 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004759 if (PyObject_SetAttr(result, state->arg, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004760 goto failed;
4761 Py_DECREF(value);
Victor Stinner74419f02020-07-03 11:35:37 +02004762 value = ast2obj_expr(state, o->annotation);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004763 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004764 if (PyObject_SetAttr(result, state->annotation, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004765 goto failed;
4766 Py_DECREF(value);
Victor Stinner74419f02020-07-03 11:35:37 +02004767 value = ast2obj_string(state, o->type_comment);
Guido van Rossumdcfcd142019-01-31 03:40:27 -08004768 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004769 if (PyObject_SetAttr(result, state->type_comment, value) == -1)
Guido van Rossumdcfcd142019-01-31 03:40:27 -08004770 goto failed;
4771 Py_DECREF(value);
Victor Stinner74419f02020-07-03 11:35:37 +02004772 value = ast2obj_int(state, o->lineno);
Victor Stinneree4b59c2013-07-27 00:01:35 +02004773 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004774 if (PyObject_SetAttr(result, state->lineno, value) < 0)
Victor Stinneree4b59c2013-07-27 00:01:35 +02004775 goto failed;
4776 Py_DECREF(value);
Victor Stinner74419f02020-07-03 11:35:37 +02004777 value = ast2obj_int(state, o->col_offset);
Victor Stinneree4b59c2013-07-27 00:01:35 +02004778 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004779 if (PyObject_SetAttr(result, state->col_offset, value) < 0)
Victor Stinneree4b59c2013-07-27 00:01:35 +02004780 goto failed;
4781 Py_DECREF(value);
Victor Stinner74419f02020-07-03 11:35:37 +02004782 value = ast2obj_int(state, o->end_lineno);
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00004783 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004784 if (PyObject_SetAttr(result, state->end_lineno, value) < 0)
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00004785 goto failed;
4786 Py_DECREF(value);
Victor Stinner74419f02020-07-03 11:35:37 +02004787 value = ast2obj_int(state, o->end_col_offset);
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00004788 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004789 if (PyObject_SetAttr(result, state->end_col_offset, value) < 0)
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00004790 goto failed;
4791 Py_DECREF(value);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004792 return result;
Neal Norwitzc1505362006-12-28 06:47:50 +00004793failed:
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004794 Py_XDECREF(value);
4795 Py_XDECREF(result);
4796 return NULL;
Neal Norwitzc1505362006-12-28 06:47:50 +00004797}
4798
4799PyObject*
Victor Stinner5cf47822020-11-02 22:03:28 +01004800ast2obj_keyword(struct ast_state *state, void* _o)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00004801{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004802 keyword_ty o = (keyword_ty)_o;
4803 PyObject *result = NULL, *value = NULL;
Dino Viehlandac46eb42019-09-11 10:16:34 -07004804 PyTypeObject *tp;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004805 if (!o) {
Serhiy Storchaka228b12e2017-01-23 09:47:21 +02004806 Py_RETURN_NONE;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004807 }
Victor Stinner74419f02020-07-03 11:35:37 +02004808 tp = (PyTypeObject *)state->keyword_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07004809 result = PyType_GenericNew(tp, NULL, NULL);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004810 if (!result) return NULL;
Victor Stinner74419f02020-07-03 11:35:37 +02004811 value = ast2obj_identifier(state, o->arg);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004812 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004813 if (PyObject_SetAttr(result, state->arg, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004814 goto failed;
4815 Py_DECREF(value);
Victor Stinner74419f02020-07-03 11:35:37 +02004816 value = ast2obj_expr(state, o->value);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004817 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004818 if (PyObject_SetAttr(result, state->value, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004819 goto failed;
4820 Py_DECREF(value);
Victor Stinner74419f02020-07-03 11:35:37 +02004821 value = ast2obj_int(state, o->lineno);
Pablo Galindo168660b2020-04-02 00:47:39 +01004822 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004823 if (PyObject_SetAttr(result, state->lineno, value) < 0)
Pablo Galindo168660b2020-04-02 00:47:39 +01004824 goto failed;
4825 Py_DECREF(value);
Victor Stinner74419f02020-07-03 11:35:37 +02004826 value = ast2obj_int(state, o->col_offset);
Pablo Galindo168660b2020-04-02 00:47:39 +01004827 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004828 if (PyObject_SetAttr(result, state->col_offset, value) < 0)
Pablo Galindo168660b2020-04-02 00:47:39 +01004829 goto failed;
4830 Py_DECREF(value);
Victor Stinner74419f02020-07-03 11:35:37 +02004831 value = ast2obj_int(state, o->end_lineno);
Pablo Galindo168660b2020-04-02 00:47:39 +01004832 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004833 if (PyObject_SetAttr(result, state->end_lineno, value) < 0)
Pablo Galindo168660b2020-04-02 00:47:39 +01004834 goto failed;
4835 Py_DECREF(value);
Victor Stinner74419f02020-07-03 11:35:37 +02004836 value = ast2obj_int(state, o->end_col_offset);
Pablo Galindo168660b2020-04-02 00:47:39 +01004837 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004838 if (PyObject_SetAttr(result, state->end_col_offset, value) < 0)
Pablo Galindo168660b2020-04-02 00:47:39 +01004839 goto failed;
4840 Py_DECREF(value);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004841 return result;
Martin v. Löwisbd260da2006-02-26 19:42:26 +00004842failed:
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004843 Py_XDECREF(value);
4844 Py_XDECREF(result);
4845 return NULL;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00004846}
4847
Martin v. Löwisbd260da2006-02-26 19:42:26 +00004848PyObject*
Victor Stinner5cf47822020-11-02 22:03:28 +01004849ast2obj_alias(struct ast_state *state, void* _o)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00004850{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004851 alias_ty o = (alias_ty)_o;
4852 PyObject *result = NULL, *value = NULL;
Dino Viehlandac46eb42019-09-11 10:16:34 -07004853 PyTypeObject *tp;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004854 if (!o) {
Serhiy Storchaka228b12e2017-01-23 09:47:21 +02004855 Py_RETURN_NONE;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004856 }
Victor Stinner74419f02020-07-03 11:35:37 +02004857 tp = (PyTypeObject *)state->alias_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07004858 result = PyType_GenericNew(tp, NULL, NULL);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004859 if (!result) return NULL;
Victor Stinner74419f02020-07-03 11:35:37 +02004860 value = ast2obj_identifier(state, o->name);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004861 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004862 if (PyObject_SetAttr(result, state->name, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004863 goto failed;
4864 Py_DECREF(value);
Victor Stinner74419f02020-07-03 11:35:37 +02004865 value = ast2obj_identifier(state, o->asname);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004866 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004867 if (PyObject_SetAttr(result, state->asname, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004868 goto failed;
4869 Py_DECREF(value);
Matthew Suozzo75a06f02021-04-10 16:56:28 -04004870 value = ast2obj_int(state, o->lineno);
4871 if (!value) goto failed;
4872 if (PyObject_SetAttr(result, state->lineno, value) < 0)
4873 goto failed;
4874 Py_DECREF(value);
4875 value = ast2obj_int(state, o->col_offset);
4876 if (!value) goto failed;
4877 if (PyObject_SetAttr(result, state->col_offset, value) < 0)
4878 goto failed;
4879 Py_DECREF(value);
4880 value = ast2obj_int(state, o->end_lineno);
4881 if (!value) goto failed;
4882 if (PyObject_SetAttr(result, state->end_lineno, value) < 0)
4883 goto failed;
4884 Py_DECREF(value);
4885 value = ast2obj_int(state, o->end_col_offset);
4886 if (!value) goto failed;
4887 if (PyObject_SetAttr(result, state->end_col_offset, value) < 0)
4888 goto failed;
4889 Py_DECREF(value);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004890 return result;
Martin v. Löwisbd260da2006-02-26 19:42:26 +00004891failed:
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004892 Py_XDECREF(value);
4893 Py_XDECREF(result);
4894 return NULL;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00004895}
4896
Benjamin Petersonbf1bbc12011-05-27 13:58:08 -05004897PyObject*
Victor Stinner5cf47822020-11-02 22:03:28 +01004898ast2obj_withitem(struct ast_state *state, void* _o)
Benjamin Petersonbf1bbc12011-05-27 13:58:08 -05004899{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004900 withitem_ty o = (withitem_ty)_o;
4901 PyObject *result = NULL, *value = NULL;
Dino Viehlandac46eb42019-09-11 10:16:34 -07004902 PyTypeObject *tp;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004903 if (!o) {
Serhiy Storchaka228b12e2017-01-23 09:47:21 +02004904 Py_RETURN_NONE;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004905 }
Victor Stinner74419f02020-07-03 11:35:37 +02004906 tp = (PyTypeObject *)state->withitem_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07004907 result = PyType_GenericNew(tp, NULL, NULL);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004908 if (!result) return NULL;
Victor Stinner74419f02020-07-03 11:35:37 +02004909 value = ast2obj_expr(state, o->context_expr);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004910 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004911 if (PyObject_SetAttr(result, state->context_expr, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004912 goto failed;
4913 Py_DECREF(value);
Victor Stinner74419f02020-07-03 11:35:37 +02004914 value = ast2obj_expr(state, o->optional_vars);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004915 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004916 if (PyObject_SetAttr(result, state->optional_vars, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004917 goto failed;
4918 Py_DECREF(value);
4919 return result;
Benjamin Petersonbf1bbc12011-05-27 13:58:08 -05004920failed:
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004921 Py_XDECREF(value);
4922 Py_XDECREF(result);
4923 return NULL;
Benjamin Petersonbf1bbc12011-05-27 13:58:08 -05004924}
4925
Guido van Rossumdcfcd142019-01-31 03:40:27 -08004926PyObject*
Brandt Bucher145bf262021-02-26 14:51:55 -08004927ast2obj_match_case(struct ast_state *state, void* _o)
4928{
4929 match_case_ty o = (match_case_ty)_o;
4930 PyObject *result = NULL, *value = NULL;
4931 PyTypeObject *tp;
4932 if (!o) {
4933 Py_RETURN_NONE;
4934 }
4935 tp = (PyTypeObject *)state->match_case_type;
4936 result = PyType_GenericNew(tp, NULL, NULL);
4937 if (!result) return NULL;
4938 value = ast2obj_expr(state, o->pattern);
4939 if (!value) goto failed;
4940 if (PyObject_SetAttr(result, state->pattern, value) == -1)
4941 goto failed;
4942 Py_DECREF(value);
4943 value = ast2obj_expr(state, o->guard);
4944 if (!value) goto failed;
4945 if (PyObject_SetAttr(result, state->guard, value) == -1)
4946 goto failed;
4947 Py_DECREF(value);
4948 value = ast2obj_list(state, (asdl_seq*)o->body, ast2obj_stmt);
4949 if (!value) goto failed;
4950 if (PyObject_SetAttr(result, state->body, value) == -1)
4951 goto failed;
4952 Py_DECREF(value);
4953 return result;
4954failed:
4955 Py_XDECREF(value);
4956 Py_XDECREF(result);
4957 return NULL;
4958}
4959
4960PyObject*
Victor Stinner5cf47822020-11-02 22:03:28 +01004961ast2obj_type_ignore(struct ast_state *state, void* _o)
Guido van Rossumdcfcd142019-01-31 03:40:27 -08004962{
4963 type_ignore_ty o = (type_ignore_ty)_o;
4964 PyObject *result = NULL, *value = NULL;
Dino Viehlandac46eb42019-09-11 10:16:34 -07004965 PyTypeObject *tp;
Guido van Rossumdcfcd142019-01-31 03:40:27 -08004966 if (!o) {
4967 Py_RETURN_NONE;
4968 }
Guido van Rossumdcfcd142019-01-31 03:40:27 -08004969 switch (o->kind) {
4970 case TypeIgnore_kind:
Victor Stinner74419f02020-07-03 11:35:37 +02004971 tp = (PyTypeObject *)state->TypeIgnore_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07004972 result = PyType_GenericNew(tp, NULL, NULL);
Guido van Rossumdcfcd142019-01-31 03:40:27 -08004973 if (!result) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004974 value = ast2obj_int(state, o->v.TypeIgnore.lineno);
Guido van Rossumdcfcd142019-01-31 03:40:27 -08004975 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004976 if (PyObject_SetAttr(result, state->lineno, value) == -1)
Guido van Rossumdcfcd142019-01-31 03:40:27 -08004977 goto failed;
4978 Py_DECREF(value);
Victor Stinner74419f02020-07-03 11:35:37 +02004979 value = ast2obj_string(state, o->v.TypeIgnore.tag);
Michael J. Sullivan933e1502019-05-22 07:54:20 -07004980 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004981 if (PyObject_SetAttr(result, state->tag, value) == -1)
Michael J. Sullivan933e1502019-05-22 07:54:20 -07004982 goto failed;
4983 Py_DECREF(value);
Guido van Rossumdcfcd142019-01-31 03:40:27 -08004984 break;
4985 }
4986 return result;
4987failed:
4988 Py_XDECREF(value);
4989 Py_XDECREF(result);
4990 return NULL;
4991}
4992
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00004993
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00004994int
Victor Stinner5cf47822020-11-02 22:03:28 +01004995obj2ast_mod(struct ast_state *state, PyObject* obj, mod_ty* out, PyArena* arena)
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00004996{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004997 int isinstance;
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00004998
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004999 PyObject *tmp = NULL;
Dino Viehlandac46eb42019-09-11 10:16:34 -07005000 PyObject *tp;
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00005001
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005002 if (obj == Py_None) {
5003 *out = NULL;
5004 return 0;
5005 }
Victor Stinner74419f02020-07-03 11:35:37 +02005006 tp = state->Module_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07005007 isinstance = PyObject_IsInstance(obj, tp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005008 if (isinstance == -1) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00005009 return 1;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005010 }
5011 if (isinstance) {
Pablo Galindoa5634c42020-09-16 19:42:00 +01005012 asdl_stmt_seq* body;
5013 asdl_type_ignore_seq* type_ignores;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005014
Victor Stinner74419f02020-07-03 11:35:37 +02005015 if (_PyObject_LookupAttr(obj, state->body, &tmp) < 0) {
Serhiy Storchakaf320be72018-01-25 10:49:40 +02005016 return 1;
5017 }
5018 if (tmp == NULL) {
5019 PyErr_SetString(PyExc_TypeError, "required field \"body\" missing from Module");
5020 return 1;
5021 }
5022 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005023 int res;
5024 Py_ssize_t len;
5025 Py_ssize_t i;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005026 if (!PyList_Check(tmp)) {
Dino Viehlandac46eb42019-09-11 10:16:34 -07005027 PyErr_Format(PyExc_TypeError, "Module field \"body\" must be a list, not a %.200s", _PyType_Name(Py_TYPE(tmp)));
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005028 goto failed;
5029 }
5030 len = PyList_GET_SIZE(tmp);
Pablo Galindoa5634c42020-09-16 19:42:00 +01005031 body = _Py_asdl_stmt_seq_new(len, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005032 if (body == NULL) goto failed;
5033 for (i = 0; i < len; i++) {
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07005034 stmt_ty val;
Serhiy Storchaka43c97312019-09-10 13:02:30 +03005035 PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
5036 Py_INCREF(tmp2);
Victor Stinner74419f02020-07-03 11:35:37 +02005037 res = obj2ast_stmt(state, tmp2, &val, arena);
Serhiy Storchaka43c97312019-09-10 13:02:30 +03005038 Py_DECREF(tmp2);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005039 if (res != 0) goto failed;
Serhiy Storchakacf380602016-10-07 21:51:28 +03005040 if (len != PyList_GET_SIZE(tmp)) {
5041 PyErr_SetString(PyExc_RuntimeError, "Module field \"body\" changed size during iteration");
5042 goto failed;
5043 }
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07005044 asdl_seq_SET(body, i, val);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005045 }
Victor Stinner1acc1292013-07-27 00:03:47 +02005046 Py_CLEAR(tmp);
Serhiy Storchakaf320be72018-01-25 10:49:40 +02005047 }
Victor Stinner74419f02020-07-03 11:35:37 +02005048 if (_PyObject_LookupAttr(obj, state->type_ignores, &tmp) < 0) {
Guido van Rossumdcfcd142019-01-31 03:40:27 -08005049 return 1;
5050 }
5051 if (tmp == NULL) {
5052 PyErr_SetString(PyExc_TypeError, "required field \"type_ignores\" missing from Module");
5053 return 1;
5054 }
5055 else {
5056 int res;
5057 Py_ssize_t len;
5058 Py_ssize_t i;
5059 if (!PyList_Check(tmp)) {
Dino Viehlandac46eb42019-09-11 10:16:34 -07005060 PyErr_Format(PyExc_TypeError, "Module field \"type_ignores\" must be a list, not a %.200s", _PyType_Name(Py_TYPE(tmp)));
Guido van Rossumdcfcd142019-01-31 03:40:27 -08005061 goto failed;
5062 }
5063 len = PyList_GET_SIZE(tmp);
Pablo Galindoa5634c42020-09-16 19:42:00 +01005064 type_ignores = _Py_asdl_type_ignore_seq_new(len, arena);
Guido van Rossumdcfcd142019-01-31 03:40:27 -08005065 if (type_ignores == NULL) goto failed;
5066 for (i = 0; i < len; i++) {
5067 type_ignore_ty val;
Serhiy Storchaka43c97312019-09-10 13:02:30 +03005068 PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
5069 Py_INCREF(tmp2);
Victor Stinner74419f02020-07-03 11:35:37 +02005070 res = obj2ast_type_ignore(state, tmp2, &val, arena);
Serhiy Storchaka43c97312019-09-10 13:02:30 +03005071 Py_DECREF(tmp2);
Guido van Rossumdcfcd142019-01-31 03:40:27 -08005072 if (res != 0) goto failed;
5073 if (len != PyList_GET_SIZE(tmp)) {
5074 PyErr_SetString(PyExc_RuntimeError, "Module field \"type_ignores\" changed size during iteration");
5075 goto failed;
5076 }
5077 asdl_seq_SET(type_ignores, i, val);
5078 }
5079 Py_CLEAR(tmp);
5080 }
Victor Stinnerd27f8d22021-04-07 21:34:22 +02005081 *out = _PyAST_Module(body, type_ignores, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005082 if (*out == NULL) goto failed;
5083 return 0;
5084 }
Victor Stinner74419f02020-07-03 11:35:37 +02005085 tp = state->Interactive_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07005086 isinstance = PyObject_IsInstance(obj, tp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005087 if (isinstance == -1) {
5088 return 1;
5089 }
5090 if (isinstance) {
Pablo Galindoa5634c42020-09-16 19:42:00 +01005091 asdl_stmt_seq* body;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005092
Victor Stinner74419f02020-07-03 11:35:37 +02005093 if (_PyObject_LookupAttr(obj, state->body, &tmp) < 0) {
Serhiy Storchakaf320be72018-01-25 10:49:40 +02005094 return 1;
5095 }
5096 if (tmp == NULL) {
5097 PyErr_SetString(PyExc_TypeError, "required field \"body\" missing from Interactive");
5098 return 1;
5099 }
5100 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005101 int res;
5102 Py_ssize_t len;
5103 Py_ssize_t i;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005104 if (!PyList_Check(tmp)) {
Dino Viehlandac46eb42019-09-11 10:16:34 -07005105 PyErr_Format(PyExc_TypeError, "Interactive field \"body\" must be a list, not a %.200s", _PyType_Name(Py_TYPE(tmp)));
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005106 goto failed;
5107 }
5108 len = PyList_GET_SIZE(tmp);
Pablo Galindoa5634c42020-09-16 19:42:00 +01005109 body = _Py_asdl_stmt_seq_new(len, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005110 if (body == NULL) goto failed;
5111 for (i = 0; i < len; i++) {
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07005112 stmt_ty val;
Serhiy Storchaka43c97312019-09-10 13:02:30 +03005113 PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
5114 Py_INCREF(tmp2);
Victor Stinner74419f02020-07-03 11:35:37 +02005115 res = obj2ast_stmt(state, tmp2, &val, arena);
Serhiy Storchaka43c97312019-09-10 13:02:30 +03005116 Py_DECREF(tmp2);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005117 if (res != 0) goto failed;
Serhiy Storchakacf380602016-10-07 21:51:28 +03005118 if (len != PyList_GET_SIZE(tmp)) {
5119 PyErr_SetString(PyExc_RuntimeError, "Interactive field \"body\" changed size during iteration");
5120 goto failed;
5121 }
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07005122 asdl_seq_SET(body, i, val);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005123 }
Victor Stinner1acc1292013-07-27 00:03:47 +02005124 Py_CLEAR(tmp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005125 }
Victor Stinnerd27f8d22021-04-07 21:34:22 +02005126 *out = _PyAST_Interactive(body, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005127 if (*out == NULL) goto failed;
5128 return 0;
5129 }
Victor Stinner74419f02020-07-03 11:35:37 +02005130 tp = state->Expression_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07005131 isinstance = PyObject_IsInstance(obj, tp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005132 if (isinstance == -1) {
5133 return 1;
5134 }
5135 if (isinstance) {
5136 expr_ty body;
5137
Victor Stinner74419f02020-07-03 11:35:37 +02005138 if (_PyObject_LookupAttr(obj, state->body, &tmp) < 0) {
Serhiy Storchakaf320be72018-01-25 10:49:40 +02005139 return 1;
5140 }
5141 if (tmp == NULL) {
5142 PyErr_SetString(PyExc_TypeError, "required field \"body\" missing from Expression");
5143 return 1;
5144 }
5145 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005146 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02005147 res = obj2ast_expr(state, tmp, &body, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005148 if (res != 0) goto failed;
Victor Stinner1acc1292013-07-27 00:03:47 +02005149 Py_CLEAR(tmp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005150 }
Victor Stinnerd27f8d22021-04-07 21:34:22 +02005151 *out = _PyAST_Expression(body, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005152 if (*out == NULL) goto failed;
5153 return 0;
5154 }
Victor Stinner74419f02020-07-03 11:35:37 +02005155 tp = state->FunctionType_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07005156 isinstance = PyObject_IsInstance(obj, tp);
Guido van Rossumdcfcd142019-01-31 03:40:27 -08005157 if (isinstance == -1) {
5158 return 1;
5159 }
5160 if (isinstance) {
Pablo Galindoa5634c42020-09-16 19:42:00 +01005161 asdl_expr_seq* argtypes;
Guido van Rossumdcfcd142019-01-31 03:40:27 -08005162 expr_ty returns;
5163
Victor Stinner74419f02020-07-03 11:35:37 +02005164 if (_PyObject_LookupAttr(obj, state->argtypes, &tmp) < 0) {
Guido van Rossumdcfcd142019-01-31 03:40:27 -08005165 return 1;
5166 }
5167 if (tmp == NULL) {
5168 PyErr_SetString(PyExc_TypeError, "required field \"argtypes\" missing from FunctionType");
5169 return 1;
5170 }
5171 else {
5172 int res;
5173 Py_ssize_t len;
5174 Py_ssize_t i;
5175 if (!PyList_Check(tmp)) {
Dino Viehlandac46eb42019-09-11 10:16:34 -07005176 PyErr_Format(PyExc_TypeError, "FunctionType field \"argtypes\" must be a list, not a %.200s", _PyType_Name(Py_TYPE(tmp)));
Guido van Rossumdcfcd142019-01-31 03:40:27 -08005177 goto failed;
5178 }
5179 len = PyList_GET_SIZE(tmp);
Pablo Galindoa5634c42020-09-16 19:42:00 +01005180 argtypes = _Py_asdl_expr_seq_new(len, arena);
Guido van Rossumdcfcd142019-01-31 03:40:27 -08005181 if (argtypes == NULL) goto failed;
5182 for (i = 0; i < len; i++) {
5183 expr_ty val;
Serhiy Storchaka43c97312019-09-10 13:02:30 +03005184 PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
5185 Py_INCREF(tmp2);
Victor Stinner74419f02020-07-03 11:35:37 +02005186 res = obj2ast_expr(state, tmp2, &val, arena);
Serhiy Storchaka43c97312019-09-10 13:02:30 +03005187 Py_DECREF(tmp2);
Guido van Rossumdcfcd142019-01-31 03:40:27 -08005188 if (res != 0) goto failed;
5189 if (len != PyList_GET_SIZE(tmp)) {
5190 PyErr_SetString(PyExc_RuntimeError, "FunctionType field \"argtypes\" changed size during iteration");
5191 goto failed;
5192 }
5193 asdl_seq_SET(argtypes, i, val);
5194 }
5195 Py_CLEAR(tmp);
5196 }
Victor Stinner74419f02020-07-03 11:35:37 +02005197 if (_PyObject_LookupAttr(obj, state->returns, &tmp) < 0) {
Guido van Rossumdcfcd142019-01-31 03:40:27 -08005198 return 1;
5199 }
5200 if (tmp == NULL) {
5201 PyErr_SetString(PyExc_TypeError, "required field \"returns\" missing from FunctionType");
5202 return 1;
5203 }
5204 else {
5205 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02005206 res = obj2ast_expr(state, tmp, &returns, arena);
Guido van Rossumdcfcd142019-01-31 03:40:27 -08005207 if (res != 0) goto failed;
5208 Py_CLEAR(tmp);
5209 }
Victor Stinnerd27f8d22021-04-07 21:34:22 +02005210 *out = _PyAST_FunctionType(argtypes, returns, arena);
Guido van Rossumdcfcd142019-01-31 03:40:27 -08005211 if (*out == NULL) goto failed;
5212 return 0;
5213 }
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005214
5215 PyErr_Format(PyExc_TypeError, "expected some sort of mod, but got %R", obj);
5216 failed:
5217 Py_XDECREF(tmp);
5218 return 1;
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00005219}
5220
5221int
Victor Stinner5cf47822020-11-02 22:03:28 +01005222obj2ast_stmt(struct ast_state *state, PyObject* obj, stmt_ty* out, PyArena*
5223 arena)
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00005224{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005225 int isinstance;
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00005226
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005227 PyObject *tmp = NULL;
Dino Viehlandac46eb42019-09-11 10:16:34 -07005228 PyObject *tp;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005229 int lineno;
5230 int col_offset;
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00005231 int end_lineno;
5232 int end_col_offset;
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00005233
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005234 if (obj == Py_None) {
5235 *out = NULL;
5236 return 0;
5237 }
Victor Stinner74419f02020-07-03 11:35:37 +02005238 if (_PyObject_LookupAttr(obj, state->lineno, &tmp) < 0) {
Serhiy Storchakaf320be72018-01-25 10:49:40 +02005239 return 1;
5240 }
5241 if (tmp == NULL) {
5242 PyErr_SetString(PyExc_TypeError, "required field \"lineno\" missing from stmt");
5243 return 1;
5244 }
5245 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005246 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02005247 res = obj2ast_int(state, tmp, &lineno, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005248 if (res != 0) goto failed;
Victor Stinner1acc1292013-07-27 00:03:47 +02005249 Py_CLEAR(tmp);
Serhiy Storchakaf320be72018-01-25 10:49:40 +02005250 }
Victor Stinner74419f02020-07-03 11:35:37 +02005251 if (_PyObject_LookupAttr(obj, state->col_offset, &tmp) < 0) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00005252 return 1;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005253 }
Serhiy Storchakaf320be72018-01-25 10:49:40 +02005254 if (tmp == NULL) {
5255 PyErr_SetString(PyExc_TypeError, "required field \"col_offset\" missing from stmt");
5256 return 1;
5257 }
5258 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005259 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02005260 res = obj2ast_int(state, tmp, &col_offset, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005261 if (res != 0) goto failed;
Victor Stinner1acc1292013-07-27 00:03:47 +02005262 Py_CLEAR(tmp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005263 }
Victor Stinner74419f02020-07-03 11:35:37 +02005264 if (_PyObject_LookupAttr(obj, state->end_lineno, &tmp) < 0) {
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00005265 return 1;
5266 }
5267 if (tmp == NULL || tmp == Py_None) {
5268 Py_CLEAR(tmp);
5269 end_lineno = 0;
5270 }
5271 else {
5272 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02005273 res = obj2ast_int(state, tmp, &end_lineno, arena);
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00005274 if (res != 0) goto failed;
5275 Py_CLEAR(tmp);
5276 }
Victor Stinner74419f02020-07-03 11:35:37 +02005277 if (_PyObject_LookupAttr(obj, state->end_col_offset, &tmp) < 0) {
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00005278 return 1;
5279 }
5280 if (tmp == NULL || tmp == Py_None) {
5281 Py_CLEAR(tmp);
5282 end_col_offset = 0;
5283 }
5284 else {
5285 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02005286 res = obj2ast_int(state, tmp, &end_col_offset, arena);
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00005287 if (res != 0) goto failed;
5288 Py_CLEAR(tmp);
5289 }
Victor Stinner74419f02020-07-03 11:35:37 +02005290 tp = state->FunctionDef_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07005291 isinstance = PyObject_IsInstance(obj, tp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005292 if (isinstance == -1) {
5293 return 1;
5294 }
5295 if (isinstance) {
5296 identifier name;
5297 arguments_ty args;
Pablo Galindoa5634c42020-09-16 19:42:00 +01005298 asdl_stmt_seq* body;
5299 asdl_expr_seq* decorator_list;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005300 expr_ty returns;
Guido van Rossumdcfcd142019-01-31 03:40:27 -08005301 string type_comment;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005302
Victor Stinner74419f02020-07-03 11:35:37 +02005303 if (_PyObject_LookupAttr(obj, state->name, &tmp) < 0) {
Serhiy Storchakaf320be72018-01-25 10:49:40 +02005304 return 1;
5305 }
5306 if (tmp == NULL) {
5307 PyErr_SetString(PyExc_TypeError, "required field \"name\" missing from FunctionDef");
5308 return 1;
5309 }
5310 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005311 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02005312 res = obj2ast_identifier(state, tmp, &name, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005313 if (res != 0) goto failed;
Victor Stinner1acc1292013-07-27 00:03:47 +02005314 Py_CLEAR(tmp);
Serhiy Storchakaf320be72018-01-25 10:49:40 +02005315 }
Victor Stinner74419f02020-07-03 11:35:37 +02005316 if (_PyObject_LookupAttr(obj, state->args, &tmp) < 0) {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005317 return 1;
5318 }
Serhiy Storchakaf320be72018-01-25 10:49:40 +02005319 if (tmp == NULL) {
5320 PyErr_SetString(PyExc_TypeError, "required field \"args\" missing from FunctionDef");
5321 return 1;
5322 }
5323 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005324 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02005325 res = obj2ast_arguments(state, tmp, &args, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005326 if (res != 0) goto failed;
Victor Stinner1acc1292013-07-27 00:03:47 +02005327 Py_CLEAR(tmp);
Serhiy Storchakaf320be72018-01-25 10:49:40 +02005328 }
Victor Stinner74419f02020-07-03 11:35:37 +02005329 if (_PyObject_LookupAttr(obj, state->body, &tmp) < 0) {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005330 return 1;
5331 }
Serhiy Storchakaf320be72018-01-25 10:49:40 +02005332 if (tmp == NULL) {
5333 PyErr_SetString(PyExc_TypeError, "required field \"body\" missing from FunctionDef");
5334 return 1;
5335 }
5336 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005337 int res;
5338 Py_ssize_t len;
5339 Py_ssize_t i;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005340 if (!PyList_Check(tmp)) {
Dino Viehlandac46eb42019-09-11 10:16:34 -07005341 PyErr_Format(PyExc_TypeError, "FunctionDef field \"body\" must be a list, not a %.200s", _PyType_Name(Py_TYPE(tmp)));
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005342 goto failed;
5343 }
5344 len = PyList_GET_SIZE(tmp);
Pablo Galindoa5634c42020-09-16 19:42:00 +01005345 body = _Py_asdl_stmt_seq_new(len, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005346 if (body == NULL) goto failed;
5347 for (i = 0; i < len; i++) {
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07005348 stmt_ty val;
Serhiy Storchaka43c97312019-09-10 13:02:30 +03005349 PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
5350 Py_INCREF(tmp2);
Victor Stinner74419f02020-07-03 11:35:37 +02005351 res = obj2ast_stmt(state, tmp2, &val, arena);
Serhiy Storchaka43c97312019-09-10 13:02:30 +03005352 Py_DECREF(tmp2);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005353 if (res != 0) goto failed;
Serhiy Storchakacf380602016-10-07 21:51:28 +03005354 if (len != PyList_GET_SIZE(tmp)) {
5355 PyErr_SetString(PyExc_RuntimeError, "FunctionDef field \"body\" changed size during iteration");
5356 goto failed;
5357 }
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07005358 asdl_seq_SET(body, i, val);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005359 }
Victor Stinner1acc1292013-07-27 00:03:47 +02005360 Py_CLEAR(tmp);
Serhiy Storchakaf320be72018-01-25 10:49:40 +02005361 }
Victor Stinner74419f02020-07-03 11:35:37 +02005362 if (_PyObject_LookupAttr(obj, state->decorator_list, &tmp) < 0) {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005363 return 1;
5364 }
Serhiy Storchakaf320be72018-01-25 10:49:40 +02005365 if (tmp == NULL) {
5366 PyErr_SetString(PyExc_TypeError, "required field \"decorator_list\" missing from FunctionDef");
5367 return 1;
5368 }
5369 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005370 int res;
5371 Py_ssize_t len;
5372 Py_ssize_t i;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005373 if (!PyList_Check(tmp)) {
Dino Viehlandac46eb42019-09-11 10:16:34 -07005374 PyErr_Format(PyExc_TypeError, "FunctionDef field \"decorator_list\" must be a list, not a %.200s", _PyType_Name(Py_TYPE(tmp)));
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005375 goto failed;
5376 }
5377 len = PyList_GET_SIZE(tmp);
Pablo Galindoa5634c42020-09-16 19:42:00 +01005378 decorator_list = _Py_asdl_expr_seq_new(len, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005379 if (decorator_list == NULL) goto failed;
5380 for (i = 0; i < len; i++) {
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07005381 expr_ty val;
Serhiy Storchaka43c97312019-09-10 13:02:30 +03005382 PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
5383 Py_INCREF(tmp2);
Victor Stinner74419f02020-07-03 11:35:37 +02005384 res = obj2ast_expr(state, tmp2, &val, arena);
Serhiy Storchaka43c97312019-09-10 13:02:30 +03005385 Py_DECREF(tmp2);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005386 if (res != 0) goto failed;
Serhiy Storchakacf380602016-10-07 21:51:28 +03005387 if (len != PyList_GET_SIZE(tmp)) {
5388 PyErr_SetString(PyExc_RuntimeError, "FunctionDef field \"decorator_list\" changed size during iteration");
5389 goto failed;
5390 }
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07005391 asdl_seq_SET(decorator_list, i, val);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005392 }
Victor Stinner1acc1292013-07-27 00:03:47 +02005393 Py_CLEAR(tmp);
Serhiy Storchakaf320be72018-01-25 10:49:40 +02005394 }
Victor Stinner74419f02020-07-03 11:35:37 +02005395 if (_PyObject_LookupAttr(obj, state->returns, &tmp) < 0) {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005396 return 1;
5397 }
Serhiy Storchakaf320be72018-01-25 10:49:40 +02005398 if (tmp == NULL || tmp == Py_None) {
5399 Py_CLEAR(tmp);
5400 returns = NULL;
5401 }
5402 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005403 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02005404 res = obj2ast_expr(state, tmp, &returns, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005405 if (res != 0) goto failed;
Victor Stinner1acc1292013-07-27 00:03:47 +02005406 Py_CLEAR(tmp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005407 }
Victor Stinner74419f02020-07-03 11:35:37 +02005408 if (_PyObject_LookupAttr(obj, state->type_comment, &tmp) < 0) {
Guido van Rossumdcfcd142019-01-31 03:40:27 -08005409 return 1;
5410 }
5411 if (tmp == NULL || tmp == Py_None) {
5412 Py_CLEAR(tmp);
5413 type_comment = NULL;
5414 }
5415 else {
5416 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02005417 res = obj2ast_string(state, tmp, &type_comment, arena);
Guido van Rossumdcfcd142019-01-31 03:40:27 -08005418 if (res != 0) goto failed;
5419 Py_CLEAR(tmp);
5420 }
Victor Stinnerd27f8d22021-04-07 21:34:22 +02005421 *out = _PyAST_FunctionDef(name, args, body, decorator_list, returns,
5422 type_comment, lineno, col_offset, end_lineno,
5423 end_col_offset, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005424 if (*out == NULL) goto failed;
5425 return 0;
5426 }
Victor Stinner74419f02020-07-03 11:35:37 +02005427 tp = state->AsyncFunctionDef_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07005428 isinstance = PyObject_IsInstance(obj, tp);
Yury Selivanov75445082015-05-11 22:57:16 -04005429 if (isinstance == -1) {
5430 return 1;
5431 }
5432 if (isinstance) {
5433 identifier name;
5434 arguments_ty args;
Pablo Galindoa5634c42020-09-16 19:42:00 +01005435 asdl_stmt_seq* body;
5436 asdl_expr_seq* decorator_list;
Yury Selivanov75445082015-05-11 22:57:16 -04005437 expr_ty returns;
Guido van Rossumdcfcd142019-01-31 03:40:27 -08005438 string type_comment;
Yury Selivanov75445082015-05-11 22:57:16 -04005439
Victor Stinner74419f02020-07-03 11:35:37 +02005440 if (_PyObject_LookupAttr(obj, state->name, &tmp) < 0) {
Serhiy Storchakaf320be72018-01-25 10:49:40 +02005441 return 1;
5442 }
5443 if (tmp == NULL) {
5444 PyErr_SetString(PyExc_TypeError, "required field \"name\" missing from AsyncFunctionDef");
5445 return 1;
5446 }
5447 else {
Yury Selivanov75445082015-05-11 22:57:16 -04005448 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02005449 res = obj2ast_identifier(state, tmp, &name, arena);
Yury Selivanov75445082015-05-11 22:57:16 -04005450 if (res != 0) goto failed;
5451 Py_CLEAR(tmp);
Serhiy Storchakaf320be72018-01-25 10:49:40 +02005452 }
Victor Stinner74419f02020-07-03 11:35:37 +02005453 if (_PyObject_LookupAttr(obj, state->args, &tmp) < 0) {
Yury Selivanov75445082015-05-11 22:57:16 -04005454 return 1;
5455 }
Serhiy Storchakaf320be72018-01-25 10:49:40 +02005456 if (tmp == NULL) {
5457 PyErr_SetString(PyExc_TypeError, "required field \"args\" missing from AsyncFunctionDef");
5458 return 1;
5459 }
5460 else {
Yury Selivanov75445082015-05-11 22:57:16 -04005461 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02005462 res = obj2ast_arguments(state, tmp, &args, arena);
Yury Selivanov75445082015-05-11 22:57:16 -04005463 if (res != 0) goto failed;
5464 Py_CLEAR(tmp);
Serhiy Storchakaf320be72018-01-25 10:49:40 +02005465 }
Victor Stinner74419f02020-07-03 11:35:37 +02005466 if (_PyObject_LookupAttr(obj, state->body, &tmp) < 0) {
Yury Selivanov75445082015-05-11 22:57:16 -04005467 return 1;
5468 }
Serhiy Storchakaf320be72018-01-25 10:49:40 +02005469 if (tmp == NULL) {
5470 PyErr_SetString(PyExc_TypeError, "required field \"body\" missing from AsyncFunctionDef");
5471 return 1;
5472 }
5473 else {
Yury Selivanov75445082015-05-11 22:57:16 -04005474 int res;
5475 Py_ssize_t len;
5476 Py_ssize_t i;
Yury Selivanov75445082015-05-11 22:57:16 -04005477 if (!PyList_Check(tmp)) {
Dino Viehlandac46eb42019-09-11 10:16:34 -07005478 PyErr_Format(PyExc_TypeError, "AsyncFunctionDef field \"body\" must be a list, not a %.200s", _PyType_Name(Py_TYPE(tmp)));
Yury Selivanov75445082015-05-11 22:57:16 -04005479 goto failed;
5480 }
5481 len = PyList_GET_SIZE(tmp);
Pablo Galindoa5634c42020-09-16 19:42:00 +01005482 body = _Py_asdl_stmt_seq_new(len, arena);
Yury Selivanov75445082015-05-11 22:57:16 -04005483 if (body == NULL) goto failed;
5484 for (i = 0; i < len; i++) {
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07005485 stmt_ty val;
Serhiy Storchaka43c97312019-09-10 13:02:30 +03005486 PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
5487 Py_INCREF(tmp2);
Victor Stinner74419f02020-07-03 11:35:37 +02005488 res = obj2ast_stmt(state, tmp2, &val, arena);
Serhiy Storchaka43c97312019-09-10 13:02:30 +03005489 Py_DECREF(tmp2);
Yury Selivanov75445082015-05-11 22:57:16 -04005490 if (res != 0) goto failed;
Serhiy Storchakacf380602016-10-07 21:51:28 +03005491 if (len != PyList_GET_SIZE(tmp)) {
5492 PyErr_SetString(PyExc_RuntimeError, "AsyncFunctionDef field \"body\" changed size during iteration");
5493 goto failed;
5494 }
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07005495 asdl_seq_SET(body, i, val);
Yury Selivanov75445082015-05-11 22:57:16 -04005496 }
5497 Py_CLEAR(tmp);
Serhiy Storchakaf320be72018-01-25 10:49:40 +02005498 }
Victor Stinner74419f02020-07-03 11:35:37 +02005499 if (_PyObject_LookupAttr(obj, state->decorator_list, &tmp) < 0) {
Yury Selivanov75445082015-05-11 22:57:16 -04005500 return 1;
5501 }
Serhiy Storchakaf320be72018-01-25 10:49:40 +02005502 if (tmp == NULL) {
5503 PyErr_SetString(PyExc_TypeError, "required field \"decorator_list\" missing from AsyncFunctionDef");
5504 return 1;
5505 }
5506 else {
Yury Selivanov75445082015-05-11 22:57:16 -04005507 int res;
5508 Py_ssize_t len;
5509 Py_ssize_t i;
Yury Selivanov75445082015-05-11 22:57:16 -04005510 if (!PyList_Check(tmp)) {
Dino Viehlandac46eb42019-09-11 10:16:34 -07005511 PyErr_Format(PyExc_TypeError, "AsyncFunctionDef field \"decorator_list\" must be a list, not a %.200s", _PyType_Name(Py_TYPE(tmp)));
Yury Selivanov75445082015-05-11 22:57:16 -04005512 goto failed;
5513 }
5514 len = PyList_GET_SIZE(tmp);
Pablo Galindoa5634c42020-09-16 19:42:00 +01005515 decorator_list = _Py_asdl_expr_seq_new(len, arena);
Yury Selivanov75445082015-05-11 22:57:16 -04005516 if (decorator_list == NULL) goto failed;
5517 for (i = 0; i < len; i++) {
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07005518 expr_ty val;
Serhiy Storchaka43c97312019-09-10 13:02:30 +03005519 PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
5520 Py_INCREF(tmp2);
Victor Stinner74419f02020-07-03 11:35:37 +02005521 res = obj2ast_expr(state, tmp2, &val, arena);
Serhiy Storchaka43c97312019-09-10 13:02:30 +03005522 Py_DECREF(tmp2);
Yury Selivanov75445082015-05-11 22:57:16 -04005523 if (res != 0) goto failed;
Serhiy Storchakacf380602016-10-07 21:51:28 +03005524 if (len != PyList_GET_SIZE(tmp)) {
5525 PyErr_SetString(PyExc_RuntimeError, "AsyncFunctionDef field \"decorator_list\" changed size during iteration");
5526 goto failed;
5527 }
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07005528 asdl_seq_SET(decorator_list, i, val);
Yury Selivanov75445082015-05-11 22:57:16 -04005529 }
5530 Py_CLEAR(tmp);
Serhiy Storchakaf320be72018-01-25 10:49:40 +02005531 }
Victor Stinner74419f02020-07-03 11:35:37 +02005532 if (_PyObject_LookupAttr(obj, state->returns, &tmp) < 0) {
Yury Selivanov75445082015-05-11 22:57:16 -04005533 return 1;
5534 }
Serhiy Storchakaf320be72018-01-25 10:49:40 +02005535 if (tmp == NULL || tmp == Py_None) {
5536 Py_CLEAR(tmp);
5537 returns = NULL;
5538 }
5539 else {
Yury Selivanov75445082015-05-11 22:57:16 -04005540 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02005541 res = obj2ast_expr(state, tmp, &returns, arena);
Yury Selivanov75445082015-05-11 22:57:16 -04005542 if (res != 0) goto failed;
5543 Py_CLEAR(tmp);
Yury Selivanov75445082015-05-11 22:57:16 -04005544 }
Victor Stinner74419f02020-07-03 11:35:37 +02005545 if (_PyObject_LookupAttr(obj, state->type_comment, &tmp) < 0) {
Guido van Rossumdcfcd142019-01-31 03:40:27 -08005546 return 1;
5547 }
5548 if (tmp == NULL || tmp == Py_None) {
5549 Py_CLEAR(tmp);
5550 type_comment = NULL;
5551 }
5552 else {
5553 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02005554 res = obj2ast_string(state, tmp, &type_comment, arena);
Guido van Rossumdcfcd142019-01-31 03:40:27 -08005555 if (res != 0) goto failed;
5556 Py_CLEAR(tmp);
5557 }
Victor Stinnerd27f8d22021-04-07 21:34:22 +02005558 *out = _PyAST_AsyncFunctionDef(name, args, body, decorator_list,
5559 returns, type_comment, lineno,
5560 col_offset, end_lineno, end_col_offset,
5561 arena);
Yury Selivanov75445082015-05-11 22:57:16 -04005562 if (*out == NULL) goto failed;
5563 return 0;
5564 }
Victor Stinner74419f02020-07-03 11:35:37 +02005565 tp = state->ClassDef_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07005566 isinstance = PyObject_IsInstance(obj, tp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005567 if (isinstance == -1) {
5568 return 1;
5569 }
5570 if (isinstance) {
5571 identifier name;
Pablo Galindoa5634c42020-09-16 19:42:00 +01005572 asdl_expr_seq* bases;
5573 asdl_keyword_seq* keywords;
5574 asdl_stmt_seq* body;
5575 asdl_expr_seq* decorator_list;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005576
Victor Stinner74419f02020-07-03 11:35:37 +02005577 if (_PyObject_LookupAttr(obj, state->name, &tmp) < 0) {
Serhiy Storchakaf320be72018-01-25 10:49:40 +02005578 return 1;
5579 }
5580 if (tmp == NULL) {
5581 PyErr_SetString(PyExc_TypeError, "required field \"name\" missing from ClassDef");
5582 return 1;
5583 }
5584 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005585 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02005586 res = obj2ast_identifier(state, tmp, &name, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005587 if (res != 0) goto failed;
Victor Stinner1acc1292013-07-27 00:03:47 +02005588 Py_CLEAR(tmp);
Serhiy Storchakaf320be72018-01-25 10:49:40 +02005589 }
Victor Stinner74419f02020-07-03 11:35:37 +02005590 if (_PyObject_LookupAttr(obj, state->bases, &tmp) < 0) {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005591 return 1;
5592 }
Serhiy Storchakaf320be72018-01-25 10:49:40 +02005593 if (tmp == NULL) {
5594 PyErr_SetString(PyExc_TypeError, "required field \"bases\" missing from ClassDef");
5595 return 1;
5596 }
5597 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005598 int res;
5599 Py_ssize_t len;
5600 Py_ssize_t i;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005601 if (!PyList_Check(tmp)) {
Dino Viehlandac46eb42019-09-11 10:16:34 -07005602 PyErr_Format(PyExc_TypeError, "ClassDef field \"bases\" must be a list, not a %.200s", _PyType_Name(Py_TYPE(tmp)));
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005603 goto failed;
5604 }
5605 len = PyList_GET_SIZE(tmp);
Pablo Galindoa5634c42020-09-16 19:42:00 +01005606 bases = _Py_asdl_expr_seq_new(len, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005607 if (bases == NULL) goto failed;
5608 for (i = 0; i < len; i++) {
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07005609 expr_ty val;
Serhiy Storchaka43c97312019-09-10 13:02:30 +03005610 PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
5611 Py_INCREF(tmp2);
Victor Stinner74419f02020-07-03 11:35:37 +02005612 res = obj2ast_expr(state, tmp2, &val, arena);
Serhiy Storchaka43c97312019-09-10 13:02:30 +03005613 Py_DECREF(tmp2);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005614 if (res != 0) goto failed;
Serhiy Storchakacf380602016-10-07 21:51:28 +03005615 if (len != PyList_GET_SIZE(tmp)) {
5616 PyErr_SetString(PyExc_RuntimeError, "ClassDef field \"bases\" changed size during iteration");
5617 goto failed;
5618 }
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07005619 asdl_seq_SET(bases, i, val);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005620 }
Victor Stinner1acc1292013-07-27 00:03:47 +02005621 Py_CLEAR(tmp);
Serhiy Storchakaf320be72018-01-25 10:49:40 +02005622 }
Victor Stinner74419f02020-07-03 11:35:37 +02005623 if (_PyObject_LookupAttr(obj, state->keywords, &tmp) < 0) {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005624 return 1;
5625 }
Serhiy Storchakaf320be72018-01-25 10:49:40 +02005626 if (tmp == NULL) {
5627 PyErr_SetString(PyExc_TypeError, "required field \"keywords\" missing from ClassDef");
5628 return 1;
5629 }
5630 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005631 int res;
5632 Py_ssize_t len;
5633 Py_ssize_t i;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005634 if (!PyList_Check(tmp)) {
Dino Viehlandac46eb42019-09-11 10:16:34 -07005635 PyErr_Format(PyExc_TypeError, "ClassDef field \"keywords\" must be a list, not a %.200s", _PyType_Name(Py_TYPE(tmp)));
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005636 goto failed;
5637 }
5638 len = PyList_GET_SIZE(tmp);
Pablo Galindoa5634c42020-09-16 19:42:00 +01005639 keywords = _Py_asdl_keyword_seq_new(len, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005640 if (keywords == NULL) goto failed;
5641 for (i = 0; i < len; i++) {
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07005642 keyword_ty val;
Serhiy Storchaka43c97312019-09-10 13:02:30 +03005643 PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
5644 Py_INCREF(tmp2);
Victor Stinner74419f02020-07-03 11:35:37 +02005645 res = obj2ast_keyword(state, tmp2, &val, arena);
Serhiy Storchaka43c97312019-09-10 13:02:30 +03005646 Py_DECREF(tmp2);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005647 if (res != 0) goto failed;
Serhiy Storchakacf380602016-10-07 21:51:28 +03005648 if (len != PyList_GET_SIZE(tmp)) {
5649 PyErr_SetString(PyExc_RuntimeError, "ClassDef field \"keywords\" changed size during iteration");
5650 goto failed;
5651 }
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07005652 asdl_seq_SET(keywords, i, val);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005653 }
Victor Stinner1acc1292013-07-27 00:03:47 +02005654 Py_CLEAR(tmp);
Serhiy Storchakaf320be72018-01-25 10:49:40 +02005655 }
Victor Stinner74419f02020-07-03 11:35:37 +02005656 if (_PyObject_LookupAttr(obj, state->body, &tmp) < 0) {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005657 return 1;
5658 }
Serhiy Storchakaf320be72018-01-25 10:49:40 +02005659 if (tmp == NULL) {
5660 PyErr_SetString(PyExc_TypeError, "required field \"body\" missing from ClassDef");
5661 return 1;
5662 }
5663 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005664 int res;
5665 Py_ssize_t len;
5666 Py_ssize_t i;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005667 if (!PyList_Check(tmp)) {
Dino Viehlandac46eb42019-09-11 10:16:34 -07005668 PyErr_Format(PyExc_TypeError, "ClassDef field \"body\" must be a list, not a %.200s", _PyType_Name(Py_TYPE(tmp)));
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005669 goto failed;
5670 }
5671 len = PyList_GET_SIZE(tmp);
Pablo Galindoa5634c42020-09-16 19:42:00 +01005672 body = _Py_asdl_stmt_seq_new(len, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005673 if (body == NULL) goto failed;
5674 for (i = 0; i < len; i++) {
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07005675 stmt_ty val;
Serhiy Storchaka43c97312019-09-10 13:02:30 +03005676 PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
5677 Py_INCREF(tmp2);
Victor Stinner74419f02020-07-03 11:35:37 +02005678 res = obj2ast_stmt(state, tmp2, &val, arena);
Serhiy Storchaka43c97312019-09-10 13:02:30 +03005679 Py_DECREF(tmp2);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005680 if (res != 0) goto failed;
Serhiy Storchakacf380602016-10-07 21:51:28 +03005681 if (len != PyList_GET_SIZE(tmp)) {
5682 PyErr_SetString(PyExc_RuntimeError, "ClassDef field \"body\" changed size during iteration");
5683 goto failed;
5684 }
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07005685 asdl_seq_SET(body, i, val);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005686 }
Victor Stinner1acc1292013-07-27 00:03:47 +02005687 Py_CLEAR(tmp);
Serhiy Storchakaf320be72018-01-25 10:49:40 +02005688 }
Victor Stinner74419f02020-07-03 11:35:37 +02005689 if (_PyObject_LookupAttr(obj, state->decorator_list, &tmp) < 0) {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005690 return 1;
5691 }
Serhiy Storchakaf320be72018-01-25 10:49:40 +02005692 if (tmp == NULL) {
5693 PyErr_SetString(PyExc_TypeError, "required field \"decorator_list\" missing from ClassDef");
5694 return 1;
5695 }
5696 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005697 int res;
5698 Py_ssize_t len;
5699 Py_ssize_t i;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005700 if (!PyList_Check(tmp)) {
Dino Viehlandac46eb42019-09-11 10:16:34 -07005701 PyErr_Format(PyExc_TypeError, "ClassDef field \"decorator_list\" must be a list, not a %.200s", _PyType_Name(Py_TYPE(tmp)));
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005702 goto failed;
5703 }
5704 len = PyList_GET_SIZE(tmp);
Pablo Galindoa5634c42020-09-16 19:42:00 +01005705 decorator_list = _Py_asdl_expr_seq_new(len, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005706 if (decorator_list == NULL) goto failed;
5707 for (i = 0; i < len; i++) {
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07005708 expr_ty val;
Serhiy Storchaka43c97312019-09-10 13:02:30 +03005709 PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
5710 Py_INCREF(tmp2);
Victor Stinner74419f02020-07-03 11:35:37 +02005711 res = obj2ast_expr(state, tmp2, &val, arena);
Serhiy Storchaka43c97312019-09-10 13:02:30 +03005712 Py_DECREF(tmp2);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005713 if (res != 0) goto failed;
Serhiy Storchakacf380602016-10-07 21:51:28 +03005714 if (len != PyList_GET_SIZE(tmp)) {
5715 PyErr_SetString(PyExc_RuntimeError, "ClassDef field \"decorator_list\" changed size during iteration");
5716 goto failed;
5717 }
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07005718 asdl_seq_SET(decorator_list, i, val);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005719 }
Victor Stinner1acc1292013-07-27 00:03:47 +02005720 Py_CLEAR(tmp);
Serhiy Storchakaf320be72018-01-25 10:49:40 +02005721 }
Victor Stinnerd27f8d22021-04-07 21:34:22 +02005722 *out = _PyAST_ClassDef(name, bases, keywords, body, decorator_list,
5723 lineno, col_offset, end_lineno, end_col_offset,
5724 arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005725 if (*out == NULL) goto failed;
5726 return 0;
5727 }
Victor Stinner74419f02020-07-03 11:35:37 +02005728 tp = state->Return_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07005729 isinstance = PyObject_IsInstance(obj, tp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005730 if (isinstance == -1) {
5731 return 1;
5732 }
5733 if (isinstance) {
5734 expr_ty value;
5735
Victor Stinner74419f02020-07-03 11:35:37 +02005736 if (_PyObject_LookupAttr(obj, state->value, &tmp) < 0) {
Serhiy Storchakaf320be72018-01-25 10:49:40 +02005737 return 1;
5738 }
5739 if (tmp == NULL || tmp == Py_None) {
5740 Py_CLEAR(tmp);
5741 value = NULL;
5742 }
5743 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005744 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02005745 res = obj2ast_expr(state, tmp, &value, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005746 if (res != 0) goto failed;
Victor Stinner1acc1292013-07-27 00:03:47 +02005747 Py_CLEAR(tmp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005748 }
Victor Stinnerd27f8d22021-04-07 21:34:22 +02005749 *out = _PyAST_Return(value, lineno, col_offset, end_lineno,
5750 end_col_offset, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005751 if (*out == NULL) goto failed;
5752 return 0;
5753 }
Victor Stinner74419f02020-07-03 11:35:37 +02005754 tp = state->Delete_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07005755 isinstance = PyObject_IsInstance(obj, tp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005756 if (isinstance == -1) {
5757 return 1;
5758 }
5759 if (isinstance) {
Pablo Galindoa5634c42020-09-16 19:42:00 +01005760 asdl_expr_seq* targets;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005761
Victor Stinner74419f02020-07-03 11:35:37 +02005762 if (_PyObject_LookupAttr(obj, state->targets, &tmp) < 0) {
Serhiy Storchakaf320be72018-01-25 10:49:40 +02005763 return 1;
5764 }
5765 if (tmp == NULL) {
5766 PyErr_SetString(PyExc_TypeError, "required field \"targets\" missing from Delete");
5767 return 1;
5768 }
5769 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005770 int res;
5771 Py_ssize_t len;
5772 Py_ssize_t i;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005773 if (!PyList_Check(tmp)) {
Dino Viehlandac46eb42019-09-11 10:16:34 -07005774 PyErr_Format(PyExc_TypeError, "Delete field \"targets\" must be a list, not a %.200s", _PyType_Name(Py_TYPE(tmp)));
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005775 goto failed;
5776 }
5777 len = PyList_GET_SIZE(tmp);
Pablo Galindoa5634c42020-09-16 19:42:00 +01005778 targets = _Py_asdl_expr_seq_new(len, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005779 if (targets == NULL) goto failed;
5780 for (i = 0; i < len; i++) {
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07005781 expr_ty val;
Serhiy Storchaka43c97312019-09-10 13:02:30 +03005782 PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
5783 Py_INCREF(tmp2);
Victor Stinner74419f02020-07-03 11:35:37 +02005784 res = obj2ast_expr(state, tmp2, &val, arena);
Serhiy Storchaka43c97312019-09-10 13:02:30 +03005785 Py_DECREF(tmp2);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005786 if (res != 0) goto failed;
Serhiy Storchakacf380602016-10-07 21:51:28 +03005787 if (len != PyList_GET_SIZE(tmp)) {
5788 PyErr_SetString(PyExc_RuntimeError, "Delete field \"targets\" changed size during iteration");
5789 goto failed;
5790 }
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07005791 asdl_seq_SET(targets, i, val);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005792 }
Victor Stinner1acc1292013-07-27 00:03:47 +02005793 Py_CLEAR(tmp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005794 }
Victor Stinnerd27f8d22021-04-07 21:34:22 +02005795 *out = _PyAST_Delete(targets, lineno, col_offset, end_lineno,
5796 end_col_offset, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005797 if (*out == NULL) goto failed;
5798 return 0;
5799 }
Victor Stinner74419f02020-07-03 11:35:37 +02005800 tp = state->Assign_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07005801 isinstance = PyObject_IsInstance(obj, tp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005802 if (isinstance == -1) {
5803 return 1;
5804 }
5805 if (isinstance) {
Pablo Galindoa5634c42020-09-16 19:42:00 +01005806 asdl_expr_seq* targets;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005807 expr_ty value;
Guido van Rossumdcfcd142019-01-31 03:40:27 -08005808 string type_comment;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005809
Victor Stinner74419f02020-07-03 11:35:37 +02005810 if (_PyObject_LookupAttr(obj, state->targets, &tmp) < 0) {
Serhiy Storchakaf320be72018-01-25 10:49:40 +02005811 return 1;
5812 }
5813 if (tmp == NULL) {
5814 PyErr_SetString(PyExc_TypeError, "required field \"targets\" missing from Assign");
5815 return 1;
5816 }
5817 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005818 int res;
5819 Py_ssize_t len;
5820 Py_ssize_t i;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005821 if (!PyList_Check(tmp)) {
Dino Viehlandac46eb42019-09-11 10:16:34 -07005822 PyErr_Format(PyExc_TypeError, "Assign field \"targets\" must be a list, not a %.200s", _PyType_Name(Py_TYPE(tmp)));
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005823 goto failed;
5824 }
5825 len = PyList_GET_SIZE(tmp);
Pablo Galindoa5634c42020-09-16 19:42:00 +01005826 targets = _Py_asdl_expr_seq_new(len, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005827 if (targets == NULL) goto failed;
5828 for (i = 0; i < len; i++) {
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07005829 expr_ty val;
Serhiy Storchaka43c97312019-09-10 13:02:30 +03005830 PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
5831 Py_INCREF(tmp2);
Victor Stinner74419f02020-07-03 11:35:37 +02005832 res = obj2ast_expr(state, tmp2, &val, arena);
Serhiy Storchaka43c97312019-09-10 13:02:30 +03005833 Py_DECREF(tmp2);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005834 if (res != 0) goto failed;
Serhiy Storchakacf380602016-10-07 21:51:28 +03005835 if (len != PyList_GET_SIZE(tmp)) {
5836 PyErr_SetString(PyExc_RuntimeError, "Assign field \"targets\" changed size during iteration");
5837 goto failed;
5838 }
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07005839 asdl_seq_SET(targets, i, val);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005840 }
Victor Stinner1acc1292013-07-27 00:03:47 +02005841 Py_CLEAR(tmp);
Serhiy Storchakaf320be72018-01-25 10:49:40 +02005842 }
Victor Stinner74419f02020-07-03 11:35:37 +02005843 if (_PyObject_LookupAttr(obj, state->value, &tmp) < 0) {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005844 return 1;
5845 }
Serhiy Storchakaf320be72018-01-25 10:49:40 +02005846 if (tmp == NULL) {
5847 PyErr_SetString(PyExc_TypeError, "required field \"value\" missing from Assign");
5848 return 1;
5849 }
5850 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005851 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02005852 res = obj2ast_expr(state, tmp, &value, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005853 if (res != 0) goto failed;
Victor Stinner1acc1292013-07-27 00:03:47 +02005854 Py_CLEAR(tmp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005855 }
Victor Stinner74419f02020-07-03 11:35:37 +02005856 if (_PyObject_LookupAttr(obj, state->type_comment, &tmp) < 0) {
Guido van Rossumdcfcd142019-01-31 03:40:27 -08005857 return 1;
5858 }
5859 if (tmp == NULL || tmp == Py_None) {
5860 Py_CLEAR(tmp);
5861 type_comment = NULL;
5862 }
5863 else {
5864 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02005865 res = obj2ast_string(state, tmp, &type_comment, arena);
Guido van Rossumdcfcd142019-01-31 03:40:27 -08005866 if (res != 0) goto failed;
5867 Py_CLEAR(tmp);
5868 }
Victor Stinnerd27f8d22021-04-07 21:34:22 +02005869 *out = _PyAST_Assign(targets, value, type_comment, lineno, col_offset,
5870 end_lineno, end_col_offset, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005871 if (*out == NULL) goto failed;
5872 return 0;
5873 }
Victor Stinner74419f02020-07-03 11:35:37 +02005874 tp = state->AugAssign_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07005875 isinstance = PyObject_IsInstance(obj, tp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005876 if (isinstance == -1) {
5877 return 1;
5878 }
5879 if (isinstance) {
5880 expr_ty target;
5881 operator_ty op;
5882 expr_ty value;
5883
Victor Stinner74419f02020-07-03 11:35:37 +02005884 if (_PyObject_LookupAttr(obj, state->target, &tmp) < 0) {
Serhiy Storchakaf320be72018-01-25 10:49:40 +02005885 return 1;
5886 }
5887 if (tmp == NULL) {
5888 PyErr_SetString(PyExc_TypeError, "required field \"target\" missing from AugAssign");
5889 return 1;
5890 }
5891 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005892 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02005893 res = obj2ast_expr(state, tmp, &target, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005894 if (res != 0) goto failed;
Victor Stinner1acc1292013-07-27 00:03:47 +02005895 Py_CLEAR(tmp);
Serhiy Storchakaf320be72018-01-25 10:49:40 +02005896 }
Victor Stinner74419f02020-07-03 11:35:37 +02005897 if (_PyObject_LookupAttr(obj, state->op, &tmp) < 0) {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005898 return 1;
5899 }
Serhiy Storchakaf320be72018-01-25 10:49:40 +02005900 if (tmp == NULL) {
5901 PyErr_SetString(PyExc_TypeError, "required field \"op\" missing from AugAssign");
5902 return 1;
5903 }
5904 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005905 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02005906 res = obj2ast_operator(state, tmp, &op, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005907 if (res != 0) goto failed;
Victor Stinner1acc1292013-07-27 00:03:47 +02005908 Py_CLEAR(tmp);
Serhiy Storchakaf320be72018-01-25 10:49:40 +02005909 }
Victor Stinner74419f02020-07-03 11:35:37 +02005910 if (_PyObject_LookupAttr(obj, state->value, &tmp) < 0) {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005911 return 1;
5912 }
Serhiy Storchakaf320be72018-01-25 10:49:40 +02005913 if (tmp == NULL) {
5914 PyErr_SetString(PyExc_TypeError, "required field \"value\" missing from AugAssign");
5915 return 1;
5916 }
5917 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005918 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02005919 res = obj2ast_expr(state, tmp, &value, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005920 if (res != 0) goto failed;
Victor Stinner1acc1292013-07-27 00:03:47 +02005921 Py_CLEAR(tmp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005922 }
Victor Stinnerd27f8d22021-04-07 21:34:22 +02005923 *out = _PyAST_AugAssign(target, op, value, lineno, col_offset,
5924 end_lineno, end_col_offset, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005925 if (*out == NULL) goto failed;
5926 return 0;
5927 }
Victor Stinner74419f02020-07-03 11:35:37 +02005928 tp = state->AnnAssign_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07005929 isinstance = PyObject_IsInstance(obj, tp);
Yury Selivanovf8cb8a12016-09-08 20:50:03 -07005930 if (isinstance == -1) {
5931 return 1;
5932 }
5933 if (isinstance) {
5934 expr_ty target;
5935 expr_ty annotation;
5936 expr_ty value;
5937 int simple;
5938
Victor Stinner74419f02020-07-03 11:35:37 +02005939 if (_PyObject_LookupAttr(obj, state->target, &tmp) < 0) {
Serhiy Storchakaf320be72018-01-25 10:49:40 +02005940 return 1;
5941 }
5942 if (tmp == NULL) {
5943 PyErr_SetString(PyExc_TypeError, "required field \"target\" missing from AnnAssign");
5944 return 1;
5945 }
5946 else {
Yury Selivanovf8cb8a12016-09-08 20:50:03 -07005947 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02005948 res = obj2ast_expr(state, tmp, &target, arena);
Yury Selivanovf8cb8a12016-09-08 20:50:03 -07005949 if (res != 0) goto failed;
5950 Py_CLEAR(tmp);
Serhiy Storchakaf320be72018-01-25 10:49:40 +02005951 }
Victor Stinner74419f02020-07-03 11:35:37 +02005952 if (_PyObject_LookupAttr(obj, state->annotation, &tmp) < 0) {
Yury Selivanovf8cb8a12016-09-08 20:50:03 -07005953 return 1;
5954 }
Serhiy Storchakaf320be72018-01-25 10:49:40 +02005955 if (tmp == NULL) {
5956 PyErr_SetString(PyExc_TypeError, "required field \"annotation\" missing from AnnAssign");
5957 return 1;
5958 }
5959 else {
Yury Selivanovf8cb8a12016-09-08 20:50:03 -07005960 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02005961 res = obj2ast_expr(state, tmp, &annotation, arena);
Yury Selivanovf8cb8a12016-09-08 20:50:03 -07005962 if (res != 0) goto failed;
5963 Py_CLEAR(tmp);
Serhiy Storchakaf320be72018-01-25 10:49:40 +02005964 }
Victor Stinner74419f02020-07-03 11:35:37 +02005965 if (_PyObject_LookupAttr(obj, state->value, &tmp) < 0) {
Yury Selivanovf8cb8a12016-09-08 20:50:03 -07005966 return 1;
5967 }
Serhiy Storchakaf320be72018-01-25 10:49:40 +02005968 if (tmp == NULL || tmp == Py_None) {
5969 Py_CLEAR(tmp);
5970 value = NULL;
5971 }
5972 else {
Yury Selivanovf8cb8a12016-09-08 20:50:03 -07005973 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02005974 res = obj2ast_expr(state, tmp, &value, arena);
Yury Selivanovf8cb8a12016-09-08 20:50:03 -07005975 if (res != 0) goto failed;
5976 Py_CLEAR(tmp);
Yury Selivanovf8cb8a12016-09-08 20:50:03 -07005977 }
Victor Stinner74419f02020-07-03 11:35:37 +02005978 if (_PyObject_LookupAttr(obj, state->simple, &tmp) < 0) {
Serhiy Storchakaf320be72018-01-25 10:49:40 +02005979 return 1;
5980 }
5981 if (tmp == NULL) {
5982 PyErr_SetString(PyExc_TypeError, "required field \"simple\" missing from AnnAssign");
5983 return 1;
5984 }
5985 else {
Yury Selivanovf8cb8a12016-09-08 20:50:03 -07005986 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02005987 res = obj2ast_int(state, tmp, &simple, arena);
Yury Selivanovf8cb8a12016-09-08 20:50:03 -07005988 if (res != 0) goto failed;
5989 Py_CLEAR(tmp);
Yury Selivanovf8cb8a12016-09-08 20:50:03 -07005990 }
Victor Stinnerd27f8d22021-04-07 21:34:22 +02005991 *out = _PyAST_AnnAssign(target, annotation, value, simple, lineno,
5992 col_offset, end_lineno, end_col_offset, arena);
Yury Selivanovf8cb8a12016-09-08 20:50:03 -07005993 if (*out == NULL) goto failed;
5994 return 0;
5995 }
Victor Stinner74419f02020-07-03 11:35:37 +02005996 tp = state->For_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07005997 isinstance = PyObject_IsInstance(obj, tp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005998 if (isinstance == -1) {
5999 return 1;
6000 }
6001 if (isinstance) {
6002 expr_ty target;
6003 expr_ty iter;
Pablo Galindoa5634c42020-09-16 19:42:00 +01006004 asdl_stmt_seq* body;
6005 asdl_stmt_seq* orelse;
Guido van Rossumdcfcd142019-01-31 03:40:27 -08006006 string type_comment;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006007
Victor Stinner74419f02020-07-03 11:35:37 +02006008 if (_PyObject_LookupAttr(obj, state->target, &tmp) < 0) {
Serhiy Storchakaf320be72018-01-25 10:49:40 +02006009 return 1;
6010 }
6011 if (tmp == NULL) {
6012 PyErr_SetString(PyExc_TypeError, "required field \"target\" missing from For");
6013 return 1;
6014 }
6015 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006016 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02006017 res = obj2ast_expr(state, tmp, &target, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006018 if (res != 0) goto failed;
Victor Stinner1acc1292013-07-27 00:03:47 +02006019 Py_CLEAR(tmp);
Serhiy Storchakaf320be72018-01-25 10:49:40 +02006020 }
Victor Stinner74419f02020-07-03 11:35:37 +02006021 if (_PyObject_LookupAttr(obj, state->iter, &tmp) < 0) {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006022 return 1;
6023 }
Serhiy Storchakaf320be72018-01-25 10:49:40 +02006024 if (tmp == NULL) {
6025 PyErr_SetString(PyExc_TypeError, "required field \"iter\" missing from For");
6026 return 1;
6027 }
6028 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006029 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02006030 res = obj2ast_expr(state, tmp, &iter, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006031 if (res != 0) goto failed;
Victor Stinner1acc1292013-07-27 00:03:47 +02006032 Py_CLEAR(tmp);
Serhiy Storchakaf320be72018-01-25 10:49:40 +02006033 }
Victor Stinner74419f02020-07-03 11:35:37 +02006034 if (_PyObject_LookupAttr(obj, state->body, &tmp) < 0) {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006035 return 1;
6036 }
Serhiy Storchakaf320be72018-01-25 10:49:40 +02006037 if (tmp == NULL) {
6038 PyErr_SetString(PyExc_TypeError, "required field \"body\" missing from For");
6039 return 1;
6040 }
6041 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006042 int res;
6043 Py_ssize_t len;
6044 Py_ssize_t i;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006045 if (!PyList_Check(tmp)) {
Dino Viehlandac46eb42019-09-11 10:16:34 -07006046 PyErr_Format(PyExc_TypeError, "For field \"body\" must be a list, not a %.200s", _PyType_Name(Py_TYPE(tmp)));
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006047 goto failed;
6048 }
6049 len = PyList_GET_SIZE(tmp);
Pablo Galindoa5634c42020-09-16 19:42:00 +01006050 body = _Py_asdl_stmt_seq_new(len, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006051 if (body == NULL) goto failed;
6052 for (i = 0; i < len; i++) {
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07006053 stmt_ty val;
Serhiy Storchaka43c97312019-09-10 13:02:30 +03006054 PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
6055 Py_INCREF(tmp2);
Victor Stinner74419f02020-07-03 11:35:37 +02006056 res = obj2ast_stmt(state, tmp2, &val, arena);
Serhiy Storchaka43c97312019-09-10 13:02:30 +03006057 Py_DECREF(tmp2);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006058 if (res != 0) goto failed;
Serhiy Storchakacf380602016-10-07 21:51:28 +03006059 if (len != PyList_GET_SIZE(tmp)) {
6060 PyErr_SetString(PyExc_RuntimeError, "For field \"body\" changed size during iteration");
6061 goto failed;
6062 }
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07006063 asdl_seq_SET(body, i, val);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006064 }
Victor Stinner1acc1292013-07-27 00:03:47 +02006065 Py_CLEAR(tmp);
Serhiy Storchakaf320be72018-01-25 10:49:40 +02006066 }
Victor Stinner74419f02020-07-03 11:35:37 +02006067 if (_PyObject_LookupAttr(obj, state->orelse, &tmp) < 0) {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006068 return 1;
6069 }
Serhiy Storchakaf320be72018-01-25 10:49:40 +02006070 if (tmp == NULL) {
6071 PyErr_SetString(PyExc_TypeError, "required field \"orelse\" missing from For");
6072 return 1;
6073 }
6074 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006075 int res;
6076 Py_ssize_t len;
6077 Py_ssize_t i;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006078 if (!PyList_Check(tmp)) {
Dino Viehlandac46eb42019-09-11 10:16:34 -07006079 PyErr_Format(PyExc_TypeError, "For field \"orelse\" must be a list, not a %.200s", _PyType_Name(Py_TYPE(tmp)));
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006080 goto failed;
6081 }
6082 len = PyList_GET_SIZE(tmp);
Pablo Galindoa5634c42020-09-16 19:42:00 +01006083 orelse = _Py_asdl_stmt_seq_new(len, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006084 if (orelse == NULL) goto failed;
6085 for (i = 0; i < len; i++) {
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07006086 stmt_ty val;
Serhiy Storchaka43c97312019-09-10 13:02:30 +03006087 PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
6088 Py_INCREF(tmp2);
Victor Stinner74419f02020-07-03 11:35:37 +02006089 res = obj2ast_stmt(state, tmp2, &val, arena);
Serhiy Storchaka43c97312019-09-10 13:02:30 +03006090 Py_DECREF(tmp2);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006091 if (res != 0) goto failed;
Serhiy Storchakacf380602016-10-07 21:51:28 +03006092 if (len != PyList_GET_SIZE(tmp)) {
6093 PyErr_SetString(PyExc_RuntimeError, "For field \"orelse\" changed size during iteration");
6094 goto failed;
6095 }
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07006096 asdl_seq_SET(orelse, i, val);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006097 }
Victor Stinner1acc1292013-07-27 00:03:47 +02006098 Py_CLEAR(tmp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006099 }
Victor Stinner74419f02020-07-03 11:35:37 +02006100 if (_PyObject_LookupAttr(obj, state->type_comment, &tmp) < 0) {
Guido van Rossumdcfcd142019-01-31 03:40:27 -08006101 return 1;
6102 }
6103 if (tmp == NULL || tmp == Py_None) {
6104 Py_CLEAR(tmp);
6105 type_comment = NULL;
6106 }
6107 else {
6108 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02006109 res = obj2ast_string(state, tmp, &type_comment, arena);
Guido van Rossumdcfcd142019-01-31 03:40:27 -08006110 if (res != 0) goto failed;
6111 Py_CLEAR(tmp);
6112 }
Victor Stinnerd27f8d22021-04-07 21:34:22 +02006113 *out = _PyAST_For(target, iter, body, orelse, type_comment, lineno,
6114 col_offset, end_lineno, end_col_offset, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006115 if (*out == NULL) goto failed;
6116 return 0;
6117 }
Victor Stinner74419f02020-07-03 11:35:37 +02006118 tp = state->AsyncFor_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07006119 isinstance = PyObject_IsInstance(obj, tp);
Yury Selivanov75445082015-05-11 22:57:16 -04006120 if (isinstance == -1) {
6121 return 1;
6122 }
6123 if (isinstance) {
6124 expr_ty target;
6125 expr_ty iter;
Pablo Galindoa5634c42020-09-16 19:42:00 +01006126 asdl_stmt_seq* body;
6127 asdl_stmt_seq* orelse;
Guido van Rossumdcfcd142019-01-31 03:40:27 -08006128 string type_comment;
Yury Selivanov75445082015-05-11 22:57:16 -04006129
Victor Stinner74419f02020-07-03 11:35:37 +02006130 if (_PyObject_LookupAttr(obj, state->target, &tmp) < 0) {
Serhiy Storchakaf320be72018-01-25 10:49:40 +02006131 return 1;
6132 }
6133 if (tmp == NULL) {
6134 PyErr_SetString(PyExc_TypeError, "required field \"target\" missing from AsyncFor");
6135 return 1;
6136 }
6137 else {
Yury Selivanov75445082015-05-11 22:57:16 -04006138 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02006139 res = obj2ast_expr(state, tmp, &target, arena);
Yury Selivanov75445082015-05-11 22:57:16 -04006140 if (res != 0) goto failed;
6141 Py_CLEAR(tmp);
Serhiy Storchakaf320be72018-01-25 10:49:40 +02006142 }
Victor Stinner74419f02020-07-03 11:35:37 +02006143 if (_PyObject_LookupAttr(obj, state->iter, &tmp) < 0) {
Yury Selivanov75445082015-05-11 22:57:16 -04006144 return 1;
6145 }
Serhiy Storchakaf320be72018-01-25 10:49:40 +02006146 if (tmp == NULL) {
6147 PyErr_SetString(PyExc_TypeError, "required field \"iter\" missing from AsyncFor");
6148 return 1;
6149 }
6150 else {
Yury Selivanov75445082015-05-11 22:57:16 -04006151 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02006152 res = obj2ast_expr(state, tmp, &iter, arena);
Yury Selivanov75445082015-05-11 22:57:16 -04006153 if (res != 0) goto failed;
6154 Py_CLEAR(tmp);
Serhiy Storchakaf320be72018-01-25 10:49:40 +02006155 }
Victor Stinner74419f02020-07-03 11:35:37 +02006156 if (_PyObject_LookupAttr(obj, state->body, &tmp) < 0) {
Yury Selivanov75445082015-05-11 22:57:16 -04006157 return 1;
6158 }
Serhiy Storchakaf320be72018-01-25 10:49:40 +02006159 if (tmp == NULL) {
6160 PyErr_SetString(PyExc_TypeError, "required field \"body\" missing from AsyncFor");
6161 return 1;
6162 }
6163 else {
Yury Selivanov75445082015-05-11 22:57:16 -04006164 int res;
6165 Py_ssize_t len;
6166 Py_ssize_t i;
Yury Selivanov75445082015-05-11 22:57:16 -04006167 if (!PyList_Check(tmp)) {
Dino Viehlandac46eb42019-09-11 10:16:34 -07006168 PyErr_Format(PyExc_TypeError, "AsyncFor field \"body\" must be a list, not a %.200s", _PyType_Name(Py_TYPE(tmp)));
Yury Selivanov75445082015-05-11 22:57:16 -04006169 goto failed;
6170 }
6171 len = PyList_GET_SIZE(tmp);
Pablo Galindoa5634c42020-09-16 19:42:00 +01006172 body = _Py_asdl_stmt_seq_new(len, arena);
Yury Selivanov75445082015-05-11 22:57:16 -04006173 if (body == NULL) goto failed;
6174 for (i = 0; i < len; i++) {
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07006175 stmt_ty val;
Serhiy Storchaka43c97312019-09-10 13:02:30 +03006176 PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
6177 Py_INCREF(tmp2);
Victor Stinner74419f02020-07-03 11:35:37 +02006178 res = obj2ast_stmt(state, tmp2, &val, arena);
Serhiy Storchaka43c97312019-09-10 13:02:30 +03006179 Py_DECREF(tmp2);
Yury Selivanov75445082015-05-11 22:57:16 -04006180 if (res != 0) goto failed;
Serhiy Storchakacf380602016-10-07 21:51:28 +03006181 if (len != PyList_GET_SIZE(tmp)) {
6182 PyErr_SetString(PyExc_RuntimeError, "AsyncFor field \"body\" changed size during iteration");
6183 goto failed;
6184 }
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07006185 asdl_seq_SET(body, i, val);
Yury Selivanov75445082015-05-11 22:57:16 -04006186 }
6187 Py_CLEAR(tmp);
Serhiy Storchakaf320be72018-01-25 10:49:40 +02006188 }
Victor Stinner74419f02020-07-03 11:35:37 +02006189 if (_PyObject_LookupAttr(obj, state->orelse, &tmp) < 0) {
Yury Selivanov75445082015-05-11 22:57:16 -04006190 return 1;
6191 }
Serhiy Storchakaf320be72018-01-25 10:49:40 +02006192 if (tmp == NULL) {
6193 PyErr_SetString(PyExc_TypeError, "required field \"orelse\" missing from AsyncFor");
6194 return 1;
6195 }
6196 else {
Yury Selivanov75445082015-05-11 22:57:16 -04006197 int res;
6198 Py_ssize_t len;
6199 Py_ssize_t i;
Yury Selivanov75445082015-05-11 22:57:16 -04006200 if (!PyList_Check(tmp)) {
Dino Viehlandac46eb42019-09-11 10:16:34 -07006201 PyErr_Format(PyExc_TypeError, "AsyncFor field \"orelse\" must be a list, not a %.200s", _PyType_Name(Py_TYPE(tmp)));
Yury Selivanov75445082015-05-11 22:57:16 -04006202 goto failed;
6203 }
6204 len = PyList_GET_SIZE(tmp);
Pablo Galindoa5634c42020-09-16 19:42:00 +01006205 orelse = _Py_asdl_stmt_seq_new(len, arena);
Yury Selivanov75445082015-05-11 22:57:16 -04006206 if (orelse == NULL) goto failed;
6207 for (i = 0; i < len; i++) {
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07006208 stmt_ty val;
Serhiy Storchaka43c97312019-09-10 13:02:30 +03006209 PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
6210 Py_INCREF(tmp2);
Victor Stinner74419f02020-07-03 11:35:37 +02006211 res = obj2ast_stmt(state, tmp2, &val, arena);
Serhiy Storchaka43c97312019-09-10 13:02:30 +03006212 Py_DECREF(tmp2);
Yury Selivanov75445082015-05-11 22:57:16 -04006213 if (res != 0) goto failed;
Serhiy Storchakacf380602016-10-07 21:51:28 +03006214 if (len != PyList_GET_SIZE(tmp)) {
6215 PyErr_SetString(PyExc_RuntimeError, "AsyncFor field \"orelse\" changed size during iteration");
6216 goto failed;
6217 }
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07006218 asdl_seq_SET(orelse, i, val);
Yury Selivanov75445082015-05-11 22:57:16 -04006219 }
6220 Py_CLEAR(tmp);
Yury Selivanov75445082015-05-11 22:57:16 -04006221 }
Victor Stinner74419f02020-07-03 11:35:37 +02006222 if (_PyObject_LookupAttr(obj, state->type_comment, &tmp) < 0) {
Guido van Rossumdcfcd142019-01-31 03:40:27 -08006223 return 1;
6224 }
6225 if (tmp == NULL || tmp == Py_None) {
6226 Py_CLEAR(tmp);
6227 type_comment = NULL;
6228 }
6229 else {
6230 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02006231 res = obj2ast_string(state, tmp, &type_comment, arena);
Guido van Rossumdcfcd142019-01-31 03:40:27 -08006232 if (res != 0) goto failed;
6233 Py_CLEAR(tmp);
6234 }
Victor Stinnerd27f8d22021-04-07 21:34:22 +02006235 *out = _PyAST_AsyncFor(target, iter, body, orelse, type_comment,
6236 lineno, col_offset, end_lineno, end_col_offset,
6237 arena);
Yury Selivanov75445082015-05-11 22:57:16 -04006238 if (*out == NULL) goto failed;
6239 return 0;
6240 }
Victor Stinner74419f02020-07-03 11:35:37 +02006241 tp = state->While_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07006242 isinstance = PyObject_IsInstance(obj, tp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006243 if (isinstance == -1) {
6244 return 1;
6245 }
6246 if (isinstance) {
6247 expr_ty test;
Pablo Galindoa5634c42020-09-16 19:42:00 +01006248 asdl_stmt_seq* body;
6249 asdl_stmt_seq* orelse;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006250
Victor Stinner74419f02020-07-03 11:35:37 +02006251 if (_PyObject_LookupAttr(obj, state->test, &tmp) < 0) {
Serhiy Storchakaf320be72018-01-25 10:49:40 +02006252 return 1;
6253 }
6254 if (tmp == NULL) {
6255 PyErr_SetString(PyExc_TypeError, "required field \"test\" missing from While");
6256 return 1;
6257 }
6258 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006259 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02006260 res = obj2ast_expr(state, tmp, &test, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006261 if (res != 0) goto failed;
Victor Stinner1acc1292013-07-27 00:03:47 +02006262 Py_CLEAR(tmp);
Serhiy Storchakaf320be72018-01-25 10:49:40 +02006263 }
Victor Stinner74419f02020-07-03 11:35:37 +02006264 if (_PyObject_LookupAttr(obj, state->body, &tmp) < 0) {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006265 return 1;
6266 }
Serhiy Storchakaf320be72018-01-25 10:49:40 +02006267 if (tmp == NULL) {
6268 PyErr_SetString(PyExc_TypeError, "required field \"body\" missing from While");
6269 return 1;
6270 }
6271 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006272 int res;
6273 Py_ssize_t len;
6274 Py_ssize_t i;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006275 if (!PyList_Check(tmp)) {
Dino Viehlandac46eb42019-09-11 10:16:34 -07006276 PyErr_Format(PyExc_TypeError, "While field \"body\" must be a list, not a %.200s", _PyType_Name(Py_TYPE(tmp)));
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006277 goto failed;
6278 }
6279 len = PyList_GET_SIZE(tmp);
Pablo Galindoa5634c42020-09-16 19:42:00 +01006280 body = _Py_asdl_stmt_seq_new(len, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006281 if (body == NULL) goto failed;
6282 for (i = 0; i < len; i++) {
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07006283 stmt_ty val;
Serhiy Storchaka43c97312019-09-10 13:02:30 +03006284 PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
6285 Py_INCREF(tmp2);
Victor Stinner74419f02020-07-03 11:35:37 +02006286 res = obj2ast_stmt(state, tmp2, &val, arena);
Serhiy Storchaka43c97312019-09-10 13:02:30 +03006287 Py_DECREF(tmp2);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006288 if (res != 0) goto failed;
Serhiy Storchakacf380602016-10-07 21:51:28 +03006289 if (len != PyList_GET_SIZE(tmp)) {
6290 PyErr_SetString(PyExc_RuntimeError, "While field \"body\" changed size during iteration");
6291 goto failed;
6292 }
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07006293 asdl_seq_SET(body, i, val);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006294 }
Victor Stinner1acc1292013-07-27 00:03:47 +02006295 Py_CLEAR(tmp);
Serhiy Storchakaf320be72018-01-25 10:49:40 +02006296 }
Victor Stinner74419f02020-07-03 11:35:37 +02006297 if (_PyObject_LookupAttr(obj, state->orelse, &tmp) < 0) {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006298 return 1;
6299 }
Serhiy Storchakaf320be72018-01-25 10:49:40 +02006300 if (tmp == NULL) {
6301 PyErr_SetString(PyExc_TypeError, "required field \"orelse\" missing from While");
6302 return 1;
6303 }
6304 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006305 int res;
6306 Py_ssize_t len;
6307 Py_ssize_t i;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006308 if (!PyList_Check(tmp)) {
Dino Viehlandac46eb42019-09-11 10:16:34 -07006309 PyErr_Format(PyExc_TypeError, "While field \"orelse\" must be a list, not a %.200s", _PyType_Name(Py_TYPE(tmp)));
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006310 goto failed;
6311 }
6312 len = PyList_GET_SIZE(tmp);
Pablo Galindoa5634c42020-09-16 19:42:00 +01006313 orelse = _Py_asdl_stmt_seq_new(len, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006314 if (orelse == NULL) goto failed;
6315 for (i = 0; i < len; i++) {
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07006316 stmt_ty val;
Serhiy Storchaka43c97312019-09-10 13:02:30 +03006317 PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
6318 Py_INCREF(tmp2);
Victor Stinner74419f02020-07-03 11:35:37 +02006319 res = obj2ast_stmt(state, tmp2, &val, arena);
Serhiy Storchaka43c97312019-09-10 13:02:30 +03006320 Py_DECREF(tmp2);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006321 if (res != 0) goto failed;
Serhiy Storchakacf380602016-10-07 21:51:28 +03006322 if (len != PyList_GET_SIZE(tmp)) {
6323 PyErr_SetString(PyExc_RuntimeError, "While field \"orelse\" changed size during iteration");
6324 goto failed;
6325 }
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07006326 asdl_seq_SET(orelse, i, val);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006327 }
Victor Stinner1acc1292013-07-27 00:03:47 +02006328 Py_CLEAR(tmp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006329 }
Victor Stinnerd27f8d22021-04-07 21:34:22 +02006330 *out = _PyAST_While(test, body, orelse, lineno, col_offset, end_lineno,
6331 end_col_offset, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006332 if (*out == NULL) goto failed;
6333 return 0;
6334 }
Victor Stinner74419f02020-07-03 11:35:37 +02006335 tp = state->If_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07006336 isinstance = PyObject_IsInstance(obj, tp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006337 if (isinstance == -1) {
6338 return 1;
6339 }
6340 if (isinstance) {
6341 expr_ty test;
Pablo Galindoa5634c42020-09-16 19:42:00 +01006342 asdl_stmt_seq* body;
6343 asdl_stmt_seq* orelse;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006344
Victor Stinner74419f02020-07-03 11:35:37 +02006345 if (_PyObject_LookupAttr(obj, state->test, &tmp) < 0) {
Serhiy Storchakaf320be72018-01-25 10:49:40 +02006346 return 1;
6347 }
6348 if (tmp == NULL) {
6349 PyErr_SetString(PyExc_TypeError, "required field \"test\" missing from If");
6350 return 1;
6351 }
6352 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006353 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02006354 res = obj2ast_expr(state, tmp, &test, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006355 if (res != 0) goto failed;
Victor Stinner1acc1292013-07-27 00:03:47 +02006356 Py_CLEAR(tmp);
Serhiy Storchakaf320be72018-01-25 10:49:40 +02006357 }
Victor Stinner74419f02020-07-03 11:35:37 +02006358 if (_PyObject_LookupAttr(obj, state->body, &tmp) < 0) {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006359 return 1;
6360 }
Serhiy Storchakaf320be72018-01-25 10:49:40 +02006361 if (tmp == NULL) {
6362 PyErr_SetString(PyExc_TypeError, "required field \"body\" missing from If");
6363 return 1;
6364 }
6365 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006366 int res;
6367 Py_ssize_t len;
6368 Py_ssize_t i;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006369 if (!PyList_Check(tmp)) {
Dino Viehlandac46eb42019-09-11 10:16:34 -07006370 PyErr_Format(PyExc_TypeError, "If field \"body\" must be a list, not a %.200s", _PyType_Name(Py_TYPE(tmp)));
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006371 goto failed;
6372 }
6373 len = PyList_GET_SIZE(tmp);
Pablo Galindoa5634c42020-09-16 19:42:00 +01006374 body = _Py_asdl_stmt_seq_new(len, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006375 if (body == NULL) goto failed;
6376 for (i = 0; i < len; i++) {
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07006377 stmt_ty val;
Serhiy Storchaka43c97312019-09-10 13:02:30 +03006378 PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
6379 Py_INCREF(tmp2);
Victor Stinner74419f02020-07-03 11:35:37 +02006380 res = obj2ast_stmt(state, tmp2, &val, arena);
Serhiy Storchaka43c97312019-09-10 13:02:30 +03006381 Py_DECREF(tmp2);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006382 if (res != 0) goto failed;
Serhiy Storchakacf380602016-10-07 21:51:28 +03006383 if (len != PyList_GET_SIZE(tmp)) {
6384 PyErr_SetString(PyExc_RuntimeError, "If field \"body\" changed size during iteration");
6385 goto failed;
6386 }
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07006387 asdl_seq_SET(body, i, val);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006388 }
Victor Stinner1acc1292013-07-27 00:03:47 +02006389 Py_CLEAR(tmp);
Serhiy Storchakaf320be72018-01-25 10:49:40 +02006390 }
Victor Stinner74419f02020-07-03 11:35:37 +02006391 if (_PyObject_LookupAttr(obj, state->orelse, &tmp) < 0) {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006392 return 1;
6393 }
Serhiy Storchakaf320be72018-01-25 10:49:40 +02006394 if (tmp == NULL) {
6395 PyErr_SetString(PyExc_TypeError, "required field \"orelse\" missing from If");
6396 return 1;
6397 }
6398 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006399 int res;
6400 Py_ssize_t len;
6401 Py_ssize_t i;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006402 if (!PyList_Check(tmp)) {
Dino Viehlandac46eb42019-09-11 10:16:34 -07006403 PyErr_Format(PyExc_TypeError, "If field \"orelse\" must be a list, not a %.200s", _PyType_Name(Py_TYPE(tmp)));
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006404 goto failed;
6405 }
6406 len = PyList_GET_SIZE(tmp);
Pablo Galindoa5634c42020-09-16 19:42:00 +01006407 orelse = _Py_asdl_stmt_seq_new(len, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006408 if (orelse == NULL) goto failed;
6409 for (i = 0; i < len; i++) {
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07006410 stmt_ty val;
Serhiy Storchaka43c97312019-09-10 13:02:30 +03006411 PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
6412 Py_INCREF(tmp2);
Victor Stinner74419f02020-07-03 11:35:37 +02006413 res = obj2ast_stmt(state, tmp2, &val, arena);
Serhiy Storchaka43c97312019-09-10 13:02:30 +03006414 Py_DECREF(tmp2);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006415 if (res != 0) goto failed;
Serhiy Storchakacf380602016-10-07 21:51:28 +03006416 if (len != PyList_GET_SIZE(tmp)) {
6417 PyErr_SetString(PyExc_RuntimeError, "If field \"orelse\" changed size during iteration");
6418 goto failed;
6419 }
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07006420 asdl_seq_SET(orelse, i, val);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006421 }
Victor Stinner1acc1292013-07-27 00:03:47 +02006422 Py_CLEAR(tmp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006423 }
Victor Stinnerd27f8d22021-04-07 21:34:22 +02006424 *out = _PyAST_If(test, body, orelse, lineno, col_offset, end_lineno,
6425 end_col_offset, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006426 if (*out == NULL) goto failed;
6427 return 0;
6428 }
Victor Stinner74419f02020-07-03 11:35:37 +02006429 tp = state->With_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07006430 isinstance = PyObject_IsInstance(obj, tp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006431 if (isinstance == -1) {
6432 return 1;
6433 }
6434 if (isinstance) {
Pablo Galindoa5634c42020-09-16 19:42:00 +01006435 asdl_withitem_seq* items;
6436 asdl_stmt_seq* body;
Guido van Rossumdcfcd142019-01-31 03:40:27 -08006437 string type_comment;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006438
Victor Stinner74419f02020-07-03 11:35:37 +02006439 if (_PyObject_LookupAttr(obj, state->items, &tmp) < 0) {
Serhiy Storchakaf320be72018-01-25 10:49:40 +02006440 return 1;
6441 }
6442 if (tmp == NULL) {
6443 PyErr_SetString(PyExc_TypeError, "required field \"items\" missing from With");
6444 return 1;
6445 }
6446 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006447 int res;
6448 Py_ssize_t len;
6449 Py_ssize_t i;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006450 if (!PyList_Check(tmp)) {
Dino Viehlandac46eb42019-09-11 10:16:34 -07006451 PyErr_Format(PyExc_TypeError, "With field \"items\" must be a list, not a %.200s", _PyType_Name(Py_TYPE(tmp)));
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006452 goto failed;
6453 }
6454 len = PyList_GET_SIZE(tmp);
Pablo Galindoa5634c42020-09-16 19:42:00 +01006455 items = _Py_asdl_withitem_seq_new(len, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006456 if (items == NULL) goto failed;
6457 for (i = 0; i < len; i++) {
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07006458 withitem_ty val;
Serhiy Storchaka43c97312019-09-10 13:02:30 +03006459 PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
6460 Py_INCREF(tmp2);
Victor Stinner74419f02020-07-03 11:35:37 +02006461 res = obj2ast_withitem(state, tmp2, &val, arena);
Serhiy Storchaka43c97312019-09-10 13:02:30 +03006462 Py_DECREF(tmp2);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006463 if (res != 0) goto failed;
Serhiy Storchakacf380602016-10-07 21:51:28 +03006464 if (len != PyList_GET_SIZE(tmp)) {
6465 PyErr_SetString(PyExc_RuntimeError, "With field \"items\" changed size during iteration");
6466 goto failed;
6467 }
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07006468 asdl_seq_SET(items, i, val);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006469 }
Victor Stinner1acc1292013-07-27 00:03:47 +02006470 Py_CLEAR(tmp);
Serhiy Storchakaf320be72018-01-25 10:49:40 +02006471 }
Victor Stinner74419f02020-07-03 11:35:37 +02006472 if (_PyObject_LookupAttr(obj, state->body, &tmp) < 0) {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006473 return 1;
6474 }
Serhiy Storchakaf320be72018-01-25 10:49:40 +02006475 if (tmp == NULL) {
6476 PyErr_SetString(PyExc_TypeError, "required field \"body\" missing from With");
6477 return 1;
6478 }
6479 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006480 int res;
6481 Py_ssize_t len;
6482 Py_ssize_t i;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006483 if (!PyList_Check(tmp)) {
Dino Viehlandac46eb42019-09-11 10:16:34 -07006484 PyErr_Format(PyExc_TypeError, "With field \"body\" must be a list, not a %.200s", _PyType_Name(Py_TYPE(tmp)));
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006485 goto failed;
6486 }
6487 len = PyList_GET_SIZE(tmp);
Pablo Galindoa5634c42020-09-16 19:42:00 +01006488 body = _Py_asdl_stmt_seq_new(len, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006489 if (body == NULL) goto failed;
6490 for (i = 0; i < len; i++) {
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07006491 stmt_ty val;
Serhiy Storchaka43c97312019-09-10 13:02:30 +03006492 PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
6493 Py_INCREF(tmp2);
Victor Stinner74419f02020-07-03 11:35:37 +02006494 res = obj2ast_stmt(state, tmp2, &val, arena);
Serhiy Storchaka43c97312019-09-10 13:02:30 +03006495 Py_DECREF(tmp2);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006496 if (res != 0) goto failed;
Serhiy Storchakacf380602016-10-07 21:51:28 +03006497 if (len != PyList_GET_SIZE(tmp)) {
6498 PyErr_SetString(PyExc_RuntimeError, "With field \"body\" changed size during iteration");
6499 goto failed;
6500 }
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07006501 asdl_seq_SET(body, i, val);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006502 }
Victor Stinner1acc1292013-07-27 00:03:47 +02006503 Py_CLEAR(tmp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006504 }
Victor Stinner74419f02020-07-03 11:35:37 +02006505 if (_PyObject_LookupAttr(obj, state->type_comment, &tmp) < 0) {
Guido van Rossumdcfcd142019-01-31 03:40:27 -08006506 return 1;
6507 }
6508 if (tmp == NULL || tmp == Py_None) {
6509 Py_CLEAR(tmp);
6510 type_comment = NULL;
6511 }
6512 else {
6513 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02006514 res = obj2ast_string(state, tmp, &type_comment, arena);
Guido van Rossumdcfcd142019-01-31 03:40:27 -08006515 if (res != 0) goto failed;
6516 Py_CLEAR(tmp);
6517 }
Victor Stinnerd27f8d22021-04-07 21:34:22 +02006518 *out = _PyAST_With(items, body, type_comment, lineno, col_offset,
6519 end_lineno, end_col_offset, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006520 if (*out == NULL) goto failed;
6521 return 0;
6522 }
Victor Stinner74419f02020-07-03 11:35:37 +02006523 tp = state->AsyncWith_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07006524 isinstance = PyObject_IsInstance(obj, tp);
Yury Selivanov75445082015-05-11 22:57:16 -04006525 if (isinstance == -1) {
6526 return 1;
6527 }
6528 if (isinstance) {
Pablo Galindoa5634c42020-09-16 19:42:00 +01006529 asdl_withitem_seq* items;
6530 asdl_stmt_seq* body;
Guido van Rossumdcfcd142019-01-31 03:40:27 -08006531 string type_comment;
Yury Selivanov75445082015-05-11 22:57:16 -04006532
Victor Stinner74419f02020-07-03 11:35:37 +02006533 if (_PyObject_LookupAttr(obj, state->items, &tmp) < 0) {
Serhiy Storchakaf320be72018-01-25 10:49:40 +02006534 return 1;
6535 }
6536 if (tmp == NULL) {
6537 PyErr_SetString(PyExc_TypeError, "required field \"items\" missing from AsyncWith");
6538 return 1;
6539 }
6540 else {
Yury Selivanov75445082015-05-11 22:57:16 -04006541 int res;
6542 Py_ssize_t len;
6543 Py_ssize_t i;
Yury Selivanov75445082015-05-11 22:57:16 -04006544 if (!PyList_Check(tmp)) {
Dino Viehlandac46eb42019-09-11 10:16:34 -07006545 PyErr_Format(PyExc_TypeError, "AsyncWith field \"items\" must be a list, not a %.200s", _PyType_Name(Py_TYPE(tmp)));
Yury Selivanov75445082015-05-11 22:57:16 -04006546 goto failed;
6547 }
6548 len = PyList_GET_SIZE(tmp);
Pablo Galindoa5634c42020-09-16 19:42:00 +01006549 items = _Py_asdl_withitem_seq_new(len, arena);
Yury Selivanov75445082015-05-11 22:57:16 -04006550 if (items == NULL) goto failed;
6551 for (i = 0; i < len; i++) {
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07006552 withitem_ty val;
Serhiy Storchaka43c97312019-09-10 13:02:30 +03006553 PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
6554 Py_INCREF(tmp2);
Victor Stinner74419f02020-07-03 11:35:37 +02006555 res = obj2ast_withitem(state, tmp2, &val, arena);
Serhiy Storchaka43c97312019-09-10 13:02:30 +03006556 Py_DECREF(tmp2);
Yury Selivanov75445082015-05-11 22:57:16 -04006557 if (res != 0) goto failed;
Serhiy Storchakacf380602016-10-07 21:51:28 +03006558 if (len != PyList_GET_SIZE(tmp)) {
6559 PyErr_SetString(PyExc_RuntimeError, "AsyncWith field \"items\" changed size during iteration");
6560 goto failed;
6561 }
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07006562 asdl_seq_SET(items, i, val);
Yury Selivanov75445082015-05-11 22:57:16 -04006563 }
6564 Py_CLEAR(tmp);
Serhiy Storchakaf320be72018-01-25 10:49:40 +02006565 }
Victor Stinner74419f02020-07-03 11:35:37 +02006566 if (_PyObject_LookupAttr(obj, state->body, &tmp) < 0) {
Yury Selivanov75445082015-05-11 22:57:16 -04006567 return 1;
6568 }
Serhiy Storchakaf320be72018-01-25 10:49:40 +02006569 if (tmp == NULL) {
6570 PyErr_SetString(PyExc_TypeError, "required field \"body\" missing from AsyncWith");
6571 return 1;
6572 }
6573 else {
Yury Selivanov75445082015-05-11 22:57:16 -04006574 int res;
6575 Py_ssize_t len;
6576 Py_ssize_t i;
Yury Selivanov75445082015-05-11 22:57:16 -04006577 if (!PyList_Check(tmp)) {
Dino Viehlandac46eb42019-09-11 10:16:34 -07006578 PyErr_Format(PyExc_TypeError, "AsyncWith field \"body\" must be a list, not a %.200s", _PyType_Name(Py_TYPE(tmp)));
Yury Selivanov75445082015-05-11 22:57:16 -04006579 goto failed;
6580 }
6581 len = PyList_GET_SIZE(tmp);
Pablo Galindoa5634c42020-09-16 19:42:00 +01006582 body = _Py_asdl_stmt_seq_new(len, arena);
Yury Selivanov75445082015-05-11 22:57:16 -04006583 if (body == NULL) goto failed;
6584 for (i = 0; i < len; i++) {
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07006585 stmt_ty val;
Serhiy Storchaka43c97312019-09-10 13:02:30 +03006586 PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
6587 Py_INCREF(tmp2);
Victor Stinner74419f02020-07-03 11:35:37 +02006588 res = obj2ast_stmt(state, tmp2, &val, arena);
Serhiy Storchaka43c97312019-09-10 13:02:30 +03006589 Py_DECREF(tmp2);
Yury Selivanov75445082015-05-11 22:57:16 -04006590 if (res != 0) goto failed;
Serhiy Storchakacf380602016-10-07 21:51:28 +03006591 if (len != PyList_GET_SIZE(tmp)) {
6592 PyErr_SetString(PyExc_RuntimeError, "AsyncWith field \"body\" changed size during iteration");
6593 goto failed;
6594 }
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07006595 asdl_seq_SET(body, i, val);
Yury Selivanov75445082015-05-11 22:57:16 -04006596 }
6597 Py_CLEAR(tmp);
Yury Selivanov75445082015-05-11 22:57:16 -04006598 }
Victor Stinner74419f02020-07-03 11:35:37 +02006599 if (_PyObject_LookupAttr(obj, state->type_comment, &tmp) < 0) {
Guido van Rossumdcfcd142019-01-31 03:40:27 -08006600 return 1;
6601 }
6602 if (tmp == NULL || tmp == Py_None) {
6603 Py_CLEAR(tmp);
6604 type_comment = NULL;
6605 }
6606 else {
6607 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02006608 res = obj2ast_string(state, tmp, &type_comment, arena);
Guido van Rossumdcfcd142019-01-31 03:40:27 -08006609 if (res != 0) goto failed;
6610 Py_CLEAR(tmp);
6611 }
Victor Stinnerd27f8d22021-04-07 21:34:22 +02006612 *out = _PyAST_AsyncWith(items, body, type_comment, lineno, col_offset,
6613 end_lineno, end_col_offset, arena);
Yury Selivanov75445082015-05-11 22:57:16 -04006614 if (*out == NULL) goto failed;
6615 return 0;
6616 }
Brandt Bucher145bf262021-02-26 14:51:55 -08006617 tp = state->Match_type;
6618 isinstance = PyObject_IsInstance(obj, tp);
6619 if (isinstance == -1) {
6620 return 1;
6621 }
6622 if (isinstance) {
6623 expr_ty subject;
6624 asdl_match_case_seq* cases;
6625
6626 if (_PyObject_LookupAttr(obj, state->subject, &tmp) < 0) {
6627 return 1;
6628 }
6629 if (tmp == NULL) {
6630 PyErr_SetString(PyExc_TypeError, "required field \"subject\" missing from Match");
6631 return 1;
6632 }
6633 else {
6634 int res;
6635 res = obj2ast_expr(state, tmp, &subject, arena);
6636 if (res != 0) goto failed;
6637 Py_CLEAR(tmp);
6638 }
6639 if (_PyObject_LookupAttr(obj, state->cases, &tmp) < 0) {
6640 return 1;
6641 }
6642 if (tmp == NULL) {
6643 PyErr_SetString(PyExc_TypeError, "required field \"cases\" missing from Match");
6644 return 1;
6645 }
6646 else {
6647 int res;
6648 Py_ssize_t len;
6649 Py_ssize_t i;
6650 if (!PyList_Check(tmp)) {
6651 PyErr_Format(PyExc_TypeError, "Match field \"cases\" must be a list, not a %.200s", _PyType_Name(Py_TYPE(tmp)));
6652 goto failed;
6653 }
6654 len = PyList_GET_SIZE(tmp);
6655 cases = _Py_asdl_match_case_seq_new(len, arena);
6656 if (cases == NULL) goto failed;
6657 for (i = 0; i < len; i++) {
6658 match_case_ty val;
6659 PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
6660 Py_INCREF(tmp2);
6661 res = obj2ast_match_case(state, tmp2, &val, arena);
6662 Py_DECREF(tmp2);
6663 if (res != 0) goto failed;
6664 if (len != PyList_GET_SIZE(tmp)) {
6665 PyErr_SetString(PyExc_RuntimeError, "Match field \"cases\" changed size during iteration");
6666 goto failed;
6667 }
6668 asdl_seq_SET(cases, i, val);
6669 }
6670 Py_CLEAR(tmp);
6671 }
Victor Stinnerd27f8d22021-04-07 21:34:22 +02006672 *out = _PyAST_Match(subject, cases, lineno, col_offset, end_lineno,
6673 end_col_offset, arena);
Brandt Bucher145bf262021-02-26 14:51:55 -08006674 if (*out == NULL) goto failed;
6675 return 0;
6676 }
Victor Stinner74419f02020-07-03 11:35:37 +02006677 tp = state->Raise_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07006678 isinstance = PyObject_IsInstance(obj, tp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006679 if (isinstance == -1) {
6680 return 1;
6681 }
6682 if (isinstance) {
6683 expr_ty exc;
6684 expr_ty cause;
6685
Victor Stinner74419f02020-07-03 11:35:37 +02006686 if (_PyObject_LookupAttr(obj, state->exc, &tmp) < 0) {
Serhiy Storchakaf320be72018-01-25 10:49:40 +02006687 return 1;
6688 }
6689 if (tmp == NULL || tmp == Py_None) {
6690 Py_CLEAR(tmp);
6691 exc = NULL;
6692 }
6693 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006694 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02006695 res = obj2ast_expr(state, tmp, &exc, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006696 if (res != 0) goto failed;
Victor Stinner1acc1292013-07-27 00:03:47 +02006697 Py_CLEAR(tmp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006698 }
Victor Stinner74419f02020-07-03 11:35:37 +02006699 if (_PyObject_LookupAttr(obj, state->cause, &tmp) < 0) {
Serhiy Storchakaf320be72018-01-25 10:49:40 +02006700 return 1;
6701 }
6702 if (tmp == NULL || tmp == Py_None) {
6703 Py_CLEAR(tmp);
6704 cause = NULL;
6705 }
6706 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006707 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02006708 res = obj2ast_expr(state, tmp, &cause, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006709 if (res != 0) goto failed;
Victor Stinner1acc1292013-07-27 00:03:47 +02006710 Py_CLEAR(tmp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006711 }
Victor Stinnerd27f8d22021-04-07 21:34:22 +02006712 *out = _PyAST_Raise(exc, cause, lineno, col_offset, end_lineno,
6713 end_col_offset, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006714 if (*out == NULL) goto failed;
6715 return 0;
6716 }
Victor Stinner74419f02020-07-03 11:35:37 +02006717 tp = state->Try_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07006718 isinstance = PyObject_IsInstance(obj, tp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006719 if (isinstance == -1) {
6720 return 1;
6721 }
6722 if (isinstance) {
Pablo Galindoa5634c42020-09-16 19:42:00 +01006723 asdl_stmt_seq* body;
6724 asdl_excepthandler_seq* handlers;
6725 asdl_stmt_seq* orelse;
6726 asdl_stmt_seq* finalbody;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006727
Victor Stinner74419f02020-07-03 11:35:37 +02006728 if (_PyObject_LookupAttr(obj, state->body, &tmp) < 0) {
Serhiy Storchakaf320be72018-01-25 10:49:40 +02006729 return 1;
6730 }
6731 if (tmp == NULL) {
6732 PyErr_SetString(PyExc_TypeError, "required field \"body\" missing from Try");
6733 return 1;
6734 }
6735 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006736 int res;
6737 Py_ssize_t len;
6738 Py_ssize_t i;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006739 if (!PyList_Check(tmp)) {
Dino Viehlandac46eb42019-09-11 10:16:34 -07006740 PyErr_Format(PyExc_TypeError, "Try field \"body\" must be a list, not a %.200s", _PyType_Name(Py_TYPE(tmp)));
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006741 goto failed;
6742 }
6743 len = PyList_GET_SIZE(tmp);
Pablo Galindoa5634c42020-09-16 19:42:00 +01006744 body = _Py_asdl_stmt_seq_new(len, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006745 if (body == NULL) goto failed;
6746 for (i = 0; i < len; i++) {
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07006747 stmt_ty val;
Serhiy Storchaka43c97312019-09-10 13:02:30 +03006748 PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
6749 Py_INCREF(tmp2);
Victor Stinner74419f02020-07-03 11:35:37 +02006750 res = obj2ast_stmt(state, tmp2, &val, arena);
Serhiy Storchaka43c97312019-09-10 13:02:30 +03006751 Py_DECREF(tmp2);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006752 if (res != 0) goto failed;
Serhiy Storchakacf380602016-10-07 21:51:28 +03006753 if (len != PyList_GET_SIZE(tmp)) {
6754 PyErr_SetString(PyExc_RuntimeError, "Try field \"body\" changed size during iteration");
6755 goto failed;
6756 }
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07006757 asdl_seq_SET(body, i, val);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006758 }
Victor Stinner1acc1292013-07-27 00:03:47 +02006759 Py_CLEAR(tmp);
Serhiy Storchakaf320be72018-01-25 10:49:40 +02006760 }
Victor Stinner74419f02020-07-03 11:35:37 +02006761 if (_PyObject_LookupAttr(obj, state->handlers, &tmp) < 0) {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006762 return 1;
6763 }
Serhiy Storchakaf320be72018-01-25 10:49:40 +02006764 if (tmp == NULL) {
6765 PyErr_SetString(PyExc_TypeError, "required field \"handlers\" missing from Try");
6766 return 1;
6767 }
6768 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006769 int res;
6770 Py_ssize_t len;
6771 Py_ssize_t i;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006772 if (!PyList_Check(tmp)) {
Dino Viehlandac46eb42019-09-11 10:16:34 -07006773 PyErr_Format(PyExc_TypeError, "Try field \"handlers\" must be a list, not a %.200s", _PyType_Name(Py_TYPE(tmp)));
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006774 goto failed;
6775 }
6776 len = PyList_GET_SIZE(tmp);
Pablo Galindoa5634c42020-09-16 19:42:00 +01006777 handlers = _Py_asdl_excepthandler_seq_new(len, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006778 if (handlers == NULL) goto failed;
6779 for (i = 0; i < len; i++) {
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07006780 excepthandler_ty val;
Serhiy Storchaka43c97312019-09-10 13:02:30 +03006781 PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
6782 Py_INCREF(tmp2);
Victor Stinner74419f02020-07-03 11:35:37 +02006783 res = obj2ast_excepthandler(state, tmp2, &val, arena);
Serhiy Storchaka43c97312019-09-10 13:02:30 +03006784 Py_DECREF(tmp2);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006785 if (res != 0) goto failed;
Serhiy Storchakacf380602016-10-07 21:51:28 +03006786 if (len != PyList_GET_SIZE(tmp)) {
6787 PyErr_SetString(PyExc_RuntimeError, "Try field \"handlers\" changed size during iteration");
6788 goto failed;
6789 }
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07006790 asdl_seq_SET(handlers, i, val);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006791 }
Victor Stinner1acc1292013-07-27 00:03:47 +02006792 Py_CLEAR(tmp);
Serhiy Storchakaf320be72018-01-25 10:49:40 +02006793 }
Victor Stinner74419f02020-07-03 11:35:37 +02006794 if (_PyObject_LookupAttr(obj, state->orelse, &tmp) < 0) {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006795 return 1;
6796 }
Serhiy Storchakaf320be72018-01-25 10:49:40 +02006797 if (tmp == NULL) {
6798 PyErr_SetString(PyExc_TypeError, "required field \"orelse\" missing from Try");
6799 return 1;
6800 }
6801 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006802 int res;
6803 Py_ssize_t len;
6804 Py_ssize_t i;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006805 if (!PyList_Check(tmp)) {
Dino Viehlandac46eb42019-09-11 10:16:34 -07006806 PyErr_Format(PyExc_TypeError, "Try field \"orelse\" must be a list, not a %.200s", _PyType_Name(Py_TYPE(tmp)));
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006807 goto failed;
6808 }
6809 len = PyList_GET_SIZE(tmp);
Pablo Galindoa5634c42020-09-16 19:42:00 +01006810 orelse = _Py_asdl_stmt_seq_new(len, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006811 if (orelse == NULL) goto failed;
6812 for (i = 0; i < len; i++) {
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07006813 stmt_ty val;
Serhiy Storchaka43c97312019-09-10 13:02:30 +03006814 PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
6815 Py_INCREF(tmp2);
Victor Stinner74419f02020-07-03 11:35:37 +02006816 res = obj2ast_stmt(state, tmp2, &val, arena);
Serhiy Storchaka43c97312019-09-10 13:02:30 +03006817 Py_DECREF(tmp2);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006818 if (res != 0) goto failed;
Serhiy Storchakacf380602016-10-07 21:51:28 +03006819 if (len != PyList_GET_SIZE(tmp)) {
6820 PyErr_SetString(PyExc_RuntimeError, "Try field \"orelse\" changed size during iteration");
6821 goto failed;
6822 }
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07006823 asdl_seq_SET(orelse, i, val);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006824 }
Victor Stinner1acc1292013-07-27 00:03:47 +02006825 Py_CLEAR(tmp);
Serhiy Storchakaf320be72018-01-25 10:49:40 +02006826 }
Victor Stinner74419f02020-07-03 11:35:37 +02006827 if (_PyObject_LookupAttr(obj, state->finalbody, &tmp) < 0) {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006828 return 1;
6829 }
Serhiy Storchakaf320be72018-01-25 10:49:40 +02006830 if (tmp == NULL) {
6831 PyErr_SetString(PyExc_TypeError, "required field \"finalbody\" missing from Try");
6832 return 1;
6833 }
6834 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006835 int res;
6836 Py_ssize_t len;
6837 Py_ssize_t i;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006838 if (!PyList_Check(tmp)) {
Dino Viehlandac46eb42019-09-11 10:16:34 -07006839 PyErr_Format(PyExc_TypeError, "Try field \"finalbody\" must be a list, not a %.200s", _PyType_Name(Py_TYPE(tmp)));
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006840 goto failed;
6841 }
6842 len = PyList_GET_SIZE(tmp);
Pablo Galindoa5634c42020-09-16 19:42:00 +01006843 finalbody = _Py_asdl_stmt_seq_new(len, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006844 if (finalbody == NULL) goto failed;
6845 for (i = 0; i < len; i++) {
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07006846 stmt_ty val;
Serhiy Storchaka43c97312019-09-10 13:02:30 +03006847 PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
6848 Py_INCREF(tmp2);
Victor Stinner74419f02020-07-03 11:35:37 +02006849 res = obj2ast_stmt(state, tmp2, &val, arena);
Serhiy Storchaka43c97312019-09-10 13:02:30 +03006850 Py_DECREF(tmp2);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006851 if (res != 0) goto failed;
Serhiy Storchakacf380602016-10-07 21:51:28 +03006852 if (len != PyList_GET_SIZE(tmp)) {
6853 PyErr_SetString(PyExc_RuntimeError, "Try field \"finalbody\" changed size during iteration");
6854 goto failed;
6855 }
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07006856 asdl_seq_SET(finalbody, i, val);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006857 }
Victor Stinner1acc1292013-07-27 00:03:47 +02006858 Py_CLEAR(tmp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006859 }
Victor Stinnerd27f8d22021-04-07 21:34:22 +02006860 *out = _PyAST_Try(body, handlers, orelse, finalbody, lineno,
6861 col_offset, end_lineno, end_col_offset, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006862 if (*out == NULL) goto failed;
6863 return 0;
6864 }
Victor Stinner74419f02020-07-03 11:35:37 +02006865 tp = state->Assert_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07006866 isinstance = PyObject_IsInstance(obj, tp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006867 if (isinstance == -1) {
6868 return 1;
6869 }
6870 if (isinstance) {
6871 expr_ty test;
6872 expr_ty msg;
6873
Victor Stinner74419f02020-07-03 11:35:37 +02006874 if (_PyObject_LookupAttr(obj, state->test, &tmp) < 0) {
Serhiy Storchakaf320be72018-01-25 10:49:40 +02006875 return 1;
6876 }
6877 if (tmp == NULL) {
6878 PyErr_SetString(PyExc_TypeError, "required field \"test\" missing from Assert");
6879 return 1;
6880 }
6881 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006882 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02006883 res = obj2ast_expr(state, tmp, &test, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006884 if (res != 0) goto failed;
Victor Stinner1acc1292013-07-27 00:03:47 +02006885 Py_CLEAR(tmp);
Serhiy Storchakaf320be72018-01-25 10:49:40 +02006886 }
Victor Stinner74419f02020-07-03 11:35:37 +02006887 if (_PyObject_LookupAttr(obj, state->msg, &tmp) < 0) {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006888 return 1;
6889 }
Serhiy Storchakaf320be72018-01-25 10:49:40 +02006890 if (tmp == NULL || tmp == Py_None) {
6891 Py_CLEAR(tmp);
6892 msg = NULL;
6893 }
6894 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006895 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02006896 res = obj2ast_expr(state, tmp, &msg, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006897 if (res != 0) goto failed;
Victor Stinner1acc1292013-07-27 00:03:47 +02006898 Py_CLEAR(tmp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006899 }
Victor Stinnerd27f8d22021-04-07 21:34:22 +02006900 *out = _PyAST_Assert(test, msg, lineno, col_offset, end_lineno,
6901 end_col_offset, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006902 if (*out == NULL) goto failed;
6903 return 0;
6904 }
Victor Stinner74419f02020-07-03 11:35:37 +02006905 tp = state->Import_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07006906 isinstance = PyObject_IsInstance(obj, tp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006907 if (isinstance == -1) {
6908 return 1;
6909 }
6910 if (isinstance) {
Pablo Galindoa5634c42020-09-16 19:42:00 +01006911 asdl_alias_seq* names;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006912
Victor Stinner74419f02020-07-03 11:35:37 +02006913 if (_PyObject_LookupAttr(obj, state->names, &tmp) < 0) {
Serhiy Storchakaf320be72018-01-25 10:49:40 +02006914 return 1;
6915 }
6916 if (tmp == NULL) {
6917 PyErr_SetString(PyExc_TypeError, "required field \"names\" missing from Import");
6918 return 1;
6919 }
6920 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006921 int res;
6922 Py_ssize_t len;
6923 Py_ssize_t i;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006924 if (!PyList_Check(tmp)) {
Dino Viehlandac46eb42019-09-11 10:16:34 -07006925 PyErr_Format(PyExc_TypeError, "Import field \"names\" must be a list, not a %.200s", _PyType_Name(Py_TYPE(tmp)));
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006926 goto failed;
6927 }
6928 len = PyList_GET_SIZE(tmp);
Pablo Galindoa5634c42020-09-16 19:42:00 +01006929 names = _Py_asdl_alias_seq_new(len, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006930 if (names == NULL) goto failed;
6931 for (i = 0; i < len; i++) {
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07006932 alias_ty val;
Serhiy Storchaka43c97312019-09-10 13:02:30 +03006933 PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
6934 Py_INCREF(tmp2);
Victor Stinner74419f02020-07-03 11:35:37 +02006935 res = obj2ast_alias(state, tmp2, &val, arena);
Serhiy Storchaka43c97312019-09-10 13:02:30 +03006936 Py_DECREF(tmp2);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006937 if (res != 0) goto failed;
Serhiy Storchakacf380602016-10-07 21:51:28 +03006938 if (len != PyList_GET_SIZE(tmp)) {
6939 PyErr_SetString(PyExc_RuntimeError, "Import field \"names\" changed size during iteration");
6940 goto failed;
6941 }
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07006942 asdl_seq_SET(names, i, val);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006943 }
Victor Stinner1acc1292013-07-27 00:03:47 +02006944 Py_CLEAR(tmp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006945 }
Victor Stinnerd27f8d22021-04-07 21:34:22 +02006946 *out = _PyAST_Import(names, lineno, col_offset, end_lineno,
6947 end_col_offset, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006948 if (*out == NULL) goto failed;
6949 return 0;
6950 }
Victor Stinner74419f02020-07-03 11:35:37 +02006951 tp = state->ImportFrom_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07006952 isinstance = PyObject_IsInstance(obj, tp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006953 if (isinstance == -1) {
6954 return 1;
6955 }
6956 if (isinstance) {
6957 identifier module;
Pablo Galindoa5634c42020-09-16 19:42:00 +01006958 asdl_alias_seq* names;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006959 int level;
6960
Victor Stinner74419f02020-07-03 11:35:37 +02006961 if (_PyObject_LookupAttr(obj, state->module, &tmp) < 0) {
Serhiy Storchakaf320be72018-01-25 10:49:40 +02006962 return 1;
6963 }
6964 if (tmp == NULL || tmp == Py_None) {
6965 Py_CLEAR(tmp);
6966 module = NULL;
6967 }
6968 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006969 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02006970 res = obj2ast_identifier(state, tmp, &module, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006971 if (res != 0) goto failed;
Victor Stinner1acc1292013-07-27 00:03:47 +02006972 Py_CLEAR(tmp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006973 }
Victor Stinner74419f02020-07-03 11:35:37 +02006974 if (_PyObject_LookupAttr(obj, state->names, &tmp) < 0) {
Serhiy Storchakaf320be72018-01-25 10:49:40 +02006975 return 1;
6976 }
6977 if (tmp == NULL) {
6978 PyErr_SetString(PyExc_TypeError, "required field \"names\" missing from ImportFrom");
6979 return 1;
6980 }
6981 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006982 int res;
6983 Py_ssize_t len;
6984 Py_ssize_t i;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006985 if (!PyList_Check(tmp)) {
Dino Viehlandac46eb42019-09-11 10:16:34 -07006986 PyErr_Format(PyExc_TypeError, "ImportFrom field \"names\" must be a list, not a %.200s", _PyType_Name(Py_TYPE(tmp)));
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006987 goto failed;
6988 }
6989 len = PyList_GET_SIZE(tmp);
Pablo Galindoa5634c42020-09-16 19:42:00 +01006990 names = _Py_asdl_alias_seq_new(len, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006991 if (names == NULL) goto failed;
6992 for (i = 0; i < len; i++) {
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07006993 alias_ty val;
Serhiy Storchaka43c97312019-09-10 13:02:30 +03006994 PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
6995 Py_INCREF(tmp2);
Victor Stinner74419f02020-07-03 11:35:37 +02006996 res = obj2ast_alias(state, tmp2, &val, arena);
Serhiy Storchaka43c97312019-09-10 13:02:30 +03006997 Py_DECREF(tmp2);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006998 if (res != 0) goto failed;
Serhiy Storchakacf380602016-10-07 21:51:28 +03006999 if (len != PyList_GET_SIZE(tmp)) {
7000 PyErr_SetString(PyExc_RuntimeError, "ImportFrom field \"names\" changed size during iteration");
7001 goto failed;
7002 }
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07007003 asdl_seq_SET(names, i, val);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007004 }
Victor Stinner1acc1292013-07-27 00:03:47 +02007005 Py_CLEAR(tmp);
Serhiy Storchakaf320be72018-01-25 10:49:40 +02007006 }
Victor Stinner74419f02020-07-03 11:35:37 +02007007 if (_PyObject_LookupAttr(obj, state->level, &tmp) < 0) {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007008 return 1;
7009 }
Serhiy Storchakaf320be72018-01-25 10:49:40 +02007010 if (tmp == NULL || tmp == Py_None) {
7011 Py_CLEAR(tmp);
7012 level = 0;
7013 }
7014 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007015 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02007016 res = obj2ast_int(state, tmp, &level, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007017 if (res != 0) goto failed;
Victor Stinner1acc1292013-07-27 00:03:47 +02007018 Py_CLEAR(tmp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007019 }
Victor Stinnerd27f8d22021-04-07 21:34:22 +02007020 *out = _PyAST_ImportFrom(module, names, level, lineno, col_offset,
7021 end_lineno, end_col_offset, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007022 if (*out == NULL) goto failed;
7023 return 0;
7024 }
Victor Stinner74419f02020-07-03 11:35:37 +02007025 tp = state->Global_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07007026 isinstance = PyObject_IsInstance(obj, tp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007027 if (isinstance == -1) {
7028 return 1;
7029 }
7030 if (isinstance) {
Pablo Galindoa5634c42020-09-16 19:42:00 +01007031 asdl_identifier_seq* names;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007032
Victor Stinner74419f02020-07-03 11:35:37 +02007033 if (_PyObject_LookupAttr(obj, state->names, &tmp) < 0) {
Serhiy Storchakaf320be72018-01-25 10:49:40 +02007034 return 1;
7035 }
7036 if (tmp == NULL) {
7037 PyErr_SetString(PyExc_TypeError, "required field \"names\" missing from Global");
7038 return 1;
7039 }
7040 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007041 int res;
7042 Py_ssize_t len;
7043 Py_ssize_t i;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007044 if (!PyList_Check(tmp)) {
Dino Viehlandac46eb42019-09-11 10:16:34 -07007045 PyErr_Format(PyExc_TypeError, "Global field \"names\" must be a list, not a %.200s", _PyType_Name(Py_TYPE(tmp)));
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007046 goto failed;
7047 }
7048 len = PyList_GET_SIZE(tmp);
Pablo Galindoa5634c42020-09-16 19:42:00 +01007049 names = _Py_asdl_identifier_seq_new(len, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007050 if (names == NULL) goto failed;
7051 for (i = 0; i < len; i++) {
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07007052 identifier val;
Serhiy Storchaka43c97312019-09-10 13:02:30 +03007053 PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
7054 Py_INCREF(tmp2);
Victor Stinner74419f02020-07-03 11:35:37 +02007055 res = obj2ast_identifier(state, tmp2, &val, arena);
Serhiy Storchaka43c97312019-09-10 13:02:30 +03007056 Py_DECREF(tmp2);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007057 if (res != 0) goto failed;
Serhiy Storchakacf380602016-10-07 21:51:28 +03007058 if (len != PyList_GET_SIZE(tmp)) {
7059 PyErr_SetString(PyExc_RuntimeError, "Global field \"names\" changed size during iteration");
7060 goto failed;
7061 }
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07007062 asdl_seq_SET(names, i, val);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007063 }
Victor Stinner1acc1292013-07-27 00:03:47 +02007064 Py_CLEAR(tmp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007065 }
Victor Stinnerd27f8d22021-04-07 21:34:22 +02007066 *out = _PyAST_Global(names, lineno, col_offset, end_lineno,
7067 end_col_offset, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007068 if (*out == NULL) goto failed;
7069 return 0;
7070 }
Victor Stinner74419f02020-07-03 11:35:37 +02007071 tp = state->Nonlocal_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07007072 isinstance = PyObject_IsInstance(obj, tp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007073 if (isinstance == -1) {
7074 return 1;
7075 }
7076 if (isinstance) {
Pablo Galindoa5634c42020-09-16 19:42:00 +01007077 asdl_identifier_seq* names;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007078
Victor Stinner74419f02020-07-03 11:35:37 +02007079 if (_PyObject_LookupAttr(obj, state->names, &tmp) < 0) {
Serhiy Storchakaf320be72018-01-25 10:49:40 +02007080 return 1;
7081 }
7082 if (tmp == NULL) {
7083 PyErr_SetString(PyExc_TypeError, "required field \"names\" missing from Nonlocal");
7084 return 1;
7085 }
7086 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007087 int res;
7088 Py_ssize_t len;
7089 Py_ssize_t i;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007090 if (!PyList_Check(tmp)) {
Dino Viehlandac46eb42019-09-11 10:16:34 -07007091 PyErr_Format(PyExc_TypeError, "Nonlocal field \"names\" must be a list, not a %.200s", _PyType_Name(Py_TYPE(tmp)));
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007092 goto failed;
7093 }
7094 len = PyList_GET_SIZE(tmp);
Pablo Galindoa5634c42020-09-16 19:42:00 +01007095 names = _Py_asdl_identifier_seq_new(len, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007096 if (names == NULL) goto failed;
7097 for (i = 0; i < len; i++) {
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07007098 identifier val;
Serhiy Storchaka43c97312019-09-10 13:02:30 +03007099 PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
7100 Py_INCREF(tmp2);
Victor Stinner74419f02020-07-03 11:35:37 +02007101 res = obj2ast_identifier(state, tmp2, &val, arena);
Serhiy Storchaka43c97312019-09-10 13:02:30 +03007102 Py_DECREF(tmp2);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007103 if (res != 0) goto failed;
Serhiy Storchakacf380602016-10-07 21:51:28 +03007104 if (len != PyList_GET_SIZE(tmp)) {
7105 PyErr_SetString(PyExc_RuntimeError, "Nonlocal field \"names\" changed size during iteration");
7106 goto failed;
7107 }
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07007108 asdl_seq_SET(names, i, val);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007109 }
Victor Stinner1acc1292013-07-27 00:03:47 +02007110 Py_CLEAR(tmp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007111 }
Victor Stinnerd27f8d22021-04-07 21:34:22 +02007112 *out = _PyAST_Nonlocal(names, lineno, col_offset, end_lineno,
7113 end_col_offset, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007114 if (*out == NULL) goto failed;
7115 return 0;
7116 }
Victor Stinner74419f02020-07-03 11:35:37 +02007117 tp = state->Expr_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07007118 isinstance = PyObject_IsInstance(obj, tp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007119 if (isinstance == -1) {
7120 return 1;
7121 }
7122 if (isinstance) {
7123 expr_ty value;
7124
Victor Stinner74419f02020-07-03 11:35:37 +02007125 if (_PyObject_LookupAttr(obj, state->value, &tmp) < 0) {
Serhiy Storchakaf320be72018-01-25 10:49:40 +02007126 return 1;
7127 }
7128 if (tmp == NULL) {
7129 PyErr_SetString(PyExc_TypeError, "required field \"value\" missing from Expr");
7130 return 1;
7131 }
7132 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007133 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02007134 res = obj2ast_expr(state, tmp, &value, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007135 if (res != 0) goto failed;
Victor Stinner1acc1292013-07-27 00:03:47 +02007136 Py_CLEAR(tmp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007137 }
Victor Stinnerd27f8d22021-04-07 21:34:22 +02007138 *out = _PyAST_Expr(value, lineno, col_offset, end_lineno,
7139 end_col_offset, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007140 if (*out == NULL) goto failed;
7141 return 0;
7142 }
Victor Stinner74419f02020-07-03 11:35:37 +02007143 tp = state->Pass_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07007144 isinstance = PyObject_IsInstance(obj, tp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007145 if (isinstance == -1) {
7146 return 1;
7147 }
7148 if (isinstance) {
7149
Victor Stinnerd27f8d22021-04-07 21:34:22 +02007150 *out = _PyAST_Pass(lineno, col_offset, end_lineno, end_col_offset,
7151 arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007152 if (*out == NULL) goto failed;
7153 return 0;
7154 }
Victor Stinner74419f02020-07-03 11:35:37 +02007155 tp = state->Break_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07007156 isinstance = PyObject_IsInstance(obj, tp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007157 if (isinstance == -1) {
7158 return 1;
7159 }
7160 if (isinstance) {
7161
Victor Stinnerd27f8d22021-04-07 21:34:22 +02007162 *out = _PyAST_Break(lineno, col_offset, end_lineno, end_col_offset,
7163 arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007164 if (*out == NULL) goto failed;
7165 return 0;
7166 }
Victor Stinner74419f02020-07-03 11:35:37 +02007167 tp = state->Continue_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07007168 isinstance = PyObject_IsInstance(obj, tp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007169 if (isinstance == -1) {
7170 return 1;
7171 }
7172 if (isinstance) {
7173
Victor Stinnerd27f8d22021-04-07 21:34:22 +02007174 *out = _PyAST_Continue(lineno, col_offset, end_lineno, end_col_offset,
7175 arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007176 if (*out == NULL) goto failed;
7177 return 0;
7178 }
7179
7180 PyErr_Format(PyExc_TypeError, "expected some sort of stmt, but got %R", obj);
7181 failed:
7182 Py_XDECREF(tmp);
7183 return 1;
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00007184}
7185
7186int
Victor Stinner5cf47822020-11-02 22:03:28 +01007187obj2ast_expr(struct ast_state *state, PyObject* obj, expr_ty* out, PyArena*
7188 arena)
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00007189{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007190 int isinstance;
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00007191
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007192 PyObject *tmp = NULL;
Dino Viehlandac46eb42019-09-11 10:16:34 -07007193 PyObject *tp;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007194 int lineno;
7195 int col_offset;
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00007196 int end_lineno;
7197 int end_col_offset;
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00007198
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007199 if (obj == Py_None) {
7200 *out = NULL;
7201 return 0;
7202 }
Victor Stinner74419f02020-07-03 11:35:37 +02007203 if (_PyObject_LookupAttr(obj, state->lineno, &tmp) < 0) {
Serhiy Storchakaf320be72018-01-25 10:49:40 +02007204 return 1;
7205 }
7206 if (tmp == NULL) {
7207 PyErr_SetString(PyExc_TypeError, "required field \"lineno\" missing from expr");
7208 return 1;
7209 }
7210 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007211 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02007212 res = obj2ast_int(state, tmp, &lineno, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007213 if (res != 0) goto failed;
Victor Stinner1acc1292013-07-27 00:03:47 +02007214 Py_CLEAR(tmp);
Serhiy Storchakaf320be72018-01-25 10:49:40 +02007215 }
Victor Stinner74419f02020-07-03 11:35:37 +02007216 if (_PyObject_LookupAttr(obj, state->col_offset, &tmp) < 0) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00007217 return 1;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007218 }
Serhiy Storchakaf320be72018-01-25 10:49:40 +02007219 if (tmp == NULL) {
7220 PyErr_SetString(PyExc_TypeError, "required field \"col_offset\" missing from expr");
7221 return 1;
7222 }
7223 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007224 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02007225 res = obj2ast_int(state, tmp, &col_offset, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007226 if (res != 0) goto failed;
Victor Stinner1acc1292013-07-27 00:03:47 +02007227 Py_CLEAR(tmp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007228 }
Victor Stinner74419f02020-07-03 11:35:37 +02007229 if (_PyObject_LookupAttr(obj, state->end_lineno, &tmp) < 0) {
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00007230 return 1;
7231 }
7232 if (tmp == NULL || tmp == Py_None) {
7233 Py_CLEAR(tmp);
7234 end_lineno = 0;
7235 }
7236 else {
7237 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02007238 res = obj2ast_int(state, tmp, &end_lineno, arena);
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00007239 if (res != 0) goto failed;
7240 Py_CLEAR(tmp);
7241 }
Victor Stinner74419f02020-07-03 11:35:37 +02007242 if (_PyObject_LookupAttr(obj, state->end_col_offset, &tmp) < 0) {
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00007243 return 1;
7244 }
7245 if (tmp == NULL || tmp == Py_None) {
7246 Py_CLEAR(tmp);
7247 end_col_offset = 0;
7248 }
7249 else {
7250 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02007251 res = obj2ast_int(state, tmp, &end_col_offset, arena);
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00007252 if (res != 0) goto failed;
7253 Py_CLEAR(tmp);
7254 }
Victor Stinner74419f02020-07-03 11:35:37 +02007255 tp = state->BoolOp_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07007256 isinstance = PyObject_IsInstance(obj, tp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007257 if (isinstance == -1) {
7258 return 1;
7259 }
7260 if (isinstance) {
7261 boolop_ty op;
Pablo Galindoa5634c42020-09-16 19:42:00 +01007262 asdl_expr_seq* values;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007263
Victor Stinner74419f02020-07-03 11:35:37 +02007264 if (_PyObject_LookupAttr(obj, state->op, &tmp) < 0) {
Serhiy Storchakaf320be72018-01-25 10:49:40 +02007265 return 1;
7266 }
7267 if (tmp == NULL) {
7268 PyErr_SetString(PyExc_TypeError, "required field \"op\" missing from BoolOp");
7269 return 1;
7270 }
7271 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007272 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02007273 res = obj2ast_boolop(state, tmp, &op, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007274 if (res != 0) goto failed;
Victor Stinner1acc1292013-07-27 00:03:47 +02007275 Py_CLEAR(tmp);
Serhiy Storchakaf320be72018-01-25 10:49:40 +02007276 }
Victor Stinner74419f02020-07-03 11:35:37 +02007277 if (_PyObject_LookupAttr(obj, state->values, &tmp) < 0) {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007278 return 1;
7279 }
Serhiy Storchakaf320be72018-01-25 10:49:40 +02007280 if (tmp == NULL) {
7281 PyErr_SetString(PyExc_TypeError, "required field \"values\" missing from BoolOp");
7282 return 1;
7283 }
7284 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007285 int res;
7286 Py_ssize_t len;
7287 Py_ssize_t i;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007288 if (!PyList_Check(tmp)) {
Dino Viehlandac46eb42019-09-11 10:16:34 -07007289 PyErr_Format(PyExc_TypeError, "BoolOp field \"values\" must be a list, not a %.200s", _PyType_Name(Py_TYPE(tmp)));
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007290 goto failed;
7291 }
7292 len = PyList_GET_SIZE(tmp);
Pablo Galindoa5634c42020-09-16 19:42:00 +01007293 values = _Py_asdl_expr_seq_new(len, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007294 if (values == NULL) goto failed;
7295 for (i = 0; i < len; i++) {
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07007296 expr_ty val;
Serhiy Storchaka43c97312019-09-10 13:02:30 +03007297 PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
7298 Py_INCREF(tmp2);
Victor Stinner74419f02020-07-03 11:35:37 +02007299 res = obj2ast_expr(state, tmp2, &val, arena);
Serhiy Storchaka43c97312019-09-10 13:02:30 +03007300 Py_DECREF(tmp2);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007301 if (res != 0) goto failed;
Serhiy Storchakacf380602016-10-07 21:51:28 +03007302 if (len != PyList_GET_SIZE(tmp)) {
7303 PyErr_SetString(PyExc_RuntimeError, "BoolOp field \"values\" changed size during iteration");
7304 goto failed;
7305 }
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07007306 asdl_seq_SET(values, i, val);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007307 }
Victor Stinner1acc1292013-07-27 00:03:47 +02007308 Py_CLEAR(tmp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007309 }
Victor Stinnerd27f8d22021-04-07 21:34:22 +02007310 *out = _PyAST_BoolOp(op, values, lineno, col_offset, end_lineno,
7311 end_col_offset, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007312 if (*out == NULL) goto failed;
7313 return 0;
7314 }
Victor Stinner74419f02020-07-03 11:35:37 +02007315 tp = state->NamedExpr_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07007316 isinstance = PyObject_IsInstance(obj, tp);
Emily Morehouse8f59ee02019-01-24 16:49:56 -07007317 if (isinstance == -1) {
7318 return 1;
7319 }
7320 if (isinstance) {
7321 expr_ty target;
7322 expr_ty value;
7323
Victor Stinner74419f02020-07-03 11:35:37 +02007324 if (_PyObject_LookupAttr(obj, state->target, &tmp) < 0) {
Emily Morehouse8f59ee02019-01-24 16:49:56 -07007325 return 1;
7326 }
7327 if (tmp == NULL) {
7328 PyErr_SetString(PyExc_TypeError, "required field \"target\" missing from NamedExpr");
7329 return 1;
7330 }
7331 else {
7332 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02007333 res = obj2ast_expr(state, tmp, &target, arena);
Emily Morehouse8f59ee02019-01-24 16:49:56 -07007334 if (res != 0) goto failed;
7335 Py_CLEAR(tmp);
7336 }
Victor Stinner74419f02020-07-03 11:35:37 +02007337 if (_PyObject_LookupAttr(obj, state->value, &tmp) < 0) {
Emily Morehouse8f59ee02019-01-24 16:49:56 -07007338 return 1;
7339 }
7340 if (tmp == NULL) {
7341 PyErr_SetString(PyExc_TypeError, "required field \"value\" missing from NamedExpr");
7342 return 1;
7343 }
7344 else {
7345 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02007346 res = obj2ast_expr(state, tmp, &value, arena);
Emily Morehouse8f59ee02019-01-24 16:49:56 -07007347 if (res != 0) goto failed;
7348 Py_CLEAR(tmp);
7349 }
Victor Stinnerd27f8d22021-04-07 21:34:22 +02007350 *out = _PyAST_NamedExpr(target, value, lineno, col_offset, end_lineno,
7351 end_col_offset, arena);
Emily Morehouse8f59ee02019-01-24 16:49:56 -07007352 if (*out == NULL) goto failed;
7353 return 0;
7354 }
Victor Stinner74419f02020-07-03 11:35:37 +02007355 tp = state->BinOp_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07007356 isinstance = PyObject_IsInstance(obj, tp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007357 if (isinstance == -1) {
7358 return 1;
7359 }
7360 if (isinstance) {
7361 expr_ty left;
7362 operator_ty op;
7363 expr_ty right;
7364
Victor Stinner74419f02020-07-03 11:35:37 +02007365 if (_PyObject_LookupAttr(obj, state->left, &tmp) < 0) {
Serhiy Storchakaf320be72018-01-25 10:49:40 +02007366 return 1;
7367 }
7368 if (tmp == NULL) {
7369 PyErr_SetString(PyExc_TypeError, "required field \"left\" missing from BinOp");
7370 return 1;
7371 }
7372 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007373 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02007374 res = obj2ast_expr(state, tmp, &left, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007375 if (res != 0) goto failed;
Victor Stinner1acc1292013-07-27 00:03:47 +02007376 Py_CLEAR(tmp);
Serhiy Storchakaf320be72018-01-25 10:49:40 +02007377 }
Victor Stinner74419f02020-07-03 11:35:37 +02007378 if (_PyObject_LookupAttr(obj, state->op, &tmp) < 0) {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007379 return 1;
7380 }
Serhiy Storchakaf320be72018-01-25 10:49:40 +02007381 if (tmp == NULL) {
7382 PyErr_SetString(PyExc_TypeError, "required field \"op\" missing from BinOp");
7383 return 1;
7384 }
7385 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007386 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02007387 res = obj2ast_operator(state, tmp, &op, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007388 if (res != 0) goto failed;
Victor Stinner1acc1292013-07-27 00:03:47 +02007389 Py_CLEAR(tmp);
Serhiy Storchakaf320be72018-01-25 10:49:40 +02007390 }
Victor Stinner74419f02020-07-03 11:35:37 +02007391 if (_PyObject_LookupAttr(obj, state->right, &tmp) < 0) {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007392 return 1;
7393 }
Serhiy Storchakaf320be72018-01-25 10:49:40 +02007394 if (tmp == NULL) {
7395 PyErr_SetString(PyExc_TypeError, "required field \"right\" missing from BinOp");
7396 return 1;
7397 }
7398 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007399 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02007400 res = obj2ast_expr(state, tmp, &right, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007401 if (res != 0) goto failed;
Victor Stinner1acc1292013-07-27 00:03:47 +02007402 Py_CLEAR(tmp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007403 }
Victor Stinnerd27f8d22021-04-07 21:34:22 +02007404 *out = _PyAST_BinOp(left, op, right, lineno, col_offset, end_lineno,
7405 end_col_offset, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007406 if (*out == NULL) goto failed;
7407 return 0;
7408 }
Victor Stinner74419f02020-07-03 11:35:37 +02007409 tp = state->UnaryOp_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07007410 isinstance = PyObject_IsInstance(obj, tp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007411 if (isinstance == -1) {
7412 return 1;
7413 }
7414 if (isinstance) {
7415 unaryop_ty op;
7416 expr_ty operand;
7417
Victor Stinner74419f02020-07-03 11:35:37 +02007418 if (_PyObject_LookupAttr(obj, state->op, &tmp) < 0) {
Serhiy Storchakaf320be72018-01-25 10:49:40 +02007419 return 1;
7420 }
7421 if (tmp == NULL) {
7422 PyErr_SetString(PyExc_TypeError, "required field \"op\" missing from UnaryOp");
7423 return 1;
7424 }
7425 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007426 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02007427 res = obj2ast_unaryop(state, tmp, &op, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007428 if (res != 0) goto failed;
Victor Stinner1acc1292013-07-27 00:03:47 +02007429 Py_CLEAR(tmp);
Serhiy Storchakaf320be72018-01-25 10:49:40 +02007430 }
Victor Stinner74419f02020-07-03 11:35:37 +02007431 if (_PyObject_LookupAttr(obj, state->operand, &tmp) < 0) {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007432 return 1;
7433 }
Serhiy Storchakaf320be72018-01-25 10:49:40 +02007434 if (tmp == NULL) {
7435 PyErr_SetString(PyExc_TypeError, "required field \"operand\" missing from UnaryOp");
7436 return 1;
7437 }
7438 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007439 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02007440 res = obj2ast_expr(state, tmp, &operand, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007441 if (res != 0) goto failed;
Victor Stinner1acc1292013-07-27 00:03:47 +02007442 Py_CLEAR(tmp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007443 }
Victor Stinnerd27f8d22021-04-07 21:34:22 +02007444 *out = _PyAST_UnaryOp(op, operand, lineno, col_offset, end_lineno,
7445 end_col_offset, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007446 if (*out == NULL) goto failed;
7447 return 0;
7448 }
Victor Stinner74419f02020-07-03 11:35:37 +02007449 tp = state->Lambda_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07007450 isinstance = PyObject_IsInstance(obj, tp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007451 if (isinstance == -1) {
7452 return 1;
7453 }
7454 if (isinstance) {
7455 arguments_ty args;
7456 expr_ty body;
7457
Victor Stinner74419f02020-07-03 11:35:37 +02007458 if (_PyObject_LookupAttr(obj, state->args, &tmp) < 0) {
Serhiy Storchakaf320be72018-01-25 10:49:40 +02007459 return 1;
7460 }
7461 if (tmp == NULL) {
7462 PyErr_SetString(PyExc_TypeError, "required field \"args\" missing from Lambda");
7463 return 1;
7464 }
7465 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007466 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02007467 res = obj2ast_arguments(state, tmp, &args, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007468 if (res != 0) goto failed;
Victor Stinner1acc1292013-07-27 00:03:47 +02007469 Py_CLEAR(tmp);
Serhiy Storchakaf320be72018-01-25 10:49:40 +02007470 }
Victor Stinner74419f02020-07-03 11:35:37 +02007471 if (_PyObject_LookupAttr(obj, state->body, &tmp) < 0) {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007472 return 1;
7473 }
Serhiy Storchakaf320be72018-01-25 10:49:40 +02007474 if (tmp == NULL) {
7475 PyErr_SetString(PyExc_TypeError, "required field \"body\" missing from Lambda");
7476 return 1;
7477 }
7478 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007479 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02007480 res = obj2ast_expr(state, tmp, &body, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007481 if (res != 0) goto failed;
Victor Stinner1acc1292013-07-27 00:03:47 +02007482 Py_CLEAR(tmp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007483 }
Victor Stinnerd27f8d22021-04-07 21:34:22 +02007484 *out = _PyAST_Lambda(args, body, lineno, col_offset, end_lineno,
7485 end_col_offset, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007486 if (*out == NULL) goto failed;
7487 return 0;
7488 }
Victor Stinner74419f02020-07-03 11:35:37 +02007489 tp = state->IfExp_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07007490 isinstance = PyObject_IsInstance(obj, tp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007491 if (isinstance == -1) {
7492 return 1;
7493 }
7494 if (isinstance) {
7495 expr_ty test;
7496 expr_ty body;
7497 expr_ty orelse;
7498
Victor Stinner74419f02020-07-03 11:35:37 +02007499 if (_PyObject_LookupAttr(obj, state->test, &tmp) < 0) {
Serhiy Storchakaf320be72018-01-25 10:49:40 +02007500 return 1;
7501 }
7502 if (tmp == NULL) {
7503 PyErr_SetString(PyExc_TypeError, "required field \"test\" missing from IfExp");
7504 return 1;
7505 }
7506 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007507 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02007508 res = obj2ast_expr(state, tmp, &test, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007509 if (res != 0) goto failed;
Victor Stinner1acc1292013-07-27 00:03:47 +02007510 Py_CLEAR(tmp);
Serhiy Storchakaf320be72018-01-25 10:49:40 +02007511 }
Victor Stinner74419f02020-07-03 11:35:37 +02007512 if (_PyObject_LookupAttr(obj, state->body, &tmp) < 0) {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007513 return 1;
7514 }
Serhiy Storchakaf320be72018-01-25 10:49:40 +02007515 if (tmp == NULL) {
7516 PyErr_SetString(PyExc_TypeError, "required field \"body\" missing from IfExp");
7517 return 1;
7518 }
7519 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007520 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02007521 res = obj2ast_expr(state, tmp, &body, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007522 if (res != 0) goto failed;
Victor Stinner1acc1292013-07-27 00:03:47 +02007523 Py_CLEAR(tmp);
Serhiy Storchakaf320be72018-01-25 10:49:40 +02007524 }
Victor Stinner74419f02020-07-03 11:35:37 +02007525 if (_PyObject_LookupAttr(obj, state->orelse, &tmp) < 0) {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007526 return 1;
7527 }
Serhiy Storchakaf320be72018-01-25 10:49:40 +02007528 if (tmp == NULL) {
7529 PyErr_SetString(PyExc_TypeError, "required field \"orelse\" missing from IfExp");
7530 return 1;
7531 }
7532 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007533 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02007534 res = obj2ast_expr(state, tmp, &orelse, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007535 if (res != 0) goto failed;
Victor Stinner1acc1292013-07-27 00:03:47 +02007536 Py_CLEAR(tmp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007537 }
Victor Stinnerd27f8d22021-04-07 21:34:22 +02007538 *out = _PyAST_IfExp(test, body, orelse, lineno, col_offset, end_lineno,
7539 end_col_offset, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007540 if (*out == NULL) goto failed;
7541 return 0;
7542 }
Victor Stinner74419f02020-07-03 11:35:37 +02007543 tp = state->Dict_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07007544 isinstance = PyObject_IsInstance(obj, tp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007545 if (isinstance == -1) {
7546 return 1;
7547 }
7548 if (isinstance) {
Pablo Galindoa5634c42020-09-16 19:42:00 +01007549 asdl_expr_seq* keys;
7550 asdl_expr_seq* values;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007551
Victor Stinner74419f02020-07-03 11:35:37 +02007552 if (_PyObject_LookupAttr(obj, state->keys, &tmp) < 0) {
Serhiy Storchakaf320be72018-01-25 10:49:40 +02007553 return 1;
7554 }
7555 if (tmp == NULL) {
7556 PyErr_SetString(PyExc_TypeError, "required field \"keys\" missing from Dict");
7557 return 1;
7558 }
7559 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007560 int res;
7561 Py_ssize_t len;
7562 Py_ssize_t i;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007563 if (!PyList_Check(tmp)) {
Dino Viehlandac46eb42019-09-11 10:16:34 -07007564 PyErr_Format(PyExc_TypeError, "Dict field \"keys\" must be a list, not a %.200s", _PyType_Name(Py_TYPE(tmp)));
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007565 goto failed;
7566 }
7567 len = PyList_GET_SIZE(tmp);
Pablo Galindoa5634c42020-09-16 19:42:00 +01007568 keys = _Py_asdl_expr_seq_new(len, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007569 if (keys == NULL) goto failed;
7570 for (i = 0; i < len; i++) {
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07007571 expr_ty val;
Serhiy Storchaka43c97312019-09-10 13:02:30 +03007572 PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
7573 Py_INCREF(tmp2);
Victor Stinner74419f02020-07-03 11:35:37 +02007574 res = obj2ast_expr(state, tmp2, &val, arena);
Serhiy Storchaka43c97312019-09-10 13:02:30 +03007575 Py_DECREF(tmp2);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007576 if (res != 0) goto failed;
Serhiy Storchakacf380602016-10-07 21:51:28 +03007577 if (len != PyList_GET_SIZE(tmp)) {
7578 PyErr_SetString(PyExc_RuntimeError, "Dict field \"keys\" changed size during iteration");
7579 goto failed;
7580 }
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07007581 asdl_seq_SET(keys, i, val);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007582 }
Victor Stinner1acc1292013-07-27 00:03:47 +02007583 Py_CLEAR(tmp);
Serhiy Storchakaf320be72018-01-25 10:49:40 +02007584 }
Victor Stinner74419f02020-07-03 11:35:37 +02007585 if (_PyObject_LookupAttr(obj, state->values, &tmp) < 0) {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007586 return 1;
7587 }
Serhiy Storchakaf320be72018-01-25 10:49:40 +02007588 if (tmp == NULL) {
7589 PyErr_SetString(PyExc_TypeError, "required field \"values\" missing from Dict");
7590 return 1;
7591 }
7592 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007593 int res;
7594 Py_ssize_t len;
7595 Py_ssize_t i;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007596 if (!PyList_Check(tmp)) {
Dino Viehlandac46eb42019-09-11 10:16:34 -07007597 PyErr_Format(PyExc_TypeError, "Dict field \"values\" must be a list, not a %.200s", _PyType_Name(Py_TYPE(tmp)));
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007598 goto failed;
7599 }
7600 len = PyList_GET_SIZE(tmp);
Pablo Galindoa5634c42020-09-16 19:42:00 +01007601 values = _Py_asdl_expr_seq_new(len, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007602 if (values == NULL) goto failed;
7603 for (i = 0; i < len; i++) {
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07007604 expr_ty val;
Serhiy Storchaka43c97312019-09-10 13:02:30 +03007605 PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
7606 Py_INCREF(tmp2);
Victor Stinner74419f02020-07-03 11:35:37 +02007607 res = obj2ast_expr(state, tmp2, &val, arena);
Serhiy Storchaka43c97312019-09-10 13:02:30 +03007608 Py_DECREF(tmp2);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007609 if (res != 0) goto failed;
Serhiy Storchakacf380602016-10-07 21:51:28 +03007610 if (len != PyList_GET_SIZE(tmp)) {
7611 PyErr_SetString(PyExc_RuntimeError, "Dict field \"values\" changed size during iteration");
7612 goto failed;
7613 }
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07007614 asdl_seq_SET(values, i, val);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007615 }
Victor Stinner1acc1292013-07-27 00:03:47 +02007616 Py_CLEAR(tmp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007617 }
Victor Stinnerd27f8d22021-04-07 21:34:22 +02007618 *out = _PyAST_Dict(keys, values, lineno, col_offset, end_lineno,
7619 end_col_offset, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007620 if (*out == NULL) goto failed;
7621 return 0;
7622 }
Victor Stinner74419f02020-07-03 11:35:37 +02007623 tp = state->Set_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07007624 isinstance = PyObject_IsInstance(obj, tp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007625 if (isinstance == -1) {
7626 return 1;
7627 }
7628 if (isinstance) {
Pablo Galindoa5634c42020-09-16 19:42:00 +01007629 asdl_expr_seq* elts;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007630
Victor Stinner74419f02020-07-03 11:35:37 +02007631 if (_PyObject_LookupAttr(obj, state->elts, &tmp) < 0) {
Serhiy Storchakaf320be72018-01-25 10:49:40 +02007632 return 1;
7633 }
7634 if (tmp == NULL) {
7635 PyErr_SetString(PyExc_TypeError, "required field \"elts\" missing from Set");
7636 return 1;
7637 }
7638 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007639 int res;
7640 Py_ssize_t len;
7641 Py_ssize_t i;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007642 if (!PyList_Check(tmp)) {
Dino Viehlandac46eb42019-09-11 10:16:34 -07007643 PyErr_Format(PyExc_TypeError, "Set field \"elts\" must be a list, not a %.200s", _PyType_Name(Py_TYPE(tmp)));
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007644 goto failed;
7645 }
7646 len = PyList_GET_SIZE(tmp);
Pablo Galindoa5634c42020-09-16 19:42:00 +01007647 elts = _Py_asdl_expr_seq_new(len, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007648 if (elts == NULL) goto failed;
7649 for (i = 0; i < len; i++) {
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07007650 expr_ty val;
Serhiy Storchaka43c97312019-09-10 13:02:30 +03007651 PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
7652 Py_INCREF(tmp2);
Victor Stinner74419f02020-07-03 11:35:37 +02007653 res = obj2ast_expr(state, tmp2, &val, arena);
Serhiy Storchaka43c97312019-09-10 13:02:30 +03007654 Py_DECREF(tmp2);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007655 if (res != 0) goto failed;
Serhiy Storchakacf380602016-10-07 21:51:28 +03007656 if (len != PyList_GET_SIZE(tmp)) {
7657 PyErr_SetString(PyExc_RuntimeError, "Set field \"elts\" changed size during iteration");
7658 goto failed;
7659 }
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07007660 asdl_seq_SET(elts, i, val);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007661 }
Victor Stinner1acc1292013-07-27 00:03:47 +02007662 Py_CLEAR(tmp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007663 }
Victor Stinnerd27f8d22021-04-07 21:34:22 +02007664 *out = _PyAST_Set(elts, lineno, col_offset, end_lineno, end_col_offset,
7665 arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007666 if (*out == NULL) goto failed;
7667 return 0;
7668 }
Victor Stinner74419f02020-07-03 11:35:37 +02007669 tp = state->ListComp_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07007670 isinstance = PyObject_IsInstance(obj, tp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007671 if (isinstance == -1) {
7672 return 1;
7673 }
7674 if (isinstance) {
7675 expr_ty elt;
Pablo Galindoa5634c42020-09-16 19:42:00 +01007676 asdl_comprehension_seq* generators;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007677
Victor Stinner74419f02020-07-03 11:35:37 +02007678 if (_PyObject_LookupAttr(obj, state->elt, &tmp) < 0) {
Serhiy Storchakaf320be72018-01-25 10:49:40 +02007679 return 1;
7680 }
7681 if (tmp == NULL) {
7682 PyErr_SetString(PyExc_TypeError, "required field \"elt\" missing from ListComp");
7683 return 1;
7684 }
7685 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007686 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02007687 res = obj2ast_expr(state, tmp, &elt, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007688 if (res != 0) goto failed;
Victor Stinner1acc1292013-07-27 00:03:47 +02007689 Py_CLEAR(tmp);
Serhiy Storchakaf320be72018-01-25 10:49:40 +02007690 }
Victor Stinner74419f02020-07-03 11:35:37 +02007691 if (_PyObject_LookupAttr(obj, state->generators, &tmp) < 0) {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007692 return 1;
7693 }
Serhiy Storchakaf320be72018-01-25 10:49:40 +02007694 if (tmp == NULL) {
7695 PyErr_SetString(PyExc_TypeError, "required field \"generators\" missing from ListComp");
7696 return 1;
7697 }
7698 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007699 int res;
7700 Py_ssize_t len;
7701 Py_ssize_t i;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007702 if (!PyList_Check(tmp)) {
Dino Viehlandac46eb42019-09-11 10:16:34 -07007703 PyErr_Format(PyExc_TypeError, "ListComp field \"generators\" must be a list, not a %.200s", _PyType_Name(Py_TYPE(tmp)));
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007704 goto failed;
7705 }
7706 len = PyList_GET_SIZE(tmp);
Pablo Galindoa5634c42020-09-16 19:42:00 +01007707 generators = _Py_asdl_comprehension_seq_new(len, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007708 if (generators == NULL) goto failed;
7709 for (i = 0; i < len; i++) {
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07007710 comprehension_ty val;
Serhiy Storchaka43c97312019-09-10 13:02:30 +03007711 PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
7712 Py_INCREF(tmp2);
Victor Stinner74419f02020-07-03 11:35:37 +02007713 res = obj2ast_comprehension(state, tmp2, &val, arena);
Serhiy Storchaka43c97312019-09-10 13:02:30 +03007714 Py_DECREF(tmp2);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007715 if (res != 0) goto failed;
Serhiy Storchakacf380602016-10-07 21:51:28 +03007716 if (len != PyList_GET_SIZE(tmp)) {
7717 PyErr_SetString(PyExc_RuntimeError, "ListComp field \"generators\" changed size during iteration");
7718 goto failed;
7719 }
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07007720 asdl_seq_SET(generators, i, val);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007721 }
Victor Stinner1acc1292013-07-27 00:03:47 +02007722 Py_CLEAR(tmp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007723 }
Victor Stinnerd27f8d22021-04-07 21:34:22 +02007724 *out = _PyAST_ListComp(elt, generators, lineno, col_offset, end_lineno,
7725 end_col_offset, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007726 if (*out == NULL) goto failed;
7727 return 0;
7728 }
Victor Stinner74419f02020-07-03 11:35:37 +02007729 tp = state->SetComp_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07007730 isinstance = PyObject_IsInstance(obj, tp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007731 if (isinstance == -1) {
7732 return 1;
7733 }
7734 if (isinstance) {
7735 expr_ty elt;
Pablo Galindoa5634c42020-09-16 19:42:00 +01007736 asdl_comprehension_seq* generators;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007737
Victor Stinner74419f02020-07-03 11:35:37 +02007738 if (_PyObject_LookupAttr(obj, state->elt, &tmp) < 0) {
Serhiy Storchakaf320be72018-01-25 10:49:40 +02007739 return 1;
7740 }
7741 if (tmp == NULL) {
7742 PyErr_SetString(PyExc_TypeError, "required field \"elt\" missing from SetComp");
7743 return 1;
7744 }
7745 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007746 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02007747 res = obj2ast_expr(state, tmp, &elt, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007748 if (res != 0) goto failed;
Victor Stinner1acc1292013-07-27 00:03:47 +02007749 Py_CLEAR(tmp);
Serhiy Storchakaf320be72018-01-25 10:49:40 +02007750 }
Victor Stinner74419f02020-07-03 11:35:37 +02007751 if (_PyObject_LookupAttr(obj, state->generators, &tmp) < 0) {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007752 return 1;
7753 }
Serhiy Storchakaf320be72018-01-25 10:49:40 +02007754 if (tmp == NULL) {
7755 PyErr_SetString(PyExc_TypeError, "required field \"generators\" missing from SetComp");
7756 return 1;
7757 }
7758 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007759 int res;
7760 Py_ssize_t len;
7761 Py_ssize_t i;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007762 if (!PyList_Check(tmp)) {
Dino Viehlandac46eb42019-09-11 10:16:34 -07007763 PyErr_Format(PyExc_TypeError, "SetComp field \"generators\" must be a list, not a %.200s", _PyType_Name(Py_TYPE(tmp)));
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007764 goto failed;
7765 }
7766 len = PyList_GET_SIZE(tmp);
Pablo Galindoa5634c42020-09-16 19:42:00 +01007767 generators = _Py_asdl_comprehension_seq_new(len, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007768 if (generators == NULL) goto failed;
7769 for (i = 0; i < len; i++) {
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07007770 comprehension_ty val;
Serhiy Storchaka43c97312019-09-10 13:02:30 +03007771 PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
7772 Py_INCREF(tmp2);
Victor Stinner74419f02020-07-03 11:35:37 +02007773 res = obj2ast_comprehension(state, tmp2, &val, arena);
Serhiy Storchaka43c97312019-09-10 13:02:30 +03007774 Py_DECREF(tmp2);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007775 if (res != 0) goto failed;
Serhiy Storchakacf380602016-10-07 21:51:28 +03007776 if (len != PyList_GET_SIZE(tmp)) {
7777 PyErr_SetString(PyExc_RuntimeError, "SetComp field \"generators\" changed size during iteration");
7778 goto failed;
7779 }
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07007780 asdl_seq_SET(generators, i, val);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007781 }
Victor Stinner1acc1292013-07-27 00:03:47 +02007782 Py_CLEAR(tmp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007783 }
Victor Stinnerd27f8d22021-04-07 21:34:22 +02007784 *out = _PyAST_SetComp(elt, generators, lineno, col_offset, end_lineno,
7785 end_col_offset, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007786 if (*out == NULL) goto failed;
7787 return 0;
7788 }
Victor Stinner74419f02020-07-03 11:35:37 +02007789 tp = state->DictComp_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07007790 isinstance = PyObject_IsInstance(obj, tp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007791 if (isinstance == -1) {
7792 return 1;
7793 }
7794 if (isinstance) {
7795 expr_ty key;
7796 expr_ty value;
Pablo Galindoa5634c42020-09-16 19:42:00 +01007797 asdl_comprehension_seq* generators;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007798
Victor Stinner74419f02020-07-03 11:35:37 +02007799 if (_PyObject_LookupAttr(obj, state->key, &tmp) < 0) {
Serhiy Storchakaf320be72018-01-25 10:49:40 +02007800 return 1;
7801 }
7802 if (tmp == NULL) {
7803 PyErr_SetString(PyExc_TypeError, "required field \"key\" missing from DictComp");
7804 return 1;
7805 }
7806 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007807 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02007808 res = obj2ast_expr(state, tmp, &key, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007809 if (res != 0) goto failed;
Victor Stinner1acc1292013-07-27 00:03:47 +02007810 Py_CLEAR(tmp);
Serhiy Storchakaf320be72018-01-25 10:49:40 +02007811 }
Victor Stinner74419f02020-07-03 11:35:37 +02007812 if (_PyObject_LookupAttr(obj, state->value, &tmp) < 0) {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007813 return 1;
7814 }
Serhiy Storchakaf320be72018-01-25 10:49:40 +02007815 if (tmp == NULL) {
7816 PyErr_SetString(PyExc_TypeError, "required field \"value\" missing from DictComp");
7817 return 1;
7818 }
7819 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007820 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02007821 res = obj2ast_expr(state, tmp, &value, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007822 if (res != 0) goto failed;
Victor Stinner1acc1292013-07-27 00:03:47 +02007823 Py_CLEAR(tmp);
Serhiy Storchakaf320be72018-01-25 10:49:40 +02007824 }
Victor Stinner74419f02020-07-03 11:35:37 +02007825 if (_PyObject_LookupAttr(obj, state->generators, &tmp) < 0) {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007826 return 1;
7827 }
Serhiy Storchakaf320be72018-01-25 10:49:40 +02007828 if (tmp == NULL) {
7829 PyErr_SetString(PyExc_TypeError, "required field \"generators\" missing from DictComp");
7830 return 1;
7831 }
7832 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007833 int res;
7834 Py_ssize_t len;
7835 Py_ssize_t i;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007836 if (!PyList_Check(tmp)) {
Dino Viehlandac46eb42019-09-11 10:16:34 -07007837 PyErr_Format(PyExc_TypeError, "DictComp field \"generators\" must be a list, not a %.200s", _PyType_Name(Py_TYPE(tmp)));
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007838 goto failed;
7839 }
7840 len = PyList_GET_SIZE(tmp);
Pablo Galindoa5634c42020-09-16 19:42:00 +01007841 generators = _Py_asdl_comprehension_seq_new(len, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007842 if (generators == NULL) goto failed;
7843 for (i = 0; i < len; i++) {
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07007844 comprehension_ty val;
Serhiy Storchaka43c97312019-09-10 13:02:30 +03007845 PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
7846 Py_INCREF(tmp2);
Victor Stinner74419f02020-07-03 11:35:37 +02007847 res = obj2ast_comprehension(state, tmp2, &val, arena);
Serhiy Storchaka43c97312019-09-10 13:02:30 +03007848 Py_DECREF(tmp2);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007849 if (res != 0) goto failed;
Serhiy Storchakacf380602016-10-07 21:51:28 +03007850 if (len != PyList_GET_SIZE(tmp)) {
7851 PyErr_SetString(PyExc_RuntimeError, "DictComp field \"generators\" changed size during iteration");
7852 goto failed;
7853 }
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07007854 asdl_seq_SET(generators, i, val);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007855 }
Victor Stinner1acc1292013-07-27 00:03:47 +02007856 Py_CLEAR(tmp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007857 }
Victor Stinnerd27f8d22021-04-07 21:34:22 +02007858 *out = _PyAST_DictComp(key, value, generators, lineno, col_offset,
7859 end_lineno, end_col_offset, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007860 if (*out == NULL) goto failed;
7861 return 0;
7862 }
Victor Stinner74419f02020-07-03 11:35:37 +02007863 tp = state->GeneratorExp_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07007864 isinstance = PyObject_IsInstance(obj, tp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007865 if (isinstance == -1) {
7866 return 1;
7867 }
7868 if (isinstance) {
7869 expr_ty elt;
Pablo Galindoa5634c42020-09-16 19:42:00 +01007870 asdl_comprehension_seq* generators;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007871
Victor Stinner74419f02020-07-03 11:35:37 +02007872 if (_PyObject_LookupAttr(obj, state->elt, &tmp) < 0) {
Serhiy Storchakaf320be72018-01-25 10:49:40 +02007873 return 1;
7874 }
7875 if (tmp == NULL) {
7876 PyErr_SetString(PyExc_TypeError, "required field \"elt\" missing from GeneratorExp");
7877 return 1;
7878 }
7879 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007880 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02007881 res = obj2ast_expr(state, tmp, &elt, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007882 if (res != 0) goto failed;
Victor Stinner1acc1292013-07-27 00:03:47 +02007883 Py_CLEAR(tmp);
Serhiy Storchakaf320be72018-01-25 10:49:40 +02007884 }
Victor Stinner74419f02020-07-03 11:35:37 +02007885 if (_PyObject_LookupAttr(obj, state->generators, &tmp) < 0) {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007886 return 1;
7887 }
Serhiy Storchakaf320be72018-01-25 10:49:40 +02007888 if (tmp == NULL) {
7889 PyErr_SetString(PyExc_TypeError, "required field \"generators\" missing from GeneratorExp");
7890 return 1;
7891 }
7892 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007893 int res;
7894 Py_ssize_t len;
7895 Py_ssize_t i;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007896 if (!PyList_Check(tmp)) {
Dino Viehlandac46eb42019-09-11 10:16:34 -07007897 PyErr_Format(PyExc_TypeError, "GeneratorExp field \"generators\" must be a list, not a %.200s", _PyType_Name(Py_TYPE(tmp)));
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007898 goto failed;
7899 }
7900 len = PyList_GET_SIZE(tmp);
Pablo Galindoa5634c42020-09-16 19:42:00 +01007901 generators = _Py_asdl_comprehension_seq_new(len, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007902 if (generators == NULL) goto failed;
7903 for (i = 0; i < len; i++) {
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07007904 comprehension_ty val;
Serhiy Storchaka43c97312019-09-10 13:02:30 +03007905 PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
7906 Py_INCREF(tmp2);
Victor Stinner74419f02020-07-03 11:35:37 +02007907 res = obj2ast_comprehension(state, tmp2, &val, arena);
Serhiy Storchaka43c97312019-09-10 13:02:30 +03007908 Py_DECREF(tmp2);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007909 if (res != 0) goto failed;
Serhiy Storchakacf380602016-10-07 21:51:28 +03007910 if (len != PyList_GET_SIZE(tmp)) {
7911 PyErr_SetString(PyExc_RuntimeError, "GeneratorExp field \"generators\" changed size during iteration");
7912 goto failed;
7913 }
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07007914 asdl_seq_SET(generators, i, val);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007915 }
Victor Stinner1acc1292013-07-27 00:03:47 +02007916 Py_CLEAR(tmp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007917 }
Victor Stinnerd27f8d22021-04-07 21:34:22 +02007918 *out = _PyAST_GeneratorExp(elt, generators, lineno, col_offset,
7919 end_lineno, end_col_offset, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007920 if (*out == NULL) goto failed;
7921 return 0;
7922 }
Victor Stinner74419f02020-07-03 11:35:37 +02007923 tp = state->Await_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07007924 isinstance = PyObject_IsInstance(obj, tp);
Yury Selivanov75445082015-05-11 22:57:16 -04007925 if (isinstance == -1) {
7926 return 1;
7927 }
7928 if (isinstance) {
7929 expr_ty value;
7930
Victor Stinner74419f02020-07-03 11:35:37 +02007931 if (_PyObject_LookupAttr(obj, state->value, &tmp) < 0) {
Serhiy Storchakaf320be72018-01-25 10:49:40 +02007932 return 1;
7933 }
7934 if (tmp == NULL) {
7935 PyErr_SetString(PyExc_TypeError, "required field \"value\" missing from Await");
7936 return 1;
7937 }
7938 else {
Yury Selivanov75445082015-05-11 22:57:16 -04007939 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02007940 res = obj2ast_expr(state, tmp, &value, arena);
Yury Selivanov75445082015-05-11 22:57:16 -04007941 if (res != 0) goto failed;
7942 Py_CLEAR(tmp);
Yury Selivanov75445082015-05-11 22:57:16 -04007943 }
Victor Stinnerd27f8d22021-04-07 21:34:22 +02007944 *out = _PyAST_Await(value, lineno, col_offset, end_lineno,
7945 end_col_offset, arena);
Yury Selivanov75445082015-05-11 22:57:16 -04007946 if (*out == NULL) goto failed;
7947 return 0;
7948 }
Victor Stinner74419f02020-07-03 11:35:37 +02007949 tp = state->Yield_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07007950 isinstance = PyObject_IsInstance(obj, tp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007951 if (isinstance == -1) {
7952 return 1;
7953 }
7954 if (isinstance) {
7955 expr_ty value;
7956
Victor Stinner74419f02020-07-03 11:35:37 +02007957 if (_PyObject_LookupAttr(obj, state->value, &tmp) < 0) {
Serhiy Storchakaf320be72018-01-25 10:49:40 +02007958 return 1;
7959 }
7960 if (tmp == NULL || tmp == Py_None) {
7961 Py_CLEAR(tmp);
7962 value = NULL;
7963 }
7964 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007965 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02007966 res = obj2ast_expr(state, tmp, &value, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007967 if (res != 0) goto failed;
Victor Stinner1acc1292013-07-27 00:03:47 +02007968 Py_CLEAR(tmp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007969 }
Victor Stinnerd27f8d22021-04-07 21:34:22 +02007970 *out = _PyAST_Yield(value, lineno, col_offset, end_lineno,
7971 end_col_offset, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007972 if (*out == NULL) goto failed;
7973 return 0;
7974 }
Victor Stinner74419f02020-07-03 11:35:37 +02007975 tp = state->YieldFrom_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07007976 isinstance = PyObject_IsInstance(obj, tp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007977 if (isinstance == -1) {
7978 return 1;
7979 }
7980 if (isinstance) {
7981 expr_ty value;
7982
Victor Stinner74419f02020-07-03 11:35:37 +02007983 if (_PyObject_LookupAttr(obj, state->value, &tmp) < 0) {
Serhiy Storchakaf320be72018-01-25 10:49:40 +02007984 return 1;
7985 }
7986 if (tmp == NULL) {
7987 PyErr_SetString(PyExc_TypeError, "required field \"value\" missing from YieldFrom");
7988 return 1;
7989 }
7990 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007991 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02007992 res = obj2ast_expr(state, tmp, &value, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007993 if (res != 0) goto failed;
Victor Stinner1acc1292013-07-27 00:03:47 +02007994 Py_CLEAR(tmp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007995 }
Victor Stinnerd27f8d22021-04-07 21:34:22 +02007996 *out = _PyAST_YieldFrom(value, lineno, col_offset, end_lineno,
7997 end_col_offset, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007998 if (*out == NULL) goto failed;
7999 return 0;
8000 }
Victor Stinner74419f02020-07-03 11:35:37 +02008001 tp = state->Compare_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07008002 isinstance = PyObject_IsInstance(obj, tp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008003 if (isinstance == -1) {
8004 return 1;
8005 }
8006 if (isinstance) {
8007 expr_ty left;
8008 asdl_int_seq* ops;
Pablo Galindoa5634c42020-09-16 19:42:00 +01008009 asdl_expr_seq* comparators;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008010
Victor Stinner74419f02020-07-03 11:35:37 +02008011 if (_PyObject_LookupAttr(obj, state->left, &tmp) < 0) {
Serhiy Storchakaf320be72018-01-25 10:49:40 +02008012 return 1;
8013 }
8014 if (tmp == NULL) {
8015 PyErr_SetString(PyExc_TypeError, "required field \"left\" missing from Compare");
8016 return 1;
8017 }
8018 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008019 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02008020 res = obj2ast_expr(state, tmp, &left, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008021 if (res != 0) goto failed;
Victor Stinner1acc1292013-07-27 00:03:47 +02008022 Py_CLEAR(tmp);
Serhiy Storchakaf320be72018-01-25 10:49:40 +02008023 }
Victor Stinner74419f02020-07-03 11:35:37 +02008024 if (_PyObject_LookupAttr(obj, state->ops, &tmp) < 0) {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008025 return 1;
8026 }
Serhiy Storchakaf320be72018-01-25 10:49:40 +02008027 if (tmp == NULL) {
8028 PyErr_SetString(PyExc_TypeError, "required field \"ops\" missing from Compare");
8029 return 1;
8030 }
8031 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008032 int res;
8033 Py_ssize_t len;
8034 Py_ssize_t i;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008035 if (!PyList_Check(tmp)) {
Dino Viehlandac46eb42019-09-11 10:16:34 -07008036 PyErr_Format(PyExc_TypeError, "Compare field \"ops\" must be a list, not a %.200s", _PyType_Name(Py_TYPE(tmp)));
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008037 goto failed;
8038 }
8039 len = PyList_GET_SIZE(tmp);
Antoine Pitroud01d396e2013-10-12 22:52:43 +02008040 ops = _Py_asdl_int_seq_new(len, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008041 if (ops == NULL) goto failed;
8042 for (i = 0; i < len; i++) {
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07008043 cmpop_ty val;
Serhiy Storchaka43c97312019-09-10 13:02:30 +03008044 PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
8045 Py_INCREF(tmp2);
Victor Stinner74419f02020-07-03 11:35:37 +02008046 res = obj2ast_cmpop(state, tmp2, &val, arena);
Serhiy Storchaka43c97312019-09-10 13:02:30 +03008047 Py_DECREF(tmp2);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008048 if (res != 0) goto failed;
Serhiy Storchakacf380602016-10-07 21:51:28 +03008049 if (len != PyList_GET_SIZE(tmp)) {
8050 PyErr_SetString(PyExc_RuntimeError, "Compare field \"ops\" changed size during iteration");
8051 goto failed;
8052 }
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07008053 asdl_seq_SET(ops, i, val);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008054 }
Victor Stinner1acc1292013-07-27 00:03:47 +02008055 Py_CLEAR(tmp);
Serhiy Storchakaf320be72018-01-25 10:49:40 +02008056 }
Victor Stinner74419f02020-07-03 11:35:37 +02008057 if (_PyObject_LookupAttr(obj, state->comparators, &tmp) < 0) {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008058 return 1;
8059 }
Serhiy Storchakaf320be72018-01-25 10:49:40 +02008060 if (tmp == NULL) {
8061 PyErr_SetString(PyExc_TypeError, "required field \"comparators\" missing from Compare");
8062 return 1;
8063 }
8064 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008065 int res;
8066 Py_ssize_t len;
8067 Py_ssize_t i;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008068 if (!PyList_Check(tmp)) {
Dino Viehlandac46eb42019-09-11 10:16:34 -07008069 PyErr_Format(PyExc_TypeError, "Compare field \"comparators\" must be a list, not a %.200s", _PyType_Name(Py_TYPE(tmp)));
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008070 goto failed;
8071 }
8072 len = PyList_GET_SIZE(tmp);
Pablo Galindoa5634c42020-09-16 19:42:00 +01008073 comparators = _Py_asdl_expr_seq_new(len, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008074 if (comparators == NULL) goto failed;
8075 for (i = 0; i < len; i++) {
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07008076 expr_ty val;
Serhiy Storchaka43c97312019-09-10 13:02:30 +03008077 PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
8078 Py_INCREF(tmp2);
Victor Stinner74419f02020-07-03 11:35:37 +02008079 res = obj2ast_expr(state, tmp2, &val, arena);
Serhiy Storchaka43c97312019-09-10 13:02:30 +03008080 Py_DECREF(tmp2);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008081 if (res != 0) goto failed;
Serhiy Storchakacf380602016-10-07 21:51:28 +03008082 if (len != PyList_GET_SIZE(tmp)) {
8083 PyErr_SetString(PyExc_RuntimeError, "Compare field \"comparators\" changed size during iteration");
8084 goto failed;
8085 }
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07008086 asdl_seq_SET(comparators, i, val);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008087 }
Victor Stinner1acc1292013-07-27 00:03:47 +02008088 Py_CLEAR(tmp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008089 }
Victor Stinnerd27f8d22021-04-07 21:34:22 +02008090 *out = _PyAST_Compare(left, ops, comparators, lineno, col_offset,
8091 end_lineno, end_col_offset, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008092 if (*out == NULL) goto failed;
8093 return 0;
8094 }
Victor Stinner74419f02020-07-03 11:35:37 +02008095 tp = state->Call_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07008096 isinstance = PyObject_IsInstance(obj, tp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008097 if (isinstance == -1) {
8098 return 1;
8099 }
8100 if (isinstance) {
8101 expr_ty func;
Pablo Galindoa5634c42020-09-16 19:42:00 +01008102 asdl_expr_seq* args;
8103 asdl_keyword_seq* keywords;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008104
Victor Stinner74419f02020-07-03 11:35:37 +02008105 if (_PyObject_LookupAttr(obj, state->func, &tmp) < 0) {
Serhiy Storchakaf320be72018-01-25 10:49:40 +02008106 return 1;
8107 }
8108 if (tmp == NULL) {
8109 PyErr_SetString(PyExc_TypeError, "required field \"func\" missing from Call");
8110 return 1;
8111 }
8112 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008113 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02008114 res = obj2ast_expr(state, tmp, &func, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008115 if (res != 0) goto failed;
Victor Stinner1acc1292013-07-27 00:03:47 +02008116 Py_CLEAR(tmp);
Serhiy Storchakaf320be72018-01-25 10:49:40 +02008117 }
Victor Stinner74419f02020-07-03 11:35:37 +02008118 if (_PyObject_LookupAttr(obj, state->args, &tmp) < 0) {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008119 return 1;
8120 }
Serhiy Storchakaf320be72018-01-25 10:49:40 +02008121 if (tmp == NULL) {
8122 PyErr_SetString(PyExc_TypeError, "required field \"args\" missing from Call");
8123 return 1;
8124 }
8125 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008126 int res;
8127 Py_ssize_t len;
8128 Py_ssize_t i;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008129 if (!PyList_Check(tmp)) {
Dino Viehlandac46eb42019-09-11 10:16:34 -07008130 PyErr_Format(PyExc_TypeError, "Call field \"args\" must be a list, not a %.200s", _PyType_Name(Py_TYPE(tmp)));
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008131 goto failed;
8132 }
8133 len = PyList_GET_SIZE(tmp);
Pablo Galindoa5634c42020-09-16 19:42:00 +01008134 args = _Py_asdl_expr_seq_new(len, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008135 if (args == NULL) goto failed;
8136 for (i = 0; i < len; i++) {
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07008137 expr_ty val;
Serhiy Storchaka43c97312019-09-10 13:02:30 +03008138 PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
8139 Py_INCREF(tmp2);
Victor Stinner74419f02020-07-03 11:35:37 +02008140 res = obj2ast_expr(state, tmp2, &val, arena);
Serhiy Storchaka43c97312019-09-10 13:02:30 +03008141 Py_DECREF(tmp2);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008142 if (res != 0) goto failed;
Serhiy Storchakacf380602016-10-07 21:51:28 +03008143 if (len != PyList_GET_SIZE(tmp)) {
8144 PyErr_SetString(PyExc_RuntimeError, "Call field \"args\" changed size during iteration");
8145 goto failed;
8146 }
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07008147 asdl_seq_SET(args, i, val);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008148 }
Victor Stinner1acc1292013-07-27 00:03:47 +02008149 Py_CLEAR(tmp);
Serhiy Storchakaf320be72018-01-25 10:49:40 +02008150 }
Victor Stinner74419f02020-07-03 11:35:37 +02008151 if (_PyObject_LookupAttr(obj, state->keywords, &tmp) < 0) {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008152 return 1;
8153 }
Serhiy Storchakaf320be72018-01-25 10:49:40 +02008154 if (tmp == NULL) {
8155 PyErr_SetString(PyExc_TypeError, "required field \"keywords\" missing from Call");
8156 return 1;
8157 }
8158 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008159 int res;
8160 Py_ssize_t len;
8161 Py_ssize_t i;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008162 if (!PyList_Check(tmp)) {
Dino Viehlandac46eb42019-09-11 10:16:34 -07008163 PyErr_Format(PyExc_TypeError, "Call field \"keywords\" must be a list, not a %.200s", _PyType_Name(Py_TYPE(tmp)));
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008164 goto failed;
8165 }
8166 len = PyList_GET_SIZE(tmp);
Pablo Galindoa5634c42020-09-16 19:42:00 +01008167 keywords = _Py_asdl_keyword_seq_new(len, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008168 if (keywords == NULL) goto failed;
8169 for (i = 0; i < len; i++) {
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07008170 keyword_ty val;
Serhiy Storchaka43c97312019-09-10 13:02:30 +03008171 PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
8172 Py_INCREF(tmp2);
Victor Stinner74419f02020-07-03 11:35:37 +02008173 res = obj2ast_keyword(state, tmp2, &val, arena);
Serhiy Storchaka43c97312019-09-10 13:02:30 +03008174 Py_DECREF(tmp2);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008175 if (res != 0) goto failed;
Serhiy Storchakacf380602016-10-07 21:51:28 +03008176 if (len != PyList_GET_SIZE(tmp)) {
8177 PyErr_SetString(PyExc_RuntimeError, "Call field \"keywords\" changed size during iteration");
8178 goto failed;
8179 }
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07008180 asdl_seq_SET(keywords, i, val);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008181 }
Victor Stinner1acc1292013-07-27 00:03:47 +02008182 Py_CLEAR(tmp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008183 }
Victor Stinnerd27f8d22021-04-07 21:34:22 +02008184 *out = _PyAST_Call(func, args, keywords, lineno, col_offset,
8185 end_lineno, end_col_offset, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008186 if (*out == NULL) goto failed;
8187 return 0;
8188 }
Victor Stinner74419f02020-07-03 11:35:37 +02008189 tp = state->FormattedValue_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07008190 isinstance = PyObject_IsInstance(obj, tp);
Eric V. Smith235a6f02015-09-19 14:51:32 -04008191 if (isinstance == -1) {
8192 return 1;
8193 }
8194 if (isinstance) {
8195 expr_ty value;
8196 int conversion;
8197 expr_ty format_spec;
8198
Victor Stinner74419f02020-07-03 11:35:37 +02008199 if (_PyObject_LookupAttr(obj, state->value, &tmp) < 0) {
Serhiy Storchakaf320be72018-01-25 10:49:40 +02008200 return 1;
8201 }
8202 if (tmp == NULL) {
8203 PyErr_SetString(PyExc_TypeError, "required field \"value\" missing from FormattedValue");
8204 return 1;
8205 }
8206 else {
Eric V. Smith235a6f02015-09-19 14:51:32 -04008207 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02008208 res = obj2ast_expr(state, tmp, &value, arena);
Eric V. Smith235a6f02015-09-19 14:51:32 -04008209 if (res != 0) goto failed;
8210 Py_CLEAR(tmp);
Serhiy Storchakaf320be72018-01-25 10:49:40 +02008211 }
Victor Stinner74419f02020-07-03 11:35:37 +02008212 if (_PyObject_LookupAttr(obj, state->conversion, &tmp) < 0) {
Eric V. Smith235a6f02015-09-19 14:51:32 -04008213 return 1;
8214 }
Serhiy Storchakaf320be72018-01-25 10:49:40 +02008215 if (tmp == NULL || tmp == Py_None) {
8216 Py_CLEAR(tmp);
8217 conversion = 0;
8218 }
8219 else {
Eric V. Smith235a6f02015-09-19 14:51:32 -04008220 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02008221 res = obj2ast_int(state, tmp, &conversion, arena);
Eric V. Smith235a6f02015-09-19 14:51:32 -04008222 if (res != 0) goto failed;
8223 Py_CLEAR(tmp);
Eric V. Smith235a6f02015-09-19 14:51:32 -04008224 }
Victor Stinner74419f02020-07-03 11:35:37 +02008225 if (_PyObject_LookupAttr(obj, state->format_spec, &tmp) < 0) {
Serhiy Storchakaf320be72018-01-25 10:49:40 +02008226 return 1;
8227 }
8228 if (tmp == NULL || tmp == Py_None) {
8229 Py_CLEAR(tmp);
8230 format_spec = NULL;
8231 }
8232 else {
Eric V. Smith235a6f02015-09-19 14:51:32 -04008233 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02008234 res = obj2ast_expr(state, tmp, &format_spec, arena);
Eric V. Smith235a6f02015-09-19 14:51:32 -04008235 if (res != 0) goto failed;
8236 Py_CLEAR(tmp);
Eric V. Smith235a6f02015-09-19 14:51:32 -04008237 }
Victor Stinnerd27f8d22021-04-07 21:34:22 +02008238 *out = _PyAST_FormattedValue(value, conversion, format_spec, lineno,
8239 col_offset, end_lineno, end_col_offset,
8240 arena);
Eric V. Smith235a6f02015-09-19 14:51:32 -04008241 if (*out == NULL) goto failed;
8242 return 0;
8243 }
Victor Stinner74419f02020-07-03 11:35:37 +02008244 tp = state->JoinedStr_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07008245 isinstance = PyObject_IsInstance(obj, tp);
Eric V. Smith235a6f02015-09-19 14:51:32 -04008246 if (isinstance == -1) {
8247 return 1;
8248 }
8249 if (isinstance) {
Pablo Galindoa5634c42020-09-16 19:42:00 +01008250 asdl_expr_seq* values;
Eric V. Smith235a6f02015-09-19 14:51:32 -04008251
Victor Stinner74419f02020-07-03 11:35:37 +02008252 if (_PyObject_LookupAttr(obj, state->values, &tmp) < 0) {
Serhiy Storchakaf320be72018-01-25 10:49:40 +02008253 return 1;
8254 }
8255 if (tmp == NULL) {
8256 PyErr_SetString(PyExc_TypeError, "required field \"values\" missing from JoinedStr");
8257 return 1;
8258 }
8259 else {
Eric V. Smith235a6f02015-09-19 14:51:32 -04008260 int res;
8261 Py_ssize_t len;
8262 Py_ssize_t i;
Eric V. Smith235a6f02015-09-19 14:51:32 -04008263 if (!PyList_Check(tmp)) {
Dino Viehlandac46eb42019-09-11 10:16:34 -07008264 PyErr_Format(PyExc_TypeError, "JoinedStr field \"values\" must be a list, not a %.200s", _PyType_Name(Py_TYPE(tmp)));
Eric V. Smith235a6f02015-09-19 14:51:32 -04008265 goto failed;
8266 }
8267 len = PyList_GET_SIZE(tmp);
Pablo Galindoa5634c42020-09-16 19:42:00 +01008268 values = _Py_asdl_expr_seq_new(len, arena);
Eric V. Smith235a6f02015-09-19 14:51:32 -04008269 if (values == NULL) goto failed;
8270 for (i = 0; i < len; i++) {
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07008271 expr_ty val;
Serhiy Storchaka43c97312019-09-10 13:02:30 +03008272 PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
8273 Py_INCREF(tmp2);
Victor Stinner74419f02020-07-03 11:35:37 +02008274 res = obj2ast_expr(state, tmp2, &val, arena);
Serhiy Storchaka43c97312019-09-10 13:02:30 +03008275 Py_DECREF(tmp2);
Eric V. Smith235a6f02015-09-19 14:51:32 -04008276 if (res != 0) goto failed;
Serhiy Storchaka5e808552016-10-07 21:55:49 +03008277 if (len != PyList_GET_SIZE(tmp)) {
8278 PyErr_SetString(PyExc_RuntimeError, "JoinedStr field \"values\" changed size during iteration");
8279 goto failed;
8280 }
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07008281 asdl_seq_SET(values, i, val);
Eric V. Smith235a6f02015-09-19 14:51:32 -04008282 }
8283 Py_CLEAR(tmp);
Eric V. Smith235a6f02015-09-19 14:51:32 -04008284 }
Victor Stinnerd27f8d22021-04-07 21:34:22 +02008285 *out = _PyAST_JoinedStr(values, lineno, col_offset, end_lineno,
8286 end_col_offset, arena);
Eric V. Smith235a6f02015-09-19 14:51:32 -04008287 if (*out == NULL) goto failed;
8288 return 0;
8289 }
Victor Stinner74419f02020-07-03 11:35:37 +02008290 tp = state->Constant_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07008291 isinstance = PyObject_IsInstance(obj, tp);
Victor Stinnerf2c1aa12016-01-26 00:40:57 +01008292 if (isinstance == -1) {
8293 return 1;
8294 }
8295 if (isinstance) {
8296 constant value;
Guido van Rossum10f8ce62019-03-13 13:00:46 -07008297 string kind;
Victor Stinnerf2c1aa12016-01-26 00:40:57 +01008298
Victor Stinner74419f02020-07-03 11:35:37 +02008299 if (_PyObject_LookupAttr(obj, state->value, &tmp) < 0) {
Serhiy Storchakaf320be72018-01-25 10:49:40 +02008300 return 1;
8301 }
8302 if (tmp == NULL) {
8303 PyErr_SetString(PyExc_TypeError, "required field \"value\" missing from Constant");
8304 return 1;
8305 }
8306 else {
Victor Stinnerf2c1aa12016-01-26 00:40:57 +01008307 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02008308 res = obj2ast_constant(state, tmp, &value, arena);
Victor Stinnerf2c1aa12016-01-26 00:40:57 +01008309 if (res != 0) goto failed;
8310 Py_CLEAR(tmp);
Victor Stinnerf2c1aa12016-01-26 00:40:57 +01008311 }
Victor Stinner74419f02020-07-03 11:35:37 +02008312 if (_PyObject_LookupAttr(obj, state->kind, &tmp) < 0) {
Guido van Rossum10f8ce62019-03-13 13:00:46 -07008313 return 1;
8314 }
8315 if (tmp == NULL || tmp == Py_None) {
8316 Py_CLEAR(tmp);
8317 kind = NULL;
8318 }
8319 else {
8320 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02008321 res = obj2ast_string(state, tmp, &kind, arena);
Guido van Rossum10f8ce62019-03-13 13:00:46 -07008322 if (res != 0) goto failed;
8323 Py_CLEAR(tmp);
8324 }
Victor Stinnerd27f8d22021-04-07 21:34:22 +02008325 *out = _PyAST_Constant(value, kind, lineno, col_offset, end_lineno,
8326 end_col_offset, arena);
Victor Stinnerf2c1aa12016-01-26 00:40:57 +01008327 if (*out == NULL) goto failed;
8328 return 0;
8329 }
Victor Stinner74419f02020-07-03 11:35:37 +02008330 tp = state->Attribute_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07008331 isinstance = PyObject_IsInstance(obj, tp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008332 if (isinstance == -1) {
8333 return 1;
8334 }
8335 if (isinstance) {
8336 expr_ty value;
8337 identifier attr;
8338 expr_context_ty ctx;
8339
Victor Stinner74419f02020-07-03 11:35:37 +02008340 if (_PyObject_LookupAttr(obj, state->value, &tmp) < 0) {
Serhiy Storchakaf320be72018-01-25 10:49:40 +02008341 return 1;
8342 }
8343 if (tmp == NULL) {
8344 PyErr_SetString(PyExc_TypeError, "required field \"value\" missing from Attribute");
8345 return 1;
8346 }
8347 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008348 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02008349 res = obj2ast_expr(state, tmp, &value, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008350 if (res != 0) goto failed;
Victor Stinner1acc1292013-07-27 00:03:47 +02008351 Py_CLEAR(tmp);
Serhiy Storchakaf320be72018-01-25 10:49:40 +02008352 }
Victor Stinner74419f02020-07-03 11:35:37 +02008353 if (_PyObject_LookupAttr(obj, state->attr, &tmp) < 0) {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008354 return 1;
8355 }
Serhiy Storchakaf320be72018-01-25 10:49:40 +02008356 if (tmp == NULL) {
8357 PyErr_SetString(PyExc_TypeError, "required field \"attr\" missing from Attribute");
8358 return 1;
8359 }
8360 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008361 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02008362 res = obj2ast_identifier(state, tmp, &attr, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008363 if (res != 0) goto failed;
Victor Stinner1acc1292013-07-27 00:03:47 +02008364 Py_CLEAR(tmp);
Serhiy Storchakaf320be72018-01-25 10:49:40 +02008365 }
Victor Stinner74419f02020-07-03 11:35:37 +02008366 if (_PyObject_LookupAttr(obj, state->ctx, &tmp) < 0) {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008367 return 1;
8368 }
Serhiy Storchakaf320be72018-01-25 10:49:40 +02008369 if (tmp == NULL) {
8370 PyErr_SetString(PyExc_TypeError, "required field \"ctx\" missing from Attribute");
8371 return 1;
8372 }
8373 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008374 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02008375 res = obj2ast_expr_context(state, tmp, &ctx, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008376 if (res != 0) goto failed;
Victor Stinner1acc1292013-07-27 00:03:47 +02008377 Py_CLEAR(tmp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008378 }
Victor Stinnerd27f8d22021-04-07 21:34:22 +02008379 *out = _PyAST_Attribute(value, attr, ctx, lineno, col_offset,
8380 end_lineno, end_col_offset, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008381 if (*out == NULL) goto failed;
8382 return 0;
8383 }
Victor Stinner74419f02020-07-03 11:35:37 +02008384 tp = state->Subscript_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07008385 isinstance = PyObject_IsInstance(obj, tp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008386 if (isinstance == -1) {
8387 return 1;
8388 }
8389 if (isinstance) {
8390 expr_ty value;
Serhiy Storchaka13d52c22020-03-10 18:52:34 +02008391 expr_ty slice;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008392 expr_context_ty ctx;
8393
Victor Stinner74419f02020-07-03 11:35:37 +02008394 if (_PyObject_LookupAttr(obj, state->value, &tmp) < 0) {
Serhiy Storchakaf320be72018-01-25 10:49:40 +02008395 return 1;
8396 }
8397 if (tmp == NULL) {
8398 PyErr_SetString(PyExc_TypeError, "required field \"value\" missing from Subscript");
8399 return 1;
8400 }
8401 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008402 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02008403 res = obj2ast_expr(state, tmp, &value, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008404 if (res != 0) goto failed;
Victor Stinner1acc1292013-07-27 00:03:47 +02008405 Py_CLEAR(tmp);
Serhiy Storchakaf320be72018-01-25 10:49:40 +02008406 }
Victor Stinner74419f02020-07-03 11:35:37 +02008407 if (_PyObject_LookupAttr(obj, state->slice, &tmp) < 0) {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008408 return 1;
8409 }
Serhiy Storchakaf320be72018-01-25 10:49:40 +02008410 if (tmp == NULL) {
8411 PyErr_SetString(PyExc_TypeError, "required field \"slice\" missing from Subscript");
8412 return 1;
8413 }
8414 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008415 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02008416 res = obj2ast_expr(state, tmp, &slice, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008417 if (res != 0) goto failed;
Victor Stinner1acc1292013-07-27 00:03:47 +02008418 Py_CLEAR(tmp);
Serhiy Storchakaf320be72018-01-25 10:49:40 +02008419 }
Victor Stinner74419f02020-07-03 11:35:37 +02008420 if (_PyObject_LookupAttr(obj, state->ctx, &tmp) < 0) {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008421 return 1;
8422 }
Serhiy Storchakaf320be72018-01-25 10:49:40 +02008423 if (tmp == NULL) {
8424 PyErr_SetString(PyExc_TypeError, "required field \"ctx\" missing from Subscript");
8425 return 1;
8426 }
8427 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008428 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02008429 res = obj2ast_expr_context(state, tmp, &ctx, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008430 if (res != 0) goto failed;
Victor Stinner1acc1292013-07-27 00:03:47 +02008431 Py_CLEAR(tmp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008432 }
Victor Stinnerd27f8d22021-04-07 21:34:22 +02008433 *out = _PyAST_Subscript(value, slice, ctx, lineno, col_offset,
8434 end_lineno, end_col_offset, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008435 if (*out == NULL) goto failed;
8436 return 0;
8437 }
Victor Stinner74419f02020-07-03 11:35:37 +02008438 tp = state->Starred_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07008439 isinstance = PyObject_IsInstance(obj, tp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008440 if (isinstance == -1) {
8441 return 1;
8442 }
8443 if (isinstance) {
8444 expr_ty value;
8445 expr_context_ty ctx;
8446
Victor Stinner74419f02020-07-03 11:35:37 +02008447 if (_PyObject_LookupAttr(obj, state->value, &tmp) < 0) {
Serhiy Storchakaf320be72018-01-25 10:49:40 +02008448 return 1;
8449 }
8450 if (tmp == NULL) {
8451 PyErr_SetString(PyExc_TypeError, "required field \"value\" missing from Starred");
8452 return 1;
8453 }
8454 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008455 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02008456 res = obj2ast_expr(state, tmp, &value, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008457 if (res != 0) goto failed;
Victor Stinner1acc1292013-07-27 00:03:47 +02008458 Py_CLEAR(tmp);
Serhiy Storchakaf320be72018-01-25 10:49:40 +02008459 }
Victor Stinner74419f02020-07-03 11:35:37 +02008460 if (_PyObject_LookupAttr(obj, state->ctx, &tmp) < 0) {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008461 return 1;
8462 }
Serhiy Storchakaf320be72018-01-25 10:49:40 +02008463 if (tmp == NULL) {
8464 PyErr_SetString(PyExc_TypeError, "required field \"ctx\" missing from Starred");
8465 return 1;
8466 }
8467 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008468 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02008469 res = obj2ast_expr_context(state, tmp, &ctx, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008470 if (res != 0) goto failed;
Victor Stinner1acc1292013-07-27 00:03:47 +02008471 Py_CLEAR(tmp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008472 }
Victor Stinnerd27f8d22021-04-07 21:34:22 +02008473 *out = _PyAST_Starred(value, ctx, lineno, col_offset, end_lineno,
8474 end_col_offset, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008475 if (*out == NULL) goto failed;
8476 return 0;
8477 }
Victor Stinner74419f02020-07-03 11:35:37 +02008478 tp = state->Name_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07008479 isinstance = PyObject_IsInstance(obj, tp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008480 if (isinstance == -1) {
8481 return 1;
8482 }
8483 if (isinstance) {
8484 identifier id;
8485 expr_context_ty ctx;
8486
Victor Stinner74419f02020-07-03 11:35:37 +02008487 if (_PyObject_LookupAttr(obj, state->id, &tmp) < 0) {
Serhiy Storchakaf320be72018-01-25 10:49:40 +02008488 return 1;
8489 }
8490 if (tmp == NULL) {
8491 PyErr_SetString(PyExc_TypeError, "required field \"id\" missing from Name");
8492 return 1;
8493 }
8494 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008495 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02008496 res = obj2ast_identifier(state, tmp, &id, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008497 if (res != 0) goto failed;
Victor Stinner1acc1292013-07-27 00:03:47 +02008498 Py_CLEAR(tmp);
Serhiy Storchakaf320be72018-01-25 10:49:40 +02008499 }
Victor Stinner74419f02020-07-03 11:35:37 +02008500 if (_PyObject_LookupAttr(obj, state->ctx, &tmp) < 0) {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008501 return 1;
8502 }
Serhiy Storchakaf320be72018-01-25 10:49:40 +02008503 if (tmp == NULL) {
8504 PyErr_SetString(PyExc_TypeError, "required field \"ctx\" missing from Name");
8505 return 1;
8506 }
8507 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008508 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02008509 res = obj2ast_expr_context(state, tmp, &ctx, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008510 if (res != 0) goto failed;
Victor Stinner1acc1292013-07-27 00:03:47 +02008511 Py_CLEAR(tmp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008512 }
Victor Stinnerd27f8d22021-04-07 21:34:22 +02008513 *out = _PyAST_Name(id, ctx, lineno, col_offset, end_lineno,
8514 end_col_offset, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008515 if (*out == NULL) goto failed;
8516 return 0;
8517 }
Victor Stinner74419f02020-07-03 11:35:37 +02008518 tp = state->List_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07008519 isinstance = PyObject_IsInstance(obj, tp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008520 if (isinstance == -1) {
8521 return 1;
8522 }
8523 if (isinstance) {
Pablo Galindoa5634c42020-09-16 19:42:00 +01008524 asdl_expr_seq* elts;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008525 expr_context_ty ctx;
8526
Victor Stinner74419f02020-07-03 11:35:37 +02008527 if (_PyObject_LookupAttr(obj, state->elts, &tmp) < 0) {
Serhiy Storchakaf320be72018-01-25 10:49:40 +02008528 return 1;
8529 }
8530 if (tmp == NULL) {
8531 PyErr_SetString(PyExc_TypeError, "required field \"elts\" missing from List");
8532 return 1;
8533 }
8534 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008535 int res;
8536 Py_ssize_t len;
8537 Py_ssize_t i;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008538 if (!PyList_Check(tmp)) {
Dino Viehlandac46eb42019-09-11 10:16:34 -07008539 PyErr_Format(PyExc_TypeError, "List field \"elts\" must be a list, not a %.200s", _PyType_Name(Py_TYPE(tmp)));
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008540 goto failed;
8541 }
8542 len = PyList_GET_SIZE(tmp);
Pablo Galindoa5634c42020-09-16 19:42:00 +01008543 elts = _Py_asdl_expr_seq_new(len, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008544 if (elts == NULL) goto failed;
8545 for (i = 0; i < len; i++) {
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07008546 expr_ty val;
Serhiy Storchaka43c97312019-09-10 13:02:30 +03008547 PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
8548 Py_INCREF(tmp2);
Victor Stinner74419f02020-07-03 11:35:37 +02008549 res = obj2ast_expr(state, tmp2, &val, arena);
Serhiy Storchaka43c97312019-09-10 13:02:30 +03008550 Py_DECREF(tmp2);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008551 if (res != 0) goto failed;
Serhiy Storchakacf380602016-10-07 21:51:28 +03008552 if (len != PyList_GET_SIZE(tmp)) {
8553 PyErr_SetString(PyExc_RuntimeError, "List field \"elts\" changed size during iteration");
8554 goto failed;
8555 }
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07008556 asdl_seq_SET(elts, i, val);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008557 }
Victor Stinner1acc1292013-07-27 00:03:47 +02008558 Py_CLEAR(tmp);
Serhiy Storchakaf320be72018-01-25 10:49:40 +02008559 }
Victor Stinner74419f02020-07-03 11:35:37 +02008560 if (_PyObject_LookupAttr(obj, state->ctx, &tmp) < 0) {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008561 return 1;
8562 }
Serhiy Storchakaf320be72018-01-25 10:49:40 +02008563 if (tmp == NULL) {
8564 PyErr_SetString(PyExc_TypeError, "required field \"ctx\" missing from List");
8565 return 1;
8566 }
8567 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008568 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02008569 res = obj2ast_expr_context(state, tmp, &ctx, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008570 if (res != 0) goto failed;
Victor Stinner1acc1292013-07-27 00:03:47 +02008571 Py_CLEAR(tmp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008572 }
Victor Stinnerd27f8d22021-04-07 21:34:22 +02008573 *out = _PyAST_List(elts, ctx, lineno, col_offset, end_lineno,
8574 end_col_offset, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008575 if (*out == NULL) goto failed;
8576 return 0;
8577 }
Victor Stinner74419f02020-07-03 11:35:37 +02008578 tp = state->Tuple_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07008579 isinstance = PyObject_IsInstance(obj, tp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008580 if (isinstance == -1) {
8581 return 1;
8582 }
8583 if (isinstance) {
Pablo Galindoa5634c42020-09-16 19:42:00 +01008584 asdl_expr_seq* elts;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008585 expr_context_ty ctx;
8586
Victor Stinner74419f02020-07-03 11:35:37 +02008587 if (_PyObject_LookupAttr(obj, state->elts, &tmp) < 0) {
Serhiy Storchakaf320be72018-01-25 10:49:40 +02008588 return 1;
8589 }
8590 if (tmp == NULL) {
8591 PyErr_SetString(PyExc_TypeError, "required field \"elts\" missing from Tuple");
8592 return 1;
8593 }
8594 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008595 int res;
8596 Py_ssize_t len;
8597 Py_ssize_t i;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008598 if (!PyList_Check(tmp)) {
Dino Viehlandac46eb42019-09-11 10:16:34 -07008599 PyErr_Format(PyExc_TypeError, "Tuple field \"elts\" must be a list, not a %.200s", _PyType_Name(Py_TYPE(tmp)));
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008600 goto failed;
8601 }
8602 len = PyList_GET_SIZE(tmp);
Pablo Galindoa5634c42020-09-16 19:42:00 +01008603 elts = _Py_asdl_expr_seq_new(len, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008604 if (elts == NULL) goto failed;
8605 for (i = 0; i < len; i++) {
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07008606 expr_ty val;
Serhiy Storchaka43c97312019-09-10 13:02:30 +03008607 PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
8608 Py_INCREF(tmp2);
Victor Stinner74419f02020-07-03 11:35:37 +02008609 res = obj2ast_expr(state, tmp2, &val, arena);
Serhiy Storchaka43c97312019-09-10 13:02:30 +03008610 Py_DECREF(tmp2);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008611 if (res != 0) goto failed;
Serhiy Storchakacf380602016-10-07 21:51:28 +03008612 if (len != PyList_GET_SIZE(tmp)) {
8613 PyErr_SetString(PyExc_RuntimeError, "Tuple field \"elts\" changed size during iteration");
8614 goto failed;
8615 }
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07008616 asdl_seq_SET(elts, i, val);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008617 }
Victor Stinner1acc1292013-07-27 00:03:47 +02008618 Py_CLEAR(tmp);
Serhiy Storchakaf320be72018-01-25 10:49:40 +02008619 }
Victor Stinner74419f02020-07-03 11:35:37 +02008620 if (_PyObject_LookupAttr(obj, state->ctx, &tmp) < 0) {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008621 return 1;
8622 }
Serhiy Storchakaf320be72018-01-25 10:49:40 +02008623 if (tmp == NULL) {
8624 PyErr_SetString(PyExc_TypeError, "required field \"ctx\" missing from Tuple");
8625 return 1;
8626 }
8627 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008628 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02008629 res = obj2ast_expr_context(state, tmp, &ctx, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008630 if (res != 0) goto failed;
Victor Stinner1acc1292013-07-27 00:03:47 +02008631 Py_CLEAR(tmp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008632 }
Victor Stinnerd27f8d22021-04-07 21:34:22 +02008633 *out = _PyAST_Tuple(elts, ctx, lineno, col_offset, end_lineno,
8634 end_col_offset, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008635 if (*out == NULL) goto failed;
8636 return 0;
8637 }
Victor Stinner74419f02020-07-03 11:35:37 +02008638 tp = state->Slice_type;
Serhiy Storchaka13d52c22020-03-10 18:52:34 +02008639 isinstance = PyObject_IsInstance(obj, tp);
8640 if (isinstance == -1) {
8641 return 1;
8642 }
8643 if (isinstance) {
8644 expr_ty lower;
8645 expr_ty upper;
8646 expr_ty step;
8647
Victor Stinner74419f02020-07-03 11:35:37 +02008648 if (_PyObject_LookupAttr(obj, state->lower, &tmp) < 0) {
Serhiy Storchaka13d52c22020-03-10 18:52:34 +02008649 return 1;
8650 }
8651 if (tmp == NULL || tmp == Py_None) {
8652 Py_CLEAR(tmp);
8653 lower = NULL;
8654 }
8655 else {
8656 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02008657 res = obj2ast_expr(state, tmp, &lower, arena);
Serhiy Storchaka13d52c22020-03-10 18:52:34 +02008658 if (res != 0) goto failed;
8659 Py_CLEAR(tmp);
8660 }
Victor Stinner74419f02020-07-03 11:35:37 +02008661 if (_PyObject_LookupAttr(obj, state->upper, &tmp) < 0) {
Serhiy Storchaka13d52c22020-03-10 18:52:34 +02008662 return 1;
8663 }
8664 if (tmp == NULL || tmp == Py_None) {
8665 Py_CLEAR(tmp);
8666 upper = NULL;
8667 }
8668 else {
8669 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02008670 res = obj2ast_expr(state, tmp, &upper, arena);
Serhiy Storchaka13d52c22020-03-10 18:52:34 +02008671 if (res != 0) goto failed;
8672 Py_CLEAR(tmp);
8673 }
Victor Stinner74419f02020-07-03 11:35:37 +02008674 if (_PyObject_LookupAttr(obj, state->step, &tmp) < 0) {
Serhiy Storchaka13d52c22020-03-10 18:52:34 +02008675 return 1;
8676 }
8677 if (tmp == NULL || tmp == Py_None) {
8678 Py_CLEAR(tmp);
8679 step = NULL;
8680 }
8681 else {
8682 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02008683 res = obj2ast_expr(state, tmp, &step, arena);
Serhiy Storchaka13d52c22020-03-10 18:52:34 +02008684 if (res != 0) goto failed;
8685 Py_CLEAR(tmp);
8686 }
Victor Stinnerd27f8d22021-04-07 21:34:22 +02008687 *out = _PyAST_Slice(lower, upper, step, lineno, col_offset, end_lineno,
8688 end_col_offset, arena);
Serhiy Storchaka13d52c22020-03-10 18:52:34 +02008689 if (*out == NULL) goto failed;
8690 return 0;
8691 }
Brandt Bucher145bf262021-02-26 14:51:55 -08008692 tp = state->MatchAs_type;
8693 isinstance = PyObject_IsInstance(obj, tp);
8694 if (isinstance == -1) {
8695 return 1;
8696 }
8697 if (isinstance) {
8698 expr_ty pattern;
8699 identifier name;
8700
8701 if (_PyObject_LookupAttr(obj, state->pattern, &tmp) < 0) {
8702 return 1;
8703 }
8704 if (tmp == NULL) {
8705 PyErr_SetString(PyExc_TypeError, "required field \"pattern\" missing from MatchAs");
8706 return 1;
8707 }
8708 else {
8709 int res;
8710 res = obj2ast_expr(state, tmp, &pattern, arena);
8711 if (res != 0) goto failed;
8712 Py_CLEAR(tmp);
8713 }
8714 if (_PyObject_LookupAttr(obj, state->name, &tmp) < 0) {
8715 return 1;
8716 }
8717 if (tmp == NULL) {
8718 PyErr_SetString(PyExc_TypeError, "required field \"name\" missing from MatchAs");
8719 return 1;
8720 }
8721 else {
8722 int res;
8723 res = obj2ast_identifier(state, tmp, &name, arena);
8724 if (res != 0) goto failed;
8725 Py_CLEAR(tmp);
8726 }
Victor Stinnerd27f8d22021-04-07 21:34:22 +02008727 *out = _PyAST_MatchAs(pattern, name, lineno, col_offset, end_lineno,
8728 end_col_offset, arena);
Brandt Bucher145bf262021-02-26 14:51:55 -08008729 if (*out == NULL) goto failed;
8730 return 0;
8731 }
8732 tp = state->MatchOr_type;
8733 isinstance = PyObject_IsInstance(obj, tp);
8734 if (isinstance == -1) {
8735 return 1;
8736 }
8737 if (isinstance) {
8738 asdl_expr_seq* patterns;
8739
8740 if (_PyObject_LookupAttr(obj, state->patterns, &tmp) < 0) {
8741 return 1;
8742 }
8743 if (tmp == NULL) {
8744 PyErr_SetString(PyExc_TypeError, "required field \"patterns\" missing from MatchOr");
8745 return 1;
8746 }
8747 else {
8748 int res;
8749 Py_ssize_t len;
8750 Py_ssize_t i;
8751 if (!PyList_Check(tmp)) {
8752 PyErr_Format(PyExc_TypeError, "MatchOr field \"patterns\" must be a list, not a %.200s", _PyType_Name(Py_TYPE(tmp)));
8753 goto failed;
8754 }
8755 len = PyList_GET_SIZE(tmp);
8756 patterns = _Py_asdl_expr_seq_new(len, arena);
8757 if (patterns == NULL) goto failed;
8758 for (i = 0; i < len; i++) {
8759 expr_ty val;
8760 PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
8761 Py_INCREF(tmp2);
8762 res = obj2ast_expr(state, tmp2, &val, arena);
8763 Py_DECREF(tmp2);
8764 if (res != 0) goto failed;
8765 if (len != PyList_GET_SIZE(tmp)) {
8766 PyErr_SetString(PyExc_RuntimeError, "MatchOr field \"patterns\" changed size during iteration");
8767 goto failed;
8768 }
8769 asdl_seq_SET(patterns, i, val);
8770 }
8771 Py_CLEAR(tmp);
8772 }
Victor Stinnerd27f8d22021-04-07 21:34:22 +02008773 *out = _PyAST_MatchOr(patterns, lineno, col_offset, end_lineno,
8774 end_col_offset, arena);
Brandt Bucher145bf262021-02-26 14:51:55 -08008775 if (*out == NULL) goto failed;
8776 return 0;
8777 }
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008778
8779 PyErr_Format(PyExc_TypeError, "expected some sort of expr, but got %R", obj);
8780 failed:
8781 Py_XDECREF(tmp);
8782 return 1;
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00008783}
8784
8785int
Victor Stinner5cf47822020-11-02 22:03:28 +01008786obj2ast_expr_context(struct ast_state *state, PyObject* obj, expr_context_ty*
Victor Stinner74419f02020-07-03 11:35:37 +02008787 out, PyArena* arena)
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00008788{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008789 int isinstance;
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00008790
Victor Stinner74419f02020-07-03 11:35:37 +02008791 isinstance = PyObject_IsInstance(obj, state->Load_type);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008792 if (isinstance == -1) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00008793 return 1;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008794 }
8795 if (isinstance) {
8796 *out = Load;
8797 return 0;
8798 }
Victor Stinner74419f02020-07-03 11:35:37 +02008799 isinstance = PyObject_IsInstance(obj, state->Store_type);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008800 if (isinstance == -1) {
8801 return 1;
8802 }
8803 if (isinstance) {
8804 *out = Store;
8805 return 0;
8806 }
Victor Stinner74419f02020-07-03 11:35:37 +02008807 isinstance = PyObject_IsInstance(obj, state->Del_type);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008808 if (isinstance == -1) {
8809 return 1;
8810 }
8811 if (isinstance) {
8812 *out = Del;
8813 return 0;
8814 }
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008815
8816 PyErr_Format(PyExc_TypeError, "expected some sort of expr_context, but got %R", obj);
8817 return 1;
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00008818}
8819
8820int
Victor Stinner5cf47822020-11-02 22:03:28 +01008821obj2ast_boolop(struct ast_state *state, PyObject* obj, boolop_ty* out, PyArena*
Victor Stinner74419f02020-07-03 11:35:37 +02008822 arena)
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00008823{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008824 int isinstance;
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00008825
Victor Stinner74419f02020-07-03 11:35:37 +02008826 isinstance = PyObject_IsInstance(obj, state->And_type);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008827 if (isinstance == -1) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00008828 return 1;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008829 }
8830 if (isinstance) {
8831 *out = And;
8832 return 0;
8833 }
Victor Stinner74419f02020-07-03 11:35:37 +02008834 isinstance = PyObject_IsInstance(obj, state->Or_type);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008835 if (isinstance == -1) {
8836 return 1;
8837 }
8838 if (isinstance) {
8839 *out = Or;
8840 return 0;
8841 }
8842
8843 PyErr_Format(PyExc_TypeError, "expected some sort of boolop, but got %R", obj);
8844 return 1;
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00008845}
8846
8847int
Victor Stinner5cf47822020-11-02 22:03:28 +01008848obj2ast_operator(struct ast_state *state, PyObject* obj, operator_ty* out,
Victor Stinner74419f02020-07-03 11:35:37 +02008849 PyArena* arena)
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00008850{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008851 int isinstance;
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00008852
Victor Stinner74419f02020-07-03 11:35:37 +02008853 isinstance = PyObject_IsInstance(obj, state->Add_type);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008854 if (isinstance == -1) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00008855 return 1;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008856 }
8857 if (isinstance) {
8858 *out = Add;
8859 return 0;
8860 }
Victor Stinner74419f02020-07-03 11:35:37 +02008861 isinstance = PyObject_IsInstance(obj, state->Sub_type);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008862 if (isinstance == -1) {
8863 return 1;
8864 }
8865 if (isinstance) {
8866 *out = Sub;
8867 return 0;
8868 }
Victor Stinner74419f02020-07-03 11:35:37 +02008869 isinstance = PyObject_IsInstance(obj, state->Mult_type);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008870 if (isinstance == -1) {
8871 return 1;
8872 }
8873 if (isinstance) {
8874 *out = Mult;
8875 return 0;
8876 }
Victor Stinner74419f02020-07-03 11:35:37 +02008877 isinstance = PyObject_IsInstance(obj, state->MatMult_type);
Benjamin Petersond51374e2014-04-09 23:55:56 -04008878 if (isinstance == -1) {
8879 return 1;
8880 }
8881 if (isinstance) {
8882 *out = MatMult;
8883 return 0;
8884 }
Victor Stinner74419f02020-07-03 11:35:37 +02008885 isinstance = PyObject_IsInstance(obj, state->Div_type);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008886 if (isinstance == -1) {
8887 return 1;
8888 }
8889 if (isinstance) {
8890 *out = Div;
8891 return 0;
8892 }
Victor Stinner74419f02020-07-03 11:35:37 +02008893 isinstance = PyObject_IsInstance(obj, state->Mod_type);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008894 if (isinstance == -1) {
8895 return 1;
8896 }
8897 if (isinstance) {
8898 *out = Mod;
8899 return 0;
8900 }
Victor Stinner74419f02020-07-03 11:35:37 +02008901 isinstance = PyObject_IsInstance(obj, state->Pow_type);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008902 if (isinstance == -1) {
8903 return 1;
8904 }
8905 if (isinstance) {
8906 *out = Pow;
8907 return 0;
8908 }
Victor Stinner74419f02020-07-03 11:35:37 +02008909 isinstance = PyObject_IsInstance(obj, state->LShift_type);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008910 if (isinstance == -1) {
8911 return 1;
8912 }
8913 if (isinstance) {
8914 *out = LShift;
8915 return 0;
8916 }
Victor Stinner74419f02020-07-03 11:35:37 +02008917 isinstance = PyObject_IsInstance(obj, state->RShift_type);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008918 if (isinstance == -1) {
8919 return 1;
8920 }
8921 if (isinstance) {
8922 *out = RShift;
8923 return 0;
8924 }
Victor Stinner74419f02020-07-03 11:35:37 +02008925 isinstance = PyObject_IsInstance(obj, state->BitOr_type);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008926 if (isinstance == -1) {
8927 return 1;
8928 }
8929 if (isinstance) {
8930 *out = BitOr;
8931 return 0;
8932 }
Victor Stinner74419f02020-07-03 11:35:37 +02008933 isinstance = PyObject_IsInstance(obj, state->BitXor_type);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008934 if (isinstance == -1) {
8935 return 1;
8936 }
8937 if (isinstance) {
8938 *out = BitXor;
8939 return 0;
8940 }
Victor Stinner74419f02020-07-03 11:35:37 +02008941 isinstance = PyObject_IsInstance(obj, state->BitAnd_type);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008942 if (isinstance == -1) {
8943 return 1;
8944 }
8945 if (isinstance) {
8946 *out = BitAnd;
8947 return 0;
8948 }
Victor Stinner74419f02020-07-03 11:35:37 +02008949 isinstance = PyObject_IsInstance(obj, state->FloorDiv_type);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008950 if (isinstance == -1) {
8951 return 1;
8952 }
8953 if (isinstance) {
8954 *out = FloorDiv;
8955 return 0;
8956 }
8957
8958 PyErr_Format(PyExc_TypeError, "expected some sort of operator, but got %R", obj);
8959 return 1;
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00008960}
8961
8962int
Victor Stinner5cf47822020-11-02 22:03:28 +01008963obj2ast_unaryop(struct ast_state *state, PyObject* obj, unaryop_ty* out,
8964 PyArena* arena)
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00008965{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008966 int isinstance;
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00008967
Victor Stinner74419f02020-07-03 11:35:37 +02008968 isinstance = PyObject_IsInstance(obj, state->Invert_type);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008969 if (isinstance == -1) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00008970 return 1;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008971 }
8972 if (isinstance) {
8973 *out = Invert;
8974 return 0;
8975 }
Victor Stinner74419f02020-07-03 11:35:37 +02008976 isinstance = PyObject_IsInstance(obj, state->Not_type);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008977 if (isinstance == -1) {
8978 return 1;
8979 }
8980 if (isinstance) {
8981 *out = Not;
8982 return 0;
8983 }
Victor Stinner74419f02020-07-03 11:35:37 +02008984 isinstance = PyObject_IsInstance(obj, state->UAdd_type);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008985 if (isinstance == -1) {
8986 return 1;
8987 }
8988 if (isinstance) {
8989 *out = UAdd;
8990 return 0;
8991 }
Victor Stinner74419f02020-07-03 11:35:37 +02008992 isinstance = PyObject_IsInstance(obj, state->USub_type);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008993 if (isinstance == -1) {
8994 return 1;
8995 }
8996 if (isinstance) {
8997 *out = USub;
8998 return 0;
8999 }
9000
9001 PyErr_Format(PyExc_TypeError, "expected some sort of unaryop, but got %R", obj);
9002 return 1;
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00009003}
9004
9005int
Victor Stinner5cf47822020-11-02 22:03:28 +01009006obj2ast_cmpop(struct ast_state *state, PyObject* obj, cmpop_ty* out, PyArena*
Victor Stinner74419f02020-07-03 11:35:37 +02009007 arena)
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00009008{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009009 int isinstance;
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00009010
Victor Stinner74419f02020-07-03 11:35:37 +02009011 isinstance = PyObject_IsInstance(obj, state->Eq_type);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009012 if (isinstance == -1) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00009013 return 1;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009014 }
9015 if (isinstance) {
9016 *out = Eq;
9017 return 0;
9018 }
Victor Stinner74419f02020-07-03 11:35:37 +02009019 isinstance = PyObject_IsInstance(obj, state->NotEq_type);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009020 if (isinstance == -1) {
9021 return 1;
9022 }
9023 if (isinstance) {
9024 *out = NotEq;
9025 return 0;
9026 }
Victor Stinner74419f02020-07-03 11:35:37 +02009027 isinstance = PyObject_IsInstance(obj, state->Lt_type);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009028 if (isinstance == -1) {
9029 return 1;
9030 }
9031 if (isinstance) {
9032 *out = Lt;
9033 return 0;
9034 }
Victor Stinner74419f02020-07-03 11:35:37 +02009035 isinstance = PyObject_IsInstance(obj, state->LtE_type);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009036 if (isinstance == -1) {
9037 return 1;
9038 }
9039 if (isinstance) {
9040 *out = LtE;
9041 return 0;
9042 }
Victor Stinner74419f02020-07-03 11:35:37 +02009043 isinstance = PyObject_IsInstance(obj, state->Gt_type);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009044 if (isinstance == -1) {
9045 return 1;
9046 }
9047 if (isinstance) {
9048 *out = Gt;
9049 return 0;
9050 }
Victor Stinner74419f02020-07-03 11:35:37 +02009051 isinstance = PyObject_IsInstance(obj, state->GtE_type);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009052 if (isinstance == -1) {
9053 return 1;
9054 }
9055 if (isinstance) {
9056 *out = GtE;
9057 return 0;
9058 }
Victor Stinner74419f02020-07-03 11:35:37 +02009059 isinstance = PyObject_IsInstance(obj, state->Is_type);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009060 if (isinstance == -1) {
9061 return 1;
9062 }
9063 if (isinstance) {
9064 *out = Is;
9065 return 0;
9066 }
Victor Stinner74419f02020-07-03 11:35:37 +02009067 isinstance = PyObject_IsInstance(obj, state->IsNot_type);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009068 if (isinstance == -1) {
9069 return 1;
9070 }
9071 if (isinstance) {
9072 *out = IsNot;
9073 return 0;
9074 }
Victor Stinner74419f02020-07-03 11:35:37 +02009075 isinstance = PyObject_IsInstance(obj, state->In_type);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009076 if (isinstance == -1) {
9077 return 1;
9078 }
9079 if (isinstance) {
9080 *out = In;
9081 return 0;
9082 }
Victor Stinner74419f02020-07-03 11:35:37 +02009083 isinstance = PyObject_IsInstance(obj, state->NotIn_type);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009084 if (isinstance == -1) {
9085 return 1;
9086 }
9087 if (isinstance) {
9088 *out = NotIn;
9089 return 0;
9090 }
9091
9092 PyErr_Format(PyExc_TypeError, "expected some sort of cmpop, but got %R", obj);
9093 return 1;
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00009094}
9095
9096int
Victor Stinner5cf47822020-11-02 22:03:28 +01009097obj2ast_comprehension(struct ast_state *state, PyObject* obj, comprehension_ty*
Victor Stinner74419f02020-07-03 11:35:37 +02009098 out, PyArena* arena)
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00009099{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009100 PyObject* tmp = NULL;
9101 expr_ty target;
9102 expr_ty iter;
Pablo Galindoa5634c42020-09-16 19:42:00 +01009103 asdl_expr_seq* ifs;
Yury Selivanov52c4e7c2016-09-09 10:36:01 -07009104 int is_async;
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00009105
Victor Stinner74419f02020-07-03 11:35:37 +02009106 if (_PyObject_LookupAttr(obj, state->target, &tmp) < 0) {
Serhiy Storchakaf320be72018-01-25 10:49:40 +02009107 return 1;
9108 }
9109 if (tmp == NULL) {
9110 PyErr_SetString(PyExc_TypeError, "required field \"target\" missing from comprehension");
9111 return 1;
9112 }
9113 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009114 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02009115 res = obj2ast_expr(state, tmp, &target, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009116 if (res != 0) goto failed;
Victor Stinner1acc1292013-07-27 00:03:47 +02009117 Py_CLEAR(tmp);
Serhiy Storchakaf320be72018-01-25 10:49:40 +02009118 }
Victor Stinner74419f02020-07-03 11:35:37 +02009119 if (_PyObject_LookupAttr(obj, state->iter, &tmp) < 0) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00009120 return 1;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009121 }
Serhiy Storchakaf320be72018-01-25 10:49:40 +02009122 if (tmp == NULL) {
9123 PyErr_SetString(PyExc_TypeError, "required field \"iter\" missing from comprehension");
9124 return 1;
9125 }
9126 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009127 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02009128 res = obj2ast_expr(state, tmp, &iter, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009129 if (res != 0) goto failed;
Victor Stinner1acc1292013-07-27 00:03:47 +02009130 Py_CLEAR(tmp);
Serhiy Storchakaf320be72018-01-25 10:49:40 +02009131 }
Victor Stinner74419f02020-07-03 11:35:37 +02009132 if (_PyObject_LookupAttr(obj, state->ifs, &tmp) < 0) {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009133 return 1;
9134 }
Serhiy Storchakaf320be72018-01-25 10:49:40 +02009135 if (tmp == NULL) {
9136 PyErr_SetString(PyExc_TypeError, "required field \"ifs\" missing from comprehension");
9137 return 1;
9138 }
9139 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009140 int res;
9141 Py_ssize_t len;
9142 Py_ssize_t i;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009143 if (!PyList_Check(tmp)) {
Dino Viehlandac46eb42019-09-11 10:16:34 -07009144 PyErr_Format(PyExc_TypeError, "comprehension field \"ifs\" must be a list, not a %.200s", _PyType_Name(Py_TYPE(tmp)));
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009145 goto failed;
9146 }
9147 len = PyList_GET_SIZE(tmp);
Pablo Galindoa5634c42020-09-16 19:42:00 +01009148 ifs = _Py_asdl_expr_seq_new(len, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009149 if (ifs == NULL) goto failed;
9150 for (i = 0; i < len; i++) {
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07009151 expr_ty val;
Serhiy Storchaka43c97312019-09-10 13:02:30 +03009152 PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
9153 Py_INCREF(tmp2);
Victor Stinner74419f02020-07-03 11:35:37 +02009154 res = obj2ast_expr(state, tmp2, &val, arena);
Serhiy Storchaka43c97312019-09-10 13:02:30 +03009155 Py_DECREF(tmp2);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009156 if (res != 0) goto failed;
Serhiy Storchakacf380602016-10-07 21:51:28 +03009157 if (len != PyList_GET_SIZE(tmp)) {
9158 PyErr_SetString(PyExc_RuntimeError, "comprehension field \"ifs\" changed size during iteration");
9159 goto failed;
9160 }
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07009161 asdl_seq_SET(ifs, i, val);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009162 }
Victor Stinner1acc1292013-07-27 00:03:47 +02009163 Py_CLEAR(tmp);
Serhiy Storchakaf320be72018-01-25 10:49:40 +02009164 }
Victor Stinner74419f02020-07-03 11:35:37 +02009165 if (_PyObject_LookupAttr(obj, state->is_async, &tmp) < 0) {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009166 return 1;
9167 }
Serhiy Storchakaf320be72018-01-25 10:49:40 +02009168 if (tmp == NULL) {
9169 PyErr_SetString(PyExc_TypeError, "required field \"is_async\" missing from comprehension");
9170 return 1;
9171 }
9172 else {
Yury Selivanov52c4e7c2016-09-09 10:36:01 -07009173 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02009174 res = obj2ast_int(state, tmp, &is_async, arena);
Yury Selivanov52c4e7c2016-09-09 10:36:01 -07009175 if (res != 0) goto failed;
9176 Py_CLEAR(tmp);
Yury Selivanov52c4e7c2016-09-09 10:36:01 -07009177 }
Victor Stinnerd27f8d22021-04-07 21:34:22 +02009178 *out = _PyAST_comprehension(target, iter, ifs, is_async, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009179 return 0;
9180failed:
9181 Py_XDECREF(tmp);
9182 return 1;
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00009183}
9184
9185int
Victor Stinner5cf47822020-11-02 22:03:28 +01009186obj2ast_excepthandler(struct ast_state *state, PyObject* obj, excepthandler_ty*
Victor Stinner74419f02020-07-03 11:35:37 +02009187 out, PyArena* arena)
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00009188{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009189 int isinstance;
Neal Norwitzad74aa82008-03-31 05:14:30 +00009190
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009191 PyObject *tmp = NULL;
Dino Viehlandac46eb42019-09-11 10:16:34 -07009192 PyObject *tp;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009193 int lineno;
9194 int col_offset;
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00009195 int end_lineno;
9196 int end_col_offset;
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00009197
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009198 if (obj == Py_None) {
9199 *out = NULL;
9200 return 0;
9201 }
Victor Stinner74419f02020-07-03 11:35:37 +02009202 if (_PyObject_LookupAttr(obj, state->lineno, &tmp) < 0) {
Serhiy Storchakaf320be72018-01-25 10:49:40 +02009203 return 1;
9204 }
9205 if (tmp == NULL) {
9206 PyErr_SetString(PyExc_TypeError, "required field \"lineno\" missing from excepthandler");
9207 return 1;
9208 }
9209 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009210 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02009211 res = obj2ast_int(state, tmp, &lineno, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009212 if (res != 0) goto failed;
Victor Stinner1acc1292013-07-27 00:03:47 +02009213 Py_CLEAR(tmp);
Serhiy Storchakaf320be72018-01-25 10:49:40 +02009214 }
Victor Stinner74419f02020-07-03 11:35:37 +02009215 if (_PyObject_LookupAttr(obj, state->col_offset, &tmp) < 0) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00009216 return 1;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009217 }
Serhiy Storchakaf320be72018-01-25 10:49:40 +02009218 if (tmp == NULL) {
9219 PyErr_SetString(PyExc_TypeError, "required field \"col_offset\" missing from excepthandler");
9220 return 1;
9221 }
9222 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009223 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02009224 res = obj2ast_int(state, tmp, &col_offset, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009225 if (res != 0) goto failed;
Victor Stinner1acc1292013-07-27 00:03:47 +02009226 Py_CLEAR(tmp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009227 }
Victor Stinner74419f02020-07-03 11:35:37 +02009228 if (_PyObject_LookupAttr(obj, state->end_lineno, &tmp) < 0) {
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00009229 return 1;
9230 }
9231 if (tmp == NULL || tmp == Py_None) {
9232 Py_CLEAR(tmp);
9233 end_lineno = 0;
9234 }
9235 else {
9236 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02009237 res = obj2ast_int(state, tmp, &end_lineno, arena);
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00009238 if (res != 0) goto failed;
9239 Py_CLEAR(tmp);
9240 }
Victor Stinner74419f02020-07-03 11:35:37 +02009241 if (_PyObject_LookupAttr(obj, state->end_col_offset, &tmp) < 0) {
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00009242 return 1;
9243 }
9244 if (tmp == NULL || tmp == Py_None) {
9245 Py_CLEAR(tmp);
9246 end_col_offset = 0;
9247 }
9248 else {
9249 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02009250 res = obj2ast_int(state, tmp, &end_col_offset, arena);
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00009251 if (res != 0) goto failed;
9252 Py_CLEAR(tmp);
9253 }
Victor Stinner74419f02020-07-03 11:35:37 +02009254 tp = state->ExceptHandler_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07009255 isinstance = PyObject_IsInstance(obj, tp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009256 if (isinstance == -1) {
9257 return 1;
9258 }
9259 if (isinstance) {
9260 expr_ty type;
9261 identifier name;
Pablo Galindoa5634c42020-09-16 19:42:00 +01009262 asdl_stmt_seq* body;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009263
Victor Stinner74419f02020-07-03 11:35:37 +02009264 if (_PyObject_LookupAttr(obj, state->type, &tmp) < 0) {
Serhiy Storchakaf320be72018-01-25 10:49:40 +02009265 return 1;
9266 }
9267 if (tmp == NULL || tmp == Py_None) {
9268 Py_CLEAR(tmp);
9269 type = NULL;
9270 }
9271 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009272 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02009273 res = obj2ast_expr(state, tmp, &type, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009274 if (res != 0) goto failed;
Victor Stinner1acc1292013-07-27 00:03:47 +02009275 Py_CLEAR(tmp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009276 }
Victor Stinner74419f02020-07-03 11:35:37 +02009277 if (_PyObject_LookupAttr(obj, state->name, &tmp) < 0) {
Serhiy Storchakaf320be72018-01-25 10:49:40 +02009278 return 1;
9279 }
9280 if (tmp == NULL || tmp == Py_None) {
9281 Py_CLEAR(tmp);
9282 name = NULL;
9283 }
9284 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009285 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02009286 res = obj2ast_identifier(state, tmp, &name, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009287 if (res != 0) goto failed;
Victor Stinner1acc1292013-07-27 00:03:47 +02009288 Py_CLEAR(tmp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009289 }
Victor Stinner74419f02020-07-03 11:35:37 +02009290 if (_PyObject_LookupAttr(obj, state->body, &tmp) < 0) {
Serhiy Storchakaf320be72018-01-25 10:49:40 +02009291 return 1;
9292 }
9293 if (tmp == NULL) {
9294 PyErr_SetString(PyExc_TypeError, "required field \"body\" missing from ExceptHandler");
9295 return 1;
9296 }
9297 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009298 int res;
9299 Py_ssize_t len;
9300 Py_ssize_t i;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009301 if (!PyList_Check(tmp)) {
Dino Viehlandac46eb42019-09-11 10:16:34 -07009302 PyErr_Format(PyExc_TypeError, "ExceptHandler field \"body\" must be a list, not a %.200s", _PyType_Name(Py_TYPE(tmp)));
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009303 goto failed;
9304 }
9305 len = PyList_GET_SIZE(tmp);
Pablo Galindoa5634c42020-09-16 19:42:00 +01009306 body = _Py_asdl_stmt_seq_new(len, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009307 if (body == NULL) goto failed;
9308 for (i = 0; i < len; i++) {
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07009309 stmt_ty val;
Serhiy Storchaka43c97312019-09-10 13:02:30 +03009310 PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
9311 Py_INCREF(tmp2);
Victor Stinner74419f02020-07-03 11:35:37 +02009312 res = obj2ast_stmt(state, tmp2, &val, arena);
Serhiy Storchaka43c97312019-09-10 13:02:30 +03009313 Py_DECREF(tmp2);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009314 if (res != 0) goto failed;
Serhiy Storchakacf380602016-10-07 21:51:28 +03009315 if (len != PyList_GET_SIZE(tmp)) {
9316 PyErr_SetString(PyExc_RuntimeError, "ExceptHandler field \"body\" changed size during iteration");
9317 goto failed;
9318 }
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07009319 asdl_seq_SET(body, i, val);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009320 }
Victor Stinner1acc1292013-07-27 00:03:47 +02009321 Py_CLEAR(tmp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009322 }
Victor Stinnerd27f8d22021-04-07 21:34:22 +02009323 *out = _PyAST_ExceptHandler(type, name, body, lineno, col_offset,
9324 end_lineno, end_col_offset, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009325 if (*out == NULL) goto failed;
9326 return 0;
9327 }
9328
9329 PyErr_Format(PyExc_TypeError, "expected some sort of excepthandler, but got %R", obj);
9330 failed:
9331 Py_XDECREF(tmp);
9332 return 1;
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00009333}
9334
9335int
Victor Stinner5cf47822020-11-02 22:03:28 +01009336obj2ast_arguments(struct ast_state *state, PyObject* obj, arguments_ty* out,
Victor Stinner74419f02020-07-03 11:35:37 +02009337 PyArena* arena)
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00009338{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009339 PyObject* tmp = NULL;
Pablo Galindoa5634c42020-09-16 19:42:00 +01009340 asdl_arg_seq* posonlyargs;
9341 asdl_arg_seq* args;
Victor Stinneree4b59c2013-07-27 00:01:35 +02009342 arg_ty vararg;
Pablo Galindoa5634c42020-09-16 19:42:00 +01009343 asdl_arg_seq* kwonlyargs;
9344 asdl_expr_seq* kw_defaults;
Victor Stinneree4b59c2013-07-27 00:01:35 +02009345 arg_ty kwarg;
Pablo Galindoa5634c42020-09-16 19:42:00 +01009346 asdl_expr_seq* defaults;
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00009347
Victor Stinner74419f02020-07-03 11:35:37 +02009348 if (_PyObject_LookupAttr(obj, state->posonlyargs, &tmp) < 0) {
Pablo Galindo8c77b8c2019-04-29 13:36:57 +01009349 return 1;
9350 }
9351 if (tmp == NULL) {
9352 PyErr_SetString(PyExc_TypeError, "required field \"posonlyargs\" missing from arguments");
9353 return 1;
9354 }
9355 else {
9356 int res;
9357 Py_ssize_t len;
9358 Py_ssize_t i;
9359 if (!PyList_Check(tmp)) {
Dino Viehlandac46eb42019-09-11 10:16:34 -07009360 PyErr_Format(PyExc_TypeError, "arguments field \"posonlyargs\" must be a list, not a %.200s", _PyType_Name(Py_TYPE(tmp)));
Pablo Galindo8c77b8c2019-04-29 13:36:57 +01009361 goto failed;
9362 }
9363 len = PyList_GET_SIZE(tmp);
Pablo Galindoa5634c42020-09-16 19:42:00 +01009364 posonlyargs = _Py_asdl_arg_seq_new(len, arena);
Pablo Galindo8c77b8c2019-04-29 13:36:57 +01009365 if (posonlyargs == NULL) goto failed;
9366 for (i = 0; i < len; i++) {
9367 arg_ty val;
Serhiy Storchaka43c97312019-09-10 13:02:30 +03009368 PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
9369 Py_INCREF(tmp2);
Victor Stinner74419f02020-07-03 11:35:37 +02009370 res = obj2ast_arg(state, tmp2, &val, arena);
Serhiy Storchaka43c97312019-09-10 13:02:30 +03009371 Py_DECREF(tmp2);
Pablo Galindo8c77b8c2019-04-29 13:36:57 +01009372 if (res != 0) goto failed;
9373 if (len != PyList_GET_SIZE(tmp)) {
9374 PyErr_SetString(PyExc_RuntimeError, "arguments field \"posonlyargs\" changed size during iteration");
9375 goto failed;
9376 }
9377 asdl_seq_SET(posonlyargs, i, val);
9378 }
9379 Py_CLEAR(tmp);
9380 }
Victor Stinner74419f02020-07-03 11:35:37 +02009381 if (_PyObject_LookupAttr(obj, state->args, &tmp) < 0) {
Pablo Galindocd6e83b2019-07-15 01:32:18 +02009382 return 1;
9383 }
9384 if (tmp == NULL) {
9385 PyErr_SetString(PyExc_TypeError, "required field \"args\" missing from arguments");
9386 return 1;
9387 }
9388 else {
9389 int res;
9390 Py_ssize_t len;
9391 Py_ssize_t i;
9392 if (!PyList_Check(tmp)) {
Dino Viehlandac46eb42019-09-11 10:16:34 -07009393 PyErr_Format(PyExc_TypeError, "arguments field \"args\" must be a list, not a %.200s", _PyType_Name(Py_TYPE(tmp)));
Pablo Galindocd6e83b2019-07-15 01:32:18 +02009394 goto failed;
9395 }
9396 len = PyList_GET_SIZE(tmp);
Pablo Galindoa5634c42020-09-16 19:42:00 +01009397 args = _Py_asdl_arg_seq_new(len, arena);
Pablo Galindocd6e83b2019-07-15 01:32:18 +02009398 if (args == NULL) goto failed;
9399 for (i = 0; i < len; i++) {
9400 arg_ty val;
Serhiy Storchaka43c97312019-09-10 13:02:30 +03009401 PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
9402 Py_INCREF(tmp2);
Victor Stinner74419f02020-07-03 11:35:37 +02009403 res = obj2ast_arg(state, tmp2, &val, arena);
Serhiy Storchaka43c97312019-09-10 13:02:30 +03009404 Py_DECREF(tmp2);
Pablo Galindocd6e83b2019-07-15 01:32:18 +02009405 if (res != 0) goto failed;
9406 if (len != PyList_GET_SIZE(tmp)) {
9407 PyErr_SetString(PyExc_RuntimeError, "arguments field \"args\" changed size during iteration");
9408 goto failed;
9409 }
9410 asdl_seq_SET(args, i, val);
9411 }
9412 Py_CLEAR(tmp);
9413 }
Victor Stinner74419f02020-07-03 11:35:37 +02009414 if (_PyObject_LookupAttr(obj, state->vararg, &tmp) < 0) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00009415 return 1;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009416 }
Serhiy Storchakaf320be72018-01-25 10:49:40 +02009417 if (tmp == NULL || tmp == Py_None) {
9418 Py_CLEAR(tmp);
9419 vararg = NULL;
9420 }
9421 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009422 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02009423 res = obj2ast_arg(state, tmp, &vararg, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009424 if (res != 0) goto failed;
Victor Stinner1acc1292013-07-27 00:03:47 +02009425 Py_CLEAR(tmp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009426 }
Victor Stinner74419f02020-07-03 11:35:37 +02009427 if (_PyObject_LookupAttr(obj, state->kwonlyargs, &tmp) < 0) {
Serhiy Storchakaf320be72018-01-25 10:49:40 +02009428 return 1;
9429 }
9430 if (tmp == NULL) {
9431 PyErr_SetString(PyExc_TypeError, "required field \"kwonlyargs\" missing from arguments");
9432 return 1;
9433 }
9434 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009435 int res;
9436 Py_ssize_t len;
9437 Py_ssize_t i;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009438 if (!PyList_Check(tmp)) {
Dino Viehlandac46eb42019-09-11 10:16:34 -07009439 PyErr_Format(PyExc_TypeError, "arguments field \"kwonlyargs\" must be a list, not a %.200s", _PyType_Name(Py_TYPE(tmp)));
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009440 goto failed;
9441 }
9442 len = PyList_GET_SIZE(tmp);
Pablo Galindoa5634c42020-09-16 19:42:00 +01009443 kwonlyargs = _Py_asdl_arg_seq_new(len, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009444 if (kwonlyargs == NULL) goto failed;
9445 for (i = 0; i < len; i++) {
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07009446 arg_ty val;
Serhiy Storchaka43c97312019-09-10 13:02:30 +03009447 PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
9448 Py_INCREF(tmp2);
Victor Stinner74419f02020-07-03 11:35:37 +02009449 res = obj2ast_arg(state, tmp2, &val, arena);
Serhiy Storchaka43c97312019-09-10 13:02:30 +03009450 Py_DECREF(tmp2);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009451 if (res != 0) goto failed;
Serhiy Storchakacf380602016-10-07 21:51:28 +03009452 if (len != PyList_GET_SIZE(tmp)) {
9453 PyErr_SetString(PyExc_RuntimeError, "arguments field \"kwonlyargs\" changed size during iteration");
9454 goto failed;
9455 }
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07009456 asdl_seq_SET(kwonlyargs, i, val);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009457 }
Victor Stinner1acc1292013-07-27 00:03:47 +02009458 Py_CLEAR(tmp);
Serhiy Storchakaf320be72018-01-25 10:49:40 +02009459 }
Victor Stinner74419f02020-07-03 11:35:37 +02009460 if (_PyObject_LookupAttr(obj, state->kw_defaults, &tmp) < 0) {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009461 return 1;
9462 }
Serhiy Storchakaf320be72018-01-25 10:49:40 +02009463 if (tmp == NULL) {
9464 PyErr_SetString(PyExc_TypeError, "required field \"kw_defaults\" missing from arguments");
9465 return 1;
9466 }
9467 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009468 int res;
9469 Py_ssize_t len;
9470 Py_ssize_t i;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009471 if (!PyList_Check(tmp)) {
Dino Viehlandac46eb42019-09-11 10:16:34 -07009472 PyErr_Format(PyExc_TypeError, "arguments field \"kw_defaults\" must be a list, not a %.200s", _PyType_Name(Py_TYPE(tmp)));
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009473 goto failed;
9474 }
9475 len = PyList_GET_SIZE(tmp);
Pablo Galindoa5634c42020-09-16 19:42:00 +01009476 kw_defaults = _Py_asdl_expr_seq_new(len, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009477 if (kw_defaults == NULL) goto failed;
9478 for (i = 0; i < len; i++) {
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07009479 expr_ty val;
Serhiy Storchaka43c97312019-09-10 13:02:30 +03009480 PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
9481 Py_INCREF(tmp2);
Victor Stinner74419f02020-07-03 11:35:37 +02009482 res = obj2ast_expr(state, tmp2, &val, arena);
Serhiy Storchaka43c97312019-09-10 13:02:30 +03009483 Py_DECREF(tmp2);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009484 if (res != 0) goto failed;
Serhiy Storchakacf380602016-10-07 21:51:28 +03009485 if (len != PyList_GET_SIZE(tmp)) {
9486 PyErr_SetString(PyExc_RuntimeError, "arguments field \"kw_defaults\" changed size during iteration");
9487 goto failed;
9488 }
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07009489 asdl_seq_SET(kw_defaults, i, val);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009490 }
Victor Stinner1acc1292013-07-27 00:03:47 +02009491 Py_CLEAR(tmp);
Serhiy Storchakaf320be72018-01-25 10:49:40 +02009492 }
Victor Stinner74419f02020-07-03 11:35:37 +02009493 if (_PyObject_LookupAttr(obj, state->kwarg, &tmp) < 0) {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009494 return 1;
9495 }
Serhiy Storchakaf320be72018-01-25 10:49:40 +02009496 if (tmp == NULL || tmp == Py_None) {
9497 Py_CLEAR(tmp);
9498 kwarg = NULL;
9499 }
9500 else {
Victor Stinneree4b59c2013-07-27 00:01:35 +02009501 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02009502 res = obj2ast_arg(state, tmp, &kwarg, arena);
Victor Stinneree4b59c2013-07-27 00:01:35 +02009503 if (res != 0) goto failed;
Victor Stinnerb3189902013-07-27 00:04:42 +02009504 Py_CLEAR(tmp);
Victor Stinneree4b59c2013-07-27 00:01:35 +02009505 }
Victor Stinner74419f02020-07-03 11:35:37 +02009506 if (_PyObject_LookupAttr(obj, state->defaults, &tmp) < 0) {
Serhiy Storchakaf320be72018-01-25 10:49:40 +02009507 return 1;
9508 }
9509 if (tmp == NULL) {
9510 PyErr_SetString(PyExc_TypeError, "required field \"defaults\" missing from arguments");
9511 return 1;
9512 }
9513 else {
Victor Stinneree4b59c2013-07-27 00:01:35 +02009514 int res;
9515 Py_ssize_t len;
9516 Py_ssize_t i;
Victor Stinneree4b59c2013-07-27 00:01:35 +02009517 if (!PyList_Check(tmp)) {
Dino Viehlandac46eb42019-09-11 10:16:34 -07009518 PyErr_Format(PyExc_TypeError, "arguments field \"defaults\" must be a list, not a %.200s", _PyType_Name(Py_TYPE(tmp)));
Victor Stinneree4b59c2013-07-27 00:01:35 +02009519 goto failed;
9520 }
9521 len = PyList_GET_SIZE(tmp);
Pablo Galindoa5634c42020-09-16 19:42:00 +01009522 defaults = _Py_asdl_expr_seq_new(len, arena);
Victor Stinneree4b59c2013-07-27 00:01:35 +02009523 if (defaults == NULL) goto failed;
9524 for (i = 0; i < len; i++) {
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07009525 expr_ty val;
Serhiy Storchaka43c97312019-09-10 13:02:30 +03009526 PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
9527 Py_INCREF(tmp2);
Victor Stinner74419f02020-07-03 11:35:37 +02009528 res = obj2ast_expr(state, tmp2, &val, arena);
Serhiy Storchaka43c97312019-09-10 13:02:30 +03009529 Py_DECREF(tmp2);
Victor Stinneree4b59c2013-07-27 00:01:35 +02009530 if (res != 0) goto failed;
Serhiy Storchakacf380602016-10-07 21:51:28 +03009531 if (len != PyList_GET_SIZE(tmp)) {
9532 PyErr_SetString(PyExc_RuntimeError, "arguments field \"defaults\" changed size during iteration");
9533 goto failed;
9534 }
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07009535 asdl_seq_SET(defaults, i, val);
Victor Stinneree4b59c2013-07-27 00:01:35 +02009536 }
Victor Stinnerb3189902013-07-27 00:04:42 +02009537 Py_CLEAR(tmp);
Victor Stinneree4b59c2013-07-27 00:01:35 +02009538 }
Victor Stinnerd27f8d22021-04-07 21:34:22 +02009539 *out = _PyAST_arguments(posonlyargs, args, vararg, kwonlyargs, kw_defaults,
9540 kwarg, defaults, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009541 return 0;
9542failed:
9543 Py_XDECREF(tmp);
9544 return 1;
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00009545}
9546
9547int
Victor Stinner5cf47822020-11-02 22:03:28 +01009548obj2ast_arg(struct ast_state *state, PyObject* obj, arg_ty* out, PyArena* arena)
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00009549{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009550 PyObject* tmp = NULL;
9551 identifier arg;
9552 expr_ty annotation;
Guido van Rossumdcfcd142019-01-31 03:40:27 -08009553 string type_comment;
Victor Stinnerc106c682015-11-06 17:01:48 +01009554 int lineno;
9555 int col_offset;
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00009556 int end_lineno;
9557 int end_col_offset;
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00009558
Victor Stinner74419f02020-07-03 11:35:37 +02009559 if (_PyObject_LookupAttr(obj, state->arg, &tmp) < 0) {
Serhiy Storchakaf320be72018-01-25 10:49:40 +02009560 return 1;
9561 }
9562 if (tmp == NULL) {
9563 PyErr_SetString(PyExc_TypeError, "required field \"arg\" missing from arg");
9564 return 1;
9565 }
9566 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009567 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02009568 res = obj2ast_identifier(state, tmp, &arg, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009569 if (res != 0) goto failed;
Victor Stinner1acc1292013-07-27 00:03:47 +02009570 Py_CLEAR(tmp);
Serhiy Storchakaf320be72018-01-25 10:49:40 +02009571 }
Victor Stinner74419f02020-07-03 11:35:37 +02009572 if (_PyObject_LookupAttr(obj, state->annotation, &tmp) < 0) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00009573 return 1;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009574 }
Serhiy Storchakaf320be72018-01-25 10:49:40 +02009575 if (tmp == NULL || tmp == Py_None) {
9576 Py_CLEAR(tmp);
9577 annotation = NULL;
9578 }
9579 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009580 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02009581 res = obj2ast_expr(state, tmp, &annotation, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009582 if (res != 0) goto failed;
Victor Stinner1acc1292013-07-27 00:03:47 +02009583 Py_CLEAR(tmp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009584 }
Victor Stinner74419f02020-07-03 11:35:37 +02009585 if (_PyObject_LookupAttr(obj, state->type_comment, &tmp) < 0) {
Guido van Rossumdcfcd142019-01-31 03:40:27 -08009586 return 1;
9587 }
9588 if (tmp == NULL || tmp == Py_None) {
9589 Py_CLEAR(tmp);
9590 type_comment = NULL;
9591 }
9592 else {
9593 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02009594 res = obj2ast_string(state, tmp, &type_comment, arena);
Guido van Rossumdcfcd142019-01-31 03:40:27 -08009595 if (res != 0) goto failed;
9596 Py_CLEAR(tmp);
9597 }
Victor Stinner74419f02020-07-03 11:35:37 +02009598 if (_PyObject_LookupAttr(obj, state->lineno, &tmp) < 0) {
Serhiy Storchakaf320be72018-01-25 10:49:40 +02009599 return 1;
9600 }
9601 if (tmp == NULL) {
9602 PyErr_SetString(PyExc_TypeError, "required field \"lineno\" missing from arg");
9603 return 1;
9604 }
9605 else {
Victor Stinnerc106c682015-11-06 17:01:48 +01009606 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02009607 res = obj2ast_int(state, tmp, &lineno, arena);
Victor Stinnerc106c682015-11-06 17:01:48 +01009608 if (res != 0) goto failed;
9609 Py_CLEAR(tmp);
Serhiy Storchakaf320be72018-01-25 10:49:40 +02009610 }
Victor Stinner74419f02020-07-03 11:35:37 +02009611 if (_PyObject_LookupAttr(obj, state->col_offset, &tmp) < 0) {
Victor Stinnerc106c682015-11-06 17:01:48 +01009612 return 1;
9613 }
Serhiy Storchakaf320be72018-01-25 10:49:40 +02009614 if (tmp == NULL) {
9615 PyErr_SetString(PyExc_TypeError, "required field \"col_offset\" missing from arg");
9616 return 1;
9617 }
9618 else {
Victor Stinnerc106c682015-11-06 17:01:48 +01009619 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02009620 res = obj2ast_int(state, tmp, &col_offset, arena);
Victor Stinnerc106c682015-11-06 17:01:48 +01009621 if (res != 0) goto failed;
9622 Py_CLEAR(tmp);
Victor Stinnerc106c682015-11-06 17:01:48 +01009623 }
Victor Stinner74419f02020-07-03 11:35:37 +02009624 if (_PyObject_LookupAttr(obj, state->end_lineno, &tmp) < 0) {
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00009625 return 1;
9626 }
9627 if (tmp == NULL || tmp == Py_None) {
9628 Py_CLEAR(tmp);
9629 end_lineno = 0;
9630 }
9631 else {
9632 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02009633 res = obj2ast_int(state, tmp, &end_lineno, arena);
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00009634 if (res != 0) goto failed;
9635 Py_CLEAR(tmp);
9636 }
Victor Stinner74419f02020-07-03 11:35:37 +02009637 if (_PyObject_LookupAttr(obj, state->end_col_offset, &tmp) < 0) {
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00009638 return 1;
9639 }
9640 if (tmp == NULL || tmp == Py_None) {
9641 Py_CLEAR(tmp);
9642 end_col_offset = 0;
9643 }
9644 else {
9645 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02009646 res = obj2ast_int(state, tmp, &end_col_offset, arena);
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00009647 if (res != 0) goto failed;
9648 Py_CLEAR(tmp);
9649 }
Victor Stinnerd27f8d22021-04-07 21:34:22 +02009650 *out = _PyAST_arg(arg, annotation, type_comment, lineno, col_offset,
9651 end_lineno, end_col_offset, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009652 return 0;
9653failed:
9654 Py_XDECREF(tmp);
9655 return 1;
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00009656}
9657
9658int
Victor Stinner5cf47822020-11-02 22:03:28 +01009659obj2ast_keyword(struct ast_state *state, PyObject* obj, keyword_ty* out,
9660 PyArena* arena)
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00009661{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009662 PyObject* tmp = NULL;
9663 identifier arg;
9664 expr_ty value;
Pablo Galindo168660b2020-04-02 00:47:39 +01009665 int lineno;
9666 int col_offset;
9667 int end_lineno;
9668 int end_col_offset;
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00009669
Victor Stinner74419f02020-07-03 11:35:37 +02009670 if (_PyObject_LookupAttr(obj, state->arg, &tmp) < 0) {
Serhiy Storchakaf320be72018-01-25 10:49:40 +02009671 return 1;
9672 }
9673 if (tmp == NULL || tmp == Py_None) {
9674 Py_CLEAR(tmp);
9675 arg = NULL;
9676 }
9677 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009678 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02009679 res = obj2ast_identifier(state, tmp, &arg, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009680 if (res != 0) goto failed;
Victor Stinner1acc1292013-07-27 00:03:47 +02009681 Py_CLEAR(tmp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009682 }
Victor Stinner74419f02020-07-03 11:35:37 +02009683 if (_PyObject_LookupAttr(obj, state->value, &tmp) < 0) {
Serhiy Storchakaf320be72018-01-25 10:49:40 +02009684 return 1;
9685 }
9686 if (tmp == NULL) {
9687 PyErr_SetString(PyExc_TypeError, "required field \"value\" missing from keyword");
9688 return 1;
9689 }
9690 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009691 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02009692 res = obj2ast_expr(state, tmp, &value, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009693 if (res != 0) goto failed;
Victor Stinner1acc1292013-07-27 00:03:47 +02009694 Py_CLEAR(tmp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009695 }
Victor Stinner74419f02020-07-03 11:35:37 +02009696 if (_PyObject_LookupAttr(obj, state->lineno, &tmp) < 0) {
Pablo Galindo168660b2020-04-02 00:47:39 +01009697 return 1;
9698 }
9699 if (tmp == NULL) {
9700 PyErr_SetString(PyExc_TypeError, "required field \"lineno\" missing from keyword");
9701 return 1;
9702 }
9703 else {
9704 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02009705 res = obj2ast_int(state, tmp, &lineno, arena);
Pablo Galindo168660b2020-04-02 00:47:39 +01009706 if (res != 0) goto failed;
9707 Py_CLEAR(tmp);
9708 }
Victor Stinner74419f02020-07-03 11:35:37 +02009709 if (_PyObject_LookupAttr(obj, state->col_offset, &tmp) < 0) {
Pablo Galindo168660b2020-04-02 00:47:39 +01009710 return 1;
9711 }
9712 if (tmp == NULL) {
9713 PyErr_SetString(PyExc_TypeError, "required field \"col_offset\" missing from keyword");
9714 return 1;
9715 }
9716 else {
9717 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02009718 res = obj2ast_int(state, tmp, &col_offset, arena);
Pablo Galindo168660b2020-04-02 00:47:39 +01009719 if (res != 0) goto failed;
9720 Py_CLEAR(tmp);
9721 }
Victor Stinner74419f02020-07-03 11:35:37 +02009722 if (_PyObject_LookupAttr(obj, state->end_lineno, &tmp) < 0) {
Pablo Galindo168660b2020-04-02 00:47:39 +01009723 return 1;
9724 }
9725 if (tmp == NULL || tmp == Py_None) {
9726 Py_CLEAR(tmp);
9727 end_lineno = 0;
9728 }
9729 else {
9730 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02009731 res = obj2ast_int(state, tmp, &end_lineno, arena);
Pablo Galindo168660b2020-04-02 00:47:39 +01009732 if (res != 0) goto failed;
9733 Py_CLEAR(tmp);
9734 }
Victor Stinner74419f02020-07-03 11:35:37 +02009735 if (_PyObject_LookupAttr(obj, state->end_col_offset, &tmp) < 0) {
Pablo Galindo168660b2020-04-02 00:47:39 +01009736 return 1;
9737 }
9738 if (tmp == NULL || tmp == Py_None) {
9739 Py_CLEAR(tmp);
9740 end_col_offset = 0;
9741 }
9742 else {
9743 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02009744 res = obj2ast_int(state, tmp, &end_col_offset, arena);
Pablo Galindo168660b2020-04-02 00:47:39 +01009745 if (res != 0) goto failed;
9746 Py_CLEAR(tmp);
9747 }
Victor Stinnerd27f8d22021-04-07 21:34:22 +02009748 *out = _PyAST_keyword(arg, value, lineno, col_offset, end_lineno,
9749 end_col_offset, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009750 return 0;
9751failed:
9752 Py_XDECREF(tmp);
9753 return 1;
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00009754}
9755
9756int
Victor Stinner5cf47822020-11-02 22:03:28 +01009757obj2ast_alias(struct ast_state *state, PyObject* obj, alias_ty* out, PyArena*
Victor Stinner74419f02020-07-03 11:35:37 +02009758 arena)
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00009759{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009760 PyObject* tmp = NULL;
9761 identifier name;
9762 identifier asname;
Matthew Suozzo75a06f02021-04-10 16:56:28 -04009763 int lineno;
9764 int col_offset;
9765 int end_lineno;
9766 int end_col_offset;
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00009767
Victor Stinner74419f02020-07-03 11:35:37 +02009768 if (_PyObject_LookupAttr(obj, state->name, &tmp) < 0) {
Serhiy Storchakaf320be72018-01-25 10:49:40 +02009769 return 1;
9770 }
9771 if (tmp == NULL) {
9772 PyErr_SetString(PyExc_TypeError, "required field \"name\" missing from alias");
9773 return 1;
9774 }
9775 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009776 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02009777 res = obj2ast_identifier(state, tmp, &name, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009778 if (res != 0) goto failed;
Victor Stinner1acc1292013-07-27 00:03:47 +02009779 Py_CLEAR(tmp);
Serhiy Storchakaf320be72018-01-25 10:49:40 +02009780 }
Victor Stinner74419f02020-07-03 11:35:37 +02009781 if (_PyObject_LookupAttr(obj, state->asname, &tmp) < 0) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00009782 return 1;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009783 }
Serhiy Storchakaf320be72018-01-25 10:49:40 +02009784 if (tmp == NULL || tmp == Py_None) {
9785 Py_CLEAR(tmp);
9786 asname = NULL;
9787 }
9788 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009789 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02009790 res = obj2ast_identifier(state, tmp, &asname, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009791 if (res != 0) goto failed;
Victor Stinner1acc1292013-07-27 00:03:47 +02009792 Py_CLEAR(tmp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009793 }
Matthew Suozzo75a06f02021-04-10 16:56:28 -04009794 if (_PyObject_LookupAttr(obj, state->lineno, &tmp) < 0) {
9795 return 1;
9796 }
9797 if (tmp == NULL) {
9798 PyErr_SetString(PyExc_TypeError, "required field \"lineno\" missing from alias");
9799 return 1;
9800 }
9801 else {
9802 int res;
9803 res = obj2ast_int(state, tmp, &lineno, arena);
9804 if (res != 0) goto failed;
9805 Py_CLEAR(tmp);
9806 }
9807 if (_PyObject_LookupAttr(obj, state->col_offset, &tmp) < 0) {
9808 return 1;
9809 }
9810 if (tmp == NULL) {
9811 PyErr_SetString(PyExc_TypeError, "required field \"col_offset\" missing from alias");
9812 return 1;
9813 }
9814 else {
9815 int res;
9816 res = obj2ast_int(state, tmp, &col_offset, arena);
9817 if (res != 0) goto failed;
9818 Py_CLEAR(tmp);
9819 }
9820 if (_PyObject_LookupAttr(obj, state->end_lineno, &tmp) < 0) {
9821 return 1;
9822 }
9823 if (tmp == NULL || tmp == Py_None) {
9824 Py_CLEAR(tmp);
9825 end_lineno = 0;
9826 }
9827 else {
9828 int res;
9829 res = obj2ast_int(state, tmp, &end_lineno, arena);
9830 if (res != 0) goto failed;
9831 Py_CLEAR(tmp);
9832 }
9833 if (_PyObject_LookupAttr(obj, state->end_col_offset, &tmp) < 0) {
9834 return 1;
9835 }
9836 if (tmp == NULL || tmp == Py_None) {
9837 Py_CLEAR(tmp);
9838 end_col_offset = 0;
9839 }
9840 else {
9841 int res;
9842 res = obj2ast_int(state, tmp, &end_col_offset, arena);
9843 if (res != 0) goto failed;
9844 Py_CLEAR(tmp);
9845 }
9846 *out = _PyAST_alias(name, asname, lineno, col_offset, end_lineno,
9847 end_col_offset, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009848 return 0;
9849failed:
9850 Py_XDECREF(tmp);
9851 return 1;
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00009852}
9853
Benjamin Petersonbf1bbc12011-05-27 13:58:08 -05009854int
Victor Stinner5cf47822020-11-02 22:03:28 +01009855obj2ast_withitem(struct ast_state *state, PyObject* obj, withitem_ty* out,
Victor Stinner74419f02020-07-03 11:35:37 +02009856 PyArena* arena)
Benjamin Petersonbf1bbc12011-05-27 13:58:08 -05009857{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009858 PyObject* tmp = NULL;
9859 expr_ty context_expr;
9860 expr_ty optional_vars;
Benjamin Petersonbf1bbc12011-05-27 13:58:08 -05009861
Victor Stinner74419f02020-07-03 11:35:37 +02009862 if (_PyObject_LookupAttr(obj, state->context_expr, &tmp) < 0) {
Serhiy Storchakaf320be72018-01-25 10:49:40 +02009863 return 1;
9864 }
9865 if (tmp == NULL) {
9866 PyErr_SetString(PyExc_TypeError, "required field \"context_expr\" missing from withitem");
9867 return 1;
9868 }
9869 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009870 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02009871 res = obj2ast_expr(state, tmp, &context_expr, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009872 if (res != 0) goto failed;
Victor Stinner1acc1292013-07-27 00:03:47 +02009873 Py_CLEAR(tmp);
Serhiy Storchakaf320be72018-01-25 10:49:40 +02009874 }
Victor Stinner74419f02020-07-03 11:35:37 +02009875 if (_PyObject_LookupAttr(obj, state->optional_vars, &tmp) < 0) {
Benjamin Petersonbf1bbc12011-05-27 13:58:08 -05009876 return 1;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009877 }
Serhiy Storchakaf320be72018-01-25 10:49:40 +02009878 if (tmp == NULL || tmp == Py_None) {
9879 Py_CLEAR(tmp);
9880 optional_vars = NULL;
9881 }
9882 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009883 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02009884 res = obj2ast_expr(state, tmp, &optional_vars, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009885 if (res != 0) goto failed;
Victor Stinner1acc1292013-07-27 00:03:47 +02009886 Py_CLEAR(tmp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009887 }
Victor Stinnerd27f8d22021-04-07 21:34:22 +02009888 *out = _PyAST_withitem(context_expr, optional_vars, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009889 return 0;
9890failed:
9891 Py_XDECREF(tmp);
9892 return 1;
Benjamin Petersonbf1bbc12011-05-27 13:58:08 -05009893}
9894
Guido van Rossumdcfcd142019-01-31 03:40:27 -08009895int
Brandt Bucher145bf262021-02-26 14:51:55 -08009896obj2ast_match_case(struct ast_state *state, PyObject* obj, match_case_ty* out,
9897 PyArena* arena)
9898{
9899 PyObject* tmp = NULL;
9900 expr_ty pattern;
9901 expr_ty guard;
9902 asdl_stmt_seq* body;
9903
9904 if (_PyObject_LookupAttr(obj, state->pattern, &tmp) < 0) {
9905 return 1;
9906 }
9907 if (tmp == NULL) {
9908 PyErr_SetString(PyExc_TypeError, "required field \"pattern\" missing from match_case");
9909 return 1;
9910 }
9911 else {
9912 int res;
9913 res = obj2ast_expr(state, tmp, &pattern, arena);
9914 if (res != 0) goto failed;
9915 Py_CLEAR(tmp);
9916 }
9917 if (_PyObject_LookupAttr(obj, state->guard, &tmp) < 0) {
9918 return 1;
9919 }
9920 if (tmp == NULL || tmp == Py_None) {
9921 Py_CLEAR(tmp);
9922 guard = NULL;
9923 }
9924 else {
9925 int res;
9926 res = obj2ast_expr(state, tmp, &guard, arena);
9927 if (res != 0) goto failed;
9928 Py_CLEAR(tmp);
9929 }
9930 if (_PyObject_LookupAttr(obj, state->body, &tmp) < 0) {
9931 return 1;
9932 }
9933 if (tmp == NULL) {
9934 PyErr_SetString(PyExc_TypeError, "required field \"body\" missing from match_case");
9935 return 1;
9936 }
9937 else {
9938 int res;
9939 Py_ssize_t len;
9940 Py_ssize_t i;
9941 if (!PyList_Check(tmp)) {
9942 PyErr_Format(PyExc_TypeError, "match_case field \"body\" must be a list, not a %.200s", _PyType_Name(Py_TYPE(tmp)));
9943 goto failed;
9944 }
9945 len = PyList_GET_SIZE(tmp);
9946 body = _Py_asdl_stmt_seq_new(len, arena);
9947 if (body == NULL) goto failed;
9948 for (i = 0; i < len; i++) {
9949 stmt_ty val;
9950 PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
9951 Py_INCREF(tmp2);
9952 res = obj2ast_stmt(state, tmp2, &val, arena);
9953 Py_DECREF(tmp2);
9954 if (res != 0) goto failed;
9955 if (len != PyList_GET_SIZE(tmp)) {
9956 PyErr_SetString(PyExc_RuntimeError, "match_case field \"body\" changed size during iteration");
9957 goto failed;
9958 }
9959 asdl_seq_SET(body, i, val);
9960 }
9961 Py_CLEAR(tmp);
9962 }
Victor Stinnerd27f8d22021-04-07 21:34:22 +02009963 *out = _PyAST_match_case(pattern, guard, body, arena);
Brandt Bucher145bf262021-02-26 14:51:55 -08009964 return 0;
9965failed:
9966 Py_XDECREF(tmp);
9967 return 1;
9968}
9969
9970int
Victor Stinner5cf47822020-11-02 22:03:28 +01009971obj2ast_type_ignore(struct ast_state *state, PyObject* obj, type_ignore_ty*
9972 out, PyArena* arena)
Guido van Rossumdcfcd142019-01-31 03:40:27 -08009973{
9974 int isinstance;
9975
9976 PyObject *tmp = NULL;
Dino Viehlandac46eb42019-09-11 10:16:34 -07009977 PyObject *tp;
Guido van Rossumdcfcd142019-01-31 03:40:27 -08009978
9979 if (obj == Py_None) {
9980 *out = NULL;
9981 return 0;
9982 }
Victor Stinner74419f02020-07-03 11:35:37 +02009983 tp = state->TypeIgnore_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07009984 isinstance = PyObject_IsInstance(obj, tp);
Guido van Rossumdcfcd142019-01-31 03:40:27 -08009985 if (isinstance == -1) {
9986 return 1;
9987 }
9988 if (isinstance) {
9989 int lineno;
Michael J. Sullivan933e1502019-05-22 07:54:20 -07009990 string tag;
Guido van Rossumdcfcd142019-01-31 03:40:27 -08009991
Victor Stinner74419f02020-07-03 11:35:37 +02009992 if (_PyObject_LookupAttr(obj, state->lineno, &tmp) < 0) {
Guido van Rossumdcfcd142019-01-31 03:40:27 -08009993 return 1;
9994 }
9995 if (tmp == NULL) {
9996 PyErr_SetString(PyExc_TypeError, "required field \"lineno\" missing from TypeIgnore");
9997 return 1;
9998 }
9999 else {
10000 int res;
Victor Stinner74419f02020-07-03 11:35:37 +020010001 res = obj2ast_int(state, tmp, &lineno, arena);
Guido van Rossumdcfcd142019-01-31 03:40:27 -080010002 if (res != 0) goto failed;
10003 Py_CLEAR(tmp);
10004 }
Victor Stinner74419f02020-07-03 11:35:37 +020010005 if (_PyObject_LookupAttr(obj, state->tag, &tmp) < 0) {
Michael J. Sullivan933e1502019-05-22 07:54:20 -070010006 return 1;
10007 }
10008 if (tmp == NULL) {
10009 PyErr_SetString(PyExc_TypeError, "required field \"tag\" missing from TypeIgnore");
10010 return 1;
10011 }
10012 else {
10013 int res;
Victor Stinner74419f02020-07-03 11:35:37 +020010014 res = obj2ast_string(state, tmp, &tag, arena);
Michael J. Sullivan933e1502019-05-22 07:54:20 -070010015 if (res != 0) goto failed;
10016 Py_CLEAR(tmp);
10017 }
Victor Stinnerd27f8d22021-04-07 21:34:22 +020010018 *out = _PyAST_TypeIgnore(lineno, tag, arena);
Guido van Rossumdcfcd142019-01-31 03:40:27 -080010019 if (*out == NULL) goto failed;
10020 return 0;
10021 }
10022
10023 PyErr_Format(PyExc_TypeError, "expected some sort of type_ignore, but got %R", obj);
10024 failed:
10025 Py_XDECREF(tmp);
10026 return 1;
10027}
10028
Martin v. Löwis618dc5e2008-03-30 20:03:44 +000010029
Victor Stinnerb1cc6ba2020-07-03 20:01:46 +020010030static int
10031astmodule_exec(PyObject *m)
Martin v. Löwis577b5b92006-02-27 15:23:19 +000010032{
Victor Stinner5cf47822020-11-02 22:03:28 +010010033 struct ast_state *state = get_ast_state();
10034 if (state == NULL) {
Victor Stinnerb1cc6ba2020-07-03 20:01:46 +020010035 return -1;
Victor Stinner91e1bc12020-07-03 14:15:53 +020010036 }
Victor Stinner18ce7f12020-11-04 16:37:07 +010010037 if (PyModule_AddObjectRef(m, "AST", state->AST_type) < 0) {
Victor Stinnerb1cc6ba2020-07-03 20:01:46 +020010038 return -1;
Brandt Bucherd2f96672020-02-06 06:45:46 -080010039 }
Brandt Bucherd2f96672020-02-06 06:45:46 -080010040 if (PyModule_AddIntMacro(m, PyCF_ALLOW_TOP_LEVEL_AWAIT) < 0) {
Victor Stinnerb1cc6ba2020-07-03 20:01:46 +020010041 return -1;
Brandt Bucherd2f96672020-02-06 06:45:46 -080010042 }
10043 if (PyModule_AddIntMacro(m, PyCF_ONLY_AST) < 0) {
Victor Stinnerb1cc6ba2020-07-03 20:01:46 +020010044 return -1;
Brandt Bucherd2f96672020-02-06 06:45:46 -080010045 }
10046 if (PyModule_AddIntMacro(m, PyCF_TYPE_COMMENTS) < 0) {
Victor Stinnerb1cc6ba2020-07-03 20:01:46 +020010047 return -1;
Brandt Bucherd2f96672020-02-06 06:45:46 -080010048 }
Victor Stinner18ce7f12020-11-04 16:37:07 +010010049 if (PyModule_AddObjectRef(m, "mod", state->mod_type) < 0) {
Victor Stinnerb1cc6ba2020-07-03 20:01:46 +020010050 return -1;
Brandt Bucherd2f96672020-02-06 06:45:46 -080010051 }
Victor Stinner18ce7f12020-11-04 16:37:07 +010010052 if (PyModule_AddObjectRef(m, "Module", state->Module_type) < 0) {
Victor Stinnerb1cc6ba2020-07-03 20:01:46 +020010053 return -1;
Brandt Bucherd2f96672020-02-06 06:45:46 -080010054 }
Victor Stinner18ce7f12020-11-04 16:37:07 +010010055 if (PyModule_AddObjectRef(m, "Interactive", state->Interactive_type) < 0) {
Victor Stinnerb1cc6ba2020-07-03 20:01:46 +020010056 return -1;
Brandt Bucherd2f96672020-02-06 06:45:46 -080010057 }
Victor Stinner18ce7f12020-11-04 16:37:07 +010010058 if (PyModule_AddObjectRef(m, "Expression", state->Expression_type) < 0) {
Victor Stinnerb1cc6ba2020-07-03 20:01:46 +020010059 return -1;
Brandt Bucherd2f96672020-02-06 06:45:46 -080010060 }
Victor Stinner18ce7f12020-11-04 16:37:07 +010010061 if (PyModule_AddObjectRef(m, "FunctionType", state->FunctionType_type) < 0)
10062 {
Victor Stinnerb1cc6ba2020-07-03 20:01:46 +020010063 return -1;
Brandt Bucherd2f96672020-02-06 06:45:46 -080010064 }
Victor Stinner18ce7f12020-11-04 16:37:07 +010010065 if (PyModule_AddObjectRef(m, "stmt", state->stmt_type) < 0) {
Victor Stinnerb1cc6ba2020-07-03 20:01:46 +020010066 return -1;
Brandt Bucherd2f96672020-02-06 06:45:46 -080010067 }
Victor Stinner18ce7f12020-11-04 16:37:07 +010010068 if (PyModule_AddObjectRef(m, "FunctionDef", state->FunctionDef_type) < 0) {
Victor Stinnerb1cc6ba2020-07-03 20:01:46 +020010069 return -1;
Brandt Bucherd2f96672020-02-06 06:45:46 -080010070 }
Victor Stinner18ce7f12020-11-04 16:37:07 +010010071 if (PyModule_AddObjectRef(m, "AsyncFunctionDef",
10072 state->AsyncFunctionDef_type) < 0) {
10073 return -1;
10074 }
10075 if (PyModule_AddObjectRef(m, "ClassDef", state->ClassDef_type) < 0) {
10076 return -1;
10077 }
10078 if (PyModule_AddObjectRef(m, "Return", state->Return_type) < 0) {
10079 return -1;
10080 }
10081 if (PyModule_AddObjectRef(m, "Delete", state->Delete_type) < 0) {
10082 return -1;
10083 }
10084 if (PyModule_AddObjectRef(m, "Assign", state->Assign_type) < 0) {
10085 return -1;
10086 }
10087 if (PyModule_AddObjectRef(m, "AugAssign", state->AugAssign_type) < 0) {
10088 return -1;
10089 }
10090 if (PyModule_AddObjectRef(m, "AnnAssign", state->AnnAssign_type) < 0) {
10091 return -1;
10092 }
10093 if (PyModule_AddObjectRef(m, "For", state->For_type) < 0) {
10094 return -1;
10095 }
10096 if (PyModule_AddObjectRef(m, "AsyncFor", state->AsyncFor_type) < 0) {
10097 return -1;
10098 }
10099 if (PyModule_AddObjectRef(m, "While", state->While_type) < 0) {
10100 return -1;
10101 }
10102 if (PyModule_AddObjectRef(m, "If", state->If_type) < 0) {
10103 return -1;
10104 }
10105 if (PyModule_AddObjectRef(m, "With", state->With_type) < 0) {
10106 return -1;
10107 }
10108 if (PyModule_AddObjectRef(m, "AsyncWith", state->AsyncWith_type) < 0) {
10109 return -1;
10110 }
Brandt Bucher145bf262021-02-26 14:51:55 -080010111 if (PyModule_AddObjectRef(m, "Match", state->Match_type) < 0) {
10112 return -1;
10113 }
Victor Stinner18ce7f12020-11-04 16:37:07 +010010114 if (PyModule_AddObjectRef(m, "Raise", state->Raise_type) < 0) {
10115 return -1;
10116 }
10117 if (PyModule_AddObjectRef(m, "Try", state->Try_type) < 0) {
10118 return -1;
10119 }
10120 if (PyModule_AddObjectRef(m, "Assert", state->Assert_type) < 0) {
10121 return -1;
10122 }
10123 if (PyModule_AddObjectRef(m, "Import", state->Import_type) < 0) {
10124 return -1;
10125 }
10126 if (PyModule_AddObjectRef(m, "ImportFrom", state->ImportFrom_type) < 0) {
10127 return -1;
10128 }
10129 if (PyModule_AddObjectRef(m, "Global", state->Global_type) < 0) {
10130 return -1;
10131 }
10132 if (PyModule_AddObjectRef(m, "Nonlocal", state->Nonlocal_type) < 0) {
10133 return -1;
10134 }
10135 if (PyModule_AddObjectRef(m, "Expr", state->Expr_type) < 0) {
10136 return -1;
10137 }
10138 if (PyModule_AddObjectRef(m, "Pass", state->Pass_type) < 0) {
10139 return -1;
10140 }
10141 if (PyModule_AddObjectRef(m, "Break", state->Break_type) < 0) {
10142 return -1;
10143 }
10144 if (PyModule_AddObjectRef(m, "Continue", state->Continue_type) < 0) {
10145 return -1;
10146 }
10147 if (PyModule_AddObjectRef(m, "expr", state->expr_type) < 0) {
10148 return -1;
10149 }
10150 if (PyModule_AddObjectRef(m, "BoolOp", state->BoolOp_type) < 0) {
10151 return -1;
10152 }
10153 if (PyModule_AddObjectRef(m, "NamedExpr", state->NamedExpr_type) < 0) {
10154 return -1;
10155 }
10156 if (PyModule_AddObjectRef(m, "BinOp", state->BinOp_type) < 0) {
10157 return -1;
10158 }
10159 if (PyModule_AddObjectRef(m, "UnaryOp", state->UnaryOp_type) < 0) {
10160 return -1;
10161 }
10162 if (PyModule_AddObjectRef(m, "Lambda", state->Lambda_type) < 0) {
10163 return -1;
10164 }
10165 if (PyModule_AddObjectRef(m, "IfExp", state->IfExp_type) < 0) {
10166 return -1;
10167 }
10168 if (PyModule_AddObjectRef(m, "Dict", state->Dict_type) < 0) {
10169 return -1;
10170 }
10171 if (PyModule_AddObjectRef(m, "Set", state->Set_type) < 0) {
10172 return -1;
10173 }
10174 if (PyModule_AddObjectRef(m, "ListComp", state->ListComp_type) < 0) {
10175 return -1;
10176 }
10177 if (PyModule_AddObjectRef(m, "SetComp", state->SetComp_type) < 0) {
10178 return -1;
10179 }
10180 if (PyModule_AddObjectRef(m, "DictComp", state->DictComp_type) < 0) {
10181 return -1;
10182 }
10183 if (PyModule_AddObjectRef(m, "GeneratorExp", state->GeneratorExp_type) < 0)
10184 {
10185 return -1;
10186 }
10187 if (PyModule_AddObjectRef(m, "Await", state->Await_type) < 0) {
10188 return -1;
10189 }
10190 if (PyModule_AddObjectRef(m, "Yield", state->Yield_type) < 0) {
10191 return -1;
10192 }
10193 if (PyModule_AddObjectRef(m, "YieldFrom", state->YieldFrom_type) < 0) {
10194 return -1;
10195 }
10196 if (PyModule_AddObjectRef(m, "Compare", state->Compare_type) < 0) {
10197 return -1;
10198 }
10199 if (PyModule_AddObjectRef(m, "Call", state->Call_type) < 0) {
10200 return -1;
10201 }
10202 if (PyModule_AddObjectRef(m, "FormattedValue", state->FormattedValue_type)
Brandt Bucherd2f96672020-02-06 06:45:46 -080010203 < 0) {
Victor Stinnerb1cc6ba2020-07-03 20:01:46 +020010204 return -1;
Brandt Bucherd2f96672020-02-06 06:45:46 -080010205 }
Victor Stinner18ce7f12020-11-04 16:37:07 +010010206 if (PyModule_AddObjectRef(m, "JoinedStr", state->JoinedStr_type) < 0) {
Victor Stinnerb1cc6ba2020-07-03 20:01:46 +020010207 return -1;
Victor Stinner74419f02020-07-03 11:35:37 +020010208 }
Victor Stinner18ce7f12020-11-04 16:37:07 +010010209 if (PyModule_AddObjectRef(m, "Constant", state->Constant_type) < 0) {
Victor Stinnerb1cc6ba2020-07-03 20:01:46 +020010210 return -1;
Victor Stinner74419f02020-07-03 11:35:37 +020010211 }
Victor Stinner18ce7f12020-11-04 16:37:07 +010010212 if (PyModule_AddObjectRef(m, "Attribute", state->Attribute_type) < 0) {
Victor Stinnerb1cc6ba2020-07-03 20:01:46 +020010213 return -1;
Victor Stinner74419f02020-07-03 11:35:37 +020010214 }
Victor Stinner18ce7f12020-11-04 16:37:07 +010010215 if (PyModule_AddObjectRef(m, "Subscript", state->Subscript_type) < 0) {
Victor Stinnerb1cc6ba2020-07-03 20:01:46 +020010216 return -1;
Victor Stinner74419f02020-07-03 11:35:37 +020010217 }
Victor Stinner18ce7f12020-11-04 16:37:07 +010010218 if (PyModule_AddObjectRef(m, "Starred", state->Starred_type) < 0) {
Victor Stinnerb1cc6ba2020-07-03 20:01:46 +020010219 return -1;
Victor Stinner74419f02020-07-03 11:35:37 +020010220 }
Victor Stinner18ce7f12020-11-04 16:37:07 +010010221 if (PyModule_AddObjectRef(m, "Name", state->Name_type) < 0) {
Victor Stinnerb1cc6ba2020-07-03 20:01:46 +020010222 return -1;
Victor Stinner74419f02020-07-03 11:35:37 +020010223 }
Victor Stinner18ce7f12020-11-04 16:37:07 +010010224 if (PyModule_AddObjectRef(m, "List", state->List_type) < 0) {
Victor Stinnerb1cc6ba2020-07-03 20:01:46 +020010225 return -1;
Victor Stinner74419f02020-07-03 11:35:37 +020010226 }
Victor Stinner18ce7f12020-11-04 16:37:07 +010010227 if (PyModule_AddObjectRef(m, "Tuple", state->Tuple_type) < 0) {
Victor Stinnerb1cc6ba2020-07-03 20:01:46 +020010228 return -1;
Victor Stinner74419f02020-07-03 11:35:37 +020010229 }
Victor Stinner18ce7f12020-11-04 16:37:07 +010010230 if (PyModule_AddObjectRef(m, "Slice", state->Slice_type) < 0) {
Victor Stinnerb1cc6ba2020-07-03 20:01:46 +020010231 return -1;
Victor Stinner74419f02020-07-03 11:35:37 +020010232 }
Brandt Bucher145bf262021-02-26 14:51:55 -080010233 if (PyModule_AddObjectRef(m, "MatchAs", state->MatchAs_type) < 0) {
10234 return -1;
10235 }
10236 if (PyModule_AddObjectRef(m, "MatchOr", state->MatchOr_type) < 0) {
10237 return -1;
10238 }
Victor Stinner18ce7f12020-11-04 16:37:07 +010010239 if (PyModule_AddObjectRef(m, "expr_context", state->expr_context_type) < 0)
10240 {
Victor Stinnerb1cc6ba2020-07-03 20:01:46 +020010241 return -1;
Victor Stinner74419f02020-07-03 11:35:37 +020010242 }
Victor Stinner18ce7f12020-11-04 16:37:07 +010010243 if (PyModule_AddObjectRef(m, "Load", state->Load_type) < 0) {
Victor Stinnerb1cc6ba2020-07-03 20:01:46 +020010244 return -1;
Victor Stinner74419f02020-07-03 11:35:37 +020010245 }
Victor Stinner18ce7f12020-11-04 16:37:07 +010010246 if (PyModule_AddObjectRef(m, "Store", state->Store_type) < 0) {
Victor Stinnerb1cc6ba2020-07-03 20:01:46 +020010247 return -1;
Victor Stinner74419f02020-07-03 11:35:37 +020010248 }
Victor Stinner18ce7f12020-11-04 16:37:07 +010010249 if (PyModule_AddObjectRef(m, "Del", state->Del_type) < 0) {
Victor Stinnerb1cc6ba2020-07-03 20:01:46 +020010250 return -1;
Victor Stinner74419f02020-07-03 11:35:37 +020010251 }
Victor Stinner18ce7f12020-11-04 16:37:07 +010010252 if (PyModule_AddObjectRef(m, "boolop", state->boolop_type) < 0) {
Victor Stinnerb1cc6ba2020-07-03 20:01:46 +020010253 return -1;
Victor Stinner74419f02020-07-03 11:35:37 +020010254 }
Victor Stinner18ce7f12020-11-04 16:37:07 +010010255 if (PyModule_AddObjectRef(m, "And", state->And_type) < 0) {
Victor Stinnerb1cc6ba2020-07-03 20:01:46 +020010256 return -1;
Victor Stinner74419f02020-07-03 11:35:37 +020010257 }
Victor Stinner18ce7f12020-11-04 16:37:07 +010010258 if (PyModule_AddObjectRef(m, "Or", state->Or_type) < 0) {
Victor Stinnerb1cc6ba2020-07-03 20:01:46 +020010259 return -1;
Victor Stinner74419f02020-07-03 11:35:37 +020010260 }
Victor Stinner18ce7f12020-11-04 16:37:07 +010010261 if (PyModule_AddObjectRef(m, "operator", state->operator_type) < 0) {
Victor Stinnerb1cc6ba2020-07-03 20:01:46 +020010262 return -1;
Victor Stinner74419f02020-07-03 11:35:37 +020010263 }
Victor Stinner18ce7f12020-11-04 16:37:07 +010010264 if (PyModule_AddObjectRef(m, "Add", state->Add_type) < 0) {
Victor Stinnerb1cc6ba2020-07-03 20:01:46 +020010265 return -1;
Victor Stinner74419f02020-07-03 11:35:37 +020010266 }
Victor Stinner18ce7f12020-11-04 16:37:07 +010010267 if (PyModule_AddObjectRef(m, "Sub", state->Sub_type) < 0) {
Victor Stinnerb1cc6ba2020-07-03 20:01:46 +020010268 return -1;
Victor Stinner74419f02020-07-03 11:35:37 +020010269 }
Victor Stinner18ce7f12020-11-04 16:37:07 +010010270 if (PyModule_AddObjectRef(m, "Mult", state->Mult_type) < 0) {
Victor Stinnerb1cc6ba2020-07-03 20:01:46 +020010271 return -1;
Victor Stinner74419f02020-07-03 11:35:37 +020010272 }
Victor Stinner18ce7f12020-11-04 16:37:07 +010010273 if (PyModule_AddObjectRef(m, "MatMult", state->MatMult_type) < 0) {
Victor Stinnerb1cc6ba2020-07-03 20:01:46 +020010274 return -1;
Victor Stinner74419f02020-07-03 11:35:37 +020010275 }
Victor Stinner18ce7f12020-11-04 16:37:07 +010010276 if (PyModule_AddObjectRef(m, "Div", state->Div_type) < 0) {
Victor Stinnerb1cc6ba2020-07-03 20:01:46 +020010277 return -1;
Victor Stinner74419f02020-07-03 11:35:37 +020010278 }
Victor Stinner18ce7f12020-11-04 16:37:07 +010010279 if (PyModule_AddObjectRef(m, "Mod", state->Mod_type) < 0) {
Victor Stinnerb1cc6ba2020-07-03 20:01:46 +020010280 return -1;
Victor Stinner74419f02020-07-03 11:35:37 +020010281 }
Victor Stinner18ce7f12020-11-04 16:37:07 +010010282 if (PyModule_AddObjectRef(m, "Pow", state->Pow_type) < 0) {
Victor Stinnerb1cc6ba2020-07-03 20:01:46 +020010283 return -1;
Victor Stinner74419f02020-07-03 11:35:37 +020010284 }
Victor Stinner18ce7f12020-11-04 16:37:07 +010010285 if (PyModule_AddObjectRef(m, "LShift", state->LShift_type) < 0) {
Victor Stinnerb1cc6ba2020-07-03 20:01:46 +020010286 return -1;
Victor Stinner74419f02020-07-03 11:35:37 +020010287 }
Victor Stinner18ce7f12020-11-04 16:37:07 +010010288 if (PyModule_AddObjectRef(m, "RShift", state->RShift_type) < 0) {
Victor Stinnerb1cc6ba2020-07-03 20:01:46 +020010289 return -1;
Victor Stinner74419f02020-07-03 11:35:37 +020010290 }
Victor Stinner18ce7f12020-11-04 16:37:07 +010010291 if (PyModule_AddObjectRef(m, "BitOr", state->BitOr_type) < 0) {
Victor Stinnerb1cc6ba2020-07-03 20:01:46 +020010292 return -1;
Victor Stinner74419f02020-07-03 11:35:37 +020010293 }
Victor Stinner18ce7f12020-11-04 16:37:07 +010010294 if (PyModule_AddObjectRef(m, "BitXor", state->BitXor_type) < 0) {
Victor Stinnerb1cc6ba2020-07-03 20:01:46 +020010295 return -1;
Victor Stinner74419f02020-07-03 11:35:37 +020010296 }
Victor Stinner18ce7f12020-11-04 16:37:07 +010010297 if (PyModule_AddObjectRef(m, "BitAnd", state->BitAnd_type) < 0) {
Victor Stinnerb1cc6ba2020-07-03 20:01:46 +020010298 return -1;
Victor Stinner74419f02020-07-03 11:35:37 +020010299 }
Victor Stinner18ce7f12020-11-04 16:37:07 +010010300 if (PyModule_AddObjectRef(m, "FloorDiv", state->FloorDiv_type) < 0) {
Victor Stinnerb1cc6ba2020-07-03 20:01:46 +020010301 return -1;
Victor Stinner74419f02020-07-03 11:35:37 +020010302 }
Victor Stinner18ce7f12020-11-04 16:37:07 +010010303 if (PyModule_AddObjectRef(m, "unaryop", state->unaryop_type) < 0) {
Victor Stinnerb1cc6ba2020-07-03 20:01:46 +020010304 return -1;
Victor Stinner74419f02020-07-03 11:35:37 +020010305 }
Victor Stinner18ce7f12020-11-04 16:37:07 +010010306 if (PyModule_AddObjectRef(m, "Invert", state->Invert_type) < 0) {
Victor Stinnerb1cc6ba2020-07-03 20:01:46 +020010307 return -1;
Victor Stinner74419f02020-07-03 11:35:37 +020010308 }
Victor Stinner18ce7f12020-11-04 16:37:07 +010010309 if (PyModule_AddObjectRef(m, "Not", state->Not_type) < 0) {
Victor Stinnerb1cc6ba2020-07-03 20:01:46 +020010310 return -1;
Victor Stinner74419f02020-07-03 11:35:37 +020010311 }
Victor Stinner18ce7f12020-11-04 16:37:07 +010010312 if (PyModule_AddObjectRef(m, "UAdd", state->UAdd_type) < 0) {
Victor Stinnerb1cc6ba2020-07-03 20:01:46 +020010313 return -1;
Victor Stinner74419f02020-07-03 11:35:37 +020010314 }
Victor Stinner18ce7f12020-11-04 16:37:07 +010010315 if (PyModule_AddObjectRef(m, "USub", state->USub_type) < 0) {
Victor Stinnerb1cc6ba2020-07-03 20:01:46 +020010316 return -1;
Victor Stinner74419f02020-07-03 11:35:37 +020010317 }
Victor Stinner18ce7f12020-11-04 16:37:07 +010010318 if (PyModule_AddObjectRef(m, "cmpop", state->cmpop_type) < 0) {
Victor Stinnerb1cc6ba2020-07-03 20:01:46 +020010319 return -1;
Victor Stinner74419f02020-07-03 11:35:37 +020010320 }
Victor Stinner18ce7f12020-11-04 16:37:07 +010010321 if (PyModule_AddObjectRef(m, "Eq", state->Eq_type) < 0) {
Victor Stinnerb1cc6ba2020-07-03 20:01:46 +020010322 return -1;
Victor Stinner74419f02020-07-03 11:35:37 +020010323 }
Victor Stinner18ce7f12020-11-04 16:37:07 +010010324 if (PyModule_AddObjectRef(m, "NotEq", state->NotEq_type) < 0) {
Victor Stinnerb1cc6ba2020-07-03 20:01:46 +020010325 return -1;
Victor Stinner74419f02020-07-03 11:35:37 +020010326 }
Victor Stinner18ce7f12020-11-04 16:37:07 +010010327 if (PyModule_AddObjectRef(m, "Lt", state->Lt_type) < 0) {
Victor Stinnerb1cc6ba2020-07-03 20:01:46 +020010328 return -1;
Victor Stinner74419f02020-07-03 11:35:37 +020010329 }
Victor Stinner18ce7f12020-11-04 16:37:07 +010010330 if (PyModule_AddObjectRef(m, "LtE", state->LtE_type) < 0) {
Victor Stinnerb1cc6ba2020-07-03 20:01:46 +020010331 return -1;
Victor Stinner74419f02020-07-03 11:35:37 +020010332 }
Victor Stinner18ce7f12020-11-04 16:37:07 +010010333 if (PyModule_AddObjectRef(m, "Gt", state->Gt_type) < 0) {
Victor Stinnerb1cc6ba2020-07-03 20:01:46 +020010334 return -1;
Victor Stinner74419f02020-07-03 11:35:37 +020010335 }
Victor Stinner18ce7f12020-11-04 16:37:07 +010010336 if (PyModule_AddObjectRef(m, "GtE", state->GtE_type) < 0) {
10337 return -1;
10338 }
10339 if (PyModule_AddObjectRef(m, "Is", state->Is_type) < 0) {
10340 return -1;
10341 }
10342 if (PyModule_AddObjectRef(m, "IsNot", state->IsNot_type) < 0) {
10343 return -1;
10344 }
10345 if (PyModule_AddObjectRef(m, "In", state->In_type) < 0) {
10346 return -1;
10347 }
10348 if (PyModule_AddObjectRef(m, "NotIn", state->NotIn_type) < 0) {
10349 return -1;
10350 }
10351 if (PyModule_AddObjectRef(m, "comprehension", state->comprehension_type) <
Brandt Bucherd2f96672020-02-06 06:45:46 -080010352 0) {
Victor Stinnerb1cc6ba2020-07-03 20:01:46 +020010353 return -1;
Brandt Bucherd2f96672020-02-06 06:45:46 -080010354 }
Victor Stinner18ce7f12020-11-04 16:37:07 +010010355 if (PyModule_AddObjectRef(m, "excepthandler", state->excepthandler_type) <
10356 0) {
Victor Stinnerb1cc6ba2020-07-03 20:01:46 +020010357 return -1;
Brandt Bucherd2f96672020-02-06 06:45:46 -080010358 }
Victor Stinner18ce7f12020-11-04 16:37:07 +010010359 if (PyModule_AddObjectRef(m, "ExceptHandler", state->ExceptHandler_type) <
10360 0) {
Victor Stinnerb1cc6ba2020-07-03 20:01:46 +020010361 return -1;
Brandt Bucherd2f96672020-02-06 06:45:46 -080010362 }
Victor Stinner18ce7f12020-11-04 16:37:07 +010010363 if (PyModule_AddObjectRef(m, "arguments", state->arguments_type) < 0) {
Victor Stinnerb1cc6ba2020-07-03 20:01:46 +020010364 return -1;
Brandt Bucherd2f96672020-02-06 06:45:46 -080010365 }
Victor Stinner18ce7f12020-11-04 16:37:07 +010010366 if (PyModule_AddObjectRef(m, "arg", state->arg_type) < 0) {
Victor Stinnerb1cc6ba2020-07-03 20:01:46 +020010367 return -1;
Brandt Bucherd2f96672020-02-06 06:45:46 -080010368 }
Victor Stinner18ce7f12020-11-04 16:37:07 +010010369 if (PyModule_AddObjectRef(m, "keyword", state->keyword_type) < 0) {
Victor Stinnerb1cc6ba2020-07-03 20:01:46 +020010370 return -1;
Brandt Bucherd2f96672020-02-06 06:45:46 -080010371 }
Victor Stinner18ce7f12020-11-04 16:37:07 +010010372 if (PyModule_AddObjectRef(m, "alias", state->alias_type) < 0) {
Victor Stinnerb1cc6ba2020-07-03 20:01:46 +020010373 return -1;
Brandt Bucherd2f96672020-02-06 06:45:46 -080010374 }
Victor Stinner18ce7f12020-11-04 16:37:07 +010010375 if (PyModule_AddObjectRef(m, "withitem", state->withitem_type) < 0) {
Victor Stinnerb1cc6ba2020-07-03 20:01:46 +020010376 return -1;
Brandt Bucherd2f96672020-02-06 06:45:46 -080010377 }
Brandt Bucher145bf262021-02-26 14:51:55 -080010378 if (PyModule_AddObjectRef(m, "match_case", state->match_case_type) < 0) {
10379 return -1;
10380 }
Victor Stinner18ce7f12020-11-04 16:37:07 +010010381 if (PyModule_AddObjectRef(m, "type_ignore", state->type_ignore_type) < 0) {
Victor Stinnerb1cc6ba2020-07-03 20:01:46 +020010382 return -1;
Brandt Bucherd2f96672020-02-06 06:45:46 -080010383 }
Victor Stinner18ce7f12020-11-04 16:37:07 +010010384 if (PyModule_AddObjectRef(m, "TypeIgnore", state->TypeIgnore_type) < 0) {
Victor Stinnerb1cc6ba2020-07-03 20:01:46 +020010385 return -1;
Brandt Bucherd2f96672020-02-06 06:45:46 -080010386 }
Victor Stinnerb1cc6ba2020-07-03 20:01:46 +020010387 return 0;
10388}
Victor Stinner91e1bc12020-07-03 14:15:53 +020010389
Victor Stinnerb1cc6ba2020-07-03 20:01:46 +020010390static PyModuleDef_Slot astmodule_slots[] = {
10391 {Py_mod_exec, astmodule_exec},
10392 {0, NULL}
10393};
10394
10395static struct PyModuleDef _astmodule = {
10396 PyModuleDef_HEAD_INIT,
10397 .m_name = "_ast",
Victor Stinner5cf47822020-11-02 22:03:28 +010010398 // The _ast module uses a per-interpreter state (PyInterpreterState.ast)
Victor Stinnere5fbe0c2020-09-15 18:03:34 +020010399 .m_size = 0,
Victor Stinnerb1cc6ba2020-07-03 20:01:46 +020010400 .m_slots = astmodule_slots,
Victor Stinnerb1cc6ba2020-07-03 20:01:46 +020010401};
10402
10403PyMODINIT_FUNC
10404PyInit__ast(void)
10405{
10406 return PyModuleDef_Init(&_astmodule);
Martin v. Löwis577b5b92006-02-27 15:23:19 +000010407}
10408
Jeremy Hylton3e0055f2005-10-20 19:59:25 +000010409
Martin v. Löwisbd260da2006-02-26 19:42:26 +000010410PyObject* PyAST_mod2obj(mod_ty t)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +000010411{
Victor Stinner5cf47822020-11-02 22:03:28 +010010412 struct ast_state *state = get_ast_state();
Victor Stinnerb1cc6ba2020-07-03 20:01:46 +020010413 if (state == NULL) {
Victor Stinnerbdf630c2013-07-17 00:17:15 +020010414 return NULL;
Victor Stinner91e1bc12020-07-03 14:15:53 +020010415 }
Victor Stinner74419f02020-07-03 11:35:37 +020010416 return ast2obj_mod(state, t);
Jeremy Hylton3e0055f2005-10-20 19:59:25 +000010417}
Martin v. Löwis5b222132007-06-10 09:51:05 +000010418
Neal Norwitzdb4115f2008-03-31 04:20:05 +000010419/* mode is 0 for "exec", 1 for "eval" and 2 for "single" input */
10420mod_ty PyAST_obj2mod(PyObject* ast, PyArena* arena, int mode)
Martin v. Löwis618dc5e2008-03-30 20:03:44 +000010421{
Serhiy Storchaka43c97312019-09-10 13:02:30 +030010422 const char * const req_name[] = {"Module", "Expression", "Interactive"};
Benjamin Peterson0496c9e2009-12-13 01:24:58 +000010423 int isinstance;
Benjamin Peterson42ec0312014-02-10 22:41:40 -050010424
Steve Dowerb82e17e2019-05-23 08:45:22 -070010425 if (PySys_Audit("compile", "OO", ast, Py_None) < 0) {
10426 return NULL;
10427 }
10428
Victor Stinner5cf47822020-11-02 22:03:28 +010010429 struct ast_state *state = get_ast_state();
10430 if (state == NULL) {
10431 return NULL;
10432 }
10433
Victor Stinner74419f02020-07-03 11:35:37 +020010434 PyObject *req_type[3];
10435 req_type[0] = state->Module_type;
10436 req_type[1] = state->Expression_type;
10437 req_type[2] = state->Interactive_type;
Benjamin Peterson42ec0312014-02-10 22:41:40 -050010438
Guido van Rossum3a32e3b2019-02-01 11:37:34 -080010439 assert(0 <= mode && mode <= 2);
Neal Norwitzdb4115f2008-03-31 04:20:05 +000010440
Benjamin Peterson0496c9e2009-12-13 01:24:58 +000010441 isinstance = PyObject_IsInstance(ast, req_type[mode]);
10442 if (isinstance == -1)
10443 return NULL;
10444 if (!isinstance) {
Neal Norwitzdb4115f2008-03-31 04:20:05 +000010445 PyErr_Format(PyExc_TypeError, "expected %s node, got %.400s",
Dino Viehlandac46eb42019-09-11 10:16:34 -070010446 req_name[mode], _PyType_Name(Py_TYPE(ast)));
Martin v. Löwis618dc5e2008-03-30 20:03:44 +000010447 return NULL;
10448 }
Dong-hee Naa05fcd32019-10-10 16:41:26 +090010449
10450 mod_ty res = NULL;
Victor Stinner74419f02020-07-03 11:35:37 +020010451 if (obj2ast_mod(state, ast, &res, arena) != 0)
Martin v. Löwis618dc5e2008-03-30 20:03:44 +000010452 return NULL;
10453 else
10454 return res;
10455}
10456
10457int PyAST_Check(PyObject* obj)
10458{
Victor Stinner5cf47822020-11-02 22:03:28 +010010459 struct ast_state *state = get_ast_state();
Victor Stinnerb1cc6ba2020-07-03 20:01:46 +020010460 if (state == NULL) {
Victor Stinnerbdf630c2013-07-17 00:17:15 +020010461 return -1;
Victor Stinner91e1bc12020-07-03 14:15:53 +020010462 }
Victor Stinner74419f02020-07-03 11:35:37 +020010463 return PyObject_IsInstance(obj, state->AST_type);
Martin v. Löwis618dc5e2008-03-30 20:03:44 +000010464}
10465
Martin v. Löwis5b222132007-06-10 09:51:05 +000010466