blob: 2105729ea3489b2f8a4923bab9d6756f4fdcbc49 [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*);
Serhiy Storchaka43c97312019-09-10 13:02:30 +0300678static const char * const alias_fields[]={
Victor Stinnerce72e1c2013-07-27 00:00:36 +0200679 "name",
680 "asname",
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000681};
Victor Stinner5cf47822020-11-02 22:03:28 +0100682static PyObject* ast2obj_withitem(struct ast_state *state, void*);
Serhiy Storchaka43c97312019-09-10 13:02:30 +0300683static const char * const withitem_fields[]={
Victor Stinnerce72e1c2013-07-27 00:00:36 +0200684 "context_expr",
685 "optional_vars",
Benjamin Petersonbf1bbc12011-05-27 13:58:08 -0500686};
Brandt Bucher145bf262021-02-26 14:51:55 -0800687static PyObject* ast2obj_match_case(struct ast_state *state, void*);
688static const char * const match_case_fields[]={
689 "pattern",
690 "guard",
691 "body",
692};
Victor Stinner5cf47822020-11-02 22:03:28 +0100693static PyObject* ast2obj_type_ignore(struct ast_state *state, void*);
Serhiy Storchaka43c97312019-09-10 13:02:30 +0300694static const char * const TypeIgnore_fields[]={
Guido van Rossumdcfcd142019-01-31 03:40:27 -0800695 "lineno",
Michael J. Sullivan933e1502019-05-22 07:54:20 -0700696 "tag",
Guido van Rossumdcfcd142019-01-31 03:40:27 -0800697};
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000698
699
INADA Naokifc489082017-01-25 22:33:43 +0900700
Benjamin Peterson7e0dbfb2012-03-12 09:46:44 -0700701typedef struct {
Victor Stinner45e50de2012-03-13 01:17:31 +0100702 PyObject_HEAD
Benjamin Peterson7e0dbfb2012-03-12 09:46:44 -0700703 PyObject *dict;
704} AST_object;
705
Benjamin Peterson1767e022012-03-14 21:50:29 -0500706static void
707ast_dealloc(AST_object *self)
708{
INADA Naokia6296d32017-08-24 14:55:17 +0900709 /* bpo-31095: UnTrack is needed before calling any callbacks */
Eddie Elizondo0247e802019-09-14 09:38:17 -0400710 PyTypeObject *tp = Py_TYPE(self);
INADA Naokia6296d32017-08-24 14:55:17 +0900711 PyObject_GC_UnTrack(self);
Benjamin Peterson1767e022012-03-14 21:50:29 -0500712 Py_CLEAR(self->dict);
Eddie Elizondo0247e802019-09-14 09:38:17 -0400713 freefunc free_func = PyType_GetSlot(tp, Py_tp_free);
714 assert(free_func != NULL);
715 free_func(self);
716 Py_DECREF(tp);
Benjamin Peterson1767e022012-03-14 21:50:29 -0500717}
718
Neal Norwitz207c9f32008-03-31 04:42:11 +0000719static int
Benjamin Peterson81071762012-07-08 11:03:46 -0700720ast_traverse(AST_object *self, visitproc visit, void *arg)
721{
Pablo Galindo1cf15af2020-05-27 10:03:38 +0100722 Py_VISIT(Py_TYPE(self));
Benjamin Peterson81071762012-07-08 11:03:46 -0700723 Py_VISIT(self->dict);
724 return 0;
725}
726
Serhiy Storchakaa5c42282018-05-31 07:34:34 +0300727static int
Benjamin Peterson81071762012-07-08 11:03:46 -0700728ast_clear(AST_object *self)
729{
730 Py_CLEAR(self->dict);
Serhiy Storchakaa5c42282018-05-31 07:34:34 +0300731 return 0;
Benjamin Peterson81071762012-07-08 11:03:46 -0700732}
733
734static int
Neal Norwitz207c9f32008-03-31 04:42:11 +0000735ast_type_init(PyObject *self, PyObject *args, PyObject *kw)
736{
Victor Stinner5cf47822020-11-02 22:03:28 +0100737 struct ast_state *state = get_ast_state();
Victor Stinner1f764532020-07-04 23:18:15 +0200738 if (state == NULL) {
739 return -1;
740 }
741
Neal Norwitz207c9f32008-03-31 04:42:11 +0000742 Py_ssize_t i, numfields = 0;
743 int res = -1;
744 PyObject *key, *value, *fields;
Victor Stinner74419f02020-07-03 11:35:37 +0200745 if (_PyObject_LookupAttr((PyObject*)Py_TYPE(self), state->_fields, &fields) < 0) {
Serhiy Storchakaf320be72018-01-25 10:49:40 +0200746 goto cleanup;
747 }
Neal Norwitz207c9f32008-03-31 04:42:11 +0000748 if (fields) {
749 numfields = PySequence_Size(fields);
Rémi Lapeyrec73914a2020-05-24 23:12:57 +0200750 if (numfields == -1) {
Neal Norwitz207c9f32008-03-31 04:42:11 +0000751 goto cleanup;
Rémi Lapeyrec73914a2020-05-24 23:12:57 +0200752 }
Neal Norwitz207c9f32008-03-31 04:42:11 +0000753 }
INADA Naoki4c78c522017-02-24 02:48:17 +0900754
Neal Norwitz207c9f32008-03-31 04:42:11 +0000755 res = 0; /* if no error occurs, this stays 0 to the end */
INADA Naoki4c78c522017-02-24 02:48:17 +0900756 if (numfields < PyTuple_GET_SIZE(args)) {
757 PyErr_Format(PyExc_TypeError, "%.400s constructor takes at most "
758 "%zd positional argument%s",
Dino Viehlandac46eb42019-09-11 10:16:34 -0700759 _PyType_Name(Py_TYPE(self)),
INADA Naoki4c78c522017-02-24 02:48:17 +0900760 numfields, numfields == 1 ? "" : "s");
761 res = -1;
762 goto cleanup;
763 }
764 for (i = 0; i < PyTuple_GET_SIZE(args); i++) {
765 /* cannot be reached when fields is NULL */
766 PyObject *name = PySequence_GetItem(fields, i);
767 if (!name) {
Neal Norwitz207c9f32008-03-31 04:42:11 +0000768 res = -1;
769 goto cleanup;
770 }
INADA Naoki4c78c522017-02-24 02:48:17 +0900771 res = PyObject_SetAttr(self, name, PyTuple_GET_ITEM(args, i));
772 Py_DECREF(name);
Rémi Lapeyrec73914a2020-05-24 23:12:57 +0200773 if (res < 0) {
INADA Naoki4c78c522017-02-24 02:48:17 +0900774 goto cleanup;
Rémi Lapeyrec73914a2020-05-24 23:12:57 +0200775 }
Neal Norwitz207c9f32008-03-31 04:42:11 +0000776 }
777 if (kw) {
778 i = 0; /* needed by PyDict_Next */
779 while (PyDict_Next(kw, &i, &key, &value)) {
Rémi Lapeyrec73914a2020-05-24 23:12:57 +0200780 int contains = PySequence_Contains(fields, key);
781 if (contains == -1) {
782 res = -1;
Neal Norwitz207c9f32008-03-31 04:42:11 +0000783 goto cleanup;
Rémi Lapeyrec73914a2020-05-24 23:12:57 +0200784 } else if (contains == 1) {
785 Py_ssize_t p = PySequence_Index(fields, key);
786 if (p == -1) {
787 res = -1;
788 goto cleanup;
789 }
790 if (p < PyTuple_GET_SIZE(args)) {
791 PyErr_Format(PyExc_TypeError,
792 "%.400s got multiple values for argument '%U'",
793 Py_TYPE(self)->tp_name, key);
794 res = -1;
795 goto cleanup;
796 }
797 }
798 res = PyObject_SetAttr(self, key, value);
799 if (res < 0) {
800 goto cleanup;
801 }
Neal Norwitz207c9f32008-03-31 04:42:11 +0000802 }
803 }
804 cleanup:
805 Py_XDECREF(fields);
806 return res;
807}
808
Neal Norwitzee9b10a2008-03-31 05:29:39 +0000809/* Pickling support */
810static PyObject *
811ast_type_reduce(PyObject *self, PyObject *unused)
812{
Victor Stinner5cf47822020-11-02 22:03:28 +0100813 struct ast_state *state = get_ast_state();
Victor Stinnerb1cc6ba2020-07-03 20:01:46 +0200814 if (state == NULL) {
815 return NULL;
816 }
817
Serhiy Storchakaf320be72018-01-25 10:49:40 +0200818 PyObject *dict;
Victor Stinner74419f02020-07-03 11:35:37 +0200819 if (_PyObject_LookupAttr(self, state->__dict__, &dict) < 0) {
Serhiy Storchakaf320be72018-01-25 10:49:40 +0200820 return NULL;
Neal Norwitzee9b10a2008-03-31 05:29:39 +0000821 }
822 if (dict) {
Serhiy Storchakaf320be72018-01-25 10:49:40 +0200823 return Py_BuildValue("O()N", Py_TYPE(self), dict);
Neal Norwitzee9b10a2008-03-31 05:29:39 +0000824 }
825 return Py_BuildValue("O()", Py_TYPE(self));
826}
827
Eddie Elizondo3368f3c2019-09-19 09:29:05 -0700828static PyMemberDef ast_type_members[] = {
829 {"__dictoffset__", T_PYSSIZET, offsetof(AST_object, dict), READONLY},
830 {NULL} /* Sentinel */
831};
832
Neal Norwitzee9b10a2008-03-31 05:29:39 +0000833static PyMethodDef ast_type_methods[] = {
834 {"__reduce__", ast_type_reduce, METH_NOARGS, NULL},
835 {NULL}
836};
837
Benjamin Peterson7e0dbfb2012-03-12 09:46:44 -0700838static PyGetSetDef ast_type_getsets[] = {
839 {"__dict__", PyObject_GenericGetDict, PyObject_GenericSetDict},
840 {NULL}
841};
842
Dino Viehlandac46eb42019-09-11 10:16:34 -0700843static PyType_Slot AST_type_slots[] = {
844 {Py_tp_dealloc, ast_dealloc},
845 {Py_tp_getattro, PyObject_GenericGetAttr},
846 {Py_tp_setattro, PyObject_GenericSetAttr},
847 {Py_tp_traverse, ast_traverse},
848 {Py_tp_clear, ast_clear},
Eddie Elizondo3368f3c2019-09-19 09:29:05 -0700849 {Py_tp_members, ast_type_members},
Dino Viehlandac46eb42019-09-11 10:16:34 -0700850 {Py_tp_methods, ast_type_methods},
851 {Py_tp_getset, ast_type_getsets},
852 {Py_tp_init, ast_type_init},
853 {Py_tp_alloc, PyType_GenericAlloc},
854 {Py_tp_new, PyType_GenericNew},
Dino Viehlandac46eb42019-09-11 10:16:34 -0700855 {Py_tp_free, PyObject_GC_Del},
856 {0, 0},
857};
858
859static PyType_Spec AST_type_spec = {
Serhiy Storchakabace59d2020-03-22 20:33:34 +0200860 "ast.AST",
Benjamin Peterson7e0dbfb2012-03-12 09:46:44 -0700861 sizeof(AST_object),
Neal Norwitz207c9f32008-03-31 04:42:11 +0000862 0,
Dino Viehlandac46eb42019-09-11 10:16:34 -0700863 Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE | Py_TPFLAGS_HAVE_GC,
864 AST_type_slots
Neal Norwitz207c9f32008-03-31 04:42:11 +0000865};
866
Dino Viehlandac46eb42019-09-11 10:16:34 -0700867static PyObject *
Victor Stinner5cf47822020-11-02 22:03:28 +0100868make_type(struct ast_state *state, const char *type, PyObject* base,
Victor Stinner74419f02020-07-03 11:35:37 +0200869 const char* const* fields, int num_fields, const char *doc)
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000870{
871 PyObject *fnames, *result;
872 int i;
Neal Norwitzee9b10a2008-03-31 05:29:39 +0000873 fnames = PyTuple_New(num_fields);
874 if (!fnames) return NULL;
875 for (i = 0; i < num_fields; i++) {
Serhiy Storchaka43c97312019-09-10 13:02:30 +0300876 PyObject *field = PyUnicode_InternFromString(fields[i]);
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000877 if (!field) {
878 Py_DECREF(fnames);
879 return NULL;
880 }
881 PyTuple_SET_ITEM(fnames, i, field);
882 }
Brandt Bucher145bf262021-02-26 14:51:55 -0800883 result = PyObject_CallFunction((PyObject*)&PyType_Type, "s(O){OOOOOOOs}",
INADA Naokifc489082017-01-25 22:33:43 +0900884 type, base,
Victor Stinner74419f02020-07-03 11:35:37 +0200885 state->_fields, fnames,
Brandt Bucher145bf262021-02-26 14:51:55 -0800886 state->__match_args__, fnames,
Victor Stinner74419f02020-07-03 11:35:37 +0200887 state->__module__,
888 state->ast,
889 state->__doc__, doc);
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000890 Py_DECREF(fnames);
Dino Viehlandac46eb42019-09-11 10:16:34 -0700891 return result;
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000892}
893
Serhiy Storchaka43c97312019-09-10 13:02:30 +0300894static int
Victor Stinner5cf47822020-11-02 22:03:28 +0100895add_attributes(struct ast_state *state, PyObject *type, const char * const *attrs, int num_fields)
Martin v. Löwis577b5b92006-02-27 15:23:19 +0000896{
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000897 int i, result;
Neal Norwitz207c9f32008-03-31 04:42:11 +0000898 PyObject *s, *l = PyTuple_New(num_fields);
Benjamin Peterson3e5cd1d2010-06-27 21:45:24 +0000899 if (!l)
900 return 0;
901 for (i = 0; i < num_fields; i++) {
Serhiy Storchaka43c97312019-09-10 13:02:30 +0300902 s = PyUnicode_InternFromString(attrs[i]);
Martin v. Löwis577b5b92006-02-27 15:23:19 +0000903 if (!s) {
904 Py_DECREF(l);
905 return 0;
906 }
Neal Norwitz207c9f32008-03-31 04:42:11 +0000907 PyTuple_SET_ITEM(l, i, s);
Martin v. Löwis577b5b92006-02-27 15:23:19 +0000908 }
Victor Stinner74419f02020-07-03 11:35:37 +0200909 result = PyObject_SetAttr(type, state->_attributes, l) >= 0;
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000910 Py_DECREF(l);
911 return result;
Martin v. Löwis577b5b92006-02-27 15:23:19 +0000912}
913
Martin v. Löwis618dc5e2008-03-30 20:03:44 +0000914/* Conversion AST -> Python */
915
Victor Stinner5cf47822020-11-02 22:03:28 +0100916static 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 +0000917{
Benjamin Peterson77fa9372012-05-15 10:10:27 -0700918 Py_ssize_t i, n = asdl_seq_LEN(seq);
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000919 PyObject *result = PyList_New(n);
920 PyObject *value;
921 if (!result)
922 return NULL;
923 for (i = 0; i < n; i++) {
Pablo Galindoa5634c42020-09-16 19:42:00 +0100924 value = func(state, asdl_seq_GET_UNTYPED(seq, i));
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000925 if (!value) {
926 Py_DECREF(result);
927 return NULL;
928 }
929 PyList_SET_ITEM(result, i, value);
930 }
931 return result;
932}
933
Victor Stinner5cf47822020-11-02 22:03:28 +0100934static PyObject* ast2obj_object(struct ast_state *Py_UNUSED(state), void *o)
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000935{
936 if (!o)
937 o = Py_None;
938 Py_INCREF((PyObject*)o);
939 return (PyObject*)o;
940}
Victor Stinnerf2c1aa12016-01-26 00:40:57 +0100941#define ast2obj_constant ast2obj_object
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000942#define ast2obj_identifier ast2obj_object
943#define ast2obj_string ast2obj_object
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000944
Victor Stinner5cf47822020-11-02 22:03:28 +0100945static PyObject* ast2obj_int(struct ast_state *Py_UNUSED(state), long b)
Martin v. Löwis577b5b92006-02-27 15:23:19 +0000946{
Christian Heimes217cfd12007-12-02 14:31:20 +0000947 return PyLong_FromLong(b);
Martin v. Löwis577b5b92006-02-27 15:23:19 +0000948}
949
Martin v. Löwis618dc5e2008-03-30 20:03:44 +0000950/* Conversion Python -> AST */
951
Victor Stinner5cf47822020-11-02 22:03:28 +0100952static int obj2ast_object(struct ast_state *Py_UNUSED(state), PyObject* obj, PyObject** out, PyArena* arena)
Martin v. Löwis618dc5e2008-03-30 20:03:44 +0000953{
954 if (obj == Py_None)
955 obj = NULL;
Christian Heimes70c94e72013-07-27 00:33:13 +0200956 if (obj) {
Victor Stinner8370e072021-03-24 02:23:01 +0100957 if (_PyArena_AddPyObject(arena, obj) < 0) {
Christian Heimes70c94e72013-07-27 00:33:13 +0200958 *out = NULL;
959 return -1;
960 }
961 Py_INCREF(obj);
962 }
Martin v. Löwis618dc5e2008-03-30 20:03:44 +0000963 *out = obj;
964 return 0;
965}
966
Victor Stinner5cf47822020-11-02 22:03:28 +0100967static int obj2ast_constant(struct ast_state *Py_UNUSED(state), PyObject* obj, PyObject** out, PyArena* arena)
Victor Stinnerf2c1aa12016-01-26 00:40:57 +0100968{
Victor Stinner8370e072021-03-24 02:23:01 +0100969 if (_PyArena_AddPyObject(arena, obj) < 0) {
Serhiy Storchaka3f228112018-09-27 17:42:37 +0300970 *out = NULL;
971 return -1;
Victor Stinnerf2c1aa12016-01-26 00:40:57 +0100972 }
Serhiy Storchaka3f228112018-09-27 17:42:37 +0300973 Py_INCREF(obj);
Victor Stinnerf2c1aa12016-01-26 00:40:57 +0100974 *out = obj;
975 return 0;
976}
977
Victor Stinner5cf47822020-11-02 22:03:28 +0100978static int obj2ast_identifier(struct ast_state *state, PyObject* obj, PyObject** out, PyArena* arena)
Benjamin Peterson2193d2b2011-07-22 10:50:23 -0500979{
Benjamin Peterson180e6352011-07-22 11:09:07 -0500980 if (!PyUnicode_CheckExact(obj) && obj != Py_None) {
981 PyErr_SetString(PyExc_TypeError, "AST identifier must be of type str");
Benjamin Peterson2193d2b2011-07-22 10:50:23 -0500982 return 1;
983 }
Victor Stinner74419f02020-07-03 11:35:37 +0200984 return obj2ast_object(state, obj, out, arena);
Benjamin Peterson2193d2b2011-07-22 10:50:23 -0500985}
986
Victor Stinner5cf47822020-11-02 22:03:28 +0100987static int obj2ast_string(struct ast_state *state, PyObject* obj, PyObject** out, PyArena* arena)
Guido van Rossumdcfcd142019-01-31 03:40:27 -0800988{
989 if (!PyUnicode_CheckExact(obj) && !PyBytes_CheckExact(obj)) {
990 PyErr_SetString(PyExc_TypeError, "AST string must be of type str");
991 return 1;
992 }
Victor Stinner74419f02020-07-03 11:35:37 +0200993 return obj2ast_object(state, obj, out, arena);
Guido van Rossumdcfcd142019-01-31 03:40:27 -0800994}
995
Victor Stinner5cf47822020-11-02 22:03:28 +0100996static int obj2ast_int(struct ast_state* Py_UNUSED(state), PyObject* obj, int* out, PyArena* arena)
Martin v. Löwis618dc5e2008-03-30 20:03:44 +0000997{
998 int i;
999 if (!PyLong_Check(obj)) {
Amaury Forgeot d'Arc5e8f8102011-11-22 21:52:30 +01001000 PyErr_Format(PyExc_ValueError, "invalid integer value: %R", obj);
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00001001 return 1;
1002 }
1003
Serhiy Storchaka56f6e762015-09-06 21:25:30 +03001004 i = _PyLong_AsInt(obj);
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00001005 if (i == -1 && PyErr_Occurred())
1006 return 1;
1007 *out = i;
1008 return 0;
1009}
1010
Victor Stinner5cf47822020-11-02 22:03:28 +01001011static int add_ast_fields(struct ast_state *state)
Benjamin Petersonce825f12008-10-24 23:11:02 +00001012{
Dino Viehlandac46eb42019-09-11 10:16:34 -07001013 PyObject *empty_tuple;
Benjamin Petersonce825f12008-10-24 23:11:02 +00001014 empty_tuple = PyTuple_New(0);
1015 if (!empty_tuple ||
Victor Stinner74419f02020-07-03 11:35:37 +02001016 PyObject_SetAttrString(state->AST_type, "_fields", empty_tuple) < 0 ||
Brandt Bucher145bf262021-02-26 14:51:55 -08001017 PyObject_SetAttrString(state->AST_type, "__match_args__", empty_tuple) < 0 ||
Victor Stinner74419f02020-07-03 11:35:37 +02001018 PyObject_SetAttrString(state->AST_type, "_attributes", empty_tuple) < 0) {
Benjamin Petersonce825f12008-10-24 23:11:02 +00001019 Py_XDECREF(empty_tuple);
1020 return -1;
1021 }
1022 Py_DECREF(empty_tuple);
1023 return 0;
1024}
1025
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00001026
Victor Stinnerfd957c12020-11-03 18:07:15 +01001027
1028static int
1029init_types(struct ast_state *state)
Martin v. Löwisbd260da2006-02-26 19:42:26 +00001030{
Victor Stinnerfd957c12020-11-03 18:07:15 +01001031 // init_types() must not be called after _PyAST_Fini()
1032 // has been called
1033 assert(state->initialized >= 0);
1034
1035 if (state->initialized) {
1036 return 1;
1037 }
1038 if (init_identifiers(state) < 0) {
1039 return 0;
1040 }
Dino Viehlandac46eb42019-09-11 10:16:34 -07001041 state->AST_type = PyType_FromSpec(&AST_type_spec);
Victor Stinnerfd957c12020-11-03 18:07:15 +01001042 if (!state->AST_type) {
1043 return 0;
1044 }
1045 if (add_ast_fields(state) < 0) {
1046 return 0;
1047 }
Victor Stinner74419f02020-07-03 11:35:37 +02001048 state->mod_type = make_type(state, "mod", state->AST_type, NULL, 0,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001049 "mod = Module(stmt* body, type_ignore* type_ignores)\n"
1050 " | Interactive(stmt* body)\n"
1051 " | Expression(expr body)\n"
1052 " | FunctionType(expr* argtypes, expr returns)");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001053 if (!state->mod_type) return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001054 if (!add_attributes(state, state->mod_type, NULL, 0)) return 0;
1055 state->Module_type = make_type(state, "Module", state->mod_type,
1056 Module_fields, 2,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001057 "Module(stmt* body, type_ignore* type_ignores)");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001058 if (!state->Module_type) return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001059 state->Interactive_type = make_type(state, "Interactive", state->mod_type,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001060 Interactive_fields, 1,
1061 "Interactive(stmt* body)");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001062 if (!state->Interactive_type) return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001063 state->Expression_type = make_type(state, "Expression", state->mod_type,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001064 Expression_fields, 1,
1065 "Expression(expr body)");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001066 if (!state->Expression_type) return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001067 state->FunctionType_type = make_type(state, "FunctionType",
1068 state->mod_type, FunctionType_fields,
1069 2,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001070 "FunctionType(expr* argtypes, expr returns)");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001071 if (!state->FunctionType_type) return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001072 state->stmt_type = make_type(state, "stmt", state->AST_type, NULL, 0,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001073 "stmt = FunctionDef(identifier name, arguments args, stmt* body, expr* decorator_list, expr? returns, string? type_comment)\n"
1074 " | AsyncFunctionDef(identifier name, arguments args, stmt* body, expr* decorator_list, expr? returns, string? type_comment)\n"
1075 " | ClassDef(identifier name, expr* bases, keyword* keywords, stmt* body, expr* decorator_list)\n"
1076 " | Return(expr? value)\n"
1077 " | Delete(expr* targets)\n"
1078 " | Assign(expr* targets, expr value, string? type_comment)\n"
1079 " | AugAssign(expr target, operator op, expr value)\n"
1080 " | AnnAssign(expr target, expr annotation, expr? value, int simple)\n"
1081 " | For(expr target, expr iter, stmt* body, stmt* orelse, string? type_comment)\n"
1082 " | AsyncFor(expr target, expr iter, stmt* body, stmt* orelse, string? type_comment)\n"
1083 " | While(expr test, stmt* body, stmt* orelse)\n"
1084 " | If(expr test, stmt* body, stmt* orelse)\n"
1085 " | With(withitem* items, stmt* body, string? type_comment)\n"
1086 " | AsyncWith(withitem* items, stmt* body, string? type_comment)\n"
Brandt Bucher145bf262021-02-26 14:51:55 -08001087 " | Match(expr subject, match_case* cases)\n"
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001088 " | Raise(expr? exc, expr? cause)\n"
1089 " | Try(stmt* body, excepthandler* handlers, stmt* orelse, stmt* finalbody)\n"
1090 " | Assert(expr test, expr? msg)\n"
1091 " | Import(alias* names)\n"
1092 " | ImportFrom(identifier? module, alias* names, int? level)\n"
1093 " | Global(identifier* names)\n"
1094 " | Nonlocal(identifier* names)\n"
1095 " | Expr(expr value)\n"
1096 " | Pass\n"
1097 " | Break\n"
1098 " | Continue");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001099 if (!state->stmt_type) return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001100 if (!add_attributes(state, state->stmt_type, stmt_attributes, 4)) return 0;
Serhiy Storchakab7e95252020-03-10 00:07:47 +02001101 if (PyObject_SetAttr(state->stmt_type, state->end_lineno, Py_None) == -1)
1102 return 0;
1103 if (PyObject_SetAttr(state->stmt_type, state->end_col_offset, Py_None) ==
1104 -1)
1105 return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001106 state->FunctionDef_type = make_type(state, "FunctionDef", state->stmt_type,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001107 FunctionDef_fields, 6,
1108 "FunctionDef(identifier name, arguments args, stmt* body, expr* decorator_list, expr? returns, string? type_comment)");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001109 if (!state->FunctionDef_type) return 0;
Serhiy Storchakab7e95252020-03-10 00:07:47 +02001110 if (PyObject_SetAttr(state->FunctionDef_type, state->returns, Py_None) ==
1111 -1)
1112 return 0;
1113 if (PyObject_SetAttr(state->FunctionDef_type, state->type_comment, Py_None)
1114 == -1)
1115 return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001116 state->AsyncFunctionDef_type = make_type(state, "AsyncFunctionDef",
Dino Viehlandac46eb42019-09-11 10:16:34 -07001117 state->stmt_type,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001118 AsyncFunctionDef_fields, 6,
1119 "AsyncFunctionDef(identifier name, arguments args, stmt* body, expr* decorator_list, expr? returns, string? type_comment)");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001120 if (!state->AsyncFunctionDef_type) return 0;
Serhiy Storchakab7e95252020-03-10 00:07:47 +02001121 if (PyObject_SetAttr(state->AsyncFunctionDef_type, state->returns, Py_None)
1122 == -1)
1123 return 0;
1124 if (PyObject_SetAttr(state->AsyncFunctionDef_type, state->type_comment,
1125 Py_None) == -1)
1126 return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001127 state->ClassDef_type = make_type(state, "ClassDef", state->stmt_type,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001128 ClassDef_fields, 5,
1129 "ClassDef(identifier name, expr* bases, keyword* keywords, stmt* body, expr* decorator_list)");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001130 if (!state->ClassDef_type) return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001131 state->Return_type = make_type(state, "Return", state->stmt_type,
1132 Return_fields, 1,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001133 "Return(expr? value)");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001134 if (!state->Return_type) return 0;
Serhiy Storchakab7e95252020-03-10 00:07:47 +02001135 if (PyObject_SetAttr(state->Return_type, state->value, Py_None) == -1)
1136 return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001137 state->Delete_type = make_type(state, "Delete", state->stmt_type,
1138 Delete_fields, 1,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001139 "Delete(expr* targets)");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001140 if (!state->Delete_type) return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001141 state->Assign_type = make_type(state, "Assign", state->stmt_type,
1142 Assign_fields, 3,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001143 "Assign(expr* targets, expr value, string? type_comment)");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001144 if (!state->Assign_type) return 0;
Serhiy Storchakab7e95252020-03-10 00:07:47 +02001145 if (PyObject_SetAttr(state->Assign_type, state->type_comment, Py_None) ==
1146 -1)
1147 return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001148 state->AugAssign_type = make_type(state, "AugAssign", state->stmt_type,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001149 AugAssign_fields, 3,
1150 "AugAssign(expr target, operator op, expr value)");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001151 if (!state->AugAssign_type) return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001152 state->AnnAssign_type = make_type(state, "AnnAssign", state->stmt_type,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001153 AnnAssign_fields, 4,
1154 "AnnAssign(expr target, expr annotation, expr? value, int simple)");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001155 if (!state->AnnAssign_type) return 0;
Serhiy Storchakab7e95252020-03-10 00:07:47 +02001156 if (PyObject_SetAttr(state->AnnAssign_type, state->value, Py_None) == -1)
1157 return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001158 state->For_type = make_type(state, "For", state->stmt_type, For_fields, 5,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001159 "For(expr target, expr iter, stmt* body, stmt* orelse, string? type_comment)");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001160 if (!state->For_type) return 0;
Serhiy Storchakab7e95252020-03-10 00:07:47 +02001161 if (PyObject_SetAttr(state->For_type, state->type_comment, Py_None) == -1)
1162 return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001163 state->AsyncFor_type = make_type(state, "AsyncFor", state->stmt_type,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001164 AsyncFor_fields, 5,
1165 "AsyncFor(expr target, expr iter, stmt* body, stmt* orelse, string? type_comment)");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001166 if (!state->AsyncFor_type) return 0;
Serhiy Storchakab7e95252020-03-10 00:07:47 +02001167 if (PyObject_SetAttr(state->AsyncFor_type, state->type_comment, Py_None) ==
1168 -1)
1169 return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001170 state->While_type = make_type(state, "While", state->stmt_type,
1171 While_fields, 3,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001172 "While(expr test, stmt* body, stmt* orelse)");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001173 if (!state->While_type) return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001174 state->If_type = make_type(state, "If", state->stmt_type, If_fields, 3,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001175 "If(expr test, stmt* body, stmt* orelse)");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001176 if (!state->If_type) return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001177 state->With_type = make_type(state, "With", state->stmt_type, With_fields,
1178 3,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001179 "With(withitem* items, stmt* body, string? type_comment)");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001180 if (!state->With_type) return 0;
Serhiy Storchakab7e95252020-03-10 00:07:47 +02001181 if (PyObject_SetAttr(state->With_type, state->type_comment, Py_None) == -1)
1182 return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001183 state->AsyncWith_type = make_type(state, "AsyncWith", state->stmt_type,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001184 AsyncWith_fields, 3,
1185 "AsyncWith(withitem* items, stmt* body, string? type_comment)");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001186 if (!state->AsyncWith_type) return 0;
Serhiy Storchakab7e95252020-03-10 00:07:47 +02001187 if (PyObject_SetAttr(state->AsyncWith_type, state->type_comment, Py_None)
1188 == -1)
1189 return 0;
Brandt Bucher145bf262021-02-26 14:51:55 -08001190 state->Match_type = make_type(state, "Match", state->stmt_type,
1191 Match_fields, 2,
1192 "Match(expr subject, match_case* cases)");
1193 if (!state->Match_type) return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001194 state->Raise_type = make_type(state, "Raise", state->stmt_type,
1195 Raise_fields, 2,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001196 "Raise(expr? exc, expr? cause)");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001197 if (!state->Raise_type) return 0;
Serhiy Storchakab7e95252020-03-10 00:07:47 +02001198 if (PyObject_SetAttr(state->Raise_type, state->exc, Py_None) == -1)
1199 return 0;
1200 if (PyObject_SetAttr(state->Raise_type, state->cause, Py_None) == -1)
1201 return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001202 state->Try_type = make_type(state, "Try", state->stmt_type, Try_fields, 4,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001203 "Try(stmt* body, excepthandler* handlers, stmt* orelse, stmt* finalbody)");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001204 if (!state->Try_type) return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001205 state->Assert_type = make_type(state, "Assert", state->stmt_type,
1206 Assert_fields, 2,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001207 "Assert(expr test, expr? msg)");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001208 if (!state->Assert_type) return 0;
Serhiy Storchakab7e95252020-03-10 00:07:47 +02001209 if (PyObject_SetAttr(state->Assert_type, state->msg, Py_None) == -1)
1210 return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001211 state->Import_type = make_type(state, "Import", state->stmt_type,
1212 Import_fields, 1,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001213 "Import(alias* names)");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001214 if (!state->Import_type) return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001215 state->ImportFrom_type = make_type(state, "ImportFrom", state->stmt_type,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001216 ImportFrom_fields, 3,
1217 "ImportFrom(identifier? module, alias* names, int? level)");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001218 if (!state->ImportFrom_type) return 0;
Serhiy Storchakab7e95252020-03-10 00:07:47 +02001219 if (PyObject_SetAttr(state->ImportFrom_type, state->module, Py_None) == -1)
1220 return 0;
1221 if (PyObject_SetAttr(state->ImportFrom_type, state->level, Py_None) == -1)
1222 return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001223 state->Global_type = make_type(state, "Global", state->stmt_type,
1224 Global_fields, 1,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001225 "Global(identifier* names)");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001226 if (!state->Global_type) return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001227 state->Nonlocal_type = make_type(state, "Nonlocal", state->stmt_type,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001228 Nonlocal_fields, 1,
1229 "Nonlocal(identifier* names)");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001230 if (!state->Nonlocal_type) return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001231 state->Expr_type = make_type(state, "Expr", state->stmt_type, Expr_fields,
1232 1,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001233 "Expr(expr value)");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001234 if (!state->Expr_type) return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001235 state->Pass_type = make_type(state, "Pass", state->stmt_type, NULL, 0,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001236 "Pass");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001237 if (!state->Pass_type) return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001238 state->Break_type = make_type(state, "Break", state->stmt_type, NULL, 0,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001239 "Break");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001240 if (!state->Break_type) return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001241 state->Continue_type = make_type(state, "Continue", state->stmt_type, NULL,
1242 0,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001243 "Continue");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001244 if (!state->Continue_type) return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001245 state->expr_type = make_type(state, "expr", state->AST_type, NULL, 0,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001246 "expr = BoolOp(boolop op, expr* values)\n"
1247 " | NamedExpr(expr target, expr value)\n"
1248 " | BinOp(expr left, operator op, expr right)\n"
1249 " | UnaryOp(unaryop op, expr operand)\n"
1250 " | Lambda(arguments args, expr body)\n"
1251 " | IfExp(expr test, expr body, expr orelse)\n"
1252 " | Dict(expr* keys, expr* values)\n"
1253 " | Set(expr* elts)\n"
1254 " | ListComp(expr elt, comprehension* generators)\n"
1255 " | SetComp(expr elt, comprehension* generators)\n"
1256 " | DictComp(expr key, expr value, comprehension* generators)\n"
1257 " | GeneratorExp(expr elt, comprehension* generators)\n"
1258 " | Await(expr value)\n"
1259 " | Yield(expr? value)\n"
1260 " | YieldFrom(expr value)\n"
1261 " | Compare(expr left, cmpop* ops, expr* comparators)\n"
1262 " | Call(expr func, expr* args, keyword* keywords)\n"
1263 " | FormattedValue(expr value, int? conversion, expr? format_spec)\n"
1264 " | JoinedStr(expr* values)\n"
1265 " | Constant(constant value, string? kind)\n"
1266 " | Attribute(expr value, identifier attr, expr_context ctx)\n"
1267 " | Subscript(expr value, expr slice, expr_context ctx)\n"
1268 " | Starred(expr value, expr_context ctx)\n"
1269 " | Name(identifier id, expr_context ctx)\n"
1270 " | List(expr* elts, expr_context ctx)\n"
1271 " | Tuple(expr* elts, expr_context ctx)\n"
Brandt Bucher145bf262021-02-26 14:51:55 -08001272 " | Slice(expr? lower, expr? upper, expr? step)\n"
1273 " | MatchAs(expr pattern, identifier name)\n"
1274 " | MatchOr(expr* patterns)");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001275 if (!state->expr_type) return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001276 if (!add_attributes(state, state->expr_type, expr_attributes, 4)) return 0;
Serhiy Storchakab7e95252020-03-10 00:07:47 +02001277 if (PyObject_SetAttr(state->expr_type, state->end_lineno, Py_None) == -1)
1278 return 0;
1279 if (PyObject_SetAttr(state->expr_type, state->end_col_offset, Py_None) ==
1280 -1)
1281 return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001282 state->BoolOp_type = make_type(state, "BoolOp", state->expr_type,
1283 BoolOp_fields, 2,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001284 "BoolOp(boolop op, expr* values)");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001285 if (!state->BoolOp_type) return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001286 state->NamedExpr_type = make_type(state, "NamedExpr", state->expr_type,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001287 NamedExpr_fields, 2,
1288 "NamedExpr(expr target, expr value)");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001289 if (!state->NamedExpr_type) return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001290 state->BinOp_type = make_type(state, "BinOp", state->expr_type,
1291 BinOp_fields, 3,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001292 "BinOp(expr left, operator op, expr right)");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001293 if (!state->BinOp_type) return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001294 state->UnaryOp_type = make_type(state, "UnaryOp", state->expr_type,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001295 UnaryOp_fields, 2,
1296 "UnaryOp(unaryop op, expr operand)");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001297 if (!state->UnaryOp_type) return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001298 state->Lambda_type = make_type(state, "Lambda", state->expr_type,
1299 Lambda_fields, 2,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001300 "Lambda(arguments args, expr body)");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001301 if (!state->Lambda_type) return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001302 state->IfExp_type = make_type(state, "IfExp", state->expr_type,
1303 IfExp_fields, 3,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001304 "IfExp(expr test, expr body, expr orelse)");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001305 if (!state->IfExp_type) return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001306 state->Dict_type = make_type(state, "Dict", state->expr_type, Dict_fields,
1307 2,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001308 "Dict(expr* keys, expr* values)");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001309 if (!state->Dict_type) return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001310 state->Set_type = make_type(state, "Set", state->expr_type, Set_fields, 1,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001311 "Set(expr* elts)");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001312 if (!state->Set_type) return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001313 state->ListComp_type = make_type(state, "ListComp", state->expr_type,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001314 ListComp_fields, 2,
1315 "ListComp(expr elt, comprehension* generators)");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001316 if (!state->ListComp_type) return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001317 state->SetComp_type = make_type(state, "SetComp", state->expr_type,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001318 SetComp_fields, 2,
1319 "SetComp(expr elt, comprehension* generators)");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001320 if (!state->SetComp_type) return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001321 state->DictComp_type = make_type(state, "DictComp", state->expr_type,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001322 DictComp_fields, 3,
1323 "DictComp(expr key, expr value, comprehension* generators)");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001324 if (!state->DictComp_type) return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001325 state->GeneratorExp_type = make_type(state, "GeneratorExp",
1326 state->expr_type, GeneratorExp_fields,
1327 2,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001328 "GeneratorExp(expr elt, comprehension* generators)");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001329 if (!state->GeneratorExp_type) return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001330 state->Await_type = make_type(state, "Await", state->expr_type,
1331 Await_fields, 1,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001332 "Await(expr value)");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001333 if (!state->Await_type) return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001334 state->Yield_type = make_type(state, "Yield", state->expr_type,
1335 Yield_fields, 1,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001336 "Yield(expr? value)");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001337 if (!state->Yield_type) return 0;
Serhiy Storchakab7e95252020-03-10 00:07:47 +02001338 if (PyObject_SetAttr(state->Yield_type, state->value, Py_None) == -1)
1339 return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001340 state->YieldFrom_type = make_type(state, "YieldFrom", state->expr_type,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001341 YieldFrom_fields, 1,
1342 "YieldFrom(expr value)");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001343 if (!state->YieldFrom_type) return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001344 state->Compare_type = make_type(state, "Compare", state->expr_type,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001345 Compare_fields, 3,
1346 "Compare(expr left, cmpop* ops, expr* comparators)");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001347 if (!state->Compare_type) return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001348 state->Call_type = make_type(state, "Call", state->expr_type, Call_fields,
1349 3,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001350 "Call(expr func, expr* args, keyword* keywords)");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001351 if (!state->Call_type) return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001352 state->FormattedValue_type = make_type(state, "FormattedValue",
1353 state->expr_type,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001354 FormattedValue_fields, 3,
1355 "FormattedValue(expr value, int? conversion, expr? format_spec)");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001356 if (!state->FormattedValue_type) return 0;
Serhiy Storchakab7e95252020-03-10 00:07:47 +02001357 if (PyObject_SetAttr(state->FormattedValue_type, state->conversion,
1358 Py_None) == -1)
1359 return 0;
1360 if (PyObject_SetAttr(state->FormattedValue_type, state->format_spec,
1361 Py_None) == -1)
1362 return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001363 state->JoinedStr_type = make_type(state, "JoinedStr", state->expr_type,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001364 JoinedStr_fields, 1,
1365 "JoinedStr(expr* values)");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001366 if (!state->JoinedStr_type) return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001367 state->Constant_type = make_type(state, "Constant", state->expr_type,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001368 Constant_fields, 2,
1369 "Constant(constant value, string? kind)");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001370 if (!state->Constant_type) return 0;
Serhiy Storchakab7e95252020-03-10 00:07:47 +02001371 if (PyObject_SetAttr(state->Constant_type, state->kind, Py_None) == -1)
1372 return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001373 state->Attribute_type = make_type(state, "Attribute", state->expr_type,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001374 Attribute_fields, 3,
1375 "Attribute(expr value, identifier attr, expr_context ctx)");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001376 if (!state->Attribute_type) return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001377 state->Subscript_type = make_type(state, "Subscript", state->expr_type,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001378 Subscript_fields, 3,
1379 "Subscript(expr value, expr slice, expr_context ctx)");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001380 if (!state->Subscript_type) return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001381 state->Starred_type = make_type(state, "Starred", state->expr_type,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001382 Starred_fields, 2,
1383 "Starred(expr value, expr_context ctx)");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001384 if (!state->Starred_type) return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001385 state->Name_type = make_type(state, "Name", state->expr_type, Name_fields,
1386 2,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001387 "Name(identifier id, expr_context ctx)");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001388 if (!state->Name_type) return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001389 state->List_type = make_type(state, "List", state->expr_type, List_fields,
1390 2,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001391 "List(expr* elts, expr_context ctx)");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001392 if (!state->List_type) return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001393 state->Tuple_type = make_type(state, "Tuple", state->expr_type,
1394 Tuple_fields, 2,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001395 "Tuple(expr* elts, expr_context ctx)");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001396 if (!state->Tuple_type) return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001397 state->Slice_type = make_type(state, "Slice", state->expr_type,
1398 Slice_fields, 3,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001399 "Slice(expr? lower, expr? upper, expr? step)");
Serhiy Storchaka13d52c22020-03-10 18:52:34 +02001400 if (!state->Slice_type) return 0;
1401 if (PyObject_SetAttr(state->Slice_type, state->lower, Py_None) == -1)
1402 return 0;
1403 if (PyObject_SetAttr(state->Slice_type, state->upper, Py_None) == -1)
1404 return 0;
1405 if (PyObject_SetAttr(state->Slice_type, state->step, Py_None) == -1)
1406 return 0;
Brandt Bucher145bf262021-02-26 14:51:55 -08001407 state->MatchAs_type = make_type(state, "MatchAs", state->expr_type,
1408 MatchAs_fields, 2,
1409 "MatchAs(expr pattern, identifier name)");
1410 if (!state->MatchAs_type) return 0;
1411 state->MatchOr_type = make_type(state, "MatchOr", state->expr_type,
1412 MatchOr_fields, 1,
1413 "MatchOr(expr* patterns)");
1414 if (!state->MatchOr_type) return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001415 state->expr_context_type = make_type(state, "expr_context",
1416 state->AST_type, NULL, 0,
Serhiy Storchaka6b975982020-03-17 23:41:08 +02001417 "expr_context = Load | Store | Del");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001418 if (!state->expr_context_type) return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001419 if (!add_attributes(state, state->expr_context_type, NULL, 0)) return 0;
1420 state->Load_type = make_type(state, "Load", state->expr_context_type, NULL,
1421 0,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001422 "Load");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001423 if (!state->Load_type) return 0;
1424 state->Load_singleton = PyType_GenericNew((PyTypeObject *)state->Load_type,
1425 NULL, NULL);
1426 if (!state->Load_singleton) return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001427 state->Store_type = make_type(state, "Store", state->expr_context_type,
1428 NULL, 0,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001429 "Store");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001430 if (!state->Store_type) return 0;
1431 state->Store_singleton = PyType_GenericNew((PyTypeObject
1432 *)state->Store_type, NULL, NULL);
1433 if (!state->Store_singleton) return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001434 state->Del_type = make_type(state, "Del", state->expr_context_type, NULL, 0,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001435 "Del");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001436 if (!state->Del_type) return 0;
1437 state->Del_singleton = PyType_GenericNew((PyTypeObject *)state->Del_type,
1438 NULL, NULL);
1439 if (!state->Del_singleton) return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001440 state->boolop_type = make_type(state, "boolop", state->AST_type, NULL, 0,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001441 "boolop = And | Or");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001442 if (!state->boolop_type) return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001443 if (!add_attributes(state, state->boolop_type, NULL, 0)) return 0;
1444 state->And_type = make_type(state, "And", state->boolop_type, NULL, 0,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001445 "And");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001446 if (!state->And_type) return 0;
1447 state->And_singleton = PyType_GenericNew((PyTypeObject *)state->And_type,
1448 NULL, NULL);
1449 if (!state->And_singleton) return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001450 state->Or_type = make_type(state, "Or", state->boolop_type, NULL, 0,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001451 "Or");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001452 if (!state->Or_type) return 0;
1453 state->Or_singleton = PyType_GenericNew((PyTypeObject *)state->Or_type,
1454 NULL, NULL);
1455 if (!state->Or_singleton) return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001456 state->operator_type = make_type(state, "operator", state->AST_type, NULL,
1457 0,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001458 "operator = Add | Sub | Mult | MatMult | Div | Mod | Pow | LShift | RShift | BitOr | BitXor | BitAnd | FloorDiv");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001459 if (!state->operator_type) return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001460 if (!add_attributes(state, state->operator_type, NULL, 0)) return 0;
1461 state->Add_type = make_type(state, "Add", state->operator_type, NULL, 0,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001462 "Add");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001463 if (!state->Add_type) return 0;
1464 state->Add_singleton = PyType_GenericNew((PyTypeObject *)state->Add_type,
1465 NULL, NULL);
1466 if (!state->Add_singleton) return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001467 state->Sub_type = make_type(state, "Sub", state->operator_type, NULL, 0,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001468 "Sub");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001469 if (!state->Sub_type) return 0;
1470 state->Sub_singleton = PyType_GenericNew((PyTypeObject *)state->Sub_type,
1471 NULL, NULL);
1472 if (!state->Sub_singleton) return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001473 state->Mult_type = make_type(state, "Mult", state->operator_type, NULL, 0,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001474 "Mult");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001475 if (!state->Mult_type) return 0;
1476 state->Mult_singleton = PyType_GenericNew((PyTypeObject *)state->Mult_type,
1477 NULL, NULL);
1478 if (!state->Mult_singleton) return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001479 state->MatMult_type = make_type(state, "MatMult", state->operator_type,
1480 NULL, 0,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001481 "MatMult");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001482 if (!state->MatMult_type) return 0;
1483 state->MatMult_singleton = PyType_GenericNew((PyTypeObject
1484 *)state->MatMult_type, NULL,
1485 NULL);
1486 if (!state->MatMult_singleton) return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001487 state->Div_type = make_type(state, "Div", state->operator_type, NULL, 0,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001488 "Div");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001489 if (!state->Div_type) return 0;
1490 state->Div_singleton = PyType_GenericNew((PyTypeObject *)state->Div_type,
1491 NULL, NULL);
1492 if (!state->Div_singleton) return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001493 state->Mod_type = make_type(state, "Mod", state->operator_type, NULL, 0,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001494 "Mod");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001495 if (!state->Mod_type) return 0;
1496 state->Mod_singleton = PyType_GenericNew((PyTypeObject *)state->Mod_type,
1497 NULL, NULL);
1498 if (!state->Mod_singleton) return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001499 state->Pow_type = make_type(state, "Pow", state->operator_type, NULL, 0,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001500 "Pow");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001501 if (!state->Pow_type) return 0;
1502 state->Pow_singleton = PyType_GenericNew((PyTypeObject *)state->Pow_type,
1503 NULL, NULL);
1504 if (!state->Pow_singleton) return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001505 state->LShift_type = make_type(state, "LShift", state->operator_type, NULL,
1506 0,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001507 "LShift");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001508 if (!state->LShift_type) return 0;
1509 state->LShift_singleton = PyType_GenericNew((PyTypeObject
1510 *)state->LShift_type, NULL,
1511 NULL);
1512 if (!state->LShift_singleton) return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001513 state->RShift_type = make_type(state, "RShift", state->operator_type, NULL,
1514 0,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001515 "RShift");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001516 if (!state->RShift_type) return 0;
1517 state->RShift_singleton = PyType_GenericNew((PyTypeObject
1518 *)state->RShift_type, NULL,
1519 NULL);
1520 if (!state->RShift_singleton) return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001521 state->BitOr_type = make_type(state, "BitOr", state->operator_type, NULL, 0,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001522 "BitOr");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001523 if (!state->BitOr_type) return 0;
1524 state->BitOr_singleton = PyType_GenericNew((PyTypeObject
1525 *)state->BitOr_type, NULL, NULL);
1526 if (!state->BitOr_singleton) return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001527 state->BitXor_type = make_type(state, "BitXor", state->operator_type, NULL,
1528 0,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001529 "BitXor");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001530 if (!state->BitXor_type) return 0;
1531 state->BitXor_singleton = PyType_GenericNew((PyTypeObject
1532 *)state->BitXor_type, NULL,
1533 NULL);
1534 if (!state->BitXor_singleton) return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001535 state->BitAnd_type = make_type(state, "BitAnd", state->operator_type, NULL,
1536 0,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001537 "BitAnd");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001538 if (!state->BitAnd_type) return 0;
1539 state->BitAnd_singleton = PyType_GenericNew((PyTypeObject
1540 *)state->BitAnd_type, NULL,
1541 NULL);
1542 if (!state->BitAnd_singleton) return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001543 state->FloorDiv_type = make_type(state, "FloorDiv", state->operator_type,
1544 NULL, 0,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001545 "FloorDiv");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001546 if (!state->FloorDiv_type) return 0;
1547 state->FloorDiv_singleton = PyType_GenericNew((PyTypeObject
1548 *)state->FloorDiv_type, NULL,
1549 NULL);
1550 if (!state->FloorDiv_singleton) return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001551 state->unaryop_type = make_type(state, "unaryop", state->AST_type, NULL, 0,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001552 "unaryop = Invert | Not | UAdd | USub");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001553 if (!state->unaryop_type) return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001554 if (!add_attributes(state, state->unaryop_type, NULL, 0)) return 0;
1555 state->Invert_type = make_type(state, "Invert", state->unaryop_type, NULL,
1556 0,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001557 "Invert");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001558 if (!state->Invert_type) return 0;
1559 state->Invert_singleton = PyType_GenericNew((PyTypeObject
1560 *)state->Invert_type, NULL,
1561 NULL);
1562 if (!state->Invert_singleton) return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001563 state->Not_type = make_type(state, "Not", state->unaryop_type, NULL, 0,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001564 "Not");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001565 if (!state->Not_type) return 0;
1566 state->Not_singleton = PyType_GenericNew((PyTypeObject *)state->Not_type,
1567 NULL, NULL);
1568 if (!state->Not_singleton) return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001569 state->UAdd_type = make_type(state, "UAdd", state->unaryop_type, NULL, 0,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001570 "UAdd");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001571 if (!state->UAdd_type) return 0;
1572 state->UAdd_singleton = PyType_GenericNew((PyTypeObject *)state->UAdd_type,
1573 NULL, NULL);
1574 if (!state->UAdd_singleton) return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001575 state->USub_type = make_type(state, "USub", state->unaryop_type, NULL, 0,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001576 "USub");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001577 if (!state->USub_type) return 0;
1578 state->USub_singleton = PyType_GenericNew((PyTypeObject *)state->USub_type,
1579 NULL, NULL);
1580 if (!state->USub_singleton) return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001581 state->cmpop_type = make_type(state, "cmpop", state->AST_type, NULL, 0,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001582 "cmpop = Eq | NotEq | Lt | LtE | Gt | GtE | Is | IsNot | In | NotIn");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001583 if (!state->cmpop_type) return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001584 if (!add_attributes(state, state->cmpop_type, NULL, 0)) return 0;
1585 state->Eq_type = make_type(state, "Eq", state->cmpop_type, NULL, 0,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001586 "Eq");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001587 if (!state->Eq_type) return 0;
1588 state->Eq_singleton = PyType_GenericNew((PyTypeObject *)state->Eq_type,
1589 NULL, NULL);
1590 if (!state->Eq_singleton) return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001591 state->NotEq_type = make_type(state, "NotEq", state->cmpop_type, NULL, 0,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001592 "NotEq");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001593 if (!state->NotEq_type) return 0;
1594 state->NotEq_singleton = PyType_GenericNew((PyTypeObject
1595 *)state->NotEq_type, NULL, NULL);
1596 if (!state->NotEq_singleton) return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001597 state->Lt_type = make_type(state, "Lt", state->cmpop_type, NULL, 0,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001598 "Lt");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001599 if (!state->Lt_type) return 0;
1600 state->Lt_singleton = PyType_GenericNew((PyTypeObject *)state->Lt_type,
1601 NULL, NULL);
1602 if (!state->Lt_singleton) return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001603 state->LtE_type = make_type(state, "LtE", state->cmpop_type, NULL, 0,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001604 "LtE");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001605 if (!state->LtE_type) return 0;
1606 state->LtE_singleton = PyType_GenericNew((PyTypeObject *)state->LtE_type,
1607 NULL, NULL);
1608 if (!state->LtE_singleton) return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001609 state->Gt_type = make_type(state, "Gt", state->cmpop_type, NULL, 0,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001610 "Gt");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001611 if (!state->Gt_type) return 0;
1612 state->Gt_singleton = PyType_GenericNew((PyTypeObject *)state->Gt_type,
1613 NULL, NULL);
1614 if (!state->Gt_singleton) return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001615 state->GtE_type = make_type(state, "GtE", state->cmpop_type, NULL, 0,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001616 "GtE");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001617 if (!state->GtE_type) return 0;
1618 state->GtE_singleton = PyType_GenericNew((PyTypeObject *)state->GtE_type,
1619 NULL, NULL);
1620 if (!state->GtE_singleton) return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001621 state->Is_type = make_type(state, "Is", state->cmpop_type, NULL, 0,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001622 "Is");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001623 if (!state->Is_type) return 0;
1624 state->Is_singleton = PyType_GenericNew((PyTypeObject *)state->Is_type,
1625 NULL, NULL);
1626 if (!state->Is_singleton) return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001627 state->IsNot_type = make_type(state, "IsNot", state->cmpop_type, NULL, 0,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001628 "IsNot");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001629 if (!state->IsNot_type) return 0;
1630 state->IsNot_singleton = PyType_GenericNew((PyTypeObject
1631 *)state->IsNot_type, NULL, NULL);
1632 if (!state->IsNot_singleton) return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001633 state->In_type = make_type(state, "In", state->cmpop_type, NULL, 0,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001634 "In");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001635 if (!state->In_type) return 0;
1636 state->In_singleton = PyType_GenericNew((PyTypeObject *)state->In_type,
1637 NULL, NULL);
1638 if (!state->In_singleton) return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001639 state->NotIn_type = make_type(state, "NotIn", state->cmpop_type, NULL, 0,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001640 "NotIn");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001641 if (!state->NotIn_type) return 0;
1642 state->NotIn_singleton = PyType_GenericNew((PyTypeObject
1643 *)state->NotIn_type, NULL, NULL);
1644 if (!state->NotIn_singleton) return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001645 state->comprehension_type = make_type(state, "comprehension",
1646 state->AST_type,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001647 comprehension_fields, 4,
1648 "comprehension(expr target, expr iter, expr* ifs, int is_async)");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001649 if (!state->comprehension_type) return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001650 if (!add_attributes(state, state->comprehension_type, NULL, 0)) return 0;
1651 state->excepthandler_type = make_type(state, "excepthandler",
1652 state->AST_type, NULL, 0,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001653 "excepthandler = ExceptHandler(expr? type, identifier? name, stmt* body)");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001654 if (!state->excepthandler_type) return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001655 if (!add_attributes(state, state->excepthandler_type,
1656 excepthandler_attributes, 4)) return 0;
Serhiy Storchakab7e95252020-03-10 00:07:47 +02001657 if (PyObject_SetAttr(state->excepthandler_type, state->end_lineno, Py_None)
1658 == -1)
1659 return 0;
1660 if (PyObject_SetAttr(state->excepthandler_type, state->end_col_offset,
1661 Py_None) == -1)
1662 return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001663 state->ExceptHandler_type = make_type(state, "ExceptHandler",
Dino Viehlandac46eb42019-09-11 10:16:34 -07001664 state->excepthandler_type,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001665 ExceptHandler_fields, 3,
1666 "ExceptHandler(expr? type, identifier? name, stmt* body)");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001667 if (!state->ExceptHandler_type) return 0;
Serhiy Storchakab7e95252020-03-10 00:07:47 +02001668 if (PyObject_SetAttr(state->ExceptHandler_type, state->type, Py_None) == -1)
1669 return 0;
1670 if (PyObject_SetAttr(state->ExceptHandler_type, state->name, Py_None) == -1)
1671 return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001672 state->arguments_type = make_type(state, "arguments", state->AST_type,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001673 arguments_fields, 7,
1674 "arguments(arg* posonlyargs, arg* args, arg? vararg, arg* kwonlyargs, expr* kw_defaults, arg? kwarg, expr* defaults)");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001675 if (!state->arguments_type) return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001676 if (!add_attributes(state, state->arguments_type, NULL, 0)) return 0;
Serhiy Storchakab7e95252020-03-10 00:07:47 +02001677 if (PyObject_SetAttr(state->arguments_type, state->vararg, Py_None) == -1)
1678 return 0;
1679 if (PyObject_SetAttr(state->arguments_type, state->kwarg, Py_None) == -1)
1680 return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001681 state->arg_type = make_type(state, "arg", state->AST_type, arg_fields, 3,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001682 "arg(identifier arg, expr? annotation, string? type_comment)");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001683 if (!state->arg_type) return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001684 if (!add_attributes(state, state->arg_type, arg_attributes, 4)) return 0;
Serhiy Storchakab7e95252020-03-10 00:07:47 +02001685 if (PyObject_SetAttr(state->arg_type, state->annotation, Py_None) == -1)
1686 return 0;
1687 if (PyObject_SetAttr(state->arg_type, state->type_comment, Py_None) == -1)
1688 return 0;
1689 if (PyObject_SetAttr(state->arg_type, state->end_lineno, Py_None) == -1)
1690 return 0;
1691 if (PyObject_SetAttr(state->arg_type, state->end_col_offset, Py_None) == -1)
1692 return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001693 state->keyword_type = make_type(state, "keyword", state->AST_type,
1694 keyword_fields, 2,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001695 "keyword(identifier? arg, expr value)");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001696 if (!state->keyword_type) return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001697 if (!add_attributes(state, state->keyword_type, keyword_attributes, 4))
1698 return 0;
Serhiy Storchakab7e95252020-03-10 00:07:47 +02001699 if (PyObject_SetAttr(state->keyword_type, state->arg, Py_None) == -1)
1700 return 0;
Pablo Galindo168660b2020-04-02 00:47:39 +01001701 if (PyObject_SetAttr(state->keyword_type, state->end_lineno, Py_None) == -1)
1702 return 0;
1703 if (PyObject_SetAttr(state->keyword_type, state->end_col_offset, Py_None)
1704 == -1)
1705 return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001706 state->alias_type = make_type(state, "alias", state->AST_type,
1707 alias_fields, 2,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001708 "alias(identifier name, identifier? asname)");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001709 if (!state->alias_type) return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001710 if (!add_attributes(state, state->alias_type, NULL, 0)) return 0;
Serhiy Storchakab7e95252020-03-10 00:07:47 +02001711 if (PyObject_SetAttr(state->alias_type, state->asname, Py_None) == -1)
1712 return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001713 state->withitem_type = make_type(state, "withitem", state->AST_type,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001714 withitem_fields, 2,
1715 "withitem(expr context_expr, expr? optional_vars)");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001716 if (!state->withitem_type) return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001717 if (!add_attributes(state, state->withitem_type, NULL, 0)) return 0;
Serhiy Storchakab7e95252020-03-10 00:07:47 +02001718 if (PyObject_SetAttr(state->withitem_type, state->optional_vars, Py_None)
1719 == -1)
1720 return 0;
Brandt Bucher145bf262021-02-26 14:51:55 -08001721 state->match_case_type = make_type(state, "match_case", state->AST_type,
1722 match_case_fields, 3,
1723 "match_case(expr pattern, expr? guard, stmt* body)");
1724 if (!state->match_case_type) return 0;
1725 if (!add_attributes(state, state->match_case_type, NULL, 0)) return 0;
1726 if (PyObject_SetAttr(state->match_case_type, state->guard, Py_None) == -1)
1727 return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001728 state->type_ignore_type = make_type(state, "type_ignore", state->AST_type,
1729 NULL, 0,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001730 "type_ignore = TypeIgnore(int lineno, string tag)");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001731 if (!state->type_ignore_type) return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001732 if (!add_attributes(state, state->type_ignore_type, NULL, 0)) return 0;
1733 state->TypeIgnore_type = make_type(state, "TypeIgnore",
1734 state->type_ignore_type,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001735 TypeIgnore_fields, 2,
1736 "TypeIgnore(int lineno, string tag)");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001737 if (!state->TypeIgnore_type) return 0;
Victor Stinnerfd957c12020-11-03 18:07:15 +01001738
Dino Viehlandac46eb42019-09-11 10:16:34 -07001739 state->initialized = 1;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02001740 return 1;
Martin v. Löwisbd260da2006-02-26 19:42:26 +00001741}
Neal Norwitz7b5a6042005-11-13 19:14:20 +00001742
Victor Stinner5cf47822020-11-02 22:03:28 +01001743static int obj2ast_mod(struct ast_state *state, PyObject* obj, mod_ty* out,
Victor Stinner74419f02020-07-03 11:35:37 +02001744 PyArena* arena);
Victor Stinner5cf47822020-11-02 22:03:28 +01001745static int obj2ast_stmt(struct ast_state *state, PyObject* obj, stmt_ty* out,
Victor Stinner74419f02020-07-03 11:35:37 +02001746 PyArena* arena);
Victor Stinner5cf47822020-11-02 22:03:28 +01001747static int obj2ast_expr(struct ast_state *state, PyObject* obj, expr_ty* out,
Victor Stinner74419f02020-07-03 11:35:37 +02001748 PyArena* arena);
Victor Stinner5cf47822020-11-02 22:03:28 +01001749static int obj2ast_expr_context(struct ast_state *state, PyObject* obj,
Victor Stinner74419f02020-07-03 11:35:37 +02001750 expr_context_ty* out, PyArena* arena);
Victor Stinner5cf47822020-11-02 22:03:28 +01001751static int obj2ast_boolop(struct ast_state *state, PyObject* obj, boolop_ty*
1752 out, PyArena* arena);
1753static int obj2ast_operator(struct ast_state *state, PyObject* obj,
1754 operator_ty* out, PyArena* arena);
1755static int obj2ast_unaryop(struct ast_state *state, PyObject* obj, unaryop_ty*
Victor Stinner74419f02020-07-03 11:35:37 +02001756 out, PyArena* arena);
Victor Stinner5cf47822020-11-02 22:03:28 +01001757static int obj2ast_cmpop(struct ast_state *state, PyObject* obj, cmpop_ty* out,
Victor Stinner74419f02020-07-03 11:35:37 +02001758 PyArena* arena);
Victor Stinner5cf47822020-11-02 22:03:28 +01001759static int obj2ast_comprehension(struct ast_state *state, PyObject* obj,
Victor Stinner74419f02020-07-03 11:35:37 +02001760 comprehension_ty* out, PyArena* arena);
Victor Stinner5cf47822020-11-02 22:03:28 +01001761static int obj2ast_excepthandler(struct ast_state *state, PyObject* obj,
Victor Stinner74419f02020-07-03 11:35:37 +02001762 excepthandler_ty* out, PyArena* arena);
Victor Stinner5cf47822020-11-02 22:03:28 +01001763static int obj2ast_arguments(struct ast_state *state, PyObject* obj,
Victor Stinner74419f02020-07-03 11:35:37 +02001764 arguments_ty* out, PyArena* arena);
Victor Stinner5cf47822020-11-02 22:03:28 +01001765static int obj2ast_arg(struct ast_state *state, PyObject* obj, arg_ty* out,
Victor Stinner74419f02020-07-03 11:35:37 +02001766 PyArena* arena);
Victor Stinner5cf47822020-11-02 22:03:28 +01001767static int obj2ast_keyword(struct ast_state *state, PyObject* obj, keyword_ty*
Victor Stinner74419f02020-07-03 11:35:37 +02001768 out, PyArena* arena);
Victor Stinner5cf47822020-11-02 22:03:28 +01001769static int obj2ast_alias(struct ast_state *state, PyObject* obj, alias_ty* out,
Victor Stinner74419f02020-07-03 11:35:37 +02001770 PyArena* arena);
Victor Stinner5cf47822020-11-02 22:03:28 +01001771static int obj2ast_withitem(struct ast_state *state, PyObject* obj,
1772 withitem_ty* out, PyArena* arena);
Brandt Bucher145bf262021-02-26 14:51:55 -08001773static int obj2ast_match_case(struct ast_state *state, PyObject* obj,
1774 match_case_ty* out, PyArena* arena);
Victor Stinner5cf47822020-11-02 22:03:28 +01001775static int obj2ast_type_ignore(struct ast_state *state, PyObject* obj,
Victor Stinner74419f02020-07-03 11:35:37 +02001776 type_ignore_ty* out, PyArena* arena);
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00001777
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001778mod_ty
Victor Stinnerd27f8d22021-04-07 21:34:22 +02001779_PyAST_Module(asdl_stmt_seq * body, asdl_type_ignore_seq * type_ignores,
1780 PyArena *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001781{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02001782 mod_ty p;
Victor Stinner8370e072021-03-24 02:23:01 +01001783 p = (mod_ty)_PyArena_Malloc(arena, sizeof(*p));
Victor Stinnerce72e1c2013-07-27 00:00:36 +02001784 if (!p)
1785 return NULL;
1786 p->kind = Module_kind;
1787 p->v.Module.body = body;
Guido van Rossumdcfcd142019-01-31 03:40:27 -08001788 p->v.Module.type_ignores = type_ignores;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02001789 return p;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001790}
1791
1792mod_ty
Victor Stinnerd27f8d22021-04-07 21:34:22 +02001793_PyAST_Interactive(asdl_stmt_seq * body, PyArena *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001794{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02001795 mod_ty p;
Victor Stinner8370e072021-03-24 02:23:01 +01001796 p = (mod_ty)_PyArena_Malloc(arena, sizeof(*p));
Victor Stinnerce72e1c2013-07-27 00:00:36 +02001797 if (!p)
1798 return NULL;
1799 p->kind = Interactive_kind;
1800 p->v.Interactive.body = body;
1801 return p;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001802}
1803
1804mod_ty
Victor Stinnerd27f8d22021-04-07 21:34:22 +02001805_PyAST_Expression(expr_ty body, PyArena *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001806{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02001807 mod_ty p;
1808 if (!body) {
1809 PyErr_SetString(PyExc_ValueError,
Batuhan Taskaya091951a2020-05-06 17:29:32 +03001810 "field 'body' is required for Expression");
Victor Stinnerce72e1c2013-07-27 00:00:36 +02001811 return NULL;
1812 }
Victor Stinner8370e072021-03-24 02:23:01 +01001813 p = (mod_ty)_PyArena_Malloc(arena, sizeof(*p));
Victor Stinnerce72e1c2013-07-27 00:00:36 +02001814 if (!p)
1815 return NULL;
1816 p->kind = Expression_kind;
1817 p->v.Expression.body = body;
1818 return p;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001819}
1820
1821mod_ty
Victor Stinnerd27f8d22021-04-07 21:34:22 +02001822_PyAST_FunctionType(asdl_expr_seq * argtypes, expr_ty returns, PyArena *arena)
Guido van Rossumdcfcd142019-01-31 03:40:27 -08001823{
1824 mod_ty p;
1825 if (!returns) {
1826 PyErr_SetString(PyExc_ValueError,
Batuhan Taskaya091951a2020-05-06 17:29:32 +03001827 "field 'returns' is required for FunctionType");
Guido van Rossumdcfcd142019-01-31 03:40:27 -08001828 return NULL;
1829 }
Victor Stinner8370e072021-03-24 02:23:01 +01001830 p = (mod_ty)_PyArena_Malloc(arena, sizeof(*p));
Guido van Rossumdcfcd142019-01-31 03:40:27 -08001831 if (!p)
1832 return NULL;
1833 p->kind = FunctionType_kind;
1834 p->v.FunctionType.argtypes = argtypes;
1835 p->v.FunctionType.returns = returns;
1836 return p;
1837}
1838
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001839stmt_ty
Victor Stinnerd27f8d22021-04-07 21:34:22 +02001840_PyAST_FunctionDef(identifier name, arguments_ty args, asdl_stmt_seq * body,
1841 asdl_expr_seq * decorator_list, expr_ty returns, string
1842 type_comment, int lineno, int col_offset, int end_lineno,
1843 int end_col_offset, PyArena *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001844{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02001845 stmt_ty p;
1846 if (!name) {
1847 PyErr_SetString(PyExc_ValueError,
Batuhan Taskaya091951a2020-05-06 17:29:32 +03001848 "field 'name' is required for FunctionDef");
Victor Stinnerce72e1c2013-07-27 00:00:36 +02001849 return NULL;
1850 }
1851 if (!args) {
1852 PyErr_SetString(PyExc_ValueError,
Batuhan Taskaya091951a2020-05-06 17:29:32 +03001853 "field 'args' is required for FunctionDef");
Victor Stinnerce72e1c2013-07-27 00:00:36 +02001854 return NULL;
1855 }
Victor Stinner8370e072021-03-24 02:23:01 +01001856 p = (stmt_ty)_PyArena_Malloc(arena, sizeof(*p));
Victor Stinnerce72e1c2013-07-27 00:00:36 +02001857 if (!p)
1858 return NULL;
1859 p->kind = FunctionDef_kind;
1860 p->v.FunctionDef.name = name;
1861 p->v.FunctionDef.args = args;
1862 p->v.FunctionDef.body = body;
1863 p->v.FunctionDef.decorator_list = decorator_list;
1864 p->v.FunctionDef.returns = returns;
Guido van Rossumdcfcd142019-01-31 03:40:27 -08001865 p->v.FunctionDef.type_comment = type_comment;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02001866 p->lineno = lineno;
1867 p->col_offset = col_offset;
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00001868 p->end_lineno = end_lineno;
1869 p->end_col_offset = end_col_offset;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02001870 return p;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001871}
1872
1873stmt_ty
Victor Stinnerd27f8d22021-04-07 21:34:22 +02001874_PyAST_AsyncFunctionDef(identifier name, arguments_ty args, asdl_stmt_seq *
1875 body, asdl_expr_seq * decorator_list, expr_ty returns,
1876 string type_comment, int lineno, int col_offset, int
1877 end_lineno, int end_col_offset, PyArena *arena)
Yury Selivanov75445082015-05-11 22:57:16 -04001878{
1879 stmt_ty p;
1880 if (!name) {
1881 PyErr_SetString(PyExc_ValueError,
Batuhan Taskaya091951a2020-05-06 17:29:32 +03001882 "field 'name' is required for AsyncFunctionDef");
Yury Selivanov75445082015-05-11 22:57:16 -04001883 return NULL;
1884 }
1885 if (!args) {
1886 PyErr_SetString(PyExc_ValueError,
Batuhan Taskaya091951a2020-05-06 17:29:32 +03001887 "field 'args' is required for AsyncFunctionDef");
Yury Selivanov75445082015-05-11 22:57:16 -04001888 return NULL;
1889 }
Victor Stinner8370e072021-03-24 02:23:01 +01001890 p = (stmt_ty)_PyArena_Malloc(arena, sizeof(*p));
Yury Selivanov75445082015-05-11 22:57:16 -04001891 if (!p)
1892 return NULL;
1893 p->kind = AsyncFunctionDef_kind;
1894 p->v.AsyncFunctionDef.name = name;
1895 p->v.AsyncFunctionDef.args = args;
1896 p->v.AsyncFunctionDef.body = body;
1897 p->v.AsyncFunctionDef.decorator_list = decorator_list;
1898 p->v.AsyncFunctionDef.returns = returns;
Guido van Rossumdcfcd142019-01-31 03:40:27 -08001899 p->v.AsyncFunctionDef.type_comment = type_comment;
Yury Selivanov75445082015-05-11 22:57:16 -04001900 p->lineno = lineno;
1901 p->col_offset = col_offset;
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00001902 p->end_lineno = end_lineno;
1903 p->end_col_offset = end_col_offset;
Yury Selivanov75445082015-05-11 22:57:16 -04001904 return p;
1905}
1906
1907stmt_ty
Victor Stinnerd27f8d22021-04-07 21:34:22 +02001908_PyAST_ClassDef(identifier name, asdl_expr_seq * bases, asdl_keyword_seq *
1909 keywords, asdl_stmt_seq * body, asdl_expr_seq * decorator_list,
1910 int lineno, int col_offset, int end_lineno, int end_col_offset,
1911 PyArena *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001912{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02001913 stmt_ty p;
1914 if (!name) {
1915 PyErr_SetString(PyExc_ValueError,
Batuhan Taskaya091951a2020-05-06 17:29:32 +03001916 "field 'name' is required for ClassDef");
Victor Stinnerce72e1c2013-07-27 00:00:36 +02001917 return NULL;
1918 }
Victor Stinner8370e072021-03-24 02:23:01 +01001919 p = (stmt_ty)_PyArena_Malloc(arena, sizeof(*p));
Victor Stinnerce72e1c2013-07-27 00:00:36 +02001920 if (!p)
1921 return NULL;
1922 p->kind = ClassDef_kind;
1923 p->v.ClassDef.name = name;
1924 p->v.ClassDef.bases = bases;
1925 p->v.ClassDef.keywords = keywords;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02001926 p->v.ClassDef.body = body;
1927 p->v.ClassDef.decorator_list = decorator_list;
1928 p->lineno = lineno;
1929 p->col_offset = col_offset;
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00001930 p->end_lineno = end_lineno;
1931 p->end_col_offset = end_col_offset;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02001932 return p;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001933}
1934
1935stmt_ty
Victor Stinnerd27f8d22021-04-07 21:34:22 +02001936_PyAST_Return(expr_ty value, int lineno, int col_offset, int end_lineno, int
1937 end_col_offset, PyArena *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001938{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02001939 stmt_ty p;
Victor Stinner8370e072021-03-24 02:23:01 +01001940 p = (stmt_ty)_PyArena_Malloc(arena, sizeof(*p));
Victor Stinnerce72e1c2013-07-27 00:00:36 +02001941 if (!p)
1942 return NULL;
1943 p->kind = Return_kind;
1944 p->v.Return.value = value;
1945 p->lineno = lineno;
1946 p->col_offset = col_offset;
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00001947 p->end_lineno = end_lineno;
1948 p->end_col_offset = end_col_offset;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02001949 return p;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001950}
1951
1952stmt_ty
Victor Stinnerd27f8d22021-04-07 21:34:22 +02001953_PyAST_Delete(asdl_expr_seq * targets, int lineno, int col_offset, int
1954 end_lineno, int end_col_offset, PyArena *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001955{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02001956 stmt_ty p;
Victor Stinner8370e072021-03-24 02:23:01 +01001957 p = (stmt_ty)_PyArena_Malloc(arena, sizeof(*p));
Victor Stinnerce72e1c2013-07-27 00:00:36 +02001958 if (!p)
1959 return NULL;
1960 p->kind = Delete_kind;
1961 p->v.Delete.targets = targets;
1962 p->lineno = lineno;
1963 p->col_offset = col_offset;
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00001964 p->end_lineno = end_lineno;
1965 p->end_col_offset = end_col_offset;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02001966 return p;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001967}
1968
1969stmt_ty
Victor Stinnerd27f8d22021-04-07 21:34:22 +02001970_PyAST_Assign(asdl_expr_seq * targets, expr_ty value, string type_comment, int
1971 lineno, int col_offset, int end_lineno, int end_col_offset,
1972 PyArena *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001973{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02001974 stmt_ty p;
1975 if (!value) {
1976 PyErr_SetString(PyExc_ValueError,
Batuhan Taskaya091951a2020-05-06 17:29:32 +03001977 "field 'value' is required for Assign");
Victor Stinnerce72e1c2013-07-27 00:00:36 +02001978 return NULL;
1979 }
Victor Stinner8370e072021-03-24 02:23:01 +01001980 p = (stmt_ty)_PyArena_Malloc(arena, sizeof(*p));
Victor Stinnerce72e1c2013-07-27 00:00:36 +02001981 if (!p)
1982 return NULL;
1983 p->kind = Assign_kind;
1984 p->v.Assign.targets = targets;
1985 p->v.Assign.value = value;
Guido van Rossumdcfcd142019-01-31 03:40:27 -08001986 p->v.Assign.type_comment = type_comment;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02001987 p->lineno = lineno;
1988 p->col_offset = col_offset;
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00001989 p->end_lineno = end_lineno;
1990 p->end_col_offset = end_col_offset;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02001991 return p;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001992}
1993
1994stmt_ty
Victor Stinnerd27f8d22021-04-07 21:34:22 +02001995_PyAST_AugAssign(expr_ty target, operator_ty op, expr_ty value, int lineno, int
1996 col_offset, int end_lineno, int end_col_offset, PyArena *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001997{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02001998 stmt_ty p;
1999 if (!target) {
2000 PyErr_SetString(PyExc_ValueError,
Batuhan Taskaya091951a2020-05-06 17:29:32 +03002001 "field 'target' is required for AugAssign");
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002002 return NULL;
2003 }
2004 if (!op) {
2005 PyErr_SetString(PyExc_ValueError,
Batuhan Taskaya091951a2020-05-06 17:29:32 +03002006 "field 'op' is required for AugAssign");
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002007 return NULL;
2008 }
2009 if (!value) {
2010 PyErr_SetString(PyExc_ValueError,
Batuhan Taskaya091951a2020-05-06 17:29:32 +03002011 "field 'value' is required for AugAssign");
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002012 return NULL;
2013 }
Victor Stinner8370e072021-03-24 02:23:01 +01002014 p = (stmt_ty)_PyArena_Malloc(arena, sizeof(*p));
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002015 if (!p)
2016 return NULL;
2017 p->kind = AugAssign_kind;
2018 p->v.AugAssign.target = target;
2019 p->v.AugAssign.op = op;
2020 p->v.AugAssign.value = value;
2021 p->lineno = lineno;
2022 p->col_offset = col_offset;
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00002023 p->end_lineno = end_lineno;
2024 p->end_col_offset = end_col_offset;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002025 return p;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002026}
2027
2028stmt_ty
Victor Stinnerd27f8d22021-04-07 21:34:22 +02002029_PyAST_AnnAssign(expr_ty target, expr_ty annotation, expr_ty value, int simple,
2030 int lineno, int col_offset, int end_lineno, int
2031 end_col_offset, PyArena *arena)
Yury Selivanovf8cb8a12016-09-08 20:50:03 -07002032{
2033 stmt_ty p;
2034 if (!target) {
2035 PyErr_SetString(PyExc_ValueError,
Batuhan Taskaya091951a2020-05-06 17:29:32 +03002036 "field 'target' is required for AnnAssign");
Yury Selivanovf8cb8a12016-09-08 20:50:03 -07002037 return NULL;
2038 }
2039 if (!annotation) {
2040 PyErr_SetString(PyExc_ValueError,
Batuhan Taskaya091951a2020-05-06 17:29:32 +03002041 "field 'annotation' is required for AnnAssign");
Yury Selivanovf8cb8a12016-09-08 20:50:03 -07002042 return NULL;
2043 }
Victor Stinner8370e072021-03-24 02:23:01 +01002044 p = (stmt_ty)_PyArena_Malloc(arena, sizeof(*p));
Yury Selivanovf8cb8a12016-09-08 20:50:03 -07002045 if (!p)
2046 return NULL;
2047 p->kind = AnnAssign_kind;
2048 p->v.AnnAssign.target = target;
2049 p->v.AnnAssign.annotation = annotation;
2050 p->v.AnnAssign.value = value;
2051 p->v.AnnAssign.simple = simple;
2052 p->lineno = lineno;
2053 p->col_offset = col_offset;
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00002054 p->end_lineno = end_lineno;
2055 p->end_col_offset = end_col_offset;
Yury Selivanovf8cb8a12016-09-08 20:50:03 -07002056 return p;
2057}
2058
2059stmt_ty
Victor Stinnerd27f8d22021-04-07 21:34:22 +02002060_PyAST_For(expr_ty target, expr_ty iter, asdl_stmt_seq * body, asdl_stmt_seq *
2061 orelse, string type_comment, int lineno, int col_offset, int
2062 end_lineno, int end_col_offset, PyArena *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002063{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002064 stmt_ty p;
2065 if (!target) {
2066 PyErr_SetString(PyExc_ValueError,
Batuhan Taskaya091951a2020-05-06 17:29:32 +03002067 "field 'target' is required for For");
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002068 return NULL;
2069 }
2070 if (!iter) {
2071 PyErr_SetString(PyExc_ValueError,
Batuhan Taskaya091951a2020-05-06 17:29:32 +03002072 "field 'iter' is required for For");
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002073 return NULL;
2074 }
Victor Stinner8370e072021-03-24 02:23:01 +01002075 p = (stmt_ty)_PyArena_Malloc(arena, sizeof(*p));
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002076 if (!p)
2077 return NULL;
2078 p->kind = For_kind;
2079 p->v.For.target = target;
2080 p->v.For.iter = iter;
2081 p->v.For.body = body;
2082 p->v.For.orelse = orelse;
Guido van Rossumdcfcd142019-01-31 03:40:27 -08002083 p->v.For.type_comment = type_comment;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002084 p->lineno = lineno;
2085 p->col_offset = col_offset;
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00002086 p->end_lineno = end_lineno;
2087 p->end_col_offset = end_col_offset;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002088 return p;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002089}
2090
2091stmt_ty
Victor Stinnerd27f8d22021-04-07 21:34:22 +02002092_PyAST_AsyncFor(expr_ty target, expr_ty iter, asdl_stmt_seq * body,
2093 asdl_stmt_seq * orelse, string type_comment, int lineno, int
2094 col_offset, int end_lineno, int end_col_offset, PyArena *arena)
Yury Selivanov75445082015-05-11 22:57:16 -04002095{
2096 stmt_ty p;
2097 if (!target) {
2098 PyErr_SetString(PyExc_ValueError,
Batuhan Taskaya091951a2020-05-06 17:29:32 +03002099 "field 'target' is required for AsyncFor");
Yury Selivanov75445082015-05-11 22:57:16 -04002100 return NULL;
2101 }
2102 if (!iter) {
2103 PyErr_SetString(PyExc_ValueError,
Batuhan Taskaya091951a2020-05-06 17:29:32 +03002104 "field 'iter' is required for AsyncFor");
Yury Selivanov75445082015-05-11 22:57:16 -04002105 return NULL;
2106 }
Victor Stinner8370e072021-03-24 02:23:01 +01002107 p = (stmt_ty)_PyArena_Malloc(arena, sizeof(*p));
Yury Selivanov75445082015-05-11 22:57:16 -04002108 if (!p)
2109 return NULL;
2110 p->kind = AsyncFor_kind;
2111 p->v.AsyncFor.target = target;
2112 p->v.AsyncFor.iter = iter;
2113 p->v.AsyncFor.body = body;
2114 p->v.AsyncFor.orelse = orelse;
Guido van Rossumdcfcd142019-01-31 03:40:27 -08002115 p->v.AsyncFor.type_comment = type_comment;
Yury Selivanov75445082015-05-11 22:57:16 -04002116 p->lineno = lineno;
2117 p->col_offset = col_offset;
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00002118 p->end_lineno = end_lineno;
2119 p->end_col_offset = end_col_offset;
Yury Selivanov75445082015-05-11 22:57:16 -04002120 return p;
2121}
2122
2123stmt_ty
Victor Stinnerd27f8d22021-04-07 21:34:22 +02002124_PyAST_While(expr_ty test, asdl_stmt_seq * body, asdl_stmt_seq * orelse, int
2125 lineno, int col_offset, int end_lineno, int end_col_offset,
2126 PyArena *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002127{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002128 stmt_ty p;
2129 if (!test) {
2130 PyErr_SetString(PyExc_ValueError,
Batuhan Taskaya091951a2020-05-06 17:29:32 +03002131 "field 'test' is required for While");
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002132 return NULL;
2133 }
Victor Stinner8370e072021-03-24 02:23:01 +01002134 p = (stmt_ty)_PyArena_Malloc(arena, sizeof(*p));
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002135 if (!p)
2136 return NULL;
2137 p->kind = While_kind;
2138 p->v.While.test = test;
2139 p->v.While.body = body;
2140 p->v.While.orelse = orelse;
2141 p->lineno = lineno;
2142 p->col_offset = col_offset;
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00002143 p->end_lineno = end_lineno;
2144 p->end_col_offset = end_col_offset;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002145 return p;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002146}
2147
2148stmt_ty
Victor Stinnerd27f8d22021-04-07 21:34:22 +02002149_PyAST_If(expr_ty test, asdl_stmt_seq * body, asdl_stmt_seq * orelse, int
2150 lineno, int col_offset, int end_lineno, int end_col_offset, PyArena
2151 *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002152{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002153 stmt_ty p;
2154 if (!test) {
2155 PyErr_SetString(PyExc_ValueError,
Batuhan Taskaya091951a2020-05-06 17:29:32 +03002156 "field 'test' is required for If");
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002157 return NULL;
2158 }
Victor Stinner8370e072021-03-24 02:23:01 +01002159 p = (stmt_ty)_PyArena_Malloc(arena, sizeof(*p));
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002160 if (!p)
2161 return NULL;
2162 p->kind = If_kind;
2163 p->v.If.test = test;
2164 p->v.If.body = body;
2165 p->v.If.orelse = orelse;
2166 p->lineno = lineno;
2167 p->col_offset = col_offset;
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00002168 p->end_lineno = end_lineno;
2169 p->end_col_offset = end_col_offset;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002170 return p;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002171}
2172
2173stmt_ty
Victor Stinnerd27f8d22021-04-07 21:34:22 +02002174_PyAST_With(asdl_withitem_seq * items, asdl_stmt_seq * body, string
2175 type_comment, int lineno, int col_offset, int end_lineno, int
2176 end_col_offset, PyArena *arena)
Guido van Rossumc2e20742006-02-27 22:32:47 +00002177{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002178 stmt_ty p;
Victor Stinner8370e072021-03-24 02:23:01 +01002179 p = (stmt_ty)_PyArena_Malloc(arena, sizeof(*p));
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002180 if (!p)
2181 return NULL;
2182 p->kind = With_kind;
2183 p->v.With.items = items;
2184 p->v.With.body = body;
Guido van Rossumdcfcd142019-01-31 03:40:27 -08002185 p->v.With.type_comment = type_comment;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002186 p->lineno = lineno;
2187 p->col_offset = col_offset;
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00002188 p->end_lineno = end_lineno;
2189 p->end_col_offset = end_col_offset;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002190 return p;
Guido van Rossumc2e20742006-02-27 22:32:47 +00002191}
2192
2193stmt_ty
Victor Stinnerd27f8d22021-04-07 21:34:22 +02002194_PyAST_AsyncWith(asdl_withitem_seq * items, asdl_stmt_seq * body, string
2195 type_comment, int lineno, int col_offset, int end_lineno, int
2196 end_col_offset, PyArena *arena)
Yury Selivanov75445082015-05-11 22:57:16 -04002197{
2198 stmt_ty p;
Victor Stinner8370e072021-03-24 02:23:01 +01002199 p = (stmt_ty)_PyArena_Malloc(arena, sizeof(*p));
Yury Selivanov75445082015-05-11 22:57:16 -04002200 if (!p)
2201 return NULL;
2202 p->kind = AsyncWith_kind;
2203 p->v.AsyncWith.items = items;
2204 p->v.AsyncWith.body = body;
Guido van Rossumdcfcd142019-01-31 03:40:27 -08002205 p->v.AsyncWith.type_comment = type_comment;
Yury Selivanov75445082015-05-11 22:57:16 -04002206 p->lineno = lineno;
2207 p->col_offset = col_offset;
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00002208 p->end_lineno = end_lineno;
2209 p->end_col_offset = end_col_offset;
Yury Selivanov75445082015-05-11 22:57:16 -04002210 return p;
2211}
2212
2213stmt_ty
Victor Stinnerd27f8d22021-04-07 21:34:22 +02002214_PyAST_Match(expr_ty subject, asdl_match_case_seq * cases, int lineno, int
2215 col_offset, int end_lineno, int end_col_offset, PyArena *arena)
Brandt Bucher145bf262021-02-26 14:51:55 -08002216{
2217 stmt_ty p;
2218 if (!subject) {
2219 PyErr_SetString(PyExc_ValueError,
2220 "field 'subject' is required for Match");
2221 return NULL;
2222 }
Victor Stinner8370e072021-03-24 02:23:01 +01002223 p = (stmt_ty)_PyArena_Malloc(arena, sizeof(*p));
Brandt Bucher145bf262021-02-26 14:51:55 -08002224 if (!p)
2225 return NULL;
2226 p->kind = Match_kind;
2227 p->v.Match.subject = subject;
2228 p->v.Match.cases = cases;
2229 p->lineno = lineno;
2230 p->col_offset = col_offset;
2231 p->end_lineno = end_lineno;
2232 p->end_col_offset = end_col_offset;
2233 return p;
2234}
2235
2236stmt_ty
Victor Stinnerd27f8d22021-04-07 21:34:22 +02002237_PyAST_Raise(expr_ty exc, expr_ty cause, int lineno, int col_offset, int
2238 end_lineno, int end_col_offset, PyArena *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002239{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002240 stmt_ty p;
Victor Stinner8370e072021-03-24 02:23:01 +01002241 p = (stmt_ty)_PyArena_Malloc(arena, sizeof(*p));
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002242 if (!p)
2243 return NULL;
2244 p->kind = Raise_kind;
2245 p->v.Raise.exc = exc;
2246 p->v.Raise.cause = cause;
2247 p->lineno = lineno;
2248 p->col_offset = col_offset;
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00002249 p->end_lineno = end_lineno;
2250 p->end_col_offset = end_col_offset;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002251 return p;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002252}
2253
2254stmt_ty
Victor Stinnerd27f8d22021-04-07 21:34:22 +02002255_PyAST_Try(asdl_stmt_seq * body, asdl_excepthandler_seq * handlers,
2256 asdl_stmt_seq * orelse, asdl_stmt_seq * finalbody, int lineno, int
2257 col_offset, int end_lineno, int end_col_offset, PyArena *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002258{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002259 stmt_ty p;
Victor Stinner8370e072021-03-24 02:23:01 +01002260 p = (stmt_ty)_PyArena_Malloc(arena, sizeof(*p));
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002261 if (!p)
2262 return NULL;
2263 p->kind = Try_kind;
2264 p->v.Try.body = body;
2265 p->v.Try.handlers = handlers;
2266 p->v.Try.orelse = orelse;
2267 p->v.Try.finalbody = finalbody;
2268 p->lineno = lineno;
2269 p->col_offset = col_offset;
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00002270 p->end_lineno = end_lineno;
2271 p->end_col_offset = end_col_offset;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002272 return p;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002273}
2274
2275stmt_ty
Victor Stinnerd27f8d22021-04-07 21:34:22 +02002276_PyAST_Assert(expr_ty test, expr_ty msg, int lineno, int col_offset, int
2277 end_lineno, int end_col_offset, PyArena *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002278{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002279 stmt_ty p;
2280 if (!test) {
2281 PyErr_SetString(PyExc_ValueError,
Batuhan Taskaya091951a2020-05-06 17:29:32 +03002282 "field 'test' is required for Assert");
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002283 return NULL;
2284 }
Victor Stinner8370e072021-03-24 02:23:01 +01002285 p = (stmt_ty)_PyArena_Malloc(arena, sizeof(*p));
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002286 if (!p)
2287 return NULL;
2288 p->kind = Assert_kind;
2289 p->v.Assert.test = test;
2290 p->v.Assert.msg = msg;
2291 p->lineno = lineno;
2292 p->col_offset = col_offset;
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00002293 p->end_lineno = end_lineno;
2294 p->end_col_offset = end_col_offset;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002295 return p;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002296}
2297
2298stmt_ty
Victor Stinnerd27f8d22021-04-07 21:34:22 +02002299_PyAST_Import(asdl_alias_seq * names, int lineno, int col_offset, int
2300 end_lineno, int end_col_offset, PyArena *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002301{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002302 stmt_ty p;
Victor Stinner8370e072021-03-24 02:23:01 +01002303 p = (stmt_ty)_PyArena_Malloc(arena, sizeof(*p));
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002304 if (!p)
2305 return NULL;
2306 p->kind = Import_kind;
2307 p->v.Import.names = names;
2308 p->lineno = lineno;
2309 p->col_offset = col_offset;
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00002310 p->end_lineno = end_lineno;
2311 p->end_col_offset = end_col_offset;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002312 return p;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002313}
2314
2315stmt_ty
Victor Stinnerd27f8d22021-04-07 21:34:22 +02002316_PyAST_ImportFrom(identifier module, asdl_alias_seq * names, int level, int
2317 lineno, int col_offset, int end_lineno, int end_col_offset,
2318 PyArena *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002319{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002320 stmt_ty p;
Victor Stinner8370e072021-03-24 02:23:01 +01002321 p = (stmt_ty)_PyArena_Malloc(arena, sizeof(*p));
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002322 if (!p)
2323 return NULL;
2324 p->kind = ImportFrom_kind;
2325 p->v.ImportFrom.module = module;
2326 p->v.ImportFrom.names = names;
2327 p->v.ImportFrom.level = level;
2328 p->lineno = lineno;
2329 p->col_offset = col_offset;
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00002330 p->end_lineno = end_lineno;
2331 p->end_col_offset = end_col_offset;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002332 return p;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002333}
2334
2335stmt_ty
Victor Stinnerd27f8d22021-04-07 21:34:22 +02002336_PyAST_Global(asdl_identifier_seq * names, int lineno, int col_offset, int
2337 end_lineno, int end_col_offset, PyArena *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002338{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002339 stmt_ty p;
Victor Stinner8370e072021-03-24 02:23:01 +01002340 p = (stmt_ty)_PyArena_Malloc(arena, sizeof(*p));
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002341 if (!p)
2342 return NULL;
2343 p->kind = Global_kind;
2344 p->v.Global.names = names;
2345 p->lineno = lineno;
2346 p->col_offset = col_offset;
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00002347 p->end_lineno = end_lineno;
2348 p->end_col_offset = end_col_offset;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002349 return p;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002350}
2351
2352stmt_ty
Victor Stinnerd27f8d22021-04-07 21:34:22 +02002353_PyAST_Nonlocal(asdl_identifier_seq * names, int lineno, int col_offset, int
2354 end_lineno, int end_col_offset, PyArena *arena)
Jeremy Hylton81e95022007-02-27 06:50:52 +00002355{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002356 stmt_ty p;
Victor Stinner8370e072021-03-24 02:23:01 +01002357 p = (stmt_ty)_PyArena_Malloc(arena, sizeof(*p));
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002358 if (!p)
2359 return NULL;
2360 p->kind = Nonlocal_kind;
2361 p->v.Nonlocal.names = names;
2362 p->lineno = lineno;
2363 p->col_offset = col_offset;
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00002364 p->end_lineno = end_lineno;
2365 p->end_col_offset = end_col_offset;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002366 return p;
Jeremy Hylton81e95022007-02-27 06:50:52 +00002367}
2368
2369stmt_ty
Victor Stinnerd27f8d22021-04-07 21:34:22 +02002370_PyAST_Expr(expr_ty value, int lineno, int col_offset, int end_lineno, int
2371 end_col_offset, PyArena *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002372{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002373 stmt_ty p;
2374 if (!value) {
2375 PyErr_SetString(PyExc_ValueError,
Batuhan Taskaya091951a2020-05-06 17:29:32 +03002376 "field 'value' is required for Expr");
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002377 return NULL;
2378 }
Victor Stinner8370e072021-03-24 02:23:01 +01002379 p = (stmt_ty)_PyArena_Malloc(arena, sizeof(*p));
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002380 if (!p)
2381 return NULL;
2382 p->kind = Expr_kind;
2383 p->v.Expr.value = value;
2384 p->lineno = lineno;
2385 p->col_offset = col_offset;
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00002386 p->end_lineno = end_lineno;
2387 p->end_col_offset = end_col_offset;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002388 return p;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002389}
2390
2391stmt_ty
Victor Stinnerd27f8d22021-04-07 21:34:22 +02002392_PyAST_Pass(int lineno, int col_offset, int end_lineno, int end_col_offset,
2393 PyArena *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002394{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002395 stmt_ty p;
Victor Stinner8370e072021-03-24 02:23:01 +01002396 p = (stmt_ty)_PyArena_Malloc(arena, sizeof(*p));
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002397 if (!p)
2398 return NULL;
2399 p->kind = Pass_kind;
2400 p->lineno = lineno;
2401 p->col_offset = col_offset;
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00002402 p->end_lineno = end_lineno;
2403 p->end_col_offset = end_col_offset;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002404 return p;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002405}
2406
2407stmt_ty
Victor Stinnerd27f8d22021-04-07 21:34:22 +02002408_PyAST_Break(int lineno, int col_offset, int end_lineno, int end_col_offset,
2409 PyArena *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002410{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002411 stmt_ty p;
Victor Stinner8370e072021-03-24 02:23:01 +01002412 p = (stmt_ty)_PyArena_Malloc(arena, sizeof(*p));
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002413 if (!p)
2414 return NULL;
2415 p->kind = Break_kind;
2416 p->lineno = lineno;
2417 p->col_offset = col_offset;
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00002418 p->end_lineno = end_lineno;
2419 p->end_col_offset = end_col_offset;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002420 return p;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002421}
2422
2423stmt_ty
Victor Stinnerd27f8d22021-04-07 21:34:22 +02002424_PyAST_Continue(int lineno, int col_offset, int end_lineno, int end_col_offset,
2425 PyArena *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002426{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002427 stmt_ty p;
Victor Stinner8370e072021-03-24 02:23:01 +01002428 p = (stmt_ty)_PyArena_Malloc(arena, sizeof(*p));
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002429 if (!p)
2430 return NULL;
2431 p->kind = Continue_kind;
2432 p->lineno = lineno;
2433 p->col_offset = col_offset;
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00002434 p->end_lineno = end_lineno;
2435 p->end_col_offset = end_col_offset;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002436 return p;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002437}
2438
2439expr_ty
Victor Stinnerd27f8d22021-04-07 21:34:22 +02002440_PyAST_BoolOp(boolop_ty op, asdl_expr_seq * values, int lineno, int col_offset,
2441 int end_lineno, int end_col_offset, PyArena *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002442{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002443 expr_ty p;
2444 if (!op) {
2445 PyErr_SetString(PyExc_ValueError,
Batuhan Taskaya091951a2020-05-06 17:29:32 +03002446 "field 'op' is required for BoolOp");
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002447 return NULL;
2448 }
Victor Stinner8370e072021-03-24 02:23:01 +01002449 p = (expr_ty)_PyArena_Malloc(arena, sizeof(*p));
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002450 if (!p)
2451 return NULL;
2452 p->kind = BoolOp_kind;
2453 p->v.BoolOp.op = op;
2454 p->v.BoolOp.values = values;
2455 p->lineno = lineno;
2456 p->col_offset = col_offset;
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00002457 p->end_lineno = end_lineno;
2458 p->end_col_offset = end_col_offset;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002459 return p;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002460}
2461
2462expr_ty
Victor Stinnerd27f8d22021-04-07 21:34:22 +02002463_PyAST_NamedExpr(expr_ty target, expr_ty value, int lineno, int col_offset, int
2464 end_lineno, int end_col_offset, PyArena *arena)
Emily Morehouse8f59ee02019-01-24 16:49:56 -07002465{
2466 expr_ty p;
2467 if (!target) {
2468 PyErr_SetString(PyExc_ValueError,
Batuhan Taskaya091951a2020-05-06 17:29:32 +03002469 "field 'target' is required for NamedExpr");
Emily Morehouse8f59ee02019-01-24 16:49:56 -07002470 return NULL;
2471 }
2472 if (!value) {
2473 PyErr_SetString(PyExc_ValueError,
Batuhan Taskaya091951a2020-05-06 17:29:32 +03002474 "field 'value' is required for NamedExpr");
Emily Morehouse8f59ee02019-01-24 16:49:56 -07002475 return NULL;
2476 }
Victor Stinner8370e072021-03-24 02:23:01 +01002477 p = (expr_ty)_PyArena_Malloc(arena, sizeof(*p));
Emily Morehouse8f59ee02019-01-24 16:49:56 -07002478 if (!p)
2479 return NULL;
2480 p->kind = NamedExpr_kind;
2481 p->v.NamedExpr.target = target;
2482 p->v.NamedExpr.value = value;
2483 p->lineno = lineno;
2484 p->col_offset = col_offset;
2485 p->end_lineno = end_lineno;
2486 p->end_col_offset = end_col_offset;
2487 return p;
2488}
2489
2490expr_ty
Victor Stinnerd27f8d22021-04-07 21:34:22 +02002491_PyAST_BinOp(expr_ty left, operator_ty op, expr_ty right, int lineno, int
2492 col_offset, int end_lineno, int end_col_offset, PyArena *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002493{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002494 expr_ty p;
2495 if (!left) {
2496 PyErr_SetString(PyExc_ValueError,
Batuhan Taskaya091951a2020-05-06 17:29:32 +03002497 "field 'left' is required for BinOp");
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002498 return NULL;
2499 }
2500 if (!op) {
2501 PyErr_SetString(PyExc_ValueError,
Batuhan Taskaya091951a2020-05-06 17:29:32 +03002502 "field 'op' is required for BinOp");
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002503 return NULL;
2504 }
2505 if (!right) {
2506 PyErr_SetString(PyExc_ValueError,
Batuhan Taskaya091951a2020-05-06 17:29:32 +03002507 "field 'right' is required for BinOp");
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002508 return NULL;
2509 }
Victor Stinner8370e072021-03-24 02:23:01 +01002510 p = (expr_ty)_PyArena_Malloc(arena, sizeof(*p));
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002511 if (!p)
2512 return NULL;
2513 p->kind = BinOp_kind;
2514 p->v.BinOp.left = left;
2515 p->v.BinOp.op = op;
2516 p->v.BinOp.right = right;
2517 p->lineno = lineno;
2518 p->col_offset = col_offset;
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00002519 p->end_lineno = end_lineno;
2520 p->end_col_offset = end_col_offset;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002521 return p;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002522}
2523
2524expr_ty
Victor Stinnerd27f8d22021-04-07 21:34:22 +02002525_PyAST_UnaryOp(unaryop_ty op, expr_ty operand, int lineno, int col_offset, int
2526 end_lineno, int end_col_offset, PyArena *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002527{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002528 expr_ty p;
2529 if (!op) {
2530 PyErr_SetString(PyExc_ValueError,
Batuhan Taskaya091951a2020-05-06 17:29:32 +03002531 "field 'op' is required for UnaryOp");
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002532 return NULL;
2533 }
2534 if (!operand) {
2535 PyErr_SetString(PyExc_ValueError,
Batuhan Taskaya091951a2020-05-06 17:29:32 +03002536 "field 'operand' is required for UnaryOp");
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002537 return NULL;
2538 }
Victor Stinner8370e072021-03-24 02:23:01 +01002539 p = (expr_ty)_PyArena_Malloc(arena, sizeof(*p));
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002540 if (!p)
2541 return NULL;
2542 p->kind = UnaryOp_kind;
2543 p->v.UnaryOp.op = op;
2544 p->v.UnaryOp.operand = operand;
2545 p->lineno = lineno;
2546 p->col_offset = col_offset;
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00002547 p->end_lineno = end_lineno;
2548 p->end_col_offset = end_col_offset;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002549 return p;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002550}
2551
2552expr_ty
Victor Stinnerd27f8d22021-04-07 21:34:22 +02002553_PyAST_Lambda(arguments_ty args, expr_ty body, int lineno, int col_offset, int
2554 end_lineno, int end_col_offset, PyArena *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002555{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002556 expr_ty p;
2557 if (!args) {
2558 PyErr_SetString(PyExc_ValueError,
Batuhan Taskaya091951a2020-05-06 17:29:32 +03002559 "field 'args' is required for Lambda");
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002560 return NULL;
2561 }
2562 if (!body) {
2563 PyErr_SetString(PyExc_ValueError,
Batuhan Taskaya091951a2020-05-06 17:29:32 +03002564 "field 'body' is required for Lambda");
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002565 return NULL;
2566 }
Victor Stinner8370e072021-03-24 02:23:01 +01002567 p = (expr_ty)_PyArena_Malloc(arena, sizeof(*p));
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002568 if (!p)
2569 return NULL;
2570 p->kind = Lambda_kind;
2571 p->v.Lambda.args = args;
2572 p->v.Lambda.body = body;
2573 p->lineno = lineno;
2574 p->col_offset = col_offset;
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00002575 p->end_lineno = end_lineno;
2576 p->end_col_offset = end_col_offset;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002577 return p;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002578}
2579
2580expr_ty
Victor Stinnerd27f8d22021-04-07 21:34:22 +02002581_PyAST_IfExp(expr_ty test, expr_ty body, expr_ty orelse, int lineno, int
2582 col_offset, int end_lineno, int end_col_offset, PyArena *arena)
Thomas Woutersdca3b9c2006-02-27 00:24:13 +00002583{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002584 expr_ty p;
2585 if (!test) {
2586 PyErr_SetString(PyExc_ValueError,
Batuhan Taskaya091951a2020-05-06 17:29:32 +03002587 "field 'test' is required for IfExp");
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002588 return NULL;
2589 }
2590 if (!body) {
2591 PyErr_SetString(PyExc_ValueError,
Batuhan Taskaya091951a2020-05-06 17:29:32 +03002592 "field 'body' is required for IfExp");
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002593 return NULL;
2594 }
2595 if (!orelse) {
2596 PyErr_SetString(PyExc_ValueError,
Batuhan Taskaya091951a2020-05-06 17:29:32 +03002597 "field 'orelse' is required for IfExp");
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002598 return NULL;
2599 }
Victor Stinner8370e072021-03-24 02:23:01 +01002600 p = (expr_ty)_PyArena_Malloc(arena, sizeof(*p));
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002601 if (!p)
2602 return NULL;
2603 p->kind = IfExp_kind;
2604 p->v.IfExp.test = test;
2605 p->v.IfExp.body = body;
2606 p->v.IfExp.orelse = orelse;
2607 p->lineno = lineno;
2608 p->col_offset = col_offset;
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00002609 p->end_lineno = end_lineno;
2610 p->end_col_offset = end_col_offset;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002611 return p;
Thomas Woutersdca3b9c2006-02-27 00:24:13 +00002612}
2613
2614expr_ty
Victor Stinnerd27f8d22021-04-07 21:34:22 +02002615_PyAST_Dict(asdl_expr_seq * keys, asdl_expr_seq * values, int lineno, int
2616 col_offset, int end_lineno, int end_col_offset, PyArena *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002617{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002618 expr_ty p;
Victor Stinner8370e072021-03-24 02:23:01 +01002619 p = (expr_ty)_PyArena_Malloc(arena, sizeof(*p));
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002620 if (!p)
2621 return NULL;
2622 p->kind = Dict_kind;
2623 p->v.Dict.keys = keys;
2624 p->v.Dict.values = values;
2625 p->lineno = lineno;
2626 p->col_offset = col_offset;
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00002627 p->end_lineno = end_lineno;
2628 p->end_col_offset = end_col_offset;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002629 return p;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002630}
2631
2632expr_ty
Victor Stinnerd27f8d22021-04-07 21:34:22 +02002633_PyAST_Set(asdl_expr_seq * elts, int lineno, int col_offset, int end_lineno,
2634 int end_col_offset, PyArena *arena)
Guido van Rossum86e58e22006-08-28 15:27:34 +00002635{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002636 expr_ty p;
Victor Stinner8370e072021-03-24 02:23:01 +01002637 p = (expr_ty)_PyArena_Malloc(arena, sizeof(*p));
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002638 if (!p)
2639 return NULL;
2640 p->kind = Set_kind;
2641 p->v.Set.elts = elts;
2642 p->lineno = lineno;
2643 p->col_offset = col_offset;
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00002644 p->end_lineno = end_lineno;
2645 p->end_col_offset = end_col_offset;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002646 return p;
Guido van Rossum86e58e22006-08-28 15:27:34 +00002647}
2648
2649expr_ty
Victor Stinnerd27f8d22021-04-07 21:34:22 +02002650_PyAST_ListComp(expr_ty elt, asdl_comprehension_seq * generators, int lineno,
2651 int col_offset, int end_lineno, int end_col_offset, PyArena
2652 *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002653{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002654 expr_ty p;
2655 if (!elt) {
2656 PyErr_SetString(PyExc_ValueError,
Batuhan Taskaya091951a2020-05-06 17:29:32 +03002657 "field 'elt' is required for ListComp");
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002658 return NULL;
2659 }
Victor Stinner8370e072021-03-24 02:23:01 +01002660 p = (expr_ty)_PyArena_Malloc(arena, sizeof(*p));
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002661 if (!p)
2662 return NULL;
2663 p->kind = ListComp_kind;
2664 p->v.ListComp.elt = elt;
2665 p->v.ListComp.generators = generators;
2666 p->lineno = lineno;
2667 p->col_offset = col_offset;
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00002668 p->end_lineno = end_lineno;
2669 p->end_col_offset = end_col_offset;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002670 return p;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002671}
2672
2673expr_ty
Victor Stinnerd27f8d22021-04-07 21:34:22 +02002674_PyAST_SetComp(expr_ty elt, asdl_comprehension_seq * generators, int lineno,
2675 int col_offset, int end_lineno, int end_col_offset, PyArena
2676 *arena)
Nick Coghlan650f0d02007-04-15 12:05:43 +00002677{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002678 expr_ty p;
2679 if (!elt) {
2680 PyErr_SetString(PyExc_ValueError,
Batuhan Taskaya091951a2020-05-06 17:29:32 +03002681 "field 'elt' is required for SetComp");
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002682 return NULL;
2683 }
Victor Stinner8370e072021-03-24 02:23:01 +01002684 p = (expr_ty)_PyArena_Malloc(arena, sizeof(*p));
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002685 if (!p)
2686 return NULL;
2687 p->kind = SetComp_kind;
2688 p->v.SetComp.elt = elt;
2689 p->v.SetComp.generators = generators;
2690 p->lineno = lineno;
2691 p->col_offset = col_offset;
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00002692 p->end_lineno = end_lineno;
2693 p->end_col_offset = end_col_offset;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002694 return p;
Nick Coghlan650f0d02007-04-15 12:05:43 +00002695}
2696
2697expr_ty
Victor Stinnerd27f8d22021-04-07 21:34:22 +02002698_PyAST_DictComp(expr_ty key, expr_ty value, asdl_comprehension_seq *
2699 generators, int lineno, int col_offset, int end_lineno, int
2700 end_col_offset, PyArena *arena)
Guido van Rossum992d4a32007-07-11 13:09:30 +00002701{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002702 expr_ty p;
2703 if (!key) {
2704 PyErr_SetString(PyExc_ValueError,
Batuhan Taskaya091951a2020-05-06 17:29:32 +03002705 "field 'key' is required for DictComp");
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002706 return NULL;
2707 }
2708 if (!value) {
2709 PyErr_SetString(PyExc_ValueError,
Batuhan Taskaya091951a2020-05-06 17:29:32 +03002710 "field 'value' is required for DictComp");
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002711 return NULL;
2712 }
Victor Stinner8370e072021-03-24 02:23:01 +01002713 p = (expr_ty)_PyArena_Malloc(arena, sizeof(*p));
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002714 if (!p)
2715 return NULL;
2716 p->kind = DictComp_kind;
2717 p->v.DictComp.key = key;
2718 p->v.DictComp.value = value;
2719 p->v.DictComp.generators = generators;
2720 p->lineno = lineno;
2721 p->col_offset = col_offset;
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00002722 p->end_lineno = end_lineno;
2723 p->end_col_offset = end_col_offset;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002724 return p;
Guido van Rossum992d4a32007-07-11 13:09:30 +00002725}
2726
2727expr_ty
Victor Stinnerd27f8d22021-04-07 21:34:22 +02002728_PyAST_GeneratorExp(expr_ty elt, asdl_comprehension_seq * generators, int
2729 lineno, int col_offset, int end_lineno, int end_col_offset,
2730 PyArena *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002731{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002732 expr_ty p;
2733 if (!elt) {
2734 PyErr_SetString(PyExc_ValueError,
Batuhan Taskaya091951a2020-05-06 17:29:32 +03002735 "field 'elt' is required for GeneratorExp");
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002736 return NULL;
2737 }
Victor Stinner8370e072021-03-24 02:23:01 +01002738 p = (expr_ty)_PyArena_Malloc(arena, sizeof(*p));
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002739 if (!p)
2740 return NULL;
2741 p->kind = GeneratorExp_kind;
2742 p->v.GeneratorExp.elt = elt;
2743 p->v.GeneratorExp.generators = generators;
2744 p->lineno = lineno;
2745 p->col_offset = col_offset;
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00002746 p->end_lineno = end_lineno;
2747 p->end_col_offset = end_col_offset;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002748 return p;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002749}
2750
2751expr_ty
Victor Stinnerd27f8d22021-04-07 21:34:22 +02002752_PyAST_Await(expr_ty value, int lineno, int col_offset, int end_lineno, int
2753 end_col_offset, PyArena *arena)
Yury Selivanov75445082015-05-11 22:57:16 -04002754{
2755 expr_ty p;
2756 if (!value) {
2757 PyErr_SetString(PyExc_ValueError,
Batuhan Taskaya091951a2020-05-06 17:29:32 +03002758 "field 'value' is required for Await");
Yury Selivanov75445082015-05-11 22:57:16 -04002759 return NULL;
2760 }
Victor Stinner8370e072021-03-24 02:23:01 +01002761 p = (expr_ty)_PyArena_Malloc(arena, sizeof(*p));
Yury Selivanov75445082015-05-11 22:57:16 -04002762 if (!p)
2763 return NULL;
2764 p->kind = Await_kind;
2765 p->v.Await.value = value;
2766 p->lineno = lineno;
2767 p->col_offset = col_offset;
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00002768 p->end_lineno = end_lineno;
2769 p->end_col_offset = end_col_offset;
Yury Selivanov75445082015-05-11 22:57:16 -04002770 return p;
2771}
2772
2773expr_ty
Victor Stinnerd27f8d22021-04-07 21:34:22 +02002774_PyAST_Yield(expr_ty value, int lineno, int col_offset, int end_lineno, int
2775 end_col_offset, PyArena *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002776{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002777 expr_ty p;
Victor Stinner8370e072021-03-24 02:23:01 +01002778 p = (expr_ty)_PyArena_Malloc(arena, sizeof(*p));
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002779 if (!p)
2780 return NULL;
2781 p->kind = Yield_kind;
2782 p->v.Yield.value = value;
2783 p->lineno = lineno;
2784 p->col_offset = col_offset;
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00002785 p->end_lineno = end_lineno;
2786 p->end_col_offset = end_col_offset;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002787 return p;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002788}
2789
2790expr_ty
Victor Stinnerd27f8d22021-04-07 21:34:22 +02002791_PyAST_YieldFrom(expr_ty value, int lineno, int col_offset, int end_lineno, int
2792 end_col_offset, PyArena *arena)
Benjamin Peterson527c6222012-01-14 08:58:23 -05002793{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002794 expr_ty p;
2795 if (!value) {
2796 PyErr_SetString(PyExc_ValueError,
Batuhan Taskaya091951a2020-05-06 17:29:32 +03002797 "field 'value' is required for YieldFrom");
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002798 return NULL;
2799 }
Victor Stinner8370e072021-03-24 02:23:01 +01002800 p = (expr_ty)_PyArena_Malloc(arena, sizeof(*p));
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002801 if (!p)
2802 return NULL;
2803 p->kind = YieldFrom_kind;
2804 p->v.YieldFrom.value = value;
2805 p->lineno = lineno;
2806 p->col_offset = col_offset;
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00002807 p->end_lineno = end_lineno;
2808 p->end_col_offset = end_col_offset;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002809 return p;
Benjamin Peterson527c6222012-01-14 08:58:23 -05002810}
2811
2812expr_ty
Victor Stinnerd27f8d22021-04-07 21:34:22 +02002813_PyAST_Compare(expr_ty left, asdl_int_seq * ops, asdl_expr_seq * comparators,
2814 int lineno, int col_offset, int end_lineno, int end_col_offset,
2815 PyArena *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002816{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002817 expr_ty p;
2818 if (!left) {
2819 PyErr_SetString(PyExc_ValueError,
Batuhan Taskaya091951a2020-05-06 17:29:32 +03002820 "field 'left' is required for Compare");
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002821 return NULL;
2822 }
Victor Stinner8370e072021-03-24 02:23:01 +01002823 p = (expr_ty)_PyArena_Malloc(arena, sizeof(*p));
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002824 if (!p)
2825 return NULL;
2826 p->kind = Compare_kind;
2827 p->v.Compare.left = left;
2828 p->v.Compare.ops = ops;
2829 p->v.Compare.comparators = comparators;
2830 p->lineno = lineno;
2831 p->col_offset = col_offset;
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00002832 p->end_lineno = end_lineno;
2833 p->end_col_offset = end_col_offset;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002834 return p;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002835}
2836
2837expr_ty
Victor Stinnerd27f8d22021-04-07 21:34:22 +02002838_PyAST_Call(expr_ty func, asdl_expr_seq * args, asdl_keyword_seq * keywords,
2839 int lineno, int col_offset, int end_lineno, int end_col_offset,
2840 PyArena *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002841{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002842 expr_ty p;
2843 if (!func) {
2844 PyErr_SetString(PyExc_ValueError,
Batuhan Taskaya091951a2020-05-06 17:29:32 +03002845 "field 'func' is required for Call");
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002846 return NULL;
2847 }
Victor Stinner8370e072021-03-24 02:23:01 +01002848 p = (expr_ty)_PyArena_Malloc(arena, sizeof(*p));
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002849 if (!p)
2850 return NULL;
2851 p->kind = Call_kind;
2852 p->v.Call.func = func;
2853 p->v.Call.args = args;
2854 p->v.Call.keywords = keywords;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002855 p->lineno = lineno;
2856 p->col_offset = col_offset;
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00002857 p->end_lineno = end_lineno;
2858 p->end_col_offset = end_col_offset;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002859 return p;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002860}
2861
2862expr_ty
Victor Stinnerd27f8d22021-04-07 21:34:22 +02002863_PyAST_FormattedValue(expr_ty value, int conversion, expr_ty format_spec, int
2864 lineno, int col_offset, int end_lineno, int
2865 end_col_offset, PyArena *arena)
Eric V. Smith235a6f02015-09-19 14:51:32 -04002866{
2867 expr_ty p;
2868 if (!value) {
2869 PyErr_SetString(PyExc_ValueError,
Batuhan Taskaya091951a2020-05-06 17:29:32 +03002870 "field 'value' is required for FormattedValue");
Eric V. Smith235a6f02015-09-19 14:51:32 -04002871 return NULL;
2872 }
Victor Stinner8370e072021-03-24 02:23:01 +01002873 p = (expr_ty)_PyArena_Malloc(arena, sizeof(*p));
Eric V. Smith235a6f02015-09-19 14:51:32 -04002874 if (!p)
2875 return NULL;
2876 p->kind = FormattedValue_kind;
2877 p->v.FormattedValue.value = value;
2878 p->v.FormattedValue.conversion = conversion;
2879 p->v.FormattedValue.format_spec = format_spec;
2880 p->lineno = lineno;
2881 p->col_offset = col_offset;
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00002882 p->end_lineno = end_lineno;
2883 p->end_col_offset = end_col_offset;
Eric V. Smith235a6f02015-09-19 14:51:32 -04002884 return p;
2885}
2886
2887expr_ty
Victor Stinnerd27f8d22021-04-07 21:34:22 +02002888_PyAST_JoinedStr(asdl_expr_seq * values, int lineno, int col_offset, int
2889 end_lineno, int end_col_offset, PyArena *arena)
Eric V. Smith235a6f02015-09-19 14:51:32 -04002890{
2891 expr_ty p;
Victor Stinner8370e072021-03-24 02:23:01 +01002892 p = (expr_ty)_PyArena_Malloc(arena, sizeof(*p));
Eric V. Smith235a6f02015-09-19 14:51:32 -04002893 if (!p)
2894 return NULL;
2895 p->kind = JoinedStr_kind;
2896 p->v.JoinedStr.values = values;
2897 p->lineno = lineno;
2898 p->col_offset = col_offset;
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00002899 p->end_lineno = end_lineno;
2900 p->end_col_offset = end_col_offset;
Eric V. Smith235a6f02015-09-19 14:51:32 -04002901 return p;
2902}
2903
2904expr_ty
Victor Stinnerd27f8d22021-04-07 21:34:22 +02002905_PyAST_Constant(constant value, string kind, int lineno, int col_offset, int
2906 end_lineno, int end_col_offset, PyArena *arena)
Victor Stinnerf2c1aa12016-01-26 00:40:57 +01002907{
2908 expr_ty p;
2909 if (!value) {
2910 PyErr_SetString(PyExc_ValueError,
Batuhan Taskaya091951a2020-05-06 17:29:32 +03002911 "field 'value' is required for Constant");
Victor Stinnerf2c1aa12016-01-26 00:40:57 +01002912 return NULL;
2913 }
Victor Stinner8370e072021-03-24 02:23:01 +01002914 p = (expr_ty)_PyArena_Malloc(arena, sizeof(*p));
Victor Stinnerf2c1aa12016-01-26 00:40:57 +01002915 if (!p)
2916 return NULL;
2917 p->kind = Constant_kind;
2918 p->v.Constant.value = value;
Guido van Rossum10f8ce62019-03-13 13:00:46 -07002919 p->v.Constant.kind = kind;
Victor Stinnerf2c1aa12016-01-26 00:40:57 +01002920 p->lineno = lineno;
2921 p->col_offset = col_offset;
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00002922 p->end_lineno = end_lineno;
2923 p->end_col_offset = end_col_offset;
Victor Stinnerf2c1aa12016-01-26 00:40:57 +01002924 return p;
2925}
2926
2927expr_ty
Victor Stinnerd27f8d22021-04-07 21:34:22 +02002928_PyAST_Attribute(expr_ty value, identifier attr, expr_context_ty ctx, int
2929 lineno, int col_offset, int end_lineno, int end_col_offset,
2930 PyArena *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002931{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002932 expr_ty p;
2933 if (!value) {
2934 PyErr_SetString(PyExc_ValueError,
Batuhan Taskaya091951a2020-05-06 17:29:32 +03002935 "field 'value' is required for Attribute");
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002936 return NULL;
2937 }
2938 if (!attr) {
2939 PyErr_SetString(PyExc_ValueError,
Batuhan Taskaya091951a2020-05-06 17:29:32 +03002940 "field 'attr' is required for Attribute");
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002941 return NULL;
2942 }
2943 if (!ctx) {
2944 PyErr_SetString(PyExc_ValueError,
Batuhan Taskaya091951a2020-05-06 17:29:32 +03002945 "field 'ctx' is required for Attribute");
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002946 return NULL;
2947 }
Victor Stinner8370e072021-03-24 02:23:01 +01002948 p = (expr_ty)_PyArena_Malloc(arena, sizeof(*p));
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002949 if (!p)
2950 return NULL;
2951 p->kind = Attribute_kind;
2952 p->v.Attribute.value = value;
2953 p->v.Attribute.attr = attr;
2954 p->v.Attribute.ctx = ctx;
2955 p->lineno = lineno;
2956 p->col_offset = col_offset;
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00002957 p->end_lineno = end_lineno;
2958 p->end_col_offset = end_col_offset;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002959 return p;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002960}
2961
2962expr_ty
Victor Stinnerd27f8d22021-04-07 21:34:22 +02002963_PyAST_Subscript(expr_ty value, expr_ty slice, expr_context_ty ctx, int lineno,
2964 int col_offset, int end_lineno, int end_col_offset, PyArena
2965 *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002966{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002967 expr_ty p;
2968 if (!value) {
2969 PyErr_SetString(PyExc_ValueError,
Batuhan Taskaya091951a2020-05-06 17:29:32 +03002970 "field 'value' is required for Subscript");
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002971 return NULL;
2972 }
2973 if (!slice) {
2974 PyErr_SetString(PyExc_ValueError,
Batuhan Taskaya091951a2020-05-06 17:29:32 +03002975 "field 'slice' is required for Subscript");
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002976 return NULL;
2977 }
2978 if (!ctx) {
2979 PyErr_SetString(PyExc_ValueError,
Batuhan Taskaya091951a2020-05-06 17:29:32 +03002980 "field 'ctx' is required for Subscript");
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002981 return NULL;
2982 }
Victor Stinner8370e072021-03-24 02:23:01 +01002983 p = (expr_ty)_PyArena_Malloc(arena, sizeof(*p));
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002984 if (!p)
2985 return NULL;
2986 p->kind = Subscript_kind;
2987 p->v.Subscript.value = value;
2988 p->v.Subscript.slice = slice;
2989 p->v.Subscript.ctx = ctx;
2990 p->lineno = lineno;
2991 p->col_offset = col_offset;
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00002992 p->end_lineno = end_lineno;
2993 p->end_col_offset = end_col_offset;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002994 return p;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002995}
2996
2997expr_ty
Victor Stinnerd27f8d22021-04-07 21:34:22 +02002998_PyAST_Starred(expr_ty value, expr_context_ty ctx, int lineno, int col_offset,
2999 int end_lineno, int end_col_offset, PyArena *arena)
Guido van Rossum0368b722007-05-11 16:50:42 +00003000{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003001 expr_ty p;
3002 if (!value) {
3003 PyErr_SetString(PyExc_ValueError,
Batuhan Taskaya091951a2020-05-06 17:29:32 +03003004 "field 'value' is required for Starred");
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003005 return NULL;
3006 }
3007 if (!ctx) {
3008 PyErr_SetString(PyExc_ValueError,
Batuhan Taskaya091951a2020-05-06 17:29:32 +03003009 "field 'ctx' is required for Starred");
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003010 return NULL;
3011 }
Victor Stinner8370e072021-03-24 02:23:01 +01003012 p = (expr_ty)_PyArena_Malloc(arena, sizeof(*p));
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003013 if (!p)
3014 return NULL;
3015 p->kind = Starred_kind;
3016 p->v.Starred.value = value;
3017 p->v.Starred.ctx = ctx;
3018 p->lineno = lineno;
3019 p->col_offset = col_offset;
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00003020 p->end_lineno = end_lineno;
3021 p->end_col_offset = end_col_offset;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003022 return p;
Guido van Rossum0368b722007-05-11 16:50:42 +00003023}
3024
3025expr_ty
Victor Stinnerd27f8d22021-04-07 21:34:22 +02003026_PyAST_Name(identifier id, expr_context_ty ctx, int lineno, int col_offset, int
3027 end_lineno, int end_col_offset, PyArena *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00003028{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003029 expr_ty p;
3030 if (!id) {
3031 PyErr_SetString(PyExc_ValueError,
Batuhan Taskaya091951a2020-05-06 17:29:32 +03003032 "field 'id' is required for Name");
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003033 return NULL;
3034 }
3035 if (!ctx) {
3036 PyErr_SetString(PyExc_ValueError,
Batuhan Taskaya091951a2020-05-06 17:29:32 +03003037 "field 'ctx' is required for Name");
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003038 return NULL;
3039 }
Victor Stinner8370e072021-03-24 02:23:01 +01003040 p = (expr_ty)_PyArena_Malloc(arena, sizeof(*p));
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003041 if (!p)
3042 return NULL;
3043 p->kind = Name_kind;
3044 p->v.Name.id = id;
3045 p->v.Name.ctx = ctx;
3046 p->lineno = lineno;
3047 p->col_offset = col_offset;
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00003048 p->end_lineno = end_lineno;
3049 p->end_col_offset = end_col_offset;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003050 return p;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00003051}
3052
3053expr_ty
Victor Stinnerd27f8d22021-04-07 21:34:22 +02003054_PyAST_List(asdl_expr_seq * elts, expr_context_ty ctx, int lineno, int
3055 col_offset, int end_lineno, int end_col_offset, PyArena *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00003056{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003057 expr_ty p;
3058 if (!ctx) {
3059 PyErr_SetString(PyExc_ValueError,
Batuhan Taskaya091951a2020-05-06 17:29:32 +03003060 "field 'ctx' is required for List");
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003061 return NULL;
3062 }
Victor Stinner8370e072021-03-24 02:23:01 +01003063 p = (expr_ty)_PyArena_Malloc(arena, sizeof(*p));
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003064 if (!p)
3065 return NULL;
3066 p->kind = List_kind;
3067 p->v.List.elts = elts;
3068 p->v.List.ctx = ctx;
3069 p->lineno = lineno;
3070 p->col_offset = col_offset;
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00003071 p->end_lineno = end_lineno;
3072 p->end_col_offset = end_col_offset;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003073 return p;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00003074}
3075
3076expr_ty
Victor Stinnerd27f8d22021-04-07 21:34:22 +02003077_PyAST_Tuple(asdl_expr_seq * elts, expr_context_ty ctx, int lineno, int
3078 col_offset, int end_lineno, int end_col_offset, PyArena *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00003079{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003080 expr_ty p;
3081 if (!ctx) {
3082 PyErr_SetString(PyExc_ValueError,
Batuhan Taskaya091951a2020-05-06 17:29:32 +03003083 "field 'ctx' is required for Tuple");
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003084 return NULL;
3085 }
Victor Stinner8370e072021-03-24 02:23:01 +01003086 p = (expr_ty)_PyArena_Malloc(arena, sizeof(*p));
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003087 if (!p)
3088 return NULL;
3089 p->kind = Tuple_kind;
3090 p->v.Tuple.elts = elts;
3091 p->v.Tuple.ctx = ctx;
3092 p->lineno = lineno;
3093 p->col_offset = col_offset;
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00003094 p->end_lineno = end_lineno;
3095 p->end_col_offset = end_col_offset;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003096 return p;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00003097}
3098
Serhiy Storchaka13d52c22020-03-10 18:52:34 +02003099expr_ty
Victor Stinnerd27f8d22021-04-07 21:34:22 +02003100_PyAST_Slice(expr_ty lower, expr_ty upper, expr_ty step, int lineno, int
3101 col_offset, int end_lineno, int end_col_offset, PyArena *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00003102{
Serhiy Storchaka13d52c22020-03-10 18:52:34 +02003103 expr_ty p;
Victor Stinner8370e072021-03-24 02:23:01 +01003104 p = (expr_ty)_PyArena_Malloc(arena, sizeof(*p));
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003105 if (!p)
3106 return NULL;
3107 p->kind = Slice_kind;
3108 p->v.Slice.lower = lower;
3109 p->v.Slice.upper = upper;
3110 p->v.Slice.step = step;
Serhiy Storchaka13d52c22020-03-10 18:52:34 +02003111 p->lineno = lineno;
3112 p->col_offset = col_offset;
3113 p->end_lineno = end_lineno;
3114 p->end_col_offset = end_col_offset;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003115 return p;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00003116}
3117
Brandt Bucher145bf262021-02-26 14:51:55 -08003118expr_ty
Victor Stinnerd27f8d22021-04-07 21:34:22 +02003119_PyAST_MatchAs(expr_ty pattern, identifier name, int lineno, int col_offset,
3120 int end_lineno, int end_col_offset, PyArena *arena)
Brandt Bucher145bf262021-02-26 14:51:55 -08003121{
3122 expr_ty p;
3123 if (!pattern) {
3124 PyErr_SetString(PyExc_ValueError,
3125 "field 'pattern' is required for MatchAs");
3126 return NULL;
3127 }
3128 if (!name) {
3129 PyErr_SetString(PyExc_ValueError,
3130 "field 'name' is required for MatchAs");
3131 return NULL;
3132 }
Victor Stinner8370e072021-03-24 02:23:01 +01003133 p = (expr_ty)_PyArena_Malloc(arena, sizeof(*p));
Brandt Bucher145bf262021-02-26 14:51:55 -08003134 if (!p)
3135 return NULL;
3136 p->kind = MatchAs_kind;
3137 p->v.MatchAs.pattern = pattern;
3138 p->v.MatchAs.name = name;
3139 p->lineno = lineno;
3140 p->col_offset = col_offset;
3141 p->end_lineno = end_lineno;
3142 p->end_col_offset = end_col_offset;
3143 return p;
3144}
3145
3146expr_ty
Victor Stinnerd27f8d22021-04-07 21:34:22 +02003147_PyAST_MatchOr(asdl_expr_seq * patterns, int lineno, int col_offset, int
3148 end_lineno, int end_col_offset, PyArena *arena)
Brandt Bucher145bf262021-02-26 14:51:55 -08003149{
3150 expr_ty p;
Victor Stinner8370e072021-03-24 02:23:01 +01003151 p = (expr_ty)_PyArena_Malloc(arena, sizeof(*p));
Brandt Bucher145bf262021-02-26 14:51:55 -08003152 if (!p)
3153 return NULL;
3154 p->kind = MatchOr_kind;
3155 p->v.MatchOr.patterns = patterns;
3156 p->lineno = lineno;
3157 p->col_offset = col_offset;
3158 p->end_lineno = end_lineno;
3159 p->end_col_offset = end_col_offset;
3160 return p;
3161}
3162
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00003163comprehension_ty
Victor Stinnerd27f8d22021-04-07 21:34:22 +02003164_PyAST_comprehension(expr_ty target, expr_ty iter, asdl_expr_seq * ifs, int
3165 is_async, PyArena *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00003166{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003167 comprehension_ty p;
3168 if (!target) {
3169 PyErr_SetString(PyExc_ValueError,
Batuhan Taskaya091951a2020-05-06 17:29:32 +03003170 "field 'target' is required for comprehension");
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003171 return NULL;
3172 }
3173 if (!iter) {
3174 PyErr_SetString(PyExc_ValueError,
Batuhan Taskaya091951a2020-05-06 17:29:32 +03003175 "field 'iter' is required for comprehension");
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003176 return NULL;
3177 }
Victor Stinner8370e072021-03-24 02:23:01 +01003178 p = (comprehension_ty)_PyArena_Malloc(arena, sizeof(*p));
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003179 if (!p)
3180 return NULL;
3181 p->target = target;
3182 p->iter = iter;
3183 p->ifs = ifs;
Yury Selivanov52c4e7c2016-09-09 10:36:01 -07003184 p->is_async = is_async;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003185 return p;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00003186}
3187
3188excepthandler_ty
Victor Stinnerd27f8d22021-04-07 21:34:22 +02003189_PyAST_ExceptHandler(expr_ty type, identifier name, asdl_stmt_seq * body, int
3190 lineno, int col_offset, int end_lineno, int
3191 end_col_offset, PyArena *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00003192{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003193 excepthandler_ty p;
Victor Stinner8370e072021-03-24 02:23:01 +01003194 p = (excepthandler_ty)_PyArena_Malloc(arena, sizeof(*p));
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003195 if (!p)
3196 return NULL;
3197 p->kind = ExceptHandler_kind;
3198 p->v.ExceptHandler.type = type;
3199 p->v.ExceptHandler.name = name;
3200 p->v.ExceptHandler.body = body;
3201 p->lineno = lineno;
3202 p->col_offset = col_offset;
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00003203 p->end_lineno = end_lineno;
3204 p->end_col_offset = end_col_offset;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003205 return p;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00003206}
3207
3208arguments_ty
Victor Stinnerd27f8d22021-04-07 21:34:22 +02003209_PyAST_arguments(asdl_arg_seq * posonlyargs, asdl_arg_seq * args, arg_ty
3210 vararg, asdl_arg_seq * kwonlyargs, asdl_expr_seq *
3211 kw_defaults, arg_ty kwarg, asdl_expr_seq * defaults, PyArena
3212 *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00003213{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003214 arguments_ty p;
Victor Stinner8370e072021-03-24 02:23:01 +01003215 p = (arguments_ty)_PyArena_Malloc(arena, sizeof(*p));
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003216 if (!p)
3217 return NULL;
Pablo Galindo8c77b8c2019-04-29 13:36:57 +01003218 p->posonlyargs = posonlyargs;
Pablo Galindocd6e83b2019-07-15 01:32:18 +02003219 p->args = args;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003220 p->vararg = vararg;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003221 p->kwonlyargs = kwonlyargs;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003222 p->kw_defaults = kw_defaults;
Victor Stinneree4b59c2013-07-27 00:01:35 +02003223 p->kwarg = kwarg;
3224 p->defaults = defaults;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003225 return p;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00003226}
3227
Neal Norwitzc1505362006-12-28 06:47:50 +00003228arg_ty
Victor Stinnerd27f8d22021-04-07 21:34:22 +02003229_PyAST_arg(identifier arg, expr_ty annotation, string type_comment, int lineno,
3230 int col_offset, int end_lineno, int end_col_offset, PyArena *arena)
Neal Norwitzc1505362006-12-28 06:47:50 +00003231{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003232 arg_ty p;
3233 if (!arg) {
3234 PyErr_SetString(PyExc_ValueError,
Batuhan Taskaya091951a2020-05-06 17:29:32 +03003235 "field 'arg' is required for arg");
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003236 return NULL;
3237 }
Victor Stinner8370e072021-03-24 02:23:01 +01003238 p = (arg_ty)_PyArena_Malloc(arena, sizeof(*p));
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003239 if (!p)
3240 return NULL;
3241 p->arg = arg;
3242 p->annotation = annotation;
Guido van Rossumdcfcd142019-01-31 03:40:27 -08003243 p->type_comment = type_comment;
Victor Stinnerc106c682015-11-06 17:01:48 +01003244 p->lineno = lineno;
3245 p->col_offset = col_offset;
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00003246 p->end_lineno = end_lineno;
3247 p->end_col_offset = end_col_offset;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003248 return p;
Neal Norwitzc1505362006-12-28 06:47:50 +00003249}
3250
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00003251keyword_ty
Victor Stinnerd27f8d22021-04-07 21:34:22 +02003252_PyAST_keyword(identifier arg, expr_ty value, int lineno, int col_offset, int
3253 end_lineno, int end_col_offset, PyArena *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00003254{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003255 keyword_ty p;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003256 if (!value) {
3257 PyErr_SetString(PyExc_ValueError,
Batuhan Taskaya091951a2020-05-06 17:29:32 +03003258 "field 'value' is required for keyword");
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003259 return NULL;
3260 }
Victor Stinner8370e072021-03-24 02:23:01 +01003261 p = (keyword_ty)_PyArena_Malloc(arena, sizeof(*p));
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003262 if (!p)
3263 return NULL;
3264 p->arg = arg;
3265 p->value = value;
Pablo Galindo168660b2020-04-02 00:47:39 +01003266 p->lineno = lineno;
3267 p->col_offset = col_offset;
3268 p->end_lineno = end_lineno;
3269 p->end_col_offset = end_col_offset;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003270 return p;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00003271}
3272
3273alias_ty
Victor Stinnerd27f8d22021-04-07 21:34:22 +02003274_PyAST_alias(identifier name, identifier asname, PyArena *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00003275{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003276 alias_ty p;
3277 if (!name) {
3278 PyErr_SetString(PyExc_ValueError,
Batuhan Taskaya091951a2020-05-06 17:29:32 +03003279 "field 'name' is required for alias");
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003280 return NULL;
3281 }
Victor Stinner8370e072021-03-24 02:23:01 +01003282 p = (alias_ty)_PyArena_Malloc(arena, sizeof(*p));
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003283 if (!p)
3284 return NULL;
3285 p->name = name;
3286 p->asname = asname;
3287 return p;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00003288}
3289
Benjamin Petersonbf1bbc12011-05-27 13:58:08 -05003290withitem_ty
Victor Stinnerd27f8d22021-04-07 21:34:22 +02003291_PyAST_withitem(expr_ty context_expr, expr_ty optional_vars, PyArena *arena)
Benjamin Petersonbf1bbc12011-05-27 13:58:08 -05003292{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003293 withitem_ty p;
3294 if (!context_expr) {
3295 PyErr_SetString(PyExc_ValueError,
Batuhan Taskaya091951a2020-05-06 17:29:32 +03003296 "field 'context_expr' is required for withitem");
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003297 return NULL;
3298 }
Victor Stinner8370e072021-03-24 02:23:01 +01003299 p = (withitem_ty)_PyArena_Malloc(arena, sizeof(*p));
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003300 if (!p)
3301 return NULL;
3302 p->context_expr = context_expr;
3303 p->optional_vars = optional_vars;
3304 return p;
Benjamin Petersonbf1bbc12011-05-27 13:58:08 -05003305}
3306
Brandt Bucher145bf262021-02-26 14:51:55 -08003307match_case_ty
Victor Stinnerd27f8d22021-04-07 21:34:22 +02003308_PyAST_match_case(expr_ty pattern, expr_ty guard, asdl_stmt_seq * body, PyArena
3309 *arena)
Brandt Bucher145bf262021-02-26 14:51:55 -08003310{
3311 match_case_ty p;
3312 if (!pattern) {
3313 PyErr_SetString(PyExc_ValueError,
3314 "field 'pattern' is required for match_case");
3315 return NULL;
3316 }
Victor Stinner8370e072021-03-24 02:23:01 +01003317 p = (match_case_ty)_PyArena_Malloc(arena, sizeof(*p));
Brandt Bucher145bf262021-02-26 14:51:55 -08003318 if (!p)
3319 return NULL;
3320 p->pattern = pattern;
3321 p->guard = guard;
3322 p->body = body;
3323 return p;
3324}
3325
Guido van Rossumdcfcd142019-01-31 03:40:27 -08003326type_ignore_ty
Victor Stinnerd27f8d22021-04-07 21:34:22 +02003327_PyAST_TypeIgnore(int lineno, string tag, PyArena *arena)
Guido van Rossumdcfcd142019-01-31 03:40:27 -08003328{
3329 type_ignore_ty p;
Michael J. Sullivan933e1502019-05-22 07:54:20 -07003330 if (!tag) {
3331 PyErr_SetString(PyExc_ValueError,
Batuhan Taskaya091951a2020-05-06 17:29:32 +03003332 "field 'tag' is required for TypeIgnore");
Michael J. Sullivan933e1502019-05-22 07:54:20 -07003333 return NULL;
3334 }
Victor Stinner8370e072021-03-24 02:23:01 +01003335 p = (type_ignore_ty)_PyArena_Malloc(arena, sizeof(*p));
Guido van Rossumdcfcd142019-01-31 03:40:27 -08003336 if (!p)
3337 return NULL;
3338 p->kind = TypeIgnore_kind;
3339 p->v.TypeIgnore.lineno = lineno;
Michael J. Sullivan933e1502019-05-22 07:54:20 -07003340 p->v.TypeIgnore.tag = tag;
Guido van Rossumdcfcd142019-01-31 03:40:27 -08003341 return p;
3342}
3343
Neal Norwitz7b5a6042005-11-13 19:14:20 +00003344
Martin v. Löwisbd260da2006-02-26 19:42:26 +00003345PyObject*
Victor Stinner5cf47822020-11-02 22:03:28 +01003346ast2obj_mod(struct ast_state *state, void* _o)
Neal Norwitz7b5a6042005-11-13 19:14:20 +00003347{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003348 mod_ty o = (mod_ty)_o;
3349 PyObject *result = NULL, *value = NULL;
Dino Viehlandac46eb42019-09-11 10:16:34 -07003350 PyTypeObject *tp;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003351 if (!o) {
Serhiy Storchaka228b12e2017-01-23 09:47:21 +02003352 Py_RETURN_NONE;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003353 }
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003354 switch (o->kind) {
3355 case Module_kind:
Victor Stinner74419f02020-07-03 11:35:37 +02003356 tp = (PyTypeObject *)state->Module_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07003357 result = PyType_GenericNew(tp, NULL, NULL);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003358 if (!result) goto failed;
Pablo Galindoa5634c42020-09-16 19:42:00 +01003359 value = ast2obj_list(state, (asdl_seq*)o->v.Module.body, ast2obj_stmt);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003360 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02003361 if (PyObject_SetAttr(result, state->body, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003362 goto failed;
3363 Py_DECREF(value);
Pablo Galindoa5634c42020-09-16 19:42:00 +01003364 value = ast2obj_list(state, (asdl_seq*)o->v.Module.type_ignores,
Victor Stinner74419f02020-07-03 11:35:37 +02003365 ast2obj_type_ignore);
Guido van Rossumdcfcd142019-01-31 03:40:27 -08003366 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02003367 if (PyObject_SetAttr(result, state->type_ignores, value) == -1)
Guido van Rossumdcfcd142019-01-31 03:40:27 -08003368 goto failed;
3369 Py_DECREF(value);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003370 break;
3371 case Interactive_kind:
Victor Stinner74419f02020-07-03 11:35:37 +02003372 tp = (PyTypeObject *)state->Interactive_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07003373 result = PyType_GenericNew(tp, NULL, NULL);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003374 if (!result) goto failed;
Pablo Galindoa5634c42020-09-16 19:42:00 +01003375 value = ast2obj_list(state, (asdl_seq*)o->v.Interactive.body,
3376 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);
3381 break;
3382 case Expression_kind:
Victor Stinner74419f02020-07-03 11:35:37 +02003383 tp = (PyTypeObject *)state->Expression_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07003384 result = PyType_GenericNew(tp, NULL, NULL);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003385 if (!result) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02003386 value = ast2obj_expr(state, o->v.Expression.body);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003387 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02003388 if (PyObject_SetAttr(result, state->body, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003389 goto failed;
3390 Py_DECREF(value);
3391 break;
Guido van Rossumdcfcd142019-01-31 03:40:27 -08003392 case FunctionType_kind:
Victor Stinner74419f02020-07-03 11:35:37 +02003393 tp = (PyTypeObject *)state->FunctionType_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07003394 result = PyType_GenericNew(tp, NULL, NULL);
Guido van Rossumdcfcd142019-01-31 03:40:27 -08003395 if (!result) goto failed;
Pablo Galindoa5634c42020-09-16 19:42:00 +01003396 value = ast2obj_list(state, (asdl_seq*)o->v.FunctionType.argtypes,
3397 ast2obj_expr);
Guido van Rossumdcfcd142019-01-31 03:40:27 -08003398 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02003399 if (PyObject_SetAttr(result, state->argtypes, value) == -1)
Guido van Rossumdcfcd142019-01-31 03:40:27 -08003400 goto failed;
3401 Py_DECREF(value);
Victor Stinner74419f02020-07-03 11:35:37 +02003402 value = ast2obj_expr(state, o->v.FunctionType.returns);
Guido van Rossumdcfcd142019-01-31 03:40:27 -08003403 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02003404 if (PyObject_SetAttr(result, state->returns, value) == -1)
Guido van Rossumdcfcd142019-01-31 03:40:27 -08003405 goto failed;
3406 Py_DECREF(value);
3407 break;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003408 }
3409 return result;
Martin v. Löwisbd260da2006-02-26 19:42:26 +00003410failed:
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003411 Py_XDECREF(value);
3412 Py_XDECREF(result);
3413 return NULL;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00003414}
3415
Martin v. Löwisbd260da2006-02-26 19:42:26 +00003416PyObject*
Victor Stinner5cf47822020-11-02 22:03:28 +01003417ast2obj_stmt(struct ast_state *state, void* _o)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00003418{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003419 stmt_ty o = (stmt_ty)_o;
3420 PyObject *result = NULL, *value = NULL;
Dino Viehlandac46eb42019-09-11 10:16:34 -07003421 PyTypeObject *tp;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003422 if (!o) {
Serhiy Storchaka228b12e2017-01-23 09:47:21 +02003423 Py_RETURN_NONE;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003424 }
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003425 switch (o->kind) {
3426 case FunctionDef_kind:
Victor Stinner74419f02020-07-03 11:35:37 +02003427 tp = (PyTypeObject *)state->FunctionDef_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07003428 result = PyType_GenericNew(tp, NULL, NULL);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003429 if (!result) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02003430 value = ast2obj_identifier(state, o->v.FunctionDef.name);
Martin v. Löwis577b5b92006-02-27 15:23:19 +00003431 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02003432 if (PyObject_SetAttr(result, state->name, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003433 goto failed;
Martin v. Löwis03e5bc02006-03-02 00:31:27 +00003434 Py_DECREF(value);
Victor Stinner74419f02020-07-03 11:35:37 +02003435 value = ast2obj_arguments(state, o->v.FunctionDef.args);
Martin v. Löwis49c5da12006-03-01 22:49:05 +00003436 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02003437 if (PyObject_SetAttr(result, state->args, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003438 goto failed;
Martin v. Löwis03e5bc02006-03-02 00:31:27 +00003439 Py_DECREF(value);
Pablo Galindoa5634c42020-09-16 19:42:00 +01003440 value = ast2obj_list(state, (asdl_seq*)o->v.FunctionDef.body,
3441 ast2obj_stmt);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003442 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02003443 if (PyObject_SetAttr(result, state->body, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003444 goto failed;
3445 Py_DECREF(value);
Pablo Galindoa5634c42020-09-16 19:42:00 +01003446 value = ast2obj_list(state, (asdl_seq*)o->v.FunctionDef.decorator_list,
Victor Stinner74419f02020-07-03 11:35:37 +02003447 ast2obj_expr);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003448 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02003449 if (PyObject_SetAttr(result, state->decorator_list, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003450 goto failed;
3451 Py_DECREF(value);
Victor Stinner74419f02020-07-03 11:35:37 +02003452 value = ast2obj_expr(state, o->v.FunctionDef.returns);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003453 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02003454 if (PyObject_SetAttr(result, state->returns, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003455 goto failed;
3456 Py_DECREF(value);
Victor Stinner74419f02020-07-03 11:35:37 +02003457 value = ast2obj_string(state, o->v.FunctionDef.type_comment);
Guido van Rossumdcfcd142019-01-31 03:40:27 -08003458 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02003459 if (PyObject_SetAttr(result, state->type_comment, value) == -1)
Guido van Rossumdcfcd142019-01-31 03:40:27 -08003460 goto failed;
3461 Py_DECREF(value);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003462 break;
Yury Selivanov75445082015-05-11 22:57:16 -04003463 case AsyncFunctionDef_kind:
Victor Stinner74419f02020-07-03 11:35:37 +02003464 tp = (PyTypeObject *)state->AsyncFunctionDef_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07003465 result = PyType_GenericNew(tp, NULL, NULL);
Yury Selivanov75445082015-05-11 22:57:16 -04003466 if (!result) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02003467 value = ast2obj_identifier(state, o->v.AsyncFunctionDef.name);
Yury Selivanov75445082015-05-11 22:57:16 -04003468 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02003469 if (PyObject_SetAttr(result, state->name, value) == -1)
Yury Selivanov75445082015-05-11 22:57:16 -04003470 goto failed;
3471 Py_DECREF(value);
Victor Stinner74419f02020-07-03 11:35:37 +02003472 value = ast2obj_arguments(state, o->v.AsyncFunctionDef.args);
Yury Selivanov75445082015-05-11 22:57:16 -04003473 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02003474 if (PyObject_SetAttr(result, state->args, value) == -1)
Yury Selivanov75445082015-05-11 22:57:16 -04003475 goto failed;
3476 Py_DECREF(value);
Pablo Galindoa5634c42020-09-16 19:42:00 +01003477 value = ast2obj_list(state, (asdl_seq*)o->v.AsyncFunctionDef.body,
3478 ast2obj_stmt);
Yury Selivanov75445082015-05-11 22:57:16 -04003479 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02003480 if (PyObject_SetAttr(result, state->body, value) == -1)
Yury Selivanov75445082015-05-11 22:57:16 -04003481 goto failed;
3482 Py_DECREF(value);
Pablo Galindoa5634c42020-09-16 19:42:00 +01003483 value = ast2obj_list(state,
3484 (asdl_seq*)o->v.AsyncFunctionDef.decorator_list,
Yury Selivanov75445082015-05-11 22:57:16 -04003485 ast2obj_expr);
3486 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02003487 if (PyObject_SetAttr(result, state->decorator_list, value) == -1)
Yury Selivanov75445082015-05-11 22:57:16 -04003488 goto failed;
3489 Py_DECREF(value);
Victor Stinner74419f02020-07-03 11:35:37 +02003490 value = ast2obj_expr(state, o->v.AsyncFunctionDef.returns);
Yury Selivanov75445082015-05-11 22:57:16 -04003491 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02003492 if (PyObject_SetAttr(result, state->returns, value) == -1)
Yury Selivanov75445082015-05-11 22:57:16 -04003493 goto failed;
3494 Py_DECREF(value);
Victor Stinner74419f02020-07-03 11:35:37 +02003495 value = ast2obj_string(state, o->v.AsyncFunctionDef.type_comment);
Guido van Rossumdcfcd142019-01-31 03:40:27 -08003496 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02003497 if (PyObject_SetAttr(result, state->type_comment, value) == -1)
Guido van Rossumdcfcd142019-01-31 03:40:27 -08003498 goto failed;
3499 Py_DECREF(value);
Yury Selivanov75445082015-05-11 22:57:16 -04003500 break;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003501 case ClassDef_kind:
Victor Stinner74419f02020-07-03 11:35:37 +02003502 tp = (PyTypeObject *)state->ClassDef_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07003503 result = PyType_GenericNew(tp, NULL, NULL);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003504 if (!result) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02003505 value = ast2obj_identifier(state, o->v.ClassDef.name);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003506 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02003507 if (PyObject_SetAttr(result, state->name, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003508 goto failed;
3509 Py_DECREF(value);
Pablo Galindoa5634c42020-09-16 19:42:00 +01003510 value = ast2obj_list(state, (asdl_seq*)o->v.ClassDef.bases,
3511 ast2obj_expr);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003512 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02003513 if (PyObject_SetAttr(result, state->bases, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003514 goto failed;
3515 Py_DECREF(value);
Pablo Galindoa5634c42020-09-16 19:42:00 +01003516 value = ast2obj_list(state, (asdl_seq*)o->v.ClassDef.keywords,
3517 ast2obj_keyword);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003518 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02003519 if (PyObject_SetAttr(result, state->keywords, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003520 goto failed;
3521 Py_DECREF(value);
Pablo Galindoa5634c42020-09-16 19:42:00 +01003522 value = ast2obj_list(state, (asdl_seq*)o->v.ClassDef.body,
3523 ast2obj_stmt);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003524 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02003525 if (PyObject_SetAttr(result, state->body, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003526 goto failed;
3527 Py_DECREF(value);
Pablo Galindoa5634c42020-09-16 19:42:00 +01003528 value = ast2obj_list(state, (asdl_seq*)o->v.ClassDef.decorator_list,
3529 ast2obj_expr);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003530 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02003531 if (PyObject_SetAttr(result, state->decorator_list, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003532 goto failed;
3533 Py_DECREF(value);
3534 break;
3535 case Return_kind:
Victor Stinner74419f02020-07-03 11:35:37 +02003536 tp = (PyTypeObject *)state->Return_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07003537 result = PyType_GenericNew(tp, NULL, NULL);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003538 if (!result) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02003539 value = ast2obj_expr(state, o->v.Return.value);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003540 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02003541 if (PyObject_SetAttr(result, state->value, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003542 goto failed;
3543 Py_DECREF(value);
3544 break;
3545 case Delete_kind:
Victor Stinner74419f02020-07-03 11:35:37 +02003546 tp = (PyTypeObject *)state->Delete_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07003547 result = PyType_GenericNew(tp, NULL, NULL);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003548 if (!result) goto failed;
Pablo Galindoa5634c42020-09-16 19:42:00 +01003549 value = ast2obj_list(state, (asdl_seq*)o->v.Delete.targets,
3550 ast2obj_expr);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003551 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02003552 if (PyObject_SetAttr(result, state->targets, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003553 goto failed;
3554 Py_DECREF(value);
3555 break;
3556 case Assign_kind:
Victor Stinner74419f02020-07-03 11:35:37 +02003557 tp = (PyTypeObject *)state->Assign_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07003558 result = PyType_GenericNew(tp, NULL, NULL);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003559 if (!result) goto failed;
Pablo Galindoa5634c42020-09-16 19:42:00 +01003560 value = ast2obj_list(state, (asdl_seq*)o->v.Assign.targets,
3561 ast2obj_expr);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003562 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02003563 if (PyObject_SetAttr(result, state->targets, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003564 goto failed;
3565 Py_DECREF(value);
Victor Stinner74419f02020-07-03 11:35:37 +02003566 value = ast2obj_expr(state, o->v.Assign.value);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003567 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02003568 if (PyObject_SetAttr(result, state->value, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003569 goto failed;
3570 Py_DECREF(value);
Victor Stinner74419f02020-07-03 11:35:37 +02003571 value = ast2obj_string(state, o->v.Assign.type_comment);
Guido van Rossumdcfcd142019-01-31 03:40:27 -08003572 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02003573 if (PyObject_SetAttr(result, state->type_comment, value) == -1)
Guido van Rossumdcfcd142019-01-31 03:40:27 -08003574 goto failed;
3575 Py_DECREF(value);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003576 break;
3577 case AugAssign_kind:
Victor Stinner74419f02020-07-03 11:35:37 +02003578 tp = (PyTypeObject *)state->AugAssign_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07003579 result = PyType_GenericNew(tp, NULL, NULL);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003580 if (!result) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02003581 value = ast2obj_expr(state, o->v.AugAssign.target);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003582 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02003583 if (PyObject_SetAttr(result, state->target, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003584 goto failed;
3585 Py_DECREF(value);
Victor Stinner74419f02020-07-03 11:35:37 +02003586 value = ast2obj_operator(state, o->v.AugAssign.op);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003587 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02003588 if (PyObject_SetAttr(result, state->op, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003589 goto failed;
3590 Py_DECREF(value);
Victor Stinner74419f02020-07-03 11:35:37 +02003591 value = ast2obj_expr(state, o->v.AugAssign.value);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003592 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02003593 if (PyObject_SetAttr(result, state->value, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003594 goto failed;
3595 Py_DECREF(value);
3596 break;
Yury Selivanovf8cb8a12016-09-08 20:50:03 -07003597 case AnnAssign_kind:
Victor Stinner74419f02020-07-03 11:35:37 +02003598 tp = (PyTypeObject *)state->AnnAssign_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07003599 result = PyType_GenericNew(tp, NULL, NULL);
Yury Selivanovf8cb8a12016-09-08 20:50:03 -07003600 if (!result) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02003601 value = ast2obj_expr(state, o->v.AnnAssign.target);
Yury Selivanovf8cb8a12016-09-08 20:50:03 -07003602 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02003603 if (PyObject_SetAttr(result, state->target, value) == -1)
Yury Selivanovf8cb8a12016-09-08 20:50:03 -07003604 goto failed;
3605 Py_DECREF(value);
Victor Stinner74419f02020-07-03 11:35:37 +02003606 value = ast2obj_expr(state, o->v.AnnAssign.annotation);
Yury Selivanovf8cb8a12016-09-08 20:50:03 -07003607 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02003608 if (PyObject_SetAttr(result, state->annotation, value) == -1)
Yury Selivanovf8cb8a12016-09-08 20:50:03 -07003609 goto failed;
3610 Py_DECREF(value);
Victor Stinner74419f02020-07-03 11:35:37 +02003611 value = ast2obj_expr(state, o->v.AnnAssign.value);
Yury Selivanovf8cb8a12016-09-08 20:50:03 -07003612 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02003613 if (PyObject_SetAttr(result, state->value, value) == -1)
Yury Selivanovf8cb8a12016-09-08 20:50:03 -07003614 goto failed;
3615 Py_DECREF(value);
Victor Stinner74419f02020-07-03 11:35:37 +02003616 value = ast2obj_int(state, o->v.AnnAssign.simple);
Yury Selivanovf8cb8a12016-09-08 20:50:03 -07003617 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02003618 if (PyObject_SetAttr(result, state->simple, value) == -1)
Yury Selivanovf8cb8a12016-09-08 20:50:03 -07003619 goto failed;
3620 Py_DECREF(value);
3621 break;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003622 case For_kind:
Victor Stinner74419f02020-07-03 11:35:37 +02003623 tp = (PyTypeObject *)state->For_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07003624 result = PyType_GenericNew(tp, NULL, NULL);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003625 if (!result) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02003626 value = ast2obj_expr(state, o->v.For.target);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003627 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02003628 if (PyObject_SetAttr(result, state->target, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003629 goto failed;
3630 Py_DECREF(value);
Victor Stinner74419f02020-07-03 11:35:37 +02003631 value = ast2obj_expr(state, o->v.For.iter);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003632 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02003633 if (PyObject_SetAttr(result, state->iter, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003634 goto failed;
3635 Py_DECREF(value);
Pablo Galindoa5634c42020-09-16 19:42:00 +01003636 value = ast2obj_list(state, (asdl_seq*)o->v.For.body, ast2obj_stmt);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003637 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02003638 if (PyObject_SetAttr(result, state->body, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003639 goto failed;
3640 Py_DECREF(value);
Pablo Galindoa5634c42020-09-16 19:42:00 +01003641 value = ast2obj_list(state, (asdl_seq*)o->v.For.orelse, ast2obj_stmt);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003642 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02003643 if (PyObject_SetAttr(result, state->orelse, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003644 goto failed;
3645 Py_DECREF(value);
Victor Stinner74419f02020-07-03 11:35:37 +02003646 value = ast2obj_string(state, o->v.For.type_comment);
Guido van Rossumdcfcd142019-01-31 03:40:27 -08003647 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02003648 if (PyObject_SetAttr(result, state->type_comment, value) == -1)
Guido van Rossumdcfcd142019-01-31 03:40:27 -08003649 goto failed;
3650 Py_DECREF(value);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003651 break;
Yury Selivanov75445082015-05-11 22:57:16 -04003652 case AsyncFor_kind:
Victor Stinner74419f02020-07-03 11:35:37 +02003653 tp = (PyTypeObject *)state->AsyncFor_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07003654 result = PyType_GenericNew(tp, NULL, NULL);
Yury Selivanov75445082015-05-11 22:57:16 -04003655 if (!result) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02003656 value = ast2obj_expr(state, o->v.AsyncFor.target);
Yury Selivanov75445082015-05-11 22:57:16 -04003657 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02003658 if (PyObject_SetAttr(result, state->target, value) == -1)
Yury Selivanov75445082015-05-11 22:57:16 -04003659 goto failed;
3660 Py_DECREF(value);
Victor Stinner74419f02020-07-03 11:35:37 +02003661 value = ast2obj_expr(state, o->v.AsyncFor.iter);
Yury Selivanov75445082015-05-11 22:57:16 -04003662 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02003663 if (PyObject_SetAttr(result, state->iter, value) == -1)
Yury Selivanov75445082015-05-11 22:57:16 -04003664 goto failed;
3665 Py_DECREF(value);
Pablo Galindoa5634c42020-09-16 19:42:00 +01003666 value = ast2obj_list(state, (asdl_seq*)o->v.AsyncFor.body,
3667 ast2obj_stmt);
Yury Selivanov75445082015-05-11 22:57:16 -04003668 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02003669 if (PyObject_SetAttr(result, state->body, value) == -1)
Yury Selivanov75445082015-05-11 22:57:16 -04003670 goto failed;
3671 Py_DECREF(value);
Pablo Galindoa5634c42020-09-16 19:42:00 +01003672 value = ast2obj_list(state, (asdl_seq*)o->v.AsyncFor.orelse,
3673 ast2obj_stmt);
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->orelse, 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_string(state, o->v.AsyncFor.type_comment);
Guido van Rossumdcfcd142019-01-31 03:40:27 -08003679 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02003680 if (PyObject_SetAttr(result, state->type_comment, value) == -1)
Guido van Rossumdcfcd142019-01-31 03:40:27 -08003681 goto failed;
3682 Py_DECREF(value);
Yury Selivanov75445082015-05-11 22:57:16 -04003683 break;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003684 case While_kind:
Victor Stinner74419f02020-07-03 11:35:37 +02003685 tp = (PyTypeObject *)state->While_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07003686 result = PyType_GenericNew(tp, NULL, NULL);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003687 if (!result) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02003688 value = ast2obj_expr(state, o->v.While.test);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003689 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02003690 if (PyObject_SetAttr(result, state->test, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003691 goto failed;
3692 Py_DECREF(value);
Pablo Galindoa5634c42020-09-16 19:42:00 +01003693 value = ast2obj_list(state, (asdl_seq*)o->v.While.body, ast2obj_stmt);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003694 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02003695 if (PyObject_SetAttr(result, state->body, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003696 goto failed;
3697 Py_DECREF(value);
Pablo Galindoa5634c42020-09-16 19:42:00 +01003698 value = ast2obj_list(state, (asdl_seq*)o->v.While.orelse, ast2obj_stmt);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003699 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02003700 if (PyObject_SetAttr(result, state->orelse, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003701 goto failed;
3702 Py_DECREF(value);
3703 break;
3704 case If_kind:
Victor Stinner74419f02020-07-03 11:35:37 +02003705 tp = (PyTypeObject *)state->If_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07003706 result = PyType_GenericNew(tp, NULL, NULL);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003707 if (!result) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02003708 value = ast2obj_expr(state, o->v.If.test);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003709 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02003710 if (PyObject_SetAttr(result, state->test, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003711 goto failed;
3712 Py_DECREF(value);
Pablo Galindoa5634c42020-09-16 19:42:00 +01003713 value = ast2obj_list(state, (asdl_seq*)o->v.If.body, ast2obj_stmt);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003714 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02003715 if (PyObject_SetAttr(result, state->body, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003716 goto failed;
3717 Py_DECREF(value);
Pablo Galindoa5634c42020-09-16 19:42:00 +01003718 value = ast2obj_list(state, (asdl_seq*)o->v.If.orelse, ast2obj_stmt);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003719 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02003720 if (PyObject_SetAttr(result, state->orelse, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003721 goto failed;
3722 Py_DECREF(value);
3723 break;
3724 case With_kind:
Victor Stinner74419f02020-07-03 11:35:37 +02003725 tp = (PyTypeObject *)state->With_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07003726 result = PyType_GenericNew(tp, NULL, NULL);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003727 if (!result) goto failed;
Pablo Galindoa5634c42020-09-16 19:42:00 +01003728 value = ast2obj_list(state, (asdl_seq*)o->v.With.items,
3729 ast2obj_withitem);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003730 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02003731 if (PyObject_SetAttr(result, state->items, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003732 goto failed;
3733 Py_DECREF(value);
Pablo Galindoa5634c42020-09-16 19:42:00 +01003734 value = ast2obj_list(state, (asdl_seq*)o->v.With.body, ast2obj_stmt);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003735 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02003736 if (PyObject_SetAttr(result, state->body, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003737 goto failed;
3738 Py_DECREF(value);
Victor Stinner74419f02020-07-03 11:35:37 +02003739 value = ast2obj_string(state, o->v.With.type_comment);
Guido van Rossumdcfcd142019-01-31 03:40:27 -08003740 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02003741 if (PyObject_SetAttr(result, state->type_comment, value) == -1)
Guido van Rossumdcfcd142019-01-31 03:40:27 -08003742 goto failed;
3743 Py_DECREF(value);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003744 break;
Yury Selivanov75445082015-05-11 22:57:16 -04003745 case AsyncWith_kind:
Victor Stinner74419f02020-07-03 11:35:37 +02003746 tp = (PyTypeObject *)state->AsyncWith_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07003747 result = PyType_GenericNew(tp, NULL, NULL);
Yury Selivanov75445082015-05-11 22:57:16 -04003748 if (!result) goto failed;
Pablo Galindoa5634c42020-09-16 19:42:00 +01003749 value = ast2obj_list(state, (asdl_seq*)o->v.AsyncWith.items,
3750 ast2obj_withitem);
Yury Selivanov75445082015-05-11 22:57:16 -04003751 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02003752 if (PyObject_SetAttr(result, state->items, value) == -1)
Yury Selivanov75445082015-05-11 22:57:16 -04003753 goto failed;
3754 Py_DECREF(value);
Pablo Galindoa5634c42020-09-16 19:42:00 +01003755 value = ast2obj_list(state, (asdl_seq*)o->v.AsyncWith.body,
3756 ast2obj_stmt);
Yury Selivanov75445082015-05-11 22:57:16 -04003757 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02003758 if (PyObject_SetAttr(result, state->body, value) == -1)
Yury Selivanov75445082015-05-11 22:57:16 -04003759 goto failed;
3760 Py_DECREF(value);
Victor Stinner74419f02020-07-03 11:35:37 +02003761 value = ast2obj_string(state, o->v.AsyncWith.type_comment);
Guido van Rossumdcfcd142019-01-31 03:40:27 -08003762 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02003763 if (PyObject_SetAttr(result, state->type_comment, value) == -1)
Guido van Rossumdcfcd142019-01-31 03:40:27 -08003764 goto failed;
3765 Py_DECREF(value);
Yury Selivanov75445082015-05-11 22:57:16 -04003766 break;
Brandt Bucher145bf262021-02-26 14:51:55 -08003767 case Match_kind:
3768 tp = (PyTypeObject *)state->Match_type;
3769 result = PyType_GenericNew(tp, NULL, NULL);
3770 if (!result) goto failed;
3771 value = ast2obj_expr(state, o->v.Match.subject);
3772 if (!value) goto failed;
3773 if (PyObject_SetAttr(result, state->subject, value) == -1)
3774 goto failed;
3775 Py_DECREF(value);
3776 value = ast2obj_list(state, (asdl_seq*)o->v.Match.cases,
3777 ast2obj_match_case);
3778 if (!value) goto failed;
3779 if (PyObject_SetAttr(result, state->cases, value) == -1)
3780 goto failed;
3781 Py_DECREF(value);
3782 break;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003783 case Raise_kind:
Victor Stinner74419f02020-07-03 11:35:37 +02003784 tp = (PyTypeObject *)state->Raise_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07003785 result = PyType_GenericNew(tp, NULL, NULL);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003786 if (!result) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02003787 value = ast2obj_expr(state, o->v.Raise.exc);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003788 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02003789 if (PyObject_SetAttr(result, state->exc, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003790 goto failed;
3791 Py_DECREF(value);
Victor Stinner74419f02020-07-03 11:35:37 +02003792 value = ast2obj_expr(state, o->v.Raise.cause);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003793 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02003794 if (PyObject_SetAttr(result, state->cause, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003795 goto failed;
3796 Py_DECREF(value);
3797 break;
3798 case Try_kind:
Victor Stinner74419f02020-07-03 11:35:37 +02003799 tp = (PyTypeObject *)state->Try_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07003800 result = PyType_GenericNew(tp, NULL, NULL);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003801 if (!result) goto failed;
Pablo Galindoa5634c42020-09-16 19:42:00 +01003802 value = ast2obj_list(state, (asdl_seq*)o->v.Try.body, ast2obj_stmt);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003803 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02003804 if (PyObject_SetAttr(result, state->body, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003805 goto failed;
3806 Py_DECREF(value);
Pablo Galindoa5634c42020-09-16 19:42:00 +01003807 value = ast2obj_list(state, (asdl_seq*)o->v.Try.handlers,
3808 ast2obj_excepthandler);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003809 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02003810 if (PyObject_SetAttr(result, state->handlers, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003811 goto failed;
3812 Py_DECREF(value);
Pablo Galindoa5634c42020-09-16 19:42:00 +01003813 value = ast2obj_list(state, (asdl_seq*)o->v.Try.orelse, ast2obj_stmt);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003814 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02003815 if (PyObject_SetAttr(result, state->orelse, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003816 goto failed;
3817 Py_DECREF(value);
Pablo Galindoa5634c42020-09-16 19:42:00 +01003818 value = ast2obj_list(state, (asdl_seq*)o->v.Try.finalbody,
3819 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->finalbody, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003822 goto failed;
3823 Py_DECREF(value);
3824 break;
3825 case Assert_kind:
Victor Stinner74419f02020-07-03 11:35:37 +02003826 tp = (PyTypeObject *)state->Assert_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07003827 result = PyType_GenericNew(tp, NULL, NULL);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003828 if (!result) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02003829 value = ast2obj_expr(state, o->v.Assert.test);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003830 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02003831 if (PyObject_SetAttr(result, state->test, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003832 goto failed;
3833 Py_DECREF(value);
Victor Stinner74419f02020-07-03 11:35:37 +02003834 value = ast2obj_expr(state, o->v.Assert.msg);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003835 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02003836 if (PyObject_SetAttr(result, state->msg, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003837 goto failed;
3838 Py_DECREF(value);
3839 break;
3840 case Import_kind:
Victor Stinner74419f02020-07-03 11:35:37 +02003841 tp = (PyTypeObject *)state->Import_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07003842 result = PyType_GenericNew(tp, NULL, NULL);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003843 if (!result) goto failed;
Pablo Galindoa5634c42020-09-16 19:42:00 +01003844 value = ast2obj_list(state, (asdl_seq*)o->v.Import.names,
3845 ast2obj_alias);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003846 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02003847 if (PyObject_SetAttr(result, state->names, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003848 goto failed;
3849 Py_DECREF(value);
3850 break;
3851 case ImportFrom_kind:
Victor Stinner74419f02020-07-03 11:35:37 +02003852 tp = (PyTypeObject *)state->ImportFrom_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07003853 result = PyType_GenericNew(tp, NULL, NULL);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003854 if (!result) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02003855 value = ast2obj_identifier(state, o->v.ImportFrom.module);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003856 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02003857 if (PyObject_SetAttr(result, state->module, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003858 goto failed;
3859 Py_DECREF(value);
Pablo Galindoa5634c42020-09-16 19:42:00 +01003860 value = ast2obj_list(state, (asdl_seq*)o->v.ImportFrom.names,
3861 ast2obj_alias);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003862 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02003863 if (PyObject_SetAttr(result, state->names, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003864 goto failed;
3865 Py_DECREF(value);
Victor Stinner74419f02020-07-03 11:35:37 +02003866 value = ast2obj_int(state, o->v.ImportFrom.level);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003867 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02003868 if (PyObject_SetAttr(result, state->level, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003869 goto failed;
3870 Py_DECREF(value);
3871 break;
3872 case Global_kind:
Victor Stinner74419f02020-07-03 11:35:37 +02003873 tp = (PyTypeObject *)state->Global_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07003874 result = PyType_GenericNew(tp, NULL, NULL);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003875 if (!result) goto failed;
Pablo Galindoa5634c42020-09-16 19:42:00 +01003876 value = ast2obj_list(state, (asdl_seq*)o->v.Global.names,
3877 ast2obj_identifier);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003878 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02003879 if (PyObject_SetAttr(result, state->names, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003880 goto failed;
3881 Py_DECREF(value);
3882 break;
3883 case Nonlocal_kind:
Victor Stinner74419f02020-07-03 11:35:37 +02003884 tp = (PyTypeObject *)state->Nonlocal_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07003885 result = PyType_GenericNew(tp, NULL, NULL);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003886 if (!result) goto failed;
Pablo Galindoa5634c42020-09-16 19:42:00 +01003887 value = ast2obj_list(state, (asdl_seq*)o->v.Nonlocal.names,
3888 ast2obj_identifier);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003889 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02003890 if (PyObject_SetAttr(result, state->names, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003891 goto failed;
3892 Py_DECREF(value);
3893 break;
3894 case Expr_kind:
Victor Stinner74419f02020-07-03 11:35:37 +02003895 tp = (PyTypeObject *)state->Expr_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07003896 result = PyType_GenericNew(tp, NULL, NULL);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003897 if (!result) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02003898 value = ast2obj_expr(state, o->v.Expr.value);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003899 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02003900 if (PyObject_SetAttr(result, state->value, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003901 goto failed;
3902 Py_DECREF(value);
3903 break;
3904 case Pass_kind:
Victor Stinner74419f02020-07-03 11:35:37 +02003905 tp = (PyTypeObject *)state->Pass_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07003906 result = PyType_GenericNew(tp, NULL, NULL);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003907 if (!result) goto failed;
3908 break;
3909 case Break_kind:
Victor Stinner74419f02020-07-03 11:35:37 +02003910 tp = (PyTypeObject *)state->Break_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07003911 result = PyType_GenericNew(tp, NULL, NULL);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003912 if (!result) goto failed;
3913 break;
3914 case Continue_kind:
Victor Stinner74419f02020-07-03 11:35:37 +02003915 tp = (PyTypeObject *)state->Continue_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07003916 result = PyType_GenericNew(tp, NULL, NULL);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003917 if (!result) goto failed;
3918 break;
3919 }
Victor Stinner74419f02020-07-03 11:35:37 +02003920 value = ast2obj_int(state, o->lineno);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003921 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02003922 if (PyObject_SetAttr(result, state->lineno, value) < 0)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003923 goto failed;
3924 Py_DECREF(value);
Victor Stinner74419f02020-07-03 11:35:37 +02003925 value = ast2obj_int(state, o->col_offset);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003926 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02003927 if (PyObject_SetAttr(result, state->col_offset, value) < 0)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003928 goto failed;
3929 Py_DECREF(value);
Victor Stinner74419f02020-07-03 11:35:37 +02003930 value = ast2obj_int(state, o->end_lineno);
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00003931 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02003932 if (PyObject_SetAttr(result, state->end_lineno, value) < 0)
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00003933 goto failed;
3934 Py_DECREF(value);
Victor Stinner74419f02020-07-03 11:35:37 +02003935 value = ast2obj_int(state, o->end_col_offset);
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00003936 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02003937 if (PyObject_SetAttr(result, state->end_col_offset, value) < 0)
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00003938 goto failed;
3939 Py_DECREF(value);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003940 return result;
Martin v. Löwisbd260da2006-02-26 19:42:26 +00003941failed:
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003942 Py_XDECREF(value);
3943 Py_XDECREF(result);
3944 return NULL;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00003945}
3946
Martin v. Löwisbd260da2006-02-26 19:42:26 +00003947PyObject*
Victor Stinner5cf47822020-11-02 22:03:28 +01003948ast2obj_expr(struct ast_state *state, void* _o)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00003949{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003950 expr_ty o = (expr_ty)_o;
3951 PyObject *result = NULL, *value = NULL;
Dino Viehlandac46eb42019-09-11 10:16:34 -07003952 PyTypeObject *tp;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003953 if (!o) {
Serhiy Storchaka228b12e2017-01-23 09:47:21 +02003954 Py_RETURN_NONE;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003955 }
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003956 switch (o->kind) {
3957 case BoolOp_kind:
Victor Stinner74419f02020-07-03 11:35:37 +02003958 tp = (PyTypeObject *)state->BoolOp_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07003959 result = PyType_GenericNew(tp, NULL, NULL);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003960 if (!result) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02003961 value = ast2obj_boolop(state, o->v.BoolOp.op);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003962 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02003963 if (PyObject_SetAttr(result, state->op, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003964 goto failed;
3965 Py_DECREF(value);
Pablo Galindoa5634c42020-09-16 19:42:00 +01003966 value = ast2obj_list(state, (asdl_seq*)o->v.BoolOp.values,
3967 ast2obj_expr);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003968 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02003969 if (PyObject_SetAttr(result, state->values, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003970 goto failed;
3971 Py_DECREF(value);
3972 break;
Emily Morehouse8f59ee02019-01-24 16:49:56 -07003973 case NamedExpr_kind:
Victor Stinner74419f02020-07-03 11:35:37 +02003974 tp = (PyTypeObject *)state->NamedExpr_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07003975 result = PyType_GenericNew(tp, NULL, NULL);
Emily Morehouse8f59ee02019-01-24 16:49:56 -07003976 if (!result) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02003977 value = ast2obj_expr(state, o->v.NamedExpr.target);
Emily Morehouse8f59ee02019-01-24 16:49:56 -07003978 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02003979 if (PyObject_SetAttr(result, state->target, value) == -1)
Emily Morehouse8f59ee02019-01-24 16:49:56 -07003980 goto failed;
3981 Py_DECREF(value);
Victor Stinner74419f02020-07-03 11:35:37 +02003982 value = ast2obj_expr(state, o->v.NamedExpr.value);
Emily Morehouse8f59ee02019-01-24 16:49:56 -07003983 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02003984 if (PyObject_SetAttr(result, state->value, value) == -1)
Emily Morehouse8f59ee02019-01-24 16:49:56 -07003985 goto failed;
3986 Py_DECREF(value);
3987 break;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003988 case BinOp_kind:
Victor Stinner74419f02020-07-03 11:35:37 +02003989 tp = (PyTypeObject *)state->BinOp_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07003990 result = PyType_GenericNew(tp, NULL, NULL);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003991 if (!result) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02003992 value = ast2obj_expr(state, o->v.BinOp.left);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003993 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02003994 if (PyObject_SetAttr(result, state->left, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003995 goto failed;
3996 Py_DECREF(value);
Victor Stinner74419f02020-07-03 11:35:37 +02003997 value = ast2obj_operator(state, o->v.BinOp.op);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003998 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02003999 if (PyObject_SetAttr(result, state->op, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004000 goto failed;
4001 Py_DECREF(value);
Victor Stinner74419f02020-07-03 11:35:37 +02004002 value = ast2obj_expr(state, o->v.BinOp.right);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004003 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004004 if (PyObject_SetAttr(result, state->right, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004005 goto failed;
4006 Py_DECREF(value);
4007 break;
4008 case UnaryOp_kind:
Victor Stinner74419f02020-07-03 11:35:37 +02004009 tp = (PyTypeObject *)state->UnaryOp_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07004010 result = PyType_GenericNew(tp, NULL, NULL);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004011 if (!result) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004012 value = ast2obj_unaryop(state, o->v.UnaryOp.op);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004013 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004014 if (PyObject_SetAttr(result, state->op, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004015 goto failed;
4016 Py_DECREF(value);
Victor Stinner74419f02020-07-03 11:35:37 +02004017 value = ast2obj_expr(state, o->v.UnaryOp.operand);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004018 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004019 if (PyObject_SetAttr(result, state->operand, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004020 goto failed;
4021 Py_DECREF(value);
4022 break;
4023 case Lambda_kind:
Victor Stinner74419f02020-07-03 11:35:37 +02004024 tp = (PyTypeObject *)state->Lambda_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07004025 result = PyType_GenericNew(tp, NULL, NULL);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004026 if (!result) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004027 value = ast2obj_arguments(state, o->v.Lambda.args);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004028 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004029 if (PyObject_SetAttr(result, state->args, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004030 goto failed;
4031 Py_DECREF(value);
Victor Stinner74419f02020-07-03 11:35:37 +02004032 value = ast2obj_expr(state, o->v.Lambda.body);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004033 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004034 if (PyObject_SetAttr(result, state->body, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004035 goto failed;
4036 Py_DECREF(value);
4037 break;
4038 case IfExp_kind:
Victor Stinner74419f02020-07-03 11:35:37 +02004039 tp = (PyTypeObject *)state->IfExp_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07004040 result = PyType_GenericNew(tp, NULL, NULL);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004041 if (!result) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004042 value = ast2obj_expr(state, o->v.IfExp.test);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004043 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004044 if (PyObject_SetAttr(result, state->test, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004045 goto failed;
4046 Py_DECREF(value);
Victor Stinner74419f02020-07-03 11:35:37 +02004047 value = ast2obj_expr(state, o->v.IfExp.body);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004048 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004049 if (PyObject_SetAttr(result, state->body, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004050 goto failed;
4051 Py_DECREF(value);
Victor Stinner74419f02020-07-03 11:35:37 +02004052 value = ast2obj_expr(state, o->v.IfExp.orelse);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004053 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004054 if (PyObject_SetAttr(result, state->orelse, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004055 goto failed;
4056 Py_DECREF(value);
4057 break;
4058 case Dict_kind:
Victor Stinner74419f02020-07-03 11:35:37 +02004059 tp = (PyTypeObject *)state->Dict_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07004060 result = PyType_GenericNew(tp, NULL, NULL);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004061 if (!result) goto failed;
Pablo Galindoa5634c42020-09-16 19:42:00 +01004062 value = ast2obj_list(state, (asdl_seq*)o->v.Dict.keys, ast2obj_expr);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004063 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004064 if (PyObject_SetAttr(result, state->keys, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004065 goto failed;
4066 Py_DECREF(value);
Pablo Galindoa5634c42020-09-16 19:42:00 +01004067 value = ast2obj_list(state, (asdl_seq*)o->v.Dict.values, ast2obj_expr);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004068 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004069 if (PyObject_SetAttr(result, state->values, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004070 goto failed;
4071 Py_DECREF(value);
4072 break;
4073 case Set_kind:
Victor Stinner74419f02020-07-03 11:35:37 +02004074 tp = (PyTypeObject *)state->Set_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07004075 result = PyType_GenericNew(tp, NULL, NULL);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004076 if (!result) goto failed;
Pablo Galindoa5634c42020-09-16 19:42:00 +01004077 value = ast2obj_list(state, (asdl_seq*)o->v.Set.elts, ast2obj_expr);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004078 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004079 if (PyObject_SetAttr(result, state->elts, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004080 goto failed;
4081 Py_DECREF(value);
4082 break;
4083 case ListComp_kind:
Victor Stinner74419f02020-07-03 11:35:37 +02004084 tp = (PyTypeObject *)state->ListComp_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07004085 result = PyType_GenericNew(tp, NULL, NULL);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004086 if (!result) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004087 value = ast2obj_expr(state, o->v.ListComp.elt);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004088 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004089 if (PyObject_SetAttr(result, state->elt, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004090 goto failed;
4091 Py_DECREF(value);
Pablo Galindoa5634c42020-09-16 19:42:00 +01004092 value = ast2obj_list(state, (asdl_seq*)o->v.ListComp.generators,
Victor Stinner74419f02020-07-03 11:35:37 +02004093 ast2obj_comprehension);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004094 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004095 if (PyObject_SetAttr(result, state->generators, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004096 goto failed;
4097 Py_DECREF(value);
4098 break;
4099 case SetComp_kind:
Victor Stinner74419f02020-07-03 11:35:37 +02004100 tp = (PyTypeObject *)state->SetComp_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07004101 result = PyType_GenericNew(tp, NULL, NULL);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004102 if (!result) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004103 value = ast2obj_expr(state, o->v.SetComp.elt);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004104 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004105 if (PyObject_SetAttr(result, state->elt, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004106 goto failed;
4107 Py_DECREF(value);
Pablo Galindoa5634c42020-09-16 19:42:00 +01004108 value = ast2obj_list(state, (asdl_seq*)o->v.SetComp.generators,
Victor Stinner74419f02020-07-03 11:35:37 +02004109 ast2obj_comprehension);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004110 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004111 if (PyObject_SetAttr(result, state->generators, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004112 goto failed;
4113 Py_DECREF(value);
4114 break;
4115 case DictComp_kind:
Victor Stinner74419f02020-07-03 11:35:37 +02004116 tp = (PyTypeObject *)state->DictComp_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07004117 result = PyType_GenericNew(tp, NULL, NULL);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004118 if (!result) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004119 value = ast2obj_expr(state, o->v.DictComp.key);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004120 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004121 if (PyObject_SetAttr(result, state->key, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004122 goto failed;
4123 Py_DECREF(value);
Victor Stinner74419f02020-07-03 11:35:37 +02004124 value = ast2obj_expr(state, o->v.DictComp.value);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004125 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004126 if (PyObject_SetAttr(result, state->value, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004127 goto failed;
4128 Py_DECREF(value);
Pablo Galindoa5634c42020-09-16 19:42:00 +01004129 value = ast2obj_list(state, (asdl_seq*)o->v.DictComp.generators,
Victor Stinner74419f02020-07-03 11:35:37 +02004130 ast2obj_comprehension);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004131 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004132 if (PyObject_SetAttr(result, state->generators, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004133 goto failed;
4134 Py_DECREF(value);
4135 break;
4136 case GeneratorExp_kind:
Victor Stinner74419f02020-07-03 11:35:37 +02004137 tp = (PyTypeObject *)state->GeneratorExp_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07004138 result = PyType_GenericNew(tp, NULL, NULL);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004139 if (!result) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004140 value = ast2obj_expr(state, o->v.GeneratorExp.elt);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004141 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004142 if (PyObject_SetAttr(result, state->elt, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004143 goto failed;
4144 Py_DECREF(value);
Pablo Galindoa5634c42020-09-16 19:42:00 +01004145 value = ast2obj_list(state, (asdl_seq*)o->v.GeneratorExp.generators,
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004146 ast2obj_comprehension);
4147 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004148 if (PyObject_SetAttr(result, state->generators, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004149 goto failed;
4150 Py_DECREF(value);
4151 break;
Yury Selivanov75445082015-05-11 22:57:16 -04004152 case Await_kind:
Victor Stinner74419f02020-07-03 11:35:37 +02004153 tp = (PyTypeObject *)state->Await_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07004154 result = PyType_GenericNew(tp, NULL, NULL);
Yury Selivanov75445082015-05-11 22:57:16 -04004155 if (!result) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004156 value = ast2obj_expr(state, o->v.Await.value);
Yury Selivanov75445082015-05-11 22:57:16 -04004157 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004158 if (PyObject_SetAttr(result, state->value, value) == -1)
Yury Selivanov75445082015-05-11 22:57:16 -04004159 goto failed;
4160 Py_DECREF(value);
4161 break;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004162 case Yield_kind:
Victor Stinner74419f02020-07-03 11:35:37 +02004163 tp = (PyTypeObject *)state->Yield_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07004164 result = PyType_GenericNew(tp, NULL, NULL);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004165 if (!result) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004166 value = ast2obj_expr(state, o->v.Yield.value);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004167 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004168 if (PyObject_SetAttr(result, state->value, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004169 goto failed;
4170 Py_DECREF(value);
4171 break;
4172 case YieldFrom_kind:
Victor Stinner74419f02020-07-03 11:35:37 +02004173 tp = (PyTypeObject *)state->YieldFrom_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07004174 result = PyType_GenericNew(tp, NULL, NULL);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004175 if (!result) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004176 value = ast2obj_expr(state, o->v.YieldFrom.value);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004177 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004178 if (PyObject_SetAttr(result, state->value, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004179 goto failed;
4180 Py_DECREF(value);
4181 break;
4182 case Compare_kind:
Victor Stinner74419f02020-07-03 11:35:37 +02004183 tp = (PyTypeObject *)state->Compare_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07004184 result = PyType_GenericNew(tp, NULL, NULL);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004185 if (!result) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004186 value = ast2obj_expr(state, o->v.Compare.left);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004187 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004188 if (PyObject_SetAttr(result, state->left, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004189 goto failed;
4190 Py_DECREF(value);
4191 {
4192 Py_ssize_t i, n = asdl_seq_LEN(o->v.Compare.ops);
4193 value = PyList_New(n);
4194 if (!value) goto failed;
4195 for(i = 0; i < n; i++)
Victor Stinner74419f02020-07-03 11:35:37 +02004196 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 +00004197 }
Martin v. Löwis577b5b92006-02-27 15:23:19 +00004198 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004199 if (PyObject_SetAttr(result, state->ops, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004200 goto failed;
Martin v. Löwis03e5bc02006-03-02 00:31:27 +00004201 Py_DECREF(value);
Pablo Galindoa5634c42020-09-16 19:42:00 +01004202 value = ast2obj_list(state, (asdl_seq*)o->v.Compare.comparators,
4203 ast2obj_expr);
Martin v. Löwis49c5da12006-03-01 22:49:05 +00004204 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004205 if (PyObject_SetAttr(result, state->comparators, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004206 goto failed;
Martin v. Löwis03e5bc02006-03-02 00:31:27 +00004207 Py_DECREF(value);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004208 break;
4209 case Call_kind:
Victor Stinner74419f02020-07-03 11:35:37 +02004210 tp = (PyTypeObject *)state->Call_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07004211 result = PyType_GenericNew(tp, NULL, NULL);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004212 if (!result) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004213 value = ast2obj_expr(state, o->v.Call.func);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004214 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004215 if (PyObject_SetAttr(result, state->func, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004216 goto failed;
4217 Py_DECREF(value);
Pablo Galindoa5634c42020-09-16 19:42:00 +01004218 value = ast2obj_list(state, (asdl_seq*)o->v.Call.args, ast2obj_expr);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004219 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004220 if (PyObject_SetAttr(result, state->args, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004221 goto failed;
4222 Py_DECREF(value);
Pablo Galindoa5634c42020-09-16 19:42:00 +01004223 value = ast2obj_list(state, (asdl_seq*)o->v.Call.keywords,
4224 ast2obj_keyword);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004225 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004226 if (PyObject_SetAttr(result, state->keywords, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004227 goto failed;
4228 Py_DECREF(value);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004229 break;
Eric V. Smith235a6f02015-09-19 14:51:32 -04004230 case FormattedValue_kind:
Victor Stinner74419f02020-07-03 11:35:37 +02004231 tp = (PyTypeObject *)state->FormattedValue_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07004232 result = PyType_GenericNew(tp, NULL, NULL);
Eric V. Smith235a6f02015-09-19 14:51:32 -04004233 if (!result) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004234 value = ast2obj_expr(state, o->v.FormattedValue.value);
Eric V. Smith235a6f02015-09-19 14:51:32 -04004235 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004236 if (PyObject_SetAttr(result, state->value, value) == -1)
Eric V. Smith235a6f02015-09-19 14:51:32 -04004237 goto failed;
4238 Py_DECREF(value);
Victor Stinner74419f02020-07-03 11:35:37 +02004239 value = ast2obj_int(state, o->v.FormattedValue.conversion);
Eric V. Smith235a6f02015-09-19 14:51:32 -04004240 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004241 if (PyObject_SetAttr(result, state->conversion, value) == -1)
Eric V. Smith235a6f02015-09-19 14:51:32 -04004242 goto failed;
4243 Py_DECREF(value);
Victor Stinner74419f02020-07-03 11:35:37 +02004244 value = ast2obj_expr(state, o->v.FormattedValue.format_spec);
Eric V. Smith235a6f02015-09-19 14:51:32 -04004245 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004246 if (PyObject_SetAttr(result, state->format_spec, value) == -1)
Eric V. Smith235a6f02015-09-19 14:51:32 -04004247 goto failed;
4248 Py_DECREF(value);
4249 break;
4250 case JoinedStr_kind:
Victor Stinner74419f02020-07-03 11:35:37 +02004251 tp = (PyTypeObject *)state->JoinedStr_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07004252 result = PyType_GenericNew(tp, NULL, NULL);
Eric V. Smith235a6f02015-09-19 14:51:32 -04004253 if (!result) goto failed;
Pablo Galindoa5634c42020-09-16 19:42:00 +01004254 value = ast2obj_list(state, (asdl_seq*)o->v.JoinedStr.values,
4255 ast2obj_expr);
Eric V. Smith235a6f02015-09-19 14:51:32 -04004256 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004257 if (PyObject_SetAttr(result, state->values, value) == -1)
Eric V. Smith235a6f02015-09-19 14:51:32 -04004258 goto failed;
4259 Py_DECREF(value);
4260 break;
Victor Stinnerf2c1aa12016-01-26 00:40:57 +01004261 case Constant_kind:
Victor Stinner74419f02020-07-03 11:35:37 +02004262 tp = (PyTypeObject *)state->Constant_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07004263 result = PyType_GenericNew(tp, NULL, NULL);
Victor Stinnerf2c1aa12016-01-26 00:40:57 +01004264 if (!result) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004265 value = ast2obj_constant(state, o->v.Constant.value);
Victor Stinnerf2c1aa12016-01-26 00:40:57 +01004266 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004267 if (PyObject_SetAttr(result, state->value, value) == -1)
Victor Stinnerf2c1aa12016-01-26 00:40:57 +01004268 goto failed;
4269 Py_DECREF(value);
Victor Stinner74419f02020-07-03 11:35:37 +02004270 value = ast2obj_string(state, o->v.Constant.kind);
Guido van Rossum10f8ce62019-03-13 13:00:46 -07004271 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004272 if (PyObject_SetAttr(result, state->kind, value) == -1)
Guido van Rossum10f8ce62019-03-13 13:00:46 -07004273 goto failed;
4274 Py_DECREF(value);
Victor Stinnerf2c1aa12016-01-26 00:40:57 +01004275 break;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004276 case Attribute_kind:
Victor Stinner74419f02020-07-03 11:35:37 +02004277 tp = (PyTypeObject *)state->Attribute_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07004278 result = PyType_GenericNew(tp, NULL, NULL);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004279 if (!result) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004280 value = ast2obj_expr(state, o->v.Attribute.value);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004281 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004282 if (PyObject_SetAttr(result, state->value, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004283 goto failed;
4284 Py_DECREF(value);
Victor Stinner74419f02020-07-03 11:35:37 +02004285 value = ast2obj_identifier(state, o->v.Attribute.attr);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004286 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004287 if (PyObject_SetAttr(result, state->attr, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004288 goto failed;
4289 Py_DECREF(value);
Victor Stinner74419f02020-07-03 11:35:37 +02004290 value = ast2obj_expr_context(state, o->v.Attribute.ctx);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004291 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004292 if (PyObject_SetAttr(result, state->ctx, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004293 goto failed;
4294 Py_DECREF(value);
4295 break;
4296 case Subscript_kind:
Victor Stinner74419f02020-07-03 11:35:37 +02004297 tp = (PyTypeObject *)state->Subscript_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07004298 result = PyType_GenericNew(tp, NULL, NULL);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004299 if (!result) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004300 value = ast2obj_expr(state, o->v.Subscript.value);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004301 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004302 if (PyObject_SetAttr(result, state->value, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004303 goto failed;
4304 Py_DECREF(value);
Victor Stinner74419f02020-07-03 11:35:37 +02004305 value = ast2obj_expr(state, o->v.Subscript.slice);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004306 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004307 if (PyObject_SetAttr(result, state->slice, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004308 goto failed;
4309 Py_DECREF(value);
Victor Stinner74419f02020-07-03 11:35:37 +02004310 value = ast2obj_expr_context(state, o->v.Subscript.ctx);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004311 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004312 if (PyObject_SetAttr(result, state->ctx, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004313 goto failed;
4314 Py_DECREF(value);
4315 break;
4316 case Starred_kind:
Victor Stinner74419f02020-07-03 11:35:37 +02004317 tp = (PyTypeObject *)state->Starred_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07004318 result = PyType_GenericNew(tp, NULL, NULL);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004319 if (!result) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004320 value = ast2obj_expr(state, o->v.Starred.value);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004321 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004322 if (PyObject_SetAttr(result, state->value, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004323 goto failed;
4324 Py_DECREF(value);
Victor Stinner74419f02020-07-03 11:35:37 +02004325 value = ast2obj_expr_context(state, o->v.Starred.ctx);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004326 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004327 if (PyObject_SetAttr(result, state->ctx, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004328 goto failed;
4329 Py_DECREF(value);
4330 break;
4331 case Name_kind:
Victor Stinner74419f02020-07-03 11:35:37 +02004332 tp = (PyTypeObject *)state->Name_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07004333 result = PyType_GenericNew(tp, NULL, NULL);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004334 if (!result) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004335 value = ast2obj_identifier(state, o->v.Name.id);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004336 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004337 if (PyObject_SetAttr(result, state->id, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004338 goto failed;
4339 Py_DECREF(value);
Victor Stinner74419f02020-07-03 11:35:37 +02004340 value = ast2obj_expr_context(state, o->v.Name.ctx);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004341 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004342 if (PyObject_SetAttr(result, state->ctx, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004343 goto failed;
4344 Py_DECREF(value);
4345 break;
4346 case List_kind:
Victor Stinner74419f02020-07-03 11:35:37 +02004347 tp = (PyTypeObject *)state->List_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07004348 result = PyType_GenericNew(tp, NULL, NULL);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004349 if (!result) goto failed;
Pablo Galindoa5634c42020-09-16 19:42:00 +01004350 value = ast2obj_list(state, (asdl_seq*)o->v.List.elts, ast2obj_expr);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004351 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004352 if (PyObject_SetAttr(result, state->elts, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004353 goto failed;
4354 Py_DECREF(value);
Victor Stinner74419f02020-07-03 11:35:37 +02004355 value = ast2obj_expr_context(state, o->v.List.ctx);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004356 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004357 if (PyObject_SetAttr(result, state->ctx, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004358 goto failed;
4359 Py_DECREF(value);
4360 break;
4361 case Tuple_kind:
Victor Stinner74419f02020-07-03 11:35:37 +02004362 tp = (PyTypeObject *)state->Tuple_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07004363 result = PyType_GenericNew(tp, NULL, NULL);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004364 if (!result) goto failed;
Pablo Galindoa5634c42020-09-16 19:42:00 +01004365 value = ast2obj_list(state, (asdl_seq*)o->v.Tuple.elts, ast2obj_expr);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004366 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004367 if (PyObject_SetAttr(result, state->elts, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004368 goto failed;
4369 Py_DECREF(value);
Victor Stinner74419f02020-07-03 11:35:37 +02004370 value = ast2obj_expr_context(state, o->v.Tuple.ctx);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004371 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004372 if (PyObject_SetAttr(result, state->ctx, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004373 goto failed;
4374 Py_DECREF(value);
4375 break;
Serhiy Storchaka13d52c22020-03-10 18:52:34 +02004376 case Slice_kind:
Victor Stinner74419f02020-07-03 11:35:37 +02004377 tp = (PyTypeObject *)state->Slice_type;
Serhiy Storchaka13d52c22020-03-10 18:52:34 +02004378 result = PyType_GenericNew(tp, NULL, NULL);
4379 if (!result) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004380 value = ast2obj_expr(state, o->v.Slice.lower);
Serhiy Storchaka13d52c22020-03-10 18:52:34 +02004381 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004382 if (PyObject_SetAttr(result, state->lower, value) == -1)
Serhiy Storchaka13d52c22020-03-10 18:52:34 +02004383 goto failed;
4384 Py_DECREF(value);
Victor Stinner74419f02020-07-03 11:35:37 +02004385 value = ast2obj_expr(state, o->v.Slice.upper);
Serhiy Storchaka13d52c22020-03-10 18:52:34 +02004386 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004387 if (PyObject_SetAttr(result, state->upper, value) == -1)
Serhiy Storchaka13d52c22020-03-10 18:52:34 +02004388 goto failed;
4389 Py_DECREF(value);
Victor Stinner74419f02020-07-03 11:35:37 +02004390 value = ast2obj_expr(state, o->v.Slice.step);
Serhiy Storchaka13d52c22020-03-10 18:52:34 +02004391 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004392 if (PyObject_SetAttr(result, state->step, value) == -1)
Serhiy Storchaka13d52c22020-03-10 18:52:34 +02004393 goto failed;
4394 Py_DECREF(value);
4395 break;
Brandt Bucher145bf262021-02-26 14:51:55 -08004396 case MatchAs_kind:
4397 tp = (PyTypeObject *)state->MatchAs_type;
4398 result = PyType_GenericNew(tp, NULL, NULL);
4399 if (!result) goto failed;
4400 value = ast2obj_expr(state, o->v.MatchAs.pattern);
4401 if (!value) goto failed;
4402 if (PyObject_SetAttr(result, state->pattern, value) == -1)
4403 goto failed;
4404 Py_DECREF(value);
4405 value = ast2obj_identifier(state, o->v.MatchAs.name);
4406 if (!value) goto failed;
4407 if (PyObject_SetAttr(result, state->name, value) == -1)
4408 goto failed;
4409 Py_DECREF(value);
4410 break;
4411 case MatchOr_kind:
4412 tp = (PyTypeObject *)state->MatchOr_type;
4413 result = PyType_GenericNew(tp, NULL, NULL);
4414 if (!result) goto failed;
4415 value = ast2obj_list(state, (asdl_seq*)o->v.MatchOr.patterns,
4416 ast2obj_expr);
4417 if (!value) goto failed;
4418 if (PyObject_SetAttr(result, state->patterns, value) == -1)
4419 goto failed;
4420 Py_DECREF(value);
4421 break;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004422 }
Victor Stinner74419f02020-07-03 11:35:37 +02004423 value = ast2obj_int(state, o->lineno);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004424 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004425 if (PyObject_SetAttr(result, state->lineno, value) < 0)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004426 goto failed;
4427 Py_DECREF(value);
Victor Stinner74419f02020-07-03 11:35:37 +02004428 value = ast2obj_int(state, o->col_offset);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004429 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004430 if (PyObject_SetAttr(result, state->col_offset, value) < 0)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004431 goto failed;
4432 Py_DECREF(value);
Victor Stinner74419f02020-07-03 11:35:37 +02004433 value = ast2obj_int(state, o->end_lineno);
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00004434 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004435 if (PyObject_SetAttr(result, state->end_lineno, value) < 0)
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00004436 goto failed;
4437 Py_DECREF(value);
Victor Stinner74419f02020-07-03 11:35:37 +02004438 value = ast2obj_int(state, o->end_col_offset);
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00004439 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004440 if (PyObject_SetAttr(result, state->end_col_offset, value) < 0)
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00004441 goto failed;
4442 Py_DECREF(value);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004443 return result;
Martin v. Löwisbd260da2006-02-26 19:42:26 +00004444failed:
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004445 Py_XDECREF(value);
4446 Py_XDECREF(result);
4447 return NULL;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00004448}
4449
Victor Stinner5cf47822020-11-02 22:03:28 +01004450PyObject* ast2obj_expr_context(struct ast_state *state, expr_context_ty o)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00004451{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004452 switch(o) {
4453 case Load:
Victor Stinner74419f02020-07-03 11:35:37 +02004454 Py_INCREF(state->Load_singleton);
4455 return state->Load_singleton;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004456 case Store:
Victor Stinner74419f02020-07-03 11:35:37 +02004457 Py_INCREF(state->Store_singleton);
4458 return state->Store_singleton;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004459 case Del:
Victor Stinner74419f02020-07-03 11:35:37 +02004460 Py_INCREF(state->Del_singleton);
4461 return state->Del_singleton;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004462 }
Batuhan Taskaya091951a2020-05-06 17:29:32 +03004463 Py_UNREACHABLE();
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00004464}
Victor Stinner5cf47822020-11-02 22:03:28 +01004465PyObject* ast2obj_boolop(struct ast_state *state, boolop_ty o)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00004466{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004467 switch(o) {
4468 case And:
Victor Stinner74419f02020-07-03 11:35:37 +02004469 Py_INCREF(state->And_singleton);
4470 return state->And_singleton;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004471 case Or:
Victor Stinner74419f02020-07-03 11:35:37 +02004472 Py_INCREF(state->Or_singleton);
4473 return state->Or_singleton;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004474 }
Batuhan Taskaya091951a2020-05-06 17:29:32 +03004475 Py_UNREACHABLE();
Martin v. Löwisbd260da2006-02-26 19:42:26 +00004476}
Victor Stinner5cf47822020-11-02 22:03:28 +01004477PyObject* ast2obj_operator(struct ast_state *state, operator_ty o)
Martin v. Löwisbd260da2006-02-26 19:42:26 +00004478{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004479 switch(o) {
4480 case Add:
Victor Stinner74419f02020-07-03 11:35:37 +02004481 Py_INCREF(state->Add_singleton);
4482 return state->Add_singleton;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004483 case Sub:
Victor Stinner74419f02020-07-03 11:35:37 +02004484 Py_INCREF(state->Sub_singleton);
4485 return state->Sub_singleton;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004486 case Mult:
Victor Stinner74419f02020-07-03 11:35:37 +02004487 Py_INCREF(state->Mult_singleton);
4488 return state->Mult_singleton;
Benjamin Petersond51374e2014-04-09 23:55:56 -04004489 case MatMult:
Victor Stinner74419f02020-07-03 11:35:37 +02004490 Py_INCREF(state->MatMult_singleton);
4491 return state->MatMult_singleton;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004492 case Div:
Victor Stinner74419f02020-07-03 11:35:37 +02004493 Py_INCREF(state->Div_singleton);
4494 return state->Div_singleton;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004495 case Mod:
Victor Stinner74419f02020-07-03 11:35:37 +02004496 Py_INCREF(state->Mod_singleton);
4497 return state->Mod_singleton;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004498 case Pow:
Victor Stinner74419f02020-07-03 11:35:37 +02004499 Py_INCREF(state->Pow_singleton);
4500 return state->Pow_singleton;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004501 case LShift:
Victor Stinner74419f02020-07-03 11:35:37 +02004502 Py_INCREF(state->LShift_singleton);
4503 return state->LShift_singleton;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004504 case RShift:
Victor Stinner74419f02020-07-03 11:35:37 +02004505 Py_INCREF(state->RShift_singleton);
4506 return state->RShift_singleton;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004507 case BitOr:
Victor Stinner74419f02020-07-03 11:35:37 +02004508 Py_INCREF(state->BitOr_singleton);
4509 return state->BitOr_singleton;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004510 case BitXor:
Victor Stinner74419f02020-07-03 11:35:37 +02004511 Py_INCREF(state->BitXor_singleton);
4512 return state->BitXor_singleton;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004513 case BitAnd:
Victor Stinner74419f02020-07-03 11:35:37 +02004514 Py_INCREF(state->BitAnd_singleton);
4515 return state->BitAnd_singleton;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004516 case FloorDiv:
Victor Stinner74419f02020-07-03 11:35:37 +02004517 Py_INCREF(state->FloorDiv_singleton);
4518 return state->FloorDiv_singleton;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004519 }
Batuhan Taskaya091951a2020-05-06 17:29:32 +03004520 Py_UNREACHABLE();
Martin v. Löwisbd260da2006-02-26 19:42:26 +00004521}
Victor Stinner5cf47822020-11-02 22:03:28 +01004522PyObject* ast2obj_unaryop(struct ast_state *state, unaryop_ty o)
Martin v. Löwisbd260da2006-02-26 19:42:26 +00004523{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004524 switch(o) {
4525 case Invert:
Victor Stinner74419f02020-07-03 11:35:37 +02004526 Py_INCREF(state->Invert_singleton);
4527 return state->Invert_singleton;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004528 case Not:
Victor Stinner74419f02020-07-03 11:35:37 +02004529 Py_INCREF(state->Not_singleton);
4530 return state->Not_singleton;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004531 case UAdd:
Victor Stinner74419f02020-07-03 11:35:37 +02004532 Py_INCREF(state->UAdd_singleton);
4533 return state->UAdd_singleton;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004534 case USub:
Victor Stinner74419f02020-07-03 11:35:37 +02004535 Py_INCREF(state->USub_singleton);
4536 return state->USub_singleton;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004537 }
Batuhan Taskaya091951a2020-05-06 17:29:32 +03004538 Py_UNREACHABLE();
Martin v. Löwisbd260da2006-02-26 19:42:26 +00004539}
Victor Stinner5cf47822020-11-02 22:03:28 +01004540PyObject* ast2obj_cmpop(struct ast_state *state, cmpop_ty o)
Martin v. Löwisbd260da2006-02-26 19:42:26 +00004541{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004542 switch(o) {
4543 case Eq:
Victor Stinner74419f02020-07-03 11:35:37 +02004544 Py_INCREF(state->Eq_singleton);
4545 return state->Eq_singleton;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004546 case NotEq:
Victor Stinner74419f02020-07-03 11:35:37 +02004547 Py_INCREF(state->NotEq_singleton);
4548 return state->NotEq_singleton;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004549 case Lt:
Victor Stinner74419f02020-07-03 11:35:37 +02004550 Py_INCREF(state->Lt_singleton);
4551 return state->Lt_singleton;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004552 case LtE:
Victor Stinner74419f02020-07-03 11:35:37 +02004553 Py_INCREF(state->LtE_singleton);
4554 return state->LtE_singleton;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004555 case Gt:
Victor Stinner74419f02020-07-03 11:35:37 +02004556 Py_INCREF(state->Gt_singleton);
4557 return state->Gt_singleton;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004558 case GtE:
Victor Stinner74419f02020-07-03 11:35:37 +02004559 Py_INCREF(state->GtE_singleton);
4560 return state->GtE_singleton;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004561 case Is:
Victor Stinner74419f02020-07-03 11:35:37 +02004562 Py_INCREF(state->Is_singleton);
4563 return state->Is_singleton;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004564 case IsNot:
Victor Stinner74419f02020-07-03 11:35:37 +02004565 Py_INCREF(state->IsNot_singleton);
4566 return state->IsNot_singleton;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004567 case In:
Victor Stinner74419f02020-07-03 11:35:37 +02004568 Py_INCREF(state->In_singleton);
4569 return state->In_singleton;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004570 case NotIn:
Victor Stinner74419f02020-07-03 11:35:37 +02004571 Py_INCREF(state->NotIn_singleton);
4572 return state->NotIn_singleton;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004573 }
Batuhan Taskaya091951a2020-05-06 17:29:32 +03004574 Py_UNREACHABLE();
Martin v. Löwisbd260da2006-02-26 19:42:26 +00004575}
4576PyObject*
Victor Stinner5cf47822020-11-02 22:03:28 +01004577ast2obj_comprehension(struct ast_state *state, void* _o)
Martin v. Löwisbd260da2006-02-26 19:42:26 +00004578{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004579 comprehension_ty o = (comprehension_ty)_o;
4580 PyObject *result = NULL, *value = NULL;
Dino Viehlandac46eb42019-09-11 10:16:34 -07004581 PyTypeObject *tp;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004582 if (!o) {
Serhiy Storchaka228b12e2017-01-23 09:47:21 +02004583 Py_RETURN_NONE;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004584 }
Victor Stinner74419f02020-07-03 11:35:37 +02004585 tp = (PyTypeObject *)state->comprehension_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07004586 result = PyType_GenericNew(tp, NULL, NULL);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004587 if (!result) return NULL;
Victor Stinner74419f02020-07-03 11:35:37 +02004588 value = ast2obj_expr(state, o->target);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004589 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004590 if (PyObject_SetAttr(result, state->target, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004591 goto failed;
4592 Py_DECREF(value);
Victor Stinner74419f02020-07-03 11:35:37 +02004593 value = ast2obj_expr(state, o->iter);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004594 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004595 if (PyObject_SetAttr(result, state->iter, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004596 goto failed;
4597 Py_DECREF(value);
Pablo Galindoa5634c42020-09-16 19:42:00 +01004598 value = ast2obj_list(state, (asdl_seq*)o->ifs, ast2obj_expr);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004599 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004600 if (PyObject_SetAttr(result, state->ifs, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004601 goto failed;
4602 Py_DECREF(value);
Victor Stinner74419f02020-07-03 11:35:37 +02004603 value = ast2obj_int(state, o->is_async);
Yury Selivanov52c4e7c2016-09-09 10:36:01 -07004604 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004605 if (PyObject_SetAttr(result, state->is_async, value) == -1)
Yury Selivanov52c4e7c2016-09-09 10:36:01 -07004606 goto failed;
4607 Py_DECREF(value);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004608 return result;
Martin v. Löwisbd260da2006-02-26 19:42:26 +00004609failed:
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004610 Py_XDECREF(value);
4611 Py_XDECREF(result);
4612 return NULL;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00004613}
4614
Martin v. Löwisbd260da2006-02-26 19:42:26 +00004615PyObject*
Victor Stinner5cf47822020-11-02 22:03:28 +01004616ast2obj_excepthandler(struct ast_state *state, void* _o)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00004617{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004618 excepthandler_ty o = (excepthandler_ty)_o;
4619 PyObject *result = NULL, *value = NULL;
Dino Viehlandac46eb42019-09-11 10:16:34 -07004620 PyTypeObject *tp;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004621 if (!o) {
Serhiy Storchaka228b12e2017-01-23 09:47:21 +02004622 Py_RETURN_NONE;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004623 }
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004624 switch (o->kind) {
4625 case ExceptHandler_kind:
Victor Stinner74419f02020-07-03 11:35:37 +02004626 tp = (PyTypeObject *)state->ExceptHandler_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07004627 result = PyType_GenericNew(tp, NULL, NULL);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004628 if (!result) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004629 value = ast2obj_expr(state, o->v.ExceptHandler.type);
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00004630 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004631 if (PyObject_SetAttr(result, state->type, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004632 goto failed;
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00004633 Py_DECREF(value);
Victor Stinner74419f02020-07-03 11:35:37 +02004634 value = ast2obj_identifier(state, o->v.ExceptHandler.name);
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00004635 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004636 if (PyObject_SetAttr(result, state->name, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004637 goto failed;
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00004638 Py_DECREF(value);
Pablo Galindoa5634c42020-09-16 19:42:00 +01004639 value = ast2obj_list(state, (asdl_seq*)o->v.ExceptHandler.body,
4640 ast2obj_stmt);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004641 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004642 if (PyObject_SetAttr(result, state->body, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004643 goto failed;
4644 Py_DECREF(value);
4645 break;
4646 }
Victor Stinner74419f02020-07-03 11:35:37 +02004647 value = ast2obj_int(state, o->lineno);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004648 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004649 if (PyObject_SetAttr(result, state->lineno, value) < 0)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004650 goto failed;
4651 Py_DECREF(value);
Victor Stinner74419f02020-07-03 11:35:37 +02004652 value = ast2obj_int(state, o->col_offset);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004653 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004654 if (PyObject_SetAttr(result, state->col_offset, value) < 0)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004655 goto failed;
4656 Py_DECREF(value);
Victor Stinner74419f02020-07-03 11:35:37 +02004657 value = ast2obj_int(state, o->end_lineno);
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00004658 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004659 if (PyObject_SetAttr(result, state->end_lineno, value) < 0)
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00004660 goto failed;
4661 Py_DECREF(value);
Victor Stinner74419f02020-07-03 11:35:37 +02004662 value = ast2obj_int(state, o->end_col_offset);
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00004663 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004664 if (PyObject_SetAttr(result, state->end_col_offset, value) < 0)
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00004665 goto failed;
4666 Py_DECREF(value);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004667 return result;
Martin v. Löwisbd260da2006-02-26 19:42:26 +00004668failed:
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004669 Py_XDECREF(value);
4670 Py_XDECREF(result);
4671 return NULL;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00004672}
4673
Martin v. Löwisbd260da2006-02-26 19:42:26 +00004674PyObject*
Victor Stinner5cf47822020-11-02 22:03:28 +01004675ast2obj_arguments(struct ast_state *state, void* _o)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00004676{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004677 arguments_ty o = (arguments_ty)_o;
4678 PyObject *result = NULL, *value = NULL;
Dino Viehlandac46eb42019-09-11 10:16:34 -07004679 PyTypeObject *tp;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004680 if (!o) {
Serhiy Storchaka228b12e2017-01-23 09:47:21 +02004681 Py_RETURN_NONE;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004682 }
Victor Stinner74419f02020-07-03 11:35:37 +02004683 tp = (PyTypeObject *)state->arguments_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07004684 result = PyType_GenericNew(tp, NULL, NULL);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004685 if (!result) return NULL;
Pablo Galindoa5634c42020-09-16 19:42:00 +01004686 value = ast2obj_list(state, (asdl_seq*)o->posonlyargs, ast2obj_arg);
Pablo Galindo8c77b8c2019-04-29 13:36:57 +01004687 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004688 if (PyObject_SetAttr(result, state->posonlyargs, value) == -1)
Pablo Galindo8c77b8c2019-04-29 13:36:57 +01004689 goto failed;
4690 Py_DECREF(value);
Pablo Galindoa5634c42020-09-16 19:42:00 +01004691 value = ast2obj_list(state, (asdl_seq*)o->args, ast2obj_arg);
Pablo Galindocd6e83b2019-07-15 01:32:18 +02004692 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004693 if (PyObject_SetAttr(result, state->args, value) == -1)
Pablo Galindocd6e83b2019-07-15 01:32:18 +02004694 goto failed;
4695 Py_DECREF(value);
Victor Stinner74419f02020-07-03 11:35:37 +02004696 value = ast2obj_arg(state, o->vararg);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004697 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004698 if (PyObject_SetAttr(result, state->vararg, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004699 goto failed;
4700 Py_DECREF(value);
Pablo Galindoa5634c42020-09-16 19:42:00 +01004701 value = ast2obj_list(state, (asdl_seq*)o->kwonlyargs, ast2obj_arg);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004702 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004703 if (PyObject_SetAttr(result, state->kwonlyargs, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004704 goto failed;
4705 Py_DECREF(value);
Pablo Galindoa5634c42020-09-16 19:42:00 +01004706 value = ast2obj_list(state, (asdl_seq*)o->kw_defaults, ast2obj_expr);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004707 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004708 if (PyObject_SetAttr(result, state->kw_defaults, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004709 goto failed;
4710 Py_DECREF(value);
Victor Stinner74419f02020-07-03 11:35:37 +02004711 value = ast2obj_arg(state, o->kwarg);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004712 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004713 if (PyObject_SetAttr(result, state->kwarg, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004714 goto failed;
4715 Py_DECREF(value);
Pablo Galindoa5634c42020-09-16 19:42:00 +01004716 value = ast2obj_list(state, (asdl_seq*)o->defaults, ast2obj_expr);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004717 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004718 if (PyObject_SetAttr(result, state->defaults, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004719 goto failed;
4720 Py_DECREF(value);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004721 return result;
Martin v. Löwisbd260da2006-02-26 19:42:26 +00004722failed:
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004723 Py_XDECREF(value);
4724 Py_XDECREF(result);
4725 return NULL;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00004726}
4727
Martin v. Löwisbd260da2006-02-26 19:42:26 +00004728PyObject*
Victor Stinner5cf47822020-11-02 22:03:28 +01004729ast2obj_arg(struct ast_state *state, void* _o)
Neal Norwitzc1505362006-12-28 06:47:50 +00004730{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004731 arg_ty o = (arg_ty)_o;
4732 PyObject *result = NULL, *value = NULL;
Dino Viehlandac46eb42019-09-11 10:16:34 -07004733 PyTypeObject *tp;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004734 if (!o) {
Serhiy Storchaka228b12e2017-01-23 09:47:21 +02004735 Py_RETURN_NONE;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004736 }
Victor Stinner74419f02020-07-03 11:35:37 +02004737 tp = (PyTypeObject *)state->arg_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07004738 result = PyType_GenericNew(tp, NULL, NULL);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004739 if (!result) return NULL;
Victor Stinner74419f02020-07-03 11:35:37 +02004740 value = ast2obj_identifier(state, o->arg);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004741 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004742 if (PyObject_SetAttr(result, state->arg, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004743 goto failed;
4744 Py_DECREF(value);
Victor Stinner74419f02020-07-03 11:35:37 +02004745 value = ast2obj_expr(state, o->annotation);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004746 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004747 if (PyObject_SetAttr(result, state->annotation, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004748 goto failed;
4749 Py_DECREF(value);
Victor Stinner74419f02020-07-03 11:35:37 +02004750 value = ast2obj_string(state, o->type_comment);
Guido van Rossumdcfcd142019-01-31 03:40:27 -08004751 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004752 if (PyObject_SetAttr(result, state->type_comment, value) == -1)
Guido van Rossumdcfcd142019-01-31 03:40:27 -08004753 goto failed;
4754 Py_DECREF(value);
Victor Stinner74419f02020-07-03 11:35:37 +02004755 value = ast2obj_int(state, o->lineno);
Victor Stinneree4b59c2013-07-27 00:01:35 +02004756 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004757 if (PyObject_SetAttr(result, state->lineno, value) < 0)
Victor Stinneree4b59c2013-07-27 00:01:35 +02004758 goto failed;
4759 Py_DECREF(value);
Victor Stinner74419f02020-07-03 11:35:37 +02004760 value = ast2obj_int(state, o->col_offset);
Victor Stinneree4b59c2013-07-27 00:01:35 +02004761 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004762 if (PyObject_SetAttr(result, state->col_offset, value) < 0)
Victor Stinneree4b59c2013-07-27 00:01:35 +02004763 goto failed;
4764 Py_DECREF(value);
Victor Stinner74419f02020-07-03 11:35:37 +02004765 value = ast2obj_int(state, o->end_lineno);
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00004766 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004767 if (PyObject_SetAttr(result, state->end_lineno, value) < 0)
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00004768 goto failed;
4769 Py_DECREF(value);
Victor Stinner74419f02020-07-03 11:35:37 +02004770 value = ast2obj_int(state, o->end_col_offset);
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00004771 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004772 if (PyObject_SetAttr(result, state->end_col_offset, value) < 0)
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00004773 goto failed;
4774 Py_DECREF(value);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004775 return result;
Neal Norwitzc1505362006-12-28 06:47:50 +00004776failed:
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004777 Py_XDECREF(value);
4778 Py_XDECREF(result);
4779 return NULL;
Neal Norwitzc1505362006-12-28 06:47:50 +00004780}
4781
4782PyObject*
Victor Stinner5cf47822020-11-02 22:03:28 +01004783ast2obj_keyword(struct ast_state *state, void* _o)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00004784{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004785 keyword_ty o = (keyword_ty)_o;
4786 PyObject *result = NULL, *value = NULL;
Dino Viehlandac46eb42019-09-11 10:16:34 -07004787 PyTypeObject *tp;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004788 if (!o) {
Serhiy Storchaka228b12e2017-01-23 09:47:21 +02004789 Py_RETURN_NONE;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004790 }
Victor Stinner74419f02020-07-03 11:35:37 +02004791 tp = (PyTypeObject *)state->keyword_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07004792 result = PyType_GenericNew(tp, NULL, NULL);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004793 if (!result) return NULL;
Victor Stinner74419f02020-07-03 11:35:37 +02004794 value = ast2obj_identifier(state, o->arg);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004795 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004796 if (PyObject_SetAttr(result, state->arg, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004797 goto failed;
4798 Py_DECREF(value);
Victor Stinner74419f02020-07-03 11:35:37 +02004799 value = ast2obj_expr(state, o->value);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004800 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004801 if (PyObject_SetAttr(result, state->value, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004802 goto failed;
4803 Py_DECREF(value);
Victor Stinner74419f02020-07-03 11:35:37 +02004804 value = ast2obj_int(state, o->lineno);
Pablo Galindo168660b2020-04-02 00:47:39 +01004805 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004806 if (PyObject_SetAttr(result, state->lineno, value) < 0)
Pablo Galindo168660b2020-04-02 00:47:39 +01004807 goto failed;
4808 Py_DECREF(value);
Victor Stinner74419f02020-07-03 11:35:37 +02004809 value = ast2obj_int(state, o->col_offset);
Pablo Galindo168660b2020-04-02 00:47:39 +01004810 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004811 if (PyObject_SetAttr(result, state->col_offset, value) < 0)
Pablo Galindo168660b2020-04-02 00:47:39 +01004812 goto failed;
4813 Py_DECREF(value);
Victor Stinner74419f02020-07-03 11:35:37 +02004814 value = ast2obj_int(state, o->end_lineno);
Pablo Galindo168660b2020-04-02 00:47:39 +01004815 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004816 if (PyObject_SetAttr(result, state->end_lineno, value) < 0)
Pablo Galindo168660b2020-04-02 00:47:39 +01004817 goto failed;
4818 Py_DECREF(value);
Victor Stinner74419f02020-07-03 11:35:37 +02004819 value = ast2obj_int(state, o->end_col_offset);
Pablo Galindo168660b2020-04-02 00:47:39 +01004820 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004821 if (PyObject_SetAttr(result, state->end_col_offset, value) < 0)
Pablo Galindo168660b2020-04-02 00:47:39 +01004822 goto failed;
4823 Py_DECREF(value);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004824 return result;
Martin v. Löwisbd260da2006-02-26 19:42:26 +00004825failed:
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004826 Py_XDECREF(value);
4827 Py_XDECREF(result);
4828 return NULL;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00004829}
4830
Martin v. Löwisbd260da2006-02-26 19:42:26 +00004831PyObject*
Victor Stinner5cf47822020-11-02 22:03:28 +01004832ast2obj_alias(struct ast_state *state, void* _o)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00004833{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004834 alias_ty o = (alias_ty)_o;
4835 PyObject *result = NULL, *value = NULL;
Dino Viehlandac46eb42019-09-11 10:16:34 -07004836 PyTypeObject *tp;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004837 if (!o) {
Serhiy Storchaka228b12e2017-01-23 09:47:21 +02004838 Py_RETURN_NONE;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004839 }
Victor Stinner74419f02020-07-03 11:35:37 +02004840 tp = (PyTypeObject *)state->alias_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07004841 result = PyType_GenericNew(tp, NULL, NULL);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004842 if (!result) return NULL;
Victor Stinner74419f02020-07-03 11:35:37 +02004843 value = ast2obj_identifier(state, o->name);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004844 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004845 if (PyObject_SetAttr(result, state->name, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004846 goto failed;
4847 Py_DECREF(value);
Victor Stinner74419f02020-07-03 11:35:37 +02004848 value = ast2obj_identifier(state, o->asname);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004849 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004850 if (PyObject_SetAttr(result, state->asname, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004851 goto failed;
4852 Py_DECREF(value);
4853 return result;
Martin v. Löwisbd260da2006-02-26 19:42:26 +00004854failed:
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004855 Py_XDECREF(value);
4856 Py_XDECREF(result);
4857 return NULL;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00004858}
4859
Benjamin Petersonbf1bbc12011-05-27 13:58:08 -05004860PyObject*
Victor Stinner5cf47822020-11-02 22:03:28 +01004861ast2obj_withitem(struct ast_state *state, void* _o)
Benjamin Petersonbf1bbc12011-05-27 13:58:08 -05004862{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004863 withitem_ty o = (withitem_ty)_o;
4864 PyObject *result = NULL, *value = NULL;
Dino Viehlandac46eb42019-09-11 10:16:34 -07004865 PyTypeObject *tp;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004866 if (!o) {
Serhiy Storchaka228b12e2017-01-23 09:47:21 +02004867 Py_RETURN_NONE;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004868 }
Victor Stinner74419f02020-07-03 11:35:37 +02004869 tp = (PyTypeObject *)state->withitem_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07004870 result = PyType_GenericNew(tp, NULL, NULL);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004871 if (!result) return NULL;
Victor Stinner74419f02020-07-03 11:35:37 +02004872 value = ast2obj_expr(state, o->context_expr);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004873 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004874 if (PyObject_SetAttr(result, state->context_expr, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004875 goto failed;
4876 Py_DECREF(value);
Victor Stinner74419f02020-07-03 11:35:37 +02004877 value = ast2obj_expr(state, o->optional_vars);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004878 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004879 if (PyObject_SetAttr(result, state->optional_vars, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004880 goto failed;
4881 Py_DECREF(value);
4882 return result;
Benjamin Petersonbf1bbc12011-05-27 13:58:08 -05004883failed:
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004884 Py_XDECREF(value);
4885 Py_XDECREF(result);
4886 return NULL;
Benjamin Petersonbf1bbc12011-05-27 13:58:08 -05004887}
4888
Guido van Rossumdcfcd142019-01-31 03:40:27 -08004889PyObject*
Brandt Bucher145bf262021-02-26 14:51:55 -08004890ast2obj_match_case(struct ast_state *state, void* _o)
4891{
4892 match_case_ty o = (match_case_ty)_o;
4893 PyObject *result = NULL, *value = NULL;
4894 PyTypeObject *tp;
4895 if (!o) {
4896 Py_RETURN_NONE;
4897 }
4898 tp = (PyTypeObject *)state->match_case_type;
4899 result = PyType_GenericNew(tp, NULL, NULL);
4900 if (!result) return NULL;
4901 value = ast2obj_expr(state, o->pattern);
4902 if (!value) goto failed;
4903 if (PyObject_SetAttr(result, state->pattern, value) == -1)
4904 goto failed;
4905 Py_DECREF(value);
4906 value = ast2obj_expr(state, o->guard);
4907 if (!value) goto failed;
4908 if (PyObject_SetAttr(result, state->guard, value) == -1)
4909 goto failed;
4910 Py_DECREF(value);
4911 value = ast2obj_list(state, (asdl_seq*)o->body, ast2obj_stmt);
4912 if (!value) goto failed;
4913 if (PyObject_SetAttr(result, state->body, value) == -1)
4914 goto failed;
4915 Py_DECREF(value);
4916 return result;
4917failed:
4918 Py_XDECREF(value);
4919 Py_XDECREF(result);
4920 return NULL;
4921}
4922
4923PyObject*
Victor Stinner5cf47822020-11-02 22:03:28 +01004924ast2obj_type_ignore(struct ast_state *state, void* _o)
Guido van Rossumdcfcd142019-01-31 03:40:27 -08004925{
4926 type_ignore_ty o = (type_ignore_ty)_o;
4927 PyObject *result = NULL, *value = NULL;
Dino Viehlandac46eb42019-09-11 10:16:34 -07004928 PyTypeObject *tp;
Guido van Rossumdcfcd142019-01-31 03:40:27 -08004929 if (!o) {
4930 Py_RETURN_NONE;
4931 }
Guido van Rossumdcfcd142019-01-31 03:40:27 -08004932 switch (o->kind) {
4933 case TypeIgnore_kind:
Victor Stinner74419f02020-07-03 11:35:37 +02004934 tp = (PyTypeObject *)state->TypeIgnore_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07004935 result = PyType_GenericNew(tp, NULL, NULL);
Guido van Rossumdcfcd142019-01-31 03:40:27 -08004936 if (!result) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004937 value = ast2obj_int(state, o->v.TypeIgnore.lineno);
Guido van Rossumdcfcd142019-01-31 03:40:27 -08004938 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004939 if (PyObject_SetAttr(result, state->lineno, value) == -1)
Guido van Rossumdcfcd142019-01-31 03:40:27 -08004940 goto failed;
4941 Py_DECREF(value);
Victor Stinner74419f02020-07-03 11:35:37 +02004942 value = ast2obj_string(state, o->v.TypeIgnore.tag);
Michael J. Sullivan933e1502019-05-22 07:54:20 -07004943 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004944 if (PyObject_SetAttr(result, state->tag, value) == -1)
Michael J. Sullivan933e1502019-05-22 07:54:20 -07004945 goto failed;
4946 Py_DECREF(value);
Guido van Rossumdcfcd142019-01-31 03:40:27 -08004947 break;
4948 }
4949 return result;
4950failed:
4951 Py_XDECREF(value);
4952 Py_XDECREF(result);
4953 return NULL;
4954}
4955
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00004956
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00004957int
Victor Stinner5cf47822020-11-02 22:03:28 +01004958obj2ast_mod(struct ast_state *state, PyObject* obj, mod_ty* out, PyArena* arena)
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00004959{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004960 int isinstance;
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00004961
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004962 PyObject *tmp = NULL;
Dino Viehlandac46eb42019-09-11 10:16:34 -07004963 PyObject *tp;
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00004964
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004965 if (obj == Py_None) {
4966 *out = NULL;
4967 return 0;
4968 }
Victor Stinner74419f02020-07-03 11:35:37 +02004969 tp = state->Module_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07004970 isinstance = PyObject_IsInstance(obj, tp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004971 if (isinstance == -1) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00004972 return 1;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004973 }
4974 if (isinstance) {
Pablo Galindoa5634c42020-09-16 19:42:00 +01004975 asdl_stmt_seq* body;
4976 asdl_type_ignore_seq* type_ignores;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004977
Victor Stinner74419f02020-07-03 11:35:37 +02004978 if (_PyObject_LookupAttr(obj, state->body, &tmp) < 0) {
Serhiy Storchakaf320be72018-01-25 10:49:40 +02004979 return 1;
4980 }
4981 if (tmp == NULL) {
4982 PyErr_SetString(PyExc_TypeError, "required field \"body\" missing from Module");
4983 return 1;
4984 }
4985 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004986 int res;
4987 Py_ssize_t len;
4988 Py_ssize_t i;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004989 if (!PyList_Check(tmp)) {
Dino Viehlandac46eb42019-09-11 10:16:34 -07004990 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 +02004991 goto failed;
4992 }
4993 len = PyList_GET_SIZE(tmp);
Pablo Galindoa5634c42020-09-16 19:42:00 +01004994 body = _Py_asdl_stmt_seq_new(len, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004995 if (body == NULL) goto failed;
4996 for (i = 0; i < len; i++) {
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07004997 stmt_ty val;
Serhiy Storchaka43c97312019-09-10 13:02:30 +03004998 PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
4999 Py_INCREF(tmp2);
Victor Stinner74419f02020-07-03 11:35:37 +02005000 res = obj2ast_stmt(state, tmp2, &val, arena);
Serhiy Storchaka43c97312019-09-10 13:02:30 +03005001 Py_DECREF(tmp2);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005002 if (res != 0) goto failed;
Serhiy Storchakacf380602016-10-07 21:51:28 +03005003 if (len != PyList_GET_SIZE(tmp)) {
5004 PyErr_SetString(PyExc_RuntimeError, "Module field \"body\" changed size during iteration");
5005 goto failed;
5006 }
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07005007 asdl_seq_SET(body, i, val);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005008 }
Victor Stinner1acc1292013-07-27 00:03:47 +02005009 Py_CLEAR(tmp);
Serhiy Storchakaf320be72018-01-25 10:49:40 +02005010 }
Victor Stinner74419f02020-07-03 11:35:37 +02005011 if (_PyObject_LookupAttr(obj, state->type_ignores, &tmp) < 0) {
Guido van Rossumdcfcd142019-01-31 03:40:27 -08005012 return 1;
5013 }
5014 if (tmp == NULL) {
5015 PyErr_SetString(PyExc_TypeError, "required field \"type_ignores\" missing from Module");
5016 return 1;
5017 }
5018 else {
5019 int res;
5020 Py_ssize_t len;
5021 Py_ssize_t i;
5022 if (!PyList_Check(tmp)) {
Dino Viehlandac46eb42019-09-11 10:16:34 -07005023 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 -08005024 goto failed;
5025 }
5026 len = PyList_GET_SIZE(tmp);
Pablo Galindoa5634c42020-09-16 19:42:00 +01005027 type_ignores = _Py_asdl_type_ignore_seq_new(len, arena);
Guido van Rossumdcfcd142019-01-31 03:40:27 -08005028 if (type_ignores == NULL) goto failed;
5029 for (i = 0; i < len; i++) {
5030 type_ignore_ty val;
Serhiy Storchaka43c97312019-09-10 13:02:30 +03005031 PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
5032 Py_INCREF(tmp2);
Victor Stinner74419f02020-07-03 11:35:37 +02005033 res = obj2ast_type_ignore(state, tmp2, &val, arena);
Serhiy Storchaka43c97312019-09-10 13:02:30 +03005034 Py_DECREF(tmp2);
Guido van Rossumdcfcd142019-01-31 03:40:27 -08005035 if (res != 0) goto failed;
5036 if (len != PyList_GET_SIZE(tmp)) {
5037 PyErr_SetString(PyExc_RuntimeError, "Module field \"type_ignores\" changed size during iteration");
5038 goto failed;
5039 }
5040 asdl_seq_SET(type_ignores, i, val);
5041 }
5042 Py_CLEAR(tmp);
5043 }
Victor Stinnerd27f8d22021-04-07 21:34:22 +02005044 *out = _PyAST_Module(body, type_ignores, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005045 if (*out == NULL) goto failed;
5046 return 0;
5047 }
Victor Stinner74419f02020-07-03 11:35:37 +02005048 tp = state->Interactive_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07005049 isinstance = PyObject_IsInstance(obj, tp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005050 if (isinstance == -1) {
5051 return 1;
5052 }
5053 if (isinstance) {
Pablo Galindoa5634c42020-09-16 19:42:00 +01005054 asdl_stmt_seq* body;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005055
Victor Stinner74419f02020-07-03 11:35:37 +02005056 if (_PyObject_LookupAttr(obj, state->body, &tmp) < 0) {
Serhiy Storchakaf320be72018-01-25 10:49:40 +02005057 return 1;
5058 }
5059 if (tmp == NULL) {
5060 PyErr_SetString(PyExc_TypeError, "required field \"body\" missing from Interactive");
5061 return 1;
5062 }
5063 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005064 int res;
5065 Py_ssize_t len;
5066 Py_ssize_t i;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005067 if (!PyList_Check(tmp)) {
Dino Viehlandac46eb42019-09-11 10:16:34 -07005068 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 +02005069 goto failed;
5070 }
5071 len = PyList_GET_SIZE(tmp);
Pablo Galindoa5634c42020-09-16 19:42:00 +01005072 body = _Py_asdl_stmt_seq_new(len, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005073 if (body == NULL) goto failed;
5074 for (i = 0; i < len; i++) {
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07005075 stmt_ty val;
Serhiy Storchaka43c97312019-09-10 13:02:30 +03005076 PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
5077 Py_INCREF(tmp2);
Victor Stinner74419f02020-07-03 11:35:37 +02005078 res = obj2ast_stmt(state, tmp2, &val, arena);
Serhiy Storchaka43c97312019-09-10 13:02:30 +03005079 Py_DECREF(tmp2);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005080 if (res != 0) goto failed;
Serhiy Storchakacf380602016-10-07 21:51:28 +03005081 if (len != PyList_GET_SIZE(tmp)) {
5082 PyErr_SetString(PyExc_RuntimeError, "Interactive field \"body\" changed size during iteration");
5083 goto failed;
5084 }
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07005085 asdl_seq_SET(body, i, val);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005086 }
Victor Stinner1acc1292013-07-27 00:03:47 +02005087 Py_CLEAR(tmp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005088 }
Victor Stinnerd27f8d22021-04-07 21:34:22 +02005089 *out = _PyAST_Interactive(body, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005090 if (*out == NULL) goto failed;
5091 return 0;
5092 }
Victor Stinner74419f02020-07-03 11:35:37 +02005093 tp = state->Expression_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07005094 isinstance = PyObject_IsInstance(obj, tp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005095 if (isinstance == -1) {
5096 return 1;
5097 }
5098 if (isinstance) {
5099 expr_ty body;
5100
Victor Stinner74419f02020-07-03 11:35:37 +02005101 if (_PyObject_LookupAttr(obj, state->body, &tmp) < 0) {
Serhiy Storchakaf320be72018-01-25 10:49:40 +02005102 return 1;
5103 }
5104 if (tmp == NULL) {
5105 PyErr_SetString(PyExc_TypeError, "required field \"body\" missing from Expression");
5106 return 1;
5107 }
5108 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005109 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02005110 res = obj2ast_expr(state, tmp, &body, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005111 if (res != 0) goto failed;
Victor Stinner1acc1292013-07-27 00:03:47 +02005112 Py_CLEAR(tmp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005113 }
Victor Stinnerd27f8d22021-04-07 21:34:22 +02005114 *out = _PyAST_Expression(body, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005115 if (*out == NULL) goto failed;
5116 return 0;
5117 }
Victor Stinner74419f02020-07-03 11:35:37 +02005118 tp = state->FunctionType_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07005119 isinstance = PyObject_IsInstance(obj, tp);
Guido van Rossumdcfcd142019-01-31 03:40:27 -08005120 if (isinstance == -1) {
5121 return 1;
5122 }
5123 if (isinstance) {
Pablo Galindoa5634c42020-09-16 19:42:00 +01005124 asdl_expr_seq* argtypes;
Guido van Rossumdcfcd142019-01-31 03:40:27 -08005125 expr_ty returns;
5126
Victor Stinner74419f02020-07-03 11:35:37 +02005127 if (_PyObject_LookupAttr(obj, state->argtypes, &tmp) < 0) {
Guido van Rossumdcfcd142019-01-31 03:40:27 -08005128 return 1;
5129 }
5130 if (tmp == NULL) {
5131 PyErr_SetString(PyExc_TypeError, "required field \"argtypes\" missing from FunctionType");
5132 return 1;
5133 }
5134 else {
5135 int res;
5136 Py_ssize_t len;
5137 Py_ssize_t i;
5138 if (!PyList_Check(tmp)) {
Dino Viehlandac46eb42019-09-11 10:16:34 -07005139 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 -08005140 goto failed;
5141 }
5142 len = PyList_GET_SIZE(tmp);
Pablo Galindoa5634c42020-09-16 19:42:00 +01005143 argtypes = _Py_asdl_expr_seq_new(len, arena);
Guido van Rossumdcfcd142019-01-31 03:40:27 -08005144 if (argtypes == NULL) goto failed;
5145 for (i = 0; i < len; i++) {
5146 expr_ty val;
Serhiy Storchaka43c97312019-09-10 13:02:30 +03005147 PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
5148 Py_INCREF(tmp2);
Victor Stinner74419f02020-07-03 11:35:37 +02005149 res = obj2ast_expr(state, tmp2, &val, arena);
Serhiy Storchaka43c97312019-09-10 13:02:30 +03005150 Py_DECREF(tmp2);
Guido van Rossumdcfcd142019-01-31 03:40:27 -08005151 if (res != 0) goto failed;
5152 if (len != PyList_GET_SIZE(tmp)) {
5153 PyErr_SetString(PyExc_RuntimeError, "FunctionType field \"argtypes\" changed size during iteration");
5154 goto failed;
5155 }
5156 asdl_seq_SET(argtypes, i, val);
5157 }
5158 Py_CLEAR(tmp);
5159 }
Victor Stinner74419f02020-07-03 11:35:37 +02005160 if (_PyObject_LookupAttr(obj, state->returns, &tmp) < 0) {
Guido van Rossumdcfcd142019-01-31 03:40:27 -08005161 return 1;
5162 }
5163 if (tmp == NULL) {
5164 PyErr_SetString(PyExc_TypeError, "required field \"returns\" missing from FunctionType");
5165 return 1;
5166 }
5167 else {
5168 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02005169 res = obj2ast_expr(state, tmp, &returns, arena);
Guido van Rossumdcfcd142019-01-31 03:40:27 -08005170 if (res != 0) goto failed;
5171 Py_CLEAR(tmp);
5172 }
Victor Stinnerd27f8d22021-04-07 21:34:22 +02005173 *out = _PyAST_FunctionType(argtypes, returns, arena);
Guido van Rossumdcfcd142019-01-31 03:40:27 -08005174 if (*out == NULL) goto failed;
5175 return 0;
5176 }
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005177
5178 PyErr_Format(PyExc_TypeError, "expected some sort of mod, but got %R", obj);
5179 failed:
5180 Py_XDECREF(tmp);
5181 return 1;
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00005182}
5183
5184int
Victor Stinner5cf47822020-11-02 22:03:28 +01005185obj2ast_stmt(struct ast_state *state, PyObject* obj, stmt_ty* out, PyArena*
5186 arena)
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00005187{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005188 int isinstance;
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00005189
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005190 PyObject *tmp = NULL;
Dino Viehlandac46eb42019-09-11 10:16:34 -07005191 PyObject *tp;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005192 int lineno;
5193 int col_offset;
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00005194 int end_lineno;
5195 int end_col_offset;
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00005196
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005197 if (obj == Py_None) {
5198 *out = NULL;
5199 return 0;
5200 }
Victor Stinner74419f02020-07-03 11:35:37 +02005201 if (_PyObject_LookupAttr(obj, state->lineno, &tmp) < 0) {
Serhiy Storchakaf320be72018-01-25 10:49:40 +02005202 return 1;
5203 }
5204 if (tmp == NULL) {
5205 PyErr_SetString(PyExc_TypeError, "required field \"lineno\" missing from stmt");
5206 return 1;
5207 }
5208 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005209 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02005210 res = obj2ast_int(state, tmp, &lineno, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005211 if (res != 0) goto failed;
Victor Stinner1acc1292013-07-27 00:03:47 +02005212 Py_CLEAR(tmp);
Serhiy Storchakaf320be72018-01-25 10:49:40 +02005213 }
Victor Stinner74419f02020-07-03 11:35:37 +02005214 if (_PyObject_LookupAttr(obj, state->col_offset, &tmp) < 0) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00005215 return 1;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005216 }
Serhiy Storchakaf320be72018-01-25 10:49:40 +02005217 if (tmp == NULL) {
5218 PyErr_SetString(PyExc_TypeError, "required field \"col_offset\" missing from stmt");
5219 return 1;
5220 }
5221 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005222 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02005223 res = obj2ast_int(state, tmp, &col_offset, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005224 if (res != 0) goto failed;
Victor Stinner1acc1292013-07-27 00:03:47 +02005225 Py_CLEAR(tmp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005226 }
Victor Stinner74419f02020-07-03 11:35:37 +02005227 if (_PyObject_LookupAttr(obj, state->end_lineno, &tmp) < 0) {
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00005228 return 1;
5229 }
5230 if (tmp == NULL || tmp == Py_None) {
5231 Py_CLEAR(tmp);
5232 end_lineno = 0;
5233 }
5234 else {
5235 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02005236 res = obj2ast_int(state, tmp, &end_lineno, arena);
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00005237 if (res != 0) goto failed;
5238 Py_CLEAR(tmp);
5239 }
Victor Stinner74419f02020-07-03 11:35:37 +02005240 if (_PyObject_LookupAttr(obj, state->end_col_offset, &tmp) < 0) {
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00005241 return 1;
5242 }
5243 if (tmp == NULL || tmp == Py_None) {
5244 Py_CLEAR(tmp);
5245 end_col_offset = 0;
5246 }
5247 else {
5248 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02005249 res = obj2ast_int(state, tmp, &end_col_offset, arena);
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00005250 if (res != 0) goto failed;
5251 Py_CLEAR(tmp);
5252 }
Victor Stinner74419f02020-07-03 11:35:37 +02005253 tp = state->FunctionDef_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07005254 isinstance = PyObject_IsInstance(obj, tp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005255 if (isinstance == -1) {
5256 return 1;
5257 }
5258 if (isinstance) {
5259 identifier name;
5260 arguments_ty args;
Pablo Galindoa5634c42020-09-16 19:42:00 +01005261 asdl_stmt_seq* body;
5262 asdl_expr_seq* decorator_list;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005263 expr_ty returns;
Guido van Rossumdcfcd142019-01-31 03:40:27 -08005264 string type_comment;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005265
Victor Stinner74419f02020-07-03 11:35:37 +02005266 if (_PyObject_LookupAttr(obj, state->name, &tmp) < 0) {
Serhiy Storchakaf320be72018-01-25 10:49:40 +02005267 return 1;
5268 }
5269 if (tmp == NULL) {
5270 PyErr_SetString(PyExc_TypeError, "required field \"name\" missing from FunctionDef");
5271 return 1;
5272 }
5273 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005274 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02005275 res = obj2ast_identifier(state, tmp, &name, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005276 if (res != 0) goto failed;
Victor Stinner1acc1292013-07-27 00:03:47 +02005277 Py_CLEAR(tmp);
Serhiy Storchakaf320be72018-01-25 10:49:40 +02005278 }
Victor Stinner74419f02020-07-03 11:35:37 +02005279 if (_PyObject_LookupAttr(obj, state->args, &tmp) < 0) {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005280 return 1;
5281 }
Serhiy Storchakaf320be72018-01-25 10:49:40 +02005282 if (tmp == NULL) {
5283 PyErr_SetString(PyExc_TypeError, "required field \"args\" missing from FunctionDef");
5284 return 1;
5285 }
5286 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005287 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02005288 res = obj2ast_arguments(state, tmp, &args, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005289 if (res != 0) goto failed;
Victor Stinner1acc1292013-07-27 00:03:47 +02005290 Py_CLEAR(tmp);
Serhiy Storchakaf320be72018-01-25 10:49:40 +02005291 }
Victor Stinner74419f02020-07-03 11:35:37 +02005292 if (_PyObject_LookupAttr(obj, state->body, &tmp) < 0) {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005293 return 1;
5294 }
Serhiy Storchakaf320be72018-01-25 10:49:40 +02005295 if (tmp == NULL) {
5296 PyErr_SetString(PyExc_TypeError, "required field \"body\" missing from FunctionDef");
5297 return 1;
5298 }
5299 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005300 int res;
5301 Py_ssize_t len;
5302 Py_ssize_t i;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005303 if (!PyList_Check(tmp)) {
Dino Viehlandac46eb42019-09-11 10:16:34 -07005304 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 +02005305 goto failed;
5306 }
5307 len = PyList_GET_SIZE(tmp);
Pablo Galindoa5634c42020-09-16 19:42:00 +01005308 body = _Py_asdl_stmt_seq_new(len, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005309 if (body == NULL) goto failed;
5310 for (i = 0; i < len; i++) {
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07005311 stmt_ty val;
Serhiy Storchaka43c97312019-09-10 13:02:30 +03005312 PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
5313 Py_INCREF(tmp2);
Victor Stinner74419f02020-07-03 11:35:37 +02005314 res = obj2ast_stmt(state, tmp2, &val, arena);
Serhiy Storchaka43c97312019-09-10 13:02:30 +03005315 Py_DECREF(tmp2);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005316 if (res != 0) goto failed;
Serhiy Storchakacf380602016-10-07 21:51:28 +03005317 if (len != PyList_GET_SIZE(tmp)) {
5318 PyErr_SetString(PyExc_RuntimeError, "FunctionDef field \"body\" changed size during iteration");
5319 goto failed;
5320 }
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07005321 asdl_seq_SET(body, i, val);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005322 }
Victor Stinner1acc1292013-07-27 00:03:47 +02005323 Py_CLEAR(tmp);
Serhiy Storchakaf320be72018-01-25 10:49:40 +02005324 }
Victor Stinner74419f02020-07-03 11:35:37 +02005325 if (_PyObject_LookupAttr(obj, state->decorator_list, &tmp) < 0) {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005326 return 1;
5327 }
Serhiy Storchakaf320be72018-01-25 10:49:40 +02005328 if (tmp == NULL) {
5329 PyErr_SetString(PyExc_TypeError, "required field \"decorator_list\" missing from FunctionDef");
5330 return 1;
5331 }
5332 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005333 int res;
5334 Py_ssize_t len;
5335 Py_ssize_t i;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005336 if (!PyList_Check(tmp)) {
Dino Viehlandac46eb42019-09-11 10:16:34 -07005337 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 +02005338 goto failed;
5339 }
5340 len = PyList_GET_SIZE(tmp);
Pablo Galindoa5634c42020-09-16 19:42:00 +01005341 decorator_list = _Py_asdl_expr_seq_new(len, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005342 if (decorator_list == NULL) goto failed;
5343 for (i = 0; i < len; i++) {
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07005344 expr_ty val;
Serhiy Storchaka43c97312019-09-10 13:02:30 +03005345 PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
5346 Py_INCREF(tmp2);
Victor Stinner74419f02020-07-03 11:35:37 +02005347 res = obj2ast_expr(state, tmp2, &val, arena);
Serhiy Storchaka43c97312019-09-10 13:02:30 +03005348 Py_DECREF(tmp2);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005349 if (res != 0) goto failed;
Serhiy Storchakacf380602016-10-07 21:51:28 +03005350 if (len != PyList_GET_SIZE(tmp)) {
5351 PyErr_SetString(PyExc_RuntimeError, "FunctionDef field \"decorator_list\" changed size during iteration");
5352 goto failed;
5353 }
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07005354 asdl_seq_SET(decorator_list, i, val);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005355 }
Victor Stinner1acc1292013-07-27 00:03:47 +02005356 Py_CLEAR(tmp);
Serhiy Storchakaf320be72018-01-25 10:49:40 +02005357 }
Victor Stinner74419f02020-07-03 11:35:37 +02005358 if (_PyObject_LookupAttr(obj, state->returns, &tmp) < 0) {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005359 return 1;
5360 }
Serhiy Storchakaf320be72018-01-25 10:49:40 +02005361 if (tmp == NULL || tmp == Py_None) {
5362 Py_CLEAR(tmp);
5363 returns = NULL;
5364 }
5365 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005366 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02005367 res = obj2ast_expr(state, tmp, &returns, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005368 if (res != 0) goto failed;
Victor Stinner1acc1292013-07-27 00:03:47 +02005369 Py_CLEAR(tmp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005370 }
Victor Stinner74419f02020-07-03 11:35:37 +02005371 if (_PyObject_LookupAttr(obj, state->type_comment, &tmp) < 0) {
Guido van Rossumdcfcd142019-01-31 03:40:27 -08005372 return 1;
5373 }
5374 if (tmp == NULL || tmp == Py_None) {
5375 Py_CLEAR(tmp);
5376 type_comment = NULL;
5377 }
5378 else {
5379 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02005380 res = obj2ast_string(state, tmp, &type_comment, arena);
Guido van Rossumdcfcd142019-01-31 03:40:27 -08005381 if (res != 0) goto failed;
5382 Py_CLEAR(tmp);
5383 }
Victor Stinnerd27f8d22021-04-07 21:34:22 +02005384 *out = _PyAST_FunctionDef(name, args, body, decorator_list, returns,
5385 type_comment, lineno, col_offset, end_lineno,
5386 end_col_offset, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005387 if (*out == NULL) goto failed;
5388 return 0;
5389 }
Victor Stinner74419f02020-07-03 11:35:37 +02005390 tp = state->AsyncFunctionDef_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07005391 isinstance = PyObject_IsInstance(obj, tp);
Yury Selivanov75445082015-05-11 22:57:16 -04005392 if (isinstance == -1) {
5393 return 1;
5394 }
5395 if (isinstance) {
5396 identifier name;
5397 arguments_ty args;
Pablo Galindoa5634c42020-09-16 19:42:00 +01005398 asdl_stmt_seq* body;
5399 asdl_expr_seq* decorator_list;
Yury Selivanov75445082015-05-11 22:57:16 -04005400 expr_ty returns;
Guido van Rossumdcfcd142019-01-31 03:40:27 -08005401 string type_comment;
Yury Selivanov75445082015-05-11 22:57:16 -04005402
Victor Stinner74419f02020-07-03 11:35:37 +02005403 if (_PyObject_LookupAttr(obj, state->name, &tmp) < 0) {
Serhiy Storchakaf320be72018-01-25 10:49:40 +02005404 return 1;
5405 }
5406 if (tmp == NULL) {
5407 PyErr_SetString(PyExc_TypeError, "required field \"name\" missing from AsyncFunctionDef");
5408 return 1;
5409 }
5410 else {
Yury Selivanov75445082015-05-11 22:57:16 -04005411 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02005412 res = obj2ast_identifier(state, tmp, &name, arena);
Yury Selivanov75445082015-05-11 22:57:16 -04005413 if (res != 0) goto failed;
5414 Py_CLEAR(tmp);
Serhiy Storchakaf320be72018-01-25 10:49:40 +02005415 }
Victor Stinner74419f02020-07-03 11:35:37 +02005416 if (_PyObject_LookupAttr(obj, state->args, &tmp) < 0) {
Yury Selivanov75445082015-05-11 22:57:16 -04005417 return 1;
5418 }
Serhiy Storchakaf320be72018-01-25 10:49:40 +02005419 if (tmp == NULL) {
5420 PyErr_SetString(PyExc_TypeError, "required field \"args\" missing from AsyncFunctionDef");
5421 return 1;
5422 }
5423 else {
Yury Selivanov75445082015-05-11 22:57:16 -04005424 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02005425 res = obj2ast_arguments(state, tmp, &args, arena);
Yury Selivanov75445082015-05-11 22:57:16 -04005426 if (res != 0) goto failed;
5427 Py_CLEAR(tmp);
Serhiy Storchakaf320be72018-01-25 10:49:40 +02005428 }
Victor Stinner74419f02020-07-03 11:35:37 +02005429 if (_PyObject_LookupAttr(obj, state->body, &tmp) < 0) {
Yury Selivanov75445082015-05-11 22:57:16 -04005430 return 1;
5431 }
Serhiy Storchakaf320be72018-01-25 10:49:40 +02005432 if (tmp == NULL) {
5433 PyErr_SetString(PyExc_TypeError, "required field \"body\" missing from AsyncFunctionDef");
5434 return 1;
5435 }
5436 else {
Yury Selivanov75445082015-05-11 22:57:16 -04005437 int res;
5438 Py_ssize_t len;
5439 Py_ssize_t i;
Yury Selivanov75445082015-05-11 22:57:16 -04005440 if (!PyList_Check(tmp)) {
Dino Viehlandac46eb42019-09-11 10:16:34 -07005441 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 -04005442 goto failed;
5443 }
5444 len = PyList_GET_SIZE(tmp);
Pablo Galindoa5634c42020-09-16 19:42:00 +01005445 body = _Py_asdl_stmt_seq_new(len, arena);
Yury Selivanov75445082015-05-11 22:57:16 -04005446 if (body == NULL) goto failed;
5447 for (i = 0; i < len; i++) {
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07005448 stmt_ty val;
Serhiy Storchaka43c97312019-09-10 13:02:30 +03005449 PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
5450 Py_INCREF(tmp2);
Victor Stinner74419f02020-07-03 11:35:37 +02005451 res = obj2ast_stmt(state, tmp2, &val, arena);
Serhiy Storchaka43c97312019-09-10 13:02:30 +03005452 Py_DECREF(tmp2);
Yury Selivanov75445082015-05-11 22:57:16 -04005453 if (res != 0) goto failed;
Serhiy Storchakacf380602016-10-07 21:51:28 +03005454 if (len != PyList_GET_SIZE(tmp)) {
5455 PyErr_SetString(PyExc_RuntimeError, "AsyncFunctionDef field \"body\" changed size during iteration");
5456 goto failed;
5457 }
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07005458 asdl_seq_SET(body, i, val);
Yury Selivanov75445082015-05-11 22:57:16 -04005459 }
5460 Py_CLEAR(tmp);
Serhiy Storchakaf320be72018-01-25 10:49:40 +02005461 }
Victor Stinner74419f02020-07-03 11:35:37 +02005462 if (_PyObject_LookupAttr(obj, state->decorator_list, &tmp) < 0) {
Yury Selivanov75445082015-05-11 22:57:16 -04005463 return 1;
5464 }
Serhiy Storchakaf320be72018-01-25 10:49:40 +02005465 if (tmp == NULL) {
5466 PyErr_SetString(PyExc_TypeError, "required field \"decorator_list\" missing from AsyncFunctionDef");
5467 return 1;
5468 }
5469 else {
Yury Selivanov75445082015-05-11 22:57:16 -04005470 int res;
5471 Py_ssize_t len;
5472 Py_ssize_t i;
Yury Selivanov75445082015-05-11 22:57:16 -04005473 if (!PyList_Check(tmp)) {
Dino Viehlandac46eb42019-09-11 10:16:34 -07005474 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 -04005475 goto failed;
5476 }
5477 len = PyList_GET_SIZE(tmp);
Pablo Galindoa5634c42020-09-16 19:42:00 +01005478 decorator_list = _Py_asdl_expr_seq_new(len, arena);
Yury Selivanov75445082015-05-11 22:57:16 -04005479 if (decorator_list == NULL) goto failed;
5480 for (i = 0; i < len; i++) {
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07005481 expr_ty val;
Serhiy Storchaka43c97312019-09-10 13:02:30 +03005482 PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
5483 Py_INCREF(tmp2);
Victor Stinner74419f02020-07-03 11:35:37 +02005484 res = obj2ast_expr(state, tmp2, &val, arena);
Serhiy Storchaka43c97312019-09-10 13:02:30 +03005485 Py_DECREF(tmp2);
Yury Selivanov75445082015-05-11 22:57:16 -04005486 if (res != 0) goto failed;
Serhiy Storchakacf380602016-10-07 21:51:28 +03005487 if (len != PyList_GET_SIZE(tmp)) {
5488 PyErr_SetString(PyExc_RuntimeError, "AsyncFunctionDef field \"decorator_list\" changed size during iteration");
5489 goto failed;
5490 }
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07005491 asdl_seq_SET(decorator_list, i, val);
Yury Selivanov75445082015-05-11 22:57:16 -04005492 }
5493 Py_CLEAR(tmp);
Serhiy Storchakaf320be72018-01-25 10:49:40 +02005494 }
Victor Stinner74419f02020-07-03 11:35:37 +02005495 if (_PyObject_LookupAttr(obj, state->returns, &tmp) < 0) {
Yury Selivanov75445082015-05-11 22:57:16 -04005496 return 1;
5497 }
Serhiy Storchakaf320be72018-01-25 10:49:40 +02005498 if (tmp == NULL || tmp == Py_None) {
5499 Py_CLEAR(tmp);
5500 returns = NULL;
5501 }
5502 else {
Yury Selivanov75445082015-05-11 22:57:16 -04005503 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02005504 res = obj2ast_expr(state, tmp, &returns, arena);
Yury Selivanov75445082015-05-11 22:57:16 -04005505 if (res != 0) goto failed;
5506 Py_CLEAR(tmp);
Yury Selivanov75445082015-05-11 22:57:16 -04005507 }
Victor Stinner74419f02020-07-03 11:35:37 +02005508 if (_PyObject_LookupAttr(obj, state->type_comment, &tmp) < 0) {
Guido van Rossumdcfcd142019-01-31 03:40:27 -08005509 return 1;
5510 }
5511 if (tmp == NULL || tmp == Py_None) {
5512 Py_CLEAR(tmp);
5513 type_comment = NULL;
5514 }
5515 else {
5516 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02005517 res = obj2ast_string(state, tmp, &type_comment, arena);
Guido van Rossumdcfcd142019-01-31 03:40:27 -08005518 if (res != 0) goto failed;
5519 Py_CLEAR(tmp);
5520 }
Victor Stinnerd27f8d22021-04-07 21:34:22 +02005521 *out = _PyAST_AsyncFunctionDef(name, args, body, decorator_list,
5522 returns, type_comment, lineno,
5523 col_offset, end_lineno, end_col_offset,
5524 arena);
Yury Selivanov75445082015-05-11 22:57:16 -04005525 if (*out == NULL) goto failed;
5526 return 0;
5527 }
Victor Stinner74419f02020-07-03 11:35:37 +02005528 tp = state->ClassDef_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07005529 isinstance = PyObject_IsInstance(obj, tp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005530 if (isinstance == -1) {
5531 return 1;
5532 }
5533 if (isinstance) {
5534 identifier name;
Pablo Galindoa5634c42020-09-16 19:42:00 +01005535 asdl_expr_seq* bases;
5536 asdl_keyword_seq* keywords;
5537 asdl_stmt_seq* body;
5538 asdl_expr_seq* decorator_list;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005539
Victor Stinner74419f02020-07-03 11:35:37 +02005540 if (_PyObject_LookupAttr(obj, state->name, &tmp) < 0) {
Serhiy Storchakaf320be72018-01-25 10:49:40 +02005541 return 1;
5542 }
5543 if (tmp == NULL) {
5544 PyErr_SetString(PyExc_TypeError, "required field \"name\" missing from ClassDef");
5545 return 1;
5546 }
5547 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005548 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02005549 res = obj2ast_identifier(state, tmp, &name, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005550 if (res != 0) goto failed;
Victor Stinner1acc1292013-07-27 00:03:47 +02005551 Py_CLEAR(tmp);
Serhiy Storchakaf320be72018-01-25 10:49:40 +02005552 }
Victor Stinner74419f02020-07-03 11:35:37 +02005553 if (_PyObject_LookupAttr(obj, state->bases, &tmp) < 0) {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005554 return 1;
5555 }
Serhiy Storchakaf320be72018-01-25 10:49:40 +02005556 if (tmp == NULL) {
5557 PyErr_SetString(PyExc_TypeError, "required field \"bases\" missing from ClassDef");
5558 return 1;
5559 }
5560 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005561 int res;
5562 Py_ssize_t len;
5563 Py_ssize_t i;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005564 if (!PyList_Check(tmp)) {
Dino Viehlandac46eb42019-09-11 10:16:34 -07005565 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 +02005566 goto failed;
5567 }
5568 len = PyList_GET_SIZE(tmp);
Pablo Galindoa5634c42020-09-16 19:42:00 +01005569 bases = _Py_asdl_expr_seq_new(len, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005570 if (bases == NULL) goto failed;
5571 for (i = 0; i < len; i++) {
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07005572 expr_ty val;
Serhiy Storchaka43c97312019-09-10 13:02:30 +03005573 PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
5574 Py_INCREF(tmp2);
Victor Stinner74419f02020-07-03 11:35:37 +02005575 res = obj2ast_expr(state, tmp2, &val, arena);
Serhiy Storchaka43c97312019-09-10 13:02:30 +03005576 Py_DECREF(tmp2);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005577 if (res != 0) goto failed;
Serhiy Storchakacf380602016-10-07 21:51:28 +03005578 if (len != PyList_GET_SIZE(tmp)) {
5579 PyErr_SetString(PyExc_RuntimeError, "ClassDef field \"bases\" changed size during iteration");
5580 goto failed;
5581 }
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07005582 asdl_seq_SET(bases, i, val);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005583 }
Victor Stinner1acc1292013-07-27 00:03:47 +02005584 Py_CLEAR(tmp);
Serhiy Storchakaf320be72018-01-25 10:49:40 +02005585 }
Victor Stinner74419f02020-07-03 11:35:37 +02005586 if (_PyObject_LookupAttr(obj, state->keywords, &tmp) < 0) {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005587 return 1;
5588 }
Serhiy Storchakaf320be72018-01-25 10:49:40 +02005589 if (tmp == NULL) {
5590 PyErr_SetString(PyExc_TypeError, "required field \"keywords\" missing from ClassDef");
5591 return 1;
5592 }
5593 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005594 int res;
5595 Py_ssize_t len;
5596 Py_ssize_t i;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005597 if (!PyList_Check(tmp)) {
Dino Viehlandac46eb42019-09-11 10:16:34 -07005598 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 +02005599 goto failed;
5600 }
5601 len = PyList_GET_SIZE(tmp);
Pablo Galindoa5634c42020-09-16 19:42:00 +01005602 keywords = _Py_asdl_keyword_seq_new(len, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005603 if (keywords == NULL) goto failed;
5604 for (i = 0; i < len; i++) {
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07005605 keyword_ty val;
Serhiy Storchaka43c97312019-09-10 13:02:30 +03005606 PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
5607 Py_INCREF(tmp2);
Victor Stinner74419f02020-07-03 11:35:37 +02005608 res = obj2ast_keyword(state, tmp2, &val, arena);
Serhiy Storchaka43c97312019-09-10 13:02:30 +03005609 Py_DECREF(tmp2);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005610 if (res != 0) goto failed;
Serhiy Storchakacf380602016-10-07 21:51:28 +03005611 if (len != PyList_GET_SIZE(tmp)) {
5612 PyErr_SetString(PyExc_RuntimeError, "ClassDef field \"keywords\" changed size during iteration");
5613 goto failed;
5614 }
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07005615 asdl_seq_SET(keywords, i, val);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005616 }
Victor Stinner1acc1292013-07-27 00:03:47 +02005617 Py_CLEAR(tmp);
Serhiy Storchakaf320be72018-01-25 10:49:40 +02005618 }
Victor Stinner74419f02020-07-03 11:35:37 +02005619 if (_PyObject_LookupAttr(obj, state->body, &tmp) < 0) {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005620 return 1;
5621 }
Serhiy Storchakaf320be72018-01-25 10:49:40 +02005622 if (tmp == NULL) {
5623 PyErr_SetString(PyExc_TypeError, "required field \"body\" missing from ClassDef");
5624 return 1;
5625 }
5626 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005627 int res;
5628 Py_ssize_t len;
5629 Py_ssize_t i;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005630 if (!PyList_Check(tmp)) {
Dino Viehlandac46eb42019-09-11 10:16:34 -07005631 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 +02005632 goto failed;
5633 }
5634 len = PyList_GET_SIZE(tmp);
Pablo Galindoa5634c42020-09-16 19:42:00 +01005635 body = _Py_asdl_stmt_seq_new(len, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005636 if (body == NULL) goto failed;
5637 for (i = 0; i < len; i++) {
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07005638 stmt_ty val;
Serhiy Storchaka43c97312019-09-10 13:02:30 +03005639 PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
5640 Py_INCREF(tmp2);
Victor Stinner74419f02020-07-03 11:35:37 +02005641 res = obj2ast_stmt(state, tmp2, &val, arena);
Serhiy Storchaka43c97312019-09-10 13:02:30 +03005642 Py_DECREF(tmp2);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005643 if (res != 0) goto failed;
Serhiy Storchakacf380602016-10-07 21:51:28 +03005644 if (len != PyList_GET_SIZE(tmp)) {
5645 PyErr_SetString(PyExc_RuntimeError, "ClassDef field \"body\" changed size during iteration");
5646 goto failed;
5647 }
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07005648 asdl_seq_SET(body, i, val);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005649 }
Victor Stinner1acc1292013-07-27 00:03:47 +02005650 Py_CLEAR(tmp);
Serhiy Storchakaf320be72018-01-25 10:49:40 +02005651 }
Victor Stinner74419f02020-07-03 11:35:37 +02005652 if (_PyObject_LookupAttr(obj, state->decorator_list, &tmp) < 0) {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005653 return 1;
5654 }
Serhiy Storchakaf320be72018-01-25 10:49:40 +02005655 if (tmp == NULL) {
5656 PyErr_SetString(PyExc_TypeError, "required field \"decorator_list\" missing from ClassDef");
5657 return 1;
5658 }
5659 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005660 int res;
5661 Py_ssize_t len;
5662 Py_ssize_t i;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005663 if (!PyList_Check(tmp)) {
Dino Viehlandac46eb42019-09-11 10:16:34 -07005664 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 +02005665 goto failed;
5666 }
5667 len = PyList_GET_SIZE(tmp);
Pablo Galindoa5634c42020-09-16 19:42:00 +01005668 decorator_list = _Py_asdl_expr_seq_new(len, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005669 if (decorator_list == NULL) goto failed;
5670 for (i = 0; i < len; i++) {
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07005671 expr_ty val;
Serhiy Storchaka43c97312019-09-10 13:02:30 +03005672 PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
5673 Py_INCREF(tmp2);
Victor Stinner74419f02020-07-03 11:35:37 +02005674 res = obj2ast_expr(state, tmp2, &val, arena);
Serhiy Storchaka43c97312019-09-10 13:02:30 +03005675 Py_DECREF(tmp2);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005676 if (res != 0) goto failed;
Serhiy Storchakacf380602016-10-07 21:51:28 +03005677 if (len != PyList_GET_SIZE(tmp)) {
5678 PyErr_SetString(PyExc_RuntimeError, "ClassDef field \"decorator_list\" changed size during iteration");
5679 goto failed;
5680 }
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07005681 asdl_seq_SET(decorator_list, i, val);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005682 }
Victor Stinner1acc1292013-07-27 00:03:47 +02005683 Py_CLEAR(tmp);
Serhiy Storchakaf320be72018-01-25 10:49:40 +02005684 }
Victor Stinnerd27f8d22021-04-07 21:34:22 +02005685 *out = _PyAST_ClassDef(name, bases, keywords, body, decorator_list,
5686 lineno, col_offset, end_lineno, end_col_offset,
5687 arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005688 if (*out == NULL) goto failed;
5689 return 0;
5690 }
Victor Stinner74419f02020-07-03 11:35:37 +02005691 tp = state->Return_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07005692 isinstance = PyObject_IsInstance(obj, tp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005693 if (isinstance == -1) {
5694 return 1;
5695 }
5696 if (isinstance) {
5697 expr_ty value;
5698
Victor Stinner74419f02020-07-03 11:35:37 +02005699 if (_PyObject_LookupAttr(obj, state->value, &tmp) < 0) {
Serhiy Storchakaf320be72018-01-25 10:49:40 +02005700 return 1;
5701 }
5702 if (tmp == NULL || tmp == Py_None) {
5703 Py_CLEAR(tmp);
5704 value = NULL;
5705 }
5706 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005707 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02005708 res = obj2ast_expr(state, tmp, &value, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005709 if (res != 0) goto failed;
Victor Stinner1acc1292013-07-27 00:03:47 +02005710 Py_CLEAR(tmp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005711 }
Victor Stinnerd27f8d22021-04-07 21:34:22 +02005712 *out = _PyAST_Return(value, lineno, col_offset, end_lineno,
5713 end_col_offset, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005714 if (*out == NULL) goto failed;
5715 return 0;
5716 }
Victor Stinner74419f02020-07-03 11:35:37 +02005717 tp = state->Delete_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07005718 isinstance = PyObject_IsInstance(obj, tp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005719 if (isinstance == -1) {
5720 return 1;
5721 }
5722 if (isinstance) {
Pablo Galindoa5634c42020-09-16 19:42:00 +01005723 asdl_expr_seq* targets;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005724
Victor Stinner74419f02020-07-03 11:35:37 +02005725 if (_PyObject_LookupAttr(obj, state->targets, &tmp) < 0) {
Serhiy Storchakaf320be72018-01-25 10:49:40 +02005726 return 1;
5727 }
5728 if (tmp == NULL) {
5729 PyErr_SetString(PyExc_TypeError, "required field \"targets\" missing from Delete");
5730 return 1;
5731 }
5732 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005733 int res;
5734 Py_ssize_t len;
5735 Py_ssize_t i;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005736 if (!PyList_Check(tmp)) {
Dino Viehlandac46eb42019-09-11 10:16:34 -07005737 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 +02005738 goto failed;
5739 }
5740 len = PyList_GET_SIZE(tmp);
Pablo Galindoa5634c42020-09-16 19:42:00 +01005741 targets = _Py_asdl_expr_seq_new(len, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005742 if (targets == NULL) goto failed;
5743 for (i = 0; i < len; i++) {
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07005744 expr_ty val;
Serhiy Storchaka43c97312019-09-10 13:02:30 +03005745 PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
5746 Py_INCREF(tmp2);
Victor Stinner74419f02020-07-03 11:35:37 +02005747 res = obj2ast_expr(state, tmp2, &val, arena);
Serhiy Storchaka43c97312019-09-10 13:02:30 +03005748 Py_DECREF(tmp2);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005749 if (res != 0) goto failed;
Serhiy Storchakacf380602016-10-07 21:51:28 +03005750 if (len != PyList_GET_SIZE(tmp)) {
5751 PyErr_SetString(PyExc_RuntimeError, "Delete field \"targets\" changed size during iteration");
5752 goto failed;
5753 }
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07005754 asdl_seq_SET(targets, i, val);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005755 }
Victor Stinner1acc1292013-07-27 00:03:47 +02005756 Py_CLEAR(tmp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005757 }
Victor Stinnerd27f8d22021-04-07 21:34:22 +02005758 *out = _PyAST_Delete(targets, lineno, col_offset, end_lineno,
5759 end_col_offset, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005760 if (*out == NULL) goto failed;
5761 return 0;
5762 }
Victor Stinner74419f02020-07-03 11:35:37 +02005763 tp = state->Assign_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07005764 isinstance = PyObject_IsInstance(obj, tp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005765 if (isinstance == -1) {
5766 return 1;
5767 }
5768 if (isinstance) {
Pablo Galindoa5634c42020-09-16 19:42:00 +01005769 asdl_expr_seq* targets;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005770 expr_ty value;
Guido van Rossumdcfcd142019-01-31 03:40:27 -08005771 string type_comment;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005772
Victor Stinner74419f02020-07-03 11:35:37 +02005773 if (_PyObject_LookupAttr(obj, state->targets, &tmp) < 0) {
Serhiy Storchakaf320be72018-01-25 10:49:40 +02005774 return 1;
5775 }
5776 if (tmp == NULL) {
5777 PyErr_SetString(PyExc_TypeError, "required field \"targets\" missing from Assign");
5778 return 1;
5779 }
5780 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005781 int res;
5782 Py_ssize_t len;
5783 Py_ssize_t i;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005784 if (!PyList_Check(tmp)) {
Dino Viehlandac46eb42019-09-11 10:16:34 -07005785 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 +02005786 goto failed;
5787 }
5788 len = PyList_GET_SIZE(tmp);
Pablo Galindoa5634c42020-09-16 19:42:00 +01005789 targets = _Py_asdl_expr_seq_new(len, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005790 if (targets == NULL) goto failed;
5791 for (i = 0; i < len; i++) {
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07005792 expr_ty val;
Serhiy Storchaka43c97312019-09-10 13:02:30 +03005793 PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
5794 Py_INCREF(tmp2);
Victor Stinner74419f02020-07-03 11:35:37 +02005795 res = obj2ast_expr(state, tmp2, &val, arena);
Serhiy Storchaka43c97312019-09-10 13:02:30 +03005796 Py_DECREF(tmp2);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005797 if (res != 0) goto failed;
Serhiy Storchakacf380602016-10-07 21:51:28 +03005798 if (len != PyList_GET_SIZE(tmp)) {
5799 PyErr_SetString(PyExc_RuntimeError, "Assign field \"targets\" changed size during iteration");
5800 goto failed;
5801 }
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07005802 asdl_seq_SET(targets, i, val);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005803 }
Victor Stinner1acc1292013-07-27 00:03:47 +02005804 Py_CLEAR(tmp);
Serhiy Storchakaf320be72018-01-25 10:49:40 +02005805 }
Victor Stinner74419f02020-07-03 11:35:37 +02005806 if (_PyObject_LookupAttr(obj, state->value, &tmp) < 0) {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005807 return 1;
5808 }
Serhiy Storchakaf320be72018-01-25 10:49:40 +02005809 if (tmp == NULL) {
5810 PyErr_SetString(PyExc_TypeError, "required field \"value\" missing from Assign");
5811 return 1;
5812 }
5813 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005814 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02005815 res = obj2ast_expr(state, tmp, &value, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005816 if (res != 0) goto failed;
Victor Stinner1acc1292013-07-27 00:03:47 +02005817 Py_CLEAR(tmp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005818 }
Victor Stinner74419f02020-07-03 11:35:37 +02005819 if (_PyObject_LookupAttr(obj, state->type_comment, &tmp) < 0) {
Guido van Rossumdcfcd142019-01-31 03:40:27 -08005820 return 1;
5821 }
5822 if (tmp == NULL || tmp == Py_None) {
5823 Py_CLEAR(tmp);
5824 type_comment = NULL;
5825 }
5826 else {
5827 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02005828 res = obj2ast_string(state, tmp, &type_comment, arena);
Guido van Rossumdcfcd142019-01-31 03:40:27 -08005829 if (res != 0) goto failed;
5830 Py_CLEAR(tmp);
5831 }
Victor Stinnerd27f8d22021-04-07 21:34:22 +02005832 *out = _PyAST_Assign(targets, value, type_comment, lineno, col_offset,
5833 end_lineno, end_col_offset, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005834 if (*out == NULL) goto failed;
5835 return 0;
5836 }
Victor Stinner74419f02020-07-03 11:35:37 +02005837 tp = state->AugAssign_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07005838 isinstance = PyObject_IsInstance(obj, tp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005839 if (isinstance == -1) {
5840 return 1;
5841 }
5842 if (isinstance) {
5843 expr_ty target;
5844 operator_ty op;
5845 expr_ty value;
5846
Victor Stinner74419f02020-07-03 11:35:37 +02005847 if (_PyObject_LookupAttr(obj, state->target, &tmp) < 0) {
Serhiy Storchakaf320be72018-01-25 10:49:40 +02005848 return 1;
5849 }
5850 if (tmp == NULL) {
5851 PyErr_SetString(PyExc_TypeError, "required field \"target\" missing from AugAssign");
5852 return 1;
5853 }
5854 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005855 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02005856 res = obj2ast_expr(state, tmp, &target, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005857 if (res != 0) goto failed;
Victor Stinner1acc1292013-07-27 00:03:47 +02005858 Py_CLEAR(tmp);
Serhiy Storchakaf320be72018-01-25 10:49:40 +02005859 }
Victor Stinner74419f02020-07-03 11:35:37 +02005860 if (_PyObject_LookupAttr(obj, state->op, &tmp) < 0) {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005861 return 1;
5862 }
Serhiy Storchakaf320be72018-01-25 10:49:40 +02005863 if (tmp == NULL) {
5864 PyErr_SetString(PyExc_TypeError, "required field \"op\" missing from AugAssign");
5865 return 1;
5866 }
5867 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005868 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02005869 res = obj2ast_operator(state, tmp, &op, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005870 if (res != 0) goto failed;
Victor Stinner1acc1292013-07-27 00:03:47 +02005871 Py_CLEAR(tmp);
Serhiy Storchakaf320be72018-01-25 10:49:40 +02005872 }
Victor Stinner74419f02020-07-03 11:35:37 +02005873 if (_PyObject_LookupAttr(obj, state->value, &tmp) < 0) {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005874 return 1;
5875 }
Serhiy Storchakaf320be72018-01-25 10:49:40 +02005876 if (tmp == NULL) {
5877 PyErr_SetString(PyExc_TypeError, "required field \"value\" missing from AugAssign");
5878 return 1;
5879 }
5880 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005881 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02005882 res = obj2ast_expr(state, tmp, &value, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005883 if (res != 0) goto failed;
Victor Stinner1acc1292013-07-27 00:03:47 +02005884 Py_CLEAR(tmp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005885 }
Victor Stinnerd27f8d22021-04-07 21:34:22 +02005886 *out = _PyAST_AugAssign(target, op, value, lineno, col_offset,
5887 end_lineno, end_col_offset, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005888 if (*out == NULL) goto failed;
5889 return 0;
5890 }
Victor Stinner74419f02020-07-03 11:35:37 +02005891 tp = state->AnnAssign_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07005892 isinstance = PyObject_IsInstance(obj, tp);
Yury Selivanovf8cb8a12016-09-08 20:50:03 -07005893 if (isinstance == -1) {
5894 return 1;
5895 }
5896 if (isinstance) {
5897 expr_ty target;
5898 expr_ty annotation;
5899 expr_ty value;
5900 int simple;
5901
Victor Stinner74419f02020-07-03 11:35:37 +02005902 if (_PyObject_LookupAttr(obj, state->target, &tmp) < 0) {
Serhiy Storchakaf320be72018-01-25 10:49:40 +02005903 return 1;
5904 }
5905 if (tmp == NULL) {
5906 PyErr_SetString(PyExc_TypeError, "required field \"target\" missing from AnnAssign");
5907 return 1;
5908 }
5909 else {
Yury Selivanovf8cb8a12016-09-08 20:50:03 -07005910 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02005911 res = obj2ast_expr(state, tmp, &target, arena);
Yury Selivanovf8cb8a12016-09-08 20:50:03 -07005912 if (res != 0) goto failed;
5913 Py_CLEAR(tmp);
Serhiy Storchakaf320be72018-01-25 10:49:40 +02005914 }
Victor Stinner74419f02020-07-03 11:35:37 +02005915 if (_PyObject_LookupAttr(obj, state->annotation, &tmp) < 0) {
Yury Selivanovf8cb8a12016-09-08 20:50:03 -07005916 return 1;
5917 }
Serhiy Storchakaf320be72018-01-25 10:49:40 +02005918 if (tmp == NULL) {
5919 PyErr_SetString(PyExc_TypeError, "required field \"annotation\" missing from AnnAssign");
5920 return 1;
5921 }
5922 else {
Yury Selivanovf8cb8a12016-09-08 20:50:03 -07005923 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02005924 res = obj2ast_expr(state, tmp, &annotation, arena);
Yury Selivanovf8cb8a12016-09-08 20:50:03 -07005925 if (res != 0) goto failed;
5926 Py_CLEAR(tmp);
Serhiy Storchakaf320be72018-01-25 10:49:40 +02005927 }
Victor Stinner74419f02020-07-03 11:35:37 +02005928 if (_PyObject_LookupAttr(obj, state->value, &tmp) < 0) {
Yury Selivanovf8cb8a12016-09-08 20:50:03 -07005929 return 1;
5930 }
Serhiy Storchakaf320be72018-01-25 10:49:40 +02005931 if (tmp == NULL || tmp == Py_None) {
5932 Py_CLEAR(tmp);
5933 value = NULL;
5934 }
5935 else {
Yury Selivanovf8cb8a12016-09-08 20:50:03 -07005936 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02005937 res = obj2ast_expr(state, tmp, &value, arena);
Yury Selivanovf8cb8a12016-09-08 20:50:03 -07005938 if (res != 0) goto failed;
5939 Py_CLEAR(tmp);
Yury Selivanovf8cb8a12016-09-08 20:50:03 -07005940 }
Victor Stinner74419f02020-07-03 11:35:37 +02005941 if (_PyObject_LookupAttr(obj, state->simple, &tmp) < 0) {
Serhiy Storchakaf320be72018-01-25 10:49:40 +02005942 return 1;
5943 }
5944 if (tmp == NULL) {
5945 PyErr_SetString(PyExc_TypeError, "required field \"simple\" missing from AnnAssign");
5946 return 1;
5947 }
5948 else {
Yury Selivanovf8cb8a12016-09-08 20:50:03 -07005949 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02005950 res = obj2ast_int(state, tmp, &simple, arena);
Yury Selivanovf8cb8a12016-09-08 20:50:03 -07005951 if (res != 0) goto failed;
5952 Py_CLEAR(tmp);
Yury Selivanovf8cb8a12016-09-08 20:50:03 -07005953 }
Victor Stinnerd27f8d22021-04-07 21:34:22 +02005954 *out = _PyAST_AnnAssign(target, annotation, value, simple, lineno,
5955 col_offset, end_lineno, end_col_offset, arena);
Yury Selivanovf8cb8a12016-09-08 20:50:03 -07005956 if (*out == NULL) goto failed;
5957 return 0;
5958 }
Victor Stinner74419f02020-07-03 11:35:37 +02005959 tp = state->For_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07005960 isinstance = PyObject_IsInstance(obj, tp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005961 if (isinstance == -1) {
5962 return 1;
5963 }
5964 if (isinstance) {
5965 expr_ty target;
5966 expr_ty iter;
Pablo Galindoa5634c42020-09-16 19:42:00 +01005967 asdl_stmt_seq* body;
5968 asdl_stmt_seq* orelse;
Guido van Rossumdcfcd142019-01-31 03:40:27 -08005969 string type_comment;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005970
Victor Stinner74419f02020-07-03 11:35:37 +02005971 if (_PyObject_LookupAttr(obj, state->target, &tmp) < 0) {
Serhiy Storchakaf320be72018-01-25 10:49:40 +02005972 return 1;
5973 }
5974 if (tmp == NULL) {
5975 PyErr_SetString(PyExc_TypeError, "required field \"target\" missing from For");
5976 return 1;
5977 }
5978 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005979 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02005980 res = obj2ast_expr(state, tmp, &target, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005981 if (res != 0) goto failed;
Victor Stinner1acc1292013-07-27 00:03:47 +02005982 Py_CLEAR(tmp);
Serhiy Storchakaf320be72018-01-25 10:49:40 +02005983 }
Victor Stinner74419f02020-07-03 11:35:37 +02005984 if (_PyObject_LookupAttr(obj, state->iter, &tmp) < 0) {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005985 return 1;
5986 }
Serhiy Storchakaf320be72018-01-25 10:49:40 +02005987 if (tmp == NULL) {
5988 PyErr_SetString(PyExc_TypeError, "required field \"iter\" missing from For");
5989 return 1;
5990 }
5991 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005992 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02005993 res = obj2ast_expr(state, tmp, &iter, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005994 if (res != 0) goto failed;
Victor Stinner1acc1292013-07-27 00:03:47 +02005995 Py_CLEAR(tmp);
Serhiy Storchakaf320be72018-01-25 10:49:40 +02005996 }
Victor Stinner74419f02020-07-03 11:35:37 +02005997 if (_PyObject_LookupAttr(obj, state->body, &tmp) < 0) {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005998 return 1;
5999 }
Serhiy Storchakaf320be72018-01-25 10:49:40 +02006000 if (tmp == NULL) {
6001 PyErr_SetString(PyExc_TypeError, "required field \"body\" missing from For");
6002 return 1;
6003 }
6004 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006005 int res;
6006 Py_ssize_t len;
6007 Py_ssize_t i;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006008 if (!PyList_Check(tmp)) {
Dino Viehlandac46eb42019-09-11 10:16:34 -07006009 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 +02006010 goto failed;
6011 }
6012 len = PyList_GET_SIZE(tmp);
Pablo Galindoa5634c42020-09-16 19:42:00 +01006013 body = _Py_asdl_stmt_seq_new(len, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006014 if (body == NULL) goto failed;
6015 for (i = 0; i < len; i++) {
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07006016 stmt_ty val;
Serhiy Storchaka43c97312019-09-10 13:02:30 +03006017 PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
6018 Py_INCREF(tmp2);
Victor Stinner74419f02020-07-03 11:35:37 +02006019 res = obj2ast_stmt(state, tmp2, &val, arena);
Serhiy Storchaka43c97312019-09-10 13:02:30 +03006020 Py_DECREF(tmp2);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006021 if (res != 0) goto failed;
Serhiy Storchakacf380602016-10-07 21:51:28 +03006022 if (len != PyList_GET_SIZE(tmp)) {
6023 PyErr_SetString(PyExc_RuntimeError, "For field \"body\" changed size during iteration");
6024 goto failed;
6025 }
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07006026 asdl_seq_SET(body, i, val);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006027 }
Victor Stinner1acc1292013-07-27 00:03:47 +02006028 Py_CLEAR(tmp);
Serhiy Storchakaf320be72018-01-25 10:49:40 +02006029 }
Victor Stinner74419f02020-07-03 11:35:37 +02006030 if (_PyObject_LookupAttr(obj, state->orelse, &tmp) < 0) {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006031 return 1;
6032 }
Serhiy Storchakaf320be72018-01-25 10:49:40 +02006033 if (tmp == NULL) {
6034 PyErr_SetString(PyExc_TypeError, "required field \"orelse\" missing from For");
6035 return 1;
6036 }
6037 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006038 int res;
6039 Py_ssize_t len;
6040 Py_ssize_t i;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006041 if (!PyList_Check(tmp)) {
Dino Viehlandac46eb42019-09-11 10:16:34 -07006042 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 +02006043 goto failed;
6044 }
6045 len = PyList_GET_SIZE(tmp);
Pablo Galindoa5634c42020-09-16 19:42:00 +01006046 orelse = _Py_asdl_stmt_seq_new(len, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006047 if (orelse == NULL) goto failed;
6048 for (i = 0; i < len; i++) {
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07006049 stmt_ty val;
Serhiy Storchaka43c97312019-09-10 13:02:30 +03006050 PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
6051 Py_INCREF(tmp2);
Victor Stinner74419f02020-07-03 11:35:37 +02006052 res = obj2ast_stmt(state, tmp2, &val, arena);
Serhiy Storchaka43c97312019-09-10 13:02:30 +03006053 Py_DECREF(tmp2);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006054 if (res != 0) goto failed;
Serhiy Storchakacf380602016-10-07 21:51:28 +03006055 if (len != PyList_GET_SIZE(tmp)) {
6056 PyErr_SetString(PyExc_RuntimeError, "For field \"orelse\" changed size during iteration");
6057 goto failed;
6058 }
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07006059 asdl_seq_SET(orelse, i, val);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006060 }
Victor Stinner1acc1292013-07-27 00:03:47 +02006061 Py_CLEAR(tmp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006062 }
Victor Stinner74419f02020-07-03 11:35:37 +02006063 if (_PyObject_LookupAttr(obj, state->type_comment, &tmp) < 0) {
Guido van Rossumdcfcd142019-01-31 03:40:27 -08006064 return 1;
6065 }
6066 if (tmp == NULL || tmp == Py_None) {
6067 Py_CLEAR(tmp);
6068 type_comment = NULL;
6069 }
6070 else {
6071 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02006072 res = obj2ast_string(state, tmp, &type_comment, arena);
Guido van Rossumdcfcd142019-01-31 03:40:27 -08006073 if (res != 0) goto failed;
6074 Py_CLEAR(tmp);
6075 }
Victor Stinnerd27f8d22021-04-07 21:34:22 +02006076 *out = _PyAST_For(target, iter, body, orelse, type_comment, lineno,
6077 col_offset, end_lineno, end_col_offset, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006078 if (*out == NULL) goto failed;
6079 return 0;
6080 }
Victor Stinner74419f02020-07-03 11:35:37 +02006081 tp = state->AsyncFor_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07006082 isinstance = PyObject_IsInstance(obj, tp);
Yury Selivanov75445082015-05-11 22:57:16 -04006083 if (isinstance == -1) {
6084 return 1;
6085 }
6086 if (isinstance) {
6087 expr_ty target;
6088 expr_ty iter;
Pablo Galindoa5634c42020-09-16 19:42:00 +01006089 asdl_stmt_seq* body;
6090 asdl_stmt_seq* orelse;
Guido van Rossumdcfcd142019-01-31 03:40:27 -08006091 string type_comment;
Yury Selivanov75445082015-05-11 22:57:16 -04006092
Victor Stinner74419f02020-07-03 11:35:37 +02006093 if (_PyObject_LookupAttr(obj, state->target, &tmp) < 0) {
Serhiy Storchakaf320be72018-01-25 10:49:40 +02006094 return 1;
6095 }
6096 if (tmp == NULL) {
6097 PyErr_SetString(PyExc_TypeError, "required field \"target\" missing from AsyncFor");
6098 return 1;
6099 }
6100 else {
Yury Selivanov75445082015-05-11 22:57:16 -04006101 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02006102 res = obj2ast_expr(state, tmp, &target, arena);
Yury Selivanov75445082015-05-11 22:57:16 -04006103 if (res != 0) goto failed;
6104 Py_CLEAR(tmp);
Serhiy Storchakaf320be72018-01-25 10:49:40 +02006105 }
Victor Stinner74419f02020-07-03 11:35:37 +02006106 if (_PyObject_LookupAttr(obj, state->iter, &tmp) < 0) {
Yury Selivanov75445082015-05-11 22:57:16 -04006107 return 1;
6108 }
Serhiy Storchakaf320be72018-01-25 10:49:40 +02006109 if (tmp == NULL) {
6110 PyErr_SetString(PyExc_TypeError, "required field \"iter\" missing from AsyncFor");
6111 return 1;
6112 }
6113 else {
Yury Selivanov75445082015-05-11 22:57:16 -04006114 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02006115 res = obj2ast_expr(state, tmp, &iter, arena);
Yury Selivanov75445082015-05-11 22:57:16 -04006116 if (res != 0) goto failed;
6117 Py_CLEAR(tmp);
Serhiy Storchakaf320be72018-01-25 10:49:40 +02006118 }
Victor Stinner74419f02020-07-03 11:35:37 +02006119 if (_PyObject_LookupAttr(obj, state->body, &tmp) < 0) {
Yury Selivanov75445082015-05-11 22:57:16 -04006120 return 1;
6121 }
Serhiy Storchakaf320be72018-01-25 10:49:40 +02006122 if (tmp == NULL) {
6123 PyErr_SetString(PyExc_TypeError, "required field \"body\" missing from AsyncFor");
6124 return 1;
6125 }
6126 else {
Yury Selivanov75445082015-05-11 22:57:16 -04006127 int res;
6128 Py_ssize_t len;
6129 Py_ssize_t i;
Yury Selivanov75445082015-05-11 22:57:16 -04006130 if (!PyList_Check(tmp)) {
Dino Viehlandac46eb42019-09-11 10:16:34 -07006131 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 -04006132 goto failed;
6133 }
6134 len = PyList_GET_SIZE(tmp);
Pablo Galindoa5634c42020-09-16 19:42:00 +01006135 body = _Py_asdl_stmt_seq_new(len, arena);
Yury Selivanov75445082015-05-11 22:57:16 -04006136 if (body == NULL) goto failed;
6137 for (i = 0; i < len; i++) {
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07006138 stmt_ty val;
Serhiy Storchaka43c97312019-09-10 13:02:30 +03006139 PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
6140 Py_INCREF(tmp2);
Victor Stinner74419f02020-07-03 11:35:37 +02006141 res = obj2ast_stmt(state, tmp2, &val, arena);
Serhiy Storchaka43c97312019-09-10 13:02:30 +03006142 Py_DECREF(tmp2);
Yury Selivanov75445082015-05-11 22:57:16 -04006143 if (res != 0) goto failed;
Serhiy Storchakacf380602016-10-07 21:51:28 +03006144 if (len != PyList_GET_SIZE(tmp)) {
6145 PyErr_SetString(PyExc_RuntimeError, "AsyncFor field \"body\" changed size during iteration");
6146 goto failed;
6147 }
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07006148 asdl_seq_SET(body, i, val);
Yury Selivanov75445082015-05-11 22:57:16 -04006149 }
6150 Py_CLEAR(tmp);
Serhiy Storchakaf320be72018-01-25 10:49:40 +02006151 }
Victor Stinner74419f02020-07-03 11:35:37 +02006152 if (_PyObject_LookupAttr(obj, state->orelse, &tmp) < 0) {
Yury Selivanov75445082015-05-11 22:57:16 -04006153 return 1;
6154 }
Serhiy Storchakaf320be72018-01-25 10:49:40 +02006155 if (tmp == NULL) {
6156 PyErr_SetString(PyExc_TypeError, "required field \"orelse\" missing from AsyncFor");
6157 return 1;
6158 }
6159 else {
Yury Selivanov75445082015-05-11 22:57:16 -04006160 int res;
6161 Py_ssize_t len;
6162 Py_ssize_t i;
Yury Selivanov75445082015-05-11 22:57:16 -04006163 if (!PyList_Check(tmp)) {
Dino Viehlandac46eb42019-09-11 10:16:34 -07006164 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 -04006165 goto failed;
6166 }
6167 len = PyList_GET_SIZE(tmp);
Pablo Galindoa5634c42020-09-16 19:42:00 +01006168 orelse = _Py_asdl_stmt_seq_new(len, arena);
Yury Selivanov75445082015-05-11 22:57:16 -04006169 if (orelse == NULL) goto failed;
6170 for (i = 0; i < len; i++) {
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07006171 stmt_ty val;
Serhiy Storchaka43c97312019-09-10 13:02:30 +03006172 PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
6173 Py_INCREF(tmp2);
Victor Stinner74419f02020-07-03 11:35:37 +02006174 res = obj2ast_stmt(state, tmp2, &val, arena);
Serhiy Storchaka43c97312019-09-10 13:02:30 +03006175 Py_DECREF(tmp2);
Yury Selivanov75445082015-05-11 22:57:16 -04006176 if (res != 0) goto failed;
Serhiy Storchakacf380602016-10-07 21:51:28 +03006177 if (len != PyList_GET_SIZE(tmp)) {
6178 PyErr_SetString(PyExc_RuntimeError, "AsyncFor field \"orelse\" changed size during iteration");
6179 goto failed;
6180 }
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07006181 asdl_seq_SET(orelse, i, val);
Yury Selivanov75445082015-05-11 22:57:16 -04006182 }
6183 Py_CLEAR(tmp);
Yury Selivanov75445082015-05-11 22:57:16 -04006184 }
Victor Stinner74419f02020-07-03 11:35:37 +02006185 if (_PyObject_LookupAttr(obj, state->type_comment, &tmp) < 0) {
Guido van Rossumdcfcd142019-01-31 03:40:27 -08006186 return 1;
6187 }
6188 if (tmp == NULL || tmp == Py_None) {
6189 Py_CLEAR(tmp);
6190 type_comment = NULL;
6191 }
6192 else {
6193 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02006194 res = obj2ast_string(state, tmp, &type_comment, arena);
Guido van Rossumdcfcd142019-01-31 03:40:27 -08006195 if (res != 0) goto failed;
6196 Py_CLEAR(tmp);
6197 }
Victor Stinnerd27f8d22021-04-07 21:34:22 +02006198 *out = _PyAST_AsyncFor(target, iter, body, orelse, type_comment,
6199 lineno, col_offset, end_lineno, end_col_offset,
6200 arena);
Yury Selivanov75445082015-05-11 22:57:16 -04006201 if (*out == NULL) goto failed;
6202 return 0;
6203 }
Victor Stinner74419f02020-07-03 11:35:37 +02006204 tp = state->While_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07006205 isinstance = PyObject_IsInstance(obj, tp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006206 if (isinstance == -1) {
6207 return 1;
6208 }
6209 if (isinstance) {
6210 expr_ty test;
Pablo Galindoa5634c42020-09-16 19:42:00 +01006211 asdl_stmt_seq* body;
6212 asdl_stmt_seq* orelse;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006213
Victor Stinner74419f02020-07-03 11:35:37 +02006214 if (_PyObject_LookupAttr(obj, state->test, &tmp) < 0) {
Serhiy Storchakaf320be72018-01-25 10:49:40 +02006215 return 1;
6216 }
6217 if (tmp == NULL) {
6218 PyErr_SetString(PyExc_TypeError, "required field \"test\" missing from While");
6219 return 1;
6220 }
6221 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006222 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02006223 res = obj2ast_expr(state, tmp, &test, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006224 if (res != 0) goto failed;
Victor Stinner1acc1292013-07-27 00:03:47 +02006225 Py_CLEAR(tmp);
Serhiy Storchakaf320be72018-01-25 10:49:40 +02006226 }
Victor Stinner74419f02020-07-03 11:35:37 +02006227 if (_PyObject_LookupAttr(obj, state->body, &tmp) < 0) {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006228 return 1;
6229 }
Serhiy Storchakaf320be72018-01-25 10:49:40 +02006230 if (tmp == NULL) {
6231 PyErr_SetString(PyExc_TypeError, "required field \"body\" missing from While");
6232 return 1;
6233 }
6234 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006235 int res;
6236 Py_ssize_t len;
6237 Py_ssize_t i;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006238 if (!PyList_Check(tmp)) {
Dino Viehlandac46eb42019-09-11 10:16:34 -07006239 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 +02006240 goto failed;
6241 }
6242 len = PyList_GET_SIZE(tmp);
Pablo Galindoa5634c42020-09-16 19:42:00 +01006243 body = _Py_asdl_stmt_seq_new(len, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006244 if (body == NULL) goto failed;
6245 for (i = 0; i < len; i++) {
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07006246 stmt_ty val;
Serhiy Storchaka43c97312019-09-10 13:02:30 +03006247 PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
6248 Py_INCREF(tmp2);
Victor Stinner74419f02020-07-03 11:35:37 +02006249 res = obj2ast_stmt(state, tmp2, &val, arena);
Serhiy Storchaka43c97312019-09-10 13:02:30 +03006250 Py_DECREF(tmp2);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006251 if (res != 0) goto failed;
Serhiy Storchakacf380602016-10-07 21:51:28 +03006252 if (len != PyList_GET_SIZE(tmp)) {
6253 PyErr_SetString(PyExc_RuntimeError, "While field \"body\" changed size during iteration");
6254 goto failed;
6255 }
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07006256 asdl_seq_SET(body, i, val);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006257 }
Victor Stinner1acc1292013-07-27 00:03:47 +02006258 Py_CLEAR(tmp);
Serhiy Storchakaf320be72018-01-25 10:49:40 +02006259 }
Victor Stinner74419f02020-07-03 11:35:37 +02006260 if (_PyObject_LookupAttr(obj, state->orelse, &tmp) < 0) {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006261 return 1;
6262 }
Serhiy Storchakaf320be72018-01-25 10:49:40 +02006263 if (tmp == NULL) {
6264 PyErr_SetString(PyExc_TypeError, "required field \"orelse\" missing from While");
6265 return 1;
6266 }
6267 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006268 int res;
6269 Py_ssize_t len;
6270 Py_ssize_t i;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006271 if (!PyList_Check(tmp)) {
Dino Viehlandac46eb42019-09-11 10:16:34 -07006272 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 +02006273 goto failed;
6274 }
6275 len = PyList_GET_SIZE(tmp);
Pablo Galindoa5634c42020-09-16 19:42:00 +01006276 orelse = _Py_asdl_stmt_seq_new(len, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006277 if (orelse == NULL) goto failed;
6278 for (i = 0; i < len; i++) {
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07006279 stmt_ty val;
Serhiy Storchaka43c97312019-09-10 13:02:30 +03006280 PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
6281 Py_INCREF(tmp2);
Victor Stinner74419f02020-07-03 11:35:37 +02006282 res = obj2ast_stmt(state, tmp2, &val, arena);
Serhiy Storchaka43c97312019-09-10 13:02:30 +03006283 Py_DECREF(tmp2);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006284 if (res != 0) goto failed;
Serhiy Storchakacf380602016-10-07 21:51:28 +03006285 if (len != PyList_GET_SIZE(tmp)) {
6286 PyErr_SetString(PyExc_RuntimeError, "While field \"orelse\" changed size during iteration");
6287 goto failed;
6288 }
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07006289 asdl_seq_SET(orelse, i, val);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006290 }
Victor Stinner1acc1292013-07-27 00:03:47 +02006291 Py_CLEAR(tmp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006292 }
Victor Stinnerd27f8d22021-04-07 21:34:22 +02006293 *out = _PyAST_While(test, body, orelse, lineno, col_offset, end_lineno,
6294 end_col_offset, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006295 if (*out == NULL) goto failed;
6296 return 0;
6297 }
Victor Stinner74419f02020-07-03 11:35:37 +02006298 tp = state->If_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07006299 isinstance = PyObject_IsInstance(obj, tp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006300 if (isinstance == -1) {
6301 return 1;
6302 }
6303 if (isinstance) {
6304 expr_ty test;
Pablo Galindoa5634c42020-09-16 19:42:00 +01006305 asdl_stmt_seq* body;
6306 asdl_stmt_seq* orelse;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006307
Victor Stinner74419f02020-07-03 11:35:37 +02006308 if (_PyObject_LookupAttr(obj, state->test, &tmp) < 0) {
Serhiy Storchakaf320be72018-01-25 10:49:40 +02006309 return 1;
6310 }
6311 if (tmp == NULL) {
6312 PyErr_SetString(PyExc_TypeError, "required field \"test\" missing from If");
6313 return 1;
6314 }
6315 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006316 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02006317 res = obj2ast_expr(state, tmp, &test, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006318 if (res != 0) goto failed;
Victor Stinner1acc1292013-07-27 00:03:47 +02006319 Py_CLEAR(tmp);
Serhiy Storchakaf320be72018-01-25 10:49:40 +02006320 }
Victor Stinner74419f02020-07-03 11:35:37 +02006321 if (_PyObject_LookupAttr(obj, state->body, &tmp) < 0) {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006322 return 1;
6323 }
Serhiy Storchakaf320be72018-01-25 10:49:40 +02006324 if (tmp == NULL) {
6325 PyErr_SetString(PyExc_TypeError, "required field \"body\" missing from If");
6326 return 1;
6327 }
6328 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006329 int res;
6330 Py_ssize_t len;
6331 Py_ssize_t i;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006332 if (!PyList_Check(tmp)) {
Dino Viehlandac46eb42019-09-11 10:16:34 -07006333 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 +02006334 goto failed;
6335 }
6336 len = PyList_GET_SIZE(tmp);
Pablo Galindoa5634c42020-09-16 19:42:00 +01006337 body = _Py_asdl_stmt_seq_new(len, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006338 if (body == NULL) goto failed;
6339 for (i = 0; i < len; i++) {
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07006340 stmt_ty val;
Serhiy Storchaka43c97312019-09-10 13:02:30 +03006341 PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
6342 Py_INCREF(tmp2);
Victor Stinner74419f02020-07-03 11:35:37 +02006343 res = obj2ast_stmt(state, tmp2, &val, arena);
Serhiy Storchaka43c97312019-09-10 13:02:30 +03006344 Py_DECREF(tmp2);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006345 if (res != 0) goto failed;
Serhiy Storchakacf380602016-10-07 21:51:28 +03006346 if (len != PyList_GET_SIZE(tmp)) {
6347 PyErr_SetString(PyExc_RuntimeError, "If field \"body\" changed size during iteration");
6348 goto failed;
6349 }
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07006350 asdl_seq_SET(body, i, val);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006351 }
Victor Stinner1acc1292013-07-27 00:03:47 +02006352 Py_CLEAR(tmp);
Serhiy Storchakaf320be72018-01-25 10:49:40 +02006353 }
Victor Stinner74419f02020-07-03 11:35:37 +02006354 if (_PyObject_LookupAttr(obj, state->orelse, &tmp) < 0) {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006355 return 1;
6356 }
Serhiy Storchakaf320be72018-01-25 10:49:40 +02006357 if (tmp == NULL) {
6358 PyErr_SetString(PyExc_TypeError, "required field \"orelse\" missing from If");
6359 return 1;
6360 }
6361 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006362 int res;
6363 Py_ssize_t len;
6364 Py_ssize_t i;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006365 if (!PyList_Check(tmp)) {
Dino Viehlandac46eb42019-09-11 10:16:34 -07006366 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 +02006367 goto failed;
6368 }
6369 len = PyList_GET_SIZE(tmp);
Pablo Galindoa5634c42020-09-16 19:42:00 +01006370 orelse = _Py_asdl_stmt_seq_new(len, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006371 if (orelse == NULL) goto failed;
6372 for (i = 0; i < len; i++) {
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07006373 stmt_ty val;
Serhiy Storchaka43c97312019-09-10 13:02:30 +03006374 PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
6375 Py_INCREF(tmp2);
Victor Stinner74419f02020-07-03 11:35:37 +02006376 res = obj2ast_stmt(state, tmp2, &val, arena);
Serhiy Storchaka43c97312019-09-10 13:02:30 +03006377 Py_DECREF(tmp2);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006378 if (res != 0) goto failed;
Serhiy Storchakacf380602016-10-07 21:51:28 +03006379 if (len != PyList_GET_SIZE(tmp)) {
6380 PyErr_SetString(PyExc_RuntimeError, "If field \"orelse\" changed size during iteration");
6381 goto failed;
6382 }
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07006383 asdl_seq_SET(orelse, i, val);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006384 }
Victor Stinner1acc1292013-07-27 00:03:47 +02006385 Py_CLEAR(tmp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006386 }
Victor Stinnerd27f8d22021-04-07 21:34:22 +02006387 *out = _PyAST_If(test, body, orelse, lineno, col_offset, end_lineno,
6388 end_col_offset, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006389 if (*out == NULL) goto failed;
6390 return 0;
6391 }
Victor Stinner74419f02020-07-03 11:35:37 +02006392 tp = state->With_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07006393 isinstance = PyObject_IsInstance(obj, tp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006394 if (isinstance == -1) {
6395 return 1;
6396 }
6397 if (isinstance) {
Pablo Galindoa5634c42020-09-16 19:42:00 +01006398 asdl_withitem_seq* items;
6399 asdl_stmt_seq* body;
Guido van Rossumdcfcd142019-01-31 03:40:27 -08006400 string type_comment;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006401
Victor Stinner74419f02020-07-03 11:35:37 +02006402 if (_PyObject_LookupAttr(obj, state->items, &tmp) < 0) {
Serhiy Storchakaf320be72018-01-25 10:49:40 +02006403 return 1;
6404 }
6405 if (tmp == NULL) {
6406 PyErr_SetString(PyExc_TypeError, "required field \"items\" missing from With");
6407 return 1;
6408 }
6409 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006410 int res;
6411 Py_ssize_t len;
6412 Py_ssize_t i;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006413 if (!PyList_Check(tmp)) {
Dino Viehlandac46eb42019-09-11 10:16:34 -07006414 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 +02006415 goto failed;
6416 }
6417 len = PyList_GET_SIZE(tmp);
Pablo Galindoa5634c42020-09-16 19:42:00 +01006418 items = _Py_asdl_withitem_seq_new(len, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006419 if (items == NULL) goto failed;
6420 for (i = 0; i < len; i++) {
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07006421 withitem_ty val;
Serhiy Storchaka43c97312019-09-10 13:02:30 +03006422 PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
6423 Py_INCREF(tmp2);
Victor Stinner74419f02020-07-03 11:35:37 +02006424 res = obj2ast_withitem(state, tmp2, &val, arena);
Serhiy Storchaka43c97312019-09-10 13:02:30 +03006425 Py_DECREF(tmp2);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006426 if (res != 0) goto failed;
Serhiy Storchakacf380602016-10-07 21:51:28 +03006427 if (len != PyList_GET_SIZE(tmp)) {
6428 PyErr_SetString(PyExc_RuntimeError, "With field \"items\" changed size during iteration");
6429 goto failed;
6430 }
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07006431 asdl_seq_SET(items, i, val);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006432 }
Victor Stinner1acc1292013-07-27 00:03:47 +02006433 Py_CLEAR(tmp);
Serhiy Storchakaf320be72018-01-25 10:49:40 +02006434 }
Victor Stinner74419f02020-07-03 11:35:37 +02006435 if (_PyObject_LookupAttr(obj, state->body, &tmp) < 0) {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006436 return 1;
6437 }
Serhiy Storchakaf320be72018-01-25 10:49:40 +02006438 if (tmp == NULL) {
6439 PyErr_SetString(PyExc_TypeError, "required field \"body\" missing from With");
6440 return 1;
6441 }
6442 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006443 int res;
6444 Py_ssize_t len;
6445 Py_ssize_t i;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006446 if (!PyList_Check(tmp)) {
Dino Viehlandac46eb42019-09-11 10:16:34 -07006447 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 +02006448 goto failed;
6449 }
6450 len = PyList_GET_SIZE(tmp);
Pablo Galindoa5634c42020-09-16 19:42:00 +01006451 body = _Py_asdl_stmt_seq_new(len, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006452 if (body == NULL) goto failed;
6453 for (i = 0; i < len; i++) {
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07006454 stmt_ty val;
Serhiy Storchaka43c97312019-09-10 13:02:30 +03006455 PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
6456 Py_INCREF(tmp2);
Victor Stinner74419f02020-07-03 11:35:37 +02006457 res = obj2ast_stmt(state, tmp2, &val, arena);
Serhiy Storchaka43c97312019-09-10 13:02:30 +03006458 Py_DECREF(tmp2);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006459 if (res != 0) goto failed;
Serhiy Storchakacf380602016-10-07 21:51:28 +03006460 if (len != PyList_GET_SIZE(tmp)) {
6461 PyErr_SetString(PyExc_RuntimeError, "With field \"body\" changed size during iteration");
6462 goto failed;
6463 }
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07006464 asdl_seq_SET(body, i, val);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006465 }
Victor Stinner1acc1292013-07-27 00:03:47 +02006466 Py_CLEAR(tmp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006467 }
Victor Stinner74419f02020-07-03 11:35:37 +02006468 if (_PyObject_LookupAttr(obj, state->type_comment, &tmp) < 0) {
Guido van Rossumdcfcd142019-01-31 03:40:27 -08006469 return 1;
6470 }
6471 if (tmp == NULL || tmp == Py_None) {
6472 Py_CLEAR(tmp);
6473 type_comment = NULL;
6474 }
6475 else {
6476 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02006477 res = obj2ast_string(state, tmp, &type_comment, arena);
Guido van Rossumdcfcd142019-01-31 03:40:27 -08006478 if (res != 0) goto failed;
6479 Py_CLEAR(tmp);
6480 }
Victor Stinnerd27f8d22021-04-07 21:34:22 +02006481 *out = _PyAST_With(items, body, type_comment, lineno, col_offset,
6482 end_lineno, end_col_offset, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006483 if (*out == NULL) goto failed;
6484 return 0;
6485 }
Victor Stinner74419f02020-07-03 11:35:37 +02006486 tp = state->AsyncWith_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07006487 isinstance = PyObject_IsInstance(obj, tp);
Yury Selivanov75445082015-05-11 22:57:16 -04006488 if (isinstance == -1) {
6489 return 1;
6490 }
6491 if (isinstance) {
Pablo Galindoa5634c42020-09-16 19:42:00 +01006492 asdl_withitem_seq* items;
6493 asdl_stmt_seq* body;
Guido van Rossumdcfcd142019-01-31 03:40:27 -08006494 string type_comment;
Yury Selivanov75445082015-05-11 22:57:16 -04006495
Victor Stinner74419f02020-07-03 11:35:37 +02006496 if (_PyObject_LookupAttr(obj, state->items, &tmp) < 0) {
Serhiy Storchakaf320be72018-01-25 10:49:40 +02006497 return 1;
6498 }
6499 if (tmp == NULL) {
6500 PyErr_SetString(PyExc_TypeError, "required field \"items\" missing from AsyncWith");
6501 return 1;
6502 }
6503 else {
Yury Selivanov75445082015-05-11 22:57:16 -04006504 int res;
6505 Py_ssize_t len;
6506 Py_ssize_t i;
Yury Selivanov75445082015-05-11 22:57:16 -04006507 if (!PyList_Check(tmp)) {
Dino Viehlandac46eb42019-09-11 10:16:34 -07006508 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 -04006509 goto failed;
6510 }
6511 len = PyList_GET_SIZE(tmp);
Pablo Galindoa5634c42020-09-16 19:42:00 +01006512 items = _Py_asdl_withitem_seq_new(len, arena);
Yury Selivanov75445082015-05-11 22:57:16 -04006513 if (items == NULL) goto failed;
6514 for (i = 0; i < len; i++) {
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07006515 withitem_ty val;
Serhiy Storchaka43c97312019-09-10 13:02:30 +03006516 PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
6517 Py_INCREF(tmp2);
Victor Stinner74419f02020-07-03 11:35:37 +02006518 res = obj2ast_withitem(state, tmp2, &val, arena);
Serhiy Storchaka43c97312019-09-10 13:02:30 +03006519 Py_DECREF(tmp2);
Yury Selivanov75445082015-05-11 22:57:16 -04006520 if (res != 0) goto failed;
Serhiy Storchakacf380602016-10-07 21:51:28 +03006521 if (len != PyList_GET_SIZE(tmp)) {
6522 PyErr_SetString(PyExc_RuntimeError, "AsyncWith field \"items\" changed size during iteration");
6523 goto failed;
6524 }
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07006525 asdl_seq_SET(items, i, val);
Yury Selivanov75445082015-05-11 22:57:16 -04006526 }
6527 Py_CLEAR(tmp);
Serhiy Storchakaf320be72018-01-25 10:49:40 +02006528 }
Victor Stinner74419f02020-07-03 11:35:37 +02006529 if (_PyObject_LookupAttr(obj, state->body, &tmp) < 0) {
Yury Selivanov75445082015-05-11 22:57:16 -04006530 return 1;
6531 }
Serhiy Storchakaf320be72018-01-25 10:49:40 +02006532 if (tmp == NULL) {
6533 PyErr_SetString(PyExc_TypeError, "required field \"body\" missing from AsyncWith");
6534 return 1;
6535 }
6536 else {
Yury Selivanov75445082015-05-11 22:57:16 -04006537 int res;
6538 Py_ssize_t len;
6539 Py_ssize_t i;
Yury Selivanov75445082015-05-11 22:57:16 -04006540 if (!PyList_Check(tmp)) {
Dino Viehlandac46eb42019-09-11 10:16:34 -07006541 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 -04006542 goto failed;
6543 }
6544 len = PyList_GET_SIZE(tmp);
Pablo Galindoa5634c42020-09-16 19:42:00 +01006545 body = _Py_asdl_stmt_seq_new(len, arena);
Yury Selivanov75445082015-05-11 22:57:16 -04006546 if (body == NULL) goto failed;
6547 for (i = 0; i < len; i++) {
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07006548 stmt_ty val;
Serhiy Storchaka43c97312019-09-10 13:02:30 +03006549 PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
6550 Py_INCREF(tmp2);
Victor Stinner74419f02020-07-03 11:35:37 +02006551 res = obj2ast_stmt(state, tmp2, &val, arena);
Serhiy Storchaka43c97312019-09-10 13:02:30 +03006552 Py_DECREF(tmp2);
Yury Selivanov75445082015-05-11 22:57:16 -04006553 if (res != 0) goto failed;
Serhiy Storchakacf380602016-10-07 21:51:28 +03006554 if (len != PyList_GET_SIZE(tmp)) {
6555 PyErr_SetString(PyExc_RuntimeError, "AsyncWith field \"body\" changed size during iteration");
6556 goto failed;
6557 }
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07006558 asdl_seq_SET(body, i, val);
Yury Selivanov75445082015-05-11 22:57:16 -04006559 }
6560 Py_CLEAR(tmp);
Yury Selivanov75445082015-05-11 22:57:16 -04006561 }
Victor Stinner74419f02020-07-03 11:35:37 +02006562 if (_PyObject_LookupAttr(obj, state->type_comment, &tmp) < 0) {
Guido van Rossumdcfcd142019-01-31 03:40:27 -08006563 return 1;
6564 }
6565 if (tmp == NULL || tmp == Py_None) {
6566 Py_CLEAR(tmp);
6567 type_comment = NULL;
6568 }
6569 else {
6570 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02006571 res = obj2ast_string(state, tmp, &type_comment, arena);
Guido van Rossumdcfcd142019-01-31 03:40:27 -08006572 if (res != 0) goto failed;
6573 Py_CLEAR(tmp);
6574 }
Victor Stinnerd27f8d22021-04-07 21:34:22 +02006575 *out = _PyAST_AsyncWith(items, body, type_comment, lineno, col_offset,
6576 end_lineno, end_col_offset, arena);
Yury Selivanov75445082015-05-11 22:57:16 -04006577 if (*out == NULL) goto failed;
6578 return 0;
6579 }
Brandt Bucher145bf262021-02-26 14:51:55 -08006580 tp = state->Match_type;
6581 isinstance = PyObject_IsInstance(obj, tp);
6582 if (isinstance == -1) {
6583 return 1;
6584 }
6585 if (isinstance) {
6586 expr_ty subject;
6587 asdl_match_case_seq* cases;
6588
6589 if (_PyObject_LookupAttr(obj, state->subject, &tmp) < 0) {
6590 return 1;
6591 }
6592 if (tmp == NULL) {
6593 PyErr_SetString(PyExc_TypeError, "required field \"subject\" missing from Match");
6594 return 1;
6595 }
6596 else {
6597 int res;
6598 res = obj2ast_expr(state, tmp, &subject, arena);
6599 if (res != 0) goto failed;
6600 Py_CLEAR(tmp);
6601 }
6602 if (_PyObject_LookupAttr(obj, state->cases, &tmp) < 0) {
6603 return 1;
6604 }
6605 if (tmp == NULL) {
6606 PyErr_SetString(PyExc_TypeError, "required field \"cases\" missing from Match");
6607 return 1;
6608 }
6609 else {
6610 int res;
6611 Py_ssize_t len;
6612 Py_ssize_t i;
6613 if (!PyList_Check(tmp)) {
6614 PyErr_Format(PyExc_TypeError, "Match field \"cases\" must be a list, not a %.200s", _PyType_Name(Py_TYPE(tmp)));
6615 goto failed;
6616 }
6617 len = PyList_GET_SIZE(tmp);
6618 cases = _Py_asdl_match_case_seq_new(len, arena);
6619 if (cases == NULL) goto failed;
6620 for (i = 0; i < len; i++) {
6621 match_case_ty val;
6622 PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
6623 Py_INCREF(tmp2);
6624 res = obj2ast_match_case(state, tmp2, &val, arena);
6625 Py_DECREF(tmp2);
6626 if (res != 0) goto failed;
6627 if (len != PyList_GET_SIZE(tmp)) {
6628 PyErr_SetString(PyExc_RuntimeError, "Match field \"cases\" changed size during iteration");
6629 goto failed;
6630 }
6631 asdl_seq_SET(cases, i, val);
6632 }
6633 Py_CLEAR(tmp);
6634 }
Victor Stinnerd27f8d22021-04-07 21:34:22 +02006635 *out = _PyAST_Match(subject, cases, lineno, col_offset, end_lineno,
6636 end_col_offset, arena);
Brandt Bucher145bf262021-02-26 14:51:55 -08006637 if (*out == NULL) goto failed;
6638 return 0;
6639 }
Victor Stinner74419f02020-07-03 11:35:37 +02006640 tp = state->Raise_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07006641 isinstance = PyObject_IsInstance(obj, tp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006642 if (isinstance == -1) {
6643 return 1;
6644 }
6645 if (isinstance) {
6646 expr_ty exc;
6647 expr_ty cause;
6648
Victor Stinner74419f02020-07-03 11:35:37 +02006649 if (_PyObject_LookupAttr(obj, state->exc, &tmp) < 0) {
Serhiy Storchakaf320be72018-01-25 10:49:40 +02006650 return 1;
6651 }
6652 if (tmp == NULL || tmp == Py_None) {
6653 Py_CLEAR(tmp);
6654 exc = NULL;
6655 }
6656 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006657 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02006658 res = obj2ast_expr(state, tmp, &exc, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006659 if (res != 0) goto failed;
Victor Stinner1acc1292013-07-27 00:03:47 +02006660 Py_CLEAR(tmp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006661 }
Victor Stinner74419f02020-07-03 11:35:37 +02006662 if (_PyObject_LookupAttr(obj, state->cause, &tmp) < 0) {
Serhiy Storchakaf320be72018-01-25 10:49:40 +02006663 return 1;
6664 }
6665 if (tmp == NULL || tmp == Py_None) {
6666 Py_CLEAR(tmp);
6667 cause = NULL;
6668 }
6669 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006670 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02006671 res = obj2ast_expr(state, tmp, &cause, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006672 if (res != 0) goto failed;
Victor Stinner1acc1292013-07-27 00:03:47 +02006673 Py_CLEAR(tmp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006674 }
Victor Stinnerd27f8d22021-04-07 21:34:22 +02006675 *out = _PyAST_Raise(exc, cause, lineno, col_offset, end_lineno,
6676 end_col_offset, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006677 if (*out == NULL) goto failed;
6678 return 0;
6679 }
Victor Stinner74419f02020-07-03 11:35:37 +02006680 tp = state->Try_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07006681 isinstance = PyObject_IsInstance(obj, tp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006682 if (isinstance == -1) {
6683 return 1;
6684 }
6685 if (isinstance) {
Pablo Galindoa5634c42020-09-16 19:42:00 +01006686 asdl_stmt_seq* body;
6687 asdl_excepthandler_seq* handlers;
6688 asdl_stmt_seq* orelse;
6689 asdl_stmt_seq* finalbody;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006690
Victor Stinner74419f02020-07-03 11:35:37 +02006691 if (_PyObject_LookupAttr(obj, state->body, &tmp) < 0) {
Serhiy Storchakaf320be72018-01-25 10:49:40 +02006692 return 1;
6693 }
6694 if (tmp == NULL) {
6695 PyErr_SetString(PyExc_TypeError, "required field \"body\" missing from Try");
6696 return 1;
6697 }
6698 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006699 int res;
6700 Py_ssize_t len;
6701 Py_ssize_t i;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006702 if (!PyList_Check(tmp)) {
Dino Viehlandac46eb42019-09-11 10:16:34 -07006703 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 +02006704 goto failed;
6705 }
6706 len = PyList_GET_SIZE(tmp);
Pablo Galindoa5634c42020-09-16 19:42:00 +01006707 body = _Py_asdl_stmt_seq_new(len, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006708 if (body == NULL) goto failed;
6709 for (i = 0; i < len; i++) {
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07006710 stmt_ty val;
Serhiy Storchaka43c97312019-09-10 13:02:30 +03006711 PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
6712 Py_INCREF(tmp2);
Victor Stinner74419f02020-07-03 11:35:37 +02006713 res = obj2ast_stmt(state, tmp2, &val, arena);
Serhiy Storchaka43c97312019-09-10 13:02:30 +03006714 Py_DECREF(tmp2);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006715 if (res != 0) goto failed;
Serhiy Storchakacf380602016-10-07 21:51:28 +03006716 if (len != PyList_GET_SIZE(tmp)) {
6717 PyErr_SetString(PyExc_RuntimeError, "Try field \"body\" changed size during iteration");
6718 goto failed;
6719 }
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07006720 asdl_seq_SET(body, i, val);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006721 }
Victor Stinner1acc1292013-07-27 00:03:47 +02006722 Py_CLEAR(tmp);
Serhiy Storchakaf320be72018-01-25 10:49:40 +02006723 }
Victor Stinner74419f02020-07-03 11:35:37 +02006724 if (_PyObject_LookupAttr(obj, state->handlers, &tmp) < 0) {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006725 return 1;
6726 }
Serhiy Storchakaf320be72018-01-25 10:49:40 +02006727 if (tmp == NULL) {
6728 PyErr_SetString(PyExc_TypeError, "required field \"handlers\" missing from Try");
6729 return 1;
6730 }
6731 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006732 int res;
6733 Py_ssize_t len;
6734 Py_ssize_t i;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006735 if (!PyList_Check(tmp)) {
Dino Viehlandac46eb42019-09-11 10:16:34 -07006736 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 +02006737 goto failed;
6738 }
6739 len = PyList_GET_SIZE(tmp);
Pablo Galindoa5634c42020-09-16 19:42:00 +01006740 handlers = _Py_asdl_excepthandler_seq_new(len, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006741 if (handlers == NULL) goto failed;
6742 for (i = 0; i < len; i++) {
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07006743 excepthandler_ty val;
Serhiy Storchaka43c97312019-09-10 13:02:30 +03006744 PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
6745 Py_INCREF(tmp2);
Victor Stinner74419f02020-07-03 11:35:37 +02006746 res = obj2ast_excepthandler(state, tmp2, &val, arena);
Serhiy Storchaka43c97312019-09-10 13:02:30 +03006747 Py_DECREF(tmp2);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006748 if (res != 0) goto failed;
Serhiy Storchakacf380602016-10-07 21:51:28 +03006749 if (len != PyList_GET_SIZE(tmp)) {
6750 PyErr_SetString(PyExc_RuntimeError, "Try field \"handlers\" changed size during iteration");
6751 goto failed;
6752 }
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07006753 asdl_seq_SET(handlers, i, val);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006754 }
Victor Stinner1acc1292013-07-27 00:03:47 +02006755 Py_CLEAR(tmp);
Serhiy Storchakaf320be72018-01-25 10:49:40 +02006756 }
Victor Stinner74419f02020-07-03 11:35:37 +02006757 if (_PyObject_LookupAttr(obj, state->orelse, &tmp) < 0) {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006758 return 1;
6759 }
Serhiy Storchakaf320be72018-01-25 10:49:40 +02006760 if (tmp == NULL) {
6761 PyErr_SetString(PyExc_TypeError, "required field \"orelse\" missing from Try");
6762 return 1;
6763 }
6764 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006765 int res;
6766 Py_ssize_t len;
6767 Py_ssize_t i;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006768 if (!PyList_Check(tmp)) {
Dino Viehlandac46eb42019-09-11 10:16:34 -07006769 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 +02006770 goto failed;
6771 }
6772 len = PyList_GET_SIZE(tmp);
Pablo Galindoa5634c42020-09-16 19:42:00 +01006773 orelse = _Py_asdl_stmt_seq_new(len, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006774 if (orelse == NULL) goto failed;
6775 for (i = 0; i < len; i++) {
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07006776 stmt_ty val;
Serhiy Storchaka43c97312019-09-10 13:02:30 +03006777 PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
6778 Py_INCREF(tmp2);
Victor Stinner74419f02020-07-03 11:35:37 +02006779 res = obj2ast_stmt(state, tmp2, &val, arena);
Serhiy Storchaka43c97312019-09-10 13:02:30 +03006780 Py_DECREF(tmp2);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006781 if (res != 0) goto failed;
Serhiy Storchakacf380602016-10-07 21:51:28 +03006782 if (len != PyList_GET_SIZE(tmp)) {
6783 PyErr_SetString(PyExc_RuntimeError, "Try field \"orelse\" changed size during iteration");
6784 goto failed;
6785 }
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07006786 asdl_seq_SET(orelse, i, val);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006787 }
Victor Stinner1acc1292013-07-27 00:03:47 +02006788 Py_CLEAR(tmp);
Serhiy Storchakaf320be72018-01-25 10:49:40 +02006789 }
Victor Stinner74419f02020-07-03 11:35:37 +02006790 if (_PyObject_LookupAttr(obj, state->finalbody, &tmp) < 0) {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006791 return 1;
6792 }
Serhiy Storchakaf320be72018-01-25 10:49:40 +02006793 if (tmp == NULL) {
6794 PyErr_SetString(PyExc_TypeError, "required field \"finalbody\" missing from Try");
6795 return 1;
6796 }
6797 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006798 int res;
6799 Py_ssize_t len;
6800 Py_ssize_t i;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006801 if (!PyList_Check(tmp)) {
Dino Viehlandac46eb42019-09-11 10:16:34 -07006802 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 +02006803 goto failed;
6804 }
6805 len = PyList_GET_SIZE(tmp);
Pablo Galindoa5634c42020-09-16 19:42:00 +01006806 finalbody = _Py_asdl_stmt_seq_new(len, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006807 if (finalbody == NULL) goto failed;
6808 for (i = 0; i < len; i++) {
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07006809 stmt_ty val;
Serhiy Storchaka43c97312019-09-10 13:02:30 +03006810 PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
6811 Py_INCREF(tmp2);
Victor Stinner74419f02020-07-03 11:35:37 +02006812 res = obj2ast_stmt(state, tmp2, &val, arena);
Serhiy Storchaka43c97312019-09-10 13:02:30 +03006813 Py_DECREF(tmp2);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006814 if (res != 0) goto failed;
Serhiy Storchakacf380602016-10-07 21:51:28 +03006815 if (len != PyList_GET_SIZE(tmp)) {
6816 PyErr_SetString(PyExc_RuntimeError, "Try field \"finalbody\" changed size during iteration");
6817 goto failed;
6818 }
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07006819 asdl_seq_SET(finalbody, i, val);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006820 }
Victor Stinner1acc1292013-07-27 00:03:47 +02006821 Py_CLEAR(tmp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006822 }
Victor Stinnerd27f8d22021-04-07 21:34:22 +02006823 *out = _PyAST_Try(body, handlers, orelse, finalbody, lineno,
6824 col_offset, end_lineno, end_col_offset, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006825 if (*out == NULL) goto failed;
6826 return 0;
6827 }
Victor Stinner74419f02020-07-03 11:35:37 +02006828 tp = state->Assert_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07006829 isinstance = PyObject_IsInstance(obj, tp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006830 if (isinstance == -1) {
6831 return 1;
6832 }
6833 if (isinstance) {
6834 expr_ty test;
6835 expr_ty msg;
6836
Victor Stinner74419f02020-07-03 11:35:37 +02006837 if (_PyObject_LookupAttr(obj, state->test, &tmp) < 0) {
Serhiy Storchakaf320be72018-01-25 10:49:40 +02006838 return 1;
6839 }
6840 if (tmp == NULL) {
6841 PyErr_SetString(PyExc_TypeError, "required field \"test\" missing from Assert");
6842 return 1;
6843 }
6844 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006845 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02006846 res = obj2ast_expr(state, tmp, &test, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006847 if (res != 0) goto failed;
Victor Stinner1acc1292013-07-27 00:03:47 +02006848 Py_CLEAR(tmp);
Serhiy Storchakaf320be72018-01-25 10:49:40 +02006849 }
Victor Stinner74419f02020-07-03 11:35:37 +02006850 if (_PyObject_LookupAttr(obj, state->msg, &tmp) < 0) {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006851 return 1;
6852 }
Serhiy Storchakaf320be72018-01-25 10:49:40 +02006853 if (tmp == NULL || tmp == Py_None) {
6854 Py_CLEAR(tmp);
6855 msg = NULL;
6856 }
6857 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006858 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02006859 res = obj2ast_expr(state, tmp, &msg, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006860 if (res != 0) goto failed;
Victor Stinner1acc1292013-07-27 00:03:47 +02006861 Py_CLEAR(tmp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006862 }
Victor Stinnerd27f8d22021-04-07 21:34:22 +02006863 *out = _PyAST_Assert(test, msg, lineno, col_offset, end_lineno,
6864 end_col_offset, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006865 if (*out == NULL) goto failed;
6866 return 0;
6867 }
Victor Stinner74419f02020-07-03 11:35:37 +02006868 tp = state->Import_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07006869 isinstance = PyObject_IsInstance(obj, tp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006870 if (isinstance == -1) {
6871 return 1;
6872 }
6873 if (isinstance) {
Pablo Galindoa5634c42020-09-16 19:42:00 +01006874 asdl_alias_seq* names;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006875
Victor Stinner74419f02020-07-03 11:35:37 +02006876 if (_PyObject_LookupAttr(obj, state->names, &tmp) < 0) {
Serhiy Storchakaf320be72018-01-25 10:49:40 +02006877 return 1;
6878 }
6879 if (tmp == NULL) {
6880 PyErr_SetString(PyExc_TypeError, "required field \"names\" missing from Import");
6881 return 1;
6882 }
6883 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006884 int res;
6885 Py_ssize_t len;
6886 Py_ssize_t i;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006887 if (!PyList_Check(tmp)) {
Dino Viehlandac46eb42019-09-11 10:16:34 -07006888 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 +02006889 goto failed;
6890 }
6891 len = PyList_GET_SIZE(tmp);
Pablo Galindoa5634c42020-09-16 19:42:00 +01006892 names = _Py_asdl_alias_seq_new(len, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006893 if (names == NULL) goto failed;
6894 for (i = 0; i < len; i++) {
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07006895 alias_ty val;
Serhiy Storchaka43c97312019-09-10 13:02:30 +03006896 PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
6897 Py_INCREF(tmp2);
Victor Stinner74419f02020-07-03 11:35:37 +02006898 res = obj2ast_alias(state, tmp2, &val, arena);
Serhiy Storchaka43c97312019-09-10 13:02:30 +03006899 Py_DECREF(tmp2);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006900 if (res != 0) goto failed;
Serhiy Storchakacf380602016-10-07 21:51:28 +03006901 if (len != PyList_GET_SIZE(tmp)) {
6902 PyErr_SetString(PyExc_RuntimeError, "Import field \"names\" changed size during iteration");
6903 goto failed;
6904 }
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07006905 asdl_seq_SET(names, i, val);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006906 }
Victor Stinner1acc1292013-07-27 00:03:47 +02006907 Py_CLEAR(tmp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006908 }
Victor Stinnerd27f8d22021-04-07 21:34:22 +02006909 *out = _PyAST_Import(names, lineno, col_offset, end_lineno,
6910 end_col_offset, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006911 if (*out == NULL) goto failed;
6912 return 0;
6913 }
Victor Stinner74419f02020-07-03 11:35:37 +02006914 tp = state->ImportFrom_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07006915 isinstance = PyObject_IsInstance(obj, tp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006916 if (isinstance == -1) {
6917 return 1;
6918 }
6919 if (isinstance) {
6920 identifier module;
Pablo Galindoa5634c42020-09-16 19:42:00 +01006921 asdl_alias_seq* names;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006922 int level;
6923
Victor Stinner74419f02020-07-03 11:35:37 +02006924 if (_PyObject_LookupAttr(obj, state->module, &tmp) < 0) {
Serhiy Storchakaf320be72018-01-25 10:49:40 +02006925 return 1;
6926 }
6927 if (tmp == NULL || tmp == Py_None) {
6928 Py_CLEAR(tmp);
6929 module = NULL;
6930 }
6931 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006932 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02006933 res = obj2ast_identifier(state, tmp, &module, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006934 if (res != 0) goto failed;
Victor Stinner1acc1292013-07-27 00:03:47 +02006935 Py_CLEAR(tmp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006936 }
Victor Stinner74419f02020-07-03 11:35:37 +02006937 if (_PyObject_LookupAttr(obj, state->names, &tmp) < 0) {
Serhiy Storchakaf320be72018-01-25 10:49:40 +02006938 return 1;
6939 }
6940 if (tmp == NULL) {
6941 PyErr_SetString(PyExc_TypeError, "required field \"names\" missing from ImportFrom");
6942 return 1;
6943 }
6944 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006945 int res;
6946 Py_ssize_t len;
6947 Py_ssize_t i;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006948 if (!PyList_Check(tmp)) {
Dino Viehlandac46eb42019-09-11 10:16:34 -07006949 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 +02006950 goto failed;
6951 }
6952 len = PyList_GET_SIZE(tmp);
Pablo Galindoa5634c42020-09-16 19:42:00 +01006953 names = _Py_asdl_alias_seq_new(len, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006954 if (names == NULL) goto failed;
6955 for (i = 0; i < len; i++) {
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07006956 alias_ty val;
Serhiy Storchaka43c97312019-09-10 13:02:30 +03006957 PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
6958 Py_INCREF(tmp2);
Victor Stinner74419f02020-07-03 11:35:37 +02006959 res = obj2ast_alias(state, tmp2, &val, arena);
Serhiy Storchaka43c97312019-09-10 13:02:30 +03006960 Py_DECREF(tmp2);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006961 if (res != 0) goto failed;
Serhiy Storchakacf380602016-10-07 21:51:28 +03006962 if (len != PyList_GET_SIZE(tmp)) {
6963 PyErr_SetString(PyExc_RuntimeError, "ImportFrom field \"names\" changed size during iteration");
6964 goto failed;
6965 }
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07006966 asdl_seq_SET(names, i, val);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006967 }
Victor Stinner1acc1292013-07-27 00:03:47 +02006968 Py_CLEAR(tmp);
Serhiy Storchakaf320be72018-01-25 10:49:40 +02006969 }
Victor Stinner74419f02020-07-03 11:35:37 +02006970 if (_PyObject_LookupAttr(obj, state->level, &tmp) < 0) {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006971 return 1;
6972 }
Serhiy Storchakaf320be72018-01-25 10:49:40 +02006973 if (tmp == NULL || tmp == Py_None) {
6974 Py_CLEAR(tmp);
6975 level = 0;
6976 }
6977 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006978 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02006979 res = obj2ast_int(state, tmp, &level, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006980 if (res != 0) goto failed;
Victor Stinner1acc1292013-07-27 00:03:47 +02006981 Py_CLEAR(tmp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006982 }
Victor Stinnerd27f8d22021-04-07 21:34:22 +02006983 *out = _PyAST_ImportFrom(module, names, level, lineno, col_offset,
6984 end_lineno, end_col_offset, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006985 if (*out == NULL) goto failed;
6986 return 0;
6987 }
Victor Stinner74419f02020-07-03 11:35:37 +02006988 tp = state->Global_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07006989 isinstance = PyObject_IsInstance(obj, tp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006990 if (isinstance == -1) {
6991 return 1;
6992 }
6993 if (isinstance) {
Pablo Galindoa5634c42020-09-16 19:42:00 +01006994 asdl_identifier_seq* names;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006995
Victor Stinner74419f02020-07-03 11:35:37 +02006996 if (_PyObject_LookupAttr(obj, state->names, &tmp) < 0) {
Serhiy Storchakaf320be72018-01-25 10:49:40 +02006997 return 1;
6998 }
6999 if (tmp == NULL) {
7000 PyErr_SetString(PyExc_TypeError, "required field \"names\" missing from Global");
7001 return 1;
7002 }
7003 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007004 int res;
7005 Py_ssize_t len;
7006 Py_ssize_t i;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007007 if (!PyList_Check(tmp)) {
Dino Viehlandac46eb42019-09-11 10:16:34 -07007008 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 +02007009 goto failed;
7010 }
7011 len = PyList_GET_SIZE(tmp);
Pablo Galindoa5634c42020-09-16 19:42:00 +01007012 names = _Py_asdl_identifier_seq_new(len, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007013 if (names == NULL) goto failed;
7014 for (i = 0; i < len; i++) {
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07007015 identifier val;
Serhiy Storchaka43c97312019-09-10 13:02:30 +03007016 PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
7017 Py_INCREF(tmp2);
Victor Stinner74419f02020-07-03 11:35:37 +02007018 res = obj2ast_identifier(state, tmp2, &val, arena);
Serhiy Storchaka43c97312019-09-10 13:02:30 +03007019 Py_DECREF(tmp2);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007020 if (res != 0) goto failed;
Serhiy Storchakacf380602016-10-07 21:51:28 +03007021 if (len != PyList_GET_SIZE(tmp)) {
7022 PyErr_SetString(PyExc_RuntimeError, "Global field \"names\" changed size during iteration");
7023 goto failed;
7024 }
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07007025 asdl_seq_SET(names, i, val);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007026 }
Victor Stinner1acc1292013-07-27 00:03:47 +02007027 Py_CLEAR(tmp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007028 }
Victor Stinnerd27f8d22021-04-07 21:34:22 +02007029 *out = _PyAST_Global(names, lineno, col_offset, end_lineno,
7030 end_col_offset, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007031 if (*out == NULL) goto failed;
7032 return 0;
7033 }
Victor Stinner74419f02020-07-03 11:35:37 +02007034 tp = state->Nonlocal_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07007035 isinstance = PyObject_IsInstance(obj, tp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007036 if (isinstance == -1) {
7037 return 1;
7038 }
7039 if (isinstance) {
Pablo Galindoa5634c42020-09-16 19:42:00 +01007040 asdl_identifier_seq* names;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007041
Victor Stinner74419f02020-07-03 11:35:37 +02007042 if (_PyObject_LookupAttr(obj, state->names, &tmp) < 0) {
Serhiy Storchakaf320be72018-01-25 10:49:40 +02007043 return 1;
7044 }
7045 if (tmp == NULL) {
7046 PyErr_SetString(PyExc_TypeError, "required field \"names\" missing from Nonlocal");
7047 return 1;
7048 }
7049 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007050 int res;
7051 Py_ssize_t len;
7052 Py_ssize_t i;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007053 if (!PyList_Check(tmp)) {
Dino Viehlandac46eb42019-09-11 10:16:34 -07007054 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 +02007055 goto failed;
7056 }
7057 len = PyList_GET_SIZE(tmp);
Pablo Galindoa5634c42020-09-16 19:42:00 +01007058 names = _Py_asdl_identifier_seq_new(len, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007059 if (names == NULL) goto failed;
7060 for (i = 0; i < len; i++) {
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07007061 identifier val;
Serhiy Storchaka43c97312019-09-10 13:02:30 +03007062 PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
7063 Py_INCREF(tmp2);
Victor Stinner74419f02020-07-03 11:35:37 +02007064 res = obj2ast_identifier(state, tmp2, &val, arena);
Serhiy Storchaka43c97312019-09-10 13:02:30 +03007065 Py_DECREF(tmp2);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007066 if (res != 0) goto failed;
Serhiy Storchakacf380602016-10-07 21:51:28 +03007067 if (len != PyList_GET_SIZE(tmp)) {
7068 PyErr_SetString(PyExc_RuntimeError, "Nonlocal field \"names\" changed size during iteration");
7069 goto failed;
7070 }
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07007071 asdl_seq_SET(names, i, val);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007072 }
Victor Stinner1acc1292013-07-27 00:03:47 +02007073 Py_CLEAR(tmp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007074 }
Victor Stinnerd27f8d22021-04-07 21:34:22 +02007075 *out = _PyAST_Nonlocal(names, lineno, col_offset, end_lineno,
7076 end_col_offset, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007077 if (*out == NULL) goto failed;
7078 return 0;
7079 }
Victor Stinner74419f02020-07-03 11:35:37 +02007080 tp = state->Expr_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07007081 isinstance = PyObject_IsInstance(obj, tp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007082 if (isinstance == -1) {
7083 return 1;
7084 }
7085 if (isinstance) {
7086 expr_ty value;
7087
Victor Stinner74419f02020-07-03 11:35:37 +02007088 if (_PyObject_LookupAttr(obj, state->value, &tmp) < 0) {
Serhiy Storchakaf320be72018-01-25 10:49:40 +02007089 return 1;
7090 }
7091 if (tmp == NULL) {
7092 PyErr_SetString(PyExc_TypeError, "required field \"value\" missing from Expr");
7093 return 1;
7094 }
7095 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007096 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02007097 res = obj2ast_expr(state, tmp, &value, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007098 if (res != 0) goto failed;
Victor Stinner1acc1292013-07-27 00:03:47 +02007099 Py_CLEAR(tmp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007100 }
Victor Stinnerd27f8d22021-04-07 21:34:22 +02007101 *out = _PyAST_Expr(value, lineno, col_offset, end_lineno,
7102 end_col_offset, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007103 if (*out == NULL) goto failed;
7104 return 0;
7105 }
Victor Stinner74419f02020-07-03 11:35:37 +02007106 tp = state->Pass_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07007107 isinstance = PyObject_IsInstance(obj, tp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007108 if (isinstance == -1) {
7109 return 1;
7110 }
7111 if (isinstance) {
7112
Victor Stinnerd27f8d22021-04-07 21:34:22 +02007113 *out = _PyAST_Pass(lineno, col_offset, end_lineno, end_col_offset,
7114 arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007115 if (*out == NULL) goto failed;
7116 return 0;
7117 }
Victor Stinner74419f02020-07-03 11:35:37 +02007118 tp = state->Break_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07007119 isinstance = PyObject_IsInstance(obj, tp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007120 if (isinstance == -1) {
7121 return 1;
7122 }
7123 if (isinstance) {
7124
Victor Stinnerd27f8d22021-04-07 21:34:22 +02007125 *out = _PyAST_Break(lineno, col_offset, end_lineno, end_col_offset,
7126 arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007127 if (*out == NULL) goto failed;
7128 return 0;
7129 }
Victor Stinner74419f02020-07-03 11:35:37 +02007130 tp = state->Continue_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07007131 isinstance = PyObject_IsInstance(obj, tp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007132 if (isinstance == -1) {
7133 return 1;
7134 }
7135 if (isinstance) {
7136
Victor Stinnerd27f8d22021-04-07 21:34:22 +02007137 *out = _PyAST_Continue(lineno, col_offset, end_lineno, end_col_offset,
7138 arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007139 if (*out == NULL) goto failed;
7140 return 0;
7141 }
7142
7143 PyErr_Format(PyExc_TypeError, "expected some sort of stmt, but got %R", obj);
7144 failed:
7145 Py_XDECREF(tmp);
7146 return 1;
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00007147}
7148
7149int
Victor Stinner5cf47822020-11-02 22:03:28 +01007150obj2ast_expr(struct ast_state *state, PyObject* obj, expr_ty* out, PyArena*
7151 arena)
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00007152{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007153 int isinstance;
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00007154
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007155 PyObject *tmp = NULL;
Dino Viehlandac46eb42019-09-11 10:16:34 -07007156 PyObject *tp;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007157 int lineno;
7158 int col_offset;
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00007159 int end_lineno;
7160 int end_col_offset;
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00007161
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007162 if (obj == Py_None) {
7163 *out = NULL;
7164 return 0;
7165 }
Victor Stinner74419f02020-07-03 11:35:37 +02007166 if (_PyObject_LookupAttr(obj, state->lineno, &tmp) < 0) {
Serhiy Storchakaf320be72018-01-25 10:49:40 +02007167 return 1;
7168 }
7169 if (tmp == NULL) {
7170 PyErr_SetString(PyExc_TypeError, "required field \"lineno\" missing from expr");
7171 return 1;
7172 }
7173 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007174 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02007175 res = obj2ast_int(state, tmp, &lineno, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007176 if (res != 0) goto failed;
Victor Stinner1acc1292013-07-27 00:03:47 +02007177 Py_CLEAR(tmp);
Serhiy Storchakaf320be72018-01-25 10:49:40 +02007178 }
Victor Stinner74419f02020-07-03 11:35:37 +02007179 if (_PyObject_LookupAttr(obj, state->col_offset, &tmp) < 0) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00007180 return 1;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007181 }
Serhiy Storchakaf320be72018-01-25 10:49:40 +02007182 if (tmp == NULL) {
7183 PyErr_SetString(PyExc_TypeError, "required field \"col_offset\" missing from expr");
7184 return 1;
7185 }
7186 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007187 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02007188 res = obj2ast_int(state, tmp, &col_offset, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007189 if (res != 0) goto failed;
Victor Stinner1acc1292013-07-27 00:03:47 +02007190 Py_CLEAR(tmp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007191 }
Victor Stinner74419f02020-07-03 11:35:37 +02007192 if (_PyObject_LookupAttr(obj, state->end_lineno, &tmp) < 0) {
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00007193 return 1;
7194 }
7195 if (tmp == NULL || tmp == Py_None) {
7196 Py_CLEAR(tmp);
7197 end_lineno = 0;
7198 }
7199 else {
7200 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02007201 res = obj2ast_int(state, tmp, &end_lineno, arena);
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00007202 if (res != 0) goto failed;
7203 Py_CLEAR(tmp);
7204 }
Victor Stinner74419f02020-07-03 11:35:37 +02007205 if (_PyObject_LookupAttr(obj, state->end_col_offset, &tmp) < 0) {
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00007206 return 1;
7207 }
7208 if (tmp == NULL || tmp == Py_None) {
7209 Py_CLEAR(tmp);
7210 end_col_offset = 0;
7211 }
7212 else {
7213 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02007214 res = obj2ast_int(state, tmp, &end_col_offset, arena);
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00007215 if (res != 0) goto failed;
7216 Py_CLEAR(tmp);
7217 }
Victor Stinner74419f02020-07-03 11:35:37 +02007218 tp = state->BoolOp_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07007219 isinstance = PyObject_IsInstance(obj, tp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007220 if (isinstance == -1) {
7221 return 1;
7222 }
7223 if (isinstance) {
7224 boolop_ty op;
Pablo Galindoa5634c42020-09-16 19:42:00 +01007225 asdl_expr_seq* values;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007226
Victor Stinner74419f02020-07-03 11:35:37 +02007227 if (_PyObject_LookupAttr(obj, state->op, &tmp) < 0) {
Serhiy Storchakaf320be72018-01-25 10:49:40 +02007228 return 1;
7229 }
7230 if (tmp == NULL) {
7231 PyErr_SetString(PyExc_TypeError, "required field \"op\" missing from BoolOp");
7232 return 1;
7233 }
7234 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007235 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02007236 res = obj2ast_boolop(state, tmp, &op, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007237 if (res != 0) goto failed;
Victor Stinner1acc1292013-07-27 00:03:47 +02007238 Py_CLEAR(tmp);
Serhiy Storchakaf320be72018-01-25 10:49:40 +02007239 }
Victor Stinner74419f02020-07-03 11:35:37 +02007240 if (_PyObject_LookupAttr(obj, state->values, &tmp) < 0) {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007241 return 1;
7242 }
Serhiy Storchakaf320be72018-01-25 10:49:40 +02007243 if (tmp == NULL) {
7244 PyErr_SetString(PyExc_TypeError, "required field \"values\" missing from BoolOp");
7245 return 1;
7246 }
7247 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007248 int res;
7249 Py_ssize_t len;
7250 Py_ssize_t i;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007251 if (!PyList_Check(tmp)) {
Dino Viehlandac46eb42019-09-11 10:16:34 -07007252 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 +02007253 goto failed;
7254 }
7255 len = PyList_GET_SIZE(tmp);
Pablo Galindoa5634c42020-09-16 19:42:00 +01007256 values = _Py_asdl_expr_seq_new(len, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007257 if (values == NULL) goto failed;
7258 for (i = 0; i < len; i++) {
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07007259 expr_ty val;
Serhiy Storchaka43c97312019-09-10 13:02:30 +03007260 PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
7261 Py_INCREF(tmp2);
Victor Stinner74419f02020-07-03 11:35:37 +02007262 res = obj2ast_expr(state, tmp2, &val, arena);
Serhiy Storchaka43c97312019-09-10 13:02:30 +03007263 Py_DECREF(tmp2);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007264 if (res != 0) goto failed;
Serhiy Storchakacf380602016-10-07 21:51:28 +03007265 if (len != PyList_GET_SIZE(tmp)) {
7266 PyErr_SetString(PyExc_RuntimeError, "BoolOp field \"values\" changed size during iteration");
7267 goto failed;
7268 }
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07007269 asdl_seq_SET(values, i, val);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007270 }
Victor Stinner1acc1292013-07-27 00:03:47 +02007271 Py_CLEAR(tmp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007272 }
Victor Stinnerd27f8d22021-04-07 21:34:22 +02007273 *out = _PyAST_BoolOp(op, values, lineno, col_offset, end_lineno,
7274 end_col_offset, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007275 if (*out == NULL) goto failed;
7276 return 0;
7277 }
Victor Stinner74419f02020-07-03 11:35:37 +02007278 tp = state->NamedExpr_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07007279 isinstance = PyObject_IsInstance(obj, tp);
Emily Morehouse8f59ee02019-01-24 16:49:56 -07007280 if (isinstance == -1) {
7281 return 1;
7282 }
7283 if (isinstance) {
7284 expr_ty target;
7285 expr_ty value;
7286
Victor Stinner74419f02020-07-03 11:35:37 +02007287 if (_PyObject_LookupAttr(obj, state->target, &tmp) < 0) {
Emily Morehouse8f59ee02019-01-24 16:49:56 -07007288 return 1;
7289 }
7290 if (tmp == NULL) {
7291 PyErr_SetString(PyExc_TypeError, "required field \"target\" missing from NamedExpr");
7292 return 1;
7293 }
7294 else {
7295 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02007296 res = obj2ast_expr(state, tmp, &target, arena);
Emily Morehouse8f59ee02019-01-24 16:49:56 -07007297 if (res != 0) goto failed;
7298 Py_CLEAR(tmp);
7299 }
Victor Stinner74419f02020-07-03 11:35:37 +02007300 if (_PyObject_LookupAttr(obj, state->value, &tmp) < 0) {
Emily Morehouse8f59ee02019-01-24 16:49:56 -07007301 return 1;
7302 }
7303 if (tmp == NULL) {
7304 PyErr_SetString(PyExc_TypeError, "required field \"value\" missing from NamedExpr");
7305 return 1;
7306 }
7307 else {
7308 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02007309 res = obj2ast_expr(state, tmp, &value, arena);
Emily Morehouse8f59ee02019-01-24 16:49:56 -07007310 if (res != 0) goto failed;
7311 Py_CLEAR(tmp);
7312 }
Victor Stinnerd27f8d22021-04-07 21:34:22 +02007313 *out = _PyAST_NamedExpr(target, value, lineno, col_offset, end_lineno,
7314 end_col_offset, arena);
Emily Morehouse8f59ee02019-01-24 16:49:56 -07007315 if (*out == NULL) goto failed;
7316 return 0;
7317 }
Victor Stinner74419f02020-07-03 11:35:37 +02007318 tp = state->BinOp_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07007319 isinstance = PyObject_IsInstance(obj, tp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007320 if (isinstance == -1) {
7321 return 1;
7322 }
7323 if (isinstance) {
7324 expr_ty left;
7325 operator_ty op;
7326 expr_ty right;
7327
Victor Stinner74419f02020-07-03 11:35:37 +02007328 if (_PyObject_LookupAttr(obj, state->left, &tmp) < 0) {
Serhiy Storchakaf320be72018-01-25 10:49:40 +02007329 return 1;
7330 }
7331 if (tmp == NULL) {
7332 PyErr_SetString(PyExc_TypeError, "required field \"left\" missing from BinOp");
7333 return 1;
7334 }
7335 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007336 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02007337 res = obj2ast_expr(state, tmp, &left, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007338 if (res != 0) goto failed;
Victor Stinner1acc1292013-07-27 00:03:47 +02007339 Py_CLEAR(tmp);
Serhiy Storchakaf320be72018-01-25 10:49:40 +02007340 }
Victor Stinner74419f02020-07-03 11:35:37 +02007341 if (_PyObject_LookupAttr(obj, state->op, &tmp) < 0) {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007342 return 1;
7343 }
Serhiy Storchakaf320be72018-01-25 10:49:40 +02007344 if (tmp == NULL) {
7345 PyErr_SetString(PyExc_TypeError, "required field \"op\" missing from BinOp");
7346 return 1;
7347 }
7348 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007349 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02007350 res = obj2ast_operator(state, tmp, &op, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007351 if (res != 0) goto failed;
Victor Stinner1acc1292013-07-27 00:03:47 +02007352 Py_CLEAR(tmp);
Serhiy Storchakaf320be72018-01-25 10:49:40 +02007353 }
Victor Stinner74419f02020-07-03 11:35:37 +02007354 if (_PyObject_LookupAttr(obj, state->right, &tmp) < 0) {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007355 return 1;
7356 }
Serhiy Storchakaf320be72018-01-25 10:49:40 +02007357 if (tmp == NULL) {
7358 PyErr_SetString(PyExc_TypeError, "required field \"right\" missing from BinOp");
7359 return 1;
7360 }
7361 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007362 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02007363 res = obj2ast_expr(state, tmp, &right, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007364 if (res != 0) goto failed;
Victor Stinner1acc1292013-07-27 00:03:47 +02007365 Py_CLEAR(tmp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007366 }
Victor Stinnerd27f8d22021-04-07 21:34:22 +02007367 *out = _PyAST_BinOp(left, op, right, lineno, col_offset, end_lineno,
7368 end_col_offset, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007369 if (*out == NULL) goto failed;
7370 return 0;
7371 }
Victor Stinner74419f02020-07-03 11:35:37 +02007372 tp = state->UnaryOp_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07007373 isinstance = PyObject_IsInstance(obj, tp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007374 if (isinstance == -1) {
7375 return 1;
7376 }
7377 if (isinstance) {
7378 unaryop_ty op;
7379 expr_ty operand;
7380
Victor Stinner74419f02020-07-03 11:35:37 +02007381 if (_PyObject_LookupAttr(obj, state->op, &tmp) < 0) {
Serhiy Storchakaf320be72018-01-25 10:49:40 +02007382 return 1;
7383 }
7384 if (tmp == NULL) {
7385 PyErr_SetString(PyExc_TypeError, "required field \"op\" missing from UnaryOp");
7386 return 1;
7387 }
7388 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007389 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02007390 res = obj2ast_unaryop(state, tmp, &op, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007391 if (res != 0) goto failed;
Victor Stinner1acc1292013-07-27 00:03:47 +02007392 Py_CLEAR(tmp);
Serhiy Storchakaf320be72018-01-25 10:49:40 +02007393 }
Victor Stinner74419f02020-07-03 11:35:37 +02007394 if (_PyObject_LookupAttr(obj, state->operand, &tmp) < 0) {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007395 return 1;
7396 }
Serhiy Storchakaf320be72018-01-25 10:49:40 +02007397 if (tmp == NULL) {
7398 PyErr_SetString(PyExc_TypeError, "required field \"operand\" missing from UnaryOp");
7399 return 1;
7400 }
7401 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007402 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02007403 res = obj2ast_expr(state, tmp, &operand, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007404 if (res != 0) goto failed;
Victor Stinner1acc1292013-07-27 00:03:47 +02007405 Py_CLEAR(tmp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007406 }
Victor Stinnerd27f8d22021-04-07 21:34:22 +02007407 *out = _PyAST_UnaryOp(op, operand, lineno, col_offset, end_lineno,
7408 end_col_offset, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007409 if (*out == NULL) goto failed;
7410 return 0;
7411 }
Victor Stinner74419f02020-07-03 11:35:37 +02007412 tp = state->Lambda_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07007413 isinstance = PyObject_IsInstance(obj, tp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007414 if (isinstance == -1) {
7415 return 1;
7416 }
7417 if (isinstance) {
7418 arguments_ty args;
7419 expr_ty body;
7420
Victor Stinner74419f02020-07-03 11:35:37 +02007421 if (_PyObject_LookupAttr(obj, state->args, &tmp) < 0) {
Serhiy Storchakaf320be72018-01-25 10:49:40 +02007422 return 1;
7423 }
7424 if (tmp == NULL) {
7425 PyErr_SetString(PyExc_TypeError, "required field \"args\" missing from Lambda");
7426 return 1;
7427 }
7428 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007429 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02007430 res = obj2ast_arguments(state, tmp, &args, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007431 if (res != 0) goto failed;
Victor Stinner1acc1292013-07-27 00:03:47 +02007432 Py_CLEAR(tmp);
Serhiy Storchakaf320be72018-01-25 10:49:40 +02007433 }
Victor Stinner74419f02020-07-03 11:35:37 +02007434 if (_PyObject_LookupAttr(obj, state->body, &tmp) < 0) {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007435 return 1;
7436 }
Serhiy Storchakaf320be72018-01-25 10:49:40 +02007437 if (tmp == NULL) {
7438 PyErr_SetString(PyExc_TypeError, "required field \"body\" missing from Lambda");
7439 return 1;
7440 }
7441 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007442 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02007443 res = obj2ast_expr(state, tmp, &body, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007444 if (res != 0) goto failed;
Victor Stinner1acc1292013-07-27 00:03:47 +02007445 Py_CLEAR(tmp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007446 }
Victor Stinnerd27f8d22021-04-07 21:34:22 +02007447 *out = _PyAST_Lambda(args, body, lineno, col_offset, end_lineno,
7448 end_col_offset, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007449 if (*out == NULL) goto failed;
7450 return 0;
7451 }
Victor Stinner74419f02020-07-03 11:35:37 +02007452 tp = state->IfExp_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07007453 isinstance = PyObject_IsInstance(obj, tp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007454 if (isinstance == -1) {
7455 return 1;
7456 }
7457 if (isinstance) {
7458 expr_ty test;
7459 expr_ty body;
7460 expr_ty orelse;
7461
Victor Stinner74419f02020-07-03 11:35:37 +02007462 if (_PyObject_LookupAttr(obj, state->test, &tmp) < 0) {
Serhiy Storchakaf320be72018-01-25 10:49:40 +02007463 return 1;
7464 }
7465 if (tmp == NULL) {
7466 PyErr_SetString(PyExc_TypeError, "required field \"test\" missing from IfExp");
7467 return 1;
7468 }
7469 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007470 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02007471 res = obj2ast_expr(state, tmp, &test, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007472 if (res != 0) goto failed;
Victor Stinner1acc1292013-07-27 00:03:47 +02007473 Py_CLEAR(tmp);
Serhiy Storchakaf320be72018-01-25 10:49:40 +02007474 }
Victor Stinner74419f02020-07-03 11:35:37 +02007475 if (_PyObject_LookupAttr(obj, state->body, &tmp) < 0) {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007476 return 1;
7477 }
Serhiy Storchakaf320be72018-01-25 10:49:40 +02007478 if (tmp == NULL) {
7479 PyErr_SetString(PyExc_TypeError, "required field \"body\" missing from IfExp");
7480 return 1;
7481 }
7482 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007483 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02007484 res = obj2ast_expr(state, tmp, &body, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007485 if (res != 0) goto failed;
Victor Stinner1acc1292013-07-27 00:03:47 +02007486 Py_CLEAR(tmp);
Serhiy Storchakaf320be72018-01-25 10:49:40 +02007487 }
Victor Stinner74419f02020-07-03 11:35:37 +02007488 if (_PyObject_LookupAttr(obj, state->orelse, &tmp) < 0) {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007489 return 1;
7490 }
Serhiy Storchakaf320be72018-01-25 10:49:40 +02007491 if (tmp == NULL) {
7492 PyErr_SetString(PyExc_TypeError, "required field \"orelse\" missing from IfExp");
7493 return 1;
7494 }
7495 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007496 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02007497 res = obj2ast_expr(state, tmp, &orelse, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007498 if (res != 0) goto failed;
Victor Stinner1acc1292013-07-27 00:03:47 +02007499 Py_CLEAR(tmp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007500 }
Victor Stinnerd27f8d22021-04-07 21:34:22 +02007501 *out = _PyAST_IfExp(test, body, orelse, lineno, col_offset, end_lineno,
7502 end_col_offset, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007503 if (*out == NULL) goto failed;
7504 return 0;
7505 }
Victor Stinner74419f02020-07-03 11:35:37 +02007506 tp = state->Dict_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07007507 isinstance = PyObject_IsInstance(obj, tp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007508 if (isinstance == -1) {
7509 return 1;
7510 }
7511 if (isinstance) {
Pablo Galindoa5634c42020-09-16 19:42:00 +01007512 asdl_expr_seq* keys;
7513 asdl_expr_seq* values;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007514
Victor Stinner74419f02020-07-03 11:35:37 +02007515 if (_PyObject_LookupAttr(obj, state->keys, &tmp) < 0) {
Serhiy Storchakaf320be72018-01-25 10:49:40 +02007516 return 1;
7517 }
7518 if (tmp == NULL) {
7519 PyErr_SetString(PyExc_TypeError, "required field \"keys\" missing from Dict");
7520 return 1;
7521 }
7522 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007523 int res;
7524 Py_ssize_t len;
7525 Py_ssize_t i;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007526 if (!PyList_Check(tmp)) {
Dino Viehlandac46eb42019-09-11 10:16:34 -07007527 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 +02007528 goto failed;
7529 }
7530 len = PyList_GET_SIZE(tmp);
Pablo Galindoa5634c42020-09-16 19:42:00 +01007531 keys = _Py_asdl_expr_seq_new(len, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007532 if (keys == NULL) goto failed;
7533 for (i = 0; i < len; i++) {
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07007534 expr_ty val;
Serhiy Storchaka43c97312019-09-10 13:02:30 +03007535 PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
7536 Py_INCREF(tmp2);
Victor Stinner74419f02020-07-03 11:35:37 +02007537 res = obj2ast_expr(state, tmp2, &val, arena);
Serhiy Storchaka43c97312019-09-10 13:02:30 +03007538 Py_DECREF(tmp2);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007539 if (res != 0) goto failed;
Serhiy Storchakacf380602016-10-07 21:51:28 +03007540 if (len != PyList_GET_SIZE(tmp)) {
7541 PyErr_SetString(PyExc_RuntimeError, "Dict field \"keys\" changed size during iteration");
7542 goto failed;
7543 }
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07007544 asdl_seq_SET(keys, i, val);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007545 }
Victor Stinner1acc1292013-07-27 00:03:47 +02007546 Py_CLEAR(tmp);
Serhiy Storchakaf320be72018-01-25 10:49:40 +02007547 }
Victor Stinner74419f02020-07-03 11:35:37 +02007548 if (_PyObject_LookupAttr(obj, state->values, &tmp) < 0) {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007549 return 1;
7550 }
Serhiy Storchakaf320be72018-01-25 10:49:40 +02007551 if (tmp == NULL) {
7552 PyErr_SetString(PyExc_TypeError, "required field \"values\" missing from Dict");
7553 return 1;
7554 }
7555 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007556 int res;
7557 Py_ssize_t len;
7558 Py_ssize_t i;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007559 if (!PyList_Check(tmp)) {
Dino Viehlandac46eb42019-09-11 10:16:34 -07007560 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 +02007561 goto failed;
7562 }
7563 len = PyList_GET_SIZE(tmp);
Pablo Galindoa5634c42020-09-16 19:42:00 +01007564 values = _Py_asdl_expr_seq_new(len, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007565 if (values == NULL) goto failed;
7566 for (i = 0; i < len; i++) {
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07007567 expr_ty val;
Serhiy Storchaka43c97312019-09-10 13:02:30 +03007568 PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
7569 Py_INCREF(tmp2);
Victor Stinner74419f02020-07-03 11:35:37 +02007570 res = obj2ast_expr(state, tmp2, &val, arena);
Serhiy Storchaka43c97312019-09-10 13:02:30 +03007571 Py_DECREF(tmp2);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007572 if (res != 0) goto failed;
Serhiy Storchakacf380602016-10-07 21:51:28 +03007573 if (len != PyList_GET_SIZE(tmp)) {
7574 PyErr_SetString(PyExc_RuntimeError, "Dict field \"values\" changed size during iteration");
7575 goto failed;
7576 }
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07007577 asdl_seq_SET(values, i, val);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007578 }
Victor Stinner1acc1292013-07-27 00:03:47 +02007579 Py_CLEAR(tmp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007580 }
Victor Stinnerd27f8d22021-04-07 21:34:22 +02007581 *out = _PyAST_Dict(keys, values, lineno, col_offset, end_lineno,
7582 end_col_offset, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007583 if (*out == NULL) goto failed;
7584 return 0;
7585 }
Victor Stinner74419f02020-07-03 11:35:37 +02007586 tp = state->Set_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07007587 isinstance = PyObject_IsInstance(obj, tp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007588 if (isinstance == -1) {
7589 return 1;
7590 }
7591 if (isinstance) {
Pablo Galindoa5634c42020-09-16 19:42:00 +01007592 asdl_expr_seq* elts;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007593
Victor Stinner74419f02020-07-03 11:35:37 +02007594 if (_PyObject_LookupAttr(obj, state->elts, &tmp) < 0) {
Serhiy Storchakaf320be72018-01-25 10:49:40 +02007595 return 1;
7596 }
7597 if (tmp == NULL) {
7598 PyErr_SetString(PyExc_TypeError, "required field \"elts\" missing from Set");
7599 return 1;
7600 }
7601 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007602 int res;
7603 Py_ssize_t len;
7604 Py_ssize_t i;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007605 if (!PyList_Check(tmp)) {
Dino Viehlandac46eb42019-09-11 10:16:34 -07007606 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 +02007607 goto failed;
7608 }
7609 len = PyList_GET_SIZE(tmp);
Pablo Galindoa5634c42020-09-16 19:42:00 +01007610 elts = _Py_asdl_expr_seq_new(len, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007611 if (elts == NULL) goto failed;
7612 for (i = 0; i < len; i++) {
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07007613 expr_ty val;
Serhiy Storchaka43c97312019-09-10 13:02:30 +03007614 PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
7615 Py_INCREF(tmp2);
Victor Stinner74419f02020-07-03 11:35:37 +02007616 res = obj2ast_expr(state, tmp2, &val, arena);
Serhiy Storchaka43c97312019-09-10 13:02:30 +03007617 Py_DECREF(tmp2);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007618 if (res != 0) goto failed;
Serhiy Storchakacf380602016-10-07 21:51:28 +03007619 if (len != PyList_GET_SIZE(tmp)) {
7620 PyErr_SetString(PyExc_RuntimeError, "Set field \"elts\" changed size during iteration");
7621 goto failed;
7622 }
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07007623 asdl_seq_SET(elts, i, val);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007624 }
Victor Stinner1acc1292013-07-27 00:03:47 +02007625 Py_CLEAR(tmp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007626 }
Victor Stinnerd27f8d22021-04-07 21:34:22 +02007627 *out = _PyAST_Set(elts, lineno, col_offset, end_lineno, end_col_offset,
7628 arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007629 if (*out == NULL) goto failed;
7630 return 0;
7631 }
Victor Stinner74419f02020-07-03 11:35:37 +02007632 tp = state->ListComp_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07007633 isinstance = PyObject_IsInstance(obj, tp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007634 if (isinstance == -1) {
7635 return 1;
7636 }
7637 if (isinstance) {
7638 expr_ty elt;
Pablo Galindoa5634c42020-09-16 19:42:00 +01007639 asdl_comprehension_seq* generators;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007640
Victor Stinner74419f02020-07-03 11:35:37 +02007641 if (_PyObject_LookupAttr(obj, state->elt, &tmp) < 0) {
Serhiy Storchakaf320be72018-01-25 10:49:40 +02007642 return 1;
7643 }
7644 if (tmp == NULL) {
7645 PyErr_SetString(PyExc_TypeError, "required field \"elt\" missing from ListComp");
7646 return 1;
7647 }
7648 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007649 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02007650 res = obj2ast_expr(state, tmp, &elt, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007651 if (res != 0) goto failed;
Victor Stinner1acc1292013-07-27 00:03:47 +02007652 Py_CLEAR(tmp);
Serhiy Storchakaf320be72018-01-25 10:49:40 +02007653 }
Victor Stinner74419f02020-07-03 11:35:37 +02007654 if (_PyObject_LookupAttr(obj, state->generators, &tmp) < 0) {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007655 return 1;
7656 }
Serhiy Storchakaf320be72018-01-25 10:49:40 +02007657 if (tmp == NULL) {
7658 PyErr_SetString(PyExc_TypeError, "required field \"generators\" missing from ListComp");
7659 return 1;
7660 }
7661 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007662 int res;
7663 Py_ssize_t len;
7664 Py_ssize_t i;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007665 if (!PyList_Check(tmp)) {
Dino Viehlandac46eb42019-09-11 10:16:34 -07007666 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 +02007667 goto failed;
7668 }
7669 len = PyList_GET_SIZE(tmp);
Pablo Galindoa5634c42020-09-16 19:42:00 +01007670 generators = _Py_asdl_comprehension_seq_new(len, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007671 if (generators == NULL) goto failed;
7672 for (i = 0; i < len; i++) {
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07007673 comprehension_ty val;
Serhiy Storchaka43c97312019-09-10 13:02:30 +03007674 PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
7675 Py_INCREF(tmp2);
Victor Stinner74419f02020-07-03 11:35:37 +02007676 res = obj2ast_comprehension(state, tmp2, &val, arena);
Serhiy Storchaka43c97312019-09-10 13:02:30 +03007677 Py_DECREF(tmp2);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007678 if (res != 0) goto failed;
Serhiy Storchakacf380602016-10-07 21:51:28 +03007679 if (len != PyList_GET_SIZE(tmp)) {
7680 PyErr_SetString(PyExc_RuntimeError, "ListComp field \"generators\" changed size during iteration");
7681 goto failed;
7682 }
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07007683 asdl_seq_SET(generators, i, val);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007684 }
Victor Stinner1acc1292013-07-27 00:03:47 +02007685 Py_CLEAR(tmp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007686 }
Victor Stinnerd27f8d22021-04-07 21:34:22 +02007687 *out = _PyAST_ListComp(elt, generators, lineno, col_offset, end_lineno,
7688 end_col_offset, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007689 if (*out == NULL) goto failed;
7690 return 0;
7691 }
Victor Stinner74419f02020-07-03 11:35:37 +02007692 tp = state->SetComp_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07007693 isinstance = PyObject_IsInstance(obj, tp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007694 if (isinstance == -1) {
7695 return 1;
7696 }
7697 if (isinstance) {
7698 expr_ty elt;
Pablo Galindoa5634c42020-09-16 19:42:00 +01007699 asdl_comprehension_seq* generators;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007700
Victor Stinner74419f02020-07-03 11:35:37 +02007701 if (_PyObject_LookupAttr(obj, state->elt, &tmp) < 0) {
Serhiy Storchakaf320be72018-01-25 10:49:40 +02007702 return 1;
7703 }
7704 if (tmp == NULL) {
7705 PyErr_SetString(PyExc_TypeError, "required field \"elt\" missing from SetComp");
7706 return 1;
7707 }
7708 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007709 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02007710 res = obj2ast_expr(state, tmp, &elt, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007711 if (res != 0) goto failed;
Victor Stinner1acc1292013-07-27 00:03:47 +02007712 Py_CLEAR(tmp);
Serhiy Storchakaf320be72018-01-25 10:49:40 +02007713 }
Victor Stinner74419f02020-07-03 11:35:37 +02007714 if (_PyObject_LookupAttr(obj, state->generators, &tmp) < 0) {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007715 return 1;
7716 }
Serhiy Storchakaf320be72018-01-25 10:49:40 +02007717 if (tmp == NULL) {
7718 PyErr_SetString(PyExc_TypeError, "required field \"generators\" missing from SetComp");
7719 return 1;
7720 }
7721 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007722 int res;
7723 Py_ssize_t len;
7724 Py_ssize_t i;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007725 if (!PyList_Check(tmp)) {
Dino Viehlandac46eb42019-09-11 10:16:34 -07007726 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 +02007727 goto failed;
7728 }
7729 len = PyList_GET_SIZE(tmp);
Pablo Galindoa5634c42020-09-16 19:42:00 +01007730 generators = _Py_asdl_comprehension_seq_new(len, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007731 if (generators == NULL) goto failed;
7732 for (i = 0; i < len; i++) {
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07007733 comprehension_ty val;
Serhiy Storchaka43c97312019-09-10 13:02:30 +03007734 PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
7735 Py_INCREF(tmp2);
Victor Stinner74419f02020-07-03 11:35:37 +02007736 res = obj2ast_comprehension(state, tmp2, &val, arena);
Serhiy Storchaka43c97312019-09-10 13:02:30 +03007737 Py_DECREF(tmp2);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007738 if (res != 0) goto failed;
Serhiy Storchakacf380602016-10-07 21:51:28 +03007739 if (len != PyList_GET_SIZE(tmp)) {
7740 PyErr_SetString(PyExc_RuntimeError, "SetComp field \"generators\" changed size during iteration");
7741 goto failed;
7742 }
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07007743 asdl_seq_SET(generators, i, val);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007744 }
Victor Stinner1acc1292013-07-27 00:03:47 +02007745 Py_CLEAR(tmp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007746 }
Victor Stinnerd27f8d22021-04-07 21:34:22 +02007747 *out = _PyAST_SetComp(elt, generators, lineno, col_offset, end_lineno,
7748 end_col_offset, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007749 if (*out == NULL) goto failed;
7750 return 0;
7751 }
Victor Stinner74419f02020-07-03 11:35:37 +02007752 tp = state->DictComp_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07007753 isinstance = PyObject_IsInstance(obj, tp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007754 if (isinstance == -1) {
7755 return 1;
7756 }
7757 if (isinstance) {
7758 expr_ty key;
7759 expr_ty value;
Pablo Galindoa5634c42020-09-16 19:42:00 +01007760 asdl_comprehension_seq* generators;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007761
Victor Stinner74419f02020-07-03 11:35:37 +02007762 if (_PyObject_LookupAttr(obj, state->key, &tmp) < 0) {
Serhiy Storchakaf320be72018-01-25 10:49:40 +02007763 return 1;
7764 }
7765 if (tmp == NULL) {
7766 PyErr_SetString(PyExc_TypeError, "required field \"key\" missing from DictComp");
7767 return 1;
7768 }
7769 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007770 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02007771 res = obj2ast_expr(state, tmp, &key, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007772 if (res != 0) goto failed;
Victor Stinner1acc1292013-07-27 00:03:47 +02007773 Py_CLEAR(tmp);
Serhiy Storchakaf320be72018-01-25 10:49:40 +02007774 }
Victor Stinner74419f02020-07-03 11:35:37 +02007775 if (_PyObject_LookupAttr(obj, state->value, &tmp) < 0) {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007776 return 1;
7777 }
Serhiy Storchakaf320be72018-01-25 10:49:40 +02007778 if (tmp == NULL) {
7779 PyErr_SetString(PyExc_TypeError, "required field \"value\" missing from DictComp");
7780 return 1;
7781 }
7782 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007783 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02007784 res = obj2ast_expr(state, tmp, &value, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007785 if (res != 0) goto failed;
Victor Stinner1acc1292013-07-27 00:03:47 +02007786 Py_CLEAR(tmp);
Serhiy Storchakaf320be72018-01-25 10:49:40 +02007787 }
Victor Stinner74419f02020-07-03 11:35:37 +02007788 if (_PyObject_LookupAttr(obj, state->generators, &tmp) < 0) {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007789 return 1;
7790 }
Serhiy Storchakaf320be72018-01-25 10:49:40 +02007791 if (tmp == NULL) {
7792 PyErr_SetString(PyExc_TypeError, "required field \"generators\" missing from DictComp");
7793 return 1;
7794 }
7795 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007796 int res;
7797 Py_ssize_t len;
7798 Py_ssize_t i;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007799 if (!PyList_Check(tmp)) {
Dino Viehlandac46eb42019-09-11 10:16:34 -07007800 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 +02007801 goto failed;
7802 }
7803 len = PyList_GET_SIZE(tmp);
Pablo Galindoa5634c42020-09-16 19:42:00 +01007804 generators = _Py_asdl_comprehension_seq_new(len, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007805 if (generators == NULL) goto failed;
7806 for (i = 0; i < len; i++) {
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07007807 comprehension_ty val;
Serhiy Storchaka43c97312019-09-10 13:02:30 +03007808 PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
7809 Py_INCREF(tmp2);
Victor Stinner74419f02020-07-03 11:35:37 +02007810 res = obj2ast_comprehension(state, tmp2, &val, arena);
Serhiy Storchaka43c97312019-09-10 13:02:30 +03007811 Py_DECREF(tmp2);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007812 if (res != 0) goto failed;
Serhiy Storchakacf380602016-10-07 21:51:28 +03007813 if (len != PyList_GET_SIZE(tmp)) {
7814 PyErr_SetString(PyExc_RuntimeError, "DictComp field \"generators\" changed size during iteration");
7815 goto failed;
7816 }
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07007817 asdl_seq_SET(generators, i, val);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007818 }
Victor Stinner1acc1292013-07-27 00:03:47 +02007819 Py_CLEAR(tmp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007820 }
Victor Stinnerd27f8d22021-04-07 21:34:22 +02007821 *out = _PyAST_DictComp(key, value, generators, lineno, col_offset,
7822 end_lineno, end_col_offset, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007823 if (*out == NULL) goto failed;
7824 return 0;
7825 }
Victor Stinner74419f02020-07-03 11:35:37 +02007826 tp = state->GeneratorExp_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07007827 isinstance = PyObject_IsInstance(obj, tp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007828 if (isinstance == -1) {
7829 return 1;
7830 }
7831 if (isinstance) {
7832 expr_ty elt;
Pablo Galindoa5634c42020-09-16 19:42:00 +01007833 asdl_comprehension_seq* generators;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007834
Victor Stinner74419f02020-07-03 11:35:37 +02007835 if (_PyObject_LookupAttr(obj, state->elt, &tmp) < 0) {
Serhiy Storchakaf320be72018-01-25 10:49:40 +02007836 return 1;
7837 }
7838 if (tmp == NULL) {
7839 PyErr_SetString(PyExc_TypeError, "required field \"elt\" missing from GeneratorExp");
7840 return 1;
7841 }
7842 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007843 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02007844 res = obj2ast_expr(state, tmp, &elt, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007845 if (res != 0) goto failed;
Victor Stinner1acc1292013-07-27 00:03:47 +02007846 Py_CLEAR(tmp);
Serhiy Storchakaf320be72018-01-25 10:49:40 +02007847 }
Victor Stinner74419f02020-07-03 11:35:37 +02007848 if (_PyObject_LookupAttr(obj, state->generators, &tmp) < 0) {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007849 return 1;
7850 }
Serhiy Storchakaf320be72018-01-25 10:49:40 +02007851 if (tmp == NULL) {
7852 PyErr_SetString(PyExc_TypeError, "required field \"generators\" missing from GeneratorExp");
7853 return 1;
7854 }
7855 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007856 int res;
7857 Py_ssize_t len;
7858 Py_ssize_t i;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007859 if (!PyList_Check(tmp)) {
Dino Viehlandac46eb42019-09-11 10:16:34 -07007860 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 +02007861 goto failed;
7862 }
7863 len = PyList_GET_SIZE(tmp);
Pablo Galindoa5634c42020-09-16 19:42:00 +01007864 generators = _Py_asdl_comprehension_seq_new(len, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007865 if (generators == NULL) goto failed;
7866 for (i = 0; i < len; i++) {
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07007867 comprehension_ty val;
Serhiy Storchaka43c97312019-09-10 13:02:30 +03007868 PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
7869 Py_INCREF(tmp2);
Victor Stinner74419f02020-07-03 11:35:37 +02007870 res = obj2ast_comprehension(state, tmp2, &val, arena);
Serhiy Storchaka43c97312019-09-10 13:02:30 +03007871 Py_DECREF(tmp2);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007872 if (res != 0) goto failed;
Serhiy Storchakacf380602016-10-07 21:51:28 +03007873 if (len != PyList_GET_SIZE(tmp)) {
7874 PyErr_SetString(PyExc_RuntimeError, "GeneratorExp field \"generators\" changed size during iteration");
7875 goto failed;
7876 }
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07007877 asdl_seq_SET(generators, i, val);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007878 }
Victor Stinner1acc1292013-07-27 00:03:47 +02007879 Py_CLEAR(tmp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007880 }
Victor Stinnerd27f8d22021-04-07 21:34:22 +02007881 *out = _PyAST_GeneratorExp(elt, generators, lineno, col_offset,
7882 end_lineno, end_col_offset, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007883 if (*out == NULL) goto failed;
7884 return 0;
7885 }
Victor Stinner74419f02020-07-03 11:35:37 +02007886 tp = state->Await_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07007887 isinstance = PyObject_IsInstance(obj, tp);
Yury Selivanov75445082015-05-11 22:57:16 -04007888 if (isinstance == -1) {
7889 return 1;
7890 }
7891 if (isinstance) {
7892 expr_ty value;
7893
Victor Stinner74419f02020-07-03 11:35:37 +02007894 if (_PyObject_LookupAttr(obj, state->value, &tmp) < 0) {
Serhiy Storchakaf320be72018-01-25 10:49:40 +02007895 return 1;
7896 }
7897 if (tmp == NULL) {
7898 PyErr_SetString(PyExc_TypeError, "required field \"value\" missing from Await");
7899 return 1;
7900 }
7901 else {
Yury Selivanov75445082015-05-11 22:57:16 -04007902 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02007903 res = obj2ast_expr(state, tmp, &value, arena);
Yury Selivanov75445082015-05-11 22:57:16 -04007904 if (res != 0) goto failed;
7905 Py_CLEAR(tmp);
Yury Selivanov75445082015-05-11 22:57:16 -04007906 }
Victor Stinnerd27f8d22021-04-07 21:34:22 +02007907 *out = _PyAST_Await(value, lineno, col_offset, end_lineno,
7908 end_col_offset, arena);
Yury Selivanov75445082015-05-11 22:57:16 -04007909 if (*out == NULL) goto failed;
7910 return 0;
7911 }
Victor Stinner74419f02020-07-03 11:35:37 +02007912 tp = state->Yield_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07007913 isinstance = PyObject_IsInstance(obj, tp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007914 if (isinstance == -1) {
7915 return 1;
7916 }
7917 if (isinstance) {
7918 expr_ty value;
7919
Victor Stinner74419f02020-07-03 11:35:37 +02007920 if (_PyObject_LookupAttr(obj, state->value, &tmp) < 0) {
Serhiy Storchakaf320be72018-01-25 10:49:40 +02007921 return 1;
7922 }
7923 if (tmp == NULL || tmp == Py_None) {
7924 Py_CLEAR(tmp);
7925 value = NULL;
7926 }
7927 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007928 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02007929 res = obj2ast_expr(state, tmp, &value, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007930 if (res != 0) goto failed;
Victor Stinner1acc1292013-07-27 00:03:47 +02007931 Py_CLEAR(tmp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007932 }
Victor Stinnerd27f8d22021-04-07 21:34:22 +02007933 *out = _PyAST_Yield(value, lineno, col_offset, end_lineno,
7934 end_col_offset, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007935 if (*out == NULL) goto failed;
7936 return 0;
7937 }
Victor Stinner74419f02020-07-03 11:35:37 +02007938 tp = state->YieldFrom_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07007939 isinstance = PyObject_IsInstance(obj, tp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007940 if (isinstance == -1) {
7941 return 1;
7942 }
7943 if (isinstance) {
7944 expr_ty value;
7945
Victor Stinner74419f02020-07-03 11:35:37 +02007946 if (_PyObject_LookupAttr(obj, state->value, &tmp) < 0) {
Serhiy Storchakaf320be72018-01-25 10:49:40 +02007947 return 1;
7948 }
7949 if (tmp == NULL) {
7950 PyErr_SetString(PyExc_TypeError, "required field \"value\" missing from YieldFrom");
7951 return 1;
7952 }
7953 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007954 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02007955 res = obj2ast_expr(state, tmp, &value, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007956 if (res != 0) goto failed;
Victor Stinner1acc1292013-07-27 00:03:47 +02007957 Py_CLEAR(tmp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007958 }
Victor Stinnerd27f8d22021-04-07 21:34:22 +02007959 *out = _PyAST_YieldFrom(value, lineno, col_offset, end_lineno,
7960 end_col_offset, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007961 if (*out == NULL) goto failed;
7962 return 0;
7963 }
Victor Stinner74419f02020-07-03 11:35:37 +02007964 tp = state->Compare_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07007965 isinstance = PyObject_IsInstance(obj, tp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007966 if (isinstance == -1) {
7967 return 1;
7968 }
7969 if (isinstance) {
7970 expr_ty left;
7971 asdl_int_seq* ops;
Pablo Galindoa5634c42020-09-16 19:42:00 +01007972 asdl_expr_seq* comparators;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007973
Victor Stinner74419f02020-07-03 11:35:37 +02007974 if (_PyObject_LookupAttr(obj, state->left, &tmp) < 0) {
Serhiy Storchakaf320be72018-01-25 10:49:40 +02007975 return 1;
7976 }
7977 if (tmp == NULL) {
7978 PyErr_SetString(PyExc_TypeError, "required field \"left\" missing from Compare");
7979 return 1;
7980 }
7981 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007982 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02007983 res = obj2ast_expr(state, tmp, &left, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007984 if (res != 0) goto failed;
Victor Stinner1acc1292013-07-27 00:03:47 +02007985 Py_CLEAR(tmp);
Serhiy Storchakaf320be72018-01-25 10:49:40 +02007986 }
Victor Stinner74419f02020-07-03 11:35:37 +02007987 if (_PyObject_LookupAttr(obj, state->ops, &tmp) < 0) {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007988 return 1;
7989 }
Serhiy Storchakaf320be72018-01-25 10:49:40 +02007990 if (tmp == NULL) {
7991 PyErr_SetString(PyExc_TypeError, "required field \"ops\" missing from Compare");
7992 return 1;
7993 }
7994 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007995 int res;
7996 Py_ssize_t len;
7997 Py_ssize_t i;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007998 if (!PyList_Check(tmp)) {
Dino Viehlandac46eb42019-09-11 10:16:34 -07007999 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 +02008000 goto failed;
8001 }
8002 len = PyList_GET_SIZE(tmp);
Antoine Pitroud01d396e2013-10-12 22:52:43 +02008003 ops = _Py_asdl_int_seq_new(len, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008004 if (ops == NULL) goto failed;
8005 for (i = 0; i < len; i++) {
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07008006 cmpop_ty val;
Serhiy Storchaka43c97312019-09-10 13:02:30 +03008007 PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
8008 Py_INCREF(tmp2);
Victor Stinner74419f02020-07-03 11:35:37 +02008009 res = obj2ast_cmpop(state, tmp2, &val, arena);
Serhiy Storchaka43c97312019-09-10 13:02:30 +03008010 Py_DECREF(tmp2);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008011 if (res != 0) goto failed;
Serhiy Storchakacf380602016-10-07 21:51:28 +03008012 if (len != PyList_GET_SIZE(tmp)) {
8013 PyErr_SetString(PyExc_RuntimeError, "Compare field \"ops\" changed size during iteration");
8014 goto failed;
8015 }
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07008016 asdl_seq_SET(ops, i, val);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008017 }
Victor Stinner1acc1292013-07-27 00:03:47 +02008018 Py_CLEAR(tmp);
Serhiy Storchakaf320be72018-01-25 10:49:40 +02008019 }
Victor Stinner74419f02020-07-03 11:35:37 +02008020 if (_PyObject_LookupAttr(obj, state->comparators, &tmp) < 0) {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008021 return 1;
8022 }
Serhiy Storchakaf320be72018-01-25 10:49:40 +02008023 if (tmp == NULL) {
8024 PyErr_SetString(PyExc_TypeError, "required field \"comparators\" missing from Compare");
8025 return 1;
8026 }
8027 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008028 int res;
8029 Py_ssize_t len;
8030 Py_ssize_t i;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008031 if (!PyList_Check(tmp)) {
Dino Viehlandac46eb42019-09-11 10:16:34 -07008032 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 +02008033 goto failed;
8034 }
8035 len = PyList_GET_SIZE(tmp);
Pablo Galindoa5634c42020-09-16 19:42:00 +01008036 comparators = _Py_asdl_expr_seq_new(len, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008037 if (comparators == NULL) goto failed;
8038 for (i = 0; i < len; i++) {
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07008039 expr_ty val;
Serhiy Storchaka43c97312019-09-10 13:02:30 +03008040 PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
8041 Py_INCREF(tmp2);
Victor Stinner74419f02020-07-03 11:35:37 +02008042 res = obj2ast_expr(state, tmp2, &val, arena);
Serhiy Storchaka43c97312019-09-10 13:02:30 +03008043 Py_DECREF(tmp2);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008044 if (res != 0) goto failed;
Serhiy Storchakacf380602016-10-07 21:51:28 +03008045 if (len != PyList_GET_SIZE(tmp)) {
8046 PyErr_SetString(PyExc_RuntimeError, "Compare field \"comparators\" changed size during iteration");
8047 goto failed;
8048 }
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07008049 asdl_seq_SET(comparators, i, val);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008050 }
Victor Stinner1acc1292013-07-27 00:03:47 +02008051 Py_CLEAR(tmp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008052 }
Victor Stinnerd27f8d22021-04-07 21:34:22 +02008053 *out = _PyAST_Compare(left, ops, comparators, lineno, col_offset,
8054 end_lineno, end_col_offset, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008055 if (*out == NULL) goto failed;
8056 return 0;
8057 }
Victor Stinner74419f02020-07-03 11:35:37 +02008058 tp = state->Call_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07008059 isinstance = PyObject_IsInstance(obj, tp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008060 if (isinstance == -1) {
8061 return 1;
8062 }
8063 if (isinstance) {
8064 expr_ty func;
Pablo Galindoa5634c42020-09-16 19:42:00 +01008065 asdl_expr_seq* args;
8066 asdl_keyword_seq* keywords;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008067
Victor Stinner74419f02020-07-03 11:35:37 +02008068 if (_PyObject_LookupAttr(obj, state->func, &tmp) < 0) {
Serhiy Storchakaf320be72018-01-25 10:49:40 +02008069 return 1;
8070 }
8071 if (tmp == NULL) {
8072 PyErr_SetString(PyExc_TypeError, "required field \"func\" missing from Call");
8073 return 1;
8074 }
8075 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008076 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02008077 res = obj2ast_expr(state, tmp, &func, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008078 if (res != 0) goto failed;
Victor Stinner1acc1292013-07-27 00:03:47 +02008079 Py_CLEAR(tmp);
Serhiy Storchakaf320be72018-01-25 10:49:40 +02008080 }
Victor Stinner74419f02020-07-03 11:35:37 +02008081 if (_PyObject_LookupAttr(obj, state->args, &tmp) < 0) {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008082 return 1;
8083 }
Serhiy Storchakaf320be72018-01-25 10:49:40 +02008084 if (tmp == NULL) {
8085 PyErr_SetString(PyExc_TypeError, "required field \"args\" missing from Call");
8086 return 1;
8087 }
8088 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008089 int res;
8090 Py_ssize_t len;
8091 Py_ssize_t i;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008092 if (!PyList_Check(tmp)) {
Dino Viehlandac46eb42019-09-11 10:16:34 -07008093 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 +02008094 goto failed;
8095 }
8096 len = PyList_GET_SIZE(tmp);
Pablo Galindoa5634c42020-09-16 19:42:00 +01008097 args = _Py_asdl_expr_seq_new(len, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008098 if (args == NULL) goto failed;
8099 for (i = 0; i < len; i++) {
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07008100 expr_ty val;
Serhiy Storchaka43c97312019-09-10 13:02:30 +03008101 PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
8102 Py_INCREF(tmp2);
Victor Stinner74419f02020-07-03 11:35:37 +02008103 res = obj2ast_expr(state, tmp2, &val, arena);
Serhiy Storchaka43c97312019-09-10 13:02:30 +03008104 Py_DECREF(tmp2);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008105 if (res != 0) goto failed;
Serhiy Storchakacf380602016-10-07 21:51:28 +03008106 if (len != PyList_GET_SIZE(tmp)) {
8107 PyErr_SetString(PyExc_RuntimeError, "Call field \"args\" changed size during iteration");
8108 goto failed;
8109 }
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07008110 asdl_seq_SET(args, i, val);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008111 }
Victor Stinner1acc1292013-07-27 00:03:47 +02008112 Py_CLEAR(tmp);
Serhiy Storchakaf320be72018-01-25 10:49:40 +02008113 }
Victor Stinner74419f02020-07-03 11:35:37 +02008114 if (_PyObject_LookupAttr(obj, state->keywords, &tmp) < 0) {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008115 return 1;
8116 }
Serhiy Storchakaf320be72018-01-25 10:49:40 +02008117 if (tmp == NULL) {
8118 PyErr_SetString(PyExc_TypeError, "required field \"keywords\" missing from Call");
8119 return 1;
8120 }
8121 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008122 int res;
8123 Py_ssize_t len;
8124 Py_ssize_t i;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008125 if (!PyList_Check(tmp)) {
Dino Viehlandac46eb42019-09-11 10:16:34 -07008126 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 +02008127 goto failed;
8128 }
8129 len = PyList_GET_SIZE(tmp);
Pablo Galindoa5634c42020-09-16 19:42:00 +01008130 keywords = _Py_asdl_keyword_seq_new(len, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008131 if (keywords == NULL) goto failed;
8132 for (i = 0; i < len; i++) {
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07008133 keyword_ty val;
Serhiy Storchaka43c97312019-09-10 13:02:30 +03008134 PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
8135 Py_INCREF(tmp2);
Victor Stinner74419f02020-07-03 11:35:37 +02008136 res = obj2ast_keyword(state, tmp2, &val, arena);
Serhiy Storchaka43c97312019-09-10 13:02:30 +03008137 Py_DECREF(tmp2);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008138 if (res != 0) goto failed;
Serhiy Storchakacf380602016-10-07 21:51:28 +03008139 if (len != PyList_GET_SIZE(tmp)) {
8140 PyErr_SetString(PyExc_RuntimeError, "Call field \"keywords\" changed size during iteration");
8141 goto failed;
8142 }
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07008143 asdl_seq_SET(keywords, i, val);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008144 }
Victor Stinner1acc1292013-07-27 00:03:47 +02008145 Py_CLEAR(tmp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008146 }
Victor Stinnerd27f8d22021-04-07 21:34:22 +02008147 *out = _PyAST_Call(func, args, keywords, lineno, col_offset,
8148 end_lineno, end_col_offset, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008149 if (*out == NULL) goto failed;
8150 return 0;
8151 }
Victor Stinner74419f02020-07-03 11:35:37 +02008152 tp = state->FormattedValue_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07008153 isinstance = PyObject_IsInstance(obj, tp);
Eric V. Smith235a6f02015-09-19 14:51:32 -04008154 if (isinstance == -1) {
8155 return 1;
8156 }
8157 if (isinstance) {
8158 expr_ty value;
8159 int conversion;
8160 expr_ty format_spec;
8161
Victor Stinner74419f02020-07-03 11:35:37 +02008162 if (_PyObject_LookupAttr(obj, state->value, &tmp) < 0) {
Serhiy Storchakaf320be72018-01-25 10:49:40 +02008163 return 1;
8164 }
8165 if (tmp == NULL) {
8166 PyErr_SetString(PyExc_TypeError, "required field \"value\" missing from FormattedValue");
8167 return 1;
8168 }
8169 else {
Eric V. Smith235a6f02015-09-19 14:51:32 -04008170 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02008171 res = obj2ast_expr(state, tmp, &value, arena);
Eric V. Smith235a6f02015-09-19 14:51:32 -04008172 if (res != 0) goto failed;
8173 Py_CLEAR(tmp);
Serhiy Storchakaf320be72018-01-25 10:49:40 +02008174 }
Victor Stinner74419f02020-07-03 11:35:37 +02008175 if (_PyObject_LookupAttr(obj, state->conversion, &tmp) < 0) {
Eric V. Smith235a6f02015-09-19 14:51:32 -04008176 return 1;
8177 }
Serhiy Storchakaf320be72018-01-25 10:49:40 +02008178 if (tmp == NULL || tmp == Py_None) {
8179 Py_CLEAR(tmp);
8180 conversion = 0;
8181 }
8182 else {
Eric V. Smith235a6f02015-09-19 14:51:32 -04008183 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02008184 res = obj2ast_int(state, tmp, &conversion, arena);
Eric V. Smith235a6f02015-09-19 14:51:32 -04008185 if (res != 0) goto failed;
8186 Py_CLEAR(tmp);
Eric V. Smith235a6f02015-09-19 14:51:32 -04008187 }
Victor Stinner74419f02020-07-03 11:35:37 +02008188 if (_PyObject_LookupAttr(obj, state->format_spec, &tmp) < 0) {
Serhiy Storchakaf320be72018-01-25 10:49:40 +02008189 return 1;
8190 }
8191 if (tmp == NULL || tmp == Py_None) {
8192 Py_CLEAR(tmp);
8193 format_spec = NULL;
8194 }
8195 else {
Eric V. Smith235a6f02015-09-19 14:51:32 -04008196 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02008197 res = obj2ast_expr(state, tmp, &format_spec, arena);
Eric V. Smith235a6f02015-09-19 14:51:32 -04008198 if (res != 0) goto failed;
8199 Py_CLEAR(tmp);
Eric V. Smith235a6f02015-09-19 14:51:32 -04008200 }
Victor Stinnerd27f8d22021-04-07 21:34:22 +02008201 *out = _PyAST_FormattedValue(value, conversion, format_spec, lineno,
8202 col_offset, end_lineno, end_col_offset,
8203 arena);
Eric V. Smith235a6f02015-09-19 14:51:32 -04008204 if (*out == NULL) goto failed;
8205 return 0;
8206 }
Victor Stinner74419f02020-07-03 11:35:37 +02008207 tp = state->JoinedStr_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07008208 isinstance = PyObject_IsInstance(obj, tp);
Eric V. Smith235a6f02015-09-19 14:51:32 -04008209 if (isinstance == -1) {
8210 return 1;
8211 }
8212 if (isinstance) {
Pablo Galindoa5634c42020-09-16 19:42:00 +01008213 asdl_expr_seq* values;
Eric V. Smith235a6f02015-09-19 14:51:32 -04008214
Victor Stinner74419f02020-07-03 11:35:37 +02008215 if (_PyObject_LookupAttr(obj, state->values, &tmp) < 0) {
Serhiy Storchakaf320be72018-01-25 10:49:40 +02008216 return 1;
8217 }
8218 if (tmp == NULL) {
8219 PyErr_SetString(PyExc_TypeError, "required field \"values\" missing from JoinedStr");
8220 return 1;
8221 }
8222 else {
Eric V. Smith235a6f02015-09-19 14:51:32 -04008223 int res;
8224 Py_ssize_t len;
8225 Py_ssize_t i;
Eric V. Smith235a6f02015-09-19 14:51:32 -04008226 if (!PyList_Check(tmp)) {
Dino Viehlandac46eb42019-09-11 10:16:34 -07008227 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 -04008228 goto failed;
8229 }
8230 len = PyList_GET_SIZE(tmp);
Pablo Galindoa5634c42020-09-16 19:42:00 +01008231 values = _Py_asdl_expr_seq_new(len, arena);
Eric V. Smith235a6f02015-09-19 14:51:32 -04008232 if (values == NULL) goto failed;
8233 for (i = 0; i < len; i++) {
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07008234 expr_ty val;
Serhiy Storchaka43c97312019-09-10 13:02:30 +03008235 PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
8236 Py_INCREF(tmp2);
Victor Stinner74419f02020-07-03 11:35:37 +02008237 res = obj2ast_expr(state, tmp2, &val, arena);
Serhiy Storchaka43c97312019-09-10 13:02:30 +03008238 Py_DECREF(tmp2);
Eric V. Smith235a6f02015-09-19 14:51:32 -04008239 if (res != 0) goto failed;
Serhiy Storchaka5e808552016-10-07 21:55:49 +03008240 if (len != PyList_GET_SIZE(tmp)) {
8241 PyErr_SetString(PyExc_RuntimeError, "JoinedStr field \"values\" changed size during iteration");
8242 goto failed;
8243 }
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07008244 asdl_seq_SET(values, i, val);
Eric V. Smith235a6f02015-09-19 14:51:32 -04008245 }
8246 Py_CLEAR(tmp);
Eric V. Smith235a6f02015-09-19 14:51:32 -04008247 }
Victor Stinnerd27f8d22021-04-07 21:34:22 +02008248 *out = _PyAST_JoinedStr(values, lineno, col_offset, end_lineno,
8249 end_col_offset, arena);
Eric V. Smith235a6f02015-09-19 14:51:32 -04008250 if (*out == NULL) goto failed;
8251 return 0;
8252 }
Victor Stinner74419f02020-07-03 11:35:37 +02008253 tp = state->Constant_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07008254 isinstance = PyObject_IsInstance(obj, tp);
Victor Stinnerf2c1aa12016-01-26 00:40:57 +01008255 if (isinstance == -1) {
8256 return 1;
8257 }
8258 if (isinstance) {
8259 constant value;
Guido van Rossum10f8ce62019-03-13 13:00:46 -07008260 string kind;
Victor Stinnerf2c1aa12016-01-26 00:40:57 +01008261
Victor Stinner74419f02020-07-03 11:35:37 +02008262 if (_PyObject_LookupAttr(obj, state->value, &tmp) < 0) {
Serhiy Storchakaf320be72018-01-25 10:49:40 +02008263 return 1;
8264 }
8265 if (tmp == NULL) {
8266 PyErr_SetString(PyExc_TypeError, "required field \"value\" missing from Constant");
8267 return 1;
8268 }
8269 else {
Victor Stinnerf2c1aa12016-01-26 00:40:57 +01008270 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02008271 res = obj2ast_constant(state, tmp, &value, arena);
Victor Stinnerf2c1aa12016-01-26 00:40:57 +01008272 if (res != 0) goto failed;
8273 Py_CLEAR(tmp);
Victor Stinnerf2c1aa12016-01-26 00:40:57 +01008274 }
Victor Stinner74419f02020-07-03 11:35:37 +02008275 if (_PyObject_LookupAttr(obj, state->kind, &tmp) < 0) {
Guido van Rossum10f8ce62019-03-13 13:00:46 -07008276 return 1;
8277 }
8278 if (tmp == NULL || tmp == Py_None) {
8279 Py_CLEAR(tmp);
8280 kind = NULL;
8281 }
8282 else {
8283 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02008284 res = obj2ast_string(state, tmp, &kind, arena);
Guido van Rossum10f8ce62019-03-13 13:00:46 -07008285 if (res != 0) goto failed;
8286 Py_CLEAR(tmp);
8287 }
Victor Stinnerd27f8d22021-04-07 21:34:22 +02008288 *out = _PyAST_Constant(value, kind, lineno, col_offset, end_lineno,
8289 end_col_offset, arena);
Victor Stinnerf2c1aa12016-01-26 00:40:57 +01008290 if (*out == NULL) goto failed;
8291 return 0;
8292 }
Victor Stinner74419f02020-07-03 11:35:37 +02008293 tp = state->Attribute_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07008294 isinstance = PyObject_IsInstance(obj, tp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008295 if (isinstance == -1) {
8296 return 1;
8297 }
8298 if (isinstance) {
8299 expr_ty value;
8300 identifier attr;
8301 expr_context_ty ctx;
8302
Victor Stinner74419f02020-07-03 11:35:37 +02008303 if (_PyObject_LookupAttr(obj, state->value, &tmp) < 0) {
Serhiy Storchakaf320be72018-01-25 10:49:40 +02008304 return 1;
8305 }
8306 if (tmp == NULL) {
8307 PyErr_SetString(PyExc_TypeError, "required field \"value\" missing from Attribute");
8308 return 1;
8309 }
8310 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008311 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02008312 res = obj2ast_expr(state, tmp, &value, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008313 if (res != 0) goto failed;
Victor Stinner1acc1292013-07-27 00:03:47 +02008314 Py_CLEAR(tmp);
Serhiy Storchakaf320be72018-01-25 10:49:40 +02008315 }
Victor Stinner74419f02020-07-03 11:35:37 +02008316 if (_PyObject_LookupAttr(obj, state->attr, &tmp) < 0) {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008317 return 1;
8318 }
Serhiy Storchakaf320be72018-01-25 10:49:40 +02008319 if (tmp == NULL) {
8320 PyErr_SetString(PyExc_TypeError, "required field \"attr\" missing from Attribute");
8321 return 1;
8322 }
8323 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008324 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02008325 res = obj2ast_identifier(state, tmp, &attr, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008326 if (res != 0) goto failed;
Victor Stinner1acc1292013-07-27 00:03:47 +02008327 Py_CLEAR(tmp);
Serhiy Storchakaf320be72018-01-25 10:49:40 +02008328 }
Victor Stinner74419f02020-07-03 11:35:37 +02008329 if (_PyObject_LookupAttr(obj, state->ctx, &tmp) < 0) {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008330 return 1;
8331 }
Serhiy Storchakaf320be72018-01-25 10:49:40 +02008332 if (tmp == NULL) {
8333 PyErr_SetString(PyExc_TypeError, "required field \"ctx\" missing from Attribute");
8334 return 1;
8335 }
8336 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008337 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02008338 res = obj2ast_expr_context(state, tmp, &ctx, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008339 if (res != 0) goto failed;
Victor Stinner1acc1292013-07-27 00:03:47 +02008340 Py_CLEAR(tmp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008341 }
Victor Stinnerd27f8d22021-04-07 21:34:22 +02008342 *out = _PyAST_Attribute(value, attr, ctx, lineno, col_offset,
8343 end_lineno, end_col_offset, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008344 if (*out == NULL) goto failed;
8345 return 0;
8346 }
Victor Stinner74419f02020-07-03 11:35:37 +02008347 tp = state->Subscript_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07008348 isinstance = PyObject_IsInstance(obj, tp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008349 if (isinstance == -1) {
8350 return 1;
8351 }
8352 if (isinstance) {
8353 expr_ty value;
Serhiy Storchaka13d52c22020-03-10 18:52:34 +02008354 expr_ty slice;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008355 expr_context_ty ctx;
8356
Victor Stinner74419f02020-07-03 11:35:37 +02008357 if (_PyObject_LookupAttr(obj, state->value, &tmp) < 0) {
Serhiy Storchakaf320be72018-01-25 10:49:40 +02008358 return 1;
8359 }
8360 if (tmp == NULL) {
8361 PyErr_SetString(PyExc_TypeError, "required field \"value\" missing from Subscript");
8362 return 1;
8363 }
8364 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008365 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02008366 res = obj2ast_expr(state, tmp, &value, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008367 if (res != 0) goto failed;
Victor Stinner1acc1292013-07-27 00:03:47 +02008368 Py_CLEAR(tmp);
Serhiy Storchakaf320be72018-01-25 10:49:40 +02008369 }
Victor Stinner74419f02020-07-03 11:35:37 +02008370 if (_PyObject_LookupAttr(obj, state->slice, &tmp) < 0) {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008371 return 1;
8372 }
Serhiy Storchakaf320be72018-01-25 10:49:40 +02008373 if (tmp == NULL) {
8374 PyErr_SetString(PyExc_TypeError, "required field \"slice\" missing from Subscript");
8375 return 1;
8376 }
8377 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008378 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02008379 res = obj2ast_expr(state, tmp, &slice, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008380 if (res != 0) goto failed;
Victor Stinner1acc1292013-07-27 00:03:47 +02008381 Py_CLEAR(tmp);
Serhiy Storchakaf320be72018-01-25 10:49:40 +02008382 }
Victor Stinner74419f02020-07-03 11:35:37 +02008383 if (_PyObject_LookupAttr(obj, state->ctx, &tmp) < 0) {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008384 return 1;
8385 }
Serhiy Storchakaf320be72018-01-25 10:49:40 +02008386 if (tmp == NULL) {
8387 PyErr_SetString(PyExc_TypeError, "required field \"ctx\" missing from Subscript");
8388 return 1;
8389 }
8390 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008391 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02008392 res = obj2ast_expr_context(state, tmp, &ctx, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008393 if (res != 0) goto failed;
Victor Stinner1acc1292013-07-27 00:03:47 +02008394 Py_CLEAR(tmp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008395 }
Victor Stinnerd27f8d22021-04-07 21:34:22 +02008396 *out = _PyAST_Subscript(value, slice, ctx, lineno, col_offset,
8397 end_lineno, end_col_offset, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008398 if (*out == NULL) goto failed;
8399 return 0;
8400 }
Victor Stinner74419f02020-07-03 11:35:37 +02008401 tp = state->Starred_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07008402 isinstance = PyObject_IsInstance(obj, tp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008403 if (isinstance == -1) {
8404 return 1;
8405 }
8406 if (isinstance) {
8407 expr_ty value;
8408 expr_context_ty ctx;
8409
Victor Stinner74419f02020-07-03 11:35:37 +02008410 if (_PyObject_LookupAttr(obj, state->value, &tmp) < 0) {
Serhiy Storchakaf320be72018-01-25 10:49:40 +02008411 return 1;
8412 }
8413 if (tmp == NULL) {
8414 PyErr_SetString(PyExc_TypeError, "required field \"value\" missing from Starred");
8415 return 1;
8416 }
8417 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008418 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02008419 res = obj2ast_expr(state, tmp, &value, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008420 if (res != 0) goto failed;
Victor Stinner1acc1292013-07-27 00:03:47 +02008421 Py_CLEAR(tmp);
Serhiy Storchakaf320be72018-01-25 10:49:40 +02008422 }
Victor Stinner74419f02020-07-03 11:35:37 +02008423 if (_PyObject_LookupAttr(obj, state->ctx, &tmp) < 0) {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008424 return 1;
8425 }
Serhiy Storchakaf320be72018-01-25 10:49:40 +02008426 if (tmp == NULL) {
8427 PyErr_SetString(PyExc_TypeError, "required field \"ctx\" missing from Starred");
8428 return 1;
8429 }
8430 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008431 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02008432 res = obj2ast_expr_context(state, tmp, &ctx, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008433 if (res != 0) goto failed;
Victor Stinner1acc1292013-07-27 00:03:47 +02008434 Py_CLEAR(tmp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008435 }
Victor Stinnerd27f8d22021-04-07 21:34:22 +02008436 *out = _PyAST_Starred(value, ctx, lineno, col_offset, end_lineno,
8437 end_col_offset, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008438 if (*out == NULL) goto failed;
8439 return 0;
8440 }
Victor Stinner74419f02020-07-03 11:35:37 +02008441 tp = state->Name_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07008442 isinstance = PyObject_IsInstance(obj, tp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008443 if (isinstance == -1) {
8444 return 1;
8445 }
8446 if (isinstance) {
8447 identifier id;
8448 expr_context_ty ctx;
8449
Victor Stinner74419f02020-07-03 11:35:37 +02008450 if (_PyObject_LookupAttr(obj, state->id, &tmp) < 0) {
Serhiy Storchakaf320be72018-01-25 10:49:40 +02008451 return 1;
8452 }
8453 if (tmp == NULL) {
8454 PyErr_SetString(PyExc_TypeError, "required field \"id\" missing from Name");
8455 return 1;
8456 }
8457 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008458 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02008459 res = obj2ast_identifier(state, tmp, &id, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008460 if (res != 0) goto failed;
Victor Stinner1acc1292013-07-27 00:03:47 +02008461 Py_CLEAR(tmp);
Serhiy Storchakaf320be72018-01-25 10:49:40 +02008462 }
Victor Stinner74419f02020-07-03 11:35:37 +02008463 if (_PyObject_LookupAttr(obj, state->ctx, &tmp) < 0) {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008464 return 1;
8465 }
Serhiy Storchakaf320be72018-01-25 10:49:40 +02008466 if (tmp == NULL) {
8467 PyErr_SetString(PyExc_TypeError, "required field \"ctx\" missing from Name");
8468 return 1;
8469 }
8470 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008471 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02008472 res = obj2ast_expr_context(state, tmp, &ctx, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008473 if (res != 0) goto failed;
Victor Stinner1acc1292013-07-27 00:03:47 +02008474 Py_CLEAR(tmp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008475 }
Victor Stinnerd27f8d22021-04-07 21:34:22 +02008476 *out = _PyAST_Name(id, ctx, lineno, col_offset, end_lineno,
8477 end_col_offset, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008478 if (*out == NULL) goto failed;
8479 return 0;
8480 }
Victor Stinner74419f02020-07-03 11:35:37 +02008481 tp = state->List_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07008482 isinstance = PyObject_IsInstance(obj, tp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008483 if (isinstance == -1) {
8484 return 1;
8485 }
8486 if (isinstance) {
Pablo Galindoa5634c42020-09-16 19:42:00 +01008487 asdl_expr_seq* elts;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008488 expr_context_ty ctx;
8489
Victor Stinner74419f02020-07-03 11:35:37 +02008490 if (_PyObject_LookupAttr(obj, state->elts, &tmp) < 0) {
Serhiy Storchakaf320be72018-01-25 10:49:40 +02008491 return 1;
8492 }
8493 if (tmp == NULL) {
8494 PyErr_SetString(PyExc_TypeError, "required field \"elts\" missing from List");
8495 return 1;
8496 }
8497 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008498 int res;
8499 Py_ssize_t len;
8500 Py_ssize_t i;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008501 if (!PyList_Check(tmp)) {
Dino Viehlandac46eb42019-09-11 10:16:34 -07008502 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 +02008503 goto failed;
8504 }
8505 len = PyList_GET_SIZE(tmp);
Pablo Galindoa5634c42020-09-16 19:42:00 +01008506 elts = _Py_asdl_expr_seq_new(len, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008507 if (elts == NULL) goto failed;
8508 for (i = 0; i < len; i++) {
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07008509 expr_ty val;
Serhiy Storchaka43c97312019-09-10 13:02:30 +03008510 PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
8511 Py_INCREF(tmp2);
Victor Stinner74419f02020-07-03 11:35:37 +02008512 res = obj2ast_expr(state, tmp2, &val, arena);
Serhiy Storchaka43c97312019-09-10 13:02:30 +03008513 Py_DECREF(tmp2);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008514 if (res != 0) goto failed;
Serhiy Storchakacf380602016-10-07 21:51:28 +03008515 if (len != PyList_GET_SIZE(tmp)) {
8516 PyErr_SetString(PyExc_RuntimeError, "List field \"elts\" changed size during iteration");
8517 goto failed;
8518 }
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07008519 asdl_seq_SET(elts, i, val);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008520 }
Victor Stinner1acc1292013-07-27 00:03:47 +02008521 Py_CLEAR(tmp);
Serhiy Storchakaf320be72018-01-25 10:49:40 +02008522 }
Victor Stinner74419f02020-07-03 11:35:37 +02008523 if (_PyObject_LookupAttr(obj, state->ctx, &tmp) < 0) {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008524 return 1;
8525 }
Serhiy Storchakaf320be72018-01-25 10:49:40 +02008526 if (tmp == NULL) {
8527 PyErr_SetString(PyExc_TypeError, "required field \"ctx\" missing from List");
8528 return 1;
8529 }
8530 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008531 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02008532 res = obj2ast_expr_context(state, tmp, &ctx, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008533 if (res != 0) goto failed;
Victor Stinner1acc1292013-07-27 00:03:47 +02008534 Py_CLEAR(tmp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008535 }
Victor Stinnerd27f8d22021-04-07 21:34:22 +02008536 *out = _PyAST_List(elts, ctx, lineno, col_offset, end_lineno,
8537 end_col_offset, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008538 if (*out == NULL) goto failed;
8539 return 0;
8540 }
Victor Stinner74419f02020-07-03 11:35:37 +02008541 tp = state->Tuple_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07008542 isinstance = PyObject_IsInstance(obj, tp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008543 if (isinstance == -1) {
8544 return 1;
8545 }
8546 if (isinstance) {
Pablo Galindoa5634c42020-09-16 19:42:00 +01008547 asdl_expr_seq* elts;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008548 expr_context_ty ctx;
8549
Victor Stinner74419f02020-07-03 11:35:37 +02008550 if (_PyObject_LookupAttr(obj, state->elts, &tmp) < 0) {
Serhiy Storchakaf320be72018-01-25 10:49:40 +02008551 return 1;
8552 }
8553 if (tmp == NULL) {
8554 PyErr_SetString(PyExc_TypeError, "required field \"elts\" missing from Tuple");
8555 return 1;
8556 }
8557 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008558 int res;
8559 Py_ssize_t len;
8560 Py_ssize_t i;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008561 if (!PyList_Check(tmp)) {
Dino Viehlandac46eb42019-09-11 10:16:34 -07008562 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 +02008563 goto failed;
8564 }
8565 len = PyList_GET_SIZE(tmp);
Pablo Galindoa5634c42020-09-16 19:42:00 +01008566 elts = _Py_asdl_expr_seq_new(len, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008567 if (elts == NULL) goto failed;
8568 for (i = 0; i < len; i++) {
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07008569 expr_ty val;
Serhiy Storchaka43c97312019-09-10 13:02:30 +03008570 PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
8571 Py_INCREF(tmp2);
Victor Stinner74419f02020-07-03 11:35:37 +02008572 res = obj2ast_expr(state, tmp2, &val, arena);
Serhiy Storchaka43c97312019-09-10 13:02:30 +03008573 Py_DECREF(tmp2);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008574 if (res != 0) goto failed;
Serhiy Storchakacf380602016-10-07 21:51:28 +03008575 if (len != PyList_GET_SIZE(tmp)) {
8576 PyErr_SetString(PyExc_RuntimeError, "Tuple field \"elts\" changed size during iteration");
8577 goto failed;
8578 }
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07008579 asdl_seq_SET(elts, i, val);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008580 }
Victor Stinner1acc1292013-07-27 00:03:47 +02008581 Py_CLEAR(tmp);
Serhiy Storchakaf320be72018-01-25 10:49:40 +02008582 }
Victor Stinner74419f02020-07-03 11:35:37 +02008583 if (_PyObject_LookupAttr(obj, state->ctx, &tmp) < 0) {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008584 return 1;
8585 }
Serhiy Storchakaf320be72018-01-25 10:49:40 +02008586 if (tmp == NULL) {
8587 PyErr_SetString(PyExc_TypeError, "required field \"ctx\" missing from Tuple");
8588 return 1;
8589 }
8590 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008591 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02008592 res = obj2ast_expr_context(state, tmp, &ctx, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008593 if (res != 0) goto failed;
Victor Stinner1acc1292013-07-27 00:03:47 +02008594 Py_CLEAR(tmp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008595 }
Victor Stinnerd27f8d22021-04-07 21:34:22 +02008596 *out = _PyAST_Tuple(elts, ctx, lineno, col_offset, end_lineno,
8597 end_col_offset, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008598 if (*out == NULL) goto failed;
8599 return 0;
8600 }
Victor Stinner74419f02020-07-03 11:35:37 +02008601 tp = state->Slice_type;
Serhiy Storchaka13d52c22020-03-10 18:52:34 +02008602 isinstance = PyObject_IsInstance(obj, tp);
8603 if (isinstance == -1) {
8604 return 1;
8605 }
8606 if (isinstance) {
8607 expr_ty lower;
8608 expr_ty upper;
8609 expr_ty step;
8610
Victor Stinner74419f02020-07-03 11:35:37 +02008611 if (_PyObject_LookupAttr(obj, state->lower, &tmp) < 0) {
Serhiy Storchaka13d52c22020-03-10 18:52:34 +02008612 return 1;
8613 }
8614 if (tmp == NULL || tmp == Py_None) {
8615 Py_CLEAR(tmp);
8616 lower = NULL;
8617 }
8618 else {
8619 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02008620 res = obj2ast_expr(state, tmp, &lower, arena);
Serhiy Storchaka13d52c22020-03-10 18:52:34 +02008621 if (res != 0) goto failed;
8622 Py_CLEAR(tmp);
8623 }
Victor Stinner74419f02020-07-03 11:35:37 +02008624 if (_PyObject_LookupAttr(obj, state->upper, &tmp) < 0) {
Serhiy Storchaka13d52c22020-03-10 18:52:34 +02008625 return 1;
8626 }
8627 if (tmp == NULL || tmp == Py_None) {
8628 Py_CLEAR(tmp);
8629 upper = NULL;
8630 }
8631 else {
8632 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02008633 res = obj2ast_expr(state, tmp, &upper, arena);
Serhiy Storchaka13d52c22020-03-10 18:52:34 +02008634 if (res != 0) goto failed;
8635 Py_CLEAR(tmp);
8636 }
Victor Stinner74419f02020-07-03 11:35:37 +02008637 if (_PyObject_LookupAttr(obj, state->step, &tmp) < 0) {
Serhiy Storchaka13d52c22020-03-10 18:52:34 +02008638 return 1;
8639 }
8640 if (tmp == NULL || tmp == Py_None) {
8641 Py_CLEAR(tmp);
8642 step = NULL;
8643 }
8644 else {
8645 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02008646 res = obj2ast_expr(state, tmp, &step, arena);
Serhiy Storchaka13d52c22020-03-10 18:52:34 +02008647 if (res != 0) goto failed;
8648 Py_CLEAR(tmp);
8649 }
Victor Stinnerd27f8d22021-04-07 21:34:22 +02008650 *out = _PyAST_Slice(lower, upper, step, lineno, col_offset, end_lineno,
8651 end_col_offset, arena);
Serhiy Storchaka13d52c22020-03-10 18:52:34 +02008652 if (*out == NULL) goto failed;
8653 return 0;
8654 }
Brandt Bucher145bf262021-02-26 14:51:55 -08008655 tp = state->MatchAs_type;
8656 isinstance = PyObject_IsInstance(obj, tp);
8657 if (isinstance == -1) {
8658 return 1;
8659 }
8660 if (isinstance) {
8661 expr_ty pattern;
8662 identifier name;
8663
8664 if (_PyObject_LookupAttr(obj, state->pattern, &tmp) < 0) {
8665 return 1;
8666 }
8667 if (tmp == NULL) {
8668 PyErr_SetString(PyExc_TypeError, "required field \"pattern\" missing from MatchAs");
8669 return 1;
8670 }
8671 else {
8672 int res;
8673 res = obj2ast_expr(state, tmp, &pattern, arena);
8674 if (res != 0) goto failed;
8675 Py_CLEAR(tmp);
8676 }
8677 if (_PyObject_LookupAttr(obj, state->name, &tmp) < 0) {
8678 return 1;
8679 }
8680 if (tmp == NULL) {
8681 PyErr_SetString(PyExc_TypeError, "required field \"name\" missing from MatchAs");
8682 return 1;
8683 }
8684 else {
8685 int res;
8686 res = obj2ast_identifier(state, tmp, &name, arena);
8687 if (res != 0) goto failed;
8688 Py_CLEAR(tmp);
8689 }
Victor Stinnerd27f8d22021-04-07 21:34:22 +02008690 *out = _PyAST_MatchAs(pattern, name, lineno, col_offset, end_lineno,
8691 end_col_offset, arena);
Brandt Bucher145bf262021-02-26 14:51:55 -08008692 if (*out == NULL) goto failed;
8693 return 0;
8694 }
8695 tp = state->MatchOr_type;
8696 isinstance = PyObject_IsInstance(obj, tp);
8697 if (isinstance == -1) {
8698 return 1;
8699 }
8700 if (isinstance) {
8701 asdl_expr_seq* patterns;
8702
8703 if (_PyObject_LookupAttr(obj, state->patterns, &tmp) < 0) {
8704 return 1;
8705 }
8706 if (tmp == NULL) {
8707 PyErr_SetString(PyExc_TypeError, "required field \"patterns\" missing from MatchOr");
8708 return 1;
8709 }
8710 else {
8711 int res;
8712 Py_ssize_t len;
8713 Py_ssize_t i;
8714 if (!PyList_Check(tmp)) {
8715 PyErr_Format(PyExc_TypeError, "MatchOr field \"patterns\" must be a list, not a %.200s", _PyType_Name(Py_TYPE(tmp)));
8716 goto failed;
8717 }
8718 len = PyList_GET_SIZE(tmp);
8719 patterns = _Py_asdl_expr_seq_new(len, arena);
8720 if (patterns == NULL) goto failed;
8721 for (i = 0; i < len; i++) {
8722 expr_ty val;
8723 PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
8724 Py_INCREF(tmp2);
8725 res = obj2ast_expr(state, tmp2, &val, arena);
8726 Py_DECREF(tmp2);
8727 if (res != 0) goto failed;
8728 if (len != PyList_GET_SIZE(tmp)) {
8729 PyErr_SetString(PyExc_RuntimeError, "MatchOr field \"patterns\" changed size during iteration");
8730 goto failed;
8731 }
8732 asdl_seq_SET(patterns, i, val);
8733 }
8734 Py_CLEAR(tmp);
8735 }
Victor Stinnerd27f8d22021-04-07 21:34:22 +02008736 *out = _PyAST_MatchOr(patterns, lineno, col_offset, end_lineno,
8737 end_col_offset, arena);
Brandt Bucher145bf262021-02-26 14:51:55 -08008738 if (*out == NULL) goto failed;
8739 return 0;
8740 }
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008741
8742 PyErr_Format(PyExc_TypeError, "expected some sort of expr, but got %R", obj);
8743 failed:
8744 Py_XDECREF(tmp);
8745 return 1;
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00008746}
8747
8748int
Victor Stinner5cf47822020-11-02 22:03:28 +01008749obj2ast_expr_context(struct ast_state *state, PyObject* obj, expr_context_ty*
Victor Stinner74419f02020-07-03 11:35:37 +02008750 out, PyArena* arena)
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00008751{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008752 int isinstance;
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00008753
Victor Stinner74419f02020-07-03 11:35:37 +02008754 isinstance = PyObject_IsInstance(obj, state->Load_type);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008755 if (isinstance == -1) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00008756 return 1;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008757 }
8758 if (isinstance) {
8759 *out = Load;
8760 return 0;
8761 }
Victor Stinner74419f02020-07-03 11:35:37 +02008762 isinstance = PyObject_IsInstance(obj, state->Store_type);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008763 if (isinstance == -1) {
8764 return 1;
8765 }
8766 if (isinstance) {
8767 *out = Store;
8768 return 0;
8769 }
Victor Stinner74419f02020-07-03 11:35:37 +02008770 isinstance = PyObject_IsInstance(obj, state->Del_type);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008771 if (isinstance == -1) {
8772 return 1;
8773 }
8774 if (isinstance) {
8775 *out = Del;
8776 return 0;
8777 }
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008778
8779 PyErr_Format(PyExc_TypeError, "expected some sort of expr_context, but got %R", obj);
8780 return 1;
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00008781}
8782
8783int
Victor Stinner5cf47822020-11-02 22:03:28 +01008784obj2ast_boolop(struct ast_state *state, PyObject* obj, boolop_ty* out, PyArena*
Victor Stinner74419f02020-07-03 11:35:37 +02008785 arena)
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00008786{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008787 int isinstance;
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00008788
Victor Stinner74419f02020-07-03 11:35:37 +02008789 isinstance = PyObject_IsInstance(obj, state->And_type);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008790 if (isinstance == -1) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00008791 return 1;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008792 }
8793 if (isinstance) {
8794 *out = And;
8795 return 0;
8796 }
Victor Stinner74419f02020-07-03 11:35:37 +02008797 isinstance = PyObject_IsInstance(obj, state->Or_type);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008798 if (isinstance == -1) {
8799 return 1;
8800 }
8801 if (isinstance) {
8802 *out = Or;
8803 return 0;
8804 }
8805
8806 PyErr_Format(PyExc_TypeError, "expected some sort of boolop, but got %R", obj);
8807 return 1;
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00008808}
8809
8810int
Victor Stinner5cf47822020-11-02 22:03:28 +01008811obj2ast_operator(struct ast_state *state, PyObject* obj, operator_ty* out,
Victor Stinner74419f02020-07-03 11:35:37 +02008812 PyArena* arena)
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00008813{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008814 int isinstance;
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00008815
Victor Stinner74419f02020-07-03 11:35:37 +02008816 isinstance = PyObject_IsInstance(obj, state->Add_type);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008817 if (isinstance == -1) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00008818 return 1;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008819 }
8820 if (isinstance) {
8821 *out = Add;
8822 return 0;
8823 }
Victor Stinner74419f02020-07-03 11:35:37 +02008824 isinstance = PyObject_IsInstance(obj, state->Sub_type);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008825 if (isinstance == -1) {
8826 return 1;
8827 }
8828 if (isinstance) {
8829 *out = Sub;
8830 return 0;
8831 }
Victor Stinner74419f02020-07-03 11:35:37 +02008832 isinstance = PyObject_IsInstance(obj, state->Mult_type);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008833 if (isinstance == -1) {
8834 return 1;
8835 }
8836 if (isinstance) {
8837 *out = Mult;
8838 return 0;
8839 }
Victor Stinner74419f02020-07-03 11:35:37 +02008840 isinstance = PyObject_IsInstance(obj, state->MatMult_type);
Benjamin Petersond51374e2014-04-09 23:55:56 -04008841 if (isinstance == -1) {
8842 return 1;
8843 }
8844 if (isinstance) {
8845 *out = MatMult;
8846 return 0;
8847 }
Victor Stinner74419f02020-07-03 11:35:37 +02008848 isinstance = PyObject_IsInstance(obj, state->Div_type);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008849 if (isinstance == -1) {
8850 return 1;
8851 }
8852 if (isinstance) {
8853 *out = Div;
8854 return 0;
8855 }
Victor Stinner74419f02020-07-03 11:35:37 +02008856 isinstance = PyObject_IsInstance(obj, state->Mod_type);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008857 if (isinstance == -1) {
8858 return 1;
8859 }
8860 if (isinstance) {
8861 *out = Mod;
8862 return 0;
8863 }
Victor Stinner74419f02020-07-03 11:35:37 +02008864 isinstance = PyObject_IsInstance(obj, state->Pow_type);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008865 if (isinstance == -1) {
8866 return 1;
8867 }
8868 if (isinstance) {
8869 *out = Pow;
8870 return 0;
8871 }
Victor Stinner74419f02020-07-03 11:35:37 +02008872 isinstance = PyObject_IsInstance(obj, state->LShift_type);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008873 if (isinstance == -1) {
8874 return 1;
8875 }
8876 if (isinstance) {
8877 *out = LShift;
8878 return 0;
8879 }
Victor Stinner74419f02020-07-03 11:35:37 +02008880 isinstance = PyObject_IsInstance(obj, state->RShift_type);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008881 if (isinstance == -1) {
8882 return 1;
8883 }
8884 if (isinstance) {
8885 *out = RShift;
8886 return 0;
8887 }
Victor Stinner74419f02020-07-03 11:35:37 +02008888 isinstance = PyObject_IsInstance(obj, state->BitOr_type);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008889 if (isinstance == -1) {
8890 return 1;
8891 }
8892 if (isinstance) {
8893 *out = BitOr;
8894 return 0;
8895 }
Victor Stinner74419f02020-07-03 11:35:37 +02008896 isinstance = PyObject_IsInstance(obj, state->BitXor_type);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008897 if (isinstance == -1) {
8898 return 1;
8899 }
8900 if (isinstance) {
8901 *out = BitXor;
8902 return 0;
8903 }
Victor Stinner74419f02020-07-03 11:35:37 +02008904 isinstance = PyObject_IsInstance(obj, state->BitAnd_type);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008905 if (isinstance == -1) {
8906 return 1;
8907 }
8908 if (isinstance) {
8909 *out = BitAnd;
8910 return 0;
8911 }
Victor Stinner74419f02020-07-03 11:35:37 +02008912 isinstance = PyObject_IsInstance(obj, state->FloorDiv_type);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008913 if (isinstance == -1) {
8914 return 1;
8915 }
8916 if (isinstance) {
8917 *out = FloorDiv;
8918 return 0;
8919 }
8920
8921 PyErr_Format(PyExc_TypeError, "expected some sort of operator, but got %R", obj);
8922 return 1;
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00008923}
8924
8925int
Victor Stinner5cf47822020-11-02 22:03:28 +01008926obj2ast_unaryop(struct ast_state *state, PyObject* obj, unaryop_ty* out,
8927 PyArena* arena)
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00008928{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008929 int isinstance;
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00008930
Victor Stinner74419f02020-07-03 11:35:37 +02008931 isinstance = PyObject_IsInstance(obj, state->Invert_type);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008932 if (isinstance == -1) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00008933 return 1;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008934 }
8935 if (isinstance) {
8936 *out = Invert;
8937 return 0;
8938 }
Victor Stinner74419f02020-07-03 11:35:37 +02008939 isinstance = PyObject_IsInstance(obj, state->Not_type);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008940 if (isinstance == -1) {
8941 return 1;
8942 }
8943 if (isinstance) {
8944 *out = Not;
8945 return 0;
8946 }
Victor Stinner74419f02020-07-03 11:35:37 +02008947 isinstance = PyObject_IsInstance(obj, state->UAdd_type);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008948 if (isinstance == -1) {
8949 return 1;
8950 }
8951 if (isinstance) {
8952 *out = UAdd;
8953 return 0;
8954 }
Victor Stinner74419f02020-07-03 11:35:37 +02008955 isinstance = PyObject_IsInstance(obj, state->USub_type);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008956 if (isinstance == -1) {
8957 return 1;
8958 }
8959 if (isinstance) {
8960 *out = USub;
8961 return 0;
8962 }
8963
8964 PyErr_Format(PyExc_TypeError, "expected some sort of unaryop, but got %R", obj);
8965 return 1;
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00008966}
8967
8968int
Victor Stinner5cf47822020-11-02 22:03:28 +01008969obj2ast_cmpop(struct ast_state *state, PyObject* obj, cmpop_ty* out, PyArena*
Victor Stinner74419f02020-07-03 11:35:37 +02008970 arena)
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00008971{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008972 int isinstance;
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00008973
Victor Stinner74419f02020-07-03 11:35:37 +02008974 isinstance = PyObject_IsInstance(obj, state->Eq_type);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008975 if (isinstance == -1) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00008976 return 1;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008977 }
8978 if (isinstance) {
8979 *out = Eq;
8980 return 0;
8981 }
Victor Stinner74419f02020-07-03 11:35:37 +02008982 isinstance = PyObject_IsInstance(obj, state->NotEq_type);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008983 if (isinstance == -1) {
8984 return 1;
8985 }
8986 if (isinstance) {
8987 *out = NotEq;
8988 return 0;
8989 }
Victor Stinner74419f02020-07-03 11:35:37 +02008990 isinstance = PyObject_IsInstance(obj, state->Lt_type);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008991 if (isinstance == -1) {
8992 return 1;
8993 }
8994 if (isinstance) {
8995 *out = Lt;
8996 return 0;
8997 }
Victor Stinner74419f02020-07-03 11:35:37 +02008998 isinstance = PyObject_IsInstance(obj, state->LtE_type);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008999 if (isinstance == -1) {
9000 return 1;
9001 }
9002 if (isinstance) {
9003 *out = LtE;
9004 return 0;
9005 }
Victor Stinner74419f02020-07-03 11:35:37 +02009006 isinstance = PyObject_IsInstance(obj, state->Gt_type);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009007 if (isinstance == -1) {
9008 return 1;
9009 }
9010 if (isinstance) {
9011 *out = Gt;
9012 return 0;
9013 }
Victor Stinner74419f02020-07-03 11:35:37 +02009014 isinstance = PyObject_IsInstance(obj, state->GtE_type);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009015 if (isinstance == -1) {
9016 return 1;
9017 }
9018 if (isinstance) {
9019 *out = GtE;
9020 return 0;
9021 }
Victor Stinner74419f02020-07-03 11:35:37 +02009022 isinstance = PyObject_IsInstance(obj, state->Is_type);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009023 if (isinstance == -1) {
9024 return 1;
9025 }
9026 if (isinstance) {
9027 *out = Is;
9028 return 0;
9029 }
Victor Stinner74419f02020-07-03 11:35:37 +02009030 isinstance = PyObject_IsInstance(obj, state->IsNot_type);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009031 if (isinstance == -1) {
9032 return 1;
9033 }
9034 if (isinstance) {
9035 *out = IsNot;
9036 return 0;
9037 }
Victor Stinner74419f02020-07-03 11:35:37 +02009038 isinstance = PyObject_IsInstance(obj, state->In_type);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009039 if (isinstance == -1) {
9040 return 1;
9041 }
9042 if (isinstance) {
9043 *out = In;
9044 return 0;
9045 }
Victor Stinner74419f02020-07-03 11:35:37 +02009046 isinstance = PyObject_IsInstance(obj, state->NotIn_type);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009047 if (isinstance == -1) {
9048 return 1;
9049 }
9050 if (isinstance) {
9051 *out = NotIn;
9052 return 0;
9053 }
9054
9055 PyErr_Format(PyExc_TypeError, "expected some sort of cmpop, but got %R", obj);
9056 return 1;
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00009057}
9058
9059int
Victor Stinner5cf47822020-11-02 22:03:28 +01009060obj2ast_comprehension(struct ast_state *state, PyObject* obj, comprehension_ty*
Victor Stinner74419f02020-07-03 11:35:37 +02009061 out, PyArena* arena)
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00009062{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009063 PyObject* tmp = NULL;
9064 expr_ty target;
9065 expr_ty iter;
Pablo Galindoa5634c42020-09-16 19:42:00 +01009066 asdl_expr_seq* ifs;
Yury Selivanov52c4e7c2016-09-09 10:36:01 -07009067 int is_async;
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00009068
Victor Stinner74419f02020-07-03 11:35:37 +02009069 if (_PyObject_LookupAttr(obj, state->target, &tmp) < 0) {
Serhiy Storchakaf320be72018-01-25 10:49:40 +02009070 return 1;
9071 }
9072 if (tmp == NULL) {
9073 PyErr_SetString(PyExc_TypeError, "required field \"target\" missing from comprehension");
9074 return 1;
9075 }
9076 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009077 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02009078 res = obj2ast_expr(state, tmp, &target, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009079 if (res != 0) goto failed;
Victor Stinner1acc1292013-07-27 00:03:47 +02009080 Py_CLEAR(tmp);
Serhiy Storchakaf320be72018-01-25 10:49:40 +02009081 }
Victor Stinner74419f02020-07-03 11:35:37 +02009082 if (_PyObject_LookupAttr(obj, state->iter, &tmp) < 0) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00009083 return 1;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009084 }
Serhiy Storchakaf320be72018-01-25 10:49:40 +02009085 if (tmp == NULL) {
9086 PyErr_SetString(PyExc_TypeError, "required field \"iter\" missing from comprehension");
9087 return 1;
9088 }
9089 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009090 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02009091 res = obj2ast_expr(state, tmp, &iter, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009092 if (res != 0) goto failed;
Victor Stinner1acc1292013-07-27 00:03:47 +02009093 Py_CLEAR(tmp);
Serhiy Storchakaf320be72018-01-25 10:49:40 +02009094 }
Victor Stinner74419f02020-07-03 11:35:37 +02009095 if (_PyObject_LookupAttr(obj, state->ifs, &tmp) < 0) {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009096 return 1;
9097 }
Serhiy Storchakaf320be72018-01-25 10:49:40 +02009098 if (tmp == NULL) {
9099 PyErr_SetString(PyExc_TypeError, "required field \"ifs\" missing from comprehension");
9100 return 1;
9101 }
9102 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009103 int res;
9104 Py_ssize_t len;
9105 Py_ssize_t i;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009106 if (!PyList_Check(tmp)) {
Dino Viehlandac46eb42019-09-11 10:16:34 -07009107 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 +02009108 goto failed;
9109 }
9110 len = PyList_GET_SIZE(tmp);
Pablo Galindoa5634c42020-09-16 19:42:00 +01009111 ifs = _Py_asdl_expr_seq_new(len, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009112 if (ifs == NULL) goto failed;
9113 for (i = 0; i < len; i++) {
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07009114 expr_ty val;
Serhiy Storchaka43c97312019-09-10 13:02:30 +03009115 PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
9116 Py_INCREF(tmp2);
Victor Stinner74419f02020-07-03 11:35:37 +02009117 res = obj2ast_expr(state, tmp2, &val, arena);
Serhiy Storchaka43c97312019-09-10 13:02:30 +03009118 Py_DECREF(tmp2);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009119 if (res != 0) goto failed;
Serhiy Storchakacf380602016-10-07 21:51:28 +03009120 if (len != PyList_GET_SIZE(tmp)) {
9121 PyErr_SetString(PyExc_RuntimeError, "comprehension field \"ifs\" changed size during iteration");
9122 goto failed;
9123 }
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07009124 asdl_seq_SET(ifs, i, val);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009125 }
Victor Stinner1acc1292013-07-27 00:03:47 +02009126 Py_CLEAR(tmp);
Serhiy Storchakaf320be72018-01-25 10:49:40 +02009127 }
Victor Stinner74419f02020-07-03 11:35:37 +02009128 if (_PyObject_LookupAttr(obj, state->is_async, &tmp) < 0) {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009129 return 1;
9130 }
Serhiy Storchakaf320be72018-01-25 10:49:40 +02009131 if (tmp == NULL) {
9132 PyErr_SetString(PyExc_TypeError, "required field \"is_async\" missing from comprehension");
9133 return 1;
9134 }
9135 else {
Yury Selivanov52c4e7c2016-09-09 10:36:01 -07009136 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02009137 res = obj2ast_int(state, tmp, &is_async, arena);
Yury Selivanov52c4e7c2016-09-09 10:36:01 -07009138 if (res != 0) goto failed;
9139 Py_CLEAR(tmp);
Yury Selivanov52c4e7c2016-09-09 10:36:01 -07009140 }
Victor Stinnerd27f8d22021-04-07 21:34:22 +02009141 *out = _PyAST_comprehension(target, iter, ifs, is_async, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009142 return 0;
9143failed:
9144 Py_XDECREF(tmp);
9145 return 1;
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00009146}
9147
9148int
Victor Stinner5cf47822020-11-02 22:03:28 +01009149obj2ast_excepthandler(struct ast_state *state, PyObject* obj, excepthandler_ty*
Victor Stinner74419f02020-07-03 11:35:37 +02009150 out, PyArena* arena)
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00009151{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009152 int isinstance;
Neal Norwitzad74aa82008-03-31 05:14:30 +00009153
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009154 PyObject *tmp = NULL;
Dino Viehlandac46eb42019-09-11 10:16:34 -07009155 PyObject *tp;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009156 int lineno;
9157 int col_offset;
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00009158 int end_lineno;
9159 int end_col_offset;
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00009160
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009161 if (obj == Py_None) {
9162 *out = NULL;
9163 return 0;
9164 }
Victor Stinner74419f02020-07-03 11:35:37 +02009165 if (_PyObject_LookupAttr(obj, state->lineno, &tmp) < 0) {
Serhiy Storchakaf320be72018-01-25 10:49:40 +02009166 return 1;
9167 }
9168 if (tmp == NULL) {
9169 PyErr_SetString(PyExc_TypeError, "required field \"lineno\" missing from excepthandler");
9170 return 1;
9171 }
9172 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009173 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02009174 res = obj2ast_int(state, tmp, &lineno, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009175 if (res != 0) goto failed;
Victor Stinner1acc1292013-07-27 00:03:47 +02009176 Py_CLEAR(tmp);
Serhiy Storchakaf320be72018-01-25 10:49:40 +02009177 }
Victor Stinner74419f02020-07-03 11:35:37 +02009178 if (_PyObject_LookupAttr(obj, state->col_offset, &tmp) < 0) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00009179 return 1;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009180 }
Serhiy Storchakaf320be72018-01-25 10:49:40 +02009181 if (tmp == NULL) {
9182 PyErr_SetString(PyExc_TypeError, "required field \"col_offset\" missing from excepthandler");
9183 return 1;
9184 }
9185 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009186 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02009187 res = obj2ast_int(state, tmp, &col_offset, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009188 if (res != 0) goto failed;
Victor Stinner1acc1292013-07-27 00:03:47 +02009189 Py_CLEAR(tmp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009190 }
Victor Stinner74419f02020-07-03 11:35:37 +02009191 if (_PyObject_LookupAttr(obj, state->end_lineno, &tmp) < 0) {
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00009192 return 1;
9193 }
9194 if (tmp == NULL || tmp == Py_None) {
9195 Py_CLEAR(tmp);
9196 end_lineno = 0;
9197 }
9198 else {
9199 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02009200 res = obj2ast_int(state, tmp, &end_lineno, arena);
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00009201 if (res != 0) goto failed;
9202 Py_CLEAR(tmp);
9203 }
Victor Stinner74419f02020-07-03 11:35:37 +02009204 if (_PyObject_LookupAttr(obj, state->end_col_offset, &tmp) < 0) {
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00009205 return 1;
9206 }
9207 if (tmp == NULL || tmp == Py_None) {
9208 Py_CLEAR(tmp);
9209 end_col_offset = 0;
9210 }
9211 else {
9212 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02009213 res = obj2ast_int(state, tmp, &end_col_offset, arena);
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00009214 if (res != 0) goto failed;
9215 Py_CLEAR(tmp);
9216 }
Victor Stinner74419f02020-07-03 11:35:37 +02009217 tp = state->ExceptHandler_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07009218 isinstance = PyObject_IsInstance(obj, tp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009219 if (isinstance == -1) {
9220 return 1;
9221 }
9222 if (isinstance) {
9223 expr_ty type;
9224 identifier name;
Pablo Galindoa5634c42020-09-16 19:42:00 +01009225 asdl_stmt_seq* body;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009226
Victor Stinner74419f02020-07-03 11:35:37 +02009227 if (_PyObject_LookupAttr(obj, state->type, &tmp) < 0) {
Serhiy Storchakaf320be72018-01-25 10:49:40 +02009228 return 1;
9229 }
9230 if (tmp == NULL || tmp == Py_None) {
9231 Py_CLEAR(tmp);
9232 type = NULL;
9233 }
9234 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009235 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02009236 res = obj2ast_expr(state, tmp, &type, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009237 if (res != 0) goto failed;
Victor Stinner1acc1292013-07-27 00:03:47 +02009238 Py_CLEAR(tmp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009239 }
Victor Stinner74419f02020-07-03 11:35:37 +02009240 if (_PyObject_LookupAttr(obj, state->name, &tmp) < 0) {
Serhiy Storchakaf320be72018-01-25 10:49:40 +02009241 return 1;
9242 }
9243 if (tmp == NULL || tmp == Py_None) {
9244 Py_CLEAR(tmp);
9245 name = NULL;
9246 }
9247 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009248 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02009249 res = obj2ast_identifier(state, tmp, &name, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009250 if (res != 0) goto failed;
Victor Stinner1acc1292013-07-27 00:03:47 +02009251 Py_CLEAR(tmp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009252 }
Victor Stinner74419f02020-07-03 11:35:37 +02009253 if (_PyObject_LookupAttr(obj, state->body, &tmp) < 0) {
Serhiy Storchakaf320be72018-01-25 10:49:40 +02009254 return 1;
9255 }
9256 if (tmp == NULL) {
9257 PyErr_SetString(PyExc_TypeError, "required field \"body\" missing from ExceptHandler");
9258 return 1;
9259 }
9260 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009261 int res;
9262 Py_ssize_t len;
9263 Py_ssize_t i;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009264 if (!PyList_Check(tmp)) {
Dino Viehlandac46eb42019-09-11 10:16:34 -07009265 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 +02009266 goto failed;
9267 }
9268 len = PyList_GET_SIZE(tmp);
Pablo Galindoa5634c42020-09-16 19:42:00 +01009269 body = _Py_asdl_stmt_seq_new(len, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009270 if (body == NULL) goto failed;
9271 for (i = 0; i < len; i++) {
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07009272 stmt_ty val;
Serhiy Storchaka43c97312019-09-10 13:02:30 +03009273 PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
9274 Py_INCREF(tmp2);
Victor Stinner74419f02020-07-03 11:35:37 +02009275 res = obj2ast_stmt(state, tmp2, &val, arena);
Serhiy Storchaka43c97312019-09-10 13:02:30 +03009276 Py_DECREF(tmp2);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009277 if (res != 0) goto failed;
Serhiy Storchakacf380602016-10-07 21:51:28 +03009278 if (len != PyList_GET_SIZE(tmp)) {
9279 PyErr_SetString(PyExc_RuntimeError, "ExceptHandler field \"body\" changed size during iteration");
9280 goto failed;
9281 }
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07009282 asdl_seq_SET(body, i, val);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009283 }
Victor Stinner1acc1292013-07-27 00:03:47 +02009284 Py_CLEAR(tmp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009285 }
Victor Stinnerd27f8d22021-04-07 21:34:22 +02009286 *out = _PyAST_ExceptHandler(type, name, body, lineno, col_offset,
9287 end_lineno, end_col_offset, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009288 if (*out == NULL) goto failed;
9289 return 0;
9290 }
9291
9292 PyErr_Format(PyExc_TypeError, "expected some sort of excepthandler, but got %R", obj);
9293 failed:
9294 Py_XDECREF(tmp);
9295 return 1;
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00009296}
9297
9298int
Victor Stinner5cf47822020-11-02 22:03:28 +01009299obj2ast_arguments(struct ast_state *state, PyObject* obj, arguments_ty* out,
Victor Stinner74419f02020-07-03 11:35:37 +02009300 PyArena* arena)
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00009301{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009302 PyObject* tmp = NULL;
Pablo Galindoa5634c42020-09-16 19:42:00 +01009303 asdl_arg_seq* posonlyargs;
9304 asdl_arg_seq* args;
Victor Stinneree4b59c2013-07-27 00:01:35 +02009305 arg_ty vararg;
Pablo Galindoa5634c42020-09-16 19:42:00 +01009306 asdl_arg_seq* kwonlyargs;
9307 asdl_expr_seq* kw_defaults;
Victor Stinneree4b59c2013-07-27 00:01:35 +02009308 arg_ty kwarg;
Pablo Galindoa5634c42020-09-16 19:42:00 +01009309 asdl_expr_seq* defaults;
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00009310
Victor Stinner74419f02020-07-03 11:35:37 +02009311 if (_PyObject_LookupAttr(obj, state->posonlyargs, &tmp) < 0) {
Pablo Galindo8c77b8c2019-04-29 13:36:57 +01009312 return 1;
9313 }
9314 if (tmp == NULL) {
9315 PyErr_SetString(PyExc_TypeError, "required field \"posonlyargs\" missing from arguments");
9316 return 1;
9317 }
9318 else {
9319 int res;
9320 Py_ssize_t len;
9321 Py_ssize_t i;
9322 if (!PyList_Check(tmp)) {
Dino Viehlandac46eb42019-09-11 10:16:34 -07009323 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 +01009324 goto failed;
9325 }
9326 len = PyList_GET_SIZE(tmp);
Pablo Galindoa5634c42020-09-16 19:42:00 +01009327 posonlyargs = _Py_asdl_arg_seq_new(len, arena);
Pablo Galindo8c77b8c2019-04-29 13:36:57 +01009328 if (posonlyargs == NULL) goto failed;
9329 for (i = 0; i < len; i++) {
9330 arg_ty val;
Serhiy Storchaka43c97312019-09-10 13:02:30 +03009331 PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
9332 Py_INCREF(tmp2);
Victor Stinner74419f02020-07-03 11:35:37 +02009333 res = obj2ast_arg(state, tmp2, &val, arena);
Serhiy Storchaka43c97312019-09-10 13:02:30 +03009334 Py_DECREF(tmp2);
Pablo Galindo8c77b8c2019-04-29 13:36:57 +01009335 if (res != 0) goto failed;
9336 if (len != PyList_GET_SIZE(tmp)) {
9337 PyErr_SetString(PyExc_RuntimeError, "arguments field \"posonlyargs\" changed size during iteration");
9338 goto failed;
9339 }
9340 asdl_seq_SET(posonlyargs, i, val);
9341 }
9342 Py_CLEAR(tmp);
9343 }
Victor Stinner74419f02020-07-03 11:35:37 +02009344 if (_PyObject_LookupAttr(obj, state->args, &tmp) < 0) {
Pablo Galindocd6e83b2019-07-15 01:32:18 +02009345 return 1;
9346 }
9347 if (tmp == NULL) {
9348 PyErr_SetString(PyExc_TypeError, "required field \"args\" missing from arguments");
9349 return 1;
9350 }
9351 else {
9352 int res;
9353 Py_ssize_t len;
9354 Py_ssize_t i;
9355 if (!PyList_Check(tmp)) {
Dino Viehlandac46eb42019-09-11 10:16:34 -07009356 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 +02009357 goto failed;
9358 }
9359 len = PyList_GET_SIZE(tmp);
Pablo Galindoa5634c42020-09-16 19:42:00 +01009360 args = _Py_asdl_arg_seq_new(len, arena);
Pablo Galindocd6e83b2019-07-15 01:32:18 +02009361 if (args == NULL) goto failed;
9362 for (i = 0; i < len; i++) {
9363 arg_ty val;
Serhiy Storchaka43c97312019-09-10 13:02:30 +03009364 PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
9365 Py_INCREF(tmp2);
Victor Stinner74419f02020-07-03 11:35:37 +02009366 res = obj2ast_arg(state, tmp2, &val, arena);
Serhiy Storchaka43c97312019-09-10 13:02:30 +03009367 Py_DECREF(tmp2);
Pablo Galindocd6e83b2019-07-15 01:32:18 +02009368 if (res != 0) goto failed;
9369 if (len != PyList_GET_SIZE(tmp)) {
9370 PyErr_SetString(PyExc_RuntimeError, "arguments field \"args\" changed size during iteration");
9371 goto failed;
9372 }
9373 asdl_seq_SET(args, i, val);
9374 }
9375 Py_CLEAR(tmp);
9376 }
Victor Stinner74419f02020-07-03 11:35:37 +02009377 if (_PyObject_LookupAttr(obj, state->vararg, &tmp) < 0) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00009378 return 1;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009379 }
Serhiy Storchakaf320be72018-01-25 10:49:40 +02009380 if (tmp == NULL || tmp == Py_None) {
9381 Py_CLEAR(tmp);
9382 vararg = NULL;
9383 }
9384 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009385 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02009386 res = obj2ast_arg(state, tmp, &vararg, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009387 if (res != 0) goto failed;
Victor Stinner1acc1292013-07-27 00:03:47 +02009388 Py_CLEAR(tmp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009389 }
Victor Stinner74419f02020-07-03 11:35:37 +02009390 if (_PyObject_LookupAttr(obj, state->kwonlyargs, &tmp) < 0) {
Serhiy Storchakaf320be72018-01-25 10:49:40 +02009391 return 1;
9392 }
9393 if (tmp == NULL) {
9394 PyErr_SetString(PyExc_TypeError, "required field \"kwonlyargs\" missing from arguments");
9395 return 1;
9396 }
9397 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009398 int res;
9399 Py_ssize_t len;
9400 Py_ssize_t i;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009401 if (!PyList_Check(tmp)) {
Dino Viehlandac46eb42019-09-11 10:16:34 -07009402 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 +02009403 goto failed;
9404 }
9405 len = PyList_GET_SIZE(tmp);
Pablo Galindoa5634c42020-09-16 19:42:00 +01009406 kwonlyargs = _Py_asdl_arg_seq_new(len, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009407 if (kwonlyargs == NULL) goto failed;
9408 for (i = 0; i < len; i++) {
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07009409 arg_ty val;
Serhiy Storchaka43c97312019-09-10 13:02:30 +03009410 PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
9411 Py_INCREF(tmp2);
Victor Stinner74419f02020-07-03 11:35:37 +02009412 res = obj2ast_arg(state, tmp2, &val, arena);
Serhiy Storchaka43c97312019-09-10 13:02:30 +03009413 Py_DECREF(tmp2);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009414 if (res != 0) goto failed;
Serhiy Storchakacf380602016-10-07 21:51:28 +03009415 if (len != PyList_GET_SIZE(tmp)) {
9416 PyErr_SetString(PyExc_RuntimeError, "arguments field \"kwonlyargs\" changed size during iteration");
9417 goto failed;
9418 }
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07009419 asdl_seq_SET(kwonlyargs, i, val);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009420 }
Victor Stinner1acc1292013-07-27 00:03:47 +02009421 Py_CLEAR(tmp);
Serhiy Storchakaf320be72018-01-25 10:49:40 +02009422 }
Victor Stinner74419f02020-07-03 11:35:37 +02009423 if (_PyObject_LookupAttr(obj, state->kw_defaults, &tmp) < 0) {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009424 return 1;
9425 }
Serhiy Storchakaf320be72018-01-25 10:49:40 +02009426 if (tmp == NULL) {
9427 PyErr_SetString(PyExc_TypeError, "required field \"kw_defaults\" missing from arguments");
9428 return 1;
9429 }
9430 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009431 int res;
9432 Py_ssize_t len;
9433 Py_ssize_t i;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009434 if (!PyList_Check(tmp)) {
Dino Viehlandac46eb42019-09-11 10:16:34 -07009435 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 +02009436 goto failed;
9437 }
9438 len = PyList_GET_SIZE(tmp);
Pablo Galindoa5634c42020-09-16 19:42:00 +01009439 kw_defaults = _Py_asdl_expr_seq_new(len, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009440 if (kw_defaults == NULL) goto failed;
9441 for (i = 0; i < len; i++) {
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07009442 expr_ty val;
Serhiy Storchaka43c97312019-09-10 13:02:30 +03009443 PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
9444 Py_INCREF(tmp2);
Victor Stinner74419f02020-07-03 11:35:37 +02009445 res = obj2ast_expr(state, tmp2, &val, arena);
Serhiy Storchaka43c97312019-09-10 13:02:30 +03009446 Py_DECREF(tmp2);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009447 if (res != 0) goto failed;
Serhiy Storchakacf380602016-10-07 21:51:28 +03009448 if (len != PyList_GET_SIZE(tmp)) {
9449 PyErr_SetString(PyExc_RuntimeError, "arguments field \"kw_defaults\" changed size during iteration");
9450 goto failed;
9451 }
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07009452 asdl_seq_SET(kw_defaults, i, val);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009453 }
Victor Stinner1acc1292013-07-27 00:03:47 +02009454 Py_CLEAR(tmp);
Serhiy Storchakaf320be72018-01-25 10:49:40 +02009455 }
Victor Stinner74419f02020-07-03 11:35:37 +02009456 if (_PyObject_LookupAttr(obj, state->kwarg, &tmp) < 0) {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009457 return 1;
9458 }
Serhiy Storchakaf320be72018-01-25 10:49:40 +02009459 if (tmp == NULL || tmp == Py_None) {
9460 Py_CLEAR(tmp);
9461 kwarg = NULL;
9462 }
9463 else {
Victor Stinneree4b59c2013-07-27 00:01:35 +02009464 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02009465 res = obj2ast_arg(state, tmp, &kwarg, arena);
Victor Stinneree4b59c2013-07-27 00:01:35 +02009466 if (res != 0) goto failed;
Victor Stinnerb3189902013-07-27 00:04:42 +02009467 Py_CLEAR(tmp);
Victor Stinneree4b59c2013-07-27 00:01:35 +02009468 }
Victor Stinner74419f02020-07-03 11:35:37 +02009469 if (_PyObject_LookupAttr(obj, state->defaults, &tmp) < 0) {
Serhiy Storchakaf320be72018-01-25 10:49:40 +02009470 return 1;
9471 }
9472 if (tmp == NULL) {
9473 PyErr_SetString(PyExc_TypeError, "required field \"defaults\" missing from arguments");
9474 return 1;
9475 }
9476 else {
Victor Stinneree4b59c2013-07-27 00:01:35 +02009477 int res;
9478 Py_ssize_t len;
9479 Py_ssize_t i;
Victor Stinneree4b59c2013-07-27 00:01:35 +02009480 if (!PyList_Check(tmp)) {
Dino Viehlandac46eb42019-09-11 10:16:34 -07009481 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 +02009482 goto failed;
9483 }
9484 len = PyList_GET_SIZE(tmp);
Pablo Galindoa5634c42020-09-16 19:42:00 +01009485 defaults = _Py_asdl_expr_seq_new(len, arena);
Victor Stinneree4b59c2013-07-27 00:01:35 +02009486 if (defaults == NULL) goto failed;
9487 for (i = 0; i < len; i++) {
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07009488 expr_ty val;
Serhiy Storchaka43c97312019-09-10 13:02:30 +03009489 PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
9490 Py_INCREF(tmp2);
Victor Stinner74419f02020-07-03 11:35:37 +02009491 res = obj2ast_expr(state, tmp2, &val, arena);
Serhiy Storchaka43c97312019-09-10 13:02:30 +03009492 Py_DECREF(tmp2);
Victor Stinneree4b59c2013-07-27 00:01:35 +02009493 if (res != 0) goto failed;
Serhiy Storchakacf380602016-10-07 21:51:28 +03009494 if (len != PyList_GET_SIZE(tmp)) {
9495 PyErr_SetString(PyExc_RuntimeError, "arguments field \"defaults\" changed size during iteration");
9496 goto failed;
9497 }
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07009498 asdl_seq_SET(defaults, i, val);
Victor Stinneree4b59c2013-07-27 00:01:35 +02009499 }
Victor Stinnerb3189902013-07-27 00:04:42 +02009500 Py_CLEAR(tmp);
Victor Stinneree4b59c2013-07-27 00:01:35 +02009501 }
Victor Stinnerd27f8d22021-04-07 21:34:22 +02009502 *out = _PyAST_arguments(posonlyargs, args, vararg, kwonlyargs, kw_defaults,
9503 kwarg, defaults, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009504 return 0;
9505failed:
9506 Py_XDECREF(tmp);
9507 return 1;
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00009508}
9509
9510int
Victor Stinner5cf47822020-11-02 22:03:28 +01009511obj2ast_arg(struct ast_state *state, PyObject* obj, arg_ty* out, PyArena* arena)
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00009512{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009513 PyObject* tmp = NULL;
9514 identifier arg;
9515 expr_ty annotation;
Guido van Rossumdcfcd142019-01-31 03:40:27 -08009516 string type_comment;
Victor Stinnerc106c682015-11-06 17:01:48 +01009517 int lineno;
9518 int col_offset;
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00009519 int end_lineno;
9520 int end_col_offset;
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00009521
Victor Stinner74419f02020-07-03 11:35:37 +02009522 if (_PyObject_LookupAttr(obj, state->arg, &tmp) < 0) {
Serhiy Storchakaf320be72018-01-25 10:49:40 +02009523 return 1;
9524 }
9525 if (tmp == NULL) {
9526 PyErr_SetString(PyExc_TypeError, "required field \"arg\" missing from arg");
9527 return 1;
9528 }
9529 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009530 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02009531 res = obj2ast_identifier(state, tmp, &arg, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009532 if (res != 0) goto failed;
Victor Stinner1acc1292013-07-27 00:03:47 +02009533 Py_CLEAR(tmp);
Serhiy Storchakaf320be72018-01-25 10:49:40 +02009534 }
Victor Stinner74419f02020-07-03 11:35:37 +02009535 if (_PyObject_LookupAttr(obj, state->annotation, &tmp) < 0) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00009536 return 1;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009537 }
Serhiy Storchakaf320be72018-01-25 10:49:40 +02009538 if (tmp == NULL || tmp == Py_None) {
9539 Py_CLEAR(tmp);
9540 annotation = NULL;
9541 }
9542 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009543 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02009544 res = obj2ast_expr(state, tmp, &annotation, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009545 if (res != 0) goto failed;
Victor Stinner1acc1292013-07-27 00:03:47 +02009546 Py_CLEAR(tmp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009547 }
Victor Stinner74419f02020-07-03 11:35:37 +02009548 if (_PyObject_LookupAttr(obj, state->type_comment, &tmp) < 0) {
Guido van Rossumdcfcd142019-01-31 03:40:27 -08009549 return 1;
9550 }
9551 if (tmp == NULL || tmp == Py_None) {
9552 Py_CLEAR(tmp);
9553 type_comment = NULL;
9554 }
9555 else {
9556 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02009557 res = obj2ast_string(state, tmp, &type_comment, arena);
Guido van Rossumdcfcd142019-01-31 03:40:27 -08009558 if (res != 0) goto failed;
9559 Py_CLEAR(tmp);
9560 }
Victor Stinner74419f02020-07-03 11:35:37 +02009561 if (_PyObject_LookupAttr(obj, state->lineno, &tmp) < 0) {
Serhiy Storchakaf320be72018-01-25 10:49:40 +02009562 return 1;
9563 }
9564 if (tmp == NULL) {
9565 PyErr_SetString(PyExc_TypeError, "required field \"lineno\" missing from arg");
9566 return 1;
9567 }
9568 else {
Victor Stinnerc106c682015-11-06 17:01:48 +01009569 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02009570 res = obj2ast_int(state, tmp, &lineno, arena);
Victor Stinnerc106c682015-11-06 17:01:48 +01009571 if (res != 0) goto failed;
9572 Py_CLEAR(tmp);
Serhiy Storchakaf320be72018-01-25 10:49:40 +02009573 }
Victor Stinner74419f02020-07-03 11:35:37 +02009574 if (_PyObject_LookupAttr(obj, state->col_offset, &tmp) < 0) {
Victor Stinnerc106c682015-11-06 17:01:48 +01009575 return 1;
9576 }
Serhiy Storchakaf320be72018-01-25 10:49:40 +02009577 if (tmp == NULL) {
9578 PyErr_SetString(PyExc_TypeError, "required field \"col_offset\" missing from arg");
9579 return 1;
9580 }
9581 else {
Victor Stinnerc106c682015-11-06 17:01:48 +01009582 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02009583 res = obj2ast_int(state, tmp, &col_offset, arena);
Victor Stinnerc106c682015-11-06 17:01:48 +01009584 if (res != 0) goto failed;
9585 Py_CLEAR(tmp);
Victor Stinnerc106c682015-11-06 17:01:48 +01009586 }
Victor Stinner74419f02020-07-03 11:35:37 +02009587 if (_PyObject_LookupAttr(obj, state->end_lineno, &tmp) < 0) {
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00009588 return 1;
9589 }
9590 if (tmp == NULL || tmp == Py_None) {
9591 Py_CLEAR(tmp);
9592 end_lineno = 0;
9593 }
9594 else {
9595 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02009596 res = obj2ast_int(state, tmp, &end_lineno, arena);
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00009597 if (res != 0) goto failed;
9598 Py_CLEAR(tmp);
9599 }
Victor Stinner74419f02020-07-03 11:35:37 +02009600 if (_PyObject_LookupAttr(obj, state->end_col_offset, &tmp) < 0) {
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00009601 return 1;
9602 }
9603 if (tmp == NULL || tmp == Py_None) {
9604 Py_CLEAR(tmp);
9605 end_col_offset = 0;
9606 }
9607 else {
9608 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02009609 res = obj2ast_int(state, tmp, &end_col_offset, arena);
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00009610 if (res != 0) goto failed;
9611 Py_CLEAR(tmp);
9612 }
Victor Stinnerd27f8d22021-04-07 21:34:22 +02009613 *out = _PyAST_arg(arg, annotation, type_comment, lineno, col_offset,
9614 end_lineno, end_col_offset, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009615 return 0;
9616failed:
9617 Py_XDECREF(tmp);
9618 return 1;
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00009619}
9620
9621int
Victor Stinner5cf47822020-11-02 22:03:28 +01009622obj2ast_keyword(struct ast_state *state, PyObject* obj, keyword_ty* out,
9623 PyArena* arena)
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00009624{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009625 PyObject* tmp = NULL;
9626 identifier arg;
9627 expr_ty value;
Pablo Galindo168660b2020-04-02 00:47:39 +01009628 int lineno;
9629 int col_offset;
9630 int end_lineno;
9631 int end_col_offset;
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00009632
Victor Stinner74419f02020-07-03 11:35:37 +02009633 if (_PyObject_LookupAttr(obj, state->arg, &tmp) < 0) {
Serhiy Storchakaf320be72018-01-25 10:49:40 +02009634 return 1;
9635 }
9636 if (tmp == NULL || tmp == Py_None) {
9637 Py_CLEAR(tmp);
9638 arg = NULL;
9639 }
9640 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009641 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02009642 res = obj2ast_identifier(state, tmp, &arg, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009643 if (res != 0) goto failed;
Victor Stinner1acc1292013-07-27 00:03:47 +02009644 Py_CLEAR(tmp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009645 }
Victor Stinner74419f02020-07-03 11:35:37 +02009646 if (_PyObject_LookupAttr(obj, state->value, &tmp) < 0) {
Serhiy Storchakaf320be72018-01-25 10:49:40 +02009647 return 1;
9648 }
9649 if (tmp == NULL) {
9650 PyErr_SetString(PyExc_TypeError, "required field \"value\" missing from keyword");
9651 return 1;
9652 }
9653 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009654 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02009655 res = obj2ast_expr(state, tmp, &value, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009656 if (res != 0) goto failed;
Victor Stinner1acc1292013-07-27 00:03:47 +02009657 Py_CLEAR(tmp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009658 }
Victor Stinner74419f02020-07-03 11:35:37 +02009659 if (_PyObject_LookupAttr(obj, state->lineno, &tmp) < 0) {
Pablo Galindo168660b2020-04-02 00:47:39 +01009660 return 1;
9661 }
9662 if (tmp == NULL) {
9663 PyErr_SetString(PyExc_TypeError, "required field \"lineno\" missing from keyword");
9664 return 1;
9665 }
9666 else {
9667 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02009668 res = obj2ast_int(state, tmp, &lineno, arena);
Pablo Galindo168660b2020-04-02 00:47:39 +01009669 if (res != 0) goto failed;
9670 Py_CLEAR(tmp);
9671 }
Victor Stinner74419f02020-07-03 11:35:37 +02009672 if (_PyObject_LookupAttr(obj, state->col_offset, &tmp) < 0) {
Pablo Galindo168660b2020-04-02 00:47:39 +01009673 return 1;
9674 }
9675 if (tmp == NULL) {
9676 PyErr_SetString(PyExc_TypeError, "required field \"col_offset\" missing from keyword");
9677 return 1;
9678 }
9679 else {
9680 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02009681 res = obj2ast_int(state, tmp, &col_offset, arena);
Pablo Galindo168660b2020-04-02 00:47:39 +01009682 if (res != 0) goto failed;
9683 Py_CLEAR(tmp);
9684 }
Victor Stinner74419f02020-07-03 11:35:37 +02009685 if (_PyObject_LookupAttr(obj, state->end_lineno, &tmp) < 0) {
Pablo Galindo168660b2020-04-02 00:47:39 +01009686 return 1;
9687 }
9688 if (tmp == NULL || tmp == Py_None) {
9689 Py_CLEAR(tmp);
9690 end_lineno = 0;
9691 }
9692 else {
9693 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02009694 res = obj2ast_int(state, tmp, &end_lineno, arena);
Pablo Galindo168660b2020-04-02 00:47:39 +01009695 if (res != 0) goto failed;
9696 Py_CLEAR(tmp);
9697 }
Victor Stinner74419f02020-07-03 11:35:37 +02009698 if (_PyObject_LookupAttr(obj, state->end_col_offset, &tmp) < 0) {
Pablo Galindo168660b2020-04-02 00:47:39 +01009699 return 1;
9700 }
9701 if (tmp == NULL || tmp == Py_None) {
9702 Py_CLEAR(tmp);
9703 end_col_offset = 0;
9704 }
9705 else {
9706 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02009707 res = obj2ast_int(state, tmp, &end_col_offset, arena);
Pablo Galindo168660b2020-04-02 00:47:39 +01009708 if (res != 0) goto failed;
9709 Py_CLEAR(tmp);
9710 }
Victor Stinnerd27f8d22021-04-07 21:34:22 +02009711 *out = _PyAST_keyword(arg, value, lineno, col_offset, end_lineno,
9712 end_col_offset, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009713 return 0;
9714failed:
9715 Py_XDECREF(tmp);
9716 return 1;
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00009717}
9718
9719int
Victor Stinner5cf47822020-11-02 22:03:28 +01009720obj2ast_alias(struct ast_state *state, PyObject* obj, alias_ty* out, PyArena*
Victor Stinner74419f02020-07-03 11:35:37 +02009721 arena)
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00009722{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009723 PyObject* tmp = NULL;
9724 identifier name;
9725 identifier asname;
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00009726
Victor Stinner74419f02020-07-03 11:35:37 +02009727 if (_PyObject_LookupAttr(obj, state->name, &tmp) < 0) {
Serhiy Storchakaf320be72018-01-25 10:49:40 +02009728 return 1;
9729 }
9730 if (tmp == NULL) {
9731 PyErr_SetString(PyExc_TypeError, "required field \"name\" missing from alias");
9732 return 1;
9733 }
9734 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009735 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02009736 res = obj2ast_identifier(state, tmp, &name, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009737 if (res != 0) goto failed;
Victor Stinner1acc1292013-07-27 00:03:47 +02009738 Py_CLEAR(tmp);
Serhiy Storchakaf320be72018-01-25 10:49:40 +02009739 }
Victor Stinner74419f02020-07-03 11:35:37 +02009740 if (_PyObject_LookupAttr(obj, state->asname, &tmp) < 0) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00009741 return 1;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009742 }
Serhiy Storchakaf320be72018-01-25 10:49:40 +02009743 if (tmp == NULL || tmp == Py_None) {
9744 Py_CLEAR(tmp);
9745 asname = NULL;
9746 }
9747 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009748 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02009749 res = obj2ast_identifier(state, tmp, &asname, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009750 if (res != 0) goto failed;
Victor Stinner1acc1292013-07-27 00:03:47 +02009751 Py_CLEAR(tmp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009752 }
Victor Stinnerd27f8d22021-04-07 21:34:22 +02009753 *out = _PyAST_alias(name, asname, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009754 return 0;
9755failed:
9756 Py_XDECREF(tmp);
9757 return 1;
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00009758}
9759
Benjamin Petersonbf1bbc12011-05-27 13:58:08 -05009760int
Victor Stinner5cf47822020-11-02 22:03:28 +01009761obj2ast_withitem(struct ast_state *state, PyObject* obj, withitem_ty* out,
Victor Stinner74419f02020-07-03 11:35:37 +02009762 PyArena* arena)
Benjamin Petersonbf1bbc12011-05-27 13:58:08 -05009763{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009764 PyObject* tmp = NULL;
9765 expr_ty context_expr;
9766 expr_ty optional_vars;
Benjamin Petersonbf1bbc12011-05-27 13:58:08 -05009767
Victor Stinner74419f02020-07-03 11:35:37 +02009768 if (_PyObject_LookupAttr(obj, state->context_expr, &tmp) < 0) {
Serhiy Storchakaf320be72018-01-25 10:49:40 +02009769 return 1;
9770 }
9771 if (tmp == NULL) {
9772 PyErr_SetString(PyExc_TypeError, "required field \"context_expr\" missing from withitem");
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_expr(state, tmp, &context_expr, 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->optional_vars, &tmp) < 0) {
Benjamin Petersonbf1bbc12011-05-27 13:58:08 -05009782 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 optional_vars = NULL;
9787 }
9788 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009789 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02009790 res = obj2ast_expr(state, tmp, &optional_vars, 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 }
Victor Stinnerd27f8d22021-04-07 21:34:22 +02009794 *out = _PyAST_withitem(context_expr, optional_vars, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009795 return 0;
9796failed:
9797 Py_XDECREF(tmp);
9798 return 1;
Benjamin Petersonbf1bbc12011-05-27 13:58:08 -05009799}
9800
Guido van Rossumdcfcd142019-01-31 03:40:27 -08009801int
Brandt Bucher145bf262021-02-26 14:51:55 -08009802obj2ast_match_case(struct ast_state *state, PyObject* obj, match_case_ty* out,
9803 PyArena* arena)
9804{
9805 PyObject* tmp = NULL;
9806 expr_ty pattern;
9807 expr_ty guard;
9808 asdl_stmt_seq* body;
9809
9810 if (_PyObject_LookupAttr(obj, state->pattern, &tmp) < 0) {
9811 return 1;
9812 }
9813 if (tmp == NULL) {
9814 PyErr_SetString(PyExc_TypeError, "required field \"pattern\" missing from match_case");
9815 return 1;
9816 }
9817 else {
9818 int res;
9819 res = obj2ast_expr(state, tmp, &pattern, arena);
9820 if (res != 0) goto failed;
9821 Py_CLEAR(tmp);
9822 }
9823 if (_PyObject_LookupAttr(obj, state->guard, &tmp) < 0) {
9824 return 1;
9825 }
9826 if (tmp == NULL || tmp == Py_None) {
9827 Py_CLEAR(tmp);
9828 guard = NULL;
9829 }
9830 else {
9831 int res;
9832 res = obj2ast_expr(state, tmp, &guard, arena);
9833 if (res != 0) goto failed;
9834 Py_CLEAR(tmp);
9835 }
9836 if (_PyObject_LookupAttr(obj, state->body, &tmp) < 0) {
9837 return 1;
9838 }
9839 if (tmp == NULL) {
9840 PyErr_SetString(PyExc_TypeError, "required field \"body\" missing from match_case");
9841 return 1;
9842 }
9843 else {
9844 int res;
9845 Py_ssize_t len;
9846 Py_ssize_t i;
9847 if (!PyList_Check(tmp)) {
9848 PyErr_Format(PyExc_TypeError, "match_case field \"body\" must be a list, not a %.200s", _PyType_Name(Py_TYPE(tmp)));
9849 goto failed;
9850 }
9851 len = PyList_GET_SIZE(tmp);
9852 body = _Py_asdl_stmt_seq_new(len, arena);
9853 if (body == NULL) goto failed;
9854 for (i = 0; i < len; i++) {
9855 stmt_ty val;
9856 PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
9857 Py_INCREF(tmp2);
9858 res = obj2ast_stmt(state, tmp2, &val, arena);
9859 Py_DECREF(tmp2);
9860 if (res != 0) goto failed;
9861 if (len != PyList_GET_SIZE(tmp)) {
9862 PyErr_SetString(PyExc_RuntimeError, "match_case field \"body\" changed size during iteration");
9863 goto failed;
9864 }
9865 asdl_seq_SET(body, i, val);
9866 }
9867 Py_CLEAR(tmp);
9868 }
Victor Stinnerd27f8d22021-04-07 21:34:22 +02009869 *out = _PyAST_match_case(pattern, guard, body, arena);
Brandt Bucher145bf262021-02-26 14:51:55 -08009870 return 0;
9871failed:
9872 Py_XDECREF(tmp);
9873 return 1;
9874}
9875
9876int
Victor Stinner5cf47822020-11-02 22:03:28 +01009877obj2ast_type_ignore(struct ast_state *state, PyObject* obj, type_ignore_ty*
9878 out, PyArena* arena)
Guido van Rossumdcfcd142019-01-31 03:40:27 -08009879{
9880 int isinstance;
9881
9882 PyObject *tmp = NULL;
Dino Viehlandac46eb42019-09-11 10:16:34 -07009883 PyObject *tp;
Guido van Rossumdcfcd142019-01-31 03:40:27 -08009884
9885 if (obj == Py_None) {
9886 *out = NULL;
9887 return 0;
9888 }
Victor Stinner74419f02020-07-03 11:35:37 +02009889 tp = state->TypeIgnore_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07009890 isinstance = PyObject_IsInstance(obj, tp);
Guido van Rossumdcfcd142019-01-31 03:40:27 -08009891 if (isinstance == -1) {
9892 return 1;
9893 }
9894 if (isinstance) {
9895 int lineno;
Michael J. Sullivan933e1502019-05-22 07:54:20 -07009896 string tag;
Guido van Rossumdcfcd142019-01-31 03:40:27 -08009897
Victor Stinner74419f02020-07-03 11:35:37 +02009898 if (_PyObject_LookupAttr(obj, state->lineno, &tmp) < 0) {
Guido van Rossumdcfcd142019-01-31 03:40:27 -08009899 return 1;
9900 }
9901 if (tmp == NULL) {
9902 PyErr_SetString(PyExc_TypeError, "required field \"lineno\" missing from TypeIgnore");
9903 return 1;
9904 }
9905 else {
9906 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02009907 res = obj2ast_int(state, tmp, &lineno, arena);
Guido van Rossumdcfcd142019-01-31 03:40:27 -08009908 if (res != 0) goto failed;
9909 Py_CLEAR(tmp);
9910 }
Victor Stinner74419f02020-07-03 11:35:37 +02009911 if (_PyObject_LookupAttr(obj, state->tag, &tmp) < 0) {
Michael J. Sullivan933e1502019-05-22 07:54:20 -07009912 return 1;
9913 }
9914 if (tmp == NULL) {
9915 PyErr_SetString(PyExc_TypeError, "required field \"tag\" missing from TypeIgnore");
9916 return 1;
9917 }
9918 else {
9919 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02009920 res = obj2ast_string(state, tmp, &tag, arena);
Michael J. Sullivan933e1502019-05-22 07:54:20 -07009921 if (res != 0) goto failed;
9922 Py_CLEAR(tmp);
9923 }
Victor Stinnerd27f8d22021-04-07 21:34:22 +02009924 *out = _PyAST_TypeIgnore(lineno, tag, arena);
Guido van Rossumdcfcd142019-01-31 03:40:27 -08009925 if (*out == NULL) goto failed;
9926 return 0;
9927 }
9928
9929 PyErr_Format(PyExc_TypeError, "expected some sort of type_ignore, but got %R", obj);
9930 failed:
9931 Py_XDECREF(tmp);
9932 return 1;
9933}
9934
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00009935
Victor Stinnerb1cc6ba2020-07-03 20:01:46 +02009936static int
9937astmodule_exec(PyObject *m)
Martin v. Löwis577b5b92006-02-27 15:23:19 +00009938{
Victor Stinner5cf47822020-11-02 22:03:28 +01009939 struct ast_state *state = get_ast_state();
9940 if (state == NULL) {
Victor Stinnerb1cc6ba2020-07-03 20:01:46 +02009941 return -1;
Victor Stinner91e1bc12020-07-03 14:15:53 +02009942 }
Victor Stinner18ce7f12020-11-04 16:37:07 +01009943 if (PyModule_AddObjectRef(m, "AST", state->AST_type) < 0) {
Victor Stinnerb1cc6ba2020-07-03 20:01:46 +02009944 return -1;
Brandt Bucherd2f96672020-02-06 06:45:46 -08009945 }
Brandt Bucherd2f96672020-02-06 06:45:46 -08009946 if (PyModule_AddIntMacro(m, PyCF_ALLOW_TOP_LEVEL_AWAIT) < 0) {
Victor Stinnerb1cc6ba2020-07-03 20:01:46 +02009947 return -1;
Brandt Bucherd2f96672020-02-06 06:45:46 -08009948 }
9949 if (PyModule_AddIntMacro(m, PyCF_ONLY_AST) < 0) {
Victor Stinnerb1cc6ba2020-07-03 20:01:46 +02009950 return -1;
Brandt Bucherd2f96672020-02-06 06:45:46 -08009951 }
9952 if (PyModule_AddIntMacro(m, PyCF_TYPE_COMMENTS) < 0) {
Victor Stinnerb1cc6ba2020-07-03 20:01:46 +02009953 return -1;
Brandt Bucherd2f96672020-02-06 06:45:46 -08009954 }
Victor Stinner18ce7f12020-11-04 16:37:07 +01009955 if (PyModule_AddObjectRef(m, "mod", state->mod_type) < 0) {
Victor Stinnerb1cc6ba2020-07-03 20:01:46 +02009956 return -1;
Brandt Bucherd2f96672020-02-06 06:45:46 -08009957 }
Victor Stinner18ce7f12020-11-04 16:37:07 +01009958 if (PyModule_AddObjectRef(m, "Module", state->Module_type) < 0) {
Victor Stinnerb1cc6ba2020-07-03 20:01:46 +02009959 return -1;
Brandt Bucherd2f96672020-02-06 06:45:46 -08009960 }
Victor Stinner18ce7f12020-11-04 16:37:07 +01009961 if (PyModule_AddObjectRef(m, "Interactive", state->Interactive_type) < 0) {
Victor Stinnerb1cc6ba2020-07-03 20:01:46 +02009962 return -1;
Brandt Bucherd2f96672020-02-06 06:45:46 -08009963 }
Victor Stinner18ce7f12020-11-04 16:37:07 +01009964 if (PyModule_AddObjectRef(m, "Expression", state->Expression_type) < 0) {
Victor Stinnerb1cc6ba2020-07-03 20:01:46 +02009965 return -1;
Brandt Bucherd2f96672020-02-06 06:45:46 -08009966 }
Victor Stinner18ce7f12020-11-04 16:37:07 +01009967 if (PyModule_AddObjectRef(m, "FunctionType", state->FunctionType_type) < 0)
9968 {
Victor Stinnerb1cc6ba2020-07-03 20:01:46 +02009969 return -1;
Brandt Bucherd2f96672020-02-06 06:45:46 -08009970 }
Victor Stinner18ce7f12020-11-04 16:37:07 +01009971 if (PyModule_AddObjectRef(m, "stmt", state->stmt_type) < 0) {
Victor Stinnerb1cc6ba2020-07-03 20:01:46 +02009972 return -1;
Brandt Bucherd2f96672020-02-06 06:45:46 -08009973 }
Victor Stinner18ce7f12020-11-04 16:37:07 +01009974 if (PyModule_AddObjectRef(m, "FunctionDef", state->FunctionDef_type) < 0) {
Victor Stinnerb1cc6ba2020-07-03 20:01:46 +02009975 return -1;
Brandt Bucherd2f96672020-02-06 06:45:46 -08009976 }
Victor Stinner18ce7f12020-11-04 16:37:07 +01009977 if (PyModule_AddObjectRef(m, "AsyncFunctionDef",
9978 state->AsyncFunctionDef_type) < 0) {
9979 return -1;
9980 }
9981 if (PyModule_AddObjectRef(m, "ClassDef", state->ClassDef_type) < 0) {
9982 return -1;
9983 }
9984 if (PyModule_AddObjectRef(m, "Return", state->Return_type) < 0) {
9985 return -1;
9986 }
9987 if (PyModule_AddObjectRef(m, "Delete", state->Delete_type) < 0) {
9988 return -1;
9989 }
9990 if (PyModule_AddObjectRef(m, "Assign", state->Assign_type) < 0) {
9991 return -1;
9992 }
9993 if (PyModule_AddObjectRef(m, "AugAssign", state->AugAssign_type) < 0) {
9994 return -1;
9995 }
9996 if (PyModule_AddObjectRef(m, "AnnAssign", state->AnnAssign_type) < 0) {
9997 return -1;
9998 }
9999 if (PyModule_AddObjectRef(m, "For", state->For_type) < 0) {
10000 return -1;
10001 }
10002 if (PyModule_AddObjectRef(m, "AsyncFor", state->AsyncFor_type) < 0) {
10003 return -1;
10004 }
10005 if (PyModule_AddObjectRef(m, "While", state->While_type) < 0) {
10006 return -1;
10007 }
10008 if (PyModule_AddObjectRef(m, "If", state->If_type) < 0) {
10009 return -1;
10010 }
10011 if (PyModule_AddObjectRef(m, "With", state->With_type) < 0) {
10012 return -1;
10013 }
10014 if (PyModule_AddObjectRef(m, "AsyncWith", state->AsyncWith_type) < 0) {
10015 return -1;
10016 }
Brandt Bucher145bf262021-02-26 14:51:55 -080010017 if (PyModule_AddObjectRef(m, "Match", state->Match_type) < 0) {
10018 return -1;
10019 }
Victor Stinner18ce7f12020-11-04 16:37:07 +010010020 if (PyModule_AddObjectRef(m, "Raise", state->Raise_type) < 0) {
10021 return -1;
10022 }
10023 if (PyModule_AddObjectRef(m, "Try", state->Try_type) < 0) {
10024 return -1;
10025 }
10026 if (PyModule_AddObjectRef(m, "Assert", state->Assert_type) < 0) {
10027 return -1;
10028 }
10029 if (PyModule_AddObjectRef(m, "Import", state->Import_type) < 0) {
10030 return -1;
10031 }
10032 if (PyModule_AddObjectRef(m, "ImportFrom", state->ImportFrom_type) < 0) {
10033 return -1;
10034 }
10035 if (PyModule_AddObjectRef(m, "Global", state->Global_type) < 0) {
10036 return -1;
10037 }
10038 if (PyModule_AddObjectRef(m, "Nonlocal", state->Nonlocal_type) < 0) {
10039 return -1;
10040 }
10041 if (PyModule_AddObjectRef(m, "Expr", state->Expr_type) < 0) {
10042 return -1;
10043 }
10044 if (PyModule_AddObjectRef(m, "Pass", state->Pass_type) < 0) {
10045 return -1;
10046 }
10047 if (PyModule_AddObjectRef(m, "Break", state->Break_type) < 0) {
10048 return -1;
10049 }
10050 if (PyModule_AddObjectRef(m, "Continue", state->Continue_type) < 0) {
10051 return -1;
10052 }
10053 if (PyModule_AddObjectRef(m, "expr", state->expr_type) < 0) {
10054 return -1;
10055 }
10056 if (PyModule_AddObjectRef(m, "BoolOp", state->BoolOp_type) < 0) {
10057 return -1;
10058 }
10059 if (PyModule_AddObjectRef(m, "NamedExpr", state->NamedExpr_type) < 0) {
10060 return -1;
10061 }
10062 if (PyModule_AddObjectRef(m, "BinOp", state->BinOp_type) < 0) {
10063 return -1;
10064 }
10065 if (PyModule_AddObjectRef(m, "UnaryOp", state->UnaryOp_type) < 0) {
10066 return -1;
10067 }
10068 if (PyModule_AddObjectRef(m, "Lambda", state->Lambda_type) < 0) {
10069 return -1;
10070 }
10071 if (PyModule_AddObjectRef(m, "IfExp", state->IfExp_type) < 0) {
10072 return -1;
10073 }
10074 if (PyModule_AddObjectRef(m, "Dict", state->Dict_type) < 0) {
10075 return -1;
10076 }
10077 if (PyModule_AddObjectRef(m, "Set", state->Set_type) < 0) {
10078 return -1;
10079 }
10080 if (PyModule_AddObjectRef(m, "ListComp", state->ListComp_type) < 0) {
10081 return -1;
10082 }
10083 if (PyModule_AddObjectRef(m, "SetComp", state->SetComp_type) < 0) {
10084 return -1;
10085 }
10086 if (PyModule_AddObjectRef(m, "DictComp", state->DictComp_type) < 0) {
10087 return -1;
10088 }
10089 if (PyModule_AddObjectRef(m, "GeneratorExp", state->GeneratorExp_type) < 0)
10090 {
10091 return -1;
10092 }
10093 if (PyModule_AddObjectRef(m, "Await", state->Await_type) < 0) {
10094 return -1;
10095 }
10096 if (PyModule_AddObjectRef(m, "Yield", state->Yield_type) < 0) {
10097 return -1;
10098 }
10099 if (PyModule_AddObjectRef(m, "YieldFrom", state->YieldFrom_type) < 0) {
10100 return -1;
10101 }
10102 if (PyModule_AddObjectRef(m, "Compare", state->Compare_type) < 0) {
10103 return -1;
10104 }
10105 if (PyModule_AddObjectRef(m, "Call", state->Call_type) < 0) {
10106 return -1;
10107 }
10108 if (PyModule_AddObjectRef(m, "FormattedValue", state->FormattedValue_type)
Brandt Bucherd2f96672020-02-06 06:45:46 -080010109 < 0) {
Victor Stinnerb1cc6ba2020-07-03 20:01:46 +020010110 return -1;
Brandt Bucherd2f96672020-02-06 06:45:46 -080010111 }
Victor Stinner18ce7f12020-11-04 16:37:07 +010010112 if (PyModule_AddObjectRef(m, "JoinedStr", state->JoinedStr_type) < 0) {
Victor Stinnerb1cc6ba2020-07-03 20:01:46 +020010113 return -1;
Victor Stinner74419f02020-07-03 11:35:37 +020010114 }
Victor Stinner18ce7f12020-11-04 16:37:07 +010010115 if (PyModule_AddObjectRef(m, "Constant", state->Constant_type) < 0) {
Victor Stinnerb1cc6ba2020-07-03 20:01:46 +020010116 return -1;
Victor Stinner74419f02020-07-03 11:35:37 +020010117 }
Victor Stinner18ce7f12020-11-04 16:37:07 +010010118 if (PyModule_AddObjectRef(m, "Attribute", state->Attribute_type) < 0) {
Victor Stinnerb1cc6ba2020-07-03 20:01:46 +020010119 return -1;
Victor Stinner74419f02020-07-03 11:35:37 +020010120 }
Victor Stinner18ce7f12020-11-04 16:37:07 +010010121 if (PyModule_AddObjectRef(m, "Subscript", state->Subscript_type) < 0) {
Victor Stinnerb1cc6ba2020-07-03 20:01:46 +020010122 return -1;
Victor Stinner74419f02020-07-03 11:35:37 +020010123 }
Victor Stinner18ce7f12020-11-04 16:37:07 +010010124 if (PyModule_AddObjectRef(m, "Starred", state->Starred_type) < 0) {
Victor Stinnerb1cc6ba2020-07-03 20:01:46 +020010125 return -1;
Victor Stinner74419f02020-07-03 11:35:37 +020010126 }
Victor Stinner18ce7f12020-11-04 16:37:07 +010010127 if (PyModule_AddObjectRef(m, "Name", state->Name_type) < 0) {
Victor Stinnerb1cc6ba2020-07-03 20:01:46 +020010128 return -1;
Victor Stinner74419f02020-07-03 11:35:37 +020010129 }
Victor Stinner18ce7f12020-11-04 16:37:07 +010010130 if (PyModule_AddObjectRef(m, "List", state->List_type) < 0) {
Victor Stinnerb1cc6ba2020-07-03 20:01:46 +020010131 return -1;
Victor Stinner74419f02020-07-03 11:35:37 +020010132 }
Victor Stinner18ce7f12020-11-04 16:37:07 +010010133 if (PyModule_AddObjectRef(m, "Tuple", state->Tuple_type) < 0) {
Victor Stinnerb1cc6ba2020-07-03 20:01:46 +020010134 return -1;
Victor Stinner74419f02020-07-03 11:35:37 +020010135 }
Victor Stinner18ce7f12020-11-04 16:37:07 +010010136 if (PyModule_AddObjectRef(m, "Slice", state->Slice_type) < 0) {
Victor Stinnerb1cc6ba2020-07-03 20:01:46 +020010137 return -1;
Victor Stinner74419f02020-07-03 11:35:37 +020010138 }
Brandt Bucher145bf262021-02-26 14:51:55 -080010139 if (PyModule_AddObjectRef(m, "MatchAs", state->MatchAs_type) < 0) {
10140 return -1;
10141 }
10142 if (PyModule_AddObjectRef(m, "MatchOr", state->MatchOr_type) < 0) {
10143 return -1;
10144 }
Victor Stinner18ce7f12020-11-04 16:37:07 +010010145 if (PyModule_AddObjectRef(m, "expr_context", state->expr_context_type) < 0)
10146 {
Victor Stinnerb1cc6ba2020-07-03 20:01:46 +020010147 return -1;
Victor Stinner74419f02020-07-03 11:35:37 +020010148 }
Victor Stinner18ce7f12020-11-04 16:37:07 +010010149 if (PyModule_AddObjectRef(m, "Load", state->Load_type) < 0) {
Victor Stinnerb1cc6ba2020-07-03 20:01:46 +020010150 return -1;
Victor Stinner74419f02020-07-03 11:35:37 +020010151 }
Victor Stinner18ce7f12020-11-04 16:37:07 +010010152 if (PyModule_AddObjectRef(m, "Store", state->Store_type) < 0) {
Victor Stinnerb1cc6ba2020-07-03 20:01:46 +020010153 return -1;
Victor Stinner74419f02020-07-03 11:35:37 +020010154 }
Victor Stinner18ce7f12020-11-04 16:37:07 +010010155 if (PyModule_AddObjectRef(m, "Del", state->Del_type) < 0) {
Victor Stinnerb1cc6ba2020-07-03 20:01:46 +020010156 return -1;
Victor Stinner74419f02020-07-03 11:35:37 +020010157 }
Victor Stinner18ce7f12020-11-04 16:37:07 +010010158 if (PyModule_AddObjectRef(m, "boolop", state->boolop_type) < 0) {
Victor Stinnerb1cc6ba2020-07-03 20:01:46 +020010159 return -1;
Victor Stinner74419f02020-07-03 11:35:37 +020010160 }
Victor Stinner18ce7f12020-11-04 16:37:07 +010010161 if (PyModule_AddObjectRef(m, "And", state->And_type) < 0) {
Victor Stinnerb1cc6ba2020-07-03 20:01:46 +020010162 return -1;
Victor Stinner74419f02020-07-03 11:35:37 +020010163 }
Victor Stinner18ce7f12020-11-04 16:37:07 +010010164 if (PyModule_AddObjectRef(m, "Or", state->Or_type) < 0) {
Victor Stinnerb1cc6ba2020-07-03 20:01:46 +020010165 return -1;
Victor Stinner74419f02020-07-03 11:35:37 +020010166 }
Victor Stinner18ce7f12020-11-04 16:37:07 +010010167 if (PyModule_AddObjectRef(m, "operator", state->operator_type) < 0) {
Victor Stinnerb1cc6ba2020-07-03 20:01:46 +020010168 return -1;
Victor Stinner74419f02020-07-03 11:35:37 +020010169 }
Victor Stinner18ce7f12020-11-04 16:37:07 +010010170 if (PyModule_AddObjectRef(m, "Add", state->Add_type) < 0) {
Victor Stinnerb1cc6ba2020-07-03 20:01:46 +020010171 return -1;
Victor Stinner74419f02020-07-03 11:35:37 +020010172 }
Victor Stinner18ce7f12020-11-04 16:37:07 +010010173 if (PyModule_AddObjectRef(m, "Sub", state->Sub_type) < 0) {
Victor Stinnerb1cc6ba2020-07-03 20:01:46 +020010174 return -1;
Victor Stinner74419f02020-07-03 11:35:37 +020010175 }
Victor Stinner18ce7f12020-11-04 16:37:07 +010010176 if (PyModule_AddObjectRef(m, "Mult", state->Mult_type) < 0) {
Victor Stinnerb1cc6ba2020-07-03 20:01:46 +020010177 return -1;
Victor Stinner74419f02020-07-03 11:35:37 +020010178 }
Victor Stinner18ce7f12020-11-04 16:37:07 +010010179 if (PyModule_AddObjectRef(m, "MatMult", state->MatMult_type) < 0) {
Victor Stinnerb1cc6ba2020-07-03 20:01:46 +020010180 return -1;
Victor Stinner74419f02020-07-03 11:35:37 +020010181 }
Victor Stinner18ce7f12020-11-04 16:37:07 +010010182 if (PyModule_AddObjectRef(m, "Div", state->Div_type) < 0) {
Victor Stinnerb1cc6ba2020-07-03 20:01:46 +020010183 return -1;
Victor Stinner74419f02020-07-03 11:35:37 +020010184 }
Victor Stinner18ce7f12020-11-04 16:37:07 +010010185 if (PyModule_AddObjectRef(m, "Mod", state->Mod_type) < 0) {
Victor Stinnerb1cc6ba2020-07-03 20:01:46 +020010186 return -1;
Victor Stinner74419f02020-07-03 11:35:37 +020010187 }
Victor Stinner18ce7f12020-11-04 16:37:07 +010010188 if (PyModule_AddObjectRef(m, "Pow", state->Pow_type) < 0) {
Victor Stinnerb1cc6ba2020-07-03 20:01:46 +020010189 return -1;
Victor Stinner74419f02020-07-03 11:35:37 +020010190 }
Victor Stinner18ce7f12020-11-04 16:37:07 +010010191 if (PyModule_AddObjectRef(m, "LShift", state->LShift_type) < 0) {
Victor Stinnerb1cc6ba2020-07-03 20:01:46 +020010192 return -1;
Victor Stinner74419f02020-07-03 11:35:37 +020010193 }
Victor Stinner18ce7f12020-11-04 16:37:07 +010010194 if (PyModule_AddObjectRef(m, "RShift", state->RShift_type) < 0) {
Victor Stinnerb1cc6ba2020-07-03 20:01:46 +020010195 return -1;
Victor Stinner74419f02020-07-03 11:35:37 +020010196 }
Victor Stinner18ce7f12020-11-04 16:37:07 +010010197 if (PyModule_AddObjectRef(m, "BitOr", state->BitOr_type) < 0) {
Victor Stinnerb1cc6ba2020-07-03 20:01:46 +020010198 return -1;
Victor Stinner74419f02020-07-03 11:35:37 +020010199 }
Victor Stinner18ce7f12020-11-04 16:37:07 +010010200 if (PyModule_AddObjectRef(m, "BitXor", state->BitXor_type) < 0) {
Victor Stinnerb1cc6ba2020-07-03 20:01:46 +020010201 return -1;
Victor Stinner74419f02020-07-03 11:35:37 +020010202 }
Victor Stinner18ce7f12020-11-04 16:37:07 +010010203 if (PyModule_AddObjectRef(m, "BitAnd", state->BitAnd_type) < 0) {
Victor Stinnerb1cc6ba2020-07-03 20:01:46 +020010204 return -1;
Victor Stinner74419f02020-07-03 11:35:37 +020010205 }
Victor Stinner18ce7f12020-11-04 16:37:07 +010010206 if (PyModule_AddObjectRef(m, "FloorDiv", state->FloorDiv_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, "unaryop", state->unaryop_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, "Invert", state->Invert_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, "Not", state->Not_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, "UAdd", state->UAdd_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, "USub", state->USub_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, "cmpop", state->cmpop_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, "Eq", state->Eq_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, "NotEq", state->NotEq_type) < 0) {
Victor Stinnerb1cc6ba2020-07-03 20:01:46 +020010231 return -1;
Victor Stinner74419f02020-07-03 11:35:37 +020010232 }
Victor Stinner18ce7f12020-11-04 16:37:07 +010010233 if (PyModule_AddObjectRef(m, "Lt", state->Lt_type) < 0) {
Victor Stinnerb1cc6ba2020-07-03 20:01:46 +020010234 return -1;
Victor Stinner74419f02020-07-03 11:35:37 +020010235 }
Victor Stinner18ce7f12020-11-04 16:37:07 +010010236 if (PyModule_AddObjectRef(m, "LtE", state->LtE_type) < 0) {
Victor Stinnerb1cc6ba2020-07-03 20:01:46 +020010237 return -1;
Victor Stinner74419f02020-07-03 11:35:37 +020010238 }
Victor Stinner18ce7f12020-11-04 16:37:07 +010010239 if (PyModule_AddObjectRef(m, "Gt", state->Gt_type) < 0) {
Victor Stinnerb1cc6ba2020-07-03 20:01:46 +020010240 return -1;
Victor Stinner74419f02020-07-03 11:35:37 +020010241 }
Victor Stinner18ce7f12020-11-04 16:37:07 +010010242 if (PyModule_AddObjectRef(m, "GtE", state->GtE_type) < 0) {
10243 return -1;
10244 }
10245 if (PyModule_AddObjectRef(m, "Is", state->Is_type) < 0) {
10246 return -1;
10247 }
10248 if (PyModule_AddObjectRef(m, "IsNot", state->IsNot_type) < 0) {
10249 return -1;
10250 }
10251 if (PyModule_AddObjectRef(m, "In", state->In_type) < 0) {
10252 return -1;
10253 }
10254 if (PyModule_AddObjectRef(m, "NotIn", state->NotIn_type) < 0) {
10255 return -1;
10256 }
10257 if (PyModule_AddObjectRef(m, "comprehension", state->comprehension_type) <
Brandt Bucherd2f96672020-02-06 06:45:46 -080010258 0) {
Victor Stinnerb1cc6ba2020-07-03 20:01:46 +020010259 return -1;
Brandt Bucherd2f96672020-02-06 06:45:46 -080010260 }
Victor Stinner18ce7f12020-11-04 16:37:07 +010010261 if (PyModule_AddObjectRef(m, "excepthandler", state->excepthandler_type) <
10262 0) {
Victor Stinnerb1cc6ba2020-07-03 20:01:46 +020010263 return -1;
Brandt Bucherd2f96672020-02-06 06:45:46 -080010264 }
Victor Stinner18ce7f12020-11-04 16:37:07 +010010265 if (PyModule_AddObjectRef(m, "ExceptHandler", state->ExceptHandler_type) <
10266 0) {
Victor Stinnerb1cc6ba2020-07-03 20:01:46 +020010267 return -1;
Brandt Bucherd2f96672020-02-06 06:45:46 -080010268 }
Victor Stinner18ce7f12020-11-04 16:37:07 +010010269 if (PyModule_AddObjectRef(m, "arguments", state->arguments_type) < 0) {
Victor Stinnerb1cc6ba2020-07-03 20:01:46 +020010270 return -1;
Brandt Bucherd2f96672020-02-06 06:45:46 -080010271 }
Victor Stinner18ce7f12020-11-04 16:37:07 +010010272 if (PyModule_AddObjectRef(m, "arg", state->arg_type) < 0) {
Victor Stinnerb1cc6ba2020-07-03 20:01:46 +020010273 return -1;
Brandt Bucherd2f96672020-02-06 06:45:46 -080010274 }
Victor Stinner18ce7f12020-11-04 16:37:07 +010010275 if (PyModule_AddObjectRef(m, "keyword", state->keyword_type) < 0) {
Victor Stinnerb1cc6ba2020-07-03 20:01:46 +020010276 return -1;
Brandt Bucherd2f96672020-02-06 06:45:46 -080010277 }
Victor Stinner18ce7f12020-11-04 16:37:07 +010010278 if (PyModule_AddObjectRef(m, "alias", state->alias_type) < 0) {
Victor Stinnerb1cc6ba2020-07-03 20:01:46 +020010279 return -1;
Brandt Bucherd2f96672020-02-06 06:45:46 -080010280 }
Victor Stinner18ce7f12020-11-04 16:37:07 +010010281 if (PyModule_AddObjectRef(m, "withitem", state->withitem_type) < 0) {
Victor Stinnerb1cc6ba2020-07-03 20:01:46 +020010282 return -1;
Brandt Bucherd2f96672020-02-06 06:45:46 -080010283 }
Brandt Bucher145bf262021-02-26 14:51:55 -080010284 if (PyModule_AddObjectRef(m, "match_case", state->match_case_type) < 0) {
10285 return -1;
10286 }
Victor Stinner18ce7f12020-11-04 16:37:07 +010010287 if (PyModule_AddObjectRef(m, "type_ignore", state->type_ignore_type) < 0) {
Victor Stinnerb1cc6ba2020-07-03 20:01:46 +020010288 return -1;
Brandt Bucherd2f96672020-02-06 06:45:46 -080010289 }
Victor Stinner18ce7f12020-11-04 16:37:07 +010010290 if (PyModule_AddObjectRef(m, "TypeIgnore", state->TypeIgnore_type) < 0) {
Victor Stinnerb1cc6ba2020-07-03 20:01:46 +020010291 return -1;
Brandt Bucherd2f96672020-02-06 06:45:46 -080010292 }
Victor Stinnerb1cc6ba2020-07-03 20:01:46 +020010293 return 0;
10294}
Victor Stinner91e1bc12020-07-03 14:15:53 +020010295
Victor Stinnerb1cc6ba2020-07-03 20:01:46 +020010296static PyModuleDef_Slot astmodule_slots[] = {
10297 {Py_mod_exec, astmodule_exec},
10298 {0, NULL}
10299};
10300
10301static struct PyModuleDef _astmodule = {
10302 PyModuleDef_HEAD_INIT,
10303 .m_name = "_ast",
Victor Stinner5cf47822020-11-02 22:03:28 +010010304 // The _ast module uses a per-interpreter state (PyInterpreterState.ast)
Victor Stinnere5fbe0c2020-09-15 18:03:34 +020010305 .m_size = 0,
Victor Stinnerb1cc6ba2020-07-03 20:01:46 +020010306 .m_slots = astmodule_slots,
Victor Stinnerb1cc6ba2020-07-03 20:01:46 +020010307};
10308
10309PyMODINIT_FUNC
10310PyInit__ast(void)
10311{
10312 return PyModuleDef_Init(&_astmodule);
Martin v. Löwis577b5b92006-02-27 15:23:19 +000010313}
10314
Jeremy Hylton3e0055f2005-10-20 19:59:25 +000010315
Martin v. Löwisbd260da2006-02-26 19:42:26 +000010316PyObject* PyAST_mod2obj(mod_ty t)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +000010317{
Victor Stinner5cf47822020-11-02 22:03:28 +010010318 struct ast_state *state = get_ast_state();
Victor Stinnerb1cc6ba2020-07-03 20:01:46 +020010319 if (state == NULL) {
Victor Stinnerbdf630c2013-07-17 00:17:15 +020010320 return NULL;
Victor Stinner91e1bc12020-07-03 14:15:53 +020010321 }
Victor Stinner74419f02020-07-03 11:35:37 +020010322 return ast2obj_mod(state, t);
Jeremy Hylton3e0055f2005-10-20 19:59:25 +000010323}
Martin v. Löwis5b222132007-06-10 09:51:05 +000010324
Neal Norwitzdb4115f2008-03-31 04:20:05 +000010325/* mode is 0 for "exec", 1 for "eval" and 2 for "single" input */
10326mod_ty PyAST_obj2mod(PyObject* ast, PyArena* arena, int mode)
Martin v. Löwis618dc5e2008-03-30 20:03:44 +000010327{
Serhiy Storchaka43c97312019-09-10 13:02:30 +030010328 const char * const req_name[] = {"Module", "Expression", "Interactive"};
Benjamin Peterson0496c9e2009-12-13 01:24:58 +000010329 int isinstance;
Benjamin Peterson42ec0312014-02-10 22:41:40 -050010330
Steve Dowerb82e17e2019-05-23 08:45:22 -070010331 if (PySys_Audit("compile", "OO", ast, Py_None) < 0) {
10332 return NULL;
10333 }
10334
Victor Stinner5cf47822020-11-02 22:03:28 +010010335 struct ast_state *state = get_ast_state();
10336 if (state == NULL) {
10337 return NULL;
10338 }
10339
Victor Stinner74419f02020-07-03 11:35:37 +020010340 PyObject *req_type[3];
10341 req_type[0] = state->Module_type;
10342 req_type[1] = state->Expression_type;
10343 req_type[2] = state->Interactive_type;
Benjamin Peterson42ec0312014-02-10 22:41:40 -050010344
Guido van Rossum3a32e3b2019-02-01 11:37:34 -080010345 assert(0 <= mode && mode <= 2);
Neal Norwitzdb4115f2008-03-31 04:20:05 +000010346
Benjamin Peterson0496c9e2009-12-13 01:24:58 +000010347 isinstance = PyObject_IsInstance(ast, req_type[mode]);
10348 if (isinstance == -1)
10349 return NULL;
10350 if (!isinstance) {
Neal Norwitzdb4115f2008-03-31 04:20:05 +000010351 PyErr_Format(PyExc_TypeError, "expected %s node, got %.400s",
Dino Viehlandac46eb42019-09-11 10:16:34 -070010352 req_name[mode], _PyType_Name(Py_TYPE(ast)));
Martin v. Löwis618dc5e2008-03-30 20:03:44 +000010353 return NULL;
10354 }
Dong-hee Naa05fcd32019-10-10 16:41:26 +090010355
10356 mod_ty res = NULL;
Victor Stinner74419f02020-07-03 11:35:37 +020010357 if (obj2ast_mod(state, ast, &res, arena) != 0)
Martin v. Löwis618dc5e2008-03-30 20:03:44 +000010358 return NULL;
10359 else
10360 return res;
10361}
10362
10363int PyAST_Check(PyObject* obj)
10364{
Victor Stinner5cf47822020-11-02 22:03:28 +010010365 struct ast_state *state = get_ast_state();
Victor Stinnerb1cc6ba2020-07-03 20:01:46 +020010366 if (state == NULL) {
Victor Stinnerbdf630c2013-07-17 00:17:15 +020010367 return -1;
Victor Stinner91e1bc12020-07-03 14:15:53 +020010368 }
Victor Stinner74419f02020-07-03 11:35:37 +020010369 return PyObject_IsInstance(obj, state->AST_type);
Martin v. Löwis618dc5e2008-03-30 20:03:44 +000010370}
10371
Martin v. Löwis5b222132007-06-10 09:51:05 +000010372