blob: 13657a67275667469c3b4066d4c5fd08bdc35c9a [file] [log] [blame]
Thomas Wouterscf297e42007-02-23 15:07:44 +00001/* File automatically generated by Parser/asdl_c.py. */
2
Benjamin Peterson7e0dbfb2012-03-12 09:46:44 -07003#include <stddef.h>
4
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00005#include "Python.h"
6#include "Python-ast.h"
Victor Stinner4a21e572020-04-15 02:35:41 +02007#include "structmember.h" // PyMemberDef
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00008
Dino Viehlandac46eb42019-09-11 10:16:34 -07009typedef struct {
10 int initialized;
11 PyObject *AST_type;
12 PyObject *Add_singleton;
13 PyObject *Add_type;
14 PyObject *And_singleton;
15 PyObject *And_type;
16 PyObject *AnnAssign_type;
17 PyObject *Assert_type;
18 PyObject *Assign_type;
19 PyObject *AsyncFor_type;
20 PyObject *AsyncFunctionDef_type;
21 PyObject *AsyncWith_type;
22 PyObject *Attribute_type;
23 PyObject *AugAssign_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -070024 PyObject *Await_type;
25 PyObject *BinOp_type;
26 PyObject *BitAnd_singleton;
27 PyObject *BitAnd_type;
28 PyObject *BitOr_singleton;
29 PyObject *BitOr_type;
30 PyObject *BitXor_singleton;
31 PyObject *BitXor_type;
32 PyObject *BoolOp_type;
33 PyObject *Break_type;
34 PyObject *Call_type;
35 PyObject *ClassDef_type;
36 PyObject *Compare_type;
37 PyObject *Constant_type;
38 PyObject *Continue_type;
39 PyObject *Del_singleton;
40 PyObject *Del_type;
41 PyObject *Delete_type;
42 PyObject *DictComp_type;
43 PyObject *Dict_type;
44 PyObject *Div_singleton;
45 PyObject *Div_type;
46 PyObject *Eq_singleton;
47 PyObject *Eq_type;
48 PyObject *ExceptHandler_type;
49 PyObject *Expr_type;
50 PyObject *Expression_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -070051 PyObject *FloorDiv_singleton;
52 PyObject *FloorDiv_type;
53 PyObject *For_type;
54 PyObject *FormattedValue_type;
55 PyObject *FunctionDef_type;
56 PyObject *FunctionType_type;
57 PyObject *GeneratorExp_type;
58 PyObject *Global_type;
59 PyObject *GtE_singleton;
60 PyObject *GtE_type;
61 PyObject *Gt_singleton;
62 PyObject *Gt_type;
63 PyObject *IfExp_type;
64 PyObject *If_type;
65 PyObject *ImportFrom_type;
66 PyObject *Import_type;
67 PyObject *In_singleton;
68 PyObject *In_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -070069 PyObject *Interactive_type;
70 PyObject *Invert_singleton;
71 PyObject *Invert_type;
72 PyObject *IsNot_singleton;
73 PyObject *IsNot_type;
74 PyObject *Is_singleton;
75 PyObject *Is_type;
76 PyObject *JoinedStr_type;
77 PyObject *LShift_singleton;
78 PyObject *LShift_type;
79 PyObject *Lambda_type;
80 PyObject *ListComp_type;
81 PyObject *List_type;
82 PyObject *Load_singleton;
83 PyObject *Load_type;
84 PyObject *LtE_singleton;
85 PyObject *LtE_type;
86 PyObject *Lt_singleton;
87 PyObject *Lt_type;
88 PyObject *MatMult_singleton;
89 PyObject *MatMult_type;
90 PyObject *Mod_singleton;
91 PyObject *Mod_type;
92 PyObject *Module_type;
93 PyObject *Mult_singleton;
94 PyObject *Mult_type;
95 PyObject *Name_type;
96 PyObject *NamedExpr_type;
97 PyObject *Nonlocal_type;
98 PyObject *NotEq_singleton;
99 PyObject *NotEq_type;
100 PyObject *NotIn_singleton;
101 PyObject *NotIn_type;
102 PyObject *Not_singleton;
103 PyObject *Not_type;
104 PyObject *Or_singleton;
105 PyObject *Or_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -0700106 PyObject *Pass_type;
107 PyObject *Pow_singleton;
108 PyObject *Pow_type;
109 PyObject *RShift_singleton;
110 PyObject *RShift_type;
111 PyObject *Raise_type;
112 PyObject *Return_type;
113 PyObject *SetComp_type;
114 PyObject *Set_type;
115 PyObject *Slice_type;
116 PyObject *Starred_type;
117 PyObject *Store_singleton;
118 PyObject *Store_type;
119 PyObject *Sub_singleton;
120 PyObject *Sub_type;
121 PyObject *Subscript_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -0700122 PyObject *Try_type;
123 PyObject *Tuple_type;
124 PyObject *TypeIgnore_type;
125 PyObject *UAdd_singleton;
126 PyObject *UAdd_type;
127 PyObject *USub_singleton;
128 PyObject *USub_type;
129 PyObject *UnaryOp_type;
130 PyObject *While_type;
131 PyObject *With_type;
132 PyObject *YieldFrom_type;
133 PyObject *Yield_type;
134 PyObject *__dict__;
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +0300135 PyObject *__doc__;
Dino Viehlandac46eb42019-09-11 10:16:34 -0700136 PyObject *__module__;
Dino Viehlandac46eb42019-09-11 10:16:34 -0700137 PyObject *_attributes;
138 PyObject *_fields;
139 PyObject *alias_type;
140 PyObject *annotation;
141 PyObject *arg;
142 PyObject *arg_type;
143 PyObject *args;
144 PyObject *argtypes;
145 PyObject *arguments_type;
146 PyObject *asname;
Serhiy Storchakabace59d2020-03-22 20:33:34 +0200147 PyObject *ast;
Dino Viehlandac46eb42019-09-11 10:16:34 -0700148 PyObject *attr;
149 PyObject *bases;
150 PyObject *body;
151 PyObject *boolop_type;
152 PyObject *cause;
153 PyObject *cmpop_type;
154 PyObject *col_offset;
155 PyObject *comparators;
156 PyObject *comprehension_type;
157 PyObject *context_expr;
158 PyObject *conversion;
159 PyObject *ctx;
160 PyObject *decorator_list;
161 PyObject *defaults;
Dino Viehlandac46eb42019-09-11 10:16:34 -0700162 PyObject *elt;
163 PyObject *elts;
164 PyObject *end_col_offset;
165 PyObject *end_lineno;
166 PyObject *exc;
167 PyObject *excepthandler_type;
168 PyObject *expr_context_type;
169 PyObject *expr_type;
170 PyObject *finalbody;
171 PyObject *format_spec;
172 PyObject *func;
173 PyObject *generators;
174 PyObject *handlers;
175 PyObject *id;
176 PyObject *ifs;
177 PyObject *is_async;
178 PyObject *items;
179 PyObject *iter;
180 PyObject *key;
181 PyObject *keys;
182 PyObject *keyword_type;
183 PyObject *keywords;
184 PyObject *kind;
185 PyObject *kw_defaults;
186 PyObject *kwarg;
187 PyObject *kwonlyargs;
188 PyObject *left;
189 PyObject *level;
190 PyObject *lineno;
191 PyObject *lower;
192 PyObject *mod_type;
193 PyObject *module;
194 PyObject *msg;
195 PyObject *name;
196 PyObject *names;
197 PyObject *op;
198 PyObject *operand;
199 PyObject *operator_type;
200 PyObject *ops;
201 PyObject *optional_vars;
202 PyObject *orelse;
203 PyObject *posonlyargs;
204 PyObject *returns;
205 PyObject *right;
206 PyObject *simple;
207 PyObject *slice;
Dino Viehlandac46eb42019-09-11 10:16:34 -0700208 PyObject *step;
209 PyObject *stmt_type;
210 PyObject *tag;
211 PyObject *target;
212 PyObject *targets;
213 PyObject *test;
214 PyObject *type;
215 PyObject *type_comment;
216 PyObject *type_ignore_type;
217 PyObject *type_ignores;
218 PyObject *unaryop_type;
219 PyObject *upper;
220 PyObject *value;
221 PyObject *values;
222 PyObject *vararg;
223 PyObject *withitem_type;
224} astmodulestate;
225
226
Victor Stinnere5fbe0c2020-09-15 18:03:34 +0200227// Forward declaration
228static int init_types(astmodulestate *state);
229
230// bpo-41194, bpo-41261, bpo-41631: The _ast module uses a global state.
231static astmodulestate global_ast_state = {0};
Victor Stinnerb1cc6ba2020-07-03 20:01:46 +0200232
233static astmodulestate*
234get_global_ast_state(void)
235{
Victor Stinnere5fbe0c2020-09-15 18:03:34 +0200236 astmodulestate* state = &global_ast_state;
237 if (!init_types(state)) {
Victor Stinnerb1cc6ba2020-07-03 20:01:46 +0200238 return NULL;
239 }
Victor Stinnerb1cc6ba2020-07-03 20:01:46 +0200240 return state;
Victor Stinner74419f02020-07-03 11:35:37 +0200241}
Dino Viehlandac46eb42019-09-11 10:16:34 -0700242
Victor Stinnere5fbe0c2020-09-15 18:03:34 +0200243static astmodulestate*
244get_ast_state(PyObject* Py_UNUSED(module))
Dino Viehlandac46eb42019-09-11 10:16:34 -0700245{
Victor Stinnere5fbe0c2020-09-15 18:03:34 +0200246 astmodulestate* state = get_global_ast_state();
247 // get_ast_state() must only be called after _ast module is imported,
248 // and astmodule_exec() calls init_types()
249 assert(state != NULL);
250 return state;
251}
252
253void _PyAST_Fini(PyThreadState *tstate)
254{
255 astmodulestate* state = &global_ast_state;
Victor Stinner74419f02020-07-03 11:35:37 +0200256 Py_CLEAR(state->AST_type);
257 Py_CLEAR(state->Add_singleton);
258 Py_CLEAR(state->Add_type);
259 Py_CLEAR(state->And_singleton);
260 Py_CLEAR(state->And_type);
261 Py_CLEAR(state->AnnAssign_type);
262 Py_CLEAR(state->Assert_type);
263 Py_CLEAR(state->Assign_type);
264 Py_CLEAR(state->AsyncFor_type);
265 Py_CLEAR(state->AsyncFunctionDef_type);
266 Py_CLEAR(state->AsyncWith_type);
267 Py_CLEAR(state->Attribute_type);
268 Py_CLEAR(state->AugAssign_type);
269 Py_CLEAR(state->Await_type);
270 Py_CLEAR(state->BinOp_type);
271 Py_CLEAR(state->BitAnd_singleton);
272 Py_CLEAR(state->BitAnd_type);
273 Py_CLEAR(state->BitOr_singleton);
274 Py_CLEAR(state->BitOr_type);
275 Py_CLEAR(state->BitXor_singleton);
276 Py_CLEAR(state->BitXor_type);
277 Py_CLEAR(state->BoolOp_type);
278 Py_CLEAR(state->Break_type);
279 Py_CLEAR(state->Call_type);
280 Py_CLEAR(state->ClassDef_type);
281 Py_CLEAR(state->Compare_type);
282 Py_CLEAR(state->Constant_type);
283 Py_CLEAR(state->Continue_type);
284 Py_CLEAR(state->Del_singleton);
285 Py_CLEAR(state->Del_type);
286 Py_CLEAR(state->Delete_type);
287 Py_CLEAR(state->DictComp_type);
288 Py_CLEAR(state->Dict_type);
289 Py_CLEAR(state->Div_singleton);
290 Py_CLEAR(state->Div_type);
291 Py_CLEAR(state->Eq_singleton);
292 Py_CLEAR(state->Eq_type);
293 Py_CLEAR(state->ExceptHandler_type);
294 Py_CLEAR(state->Expr_type);
295 Py_CLEAR(state->Expression_type);
296 Py_CLEAR(state->FloorDiv_singleton);
297 Py_CLEAR(state->FloorDiv_type);
298 Py_CLEAR(state->For_type);
299 Py_CLEAR(state->FormattedValue_type);
300 Py_CLEAR(state->FunctionDef_type);
301 Py_CLEAR(state->FunctionType_type);
302 Py_CLEAR(state->GeneratorExp_type);
303 Py_CLEAR(state->Global_type);
304 Py_CLEAR(state->GtE_singleton);
305 Py_CLEAR(state->GtE_type);
306 Py_CLEAR(state->Gt_singleton);
307 Py_CLEAR(state->Gt_type);
308 Py_CLEAR(state->IfExp_type);
309 Py_CLEAR(state->If_type);
310 Py_CLEAR(state->ImportFrom_type);
311 Py_CLEAR(state->Import_type);
312 Py_CLEAR(state->In_singleton);
313 Py_CLEAR(state->In_type);
314 Py_CLEAR(state->Interactive_type);
315 Py_CLEAR(state->Invert_singleton);
316 Py_CLEAR(state->Invert_type);
317 Py_CLEAR(state->IsNot_singleton);
318 Py_CLEAR(state->IsNot_type);
319 Py_CLEAR(state->Is_singleton);
320 Py_CLEAR(state->Is_type);
321 Py_CLEAR(state->JoinedStr_type);
322 Py_CLEAR(state->LShift_singleton);
323 Py_CLEAR(state->LShift_type);
324 Py_CLEAR(state->Lambda_type);
325 Py_CLEAR(state->ListComp_type);
326 Py_CLEAR(state->List_type);
327 Py_CLEAR(state->Load_singleton);
328 Py_CLEAR(state->Load_type);
329 Py_CLEAR(state->LtE_singleton);
330 Py_CLEAR(state->LtE_type);
331 Py_CLEAR(state->Lt_singleton);
332 Py_CLEAR(state->Lt_type);
333 Py_CLEAR(state->MatMult_singleton);
334 Py_CLEAR(state->MatMult_type);
335 Py_CLEAR(state->Mod_singleton);
336 Py_CLEAR(state->Mod_type);
337 Py_CLEAR(state->Module_type);
338 Py_CLEAR(state->Mult_singleton);
339 Py_CLEAR(state->Mult_type);
340 Py_CLEAR(state->Name_type);
341 Py_CLEAR(state->NamedExpr_type);
342 Py_CLEAR(state->Nonlocal_type);
343 Py_CLEAR(state->NotEq_singleton);
344 Py_CLEAR(state->NotEq_type);
345 Py_CLEAR(state->NotIn_singleton);
346 Py_CLEAR(state->NotIn_type);
347 Py_CLEAR(state->Not_singleton);
348 Py_CLEAR(state->Not_type);
349 Py_CLEAR(state->Or_singleton);
350 Py_CLEAR(state->Or_type);
351 Py_CLEAR(state->Pass_type);
352 Py_CLEAR(state->Pow_singleton);
353 Py_CLEAR(state->Pow_type);
354 Py_CLEAR(state->RShift_singleton);
355 Py_CLEAR(state->RShift_type);
356 Py_CLEAR(state->Raise_type);
357 Py_CLEAR(state->Return_type);
358 Py_CLEAR(state->SetComp_type);
359 Py_CLEAR(state->Set_type);
360 Py_CLEAR(state->Slice_type);
361 Py_CLEAR(state->Starred_type);
362 Py_CLEAR(state->Store_singleton);
363 Py_CLEAR(state->Store_type);
364 Py_CLEAR(state->Sub_singleton);
365 Py_CLEAR(state->Sub_type);
366 Py_CLEAR(state->Subscript_type);
367 Py_CLEAR(state->Try_type);
368 Py_CLEAR(state->Tuple_type);
369 Py_CLEAR(state->TypeIgnore_type);
370 Py_CLEAR(state->UAdd_singleton);
371 Py_CLEAR(state->UAdd_type);
372 Py_CLEAR(state->USub_singleton);
373 Py_CLEAR(state->USub_type);
374 Py_CLEAR(state->UnaryOp_type);
375 Py_CLEAR(state->While_type);
376 Py_CLEAR(state->With_type);
377 Py_CLEAR(state->YieldFrom_type);
378 Py_CLEAR(state->Yield_type);
379 Py_CLEAR(state->__dict__);
380 Py_CLEAR(state->__doc__);
381 Py_CLEAR(state->__module__);
382 Py_CLEAR(state->_attributes);
383 Py_CLEAR(state->_fields);
384 Py_CLEAR(state->alias_type);
385 Py_CLEAR(state->annotation);
386 Py_CLEAR(state->arg);
387 Py_CLEAR(state->arg_type);
388 Py_CLEAR(state->args);
389 Py_CLEAR(state->argtypes);
390 Py_CLEAR(state->arguments_type);
391 Py_CLEAR(state->asname);
392 Py_CLEAR(state->ast);
393 Py_CLEAR(state->attr);
394 Py_CLEAR(state->bases);
395 Py_CLEAR(state->body);
396 Py_CLEAR(state->boolop_type);
397 Py_CLEAR(state->cause);
398 Py_CLEAR(state->cmpop_type);
399 Py_CLEAR(state->col_offset);
400 Py_CLEAR(state->comparators);
401 Py_CLEAR(state->comprehension_type);
402 Py_CLEAR(state->context_expr);
403 Py_CLEAR(state->conversion);
404 Py_CLEAR(state->ctx);
405 Py_CLEAR(state->decorator_list);
406 Py_CLEAR(state->defaults);
407 Py_CLEAR(state->elt);
408 Py_CLEAR(state->elts);
409 Py_CLEAR(state->end_col_offset);
410 Py_CLEAR(state->end_lineno);
411 Py_CLEAR(state->exc);
412 Py_CLEAR(state->excepthandler_type);
413 Py_CLEAR(state->expr_context_type);
414 Py_CLEAR(state->expr_type);
415 Py_CLEAR(state->finalbody);
416 Py_CLEAR(state->format_spec);
417 Py_CLEAR(state->func);
418 Py_CLEAR(state->generators);
419 Py_CLEAR(state->handlers);
420 Py_CLEAR(state->id);
421 Py_CLEAR(state->ifs);
422 Py_CLEAR(state->is_async);
423 Py_CLEAR(state->items);
424 Py_CLEAR(state->iter);
425 Py_CLEAR(state->key);
426 Py_CLEAR(state->keys);
427 Py_CLEAR(state->keyword_type);
428 Py_CLEAR(state->keywords);
429 Py_CLEAR(state->kind);
430 Py_CLEAR(state->kw_defaults);
431 Py_CLEAR(state->kwarg);
432 Py_CLEAR(state->kwonlyargs);
433 Py_CLEAR(state->left);
434 Py_CLEAR(state->level);
435 Py_CLEAR(state->lineno);
436 Py_CLEAR(state->lower);
437 Py_CLEAR(state->mod_type);
438 Py_CLEAR(state->module);
439 Py_CLEAR(state->msg);
440 Py_CLEAR(state->name);
441 Py_CLEAR(state->names);
442 Py_CLEAR(state->op);
443 Py_CLEAR(state->operand);
444 Py_CLEAR(state->operator_type);
445 Py_CLEAR(state->ops);
446 Py_CLEAR(state->optional_vars);
447 Py_CLEAR(state->orelse);
448 Py_CLEAR(state->posonlyargs);
449 Py_CLEAR(state->returns);
450 Py_CLEAR(state->right);
451 Py_CLEAR(state->simple);
452 Py_CLEAR(state->slice);
453 Py_CLEAR(state->step);
454 Py_CLEAR(state->stmt_type);
455 Py_CLEAR(state->tag);
456 Py_CLEAR(state->target);
457 Py_CLEAR(state->targets);
458 Py_CLEAR(state->test);
459 Py_CLEAR(state->type);
460 Py_CLEAR(state->type_comment);
461 Py_CLEAR(state->type_ignore_type);
462 Py_CLEAR(state->type_ignores);
463 Py_CLEAR(state->unaryop_type);
464 Py_CLEAR(state->upper);
465 Py_CLEAR(state->value);
466 Py_CLEAR(state->values);
467 Py_CLEAR(state->vararg);
468 Py_CLEAR(state->withitem_type);
Dino Viehlandac46eb42019-09-11 10:16:34 -0700469
Victor Stinnere5fbe0c2020-09-15 18:03:34 +0200470 state->initialized = 0;
Dino Viehlandac46eb42019-09-11 10:16:34 -0700471}
472
Victor Stinner74419f02020-07-03 11:35:37 +0200473static int init_identifiers(astmodulestate *state)
Dino Viehlandac46eb42019-09-11 10:16:34 -0700474{
Dino Viehlandac46eb42019-09-11 10:16:34 -0700475 if ((state->__dict__ = PyUnicode_InternFromString("__dict__")) == NULL) return 0;
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +0300476 if ((state->__doc__ = PyUnicode_InternFromString("__doc__")) == NULL) return 0;
Dino Viehlandac46eb42019-09-11 10:16:34 -0700477 if ((state->__module__ = PyUnicode_InternFromString("__module__")) == NULL) return 0;
Dino Viehlandac46eb42019-09-11 10:16:34 -0700478 if ((state->_attributes = PyUnicode_InternFromString("_attributes")) == NULL) return 0;
479 if ((state->_fields = PyUnicode_InternFromString("_fields")) == NULL) return 0;
480 if ((state->annotation = PyUnicode_InternFromString("annotation")) == NULL) return 0;
481 if ((state->arg = PyUnicode_InternFromString("arg")) == NULL) return 0;
482 if ((state->args = PyUnicode_InternFromString("args")) == NULL) return 0;
483 if ((state->argtypes = PyUnicode_InternFromString("argtypes")) == NULL) return 0;
484 if ((state->asname = PyUnicode_InternFromString("asname")) == NULL) return 0;
Serhiy Storchakabace59d2020-03-22 20:33:34 +0200485 if ((state->ast = PyUnicode_InternFromString("ast")) == NULL) return 0;
Dino Viehlandac46eb42019-09-11 10:16:34 -0700486 if ((state->attr = PyUnicode_InternFromString("attr")) == NULL) return 0;
487 if ((state->bases = PyUnicode_InternFromString("bases")) == NULL) return 0;
488 if ((state->body = PyUnicode_InternFromString("body")) == NULL) return 0;
489 if ((state->cause = PyUnicode_InternFromString("cause")) == NULL) return 0;
490 if ((state->col_offset = PyUnicode_InternFromString("col_offset")) == NULL) return 0;
491 if ((state->comparators = PyUnicode_InternFromString("comparators")) == NULL) return 0;
492 if ((state->context_expr = PyUnicode_InternFromString("context_expr")) == NULL) return 0;
493 if ((state->conversion = PyUnicode_InternFromString("conversion")) == NULL) return 0;
494 if ((state->ctx = PyUnicode_InternFromString("ctx")) == NULL) return 0;
495 if ((state->decorator_list = PyUnicode_InternFromString("decorator_list")) == NULL) return 0;
496 if ((state->defaults = PyUnicode_InternFromString("defaults")) == NULL) return 0;
Dino Viehlandac46eb42019-09-11 10:16:34 -0700497 if ((state->elt = PyUnicode_InternFromString("elt")) == NULL) return 0;
498 if ((state->elts = PyUnicode_InternFromString("elts")) == NULL) return 0;
499 if ((state->end_col_offset = PyUnicode_InternFromString("end_col_offset")) == NULL) return 0;
500 if ((state->end_lineno = PyUnicode_InternFromString("end_lineno")) == NULL) return 0;
501 if ((state->exc = PyUnicode_InternFromString("exc")) == NULL) return 0;
502 if ((state->finalbody = PyUnicode_InternFromString("finalbody")) == NULL) return 0;
503 if ((state->format_spec = PyUnicode_InternFromString("format_spec")) == NULL) return 0;
504 if ((state->func = PyUnicode_InternFromString("func")) == NULL) return 0;
505 if ((state->generators = PyUnicode_InternFromString("generators")) == NULL) return 0;
506 if ((state->handlers = PyUnicode_InternFromString("handlers")) == NULL) return 0;
507 if ((state->id = PyUnicode_InternFromString("id")) == NULL) return 0;
508 if ((state->ifs = PyUnicode_InternFromString("ifs")) == NULL) return 0;
509 if ((state->is_async = PyUnicode_InternFromString("is_async")) == NULL) return 0;
510 if ((state->items = PyUnicode_InternFromString("items")) == NULL) return 0;
511 if ((state->iter = PyUnicode_InternFromString("iter")) == NULL) return 0;
512 if ((state->key = PyUnicode_InternFromString("key")) == NULL) return 0;
513 if ((state->keys = PyUnicode_InternFromString("keys")) == NULL) return 0;
514 if ((state->keywords = PyUnicode_InternFromString("keywords")) == NULL) return 0;
515 if ((state->kind = PyUnicode_InternFromString("kind")) == NULL) return 0;
516 if ((state->kw_defaults = PyUnicode_InternFromString("kw_defaults")) == NULL) return 0;
517 if ((state->kwarg = PyUnicode_InternFromString("kwarg")) == NULL) return 0;
518 if ((state->kwonlyargs = PyUnicode_InternFromString("kwonlyargs")) == NULL) return 0;
519 if ((state->left = PyUnicode_InternFromString("left")) == NULL) return 0;
520 if ((state->level = PyUnicode_InternFromString("level")) == NULL) return 0;
521 if ((state->lineno = PyUnicode_InternFromString("lineno")) == NULL) return 0;
522 if ((state->lower = PyUnicode_InternFromString("lower")) == NULL) return 0;
523 if ((state->module = PyUnicode_InternFromString("module")) == NULL) return 0;
524 if ((state->msg = PyUnicode_InternFromString("msg")) == NULL) return 0;
525 if ((state->name = PyUnicode_InternFromString("name")) == NULL) return 0;
526 if ((state->names = PyUnicode_InternFromString("names")) == NULL) return 0;
527 if ((state->op = PyUnicode_InternFromString("op")) == NULL) return 0;
528 if ((state->operand = PyUnicode_InternFromString("operand")) == NULL) return 0;
529 if ((state->ops = PyUnicode_InternFromString("ops")) == NULL) return 0;
530 if ((state->optional_vars = PyUnicode_InternFromString("optional_vars")) == NULL) return 0;
531 if ((state->orelse = PyUnicode_InternFromString("orelse")) == NULL) return 0;
532 if ((state->posonlyargs = PyUnicode_InternFromString("posonlyargs")) == NULL) return 0;
533 if ((state->returns = PyUnicode_InternFromString("returns")) == NULL) return 0;
534 if ((state->right = PyUnicode_InternFromString("right")) == NULL) return 0;
535 if ((state->simple = PyUnicode_InternFromString("simple")) == NULL) return 0;
536 if ((state->slice = PyUnicode_InternFromString("slice")) == NULL) return 0;
537 if ((state->step = PyUnicode_InternFromString("step")) == NULL) return 0;
538 if ((state->tag = PyUnicode_InternFromString("tag")) == NULL) return 0;
539 if ((state->target = PyUnicode_InternFromString("target")) == NULL) return 0;
540 if ((state->targets = PyUnicode_InternFromString("targets")) == NULL) return 0;
541 if ((state->test = PyUnicode_InternFromString("test")) == NULL) return 0;
542 if ((state->type = PyUnicode_InternFromString("type")) == NULL) return 0;
543 if ((state->type_comment = PyUnicode_InternFromString("type_comment")) == NULL) return 0;
544 if ((state->type_ignores = PyUnicode_InternFromString("type_ignores")) == NULL) return 0;
545 if ((state->upper = PyUnicode_InternFromString("upper")) == NULL) return 0;
546 if ((state->value = PyUnicode_InternFromString("value")) == NULL) return 0;
547 if ((state->values = PyUnicode_InternFromString("values")) == NULL) return 0;
548 if ((state->vararg = PyUnicode_InternFromString("vararg")) == NULL) return 0;
549 return 1;
550};
551
Pablo Galindoa5634c42020-09-16 19:42:00 +0100552GENERATE_ASDL_SEQ_CONSTRUCTOR(mod, mod_ty)
553GENERATE_ASDL_SEQ_CONSTRUCTOR(stmt, stmt_ty)
554GENERATE_ASDL_SEQ_CONSTRUCTOR(expr, expr_ty)
555GENERATE_ASDL_SEQ_CONSTRUCTOR(comprehension, comprehension_ty)
556GENERATE_ASDL_SEQ_CONSTRUCTOR(excepthandler, excepthandler_ty)
557GENERATE_ASDL_SEQ_CONSTRUCTOR(arguments, arguments_ty)
558GENERATE_ASDL_SEQ_CONSTRUCTOR(arg, arg_ty)
559GENERATE_ASDL_SEQ_CONSTRUCTOR(keyword, keyword_ty)
560GENERATE_ASDL_SEQ_CONSTRUCTOR(alias, alias_ty)
561GENERATE_ASDL_SEQ_CONSTRUCTOR(withitem, withitem_ty)
562GENERATE_ASDL_SEQ_CONSTRUCTOR(type_ignore, type_ignore_ty)
563
Victor Stinner74419f02020-07-03 11:35:37 +0200564static PyObject* ast2obj_mod(astmodulestate *state, void*);
Serhiy Storchaka43c97312019-09-10 13:02:30 +0300565static const char * const Module_fields[]={
Victor Stinnerce72e1c2013-07-27 00:00:36 +0200566 "body",
Guido van Rossumdcfcd142019-01-31 03:40:27 -0800567 "type_ignores",
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000568};
Serhiy Storchaka43c97312019-09-10 13:02:30 +0300569static const char * const Interactive_fields[]={
Victor Stinnerce72e1c2013-07-27 00:00:36 +0200570 "body",
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000571};
Serhiy Storchaka43c97312019-09-10 13:02:30 +0300572static const char * const Expression_fields[]={
Victor Stinnerce72e1c2013-07-27 00:00:36 +0200573 "body",
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000574};
Serhiy Storchaka43c97312019-09-10 13:02:30 +0300575static const char * const FunctionType_fields[]={
Guido van Rossumdcfcd142019-01-31 03:40:27 -0800576 "argtypes",
577 "returns",
578};
Serhiy Storchaka43c97312019-09-10 13:02:30 +0300579static const char * const stmt_attributes[] = {
Victor Stinnerce72e1c2013-07-27 00:00:36 +0200580 "lineno",
581 "col_offset",
Ivan Levkivskyi9932a222019-01-22 11:18:22 +0000582 "end_lineno",
583 "end_col_offset",
Martin v. Löwis577b5b92006-02-27 15:23:19 +0000584};
Victor Stinner74419f02020-07-03 11:35:37 +0200585static PyObject* ast2obj_stmt(astmodulestate *state, void*);
Serhiy Storchaka43c97312019-09-10 13:02:30 +0300586static const char * const FunctionDef_fields[]={
Victor Stinnerce72e1c2013-07-27 00:00:36 +0200587 "name",
588 "args",
589 "body",
590 "decorator_list",
591 "returns",
Guido van Rossumdcfcd142019-01-31 03:40:27 -0800592 "type_comment",
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000593};
Serhiy Storchaka43c97312019-09-10 13:02:30 +0300594static const char * const AsyncFunctionDef_fields[]={
Yury Selivanov75445082015-05-11 22:57:16 -0400595 "name",
596 "args",
597 "body",
598 "decorator_list",
599 "returns",
Guido van Rossumdcfcd142019-01-31 03:40:27 -0800600 "type_comment",
Yury Selivanov75445082015-05-11 22:57:16 -0400601};
Serhiy Storchaka43c97312019-09-10 13:02:30 +0300602static const char * const ClassDef_fields[]={
Victor Stinnerce72e1c2013-07-27 00:00:36 +0200603 "name",
604 "bases",
605 "keywords",
Victor Stinnerce72e1c2013-07-27 00:00:36 +0200606 "body",
607 "decorator_list",
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000608};
Serhiy Storchaka43c97312019-09-10 13:02:30 +0300609static const char * const Return_fields[]={
Victor Stinnerce72e1c2013-07-27 00:00:36 +0200610 "value",
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000611};
Serhiy Storchaka43c97312019-09-10 13:02:30 +0300612static const char * const Delete_fields[]={
Victor Stinnerce72e1c2013-07-27 00:00:36 +0200613 "targets",
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000614};
Serhiy Storchaka43c97312019-09-10 13:02:30 +0300615static const char * const Assign_fields[]={
Victor Stinnerce72e1c2013-07-27 00:00:36 +0200616 "targets",
617 "value",
Guido van Rossumdcfcd142019-01-31 03:40:27 -0800618 "type_comment",
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000619};
Serhiy Storchaka43c97312019-09-10 13:02:30 +0300620static const char * const AugAssign_fields[]={
Victor Stinnerce72e1c2013-07-27 00:00:36 +0200621 "target",
622 "op",
623 "value",
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000624};
Serhiy Storchaka43c97312019-09-10 13:02:30 +0300625static const char * const AnnAssign_fields[]={
Yury Selivanovf8cb8a12016-09-08 20:50:03 -0700626 "target",
627 "annotation",
628 "value",
629 "simple",
630};
Serhiy Storchaka43c97312019-09-10 13:02:30 +0300631static const char * const For_fields[]={
Victor Stinnerce72e1c2013-07-27 00:00:36 +0200632 "target",
633 "iter",
634 "body",
635 "orelse",
Guido van Rossumdcfcd142019-01-31 03:40:27 -0800636 "type_comment",
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000637};
Serhiy Storchaka43c97312019-09-10 13:02:30 +0300638static const char * const AsyncFor_fields[]={
Yury Selivanov75445082015-05-11 22:57:16 -0400639 "target",
640 "iter",
641 "body",
642 "orelse",
Guido van Rossumdcfcd142019-01-31 03:40:27 -0800643 "type_comment",
Yury Selivanov75445082015-05-11 22:57:16 -0400644};
Serhiy Storchaka43c97312019-09-10 13:02:30 +0300645static const char * const While_fields[]={
Victor Stinnerce72e1c2013-07-27 00:00:36 +0200646 "test",
647 "body",
648 "orelse",
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000649};
Serhiy Storchaka43c97312019-09-10 13:02:30 +0300650static const char * const If_fields[]={
Victor Stinnerce72e1c2013-07-27 00:00:36 +0200651 "test",
652 "body",
653 "orelse",
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000654};
Serhiy Storchaka43c97312019-09-10 13:02:30 +0300655static const char * const With_fields[]={
Victor Stinnerce72e1c2013-07-27 00:00:36 +0200656 "items",
657 "body",
Guido van Rossumdcfcd142019-01-31 03:40:27 -0800658 "type_comment",
Guido van Rossumc2e20742006-02-27 22:32:47 +0000659};
Serhiy Storchaka43c97312019-09-10 13:02:30 +0300660static const char * const AsyncWith_fields[]={
Yury Selivanov75445082015-05-11 22:57:16 -0400661 "items",
662 "body",
Guido van Rossumdcfcd142019-01-31 03:40:27 -0800663 "type_comment",
Yury Selivanov75445082015-05-11 22:57:16 -0400664};
Serhiy Storchaka43c97312019-09-10 13:02:30 +0300665static const char * const Raise_fields[]={
Victor Stinnerce72e1c2013-07-27 00:00:36 +0200666 "exc",
667 "cause",
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000668};
Serhiy Storchaka43c97312019-09-10 13:02:30 +0300669static const char * const Try_fields[]={
Victor Stinnerce72e1c2013-07-27 00:00:36 +0200670 "body",
671 "handlers",
672 "orelse",
673 "finalbody",
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000674};
Serhiy Storchaka43c97312019-09-10 13:02:30 +0300675static const char * const Assert_fields[]={
Victor Stinnerce72e1c2013-07-27 00:00:36 +0200676 "test",
677 "msg",
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000678};
Serhiy Storchaka43c97312019-09-10 13:02:30 +0300679static const char * const Import_fields[]={
Victor Stinnerce72e1c2013-07-27 00:00:36 +0200680 "names",
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000681};
Serhiy Storchaka43c97312019-09-10 13:02:30 +0300682static const char * const ImportFrom_fields[]={
Victor Stinnerce72e1c2013-07-27 00:00:36 +0200683 "module",
684 "names",
685 "level",
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000686};
Serhiy Storchaka43c97312019-09-10 13:02:30 +0300687static const char * const Global_fields[]={
Victor Stinnerce72e1c2013-07-27 00:00:36 +0200688 "names",
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000689};
Serhiy Storchaka43c97312019-09-10 13:02:30 +0300690static const char * const Nonlocal_fields[]={
Victor Stinnerce72e1c2013-07-27 00:00:36 +0200691 "names",
Jeremy Hylton81e95022007-02-27 06:50:52 +0000692};
Serhiy Storchaka43c97312019-09-10 13:02:30 +0300693static const char * const Expr_fields[]={
Victor Stinnerce72e1c2013-07-27 00:00:36 +0200694 "value",
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000695};
Serhiy Storchaka43c97312019-09-10 13:02:30 +0300696static const char * const expr_attributes[] = {
Victor Stinnerce72e1c2013-07-27 00:00:36 +0200697 "lineno",
698 "col_offset",
Ivan Levkivskyi9932a222019-01-22 11:18:22 +0000699 "end_lineno",
700 "end_col_offset",
Martin v. Löwis577b5b92006-02-27 15:23:19 +0000701};
Victor Stinner74419f02020-07-03 11:35:37 +0200702static PyObject* ast2obj_expr(astmodulestate *state, void*);
Serhiy Storchaka43c97312019-09-10 13:02:30 +0300703static const char * const BoolOp_fields[]={
Victor Stinnerce72e1c2013-07-27 00:00:36 +0200704 "op",
705 "values",
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000706};
Serhiy Storchaka43c97312019-09-10 13:02:30 +0300707static const char * const NamedExpr_fields[]={
Emily Morehouse8f59ee02019-01-24 16:49:56 -0700708 "target",
709 "value",
710};
Serhiy Storchaka43c97312019-09-10 13:02:30 +0300711static const char * const BinOp_fields[]={
Victor Stinnerce72e1c2013-07-27 00:00:36 +0200712 "left",
713 "op",
714 "right",
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000715};
Serhiy Storchaka43c97312019-09-10 13:02:30 +0300716static const char * const UnaryOp_fields[]={
Victor Stinnerce72e1c2013-07-27 00:00:36 +0200717 "op",
718 "operand",
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000719};
Serhiy Storchaka43c97312019-09-10 13:02:30 +0300720static const char * const Lambda_fields[]={
Victor Stinnerce72e1c2013-07-27 00:00:36 +0200721 "args",
722 "body",
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000723};
Serhiy Storchaka43c97312019-09-10 13:02:30 +0300724static const char * const IfExp_fields[]={
Victor Stinnerce72e1c2013-07-27 00:00:36 +0200725 "test",
726 "body",
727 "orelse",
Thomas Woutersdca3b9c2006-02-27 00:24:13 +0000728};
Serhiy Storchaka43c97312019-09-10 13:02:30 +0300729static const char * const Dict_fields[]={
Victor Stinnerce72e1c2013-07-27 00:00:36 +0200730 "keys",
731 "values",
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000732};
Serhiy Storchaka43c97312019-09-10 13:02:30 +0300733static const char * const Set_fields[]={
Victor Stinnerce72e1c2013-07-27 00:00:36 +0200734 "elts",
Guido van Rossum86e58e22006-08-28 15:27:34 +0000735};
Serhiy Storchaka43c97312019-09-10 13:02:30 +0300736static const char * const ListComp_fields[]={
Victor Stinnerce72e1c2013-07-27 00:00:36 +0200737 "elt",
738 "generators",
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000739};
Serhiy Storchaka43c97312019-09-10 13:02:30 +0300740static const char * const SetComp_fields[]={
Victor Stinnerce72e1c2013-07-27 00:00:36 +0200741 "elt",
742 "generators",
Nick Coghlan650f0d02007-04-15 12:05:43 +0000743};
Serhiy Storchaka43c97312019-09-10 13:02:30 +0300744static const char * const DictComp_fields[]={
Victor Stinnerce72e1c2013-07-27 00:00:36 +0200745 "key",
746 "value",
747 "generators",
Guido van Rossum992d4a32007-07-11 13:09:30 +0000748};
Serhiy Storchaka43c97312019-09-10 13:02:30 +0300749static const char * const GeneratorExp_fields[]={
Victor Stinnerce72e1c2013-07-27 00:00:36 +0200750 "elt",
751 "generators",
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000752};
Serhiy Storchaka43c97312019-09-10 13:02:30 +0300753static const char * const Await_fields[]={
Yury Selivanov75445082015-05-11 22:57:16 -0400754 "value",
755};
Serhiy Storchaka43c97312019-09-10 13:02:30 +0300756static const char * const Yield_fields[]={
Victor Stinnerce72e1c2013-07-27 00:00:36 +0200757 "value",
Benjamin Peterson527c6222012-01-14 08:58:23 -0500758};
Serhiy Storchaka43c97312019-09-10 13:02:30 +0300759static const char * const YieldFrom_fields[]={
Victor Stinnerce72e1c2013-07-27 00:00:36 +0200760 "value",
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000761};
Serhiy Storchaka43c97312019-09-10 13:02:30 +0300762static const char * const Compare_fields[]={
Victor Stinnerce72e1c2013-07-27 00:00:36 +0200763 "left",
764 "ops",
765 "comparators",
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000766};
Serhiy Storchaka43c97312019-09-10 13:02:30 +0300767static const char * const Call_fields[]={
Victor Stinnerce72e1c2013-07-27 00:00:36 +0200768 "func",
769 "args",
770 "keywords",
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000771};
Serhiy Storchaka43c97312019-09-10 13:02:30 +0300772static const char * const FormattedValue_fields[]={
Eric V. Smith235a6f02015-09-19 14:51:32 -0400773 "value",
774 "conversion",
775 "format_spec",
776};
Serhiy Storchaka43c97312019-09-10 13:02:30 +0300777static const char * const JoinedStr_fields[]={
Eric V. Smith235a6f02015-09-19 14:51:32 -0400778 "values",
779};
Serhiy Storchaka43c97312019-09-10 13:02:30 +0300780static const char * const Constant_fields[]={
Victor Stinnerf2c1aa12016-01-26 00:40:57 +0100781 "value",
Guido van Rossum10f8ce62019-03-13 13:00:46 -0700782 "kind",
Victor Stinnerf2c1aa12016-01-26 00:40:57 +0100783};
Serhiy Storchaka43c97312019-09-10 13:02:30 +0300784static const char * const Attribute_fields[]={
Victor Stinnerce72e1c2013-07-27 00:00:36 +0200785 "value",
786 "attr",
787 "ctx",
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000788};
Serhiy Storchaka43c97312019-09-10 13:02:30 +0300789static const char * const Subscript_fields[]={
Victor Stinnerce72e1c2013-07-27 00:00:36 +0200790 "value",
791 "slice",
792 "ctx",
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000793};
Serhiy Storchaka43c97312019-09-10 13:02:30 +0300794static const char * const Starred_fields[]={
Victor Stinnerce72e1c2013-07-27 00:00:36 +0200795 "value",
796 "ctx",
Guido van Rossum0368b722007-05-11 16:50:42 +0000797};
Serhiy Storchaka43c97312019-09-10 13:02:30 +0300798static const char * const Name_fields[]={
Victor Stinnerce72e1c2013-07-27 00:00:36 +0200799 "id",
800 "ctx",
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000801};
Serhiy Storchaka43c97312019-09-10 13:02:30 +0300802static const char * const List_fields[]={
Victor Stinnerce72e1c2013-07-27 00:00:36 +0200803 "elts",
804 "ctx",
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000805};
Serhiy Storchaka43c97312019-09-10 13:02:30 +0300806static const char * const Tuple_fields[]={
Victor Stinnerce72e1c2013-07-27 00:00:36 +0200807 "elts",
808 "ctx",
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000809};
Serhiy Storchaka43c97312019-09-10 13:02:30 +0300810static const char * const Slice_fields[]={
Victor Stinnerce72e1c2013-07-27 00:00:36 +0200811 "lower",
812 "upper",
813 "step",
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000814};
Victor Stinner74419f02020-07-03 11:35:37 +0200815static PyObject* ast2obj_expr_context(astmodulestate *state, expr_context_ty);
816static PyObject* ast2obj_boolop(astmodulestate *state, boolop_ty);
817static PyObject* ast2obj_operator(astmodulestate *state, operator_ty);
818static PyObject* ast2obj_unaryop(astmodulestate *state, unaryop_ty);
819static PyObject* ast2obj_cmpop(astmodulestate *state, cmpop_ty);
820static PyObject* ast2obj_comprehension(astmodulestate *state, void*);
Serhiy Storchaka43c97312019-09-10 13:02:30 +0300821static const char * const comprehension_fields[]={
Victor Stinnerce72e1c2013-07-27 00:00:36 +0200822 "target",
823 "iter",
824 "ifs",
Yury Selivanov52c4e7c2016-09-09 10:36:01 -0700825 "is_async",
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000826};
Serhiy Storchaka43c97312019-09-10 13:02:30 +0300827static const char * const excepthandler_attributes[] = {
Victor Stinnerce72e1c2013-07-27 00:00:36 +0200828 "lineno",
829 "col_offset",
Ivan Levkivskyi9932a222019-01-22 11:18:22 +0000830 "end_lineno",
831 "end_col_offset",
Neal Norwitzad74aa82008-03-31 05:14:30 +0000832};
Victor Stinner74419f02020-07-03 11:35:37 +0200833static PyObject* ast2obj_excepthandler(astmodulestate *state, void*);
Serhiy Storchaka43c97312019-09-10 13:02:30 +0300834static const char * const ExceptHandler_fields[]={
Victor Stinnerce72e1c2013-07-27 00:00:36 +0200835 "type",
836 "name",
837 "body",
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000838};
Victor Stinner74419f02020-07-03 11:35:37 +0200839static PyObject* ast2obj_arguments(astmodulestate *state, void*);
Serhiy Storchaka43c97312019-09-10 13:02:30 +0300840static const char * const arguments_fields[]={
Pablo Galindo8c77b8c2019-04-29 13:36:57 +0100841 "posonlyargs",
Pablo Galindocd6e83b2019-07-15 01:32:18 +0200842 "args",
Victor Stinnerce72e1c2013-07-27 00:00:36 +0200843 "vararg",
Victor Stinnerce72e1c2013-07-27 00:00:36 +0200844 "kwonlyargs",
Victor Stinnerce72e1c2013-07-27 00:00:36 +0200845 "kw_defaults",
Victor Stinneree4b59c2013-07-27 00:01:35 +0200846 "kwarg",
847 "defaults",
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000848};
Victor Stinner74419f02020-07-03 11:35:37 +0200849static PyObject* ast2obj_arg(astmodulestate *state, void*);
Serhiy Storchaka43c97312019-09-10 13:02:30 +0300850static const char * const arg_attributes[] = {
Victor Stinneree4b59c2013-07-27 00:01:35 +0200851 "lineno",
852 "col_offset",
Ivan Levkivskyi9932a222019-01-22 11:18:22 +0000853 "end_lineno",
854 "end_col_offset",
Benjamin Petersoncda75be2013-03-18 10:48:58 -0700855};
Serhiy Storchaka43c97312019-09-10 13:02:30 +0300856static const char * const arg_fields[]={
Victor Stinnerce72e1c2013-07-27 00:00:36 +0200857 "arg",
858 "annotation",
Guido van Rossumdcfcd142019-01-31 03:40:27 -0800859 "type_comment",
Neal Norwitzc1505362006-12-28 06:47:50 +0000860};
Victor Stinner74419f02020-07-03 11:35:37 +0200861static PyObject* ast2obj_keyword(astmodulestate *state, void*);
Pablo Galindo168660b2020-04-02 00:47:39 +0100862static const char * const keyword_attributes[] = {
863 "lineno",
864 "col_offset",
865 "end_lineno",
866 "end_col_offset",
867};
Serhiy Storchaka43c97312019-09-10 13:02:30 +0300868static const char * const keyword_fields[]={
Victor Stinnerce72e1c2013-07-27 00:00:36 +0200869 "arg",
870 "value",
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000871};
Victor Stinner74419f02020-07-03 11:35:37 +0200872static PyObject* ast2obj_alias(astmodulestate *state, void*);
Serhiy Storchaka43c97312019-09-10 13:02:30 +0300873static const char * const alias_fields[]={
Victor Stinnerce72e1c2013-07-27 00:00:36 +0200874 "name",
875 "asname",
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000876};
Victor Stinner74419f02020-07-03 11:35:37 +0200877static PyObject* ast2obj_withitem(astmodulestate *state, void*);
Serhiy Storchaka43c97312019-09-10 13:02:30 +0300878static const char * const withitem_fields[]={
Victor Stinnerce72e1c2013-07-27 00:00:36 +0200879 "context_expr",
880 "optional_vars",
Benjamin Petersonbf1bbc12011-05-27 13:58:08 -0500881};
Victor Stinner74419f02020-07-03 11:35:37 +0200882static PyObject* ast2obj_type_ignore(astmodulestate *state, void*);
Serhiy Storchaka43c97312019-09-10 13:02:30 +0300883static const char * const TypeIgnore_fields[]={
Guido van Rossumdcfcd142019-01-31 03:40:27 -0800884 "lineno",
Michael J. Sullivan933e1502019-05-22 07:54:20 -0700885 "tag",
Guido van Rossumdcfcd142019-01-31 03:40:27 -0800886};
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000887
888
INADA Naokifc489082017-01-25 22:33:43 +0900889
Benjamin Peterson7e0dbfb2012-03-12 09:46:44 -0700890typedef struct {
Victor Stinner45e50de2012-03-13 01:17:31 +0100891 PyObject_HEAD
Benjamin Peterson7e0dbfb2012-03-12 09:46:44 -0700892 PyObject *dict;
893} AST_object;
894
Benjamin Peterson1767e022012-03-14 21:50:29 -0500895static void
896ast_dealloc(AST_object *self)
897{
INADA Naokia6296d32017-08-24 14:55:17 +0900898 /* bpo-31095: UnTrack is needed before calling any callbacks */
Eddie Elizondo0247e802019-09-14 09:38:17 -0400899 PyTypeObject *tp = Py_TYPE(self);
INADA Naokia6296d32017-08-24 14:55:17 +0900900 PyObject_GC_UnTrack(self);
Benjamin Peterson1767e022012-03-14 21:50:29 -0500901 Py_CLEAR(self->dict);
Eddie Elizondo0247e802019-09-14 09:38:17 -0400902 freefunc free_func = PyType_GetSlot(tp, Py_tp_free);
903 assert(free_func != NULL);
904 free_func(self);
905 Py_DECREF(tp);
Benjamin Peterson1767e022012-03-14 21:50:29 -0500906}
907
Neal Norwitz207c9f32008-03-31 04:42:11 +0000908static int
Benjamin Peterson81071762012-07-08 11:03:46 -0700909ast_traverse(AST_object *self, visitproc visit, void *arg)
910{
Pablo Galindo1cf15af2020-05-27 10:03:38 +0100911 Py_VISIT(Py_TYPE(self));
Benjamin Peterson81071762012-07-08 11:03:46 -0700912 Py_VISIT(self->dict);
913 return 0;
914}
915
Serhiy Storchakaa5c42282018-05-31 07:34:34 +0300916static int
Benjamin Peterson81071762012-07-08 11:03:46 -0700917ast_clear(AST_object *self)
918{
919 Py_CLEAR(self->dict);
Serhiy Storchakaa5c42282018-05-31 07:34:34 +0300920 return 0;
Benjamin Peterson81071762012-07-08 11:03:46 -0700921}
922
923static int
Neal Norwitz207c9f32008-03-31 04:42:11 +0000924ast_type_init(PyObject *self, PyObject *args, PyObject *kw)
925{
Victor Stinner1f764532020-07-04 23:18:15 +0200926 astmodulestate *state = get_global_ast_state();
927 if (state == NULL) {
928 return -1;
929 }
930
Neal Norwitz207c9f32008-03-31 04:42:11 +0000931 Py_ssize_t i, numfields = 0;
932 int res = -1;
933 PyObject *key, *value, *fields;
Victor Stinner74419f02020-07-03 11:35:37 +0200934 if (_PyObject_LookupAttr((PyObject*)Py_TYPE(self), state->_fields, &fields) < 0) {
Serhiy Storchakaf320be72018-01-25 10:49:40 +0200935 goto cleanup;
936 }
Neal Norwitz207c9f32008-03-31 04:42:11 +0000937 if (fields) {
938 numfields = PySequence_Size(fields);
Rémi Lapeyrec73914a2020-05-24 23:12:57 +0200939 if (numfields == -1) {
Neal Norwitz207c9f32008-03-31 04:42:11 +0000940 goto cleanup;
Rémi Lapeyrec73914a2020-05-24 23:12:57 +0200941 }
Neal Norwitz207c9f32008-03-31 04:42:11 +0000942 }
INADA Naoki4c78c522017-02-24 02:48:17 +0900943
Neal Norwitz207c9f32008-03-31 04:42:11 +0000944 res = 0; /* if no error occurs, this stays 0 to the end */
INADA Naoki4c78c522017-02-24 02:48:17 +0900945 if (numfields < PyTuple_GET_SIZE(args)) {
946 PyErr_Format(PyExc_TypeError, "%.400s constructor takes at most "
947 "%zd positional argument%s",
Dino Viehlandac46eb42019-09-11 10:16:34 -0700948 _PyType_Name(Py_TYPE(self)),
INADA Naoki4c78c522017-02-24 02:48:17 +0900949 numfields, numfields == 1 ? "" : "s");
950 res = -1;
951 goto cleanup;
952 }
953 for (i = 0; i < PyTuple_GET_SIZE(args); i++) {
954 /* cannot be reached when fields is NULL */
955 PyObject *name = PySequence_GetItem(fields, i);
956 if (!name) {
Neal Norwitz207c9f32008-03-31 04:42:11 +0000957 res = -1;
958 goto cleanup;
959 }
INADA Naoki4c78c522017-02-24 02:48:17 +0900960 res = PyObject_SetAttr(self, name, PyTuple_GET_ITEM(args, i));
961 Py_DECREF(name);
Rémi Lapeyrec73914a2020-05-24 23:12:57 +0200962 if (res < 0) {
INADA Naoki4c78c522017-02-24 02:48:17 +0900963 goto cleanup;
Rémi Lapeyrec73914a2020-05-24 23:12:57 +0200964 }
Neal Norwitz207c9f32008-03-31 04:42:11 +0000965 }
966 if (kw) {
967 i = 0; /* needed by PyDict_Next */
968 while (PyDict_Next(kw, &i, &key, &value)) {
Rémi Lapeyrec73914a2020-05-24 23:12:57 +0200969 int contains = PySequence_Contains(fields, key);
970 if (contains == -1) {
971 res = -1;
Neal Norwitz207c9f32008-03-31 04:42:11 +0000972 goto cleanup;
Rémi Lapeyrec73914a2020-05-24 23:12:57 +0200973 } else if (contains == 1) {
974 Py_ssize_t p = PySequence_Index(fields, key);
975 if (p == -1) {
976 res = -1;
977 goto cleanup;
978 }
979 if (p < PyTuple_GET_SIZE(args)) {
980 PyErr_Format(PyExc_TypeError,
981 "%.400s got multiple values for argument '%U'",
982 Py_TYPE(self)->tp_name, key);
983 res = -1;
984 goto cleanup;
985 }
986 }
987 res = PyObject_SetAttr(self, key, value);
988 if (res < 0) {
989 goto cleanup;
990 }
Neal Norwitz207c9f32008-03-31 04:42:11 +0000991 }
992 }
993 cleanup:
994 Py_XDECREF(fields);
995 return res;
996}
997
Neal Norwitzee9b10a2008-03-31 05:29:39 +0000998/* Pickling support */
999static PyObject *
1000ast_type_reduce(PyObject *self, PyObject *unused)
1001{
Victor Stinner91e1bc12020-07-03 14:15:53 +02001002 astmodulestate *state = get_global_ast_state();
Victor Stinnerb1cc6ba2020-07-03 20:01:46 +02001003 if (state == NULL) {
1004 return NULL;
1005 }
1006
Serhiy Storchakaf320be72018-01-25 10:49:40 +02001007 PyObject *dict;
Victor Stinner74419f02020-07-03 11:35:37 +02001008 if (_PyObject_LookupAttr(self, state->__dict__, &dict) < 0) {
Serhiy Storchakaf320be72018-01-25 10:49:40 +02001009 return NULL;
Neal Norwitzee9b10a2008-03-31 05:29:39 +00001010 }
1011 if (dict) {
Serhiy Storchakaf320be72018-01-25 10:49:40 +02001012 return Py_BuildValue("O()N", Py_TYPE(self), dict);
Neal Norwitzee9b10a2008-03-31 05:29:39 +00001013 }
1014 return Py_BuildValue("O()", Py_TYPE(self));
1015}
1016
Eddie Elizondo3368f3c2019-09-19 09:29:05 -07001017static PyMemberDef ast_type_members[] = {
1018 {"__dictoffset__", T_PYSSIZET, offsetof(AST_object, dict), READONLY},
1019 {NULL} /* Sentinel */
1020};
1021
Neal Norwitzee9b10a2008-03-31 05:29:39 +00001022static PyMethodDef ast_type_methods[] = {
1023 {"__reduce__", ast_type_reduce, METH_NOARGS, NULL},
1024 {NULL}
1025};
1026
Benjamin Peterson7e0dbfb2012-03-12 09:46:44 -07001027static PyGetSetDef ast_type_getsets[] = {
1028 {"__dict__", PyObject_GenericGetDict, PyObject_GenericSetDict},
1029 {NULL}
1030};
1031
Dino Viehlandac46eb42019-09-11 10:16:34 -07001032static PyType_Slot AST_type_slots[] = {
1033 {Py_tp_dealloc, ast_dealloc},
1034 {Py_tp_getattro, PyObject_GenericGetAttr},
1035 {Py_tp_setattro, PyObject_GenericSetAttr},
1036 {Py_tp_traverse, ast_traverse},
1037 {Py_tp_clear, ast_clear},
Eddie Elizondo3368f3c2019-09-19 09:29:05 -07001038 {Py_tp_members, ast_type_members},
Dino Viehlandac46eb42019-09-11 10:16:34 -07001039 {Py_tp_methods, ast_type_methods},
1040 {Py_tp_getset, ast_type_getsets},
1041 {Py_tp_init, ast_type_init},
1042 {Py_tp_alloc, PyType_GenericAlloc},
1043 {Py_tp_new, PyType_GenericNew},
Dino Viehlandac46eb42019-09-11 10:16:34 -07001044 {Py_tp_free, PyObject_GC_Del},
1045 {0, 0},
1046};
1047
1048static PyType_Spec AST_type_spec = {
Serhiy Storchakabace59d2020-03-22 20:33:34 +02001049 "ast.AST",
Benjamin Peterson7e0dbfb2012-03-12 09:46:44 -07001050 sizeof(AST_object),
Neal Norwitz207c9f32008-03-31 04:42:11 +00001051 0,
Dino Viehlandac46eb42019-09-11 10:16:34 -07001052 Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE | Py_TPFLAGS_HAVE_GC,
1053 AST_type_slots
Neal Norwitz207c9f32008-03-31 04:42:11 +00001054};
1055
Dino Viehlandac46eb42019-09-11 10:16:34 -07001056static PyObject *
Victor Stinner74419f02020-07-03 11:35:37 +02001057make_type(astmodulestate *state, const char *type, PyObject* base,
1058 const char* const* fields, int num_fields, const char *doc)
Martin v. Löwisbd260da2006-02-26 19:42:26 +00001059{
1060 PyObject *fnames, *result;
1061 int i;
Neal Norwitzee9b10a2008-03-31 05:29:39 +00001062 fnames = PyTuple_New(num_fields);
1063 if (!fnames) return NULL;
1064 for (i = 0; i < num_fields; i++) {
Serhiy Storchaka43c97312019-09-10 13:02:30 +03001065 PyObject *field = PyUnicode_InternFromString(fields[i]);
Martin v. Löwisbd260da2006-02-26 19:42:26 +00001066 if (!field) {
1067 Py_DECREF(fnames);
1068 return NULL;
1069 }
1070 PyTuple_SET_ITEM(fnames, i, field);
1071 }
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001072 result = PyObject_CallFunction((PyObject*)&PyType_Type, "s(O){OOOOOs}",
INADA Naokifc489082017-01-25 22:33:43 +09001073 type, base,
Victor Stinner74419f02020-07-03 11:35:37 +02001074 state->_fields, fnames,
1075 state->__module__,
1076 state->ast,
1077 state->__doc__, doc);
Martin v. Löwisbd260da2006-02-26 19:42:26 +00001078 Py_DECREF(fnames);
Dino Viehlandac46eb42019-09-11 10:16:34 -07001079 return result;
Martin v. Löwisbd260da2006-02-26 19:42:26 +00001080}
1081
Serhiy Storchaka43c97312019-09-10 13:02:30 +03001082static int
Victor Stinner74419f02020-07-03 11:35:37 +02001083add_attributes(astmodulestate *state, PyObject *type, const char * const *attrs, int num_fields)
Martin v. Löwis577b5b92006-02-27 15:23:19 +00001084{
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00001085 int i, result;
Neal Norwitz207c9f32008-03-31 04:42:11 +00001086 PyObject *s, *l = PyTuple_New(num_fields);
Benjamin Peterson3e5cd1d2010-06-27 21:45:24 +00001087 if (!l)
1088 return 0;
1089 for (i = 0; i < num_fields; i++) {
Serhiy Storchaka43c97312019-09-10 13:02:30 +03001090 s = PyUnicode_InternFromString(attrs[i]);
Martin v. Löwis577b5b92006-02-27 15:23:19 +00001091 if (!s) {
1092 Py_DECREF(l);
1093 return 0;
1094 }
Neal Norwitz207c9f32008-03-31 04:42:11 +00001095 PyTuple_SET_ITEM(l, i, s);
Martin v. Löwis577b5b92006-02-27 15:23:19 +00001096 }
Victor Stinner74419f02020-07-03 11:35:37 +02001097 result = PyObject_SetAttr(type, state->_attributes, l) >= 0;
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00001098 Py_DECREF(l);
1099 return result;
Martin v. Löwis577b5b92006-02-27 15:23:19 +00001100}
1101
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00001102/* Conversion AST -> Python */
1103
Victor Stinner74419f02020-07-03 11:35:37 +02001104static PyObject* ast2obj_list(astmodulestate *state, asdl_seq *seq, PyObject* (*func)(astmodulestate *state, void*))
Martin v. Löwisbd260da2006-02-26 19:42:26 +00001105{
Benjamin Peterson77fa9372012-05-15 10:10:27 -07001106 Py_ssize_t i, n = asdl_seq_LEN(seq);
Martin v. Löwisbd260da2006-02-26 19:42:26 +00001107 PyObject *result = PyList_New(n);
1108 PyObject *value;
1109 if (!result)
1110 return NULL;
1111 for (i = 0; i < n; i++) {
Pablo Galindoa5634c42020-09-16 19:42:00 +01001112 value = func(state, asdl_seq_GET_UNTYPED(seq, i));
Martin v. Löwisbd260da2006-02-26 19:42:26 +00001113 if (!value) {
1114 Py_DECREF(result);
1115 return NULL;
1116 }
1117 PyList_SET_ITEM(result, i, value);
1118 }
1119 return result;
1120}
1121
Victor Stinner74419f02020-07-03 11:35:37 +02001122static PyObject* ast2obj_object(astmodulestate *Py_UNUSED(state), void *o)
Martin v. Löwisbd260da2006-02-26 19:42:26 +00001123{
1124 if (!o)
1125 o = Py_None;
1126 Py_INCREF((PyObject*)o);
1127 return (PyObject*)o;
1128}
Victor Stinnerf2c1aa12016-01-26 00:40:57 +01001129#define ast2obj_constant ast2obj_object
Martin v. Löwisbd260da2006-02-26 19:42:26 +00001130#define ast2obj_identifier ast2obj_object
1131#define ast2obj_string ast2obj_object
Martin v. Löwisbd260da2006-02-26 19:42:26 +00001132
Victor Stinner74419f02020-07-03 11:35:37 +02001133static PyObject* ast2obj_int(astmodulestate *Py_UNUSED(state), long b)
Martin v. Löwis577b5b92006-02-27 15:23:19 +00001134{
Christian Heimes217cfd12007-12-02 14:31:20 +00001135 return PyLong_FromLong(b);
Martin v. Löwis577b5b92006-02-27 15:23:19 +00001136}
1137
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00001138/* Conversion Python -> AST */
1139
Victor Stinner74419f02020-07-03 11:35:37 +02001140static int obj2ast_object(astmodulestate *Py_UNUSED(state), PyObject* obj, PyObject** out, PyArena* arena)
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00001141{
1142 if (obj == Py_None)
1143 obj = NULL;
Christian Heimes70c94e72013-07-27 00:33:13 +02001144 if (obj) {
1145 if (PyArena_AddPyObject(arena, obj) < 0) {
1146 *out = NULL;
1147 return -1;
1148 }
1149 Py_INCREF(obj);
1150 }
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00001151 *out = obj;
1152 return 0;
1153}
1154
Victor Stinner74419f02020-07-03 11:35:37 +02001155static int obj2ast_constant(astmodulestate *Py_UNUSED(state), PyObject* obj, PyObject** out, PyArena* arena)
Victor Stinnerf2c1aa12016-01-26 00:40:57 +01001156{
Serhiy Storchaka3f228112018-09-27 17:42:37 +03001157 if (PyArena_AddPyObject(arena, obj) < 0) {
1158 *out = NULL;
1159 return -1;
Victor Stinnerf2c1aa12016-01-26 00:40:57 +01001160 }
Serhiy Storchaka3f228112018-09-27 17:42:37 +03001161 Py_INCREF(obj);
Victor Stinnerf2c1aa12016-01-26 00:40:57 +01001162 *out = obj;
1163 return 0;
1164}
1165
Victor Stinner74419f02020-07-03 11:35:37 +02001166static int obj2ast_identifier(astmodulestate *state, PyObject* obj, PyObject** out, PyArena* arena)
Benjamin Peterson2193d2b2011-07-22 10:50:23 -05001167{
Benjamin Peterson180e6352011-07-22 11:09:07 -05001168 if (!PyUnicode_CheckExact(obj) && obj != Py_None) {
1169 PyErr_SetString(PyExc_TypeError, "AST identifier must be of type str");
Benjamin Peterson2193d2b2011-07-22 10:50:23 -05001170 return 1;
1171 }
Victor Stinner74419f02020-07-03 11:35:37 +02001172 return obj2ast_object(state, obj, out, arena);
Benjamin Peterson2193d2b2011-07-22 10:50:23 -05001173}
1174
Victor Stinner74419f02020-07-03 11:35:37 +02001175static int obj2ast_string(astmodulestate *state, PyObject* obj, PyObject** out, PyArena* arena)
Guido van Rossumdcfcd142019-01-31 03:40:27 -08001176{
1177 if (!PyUnicode_CheckExact(obj) && !PyBytes_CheckExact(obj)) {
1178 PyErr_SetString(PyExc_TypeError, "AST string must be of type str");
1179 return 1;
1180 }
Victor Stinner74419f02020-07-03 11:35:37 +02001181 return obj2ast_object(state, obj, out, arena);
Guido van Rossumdcfcd142019-01-31 03:40:27 -08001182}
1183
Victor Stinner74419f02020-07-03 11:35:37 +02001184static int obj2ast_int(astmodulestate* Py_UNUSED(state), PyObject* obj, int* out, PyArena* arena)
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00001185{
1186 int i;
1187 if (!PyLong_Check(obj)) {
Amaury Forgeot d'Arc5e8f8102011-11-22 21:52:30 +01001188 PyErr_Format(PyExc_ValueError, "invalid integer value: %R", obj);
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00001189 return 1;
1190 }
1191
Serhiy Storchaka56f6e762015-09-06 21:25:30 +03001192 i = _PyLong_AsInt(obj);
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00001193 if (i == -1 && PyErr_Occurred())
1194 return 1;
1195 *out = i;
1196 return 0;
1197}
1198
Victor Stinner74419f02020-07-03 11:35:37 +02001199static int add_ast_fields(astmodulestate *state)
Benjamin Petersonce825f12008-10-24 23:11:02 +00001200{
Dino Viehlandac46eb42019-09-11 10:16:34 -07001201 PyObject *empty_tuple;
Benjamin Petersonce825f12008-10-24 23:11:02 +00001202 empty_tuple = PyTuple_New(0);
1203 if (!empty_tuple ||
Victor Stinner74419f02020-07-03 11:35:37 +02001204 PyObject_SetAttrString(state->AST_type, "_fields", empty_tuple) < 0 ||
1205 PyObject_SetAttrString(state->AST_type, "_attributes", empty_tuple) < 0) {
Benjamin Petersonce825f12008-10-24 23:11:02 +00001206 Py_XDECREF(empty_tuple);
1207 return -1;
1208 }
1209 Py_DECREF(empty_tuple);
1210 return 0;
1211}
1212
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00001213
Victor Stinnerb1cc6ba2020-07-03 20:01:46 +02001214static int init_types(astmodulestate *state)
Martin v. Löwisbd260da2006-02-26 19:42:26 +00001215{
Dino Viehlandac46eb42019-09-11 10:16:34 -07001216 if (state->initialized) return 1;
Victor Stinner74419f02020-07-03 11:35:37 +02001217 if (init_identifiers(state) < 0) return 0;
Dino Viehlandac46eb42019-09-11 10:16:34 -07001218 state->AST_type = PyType_FromSpec(&AST_type_spec);
1219 if (!state->AST_type) return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001220 if (add_ast_fields(state) < 0) return 0;
1221 state->mod_type = make_type(state, "mod", state->AST_type, NULL, 0,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001222 "mod = Module(stmt* body, type_ignore* type_ignores)\n"
1223 " | Interactive(stmt* body)\n"
1224 " | Expression(expr body)\n"
1225 " | FunctionType(expr* argtypes, expr returns)");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001226 if (!state->mod_type) return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001227 if (!add_attributes(state, state->mod_type, NULL, 0)) return 0;
1228 state->Module_type = make_type(state, "Module", state->mod_type,
1229 Module_fields, 2,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001230 "Module(stmt* body, type_ignore* type_ignores)");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001231 if (!state->Module_type) return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001232 state->Interactive_type = make_type(state, "Interactive", state->mod_type,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001233 Interactive_fields, 1,
1234 "Interactive(stmt* body)");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001235 if (!state->Interactive_type) return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001236 state->Expression_type = make_type(state, "Expression", state->mod_type,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001237 Expression_fields, 1,
1238 "Expression(expr body)");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001239 if (!state->Expression_type) return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001240 state->FunctionType_type = make_type(state, "FunctionType",
1241 state->mod_type, FunctionType_fields,
1242 2,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001243 "FunctionType(expr* argtypes, expr returns)");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001244 if (!state->FunctionType_type) return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001245 state->stmt_type = make_type(state, "stmt", state->AST_type, NULL, 0,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001246 "stmt = FunctionDef(identifier name, arguments args, stmt* body, expr* decorator_list, expr? returns, string? type_comment)\n"
1247 " | AsyncFunctionDef(identifier name, arguments args, stmt* body, expr* decorator_list, expr? returns, string? type_comment)\n"
1248 " | ClassDef(identifier name, expr* bases, keyword* keywords, stmt* body, expr* decorator_list)\n"
1249 " | Return(expr? value)\n"
1250 " | Delete(expr* targets)\n"
1251 " | Assign(expr* targets, expr value, string? type_comment)\n"
1252 " | AugAssign(expr target, operator op, expr value)\n"
1253 " | AnnAssign(expr target, expr annotation, expr? value, int simple)\n"
1254 " | For(expr target, expr iter, stmt* body, stmt* orelse, string? type_comment)\n"
1255 " | AsyncFor(expr target, expr iter, stmt* body, stmt* orelse, string? type_comment)\n"
1256 " | While(expr test, stmt* body, stmt* orelse)\n"
1257 " | If(expr test, stmt* body, stmt* orelse)\n"
1258 " | With(withitem* items, stmt* body, string? type_comment)\n"
1259 " | AsyncWith(withitem* items, stmt* body, string? type_comment)\n"
1260 " | Raise(expr? exc, expr? cause)\n"
1261 " | Try(stmt* body, excepthandler* handlers, stmt* orelse, stmt* finalbody)\n"
1262 " | Assert(expr test, expr? msg)\n"
1263 " | Import(alias* names)\n"
1264 " | ImportFrom(identifier? module, alias* names, int? level)\n"
1265 " | Global(identifier* names)\n"
1266 " | Nonlocal(identifier* names)\n"
1267 " | Expr(expr value)\n"
1268 " | Pass\n"
1269 " | Break\n"
1270 " | Continue");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001271 if (!state->stmt_type) return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001272 if (!add_attributes(state, state->stmt_type, stmt_attributes, 4)) return 0;
Serhiy Storchakab7e95252020-03-10 00:07:47 +02001273 if (PyObject_SetAttr(state->stmt_type, state->end_lineno, Py_None) == -1)
1274 return 0;
1275 if (PyObject_SetAttr(state->stmt_type, state->end_col_offset, Py_None) ==
1276 -1)
1277 return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001278 state->FunctionDef_type = make_type(state, "FunctionDef", state->stmt_type,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001279 FunctionDef_fields, 6,
1280 "FunctionDef(identifier name, arguments args, stmt* body, expr* decorator_list, expr? returns, string? type_comment)");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001281 if (!state->FunctionDef_type) return 0;
Serhiy Storchakab7e95252020-03-10 00:07:47 +02001282 if (PyObject_SetAttr(state->FunctionDef_type, state->returns, Py_None) ==
1283 -1)
1284 return 0;
1285 if (PyObject_SetAttr(state->FunctionDef_type, state->type_comment, Py_None)
1286 == -1)
1287 return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001288 state->AsyncFunctionDef_type = make_type(state, "AsyncFunctionDef",
Dino Viehlandac46eb42019-09-11 10:16:34 -07001289 state->stmt_type,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001290 AsyncFunctionDef_fields, 6,
1291 "AsyncFunctionDef(identifier name, arguments args, stmt* body, expr* decorator_list, expr? returns, string? type_comment)");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001292 if (!state->AsyncFunctionDef_type) return 0;
Serhiy Storchakab7e95252020-03-10 00:07:47 +02001293 if (PyObject_SetAttr(state->AsyncFunctionDef_type, state->returns, Py_None)
1294 == -1)
1295 return 0;
1296 if (PyObject_SetAttr(state->AsyncFunctionDef_type, state->type_comment,
1297 Py_None) == -1)
1298 return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001299 state->ClassDef_type = make_type(state, "ClassDef", state->stmt_type,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001300 ClassDef_fields, 5,
1301 "ClassDef(identifier name, expr* bases, keyword* keywords, stmt* body, expr* decorator_list)");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001302 if (!state->ClassDef_type) return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001303 state->Return_type = make_type(state, "Return", state->stmt_type,
1304 Return_fields, 1,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001305 "Return(expr? value)");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001306 if (!state->Return_type) return 0;
Serhiy Storchakab7e95252020-03-10 00:07:47 +02001307 if (PyObject_SetAttr(state->Return_type, state->value, Py_None) == -1)
1308 return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001309 state->Delete_type = make_type(state, "Delete", state->stmt_type,
1310 Delete_fields, 1,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001311 "Delete(expr* targets)");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001312 if (!state->Delete_type) return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001313 state->Assign_type = make_type(state, "Assign", state->stmt_type,
1314 Assign_fields, 3,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001315 "Assign(expr* targets, expr value, string? type_comment)");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001316 if (!state->Assign_type) return 0;
Serhiy Storchakab7e95252020-03-10 00:07:47 +02001317 if (PyObject_SetAttr(state->Assign_type, state->type_comment, Py_None) ==
1318 -1)
1319 return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001320 state->AugAssign_type = make_type(state, "AugAssign", state->stmt_type,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001321 AugAssign_fields, 3,
1322 "AugAssign(expr target, operator op, expr value)");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001323 if (!state->AugAssign_type) return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001324 state->AnnAssign_type = make_type(state, "AnnAssign", state->stmt_type,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001325 AnnAssign_fields, 4,
1326 "AnnAssign(expr target, expr annotation, expr? value, int simple)");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001327 if (!state->AnnAssign_type) return 0;
Serhiy Storchakab7e95252020-03-10 00:07:47 +02001328 if (PyObject_SetAttr(state->AnnAssign_type, state->value, Py_None) == -1)
1329 return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001330 state->For_type = make_type(state, "For", state->stmt_type, For_fields, 5,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001331 "For(expr target, expr iter, stmt* body, stmt* orelse, string? type_comment)");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001332 if (!state->For_type) return 0;
Serhiy Storchakab7e95252020-03-10 00:07:47 +02001333 if (PyObject_SetAttr(state->For_type, state->type_comment, Py_None) == -1)
1334 return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001335 state->AsyncFor_type = make_type(state, "AsyncFor", state->stmt_type,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001336 AsyncFor_fields, 5,
1337 "AsyncFor(expr target, expr iter, stmt* body, stmt* orelse, string? type_comment)");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001338 if (!state->AsyncFor_type) return 0;
Serhiy Storchakab7e95252020-03-10 00:07:47 +02001339 if (PyObject_SetAttr(state->AsyncFor_type, state->type_comment, Py_None) ==
1340 -1)
1341 return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001342 state->While_type = make_type(state, "While", state->stmt_type,
1343 While_fields, 3,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001344 "While(expr test, stmt* body, stmt* orelse)");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001345 if (!state->While_type) return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001346 state->If_type = make_type(state, "If", state->stmt_type, If_fields, 3,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001347 "If(expr test, stmt* body, stmt* orelse)");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001348 if (!state->If_type) return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001349 state->With_type = make_type(state, "With", state->stmt_type, With_fields,
1350 3,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001351 "With(withitem* items, stmt* body, string? type_comment)");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001352 if (!state->With_type) return 0;
Serhiy Storchakab7e95252020-03-10 00:07:47 +02001353 if (PyObject_SetAttr(state->With_type, state->type_comment, Py_None) == -1)
1354 return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001355 state->AsyncWith_type = make_type(state, "AsyncWith", state->stmt_type,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001356 AsyncWith_fields, 3,
1357 "AsyncWith(withitem* items, stmt* body, string? type_comment)");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001358 if (!state->AsyncWith_type) return 0;
Serhiy Storchakab7e95252020-03-10 00:07:47 +02001359 if (PyObject_SetAttr(state->AsyncWith_type, state->type_comment, Py_None)
1360 == -1)
1361 return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001362 state->Raise_type = make_type(state, "Raise", state->stmt_type,
1363 Raise_fields, 2,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001364 "Raise(expr? exc, expr? cause)");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001365 if (!state->Raise_type) return 0;
Serhiy Storchakab7e95252020-03-10 00:07:47 +02001366 if (PyObject_SetAttr(state->Raise_type, state->exc, Py_None) == -1)
1367 return 0;
1368 if (PyObject_SetAttr(state->Raise_type, state->cause, Py_None) == -1)
1369 return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001370 state->Try_type = make_type(state, "Try", state->stmt_type, Try_fields, 4,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001371 "Try(stmt* body, excepthandler* handlers, stmt* orelse, stmt* finalbody)");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001372 if (!state->Try_type) return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001373 state->Assert_type = make_type(state, "Assert", state->stmt_type,
1374 Assert_fields, 2,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001375 "Assert(expr test, expr? msg)");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001376 if (!state->Assert_type) return 0;
Serhiy Storchakab7e95252020-03-10 00:07:47 +02001377 if (PyObject_SetAttr(state->Assert_type, state->msg, Py_None) == -1)
1378 return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001379 state->Import_type = make_type(state, "Import", state->stmt_type,
1380 Import_fields, 1,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001381 "Import(alias* names)");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001382 if (!state->Import_type) return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001383 state->ImportFrom_type = make_type(state, "ImportFrom", state->stmt_type,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001384 ImportFrom_fields, 3,
1385 "ImportFrom(identifier? module, alias* names, int? level)");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001386 if (!state->ImportFrom_type) return 0;
Serhiy Storchakab7e95252020-03-10 00:07:47 +02001387 if (PyObject_SetAttr(state->ImportFrom_type, state->module, Py_None) == -1)
1388 return 0;
1389 if (PyObject_SetAttr(state->ImportFrom_type, state->level, Py_None) == -1)
1390 return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001391 state->Global_type = make_type(state, "Global", state->stmt_type,
1392 Global_fields, 1,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001393 "Global(identifier* names)");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001394 if (!state->Global_type) return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001395 state->Nonlocal_type = make_type(state, "Nonlocal", state->stmt_type,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001396 Nonlocal_fields, 1,
1397 "Nonlocal(identifier* names)");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001398 if (!state->Nonlocal_type) return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001399 state->Expr_type = make_type(state, "Expr", state->stmt_type, Expr_fields,
1400 1,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001401 "Expr(expr value)");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001402 if (!state->Expr_type) return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001403 state->Pass_type = make_type(state, "Pass", state->stmt_type, NULL, 0,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001404 "Pass");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001405 if (!state->Pass_type) return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001406 state->Break_type = make_type(state, "Break", state->stmt_type, NULL, 0,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001407 "Break");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001408 if (!state->Break_type) return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001409 state->Continue_type = make_type(state, "Continue", state->stmt_type, NULL,
1410 0,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001411 "Continue");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001412 if (!state->Continue_type) return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001413 state->expr_type = make_type(state, "expr", state->AST_type, NULL, 0,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001414 "expr = BoolOp(boolop op, expr* values)\n"
1415 " | NamedExpr(expr target, expr value)\n"
1416 " | BinOp(expr left, operator op, expr right)\n"
1417 " | UnaryOp(unaryop op, expr operand)\n"
1418 " | Lambda(arguments args, expr body)\n"
1419 " | IfExp(expr test, expr body, expr orelse)\n"
1420 " | Dict(expr* keys, expr* values)\n"
1421 " | Set(expr* elts)\n"
1422 " | ListComp(expr elt, comprehension* generators)\n"
1423 " | SetComp(expr elt, comprehension* generators)\n"
1424 " | DictComp(expr key, expr value, comprehension* generators)\n"
1425 " | GeneratorExp(expr elt, comprehension* generators)\n"
1426 " | Await(expr value)\n"
1427 " | Yield(expr? value)\n"
1428 " | YieldFrom(expr value)\n"
1429 " | Compare(expr left, cmpop* ops, expr* comparators)\n"
1430 " | Call(expr func, expr* args, keyword* keywords)\n"
1431 " | FormattedValue(expr value, int? conversion, expr? format_spec)\n"
1432 " | JoinedStr(expr* values)\n"
1433 " | Constant(constant value, string? kind)\n"
1434 " | Attribute(expr value, identifier attr, expr_context ctx)\n"
1435 " | Subscript(expr value, expr slice, expr_context ctx)\n"
1436 " | Starred(expr value, expr_context ctx)\n"
1437 " | Name(identifier id, expr_context ctx)\n"
1438 " | List(expr* elts, expr_context ctx)\n"
1439 " | Tuple(expr* elts, expr_context ctx)\n"
1440 " | Slice(expr? lower, expr? upper, expr? step)");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001441 if (!state->expr_type) return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001442 if (!add_attributes(state, state->expr_type, expr_attributes, 4)) return 0;
Serhiy Storchakab7e95252020-03-10 00:07:47 +02001443 if (PyObject_SetAttr(state->expr_type, state->end_lineno, Py_None) == -1)
1444 return 0;
1445 if (PyObject_SetAttr(state->expr_type, state->end_col_offset, Py_None) ==
1446 -1)
1447 return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001448 state->BoolOp_type = make_type(state, "BoolOp", state->expr_type,
1449 BoolOp_fields, 2,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001450 "BoolOp(boolop op, expr* values)");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001451 if (!state->BoolOp_type) return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001452 state->NamedExpr_type = make_type(state, "NamedExpr", state->expr_type,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001453 NamedExpr_fields, 2,
1454 "NamedExpr(expr target, expr value)");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001455 if (!state->NamedExpr_type) return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001456 state->BinOp_type = make_type(state, "BinOp", state->expr_type,
1457 BinOp_fields, 3,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001458 "BinOp(expr left, operator op, expr right)");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001459 if (!state->BinOp_type) return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001460 state->UnaryOp_type = make_type(state, "UnaryOp", state->expr_type,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001461 UnaryOp_fields, 2,
1462 "UnaryOp(unaryop op, expr operand)");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001463 if (!state->UnaryOp_type) return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001464 state->Lambda_type = make_type(state, "Lambda", state->expr_type,
1465 Lambda_fields, 2,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001466 "Lambda(arguments args, expr body)");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001467 if (!state->Lambda_type) return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001468 state->IfExp_type = make_type(state, "IfExp", state->expr_type,
1469 IfExp_fields, 3,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001470 "IfExp(expr test, expr body, expr orelse)");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001471 if (!state->IfExp_type) return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001472 state->Dict_type = make_type(state, "Dict", state->expr_type, Dict_fields,
1473 2,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001474 "Dict(expr* keys, expr* values)");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001475 if (!state->Dict_type) return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001476 state->Set_type = make_type(state, "Set", state->expr_type, Set_fields, 1,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001477 "Set(expr* elts)");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001478 if (!state->Set_type) return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001479 state->ListComp_type = make_type(state, "ListComp", state->expr_type,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001480 ListComp_fields, 2,
1481 "ListComp(expr elt, comprehension* generators)");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001482 if (!state->ListComp_type) return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001483 state->SetComp_type = make_type(state, "SetComp", state->expr_type,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001484 SetComp_fields, 2,
1485 "SetComp(expr elt, comprehension* generators)");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001486 if (!state->SetComp_type) return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001487 state->DictComp_type = make_type(state, "DictComp", state->expr_type,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001488 DictComp_fields, 3,
1489 "DictComp(expr key, expr value, comprehension* generators)");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001490 if (!state->DictComp_type) return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001491 state->GeneratorExp_type = make_type(state, "GeneratorExp",
1492 state->expr_type, GeneratorExp_fields,
1493 2,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001494 "GeneratorExp(expr elt, comprehension* generators)");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001495 if (!state->GeneratorExp_type) return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001496 state->Await_type = make_type(state, "Await", state->expr_type,
1497 Await_fields, 1,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001498 "Await(expr value)");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001499 if (!state->Await_type) return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001500 state->Yield_type = make_type(state, "Yield", state->expr_type,
1501 Yield_fields, 1,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001502 "Yield(expr? value)");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001503 if (!state->Yield_type) return 0;
Serhiy Storchakab7e95252020-03-10 00:07:47 +02001504 if (PyObject_SetAttr(state->Yield_type, state->value, Py_None) == -1)
1505 return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001506 state->YieldFrom_type = make_type(state, "YieldFrom", state->expr_type,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001507 YieldFrom_fields, 1,
1508 "YieldFrom(expr value)");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001509 if (!state->YieldFrom_type) return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001510 state->Compare_type = make_type(state, "Compare", state->expr_type,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001511 Compare_fields, 3,
1512 "Compare(expr left, cmpop* ops, expr* comparators)");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001513 if (!state->Compare_type) return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001514 state->Call_type = make_type(state, "Call", state->expr_type, Call_fields,
1515 3,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001516 "Call(expr func, expr* args, keyword* keywords)");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001517 if (!state->Call_type) return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001518 state->FormattedValue_type = make_type(state, "FormattedValue",
1519 state->expr_type,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001520 FormattedValue_fields, 3,
1521 "FormattedValue(expr value, int? conversion, expr? format_spec)");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001522 if (!state->FormattedValue_type) return 0;
Serhiy Storchakab7e95252020-03-10 00:07:47 +02001523 if (PyObject_SetAttr(state->FormattedValue_type, state->conversion,
1524 Py_None) == -1)
1525 return 0;
1526 if (PyObject_SetAttr(state->FormattedValue_type, state->format_spec,
1527 Py_None) == -1)
1528 return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001529 state->JoinedStr_type = make_type(state, "JoinedStr", state->expr_type,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001530 JoinedStr_fields, 1,
1531 "JoinedStr(expr* values)");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001532 if (!state->JoinedStr_type) return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001533 state->Constant_type = make_type(state, "Constant", state->expr_type,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001534 Constant_fields, 2,
1535 "Constant(constant value, string? kind)");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001536 if (!state->Constant_type) return 0;
Serhiy Storchakab7e95252020-03-10 00:07:47 +02001537 if (PyObject_SetAttr(state->Constant_type, state->kind, Py_None) == -1)
1538 return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001539 state->Attribute_type = make_type(state, "Attribute", state->expr_type,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001540 Attribute_fields, 3,
1541 "Attribute(expr value, identifier attr, expr_context ctx)");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001542 if (!state->Attribute_type) return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001543 state->Subscript_type = make_type(state, "Subscript", state->expr_type,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001544 Subscript_fields, 3,
1545 "Subscript(expr value, expr slice, expr_context ctx)");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001546 if (!state->Subscript_type) return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001547 state->Starred_type = make_type(state, "Starred", state->expr_type,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001548 Starred_fields, 2,
1549 "Starred(expr value, expr_context ctx)");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001550 if (!state->Starred_type) return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001551 state->Name_type = make_type(state, "Name", state->expr_type, Name_fields,
1552 2,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001553 "Name(identifier id, expr_context ctx)");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001554 if (!state->Name_type) return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001555 state->List_type = make_type(state, "List", state->expr_type, List_fields,
1556 2,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001557 "List(expr* elts, expr_context ctx)");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001558 if (!state->List_type) return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001559 state->Tuple_type = make_type(state, "Tuple", state->expr_type,
1560 Tuple_fields, 2,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001561 "Tuple(expr* elts, expr_context ctx)");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001562 if (!state->Tuple_type) return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001563 state->Slice_type = make_type(state, "Slice", state->expr_type,
1564 Slice_fields, 3,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001565 "Slice(expr? lower, expr? upper, expr? step)");
Serhiy Storchaka13d52c22020-03-10 18:52:34 +02001566 if (!state->Slice_type) return 0;
1567 if (PyObject_SetAttr(state->Slice_type, state->lower, Py_None) == -1)
1568 return 0;
1569 if (PyObject_SetAttr(state->Slice_type, state->upper, Py_None) == -1)
1570 return 0;
1571 if (PyObject_SetAttr(state->Slice_type, state->step, Py_None) == -1)
1572 return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001573 state->expr_context_type = make_type(state, "expr_context",
1574 state->AST_type, NULL, 0,
Serhiy Storchaka6b975982020-03-17 23:41:08 +02001575 "expr_context = Load | Store | Del");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001576 if (!state->expr_context_type) return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001577 if (!add_attributes(state, state->expr_context_type, NULL, 0)) return 0;
1578 state->Load_type = make_type(state, "Load", state->expr_context_type, NULL,
1579 0,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001580 "Load");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001581 if (!state->Load_type) return 0;
1582 state->Load_singleton = PyType_GenericNew((PyTypeObject *)state->Load_type,
1583 NULL, NULL);
1584 if (!state->Load_singleton) return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001585 state->Store_type = make_type(state, "Store", state->expr_context_type,
1586 NULL, 0,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001587 "Store");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001588 if (!state->Store_type) return 0;
1589 state->Store_singleton = PyType_GenericNew((PyTypeObject
1590 *)state->Store_type, NULL, NULL);
1591 if (!state->Store_singleton) return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001592 state->Del_type = make_type(state, "Del", state->expr_context_type, NULL, 0,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001593 "Del");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001594 if (!state->Del_type) return 0;
1595 state->Del_singleton = PyType_GenericNew((PyTypeObject *)state->Del_type,
1596 NULL, NULL);
1597 if (!state->Del_singleton) return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001598 state->boolop_type = make_type(state, "boolop", state->AST_type, NULL, 0,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001599 "boolop = And | Or");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001600 if (!state->boolop_type) return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001601 if (!add_attributes(state, state->boolop_type, NULL, 0)) return 0;
1602 state->And_type = make_type(state, "And", state->boolop_type, NULL, 0,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001603 "And");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001604 if (!state->And_type) return 0;
1605 state->And_singleton = PyType_GenericNew((PyTypeObject *)state->And_type,
1606 NULL, NULL);
1607 if (!state->And_singleton) return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001608 state->Or_type = make_type(state, "Or", state->boolop_type, NULL, 0,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001609 "Or");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001610 if (!state->Or_type) return 0;
1611 state->Or_singleton = PyType_GenericNew((PyTypeObject *)state->Or_type,
1612 NULL, NULL);
1613 if (!state->Or_singleton) return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001614 state->operator_type = make_type(state, "operator", state->AST_type, NULL,
1615 0,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001616 "operator = Add | Sub | Mult | MatMult | Div | Mod | Pow | LShift | RShift | BitOr | BitXor | BitAnd | FloorDiv");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001617 if (!state->operator_type) return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001618 if (!add_attributes(state, state->operator_type, NULL, 0)) return 0;
1619 state->Add_type = make_type(state, "Add", state->operator_type, NULL, 0,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001620 "Add");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001621 if (!state->Add_type) return 0;
1622 state->Add_singleton = PyType_GenericNew((PyTypeObject *)state->Add_type,
1623 NULL, NULL);
1624 if (!state->Add_singleton) return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001625 state->Sub_type = make_type(state, "Sub", state->operator_type, NULL, 0,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001626 "Sub");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001627 if (!state->Sub_type) return 0;
1628 state->Sub_singleton = PyType_GenericNew((PyTypeObject *)state->Sub_type,
1629 NULL, NULL);
1630 if (!state->Sub_singleton) return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001631 state->Mult_type = make_type(state, "Mult", state->operator_type, NULL, 0,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001632 "Mult");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001633 if (!state->Mult_type) return 0;
1634 state->Mult_singleton = PyType_GenericNew((PyTypeObject *)state->Mult_type,
1635 NULL, NULL);
1636 if (!state->Mult_singleton) return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001637 state->MatMult_type = make_type(state, "MatMult", state->operator_type,
1638 NULL, 0,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001639 "MatMult");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001640 if (!state->MatMult_type) return 0;
1641 state->MatMult_singleton = PyType_GenericNew((PyTypeObject
1642 *)state->MatMult_type, NULL,
1643 NULL);
1644 if (!state->MatMult_singleton) return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001645 state->Div_type = make_type(state, "Div", state->operator_type, NULL, 0,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001646 "Div");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001647 if (!state->Div_type) return 0;
1648 state->Div_singleton = PyType_GenericNew((PyTypeObject *)state->Div_type,
1649 NULL, NULL);
1650 if (!state->Div_singleton) return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001651 state->Mod_type = make_type(state, "Mod", state->operator_type, NULL, 0,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001652 "Mod");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001653 if (!state->Mod_type) return 0;
1654 state->Mod_singleton = PyType_GenericNew((PyTypeObject *)state->Mod_type,
1655 NULL, NULL);
1656 if (!state->Mod_singleton) return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001657 state->Pow_type = make_type(state, "Pow", state->operator_type, NULL, 0,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001658 "Pow");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001659 if (!state->Pow_type) return 0;
1660 state->Pow_singleton = PyType_GenericNew((PyTypeObject *)state->Pow_type,
1661 NULL, NULL);
1662 if (!state->Pow_singleton) return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001663 state->LShift_type = make_type(state, "LShift", state->operator_type, NULL,
1664 0,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001665 "LShift");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001666 if (!state->LShift_type) return 0;
1667 state->LShift_singleton = PyType_GenericNew((PyTypeObject
1668 *)state->LShift_type, NULL,
1669 NULL);
1670 if (!state->LShift_singleton) return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001671 state->RShift_type = make_type(state, "RShift", state->operator_type, NULL,
1672 0,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001673 "RShift");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001674 if (!state->RShift_type) return 0;
1675 state->RShift_singleton = PyType_GenericNew((PyTypeObject
1676 *)state->RShift_type, NULL,
1677 NULL);
1678 if (!state->RShift_singleton) return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001679 state->BitOr_type = make_type(state, "BitOr", state->operator_type, NULL, 0,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001680 "BitOr");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001681 if (!state->BitOr_type) return 0;
1682 state->BitOr_singleton = PyType_GenericNew((PyTypeObject
1683 *)state->BitOr_type, NULL, NULL);
1684 if (!state->BitOr_singleton) return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001685 state->BitXor_type = make_type(state, "BitXor", state->operator_type, NULL,
1686 0,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001687 "BitXor");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001688 if (!state->BitXor_type) return 0;
1689 state->BitXor_singleton = PyType_GenericNew((PyTypeObject
1690 *)state->BitXor_type, NULL,
1691 NULL);
1692 if (!state->BitXor_singleton) return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001693 state->BitAnd_type = make_type(state, "BitAnd", state->operator_type, NULL,
1694 0,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001695 "BitAnd");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001696 if (!state->BitAnd_type) return 0;
1697 state->BitAnd_singleton = PyType_GenericNew((PyTypeObject
1698 *)state->BitAnd_type, NULL,
1699 NULL);
1700 if (!state->BitAnd_singleton) return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001701 state->FloorDiv_type = make_type(state, "FloorDiv", state->operator_type,
1702 NULL, 0,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001703 "FloorDiv");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001704 if (!state->FloorDiv_type) return 0;
1705 state->FloorDiv_singleton = PyType_GenericNew((PyTypeObject
1706 *)state->FloorDiv_type, NULL,
1707 NULL);
1708 if (!state->FloorDiv_singleton) return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001709 state->unaryop_type = make_type(state, "unaryop", state->AST_type, NULL, 0,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001710 "unaryop = Invert | Not | UAdd | USub");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001711 if (!state->unaryop_type) return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001712 if (!add_attributes(state, state->unaryop_type, NULL, 0)) return 0;
1713 state->Invert_type = make_type(state, "Invert", state->unaryop_type, NULL,
1714 0,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001715 "Invert");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001716 if (!state->Invert_type) return 0;
1717 state->Invert_singleton = PyType_GenericNew((PyTypeObject
1718 *)state->Invert_type, NULL,
1719 NULL);
1720 if (!state->Invert_singleton) return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001721 state->Not_type = make_type(state, "Not", state->unaryop_type, NULL, 0,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001722 "Not");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001723 if (!state->Not_type) return 0;
1724 state->Not_singleton = PyType_GenericNew((PyTypeObject *)state->Not_type,
1725 NULL, NULL);
1726 if (!state->Not_singleton) return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001727 state->UAdd_type = make_type(state, "UAdd", state->unaryop_type, NULL, 0,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001728 "UAdd");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001729 if (!state->UAdd_type) return 0;
1730 state->UAdd_singleton = PyType_GenericNew((PyTypeObject *)state->UAdd_type,
1731 NULL, NULL);
1732 if (!state->UAdd_singleton) return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001733 state->USub_type = make_type(state, "USub", state->unaryop_type, NULL, 0,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001734 "USub");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001735 if (!state->USub_type) return 0;
1736 state->USub_singleton = PyType_GenericNew((PyTypeObject *)state->USub_type,
1737 NULL, NULL);
1738 if (!state->USub_singleton) return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001739 state->cmpop_type = make_type(state, "cmpop", state->AST_type, NULL, 0,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001740 "cmpop = Eq | NotEq | Lt | LtE | Gt | GtE | Is | IsNot | In | NotIn");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001741 if (!state->cmpop_type) return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001742 if (!add_attributes(state, state->cmpop_type, NULL, 0)) return 0;
1743 state->Eq_type = make_type(state, "Eq", state->cmpop_type, NULL, 0,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001744 "Eq");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001745 if (!state->Eq_type) return 0;
1746 state->Eq_singleton = PyType_GenericNew((PyTypeObject *)state->Eq_type,
1747 NULL, NULL);
1748 if (!state->Eq_singleton) return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001749 state->NotEq_type = make_type(state, "NotEq", state->cmpop_type, NULL, 0,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001750 "NotEq");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001751 if (!state->NotEq_type) return 0;
1752 state->NotEq_singleton = PyType_GenericNew((PyTypeObject
1753 *)state->NotEq_type, NULL, NULL);
1754 if (!state->NotEq_singleton) return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001755 state->Lt_type = make_type(state, "Lt", state->cmpop_type, NULL, 0,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001756 "Lt");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001757 if (!state->Lt_type) return 0;
1758 state->Lt_singleton = PyType_GenericNew((PyTypeObject *)state->Lt_type,
1759 NULL, NULL);
1760 if (!state->Lt_singleton) return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001761 state->LtE_type = make_type(state, "LtE", state->cmpop_type, NULL, 0,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001762 "LtE");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001763 if (!state->LtE_type) return 0;
1764 state->LtE_singleton = PyType_GenericNew((PyTypeObject *)state->LtE_type,
1765 NULL, NULL);
1766 if (!state->LtE_singleton) return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001767 state->Gt_type = make_type(state, "Gt", state->cmpop_type, NULL, 0,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001768 "Gt");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001769 if (!state->Gt_type) return 0;
1770 state->Gt_singleton = PyType_GenericNew((PyTypeObject *)state->Gt_type,
1771 NULL, NULL);
1772 if (!state->Gt_singleton) return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001773 state->GtE_type = make_type(state, "GtE", state->cmpop_type, NULL, 0,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001774 "GtE");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001775 if (!state->GtE_type) return 0;
1776 state->GtE_singleton = PyType_GenericNew((PyTypeObject *)state->GtE_type,
1777 NULL, NULL);
1778 if (!state->GtE_singleton) return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001779 state->Is_type = make_type(state, "Is", state->cmpop_type, NULL, 0,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001780 "Is");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001781 if (!state->Is_type) return 0;
1782 state->Is_singleton = PyType_GenericNew((PyTypeObject *)state->Is_type,
1783 NULL, NULL);
1784 if (!state->Is_singleton) return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001785 state->IsNot_type = make_type(state, "IsNot", state->cmpop_type, NULL, 0,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001786 "IsNot");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001787 if (!state->IsNot_type) return 0;
1788 state->IsNot_singleton = PyType_GenericNew((PyTypeObject
1789 *)state->IsNot_type, NULL, NULL);
1790 if (!state->IsNot_singleton) return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001791 state->In_type = make_type(state, "In", state->cmpop_type, NULL, 0,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001792 "In");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001793 if (!state->In_type) return 0;
1794 state->In_singleton = PyType_GenericNew((PyTypeObject *)state->In_type,
1795 NULL, NULL);
1796 if (!state->In_singleton) return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001797 state->NotIn_type = make_type(state, "NotIn", state->cmpop_type, NULL, 0,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001798 "NotIn");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001799 if (!state->NotIn_type) return 0;
1800 state->NotIn_singleton = PyType_GenericNew((PyTypeObject
1801 *)state->NotIn_type, NULL, NULL);
1802 if (!state->NotIn_singleton) return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001803 state->comprehension_type = make_type(state, "comprehension",
1804 state->AST_type,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001805 comprehension_fields, 4,
1806 "comprehension(expr target, expr iter, expr* ifs, int is_async)");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001807 if (!state->comprehension_type) return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001808 if (!add_attributes(state, state->comprehension_type, NULL, 0)) return 0;
1809 state->excepthandler_type = make_type(state, "excepthandler",
1810 state->AST_type, NULL, 0,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001811 "excepthandler = ExceptHandler(expr? type, identifier? name, stmt* body)");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001812 if (!state->excepthandler_type) return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001813 if (!add_attributes(state, state->excepthandler_type,
1814 excepthandler_attributes, 4)) return 0;
Serhiy Storchakab7e95252020-03-10 00:07:47 +02001815 if (PyObject_SetAttr(state->excepthandler_type, state->end_lineno, Py_None)
1816 == -1)
1817 return 0;
1818 if (PyObject_SetAttr(state->excepthandler_type, state->end_col_offset,
1819 Py_None) == -1)
1820 return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001821 state->ExceptHandler_type = make_type(state, "ExceptHandler",
Dino Viehlandac46eb42019-09-11 10:16:34 -07001822 state->excepthandler_type,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001823 ExceptHandler_fields, 3,
1824 "ExceptHandler(expr? type, identifier? name, stmt* body)");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001825 if (!state->ExceptHandler_type) return 0;
Serhiy Storchakab7e95252020-03-10 00:07:47 +02001826 if (PyObject_SetAttr(state->ExceptHandler_type, state->type, Py_None) == -1)
1827 return 0;
1828 if (PyObject_SetAttr(state->ExceptHandler_type, state->name, Py_None) == -1)
1829 return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001830 state->arguments_type = make_type(state, "arguments", state->AST_type,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001831 arguments_fields, 7,
1832 "arguments(arg* posonlyargs, arg* args, arg? vararg, arg* kwonlyargs, expr* kw_defaults, arg? kwarg, expr* defaults)");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001833 if (!state->arguments_type) return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001834 if (!add_attributes(state, state->arguments_type, NULL, 0)) return 0;
Serhiy Storchakab7e95252020-03-10 00:07:47 +02001835 if (PyObject_SetAttr(state->arguments_type, state->vararg, Py_None) == -1)
1836 return 0;
1837 if (PyObject_SetAttr(state->arguments_type, state->kwarg, Py_None) == -1)
1838 return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001839 state->arg_type = make_type(state, "arg", state->AST_type, arg_fields, 3,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001840 "arg(identifier arg, expr? annotation, string? type_comment)");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001841 if (!state->arg_type) return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001842 if (!add_attributes(state, state->arg_type, arg_attributes, 4)) return 0;
Serhiy Storchakab7e95252020-03-10 00:07:47 +02001843 if (PyObject_SetAttr(state->arg_type, state->annotation, Py_None) == -1)
1844 return 0;
1845 if (PyObject_SetAttr(state->arg_type, state->type_comment, Py_None) == -1)
1846 return 0;
1847 if (PyObject_SetAttr(state->arg_type, state->end_lineno, Py_None) == -1)
1848 return 0;
1849 if (PyObject_SetAttr(state->arg_type, state->end_col_offset, Py_None) == -1)
1850 return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001851 state->keyword_type = make_type(state, "keyword", state->AST_type,
1852 keyword_fields, 2,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001853 "keyword(identifier? arg, expr value)");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001854 if (!state->keyword_type) return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001855 if (!add_attributes(state, state->keyword_type, keyword_attributes, 4))
1856 return 0;
Serhiy Storchakab7e95252020-03-10 00:07:47 +02001857 if (PyObject_SetAttr(state->keyword_type, state->arg, Py_None) == -1)
1858 return 0;
Pablo Galindo168660b2020-04-02 00:47:39 +01001859 if (PyObject_SetAttr(state->keyword_type, state->end_lineno, Py_None) == -1)
1860 return 0;
1861 if (PyObject_SetAttr(state->keyword_type, state->end_col_offset, Py_None)
1862 == -1)
1863 return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001864 state->alias_type = make_type(state, "alias", state->AST_type,
1865 alias_fields, 2,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001866 "alias(identifier name, identifier? asname)");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001867 if (!state->alias_type) return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001868 if (!add_attributes(state, state->alias_type, NULL, 0)) return 0;
Serhiy Storchakab7e95252020-03-10 00:07:47 +02001869 if (PyObject_SetAttr(state->alias_type, state->asname, Py_None) == -1)
1870 return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001871 state->withitem_type = make_type(state, "withitem", state->AST_type,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001872 withitem_fields, 2,
1873 "withitem(expr context_expr, expr? optional_vars)");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001874 if (!state->withitem_type) return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001875 if (!add_attributes(state, state->withitem_type, NULL, 0)) return 0;
Serhiy Storchakab7e95252020-03-10 00:07:47 +02001876 if (PyObject_SetAttr(state->withitem_type, state->optional_vars, Py_None)
1877 == -1)
1878 return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001879 state->type_ignore_type = make_type(state, "type_ignore", state->AST_type,
1880 NULL, 0,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001881 "type_ignore = TypeIgnore(int lineno, string tag)");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001882 if (!state->type_ignore_type) return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001883 if (!add_attributes(state, state->type_ignore_type, NULL, 0)) return 0;
1884 state->TypeIgnore_type = make_type(state, "TypeIgnore",
1885 state->type_ignore_type,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001886 TypeIgnore_fields, 2,
1887 "TypeIgnore(int lineno, string tag)");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001888 if (!state->TypeIgnore_type) return 0;
1889 state->initialized = 1;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02001890 return 1;
Martin v. Löwisbd260da2006-02-26 19:42:26 +00001891}
Neal Norwitz7b5a6042005-11-13 19:14:20 +00001892
Victor Stinner74419f02020-07-03 11:35:37 +02001893static int obj2ast_mod(astmodulestate *state, PyObject* obj, mod_ty* out,
1894 PyArena* arena);
1895static int obj2ast_stmt(astmodulestate *state, PyObject* obj, stmt_ty* out,
1896 PyArena* arena);
1897static int obj2ast_expr(astmodulestate *state, PyObject* obj, expr_ty* out,
1898 PyArena* arena);
1899static int obj2ast_expr_context(astmodulestate *state, PyObject* obj,
1900 expr_context_ty* out, PyArena* arena);
1901static int obj2ast_boolop(astmodulestate *state, PyObject* obj, boolop_ty* out,
1902 PyArena* arena);
1903static int obj2ast_operator(astmodulestate *state, PyObject* obj, operator_ty*
1904 out, PyArena* arena);
1905static int obj2ast_unaryop(astmodulestate *state, PyObject* obj, unaryop_ty*
1906 out, PyArena* arena);
1907static int obj2ast_cmpop(astmodulestate *state, PyObject* obj, cmpop_ty* out,
1908 PyArena* arena);
1909static int obj2ast_comprehension(astmodulestate *state, PyObject* obj,
1910 comprehension_ty* out, PyArena* arena);
1911static int obj2ast_excepthandler(astmodulestate *state, PyObject* obj,
1912 excepthandler_ty* out, PyArena* arena);
1913static int obj2ast_arguments(astmodulestate *state, PyObject* obj,
1914 arguments_ty* out, PyArena* arena);
1915static int obj2ast_arg(astmodulestate *state, PyObject* obj, arg_ty* out,
1916 PyArena* arena);
1917static int obj2ast_keyword(astmodulestate *state, PyObject* obj, keyword_ty*
1918 out, PyArena* arena);
1919static int obj2ast_alias(astmodulestate *state, PyObject* obj, alias_ty* out,
1920 PyArena* arena);
1921static int obj2ast_withitem(astmodulestate *state, PyObject* obj, withitem_ty*
1922 out, PyArena* arena);
1923static int obj2ast_type_ignore(astmodulestate *state, PyObject* obj,
1924 type_ignore_ty* out, PyArena* arena);
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00001925
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001926mod_ty
Pablo Galindoa5634c42020-09-16 19:42:00 +01001927Module(asdl_stmt_seq * body, asdl_type_ignore_seq * type_ignores, PyArena
1928 *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001929{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02001930 mod_ty p;
1931 p = (mod_ty)PyArena_Malloc(arena, sizeof(*p));
1932 if (!p)
1933 return NULL;
1934 p->kind = Module_kind;
1935 p->v.Module.body = body;
Guido van Rossumdcfcd142019-01-31 03:40:27 -08001936 p->v.Module.type_ignores = type_ignores;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02001937 return p;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001938}
1939
1940mod_ty
Pablo Galindoa5634c42020-09-16 19:42:00 +01001941Interactive(asdl_stmt_seq * body, PyArena *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001942{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02001943 mod_ty p;
1944 p = (mod_ty)PyArena_Malloc(arena, sizeof(*p));
1945 if (!p)
1946 return NULL;
1947 p->kind = Interactive_kind;
1948 p->v.Interactive.body = body;
1949 return p;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001950}
1951
1952mod_ty
Neal Norwitzadb69fc2005-12-17 20:54:49 +00001953Expression(expr_ty body, PyArena *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001954{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02001955 mod_ty p;
1956 if (!body) {
1957 PyErr_SetString(PyExc_ValueError,
Batuhan Taskaya091951a2020-05-06 17:29:32 +03001958 "field 'body' is required for Expression");
Victor Stinnerce72e1c2013-07-27 00:00:36 +02001959 return NULL;
1960 }
1961 p = (mod_ty)PyArena_Malloc(arena, sizeof(*p));
1962 if (!p)
1963 return NULL;
1964 p->kind = Expression_kind;
1965 p->v.Expression.body = body;
1966 return p;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001967}
1968
1969mod_ty
Pablo Galindoa5634c42020-09-16 19:42:00 +01001970FunctionType(asdl_expr_seq * argtypes, expr_ty returns, PyArena *arena)
Guido van Rossumdcfcd142019-01-31 03:40:27 -08001971{
1972 mod_ty p;
1973 if (!returns) {
1974 PyErr_SetString(PyExc_ValueError,
Batuhan Taskaya091951a2020-05-06 17:29:32 +03001975 "field 'returns' is required for FunctionType");
Guido van Rossumdcfcd142019-01-31 03:40:27 -08001976 return NULL;
1977 }
1978 p = (mod_ty)PyArena_Malloc(arena, sizeof(*p));
1979 if (!p)
1980 return NULL;
1981 p->kind = FunctionType_kind;
1982 p->v.FunctionType.argtypes = argtypes;
1983 p->v.FunctionType.returns = returns;
1984 return p;
1985}
1986
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001987stmt_ty
Pablo Galindoa5634c42020-09-16 19:42:00 +01001988FunctionDef(identifier name, arguments_ty args, asdl_stmt_seq * body,
1989 asdl_expr_seq * decorator_list, expr_ty returns, string
1990 type_comment, int lineno, int col_offset, int end_lineno, int
1991 end_col_offset, PyArena *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001992{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02001993 stmt_ty p;
1994 if (!name) {
1995 PyErr_SetString(PyExc_ValueError,
Batuhan Taskaya091951a2020-05-06 17:29:32 +03001996 "field 'name' is required for FunctionDef");
Victor Stinnerce72e1c2013-07-27 00:00:36 +02001997 return NULL;
1998 }
1999 if (!args) {
2000 PyErr_SetString(PyExc_ValueError,
Batuhan Taskaya091951a2020-05-06 17:29:32 +03002001 "field 'args' is required for FunctionDef");
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002002 return NULL;
2003 }
2004 p = (stmt_ty)PyArena_Malloc(arena, sizeof(*p));
2005 if (!p)
2006 return NULL;
2007 p->kind = FunctionDef_kind;
2008 p->v.FunctionDef.name = name;
2009 p->v.FunctionDef.args = args;
2010 p->v.FunctionDef.body = body;
2011 p->v.FunctionDef.decorator_list = decorator_list;
2012 p->v.FunctionDef.returns = returns;
Guido van Rossumdcfcd142019-01-31 03:40:27 -08002013 p->v.FunctionDef.type_comment = type_comment;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002014 p->lineno = lineno;
2015 p->col_offset = col_offset;
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00002016 p->end_lineno = end_lineno;
2017 p->end_col_offset = end_col_offset;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002018 return p;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002019}
2020
2021stmt_ty
Pablo Galindoa5634c42020-09-16 19:42:00 +01002022AsyncFunctionDef(identifier name, arguments_ty args, asdl_stmt_seq * body,
2023 asdl_expr_seq * decorator_list, expr_ty returns, string
2024 type_comment, int lineno, int col_offset, int end_lineno, int
2025 end_col_offset, PyArena *arena)
Yury Selivanov75445082015-05-11 22:57:16 -04002026{
2027 stmt_ty p;
2028 if (!name) {
2029 PyErr_SetString(PyExc_ValueError,
Batuhan Taskaya091951a2020-05-06 17:29:32 +03002030 "field 'name' is required for AsyncFunctionDef");
Yury Selivanov75445082015-05-11 22:57:16 -04002031 return NULL;
2032 }
2033 if (!args) {
2034 PyErr_SetString(PyExc_ValueError,
Batuhan Taskaya091951a2020-05-06 17:29:32 +03002035 "field 'args' is required for AsyncFunctionDef");
Yury Selivanov75445082015-05-11 22:57:16 -04002036 return NULL;
2037 }
2038 p = (stmt_ty)PyArena_Malloc(arena, sizeof(*p));
2039 if (!p)
2040 return NULL;
2041 p->kind = AsyncFunctionDef_kind;
2042 p->v.AsyncFunctionDef.name = name;
2043 p->v.AsyncFunctionDef.args = args;
2044 p->v.AsyncFunctionDef.body = body;
2045 p->v.AsyncFunctionDef.decorator_list = decorator_list;
2046 p->v.AsyncFunctionDef.returns = returns;
Guido van Rossumdcfcd142019-01-31 03:40:27 -08002047 p->v.AsyncFunctionDef.type_comment = type_comment;
Yury Selivanov75445082015-05-11 22:57:16 -04002048 p->lineno = lineno;
2049 p->col_offset = col_offset;
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00002050 p->end_lineno = end_lineno;
2051 p->end_col_offset = end_col_offset;
Yury Selivanov75445082015-05-11 22:57:16 -04002052 return p;
2053}
2054
2055stmt_ty
Pablo Galindoa5634c42020-09-16 19:42:00 +01002056ClassDef(identifier name, asdl_expr_seq * bases, asdl_keyword_seq * keywords,
2057 asdl_stmt_seq * body, asdl_expr_seq * decorator_list, int lineno, int
2058 col_offset, int end_lineno, int end_col_offset, PyArena *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002059{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002060 stmt_ty p;
2061 if (!name) {
2062 PyErr_SetString(PyExc_ValueError,
Batuhan Taskaya091951a2020-05-06 17:29:32 +03002063 "field 'name' is required for ClassDef");
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002064 return NULL;
2065 }
2066 p = (stmt_ty)PyArena_Malloc(arena, sizeof(*p));
2067 if (!p)
2068 return NULL;
2069 p->kind = ClassDef_kind;
2070 p->v.ClassDef.name = name;
2071 p->v.ClassDef.bases = bases;
2072 p->v.ClassDef.keywords = keywords;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002073 p->v.ClassDef.body = body;
2074 p->v.ClassDef.decorator_list = decorator_list;
2075 p->lineno = lineno;
2076 p->col_offset = col_offset;
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00002077 p->end_lineno = end_lineno;
2078 p->end_col_offset = end_col_offset;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002079 return p;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002080}
2081
2082stmt_ty
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00002083Return(expr_ty value, int lineno, int col_offset, int end_lineno, int
2084 end_col_offset, PyArena *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002085{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002086 stmt_ty p;
2087 p = (stmt_ty)PyArena_Malloc(arena, sizeof(*p));
2088 if (!p)
2089 return NULL;
2090 p->kind = Return_kind;
2091 p->v.Return.value = value;
2092 p->lineno = lineno;
2093 p->col_offset = col_offset;
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00002094 p->end_lineno = end_lineno;
2095 p->end_col_offset = end_col_offset;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002096 return p;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002097}
2098
2099stmt_ty
Pablo Galindoa5634c42020-09-16 19:42:00 +01002100Delete(asdl_expr_seq * targets, int lineno, int col_offset, int end_lineno, int
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00002101 end_col_offset, PyArena *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002102{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002103 stmt_ty p;
2104 p = (stmt_ty)PyArena_Malloc(arena, sizeof(*p));
2105 if (!p)
2106 return NULL;
2107 p->kind = Delete_kind;
2108 p->v.Delete.targets = targets;
2109 p->lineno = lineno;
2110 p->col_offset = col_offset;
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00002111 p->end_lineno = end_lineno;
2112 p->end_col_offset = end_col_offset;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002113 return p;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002114}
2115
2116stmt_ty
Pablo Galindoa5634c42020-09-16 19:42:00 +01002117Assign(asdl_expr_seq * targets, expr_ty value, string type_comment, int lineno,
2118 int col_offset, int end_lineno, int end_col_offset, PyArena *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002119{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002120 stmt_ty p;
2121 if (!value) {
2122 PyErr_SetString(PyExc_ValueError,
Batuhan Taskaya091951a2020-05-06 17:29:32 +03002123 "field 'value' is required for Assign");
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002124 return NULL;
2125 }
2126 p = (stmt_ty)PyArena_Malloc(arena, sizeof(*p));
2127 if (!p)
2128 return NULL;
2129 p->kind = Assign_kind;
2130 p->v.Assign.targets = targets;
2131 p->v.Assign.value = value;
Guido van Rossumdcfcd142019-01-31 03:40:27 -08002132 p->v.Assign.type_comment = type_comment;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002133 p->lineno = lineno;
2134 p->col_offset = col_offset;
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00002135 p->end_lineno = end_lineno;
2136 p->end_col_offset = end_col_offset;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002137 return p;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002138}
2139
2140stmt_ty
Martin v. Löwis49c5da12006-03-01 22:49:05 +00002141AugAssign(expr_ty target, operator_ty op, expr_ty value, int lineno, int
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00002142 col_offset, int end_lineno, int end_col_offset, PyArena *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002143{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002144 stmt_ty p;
2145 if (!target) {
2146 PyErr_SetString(PyExc_ValueError,
Batuhan Taskaya091951a2020-05-06 17:29:32 +03002147 "field 'target' is required for AugAssign");
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002148 return NULL;
2149 }
2150 if (!op) {
2151 PyErr_SetString(PyExc_ValueError,
Batuhan Taskaya091951a2020-05-06 17:29:32 +03002152 "field 'op' is required for AugAssign");
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002153 return NULL;
2154 }
2155 if (!value) {
2156 PyErr_SetString(PyExc_ValueError,
Batuhan Taskaya091951a2020-05-06 17:29:32 +03002157 "field 'value' is required for AugAssign");
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002158 return NULL;
2159 }
2160 p = (stmt_ty)PyArena_Malloc(arena, sizeof(*p));
2161 if (!p)
2162 return NULL;
2163 p->kind = AugAssign_kind;
2164 p->v.AugAssign.target = target;
2165 p->v.AugAssign.op = op;
2166 p->v.AugAssign.value = value;
2167 p->lineno = lineno;
2168 p->col_offset = col_offset;
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00002169 p->end_lineno = end_lineno;
2170 p->end_col_offset = end_col_offset;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002171 return p;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002172}
2173
2174stmt_ty
Yury Selivanovf8cb8a12016-09-08 20:50:03 -07002175AnnAssign(expr_ty target, expr_ty annotation, expr_ty value, int simple, int
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00002176 lineno, int col_offset, int end_lineno, int end_col_offset, PyArena
2177 *arena)
Yury Selivanovf8cb8a12016-09-08 20:50:03 -07002178{
2179 stmt_ty p;
2180 if (!target) {
2181 PyErr_SetString(PyExc_ValueError,
Batuhan Taskaya091951a2020-05-06 17:29:32 +03002182 "field 'target' is required for AnnAssign");
Yury Selivanovf8cb8a12016-09-08 20:50:03 -07002183 return NULL;
2184 }
2185 if (!annotation) {
2186 PyErr_SetString(PyExc_ValueError,
Batuhan Taskaya091951a2020-05-06 17:29:32 +03002187 "field 'annotation' is required for AnnAssign");
Yury Selivanovf8cb8a12016-09-08 20:50:03 -07002188 return NULL;
2189 }
2190 p = (stmt_ty)PyArena_Malloc(arena, sizeof(*p));
2191 if (!p)
2192 return NULL;
2193 p->kind = AnnAssign_kind;
2194 p->v.AnnAssign.target = target;
2195 p->v.AnnAssign.annotation = annotation;
2196 p->v.AnnAssign.value = value;
2197 p->v.AnnAssign.simple = simple;
2198 p->lineno = lineno;
2199 p->col_offset = col_offset;
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00002200 p->end_lineno = end_lineno;
2201 p->end_col_offset = end_col_offset;
Yury Selivanovf8cb8a12016-09-08 20:50:03 -07002202 return p;
2203}
2204
2205stmt_ty
Pablo Galindoa5634c42020-09-16 19:42:00 +01002206For(expr_ty target, expr_ty iter, asdl_stmt_seq * body, asdl_stmt_seq * orelse,
2207 string type_comment, int lineno, int col_offset, int end_lineno, int
Guido van Rossumdcfcd142019-01-31 03:40:27 -08002208 end_col_offset, PyArena *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002209{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002210 stmt_ty p;
2211 if (!target) {
2212 PyErr_SetString(PyExc_ValueError,
Batuhan Taskaya091951a2020-05-06 17:29:32 +03002213 "field 'target' is required for For");
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002214 return NULL;
2215 }
2216 if (!iter) {
2217 PyErr_SetString(PyExc_ValueError,
Batuhan Taskaya091951a2020-05-06 17:29:32 +03002218 "field 'iter' is required for For");
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002219 return NULL;
2220 }
2221 p = (stmt_ty)PyArena_Malloc(arena, sizeof(*p));
2222 if (!p)
2223 return NULL;
2224 p->kind = For_kind;
2225 p->v.For.target = target;
2226 p->v.For.iter = iter;
2227 p->v.For.body = body;
2228 p->v.For.orelse = orelse;
Guido van Rossumdcfcd142019-01-31 03:40:27 -08002229 p->v.For.type_comment = type_comment;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002230 p->lineno = lineno;
2231 p->col_offset = col_offset;
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00002232 p->end_lineno = end_lineno;
2233 p->end_col_offset = end_col_offset;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002234 return p;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002235}
2236
2237stmt_ty
Pablo Galindoa5634c42020-09-16 19:42:00 +01002238AsyncFor(expr_ty target, expr_ty iter, asdl_stmt_seq * body, asdl_stmt_seq *
2239 orelse, string type_comment, int lineno, int col_offset, int
2240 end_lineno, int end_col_offset, PyArena *arena)
Yury Selivanov75445082015-05-11 22:57:16 -04002241{
2242 stmt_ty p;
2243 if (!target) {
2244 PyErr_SetString(PyExc_ValueError,
Batuhan Taskaya091951a2020-05-06 17:29:32 +03002245 "field 'target' is required for AsyncFor");
Yury Selivanov75445082015-05-11 22:57:16 -04002246 return NULL;
2247 }
2248 if (!iter) {
2249 PyErr_SetString(PyExc_ValueError,
Batuhan Taskaya091951a2020-05-06 17:29:32 +03002250 "field 'iter' is required for AsyncFor");
Yury Selivanov75445082015-05-11 22:57:16 -04002251 return NULL;
2252 }
2253 p = (stmt_ty)PyArena_Malloc(arena, sizeof(*p));
2254 if (!p)
2255 return NULL;
2256 p->kind = AsyncFor_kind;
2257 p->v.AsyncFor.target = target;
2258 p->v.AsyncFor.iter = iter;
2259 p->v.AsyncFor.body = body;
2260 p->v.AsyncFor.orelse = orelse;
Guido van Rossumdcfcd142019-01-31 03:40:27 -08002261 p->v.AsyncFor.type_comment = type_comment;
Yury Selivanov75445082015-05-11 22:57:16 -04002262 p->lineno = lineno;
2263 p->col_offset = col_offset;
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00002264 p->end_lineno = end_lineno;
2265 p->end_col_offset = end_col_offset;
Yury Selivanov75445082015-05-11 22:57:16 -04002266 return p;
2267}
2268
2269stmt_ty
Pablo Galindoa5634c42020-09-16 19:42:00 +01002270While(expr_ty test, asdl_stmt_seq * body, asdl_stmt_seq * orelse, int lineno,
2271 int col_offset, int end_lineno, int end_col_offset, PyArena *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002272{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002273 stmt_ty p;
2274 if (!test) {
2275 PyErr_SetString(PyExc_ValueError,
Batuhan Taskaya091951a2020-05-06 17:29:32 +03002276 "field 'test' is required for While");
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002277 return NULL;
2278 }
2279 p = (stmt_ty)PyArena_Malloc(arena, sizeof(*p));
2280 if (!p)
2281 return NULL;
2282 p->kind = While_kind;
2283 p->v.While.test = test;
2284 p->v.While.body = body;
2285 p->v.While.orelse = orelse;
2286 p->lineno = lineno;
2287 p->col_offset = col_offset;
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00002288 p->end_lineno = end_lineno;
2289 p->end_col_offset = end_col_offset;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002290 return p;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002291}
2292
2293stmt_ty
Pablo Galindoa5634c42020-09-16 19:42:00 +01002294If(expr_ty test, asdl_stmt_seq * body, asdl_stmt_seq * orelse, int lineno, int
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00002295 col_offset, int end_lineno, int end_col_offset, PyArena *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002296{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002297 stmt_ty p;
2298 if (!test) {
2299 PyErr_SetString(PyExc_ValueError,
Batuhan Taskaya091951a2020-05-06 17:29:32 +03002300 "field 'test' is required for If");
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002301 return NULL;
2302 }
2303 p = (stmt_ty)PyArena_Malloc(arena, sizeof(*p));
2304 if (!p)
2305 return NULL;
2306 p->kind = If_kind;
2307 p->v.If.test = test;
2308 p->v.If.body = body;
2309 p->v.If.orelse = orelse;
2310 p->lineno = lineno;
2311 p->col_offset = col_offset;
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00002312 p->end_lineno = end_lineno;
2313 p->end_col_offset = end_col_offset;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002314 return p;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002315}
2316
2317stmt_ty
Pablo Galindoa5634c42020-09-16 19:42:00 +01002318With(asdl_withitem_seq * items, asdl_stmt_seq * body, string type_comment, int
2319 lineno, int col_offset, int end_lineno, int end_col_offset, PyArena *arena)
Guido van Rossumc2e20742006-02-27 22:32:47 +00002320{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002321 stmt_ty p;
2322 p = (stmt_ty)PyArena_Malloc(arena, sizeof(*p));
2323 if (!p)
2324 return NULL;
2325 p->kind = With_kind;
2326 p->v.With.items = items;
2327 p->v.With.body = body;
Guido van Rossumdcfcd142019-01-31 03:40:27 -08002328 p->v.With.type_comment = type_comment;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002329 p->lineno = lineno;
2330 p->col_offset = col_offset;
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00002331 p->end_lineno = end_lineno;
2332 p->end_col_offset = end_col_offset;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002333 return p;
Guido van Rossumc2e20742006-02-27 22:32:47 +00002334}
2335
2336stmt_ty
Pablo Galindoa5634c42020-09-16 19:42:00 +01002337AsyncWith(asdl_withitem_seq * items, asdl_stmt_seq * body, string type_comment,
2338 int lineno, int col_offset, int end_lineno, int end_col_offset,
2339 PyArena *arena)
Yury Selivanov75445082015-05-11 22:57:16 -04002340{
2341 stmt_ty p;
2342 p = (stmt_ty)PyArena_Malloc(arena, sizeof(*p));
2343 if (!p)
2344 return NULL;
2345 p->kind = AsyncWith_kind;
2346 p->v.AsyncWith.items = items;
2347 p->v.AsyncWith.body = body;
Guido van Rossumdcfcd142019-01-31 03:40:27 -08002348 p->v.AsyncWith.type_comment = type_comment;
Yury Selivanov75445082015-05-11 22:57:16 -04002349 p->lineno = lineno;
2350 p->col_offset = col_offset;
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00002351 p->end_lineno = end_lineno;
2352 p->end_col_offset = end_col_offset;
Yury Selivanov75445082015-05-11 22:57:16 -04002353 return p;
2354}
2355
2356stmt_ty
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00002357Raise(expr_ty exc, expr_ty cause, int lineno, int col_offset, int end_lineno,
2358 int end_col_offset, PyArena *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002359{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002360 stmt_ty p;
2361 p = (stmt_ty)PyArena_Malloc(arena, sizeof(*p));
2362 if (!p)
2363 return NULL;
2364 p->kind = Raise_kind;
2365 p->v.Raise.exc = exc;
2366 p->v.Raise.cause = cause;
2367 p->lineno = lineno;
2368 p->col_offset = col_offset;
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00002369 p->end_lineno = end_lineno;
2370 p->end_col_offset = end_col_offset;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002371 return p;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002372}
2373
2374stmt_ty
Pablo Galindoa5634c42020-09-16 19:42:00 +01002375Try(asdl_stmt_seq * body, asdl_excepthandler_seq * handlers, asdl_stmt_seq *
2376 orelse, asdl_stmt_seq * finalbody, int lineno, int col_offset, int
2377 end_lineno, int end_col_offset, PyArena *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002378{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002379 stmt_ty p;
2380 p = (stmt_ty)PyArena_Malloc(arena, sizeof(*p));
2381 if (!p)
2382 return NULL;
2383 p->kind = Try_kind;
2384 p->v.Try.body = body;
2385 p->v.Try.handlers = handlers;
2386 p->v.Try.orelse = orelse;
2387 p->v.Try.finalbody = finalbody;
2388 p->lineno = lineno;
2389 p->col_offset = col_offset;
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00002390 p->end_lineno = end_lineno;
2391 p->end_col_offset = end_col_offset;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002392 return p;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002393}
2394
2395stmt_ty
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00002396Assert(expr_ty test, expr_ty msg, int lineno, int col_offset, int end_lineno,
2397 int end_col_offset, PyArena *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002398{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002399 stmt_ty p;
2400 if (!test) {
2401 PyErr_SetString(PyExc_ValueError,
Batuhan Taskaya091951a2020-05-06 17:29:32 +03002402 "field 'test' is required for Assert");
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002403 return NULL;
2404 }
2405 p = (stmt_ty)PyArena_Malloc(arena, sizeof(*p));
2406 if (!p)
2407 return NULL;
2408 p->kind = Assert_kind;
2409 p->v.Assert.test = test;
2410 p->v.Assert.msg = msg;
2411 p->lineno = lineno;
2412 p->col_offset = col_offset;
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00002413 p->end_lineno = end_lineno;
2414 p->end_col_offset = end_col_offset;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002415 return p;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002416}
2417
2418stmt_ty
Pablo Galindoa5634c42020-09-16 19:42:00 +01002419Import(asdl_alias_seq * names, int lineno, int col_offset, int end_lineno, int
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00002420 end_col_offset, PyArena *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002421{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002422 stmt_ty p;
2423 p = (stmt_ty)PyArena_Malloc(arena, sizeof(*p));
2424 if (!p)
2425 return NULL;
2426 p->kind = Import_kind;
2427 p->v.Import.names = names;
2428 p->lineno = lineno;
2429 p->col_offset = col_offset;
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00002430 p->end_lineno = end_lineno;
2431 p->end_col_offset = end_col_offset;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002432 return p;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002433}
2434
2435stmt_ty
Pablo Galindoa5634c42020-09-16 19:42:00 +01002436ImportFrom(identifier module, asdl_alias_seq * names, int level, int lineno,
2437 int col_offset, int end_lineno, int end_col_offset, PyArena *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002438{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002439 stmt_ty p;
2440 p = (stmt_ty)PyArena_Malloc(arena, sizeof(*p));
2441 if (!p)
2442 return NULL;
2443 p->kind = ImportFrom_kind;
2444 p->v.ImportFrom.module = module;
2445 p->v.ImportFrom.names = names;
2446 p->v.ImportFrom.level = level;
2447 p->lineno = lineno;
2448 p->col_offset = col_offset;
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00002449 p->end_lineno = end_lineno;
2450 p->end_col_offset = end_col_offset;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002451 return p;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002452}
2453
2454stmt_ty
Pablo Galindoa5634c42020-09-16 19:42:00 +01002455Global(asdl_identifier_seq * names, int lineno, int col_offset, int end_lineno,
2456 int end_col_offset, PyArena *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002457{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002458 stmt_ty p;
2459 p = (stmt_ty)PyArena_Malloc(arena, sizeof(*p));
2460 if (!p)
2461 return NULL;
2462 p->kind = Global_kind;
2463 p->v.Global.names = names;
2464 p->lineno = lineno;
2465 p->col_offset = col_offset;
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00002466 p->end_lineno = end_lineno;
2467 p->end_col_offset = end_col_offset;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002468 return p;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002469}
2470
2471stmt_ty
Pablo Galindoa5634c42020-09-16 19:42:00 +01002472Nonlocal(asdl_identifier_seq * names, int lineno, int col_offset, int
2473 end_lineno, int end_col_offset, PyArena *arena)
Jeremy Hylton81e95022007-02-27 06:50:52 +00002474{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002475 stmt_ty p;
2476 p = (stmt_ty)PyArena_Malloc(arena, sizeof(*p));
2477 if (!p)
2478 return NULL;
2479 p->kind = Nonlocal_kind;
2480 p->v.Nonlocal.names = names;
2481 p->lineno = lineno;
2482 p->col_offset = col_offset;
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00002483 p->end_lineno = end_lineno;
2484 p->end_col_offset = end_col_offset;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002485 return p;
Jeremy Hylton81e95022007-02-27 06:50:52 +00002486}
2487
2488stmt_ty
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00002489Expr(expr_ty value, int lineno, int col_offset, int end_lineno, int
2490 end_col_offset, PyArena *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002491{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002492 stmt_ty p;
2493 if (!value) {
2494 PyErr_SetString(PyExc_ValueError,
Batuhan Taskaya091951a2020-05-06 17:29:32 +03002495 "field 'value' is required for Expr");
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002496 return NULL;
2497 }
2498 p = (stmt_ty)PyArena_Malloc(arena, sizeof(*p));
2499 if (!p)
2500 return NULL;
2501 p->kind = Expr_kind;
2502 p->v.Expr.value = value;
2503 p->lineno = lineno;
2504 p->col_offset = col_offset;
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00002505 p->end_lineno = end_lineno;
2506 p->end_col_offset = end_col_offset;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002507 return p;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002508}
2509
2510stmt_ty
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00002511Pass(int lineno, int col_offset, int end_lineno, int end_col_offset, PyArena
2512 *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002513{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002514 stmt_ty p;
2515 p = (stmt_ty)PyArena_Malloc(arena, sizeof(*p));
2516 if (!p)
2517 return NULL;
2518 p->kind = Pass_kind;
2519 p->lineno = lineno;
2520 p->col_offset = col_offset;
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00002521 p->end_lineno = end_lineno;
2522 p->end_col_offset = end_col_offset;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002523 return p;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002524}
2525
2526stmt_ty
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00002527Break(int lineno, int col_offset, int end_lineno, int end_col_offset, PyArena
2528 *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002529{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002530 stmt_ty p;
2531 p = (stmt_ty)PyArena_Malloc(arena, sizeof(*p));
2532 if (!p)
2533 return NULL;
2534 p->kind = Break_kind;
2535 p->lineno = lineno;
2536 p->col_offset = col_offset;
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00002537 p->end_lineno = end_lineno;
2538 p->end_col_offset = end_col_offset;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002539 return p;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002540}
2541
2542stmt_ty
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00002543Continue(int lineno, int col_offset, int end_lineno, int end_col_offset,
2544 PyArena *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002545{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002546 stmt_ty p;
2547 p = (stmt_ty)PyArena_Malloc(arena, sizeof(*p));
2548 if (!p)
2549 return NULL;
2550 p->kind = Continue_kind;
2551 p->lineno = lineno;
2552 p->col_offset = col_offset;
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00002553 p->end_lineno = end_lineno;
2554 p->end_col_offset = end_col_offset;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002555 return p;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002556}
2557
2558expr_ty
Pablo Galindoa5634c42020-09-16 19:42:00 +01002559BoolOp(boolop_ty op, asdl_expr_seq * values, int lineno, int col_offset, int
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00002560 end_lineno, int end_col_offset, PyArena *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002561{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002562 expr_ty p;
2563 if (!op) {
2564 PyErr_SetString(PyExc_ValueError,
Batuhan Taskaya091951a2020-05-06 17:29:32 +03002565 "field 'op' is required for BoolOp");
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002566 return NULL;
2567 }
2568 p = (expr_ty)PyArena_Malloc(arena, sizeof(*p));
2569 if (!p)
2570 return NULL;
2571 p->kind = BoolOp_kind;
2572 p->v.BoolOp.op = op;
2573 p->v.BoolOp.values = values;
2574 p->lineno = lineno;
2575 p->col_offset = col_offset;
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00002576 p->end_lineno = end_lineno;
2577 p->end_col_offset = end_col_offset;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002578 return p;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002579}
2580
2581expr_ty
Emily Morehouse8f59ee02019-01-24 16:49:56 -07002582NamedExpr(expr_ty target, expr_ty value, int lineno, int col_offset, int
2583 end_lineno, int end_col_offset, PyArena *arena)
2584{
2585 expr_ty p;
2586 if (!target) {
2587 PyErr_SetString(PyExc_ValueError,
Batuhan Taskaya091951a2020-05-06 17:29:32 +03002588 "field 'target' is required for NamedExpr");
Emily Morehouse8f59ee02019-01-24 16:49:56 -07002589 return NULL;
2590 }
2591 if (!value) {
2592 PyErr_SetString(PyExc_ValueError,
Batuhan Taskaya091951a2020-05-06 17:29:32 +03002593 "field 'value' is required for NamedExpr");
Emily Morehouse8f59ee02019-01-24 16:49:56 -07002594 return NULL;
2595 }
2596 p = (expr_ty)PyArena_Malloc(arena, sizeof(*p));
2597 if (!p)
2598 return NULL;
2599 p->kind = NamedExpr_kind;
2600 p->v.NamedExpr.target = target;
2601 p->v.NamedExpr.value = value;
2602 p->lineno = lineno;
2603 p->col_offset = col_offset;
2604 p->end_lineno = end_lineno;
2605 p->end_col_offset = end_col_offset;
2606 return p;
2607}
2608
2609expr_ty
Martin v. Löwis49c5da12006-03-01 22:49:05 +00002610BinOp(expr_ty left, operator_ty op, expr_ty right, int lineno, int col_offset,
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00002611 int end_lineno, int end_col_offset, PyArena *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002612{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002613 expr_ty p;
2614 if (!left) {
2615 PyErr_SetString(PyExc_ValueError,
Batuhan Taskaya091951a2020-05-06 17:29:32 +03002616 "field 'left' is required for BinOp");
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002617 return NULL;
2618 }
2619 if (!op) {
2620 PyErr_SetString(PyExc_ValueError,
Batuhan Taskaya091951a2020-05-06 17:29:32 +03002621 "field 'op' is required for BinOp");
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002622 return NULL;
2623 }
2624 if (!right) {
2625 PyErr_SetString(PyExc_ValueError,
Batuhan Taskaya091951a2020-05-06 17:29:32 +03002626 "field 'right' is required for BinOp");
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002627 return NULL;
2628 }
2629 p = (expr_ty)PyArena_Malloc(arena, sizeof(*p));
2630 if (!p)
2631 return NULL;
2632 p->kind = BinOp_kind;
2633 p->v.BinOp.left = left;
2634 p->v.BinOp.op = op;
2635 p->v.BinOp.right = right;
2636 p->lineno = lineno;
2637 p->col_offset = col_offset;
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00002638 p->end_lineno = end_lineno;
2639 p->end_col_offset = end_col_offset;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002640 return p;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002641}
2642
2643expr_ty
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00002644UnaryOp(unaryop_ty op, expr_ty operand, int lineno, int col_offset, int
2645 end_lineno, int end_col_offset, PyArena *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002646{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002647 expr_ty p;
2648 if (!op) {
2649 PyErr_SetString(PyExc_ValueError,
Batuhan Taskaya091951a2020-05-06 17:29:32 +03002650 "field 'op' is required for UnaryOp");
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002651 return NULL;
2652 }
2653 if (!operand) {
2654 PyErr_SetString(PyExc_ValueError,
Batuhan Taskaya091951a2020-05-06 17:29:32 +03002655 "field 'operand' is required for UnaryOp");
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002656 return NULL;
2657 }
2658 p = (expr_ty)PyArena_Malloc(arena, sizeof(*p));
2659 if (!p)
2660 return NULL;
2661 p->kind = UnaryOp_kind;
2662 p->v.UnaryOp.op = op;
2663 p->v.UnaryOp.operand = operand;
2664 p->lineno = lineno;
2665 p->col_offset = col_offset;
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00002666 p->end_lineno = end_lineno;
2667 p->end_col_offset = end_col_offset;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002668 return p;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002669}
2670
2671expr_ty
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00002672Lambda(arguments_ty args, expr_ty body, int lineno, int col_offset, int
2673 end_lineno, int end_col_offset, PyArena *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002674{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002675 expr_ty p;
2676 if (!args) {
2677 PyErr_SetString(PyExc_ValueError,
Batuhan Taskaya091951a2020-05-06 17:29:32 +03002678 "field 'args' is required for Lambda");
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002679 return NULL;
2680 }
2681 if (!body) {
2682 PyErr_SetString(PyExc_ValueError,
Batuhan Taskaya091951a2020-05-06 17:29:32 +03002683 "field 'body' is required for Lambda");
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002684 return NULL;
2685 }
2686 p = (expr_ty)PyArena_Malloc(arena, sizeof(*p));
2687 if (!p)
2688 return NULL;
2689 p->kind = Lambda_kind;
2690 p->v.Lambda.args = args;
2691 p->v.Lambda.body = body;
2692 p->lineno = lineno;
2693 p->col_offset = col_offset;
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00002694 p->end_lineno = end_lineno;
2695 p->end_col_offset = end_col_offset;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002696 return p;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002697}
2698
2699expr_ty
Martin v. Löwis49c5da12006-03-01 22:49:05 +00002700IfExp(expr_ty test, expr_ty body, expr_ty orelse, int lineno, int col_offset,
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00002701 int end_lineno, int end_col_offset, PyArena *arena)
Thomas Woutersdca3b9c2006-02-27 00:24:13 +00002702{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002703 expr_ty p;
2704 if (!test) {
2705 PyErr_SetString(PyExc_ValueError,
Batuhan Taskaya091951a2020-05-06 17:29:32 +03002706 "field 'test' is required for IfExp");
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002707 return NULL;
2708 }
2709 if (!body) {
2710 PyErr_SetString(PyExc_ValueError,
Batuhan Taskaya091951a2020-05-06 17:29:32 +03002711 "field 'body' is required for IfExp");
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002712 return NULL;
2713 }
2714 if (!orelse) {
2715 PyErr_SetString(PyExc_ValueError,
Batuhan Taskaya091951a2020-05-06 17:29:32 +03002716 "field 'orelse' is required for IfExp");
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002717 return NULL;
2718 }
2719 p = (expr_ty)PyArena_Malloc(arena, sizeof(*p));
2720 if (!p)
2721 return NULL;
2722 p->kind = IfExp_kind;
2723 p->v.IfExp.test = test;
2724 p->v.IfExp.body = body;
2725 p->v.IfExp.orelse = orelse;
2726 p->lineno = lineno;
2727 p->col_offset = col_offset;
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00002728 p->end_lineno = end_lineno;
2729 p->end_col_offset = end_col_offset;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002730 return p;
Thomas Woutersdca3b9c2006-02-27 00:24:13 +00002731}
2732
2733expr_ty
Pablo Galindoa5634c42020-09-16 19:42:00 +01002734Dict(asdl_expr_seq * keys, asdl_expr_seq * values, int lineno, int col_offset,
2735 int end_lineno, int end_col_offset, PyArena *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002736{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002737 expr_ty p;
2738 p = (expr_ty)PyArena_Malloc(arena, sizeof(*p));
2739 if (!p)
2740 return NULL;
2741 p->kind = Dict_kind;
2742 p->v.Dict.keys = keys;
2743 p->v.Dict.values = values;
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
Pablo Galindoa5634c42020-09-16 19:42:00 +01002752Set(asdl_expr_seq * elts, int lineno, int col_offset, int end_lineno, int
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00002753 end_col_offset, PyArena *arena)
Guido van Rossum86e58e22006-08-28 15:27:34 +00002754{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002755 expr_ty p;
2756 p = (expr_ty)PyArena_Malloc(arena, sizeof(*p));
2757 if (!p)
2758 return NULL;
2759 p->kind = Set_kind;
2760 p->v.Set.elts = elts;
2761 p->lineno = lineno;
2762 p->col_offset = col_offset;
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00002763 p->end_lineno = end_lineno;
2764 p->end_col_offset = end_col_offset;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002765 return p;
Guido van Rossum86e58e22006-08-28 15:27:34 +00002766}
2767
2768expr_ty
Pablo Galindoa5634c42020-09-16 19:42:00 +01002769ListComp(expr_ty elt, asdl_comprehension_seq * generators, int lineno, int
2770 col_offset, int end_lineno, int end_col_offset, PyArena *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002771{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002772 expr_ty p;
2773 if (!elt) {
2774 PyErr_SetString(PyExc_ValueError,
Batuhan Taskaya091951a2020-05-06 17:29:32 +03002775 "field 'elt' is required for ListComp");
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002776 return NULL;
2777 }
2778 p = (expr_ty)PyArena_Malloc(arena, sizeof(*p));
2779 if (!p)
2780 return NULL;
2781 p->kind = ListComp_kind;
2782 p->v.ListComp.elt = elt;
2783 p->v.ListComp.generators = generators;
2784 p->lineno = lineno;
2785 p->col_offset = col_offset;
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00002786 p->end_lineno = end_lineno;
2787 p->end_col_offset = end_col_offset;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002788 return p;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002789}
2790
2791expr_ty
Pablo Galindoa5634c42020-09-16 19:42:00 +01002792SetComp(expr_ty elt, asdl_comprehension_seq * generators, int lineno, int
2793 col_offset, int end_lineno, int end_col_offset, PyArena *arena)
Nick Coghlan650f0d02007-04-15 12:05:43 +00002794{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002795 expr_ty p;
2796 if (!elt) {
2797 PyErr_SetString(PyExc_ValueError,
Batuhan Taskaya091951a2020-05-06 17:29:32 +03002798 "field 'elt' is required for SetComp");
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002799 return NULL;
2800 }
2801 p = (expr_ty)PyArena_Malloc(arena, sizeof(*p));
2802 if (!p)
2803 return NULL;
2804 p->kind = SetComp_kind;
2805 p->v.SetComp.elt = elt;
2806 p->v.SetComp.generators = generators;
2807 p->lineno = lineno;
2808 p->col_offset = col_offset;
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00002809 p->end_lineno = end_lineno;
2810 p->end_col_offset = end_col_offset;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002811 return p;
Nick Coghlan650f0d02007-04-15 12:05:43 +00002812}
2813
2814expr_ty
Pablo Galindoa5634c42020-09-16 19:42:00 +01002815DictComp(expr_ty key, expr_ty value, asdl_comprehension_seq * generators, int
2816 lineno, int col_offset, int end_lineno, int end_col_offset, PyArena
2817 *arena)
Guido van Rossum992d4a32007-07-11 13:09:30 +00002818{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002819 expr_ty p;
2820 if (!key) {
2821 PyErr_SetString(PyExc_ValueError,
Batuhan Taskaya091951a2020-05-06 17:29:32 +03002822 "field 'key' is required for DictComp");
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002823 return NULL;
2824 }
2825 if (!value) {
2826 PyErr_SetString(PyExc_ValueError,
Batuhan Taskaya091951a2020-05-06 17:29:32 +03002827 "field 'value' is required for DictComp");
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002828 return NULL;
2829 }
2830 p = (expr_ty)PyArena_Malloc(arena, sizeof(*p));
2831 if (!p)
2832 return NULL;
2833 p->kind = DictComp_kind;
2834 p->v.DictComp.key = key;
2835 p->v.DictComp.value = value;
2836 p->v.DictComp.generators = generators;
2837 p->lineno = lineno;
2838 p->col_offset = col_offset;
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00002839 p->end_lineno = end_lineno;
2840 p->end_col_offset = end_col_offset;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002841 return p;
Guido van Rossum992d4a32007-07-11 13:09:30 +00002842}
2843
2844expr_ty
Pablo Galindoa5634c42020-09-16 19:42:00 +01002845GeneratorExp(expr_ty elt, asdl_comprehension_seq * generators, int lineno, int
2846 col_offset, int end_lineno, int end_col_offset, PyArena *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002847{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002848 expr_ty p;
2849 if (!elt) {
2850 PyErr_SetString(PyExc_ValueError,
Batuhan Taskaya091951a2020-05-06 17:29:32 +03002851 "field 'elt' is required for GeneratorExp");
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002852 return NULL;
2853 }
2854 p = (expr_ty)PyArena_Malloc(arena, sizeof(*p));
2855 if (!p)
2856 return NULL;
2857 p->kind = GeneratorExp_kind;
2858 p->v.GeneratorExp.elt = elt;
2859 p->v.GeneratorExp.generators = generators;
2860 p->lineno = lineno;
2861 p->col_offset = col_offset;
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00002862 p->end_lineno = end_lineno;
2863 p->end_col_offset = end_col_offset;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002864 return p;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002865}
2866
2867expr_ty
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00002868Await(expr_ty value, int lineno, int col_offset, int end_lineno, int
2869 end_col_offset, PyArena *arena)
Yury Selivanov75445082015-05-11 22:57:16 -04002870{
2871 expr_ty p;
2872 if (!value) {
2873 PyErr_SetString(PyExc_ValueError,
Batuhan Taskaya091951a2020-05-06 17:29:32 +03002874 "field 'value' is required for Await");
Yury Selivanov75445082015-05-11 22:57:16 -04002875 return NULL;
2876 }
2877 p = (expr_ty)PyArena_Malloc(arena, sizeof(*p));
2878 if (!p)
2879 return NULL;
2880 p->kind = Await_kind;
2881 p->v.Await.value = value;
2882 p->lineno = lineno;
2883 p->col_offset = col_offset;
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00002884 p->end_lineno = end_lineno;
2885 p->end_col_offset = end_col_offset;
Yury Selivanov75445082015-05-11 22:57:16 -04002886 return p;
2887}
2888
2889expr_ty
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00002890Yield(expr_ty value, int lineno, int col_offset, int end_lineno, int
2891 end_col_offset, PyArena *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002892{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002893 expr_ty p;
2894 p = (expr_ty)PyArena_Malloc(arena, sizeof(*p));
2895 if (!p)
2896 return NULL;
2897 p->kind = Yield_kind;
2898 p->v.Yield.value = value;
2899 p->lineno = lineno;
2900 p->col_offset = col_offset;
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00002901 p->end_lineno = end_lineno;
2902 p->end_col_offset = end_col_offset;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002903 return p;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002904}
2905
2906expr_ty
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00002907YieldFrom(expr_ty value, int lineno, int col_offset, int end_lineno, int
2908 end_col_offset, PyArena *arena)
Benjamin Peterson527c6222012-01-14 08:58:23 -05002909{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002910 expr_ty p;
2911 if (!value) {
2912 PyErr_SetString(PyExc_ValueError,
Batuhan Taskaya091951a2020-05-06 17:29:32 +03002913 "field 'value' is required for YieldFrom");
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002914 return NULL;
2915 }
2916 p = (expr_ty)PyArena_Malloc(arena, sizeof(*p));
2917 if (!p)
2918 return NULL;
2919 p->kind = YieldFrom_kind;
2920 p->v.YieldFrom.value = value;
2921 p->lineno = lineno;
2922 p->col_offset = col_offset;
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00002923 p->end_lineno = end_lineno;
2924 p->end_col_offset = end_col_offset;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002925 return p;
Benjamin Peterson527c6222012-01-14 08:58:23 -05002926}
2927
2928expr_ty
Pablo Galindoa5634c42020-09-16 19:42:00 +01002929Compare(expr_ty left, asdl_int_seq * ops, asdl_expr_seq * comparators, int
2930 lineno, int col_offset, int end_lineno, int end_col_offset, PyArena
2931 *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002932{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002933 expr_ty p;
2934 if (!left) {
2935 PyErr_SetString(PyExc_ValueError,
Batuhan Taskaya091951a2020-05-06 17:29:32 +03002936 "field 'left' is required for Compare");
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002937 return NULL;
2938 }
2939 p = (expr_ty)PyArena_Malloc(arena, sizeof(*p));
2940 if (!p)
2941 return NULL;
2942 p->kind = Compare_kind;
2943 p->v.Compare.left = left;
2944 p->v.Compare.ops = ops;
2945 p->v.Compare.comparators = comparators;
2946 p->lineno = lineno;
2947 p->col_offset = col_offset;
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00002948 p->end_lineno = end_lineno;
2949 p->end_col_offset = end_col_offset;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002950 return p;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002951}
2952
2953expr_ty
Pablo Galindoa5634c42020-09-16 19:42:00 +01002954Call(expr_ty func, asdl_expr_seq * args, asdl_keyword_seq * keywords, int
2955 lineno, int col_offset, int end_lineno, int end_col_offset, PyArena *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002956{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002957 expr_ty p;
2958 if (!func) {
2959 PyErr_SetString(PyExc_ValueError,
Batuhan Taskaya091951a2020-05-06 17:29:32 +03002960 "field 'func' is required for Call");
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002961 return NULL;
2962 }
2963 p = (expr_ty)PyArena_Malloc(arena, sizeof(*p));
2964 if (!p)
2965 return NULL;
2966 p->kind = Call_kind;
2967 p->v.Call.func = func;
2968 p->v.Call.args = args;
2969 p->v.Call.keywords = keywords;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002970 p->lineno = lineno;
2971 p->col_offset = col_offset;
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00002972 p->end_lineno = end_lineno;
2973 p->end_col_offset = end_col_offset;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002974 return p;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002975}
2976
2977expr_ty
Eric V. Smith6f6ff8a2019-05-27 15:31:52 -04002978FormattedValue(expr_ty value, int conversion, expr_ty format_spec, int lineno,
2979 int col_offset, int end_lineno, int end_col_offset, PyArena
2980 *arena)
Eric V. Smith235a6f02015-09-19 14:51:32 -04002981{
2982 expr_ty p;
2983 if (!value) {
2984 PyErr_SetString(PyExc_ValueError,
Batuhan Taskaya091951a2020-05-06 17:29:32 +03002985 "field 'value' is required for FormattedValue");
Eric V. Smith235a6f02015-09-19 14:51:32 -04002986 return NULL;
2987 }
2988 p = (expr_ty)PyArena_Malloc(arena, sizeof(*p));
2989 if (!p)
2990 return NULL;
2991 p->kind = FormattedValue_kind;
2992 p->v.FormattedValue.value = value;
2993 p->v.FormattedValue.conversion = conversion;
2994 p->v.FormattedValue.format_spec = format_spec;
2995 p->lineno = lineno;
2996 p->col_offset = col_offset;
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00002997 p->end_lineno = end_lineno;
2998 p->end_col_offset = end_col_offset;
Eric V. Smith235a6f02015-09-19 14:51:32 -04002999 return p;
3000}
3001
3002expr_ty
Pablo Galindoa5634c42020-09-16 19:42:00 +01003003JoinedStr(asdl_expr_seq * values, int lineno, int col_offset, int end_lineno,
3004 int end_col_offset, PyArena *arena)
Eric V. Smith235a6f02015-09-19 14:51:32 -04003005{
3006 expr_ty p;
3007 p = (expr_ty)PyArena_Malloc(arena, sizeof(*p));
3008 if (!p)
3009 return NULL;
3010 p->kind = JoinedStr_kind;
3011 p->v.JoinedStr.values = values;
3012 p->lineno = lineno;
3013 p->col_offset = col_offset;
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00003014 p->end_lineno = end_lineno;
3015 p->end_col_offset = end_col_offset;
Eric V. Smith235a6f02015-09-19 14:51:32 -04003016 return p;
3017}
3018
3019expr_ty
Guido van Rossum10f8ce62019-03-13 13:00:46 -07003020Constant(constant value, string kind, int lineno, int col_offset, int
3021 end_lineno, int end_col_offset, PyArena *arena)
Victor Stinnerf2c1aa12016-01-26 00:40:57 +01003022{
3023 expr_ty p;
3024 if (!value) {
3025 PyErr_SetString(PyExc_ValueError,
Batuhan Taskaya091951a2020-05-06 17:29:32 +03003026 "field 'value' is required for Constant");
Victor Stinnerf2c1aa12016-01-26 00:40:57 +01003027 return NULL;
3028 }
3029 p = (expr_ty)PyArena_Malloc(arena, sizeof(*p));
3030 if (!p)
3031 return NULL;
3032 p->kind = Constant_kind;
3033 p->v.Constant.value = value;
Guido van Rossum10f8ce62019-03-13 13:00:46 -07003034 p->v.Constant.kind = kind;
Victor Stinnerf2c1aa12016-01-26 00:40:57 +01003035 p->lineno = lineno;
3036 p->col_offset = col_offset;
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00003037 p->end_lineno = end_lineno;
3038 p->end_col_offset = end_col_offset;
Victor Stinnerf2c1aa12016-01-26 00:40:57 +01003039 return p;
3040}
3041
3042expr_ty
Martin v. Löwis49c5da12006-03-01 22:49:05 +00003043Attribute(expr_ty value, identifier attr, expr_context_ty ctx, int lineno, int
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00003044 col_offset, int end_lineno, int end_col_offset, PyArena *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00003045{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003046 expr_ty p;
3047 if (!value) {
3048 PyErr_SetString(PyExc_ValueError,
Batuhan Taskaya091951a2020-05-06 17:29:32 +03003049 "field 'value' is required for Attribute");
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003050 return NULL;
3051 }
3052 if (!attr) {
3053 PyErr_SetString(PyExc_ValueError,
Batuhan Taskaya091951a2020-05-06 17:29:32 +03003054 "field 'attr' is required for Attribute");
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003055 return NULL;
3056 }
3057 if (!ctx) {
3058 PyErr_SetString(PyExc_ValueError,
Batuhan Taskaya091951a2020-05-06 17:29:32 +03003059 "field 'ctx' is required for Attribute");
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003060 return NULL;
3061 }
3062 p = (expr_ty)PyArena_Malloc(arena, sizeof(*p));
3063 if (!p)
3064 return NULL;
3065 p->kind = Attribute_kind;
3066 p->v.Attribute.value = value;
3067 p->v.Attribute.attr = attr;
3068 p->v.Attribute.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
Serhiy Storchaka13d52c22020-03-10 18:52:34 +02003077Subscript(expr_ty value, expr_ty slice, expr_context_ty ctx, int lineno, int
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00003078 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 (!value) {
3082 PyErr_SetString(PyExc_ValueError,
Batuhan Taskaya091951a2020-05-06 17:29:32 +03003083 "field 'value' is required for Subscript");
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003084 return NULL;
3085 }
3086 if (!slice) {
3087 PyErr_SetString(PyExc_ValueError,
Batuhan Taskaya091951a2020-05-06 17:29:32 +03003088 "field 'slice' is required for Subscript");
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003089 return NULL;
3090 }
3091 if (!ctx) {
3092 PyErr_SetString(PyExc_ValueError,
Batuhan Taskaya091951a2020-05-06 17:29:32 +03003093 "field 'ctx' is required for Subscript");
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003094 return NULL;
3095 }
3096 p = (expr_ty)PyArena_Malloc(arena, sizeof(*p));
3097 if (!p)
3098 return NULL;
3099 p->kind = Subscript_kind;
3100 p->v.Subscript.value = value;
3101 p->v.Subscript.slice = slice;
3102 p->v.Subscript.ctx = ctx;
3103 p->lineno = lineno;
3104 p->col_offset = col_offset;
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00003105 p->end_lineno = end_lineno;
3106 p->end_col_offset = end_col_offset;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003107 return p;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00003108}
3109
3110expr_ty
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00003111Starred(expr_ty value, expr_context_ty ctx, int lineno, int col_offset, int
3112 end_lineno, int end_col_offset, PyArena *arena)
Guido van Rossum0368b722007-05-11 16:50:42 +00003113{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003114 expr_ty p;
3115 if (!value) {
3116 PyErr_SetString(PyExc_ValueError,
Batuhan Taskaya091951a2020-05-06 17:29:32 +03003117 "field 'value' is required for Starred");
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003118 return NULL;
3119 }
3120 if (!ctx) {
3121 PyErr_SetString(PyExc_ValueError,
Batuhan Taskaya091951a2020-05-06 17:29:32 +03003122 "field 'ctx' is required for Starred");
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003123 return NULL;
3124 }
3125 p = (expr_ty)PyArena_Malloc(arena, sizeof(*p));
3126 if (!p)
3127 return NULL;
3128 p->kind = Starred_kind;
3129 p->v.Starred.value = value;
3130 p->v.Starred.ctx = ctx;
3131 p->lineno = lineno;
3132 p->col_offset = col_offset;
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00003133 p->end_lineno = end_lineno;
3134 p->end_col_offset = end_col_offset;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003135 return p;
Guido van Rossum0368b722007-05-11 16:50:42 +00003136}
3137
3138expr_ty
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00003139Name(identifier id, expr_context_ty ctx, int lineno, int col_offset, int
3140 end_lineno, int end_col_offset, PyArena *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00003141{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003142 expr_ty p;
3143 if (!id) {
3144 PyErr_SetString(PyExc_ValueError,
Batuhan Taskaya091951a2020-05-06 17:29:32 +03003145 "field 'id' is required for Name");
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003146 return NULL;
3147 }
3148 if (!ctx) {
3149 PyErr_SetString(PyExc_ValueError,
Batuhan Taskaya091951a2020-05-06 17:29:32 +03003150 "field 'ctx' is required for Name");
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003151 return NULL;
3152 }
3153 p = (expr_ty)PyArena_Malloc(arena, sizeof(*p));
3154 if (!p)
3155 return NULL;
3156 p->kind = Name_kind;
3157 p->v.Name.id = id;
3158 p->v.Name.ctx = ctx;
3159 p->lineno = lineno;
3160 p->col_offset = col_offset;
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00003161 p->end_lineno = end_lineno;
3162 p->end_col_offset = end_col_offset;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003163 return p;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00003164}
3165
3166expr_ty
Pablo Galindoa5634c42020-09-16 19:42:00 +01003167List(asdl_expr_seq * elts, expr_context_ty ctx, int lineno, int col_offset, int
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00003168 end_lineno, int end_col_offset, PyArena *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00003169{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003170 expr_ty p;
3171 if (!ctx) {
3172 PyErr_SetString(PyExc_ValueError,
Batuhan Taskaya091951a2020-05-06 17:29:32 +03003173 "field 'ctx' is required for List");
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003174 return NULL;
3175 }
3176 p = (expr_ty)PyArena_Malloc(arena, sizeof(*p));
3177 if (!p)
3178 return NULL;
3179 p->kind = List_kind;
3180 p->v.List.elts = elts;
3181 p->v.List.ctx = ctx;
3182 p->lineno = lineno;
3183 p->col_offset = col_offset;
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00003184 p->end_lineno = end_lineno;
3185 p->end_col_offset = end_col_offset;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003186 return p;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00003187}
3188
3189expr_ty
Pablo Galindoa5634c42020-09-16 19:42:00 +01003190Tuple(asdl_expr_seq * elts, expr_context_ty ctx, int lineno, int col_offset,
3191 int end_lineno, int end_col_offset, PyArena *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00003192{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003193 expr_ty p;
3194 if (!ctx) {
3195 PyErr_SetString(PyExc_ValueError,
Batuhan Taskaya091951a2020-05-06 17:29:32 +03003196 "field 'ctx' is required for Tuple");
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003197 return NULL;
3198 }
3199 p = (expr_ty)PyArena_Malloc(arena, sizeof(*p));
3200 if (!p)
3201 return NULL;
3202 p->kind = Tuple_kind;
3203 p->v.Tuple.elts = elts;
3204 p->v.Tuple.ctx = ctx;
3205 p->lineno = lineno;
3206 p->col_offset = col_offset;
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00003207 p->end_lineno = end_lineno;
3208 p->end_col_offset = end_col_offset;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003209 return p;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00003210}
3211
Serhiy Storchaka13d52c22020-03-10 18:52:34 +02003212expr_ty
3213Slice(expr_ty lower, expr_ty upper, expr_ty step, int lineno, int col_offset,
3214 int end_lineno, int end_col_offset, PyArena *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00003215{
Serhiy Storchaka13d52c22020-03-10 18:52:34 +02003216 expr_ty p;
3217 p = (expr_ty)PyArena_Malloc(arena, sizeof(*p));
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003218 if (!p)
3219 return NULL;
3220 p->kind = Slice_kind;
3221 p->v.Slice.lower = lower;
3222 p->v.Slice.upper = upper;
3223 p->v.Slice.step = step;
Serhiy Storchaka13d52c22020-03-10 18:52:34 +02003224 p->lineno = lineno;
3225 p->col_offset = col_offset;
3226 p->end_lineno = end_lineno;
3227 p->end_col_offset = end_col_offset;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003228 return p;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00003229}
3230
3231comprehension_ty
Pablo Galindoa5634c42020-09-16 19:42:00 +01003232comprehension(expr_ty target, expr_ty iter, asdl_expr_seq * ifs, int is_async,
Yury Selivanov52c4e7c2016-09-09 10:36:01 -07003233 PyArena *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00003234{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003235 comprehension_ty p;
3236 if (!target) {
3237 PyErr_SetString(PyExc_ValueError,
Batuhan Taskaya091951a2020-05-06 17:29:32 +03003238 "field 'target' is required for comprehension");
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003239 return NULL;
3240 }
3241 if (!iter) {
3242 PyErr_SetString(PyExc_ValueError,
Batuhan Taskaya091951a2020-05-06 17:29:32 +03003243 "field 'iter' is required for comprehension");
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003244 return NULL;
3245 }
3246 p = (comprehension_ty)PyArena_Malloc(arena, sizeof(*p));
3247 if (!p)
3248 return NULL;
3249 p->target = target;
3250 p->iter = iter;
3251 p->ifs = ifs;
Yury Selivanov52c4e7c2016-09-09 10:36:01 -07003252 p->is_async = is_async;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003253 return p;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00003254}
3255
3256excepthandler_ty
Pablo Galindoa5634c42020-09-16 19:42:00 +01003257ExceptHandler(expr_ty type, identifier name, asdl_stmt_seq * body, int lineno,
3258 int col_offset, int end_lineno, int end_col_offset, PyArena
3259 *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00003260{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003261 excepthandler_ty p;
3262 p = (excepthandler_ty)PyArena_Malloc(arena, sizeof(*p));
3263 if (!p)
3264 return NULL;
3265 p->kind = ExceptHandler_kind;
3266 p->v.ExceptHandler.type = type;
3267 p->v.ExceptHandler.name = name;
3268 p->v.ExceptHandler.body = body;
3269 p->lineno = lineno;
3270 p->col_offset = col_offset;
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00003271 p->end_lineno = end_lineno;
3272 p->end_col_offset = end_col_offset;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003273 return p;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00003274}
3275
3276arguments_ty
Pablo Galindoa5634c42020-09-16 19:42:00 +01003277arguments(asdl_arg_seq * posonlyargs, asdl_arg_seq * args, arg_ty vararg,
3278 asdl_arg_seq * kwonlyargs, asdl_expr_seq * kw_defaults, arg_ty kwarg,
3279 asdl_expr_seq * defaults, PyArena *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00003280{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003281 arguments_ty p;
3282 p = (arguments_ty)PyArena_Malloc(arena, sizeof(*p));
3283 if (!p)
3284 return NULL;
Pablo Galindo8c77b8c2019-04-29 13:36:57 +01003285 p->posonlyargs = posonlyargs;
Pablo Galindocd6e83b2019-07-15 01:32:18 +02003286 p->args = args;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003287 p->vararg = vararg;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003288 p->kwonlyargs = kwonlyargs;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003289 p->kw_defaults = kw_defaults;
Victor Stinneree4b59c2013-07-27 00:01:35 +02003290 p->kwarg = kwarg;
3291 p->defaults = defaults;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003292 return p;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00003293}
3294
Neal Norwitzc1505362006-12-28 06:47:50 +00003295arg_ty
Guido van Rossumdcfcd142019-01-31 03:40:27 -08003296arg(identifier arg, expr_ty annotation, string type_comment, int lineno, int
3297 col_offset, int end_lineno, int end_col_offset, PyArena *arena)
Neal Norwitzc1505362006-12-28 06:47:50 +00003298{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003299 arg_ty p;
3300 if (!arg) {
3301 PyErr_SetString(PyExc_ValueError,
Batuhan Taskaya091951a2020-05-06 17:29:32 +03003302 "field 'arg' is required for arg");
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003303 return NULL;
3304 }
3305 p = (arg_ty)PyArena_Malloc(arena, sizeof(*p));
3306 if (!p)
3307 return NULL;
3308 p->arg = arg;
3309 p->annotation = annotation;
Guido van Rossumdcfcd142019-01-31 03:40:27 -08003310 p->type_comment = type_comment;
Victor Stinnerc106c682015-11-06 17:01:48 +01003311 p->lineno = lineno;
3312 p->col_offset = col_offset;
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00003313 p->end_lineno = end_lineno;
3314 p->end_col_offset = end_col_offset;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003315 return p;
Neal Norwitzc1505362006-12-28 06:47:50 +00003316}
3317
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00003318keyword_ty
Pablo Galindo168660b2020-04-02 00:47:39 +01003319keyword(identifier arg, expr_ty value, int lineno, int col_offset, int
3320 end_lineno, int end_col_offset, PyArena *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00003321{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003322 keyword_ty p;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003323 if (!value) {
3324 PyErr_SetString(PyExc_ValueError,
Batuhan Taskaya091951a2020-05-06 17:29:32 +03003325 "field 'value' is required for keyword");
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003326 return NULL;
3327 }
3328 p = (keyword_ty)PyArena_Malloc(arena, sizeof(*p));
3329 if (!p)
3330 return NULL;
3331 p->arg = arg;
3332 p->value = value;
Pablo Galindo168660b2020-04-02 00:47:39 +01003333 p->lineno = lineno;
3334 p->col_offset = col_offset;
3335 p->end_lineno = end_lineno;
3336 p->end_col_offset = end_col_offset;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003337 return p;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00003338}
3339
3340alias_ty
Neal Norwitzadb69fc2005-12-17 20:54:49 +00003341alias(identifier name, identifier asname, PyArena *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00003342{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003343 alias_ty p;
3344 if (!name) {
3345 PyErr_SetString(PyExc_ValueError,
Batuhan Taskaya091951a2020-05-06 17:29:32 +03003346 "field 'name' is required for alias");
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003347 return NULL;
3348 }
3349 p = (alias_ty)PyArena_Malloc(arena, sizeof(*p));
3350 if (!p)
3351 return NULL;
3352 p->name = name;
3353 p->asname = asname;
3354 return p;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00003355}
3356
Benjamin Petersonbf1bbc12011-05-27 13:58:08 -05003357withitem_ty
3358withitem(expr_ty context_expr, expr_ty optional_vars, PyArena *arena)
3359{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003360 withitem_ty p;
3361 if (!context_expr) {
3362 PyErr_SetString(PyExc_ValueError,
Batuhan Taskaya091951a2020-05-06 17:29:32 +03003363 "field 'context_expr' is required for withitem");
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003364 return NULL;
3365 }
3366 p = (withitem_ty)PyArena_Malloc(arena, sizeof(*p));
3367 if (!p)
3368 return NULL;
3369 p->context_expr = context_expr;
3370 p->optional_vars = optional_vars;
3371 return p;
Benjamin Petersonbf1bbc12011-05-27 13:58:08 -05003372}
3373
Guido van Rossumdcfcd142019-01-31 03:40:27 -08003374type_ignore_ty
Michael J. Sullivan933e1502019-05-22 07:54:20 -07003375TypeIgnore(int lineno, string tag, PyArena *arena)
Guido van Rossumdcfcd142019-01-31 03:40:27 -08003376{
3377 type_ignore_ty p;
Michael J. Sullivan933e1502019-05-22 07:54:20 -07003378 if (!tag) {
3379 PyErr_SetString(PyExc_ValueError,
Batuhan Taskaya091951a2020-05-06 17:29:32 +03003380 "field 'tag' is required for TypeIgnore");
Michael J. Sullivan933e1502019-05-22 07:54:20 -07003381 return NULL;
3382 }
Guido van Rossumdcfcd142019-01-31 03:40:27 -08003383 p = (type_ignore_ty)PyArena_Malloc(arena, sizeof(*p));
3384 if (!p)
3385 return NULL;
3386 p->kind = TypeIgnore_kind;
3387 p->v.TypeIgnore.lineno = lineno;
Michael J. Sullivan933e1502019-05-22 07:54:20 -07003388 p->v.TypeIgnore.tag = tag;
Guido van Rossumdcfcd142019-01-31 03:40:27 -08003389 return p;
3390}
3391
Neal Norwitz7b5a6042005-11-13 19:14:20 +00003392
Martin v. Löwisbd260da2006-02-26 19:42:26 +00003393PyObject*
Victor Stinner74419f02020-07-03 11:35:37 +02003394ast2obj_mod(astmodulestate *state, void* _o)
Neal Norwitz7b5a6042005-11-13 19:14:20 +00003395{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003396 mod_ty o = (mod_ty)_o;
3397 PyObject *result = NULL, *value = NULL;
Dino Viehlandac46eb42019-09-11 10:16:34 -07003398 PyTypeObject *tp;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003399 if (!o) {
Serhiy Storchaka228b12e2017-01-23 09:47:21 +02003400 Py_RETURN_NONE;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003401 }
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003402 switch (o->kind) {
3403 case Module_kind:
Victor Stinner74419f02020-07-03 11:35:37 +02003404 tp = (PyTypeObject *)state->Module_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07003405 result = PyType_GenericNew(tp, NULL, NULL);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003406 if (!result) goto failed;
Pablo Galindoa5634c42020-09-16 19:42:00 +01003407 value = ast2obj_list(state, (asdl_seq*)o->v.Module.body, ast2obj_stmt);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003408 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02003409 if (PyObject_SetAttr(result, state->body, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003410 goto failed;
3411 Py_DECREF(value);
Pablo Galindoa5634c42020-09-16 19:42:00 +01003412 value = ast2obj_list(state, (asdl_seq*)o->v.Module.type_ignores,
Victor Stinner74419f02020-07-03 11:35:37 +02003413 ast2obj_type_ignore);
Guido van Rossumdcfcd142019-01-31 03:40:27 -08003414 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02003415 if (PyObject_SetAttr(result, state->type_ignores, value) == -1)
Guido van Rossumdcfcd142019-01-31 03:40:27 -08003416 goto failed;
3417 Py_DECREF(value);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003418 break;
3419 case Interactive_kind:
Victor Stinner74419f02020-07-03 11:35:37 +02003420 tp = (PyTypeObject *)state->Interactive_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07003421 result = PyType_GenericNew(tp, NULL, NULL);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003422 if (!result) goto failed;
Pablo Galindoa5634c42020-09-16 19:42:00 +01003423 value = ast2obj_list(state, (asdl_seq*)o->v.Interactive.body,
3424 ast2obj_stmt);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003425 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02003426 if (PyObject_SetAttr(result, state->body, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003427 goto failed;
3428 Py_DECREF(value);
3429 break;
3430 case Expression_kind:
Victor Stinner74419f02020-07-03 11:35:37 +02003431 tp = (PyTypeObject *)state->Expression_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07003432 result = PyType_GenericNew(tp, NULL, NULL);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003433 if (!result) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02003434 value = ast2obj_expr(state, o->v.Expression.body);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003435 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02003436 if (PyObject_SetAttr(result, state->body, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003437 goto failed;
3438 Py_DECREF(value);
3439 break;
Guido van Rossumdcfcd142019-01-31 03:40:27 -08003440 case FunctionType_kind:
Victor Stinner74419f02020-07-03 11:35:37 +02003441 tp = (PyTypeObject *)state->FunctionType_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07003442 result = PyType_GenericNew(tp, NULL, NULL);
Guido van Rossumdcfcd142019-01-31 03:40:27 -08003443 if (!result) goto failed;
Pablo Galindoa5634c42020-09-16 19:42:00 +01003444 value = ast2obj_list(state, (asdl_seq*)o->v.FunctionType.argtypes,
3445 ast2obj_expr);
Guido van Rossumdcfcd142019-01-31 03:40:27 -08003446 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02003447 if (PyObject_SetAttr(result, state->argtypes, value) == -1)
Guido van Rossumdcfcd142019-01-31 03:40:27 -08003448 goto failed;
3449 Py_DECREF(value);
Victor Stinner74419f02020-07-03 11:35:37 +02003450 value = ast2obj_expr(state, o->v.FunctionType.returns);
Guido van Rossumdcfcd142019-01-31 03:40:27 -08003451 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02003452 if (PyObject_SetAttr(result, state->returns, value) == -1)
Guido van Rossumdcfcd142019-01-31 03:40:27 -08003453 goto failed;
3454 Py_DECREF(value);
3455 break;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003456 }
3457 return result;
Martin v. Löwisbd260da2006-02-26 19:42:26 +00003458failed:
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003459 Py_XDECREF(value);
3460 Py_XDECREF(result);
3461 return NULL;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00003462}
3463
Martin v. Löwisbd260da2006-02-26 19:42:26 +00003464PyObject*
Victor Stinner74419f02020-07-03 11:35:37 +02003465ast2obj_stmt(astmodulestate *state, void* _o)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00003466{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003467 stmt_ty o = (stmt_ty)_o;
3468 PyObject *result = NULL, *value = NULL;
Dino Viehlandac46eb42019-09-11 10:16:34 -07003469 PyTypeObject *tp;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003470 if (!o) {
Serhiy Storchaka228b12e2017-01-23 09:47:21 +02003471 Py_RETURN_NONE;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003472 }
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003473 switch (o->kind) {
3474 case FunctionDef_kind:
Victor Stinner74419f02020-07-03 11:35:37 +02003475 tp = (PyTypeObject *)state->FunctionDef_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07003476 result = PyType_GenericNew(tp, NULL, NULL);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003477 if (!result) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02003478 value = ast2obj_identifier(state, o->v.FunctionDef.name);
Martin v. Löwis577b5b92006-02-27 15:23:19 +00003479 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02003480 if (PyObject_SetAttr(result, state->name, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003481 goto failed;
Martin v. Löwis03e5bc02006-03-02 00:31:27 +00003482 Py_DECREF(value);
Victor Stinner74419f02020-07-03 11:35:37 +02003483 value = ast2obj_arguments(state, o->v.FunctionDef.args);
Martin v. Löwis49c5da12006-03-01 22:49:05 +00003484 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02003485 if (PyObject_SetAttr(result, state->args, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003486 goto failed;
Martin v. Löwis03e5bc02006-03-02 00:31:27 +00003487 Py_DECREF(value);
Pablo Galindoa5634c42020-09-16 19:42:00 +01003488 value = ast2obj_list(state, (asdl_seq*)o->v.FunctionDef.body,
3489 ast2obj_stmt);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003490 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02003491 if (PyObject_SetAttr(result, state->body, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003492 goto failed;
3493 Py_DECREF(value);
Pablo Galindoa5634c42020-09-16 19:42:00 +01003494 value = ast2obj_list(state, (asdl_seq*)o->v.FunctionDef.decorator_list,
Victor Stinner74419f02020-07-03 11:35:37 +02003495 ast2obj_expr);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003496 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02003497 if (PyObject_SetAttr(result, state->decorator_list, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003498 goto failed;
3499 Py_DECREF(value);
Victor Stinner74419f02020-07-03 11:35:37 +02003500 value = ast2obj_expr(state, o->v.FunctionDef.returns);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003501 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02003502 if (PyObject_SetAttr(result, state->returns, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003503 goto failed;
3504 Py_DECREF(value);
Victor Stinner74419f02020-07-03 11:35:37 +02003505 value = ast2obj_string(state, o->v.FunctionDef.type_comment);
Guido van Rossumdcfcd142019-01-31 03:40:27 -08003506 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02003507 if (PyObject_SetAttr(result, state->type_comment, value) == -1)
Guido van Rossumdcfcd142019-01-31 03:40:27 -08003508 goto failed;
3509 Py_DECREF(value);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003510 break;
Yury Selivanov75445082015-05-11 22:57:16 -04003511 case AsyncFunctionDef_kind:
Victor Stinner74419f02020-07-03 11:35:37 +02003512 tp = (PyTypeObject *)state->AsyncFunctionDef_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07003513 result = PyType_GenericNew(tp, NULL, NULL);
Yury Selivanov75445082015-05-11 22:57:16 -04003514 if (!result) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02003515 value = ast2obj_identifier(state, o->v.AsyncFunctionDef.name);
Yury Selivanov75445082015-05-11 22:57:16 -04003516 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02003517 if (PyObject_SetAttr(result, state->name, value) == -1)
Yury Selivanov75445082015-05-11 22:57:16 -04003518 goto failed;
3519 Py_DECREF(value);
Victor Stinner74419f02020-07-03 11:35:37 +02003520 value = ast2obj_arguments(state, o->v.AsyncFunctionDef.args);
Yury Selivanov75445082015-05-11 22:57:16 -04003521 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02003522 if (PyObject_SetAttr(result, state->args, value) == -1)
Yury Selivanov75445082015-05-11 22:57:16 -04003523 goto failed;
3524 Py_DECREF(value);
Pablo Galindoa5634c42020-09-16 19:42:00 +01003525 value = ast2obj_list(state, (asdl_seq*)o->v.AsyncFunctionDef.body,
3526 ast2obj_stmt);
Yury Selivanov75445082015-05-11 22:57:16 -04003527 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02003528 if (PyObject_SetAttr(result, state->body, value) == -1)
Yury Selivanov75445082015-05-11 22:57:16 -04003529 goto failed;
3530 Py_DECREF(value);
Pablo Galindoa5634c42020-09-16 19:42:00 +01003531 value = ast2obj_list(state,
3532 (asdl_seq*)o->v.AsyncFunctionDef.decorator_list,
Yury Selivanov75445082015-05-11 22:57:16 -04003533 ast2obj_expr);
3534 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02003535 if (PyObject_SetAttr(result, state->decorator_list, value) == -1)
Yury Selivanov75445082015-05-11 22:57:16 -04003536 goto failed;
3537 Py_DECREF(value);
Victor Stinner74419f02020-07-03 11:35:37 +02003538 value = ast2obj_expr(state, o->v.AsyncFunctionDef.returns);
Yury Selivanov75445082015-05-11 22:57:16 -04003539 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02003540 if (PyObject_SetAttr(result, state->returns, value) == -1)
Yury Selivanov75445082015-05-11 22:57:16 -04003541 goto failed;
3542 Py_DECREF(value);
Victor Stinner74419f02020-07-03 11:35:37 +02003543 value = ast2obj_string(state, o->v.AsyncFunctionDef.type_comment);
Guido van Rossumdcfcd142019-01-31 03:40:27 -08003544 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02003545 if (PyObject_SetAttr(result, state->type_comment, value) == -1)
Guido van Rossumdcfcd142019-01-31 03:40:27 -08003546 goto failed;
3547 Py_DECREF(value);
Yury Selivanov75445082015-05-11 22:57:16 -04003548 break;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003549 case ClassDef_kind:
Victor Stinner74419f02020-07-03 11:35:37 +02003550 tp = (PyTypeObject *)state->ClassDef_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07003551 result = PyType_GenericNew(tp, NULL, NULL);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003552 if (!result) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02003553 value = ast2obj_identifier(state, o->v.ClassDef.name);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003554 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02003555 if (PyObject_SetAttr(result, state->name, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003556 goto failed;
3557 Py_DECREF(value);
Pablo Galindoa5634c42020-09-16 19:42:00 +01003558 value = ast2obj_list(state, (asdl_seq*)o->v.ClassDef.bases,
3559 ast2obj_expr);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003560 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02003561 if (PyObject_SetAttr(result, state->bases, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003562 goto failed;
3563 Py_DECREF(value);
Pablo Galindoa5634c42020-09-16 19:42:00 +01003564 value = ast2obj_list(state, (asdl_seq*)o->v.ClassDef.keywords,
3565 ast2obj_keyword);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003566 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02003567 if (PyObject_SetAttr(result, state->keywords, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003568 goto failed;
3569 Py_DECREF(value);
Pablo Galindoa5634c42020-09-16 19:42:00 +01003570 value = ast2obj_list(state, (asdl_seq*)o->v.ClassDef.body,
3571 ast2obj_stmt);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003572 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02003573 if (PyObject_SetAttr(result, state->body, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003574 goto failed;
3575 Py_DECREF(value);
Pablo Galindoa5634c42020-09-16 19:42:00 +01003576 value = ast2obj_list(state, (asdl_seq*)o->v.ClassDef.decorator_list,
3577 ast2obj_expr);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003578 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02003579 if (PyObject_SetAttr(result, state->decorator_list, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003580 goto failed;
3581 Py_DECREF(value);
3582 break;
3583 case Return_kind:
Victor Stinner74419f02020-07-03 11:35:37 +02003584 tp = (PyTypeObject *)state->Return_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07003585 result = PyType_GenericNew(tp, NULL, NULL);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003586 if (!result) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02003587 value = ast2obj_expr(state, o->v.Return.value);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003588 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02003589 if (PyObject_SetAttr(result, state->value, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003590 goto failed;
3591 Py_DECREF(value);
3592 break;
3593 case Delete_kind:
Victor Stinner74419f02020-07-03 11:35:37 +02003594 tp = (PyTypeObject *)state->Delete_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07003595 result = PyType_GenericNew(tp, NULL, NULL);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003596 if (!result) goto failed;
Pablo Galindoa5634c42020-09-16 19:42:00 +01003597 value = ast2obj_list(state, (asdl_seq*)o->v.Delete.targets,
3598 ast2obj_expr);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003599 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02003600 if (PyObject_SetAttr(result, state->targets, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003601 goto failed;
3602 Py_DECREF(value);
3603 break;
3604 case Assign_kind:
Victor Stinner74419f02020-07-03 11:35:37 +02003605 tp = (PyTypeObject *)state->Assign_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07003606 result = PyType_GenericNew(tp, NULL, NULL);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003607 if (!result) goto failed;
Pablo Galindoa5634c42020-09-16 19:42:00 +01003608 value = ast2obj_list(state, (asdl_seq*)o->v.Assign.targets,
3609 ast2obj_expr);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003610 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02003611 if (PyObject_SetAttr(result, state->targets, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003612 goto failed;
3613 Py_DECREF(value);
Victor Stinner74419f02020-07-03 11:35:37 +02003614 value = ast2obj_expr(state, o->v.Assign.value);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003615 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02003616 if (PyObject_SetAttr(result, state->value, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003617 goto failed;
3618 Py_DECREF(value);
Victor Stinner74419f02020-07-03 11:35:37 +02003619 value = ast2obj_string(state, o->v.Assign.type_comment);
Guido van Rossumdcfcd142019-01-31 03:40:27 -08003620 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02003621 if (PyObject_SetAttr(result, state->type_comment, value) == -1)
Guido van Rossumdcfcd142019-01-31 03:40:27 -08003622 goto failed;
3623 Py_DECREF(value);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003624 break;
3625 case AugAssign_kind:
Victor Stinner74419f02020-07-03 11:35:37 +02003626 tp = (PyTypeObject *)state->AugAssign_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07003627 result = PyType_GenericNew(tp, NULL, NULL);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003628 if (!result) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02003629 value = ast2obj_expr(state, o->v.AugAssign.target);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003630 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02003631 if (PyObject_SetAttr(result, state->target, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003632 goto failed;
3633 Py_DECREF(value);
Victor Stinner74419f02020-07-03 11:35:37 +02003634 value = ast2obj_operator(state, o->v.AugAssign.op);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003635 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02003636 if (PyObject_SetAttr(result, state->op, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003637 goto failed;
3638 Py_DECREF(value);
Victor Stinner74419f02020-07-03 11:35:37 +02003639 value = ast2obj_expr(state, o->v.AugAssign.value);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003640 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02003641 if (PyObject_SetAttr(result, state->value, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003642 goto failed;
3643 Py_DECREF(value);
3644 break;
Yury Selivanovf8cb8a12016-09-08 20:50:03 -07003645 case AnnAssign_kind:
Victor Stinner74419f02020-07-03 11:35:37 +02003646 tp = (PyTypeObject *)state->AnnAssign_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07003647 result = PyType_GenericNew(tp, NULL, NULL);
Yury Selivanovf8cb8a12016-09-08 20:50:03 -07003648 if (!result) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02003649 value = ast2obj_expr(state, o->v.AnnAssign.target);
Yury Selivanovf8cb8a12016-09-08 20:50:03 -07003650 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02003651 if (PyObject_SetAttr(result, state->target, value) == -1)
Yury Selivanovf8cb8a12016-09-08 20:50:03 -07003652 goto failed;
3653 Py_DECREF(value);
Victor Stinner74419f02020-07-03 11:35:37 +02003654 value = ast2obj_expr(state, o->v.AnnAssign.annotation);
Yury Selivanovf8cb8a12016-09-08 20:50:03 -07003655 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02003656 if (PyObject_SetAttr(result, state->annotation, value) == -1)
Yury Selivanovf8cb8a12016-09-08 20:50:03 -07003657 goto failed;
3658 Py_DECREF(value);
Victor Stinner74419f02020-07-03 11:35:37 +02003659 value = ast2obj_expr(state, o->v.AnnAssign.value);
Yury Selivanovf8cb8a12016-09-08 20:50:03 -07003660 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02003661 if (PyObject_SetAttr(result, state->value, value) == -1)
Yury Selivanovf8cb8a12016-09-08 20:50:03 -07003662 goto failed;
3663 Py_DECREF(value);
Victor Stinner74419f02020-07-03 11:35:37 +02003664 value = ast2obj_int(state, o->v.AnnAssign.simple);
Yury Selivanovf8cb8a12016-09-08 20:50:03 -07003665 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02003666 if (PyObject_SetAttr(result, state->simple, value) == -1)
Yury Selivanovf8cb8a12016-09-08 20:50:03 -07003667 goto failed;
3668 Py_DECREF(value);
3669 break;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003670 case For_kind:
Victor Stinner74419f02020-07-03 11:35:37 +02003671 tp = (PyTypeObject *)state->For_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07003672 result = PyType_GenericNew(tp, NULL, NULL);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003673 if (!result) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02003674 value = ast2obj_expr(state, o->v.For.target);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003675 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02003676 if (PyObject_SetAttr(result, state->target, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003677 goto failed;
3678 Py_DECREF(value);
Victor Stinner74419f02020-07-03 11:35:37 +02003679 value = ast2obj_expr(state, o->v.For.iter);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003680 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02003681 if (PyObject_SetAttr(result, state->iter, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003682 goto failed;
3683 Py_DECREF(value);
Pablo Galindoa5634c42020-09-16 19:42:00 +01003684 value = ast2obj_list(state, (asdl_seq*)o->v.For.body, ast2obj_stmt);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003685 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02003686 if (PyObject_SetAttr(result, state->body, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003687 goto failed;
3688 Py_DECREF(value);
Pablo Galindoa5634c42020-09-16 19:42:00 +01003689 value = ast2obj_list(state, (asdl_seq*)o->v.For.orelse, ast2obj_stmt);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003690 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02003691 if (PyObject_SetAttr(result, state->orelse, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003692 goto failed;
3693 Py_DECREF(value);
Victor Stinner74419f02020-07-03 11:35:37 +02003694 value = ast2obj_string(state, o->v.For.type_comment);
Guido van Rossumdcfcd142019-01-31 03:40:27 -08003695 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02003696 if (PyObject_SetAttr(result, state->type_comment, value) == -1)
Guido van Rossumdcfcd142019-01-31 03:40:27 -08003697 goto failed;
3698 Py_DECREF(value);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003699 break;
Yury Selivanov75445082015-05-11 22:57:16 -04003700 case AsyncFor_kind:
Victor Stinner74419f02020-07-03 11:35:37 +02003701 tp = (PyTypeObject *)state->AsyncFor_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07003702 result = PyType_GenericNew(tp, NULL, NULL);
Yury Selivanov75445082015-05-11 22:57:16 -04003703 if (!result) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02003704 value = ast2obj_expr(state, o->v.AsyncFor.target);
Yury Selivanov75445082015-05-11 22:57:16 -04003705 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02003706 if (PyObject_SetAttr(result, state->target, value) == -1)
Yury Selivanov75445082015-05-11 22:57:16 -04003707 goto failed;
3708 Py_DECREF(value);
Victor Stinner74419f02020-07-03 11:35:37 +02003709 value = ast2obj_expr(state, o->v.AsyncFor.iter);
Yury Selivanov75445082015-05-11 22:57:16 -04003710 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02003711 if (PyObject_SetAttr(result, state->iter, value) == -1)
Yury Selivanov75445082015-05-11 22:57:16 -04003712 goto failed;
3713 Py_DECREF(value);
Pablo Galindoa5634c42020-09-16 19:42:00 +01003714 value = ast2obj_list(state, (asdl_seq*)o->v.AsyncFor.body,
3715 ast2obj_stmt);
Yury Selivanov75445082015-05-11 22:57:16 -04003716 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02003717 if (PyObject_SetAttr(result, state->body, value) == -1)
Yury Selivanov75445082015-05-11 22:57:16 -04003718 goto failed;
3719 Py_DECREF(value);
Pablo Galindoa5634c42020-09-16 19:42:00 +01003720 value = ast2obj_list(state, (asdl_seq*)o->v.AsyncFor.orelse,
3721 ast2obj_stmt);
Yury Selivanov75445082015-05-11 22:57:16 -04003722 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02003723 if (PyObject_SetAttr(result, state->orelse, value) == -1)
Yury Selivanov75445082015-05-11 22:57:16 -04003724 goto failed;
3725 Py_DECREF(value);
Victor Stinner74419f02020-07-03 11:35:37 +02003726 value = ast2obj_string(state, o->v.AsyncFor.type_comment);
Guido van Rossumdcfcd142019-01-31 03:40:27 -08003727 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02003728 if (PyObject_SetAttr(result, state->type_comment, value) == -1)
Guido van Rossumdcfcd142019-01-31 03:40:27 -08003729 goto failed;
3730 Py_DECREF(value);
Yury Selivanov75445082015-05-11 22:57:16 -04003731 break;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003732 case While_kind:
Victor Stinner74419f02020-07-03 11:35:37 +02003733 tp = (PyTypeObject *)state->While_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07003734 result = PyType_GenericNew(tp, NULL, NULL);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003735 if (!result) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02003736 value = ast2obj_expr(state, o->v.While.test);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003737 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02003738 if (PyObject_SetAttr(result, state->test, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003739 goto failed;
3740 Py_DECREF(value);
Pablo Galindoa5634c42020-09-16 19:42:00 +01003741 value = ast2obj_list(state, (asdl_seq*)o->v.While.body, ast2obj_stmt);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003742 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02003743 if (PyObject_SetAttr(result, state->body, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003744 goto failed;
3745 Py_DECREF(value);
Pablo Galindoa5634c42020-09-16 19:42:00 +01003746 value = ast2obj_list(state, (asdl_seq*)o->v.While.orelse, ast2obj_stmt);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003747 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02003748 if (PyObject_SetAttr(result, state->orelse, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003749 goto failed;
3750 Py_DECREF(value);
3751 break;
3752 case If_kind:
Victor Stinner74419f02020-07-03 11:35:37 +02003753 tp = (PyTypeObject *)state->If_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07003754 result = PyType_GenericNew(tp, NULL, NULL);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003755 if (!result) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02003756 value = ast2obj_expr(state, o->v.If.test);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003757 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02003758 if (PyObject_SetAttr(result, state->test, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003759 goto failed;
3760 Py_DECREF(value);
Pablo Galindoa5634c42020-09-16 19:42:00 +01003761 value = ast2obj_list(state, (asdl_seq*)o->v.If.body, ast2obj_stmt);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003762 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02003763 if (PyObject_SetAttr(result, state->body, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003764 goto failed;
3765 Py_DECREF(value);
Pablo Galindoa5634c42020-09-16 19:42:00 +01003766 value = ast2obj_list(state, (asdl_seq*)o->v.If.orelse, ast2obj_stmt);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003767 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02003768 if (PyObject_SetAttr(result, state->orelse, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003769 goto failed;
3770 Py_DECREF(value);
3771 break;
3772 case With_kind:
Victor Stinner74419f02020-07-03 11:35:37 +02003773 tp = (PyTypeObject *)state->With_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07003774 result = PyType_GenericNew(tp, NULL, NULL);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003775 if (!result) goto failed;
Pablo Galindoa5634c42020-09-16 19:42:00 +01003776 value = ast2obj_list(state, (asdl_seq*)o->v.With.items,
3777 ast2obj_withitem);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003778 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02003779 if (PyObject_SetAttr(result, state->items, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003780 goto failed;
3781 Py_DECREF(value);
Pablo Galindoa5634c42020-09-16 19:42:00 +01003782 value = ast2obj_list(state, (asdl_seq*)o->v.With.body, ast2obj_stmt);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003783 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02003784 if (PyObject_SetAttr(result, state->body, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003785 goto failed;
3786 Py_DECREF(value);
Victor Stinner74419f02020-07-03 11:35:37 +02003787 value = ast2obj_string(state, o->v.With.type_comment);
Guido van Rossumdcfcd142019-01-31 03:40:27 -08003788 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02003789 if (PyObject_SetAttr(result, state->type_comment, value) == -1)
Guido van Rossumdcfcd142019-01-31 03:40:27 -08003790 goto failed;
3791 Py_DECREF(value);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003792 break;
Yury Selivanov75445082015-05-11 22:57:16 -04003793 case AsyncWith_kind:
Victor Stinner74419f02020-07-03 11:35:37 +02003794 tp = (PyTypeObject *)state->AsyncWith_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07003795 result = PyType_GenericNew(tp, NULL, NULL);
Yury Selivanov75445082015-05-11 22:57:16 -04003796 if (!result) goto failed;
Pablo Galindoa5634c42020-09-16 19:42:00 +01003797 value = ast2obj_list(state, (asdl_seq*)o->v.AsyncWith.items,
3798 ast2obj_withitem);
Yury Selivanov75445082015-05-11 22:57:16 -04003799 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02003800 if (PyObject_SetAttr(result, state->items, value) == -1)
Yury Selivanov75445082015-05-11 22:57:16 -04003801 goto failed;
3802 Py_DECREF(value);
Pablo Galindoa5634c42020-09-16 19:42:00 +01003803 value = ast2obj_list(state, (asdl_seq*)o->v.AsyncWith.body,
3804 ast2obj_stmt);
Yury Selivanov75445082015-05-11 22:57:16 -04003805 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02003806 if (PyObject_SetAttr(result, state->body, value) == -1)
Yury Selivanov75445082015-05-11 22:57:16 -04003807 goto failed;
3808 Py_DECREF(value);
Victor Stinner74419f02020-07-03 11:35:37 +02003809 value = ast2obj_string(state, o->v.AsyncWith.type_comment);
Guido van Rossumdcfcd142019-01-31 03:40:27 -08003810 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02003811 if (PyObject_SetAttr(result, state->type_comment, value) == -1)
Guido van Rossumdcfcd142019-01-31 03:40:27 -08003812 goto failed;
3813 Py_DECREF(value);
Yury Selivanov75445082015-05-11 22:57:16 -04003814 break;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003815 case Raise_kind:
Victor Stinner74419f02020-07-03 11:35:37 +02003816 tp = (PyTypeObject *)state->Raise_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07003817 result = PyType_GenericNew(tp, NULL, NULL);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003818 if (!result) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02003819 value = ast2obj_expr(state, o->v.Raise.exc);
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->exc, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003822 goto failed;
3823 Py_DECREF(value);
Victor Stinner74419f02020-07-03 11:35:37 +02003824 value = ast2obj_expr(state, o->v.Raise.cause);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003825 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02003826 if (PyObject_SetAttr(result, state->cause, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003827 goto failed;
3828 Py_DECREF(value);
3829 break;
3830 case Try_kind:
Victor Stinner74419f02020-07-03 11:35:37 +02003831 tp = (PyTypeObject *)state->Try_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07003832 result = PyType_GenericNew(tp, NULL, NULL);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003833 if (!result) goto failed;
Pablo Galindoa5634c42020-09-16 19:42:00 +01003834 value = ast2obj_list(state, (asdl_seq*)o->v.Try.body, ast2obj_stmt);
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->body, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003837 goto failed;
3838 Py_DECREF(value);
Pablo Galindoa5634c42020-09-16 19:42:00 +01003839 value = ast2obj_list(state, (asdl_seq*)o->v.Try.handlers,
3840 ast2obj_excepthandler);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003841 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02003842 if (PyObject_SetAttr(result, state->handlers, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003843 goto failed;
3844 Py_DECREF(value);
Pablo Galindoa5634c42020-09-16 19:42:00 +01003845 value = ast2obj_list(state, (asdl_seq*)o->v.Try.orelse, ast2obj_stmt);
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->orelse, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003848 goto failed;
3849 Py_DECREF(value);
Pablo Galindoa5634c42020-09-16 19:42:00 +01003850 value = ast2obj_list(state, (asdl_seq*)o->v.Try.finalbody,
3851 ast2obj_stmt);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003852 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02003853 if (PyObject_SetAttr(result, state->finalbody, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003854 goto failed;
3855 Py_DECREF(value);
3856 break;
3857 case Assert_kind:
Victor Stinner74419f02020-07-03 11:35:37 +02003858 tp = (PyTypeObject *)state->Assert_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07003859 result = PyType_GenericNew(tp, NULL, NULL);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003860 if (!result) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02003861 value = ast2obj_expr(state, o->v.Assert.test);
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->test, 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_expr(state, o->v.Assert.msg);
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->msg, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003869 goto failed;
3870 Py_DECREF(value);
3871 break;
3872 case Import_kind:
Victor Stinner74419f02020-07-03 11:35:37 +02003873 tp = (PyTypeObject *)state->Import_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.Import.names,
3877 ast2obj_alias);
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 ImportFrom_kind:
Victor Stinner74419f02020-07-03 11:35:37 +02003884 tp = (PyTypeObject *)state->ImportFrom_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;
Victor Stinner74419f02020-07-03 11:35:37 +02003887 value = ast2obj_identifier(state, o->v.ImportFrom.module);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003888 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02003889 if (PyObject_SetAttr(result, state->module, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003890 goto failed;
3891 Py_DECREF(value);
Pablo Galindoa5634c42020-09-16 19:42:00 +01003892 value = ast2obj_list(state, (asdl_seq*)o->v.ImportFrom.names,
3893 ast2obj_alias);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003894 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02003895 if (PyObject_SetAttr(result, state->names, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003896 goto failed;
3897 Py_DECREF(value);
Victor Stinner74419f02020-07-03 11:35:37 +02003898 value = ast2obj_int(state, o->v.ImportFrom.level);
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->level, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003901 goto failed;
3902 Py_DECREF(value);
3903 break;
3904 case Global_kind:
Victor Stinner74419f02020-07-03 11:35:37 +02003905 tp = (PyTypeObject *)state->Global_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;
Pablo Galindoa5634c42020-09-16 19:42:00 +01003908 value = ast2obj_list(state, (asdl_seq*)o->v.Global.names,
3909 ast2obj_identifier);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003910 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02003911 if (PyObject_SetAttr(result, state->names, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003912 goto failed;
3913 Py_DECREF(value);
3914 break;
3915 case Nonlocal_kind:
Victor Stinner74419f02020-07-03 11:35:37 +02003916 tp = (PyTypeObject *)state->Nonlocal_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07003917 result = PyType_GenericNew(tp, NULL, NULL);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003918 if (!result) goto failed;
Pablo Galindoa5634c42020-09-16 19:42:00 +01003919 value = ast2obj_list(state, (asdl_seq*)o->v.Nonlocal.names,
3920 ast2obj_identifier);
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->names, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003923 goto failed;
3924 Py_DECREF(value);
3925 break;
3926 case Expr_kind:
Victor Stinner74419f02020-07-03 11:35:37 +02003927 tp = (PyTypeObject *)state->Expr_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07003928 result = PyType_GenericNew(tp, NULL, NULL);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003929 if (!result) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02003930 value = ast2obj_expr(state, o->v.Expr.value);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003931 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02003932 if (PyObject_SetAttr(result, state->value, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003933 goto failed;
3934 Py_DECREF(value);
3935 break;
3936 case Pass_kind:
Victor Stinner74419f02020-07-03 11:35:37 +02003937 tp = (PyTypeObject *)state->Pass_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07003938 result = PyType_GenericNew(tp, NULL, NULL);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003939 if (!result) goto failed;
3940 break;
3941 case Break_kind:
Victor Stinner74419f02020-07-03 11:35:37 +02003942 tp = (PyTypeObject *)state->Break_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07003943 result = PyType_GenericNew(tp, NULL, NULL);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003944 if (!result) goto failed;
3945 break;
3946 case Continue_kind:
Victor Stinner74419f02020-07-03 11:35:37 +02003947 tp = (PyTypeObject *)state->Continue_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07003948 result = PyType_GenericNew(tp, NULL, NULL);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003949 if (!result) goto failed;
3950 break;
3951 }
Victor Stinner74419f02020-07-03 11:35:37 +02003952 value = ast2obj_int(state, o->lineno);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003953 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02003954 if (PyObject_SetAttr(result, state->lineno, value) < 0)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003955 goto failed;
3956 Py_DECREF(value);
Victor Stinner74419f02020-07-03 11:35:37 +02003957 value = ast2obj_int(state, o->col_offset);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003958 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02003959 if (PyObject_SetAttr(result, state->col_offset, value) < 0)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003960 goto failed;
3961 Py_DECREF(value);
Victor Stinner74419f02020-07-03 11:35:37 +02003962 value = ast2obj_int(state, o->end_lineno);
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00003963 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02003964 if (PyObject_SetAttr(result, state->end_lineno, value) < 0)
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00003965 goto failed;
3966 Py_DECREF(value);
Victor Stinner74419f02020-07-03 11:35:37 +02003967 value = ast2obj_int(state, o->end_col_offset);
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00003968 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02003969 if (PyObject_SetAttr(result, state->end_col_offset, value) < 0)
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00003970 goto failed;
3971 Py_DECREF(value);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003972 return result;
Martin v. Löwisbd260da2006-02-26 19:42:26 +00003973failed:
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003974 Py_XDECREF(value);
3975 Py_XDECREF(result);
3976 return NULL;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00003977}
3978
Martin v. Löwisbd260da2006-02-26 19:42:26 +00003979PyObject*
Victor Stinner74419f02020-07-03 11:35:37 +02003980ast2obj_expr(astmodulestate *state, void* _o)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00003981{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003982 expr_ty o = (expr_ty)_o;
3983 PyObject *result = NULL, *value = NULL;
Dino Viehlandac46eb42019-09-11 10:16:34 -07003984 PyTypeObject *tp;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003985 if (!o) {
Serhiy Storchaka228b12e2017-01-23 09:47:21 +02003986 Py_RETURN_NONE;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003987 }
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003988 switch (o->kind) {
3989 case BoolOp_kind:
Victor Stinner74419f02020-07-03 11:35:37 +02003990 tp = (PyTypeObject *)state->BoolOp_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07003991 result = PyType_GenericNew(tp, NULL, NULL);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003992 if (!result) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02003993 value = ast2obj_boolop(state, o->v.BoolOp.op);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003994 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02003995 if (PyObject_SetAttr(result, state->op, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003996 goto failed;
3997 Py_DECREF(value);
Pablo Galindoa5634c42020-09-16 19:42:00 +01003998 value = ast2obj_list(state, (asdl_seq*)o->v.BoolOp.values,
3999 ast2obj_expr);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004000 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004001 if (PyObject_SetAttr(result, state->values, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004002 goto failed;
4003 Py_DECREF(value);
4004 break;
Emily Morehouse8f59ee02019-01-24 16:49:56 -07004005 case NamedExpr_kind:
Victor Stinner74419f02020-07-03 11:35:37 +02004006 tp = (PyTypeObject *)state->NamedExpr_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07004007 result = PyType_GenericNew(tp, NULL, NULL);
Emily Morehouse8f59ee02019-01-24 16:49:56 -07004008 if (!result) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004009 value = ast2obj_expr(state, o->v.NamedExpr.target);
Emily Morehouse8f59ee02019-01-24 16:49:56 -07004010 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004011 if (PyObject_SetAttr(result, state->target, value) == -1)
Emily Morehouse8f59ee02019-01-24 16:49:56 -07004012 goto failed;
4013 Py_DECREF(value);
Victor Stinner74419f02020-07-03 11:35:37 +02004014 value = ast2obj_expr(state, o->v.NamedExpr.value);
Emily Morehouse8f59ee02019-01-24 16:49:56 -07004015 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004016 if (PyObject_SetAttr(result, state->value, value) == -1)
Emily Morehouse8f59ee02019-01-24 16:49:56 -07004017 goto failed;
4018 Py_DECREF(value);
4019 break;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004020 case BinOp_kind:
Victor Stinner74419f02020-07-03 11:35:37 +02004021 tp = (PyTypeObject *)state->BinOp_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07004022 result = PyType_GenericNew(tp, NULL, NULL);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004023 if (!result) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004024 value = ast2obj_expr(state, o->v.BinOp.left);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004025 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004026 if (PyObject_SetAttr(result, state->left, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004027 goto failed;
4028 Py_DECREF(value);
Victor Stinner74419f02020-07-03 11:35:37 +02004029 value = ast2obj_operator(state, o->v.BinOp.op);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004030 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004031 if (PyObject_SetAttr(result, state->op, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004032 goto failed;
4033 Py_DECREF(value);
Victor Stinner74419f02020-07-03 11:35:37 +02004034 value = ast2obj_expr(state, o->v.BinOp.right);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004035 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004036 if (PyObject_SetAttr(result, state->right, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004037 goto failed;
4038 Py_DECREF(value);
4039 break;
4040 case UnaryOp_kind:
Victor Stinner74419f02020-07-03 11:35:37 +02004041 tp = (PyTypeObject *)state->UnaryOp_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07004042 result = PyType_GenericNew(tp, NULL, NULL);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004043 if (!result) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004044 value = ast2obj_unaryop(state, o->v.UnaryOp.op);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004045 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004046 if (PyObject_SetAttr(result, state->op, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004047 goto failed;
4048 Py_DECREF(value);
Victor Stinner74419f02020-07-03 11:35:37 +02004049 value = ast2obj_expr(state, o->v.UnaryOp.operand);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004050 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004051 if (PyObject_SetAttr(result, state->operand, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004052 goto failed;
4053 Py_DECREF(value);
4054 break;
4055 case Lambda_kind:
Victor Stinner74419f02020-07-03 11:35:37 +02004056 tp = (PyTypeObject *)state->Lambda_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07004057 result = PyType_GenericNew(tp, NULL, NULL);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004058 if (!result) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004059 value = ast2obj_arguments(state, o->v.Lambda.args);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004060 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004061 if (PyObject_SetAttr(result, state->args, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004062 goto failed;
4063 Py_DECREF(value);
Victor Stinner74419f02020-07-03 11:35:37 +02004064 value = ast2obj_expr(state, o->v.Lambda.body);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004065 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004066 if (PyObject_SetAttr(result, state->body, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004067 goto failed;
4068 Py_DECREF(value);
4069 break;
4070 case IfExp_kind:
Victor Stinner74419f02020-07-03 11:35:37 +02004071 tp = (PyTypeObject *)state->IfExp_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07004072 result = PyType_GenericNew(tp, NULL, NULL);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004073 if (!result) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004074 value = ast2obj_expr(state, o->v.IfExp.test);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004075 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004076 if (PyObject_SetAttr(result, state->test, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004077 goto failed;
4078 Py_DECREF(value);
Victor Stinner74419f02020-07-03 11:35:37 +02004079 value = ast2obj_expr(state, o->v.IfExp.body);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004080 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004081 if (PyObject_SetAttr(result, state->body, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004082 goto failed;
4083 Py_DECREF(value);
Victor Stinner74419f02020-07-03 11:35:37 +02004084 value = ast2obj_expr(state, o->v.IfExp.orelse);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004085 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004086 if (PyObject_SetAttr(result, state->orelse, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004087 goto failed;
4088 Py_DECREF(value);
4089 break;
4090 case Dict_kind:
Victor Stinner74419f02020-07-03 11:35:37 +02004091 tp = (PyTypeObject *)state->Dict_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07004092 result = PyType_GenericNew(tp, NULL, NULL);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004093 if (!result) goto failed;
Pablo Galindoa5634c42020-09-16 19:42:00 +01004094 value = ast2obj_list(state, (asdl_seq*)o->v.Dict.keys, ast2obj_expr);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004095 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004096 if (PyObject_SetAttr(result, state->keys, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004097 goto failed;
4098 Py_DECREF(value);
Pablo Galindoa5634c42020-09-16 19:42:00 +01004099 value = ast2obj_list(state, (asdl_seq*)o->v.Dict.values, ast2obj_expr);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004100 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004101 if (PyObject_SetAttr(result, state->values, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004102 goto failed;
4103 Py_DECREF(value);
4104 break;
4105 case Set_kind:
Victor Stinner74419f02020-07-03 11:35:37 +02004106 tp = (PyTypeObject *)state->Set_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07004107 result = PyType_GenericNew(tp, NULL, NULL);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004108 if (!result) goto failed;
Pablo Galindoa5634c42020-09-16 19:42:00 +01004109 value = ast2obj_list(state, (asdl_seq*)o->v.Set.elts, ast2obj_expr);
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->elts, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004112 goto failed;
4113 Py_DECREF(value);
4114 break;
4115 case ListComp_kind:
Victor Stinner74419f02020-07-03 11:35:37 +02004116 tp = (PyTypeObject *)state->ListComp_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.ListComp.elt);
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->elt, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004122 goto failed;
4123 Py_DECREF(value);
Pablo Galindoa5634c42020-09-16 19:42:00 +01004124 value = ast2obj_list(state, (asdl_seq*)o->v.ListComp.generators,
Victor Stinner74419f02020-07-03 11:35:37 +02004125 ast2obj_comprehension);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004126 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004127 if (PyObject_SetAttr(result, state->generators, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004128 goto failed;
4129 Py_DECREF(value);
4130 break;
4131 case SetComp_kind:
Victor Stinner74419f02020-07-03 11:35:37 +02004132 tp = (PyTypeObject *)state->SetComp_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07004133 result = PyType_GenericNew(tp, NULL, NULL);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004134 if (!result) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004135 value = ast2obj_expr(state, o->v.SetComp.elt);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004136 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004137 if (PyObject_SetAttr(result, state->elt, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004138 goto failed;
4139 Py_DECREF(value);
Pablo Galindoa5634c42020-09-16 19:42:00 +01004140 value = ast2obj_list(state, (asdl_seq*)o->v.SetComp.generators,
Victor Stinner74419f02020-07-03 11:35:37 +02004141 ast2obj_comprehension);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004142 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004143 if (PyObject_SetAttr(result, state->generators, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004144 goto failed;
4145 Py_DECREF(value);
4146 break;
4147 case DictComp_kind:
Victor Stinner74419f02020-07-03 11:35:37 +02004148 tp = (PyTypeObject *)state->DictComp_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07004149 result = PyType_GenericNew(tp, NULL, NULL);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004150 if (!result) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004151 value = ast2obj_expr(state, o->v.DictComp.key);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004152 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004153 if (PyObject_SetAttr(result, state->key, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004154 goto failed;
4155 Py_DECREF(value);
Victor Stinner74419f02020-07-03 11:35:37 +02004156 value = ast2obj_expr(state, o->v.DictComp.value);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004157 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004158 if (PyObject_SetAttr(result, state->value, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004159 goto failed;
4160 Py_DECREF(value);
Pablo Galindoa5634c42020-09-16 19:42:00 +01004161 value = ast2obj_list(state, (asdl_seq*)o->v.DictComp.generators,
Victor Stinner74419f02020-07-03 11:35:37 +02004162 ast2obj_comprehension);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004163 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004164 if (PyObject_SetAttr(result, state->generators, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004165 goto failed;
4166 Py_DECREF(value);
4167 break;
4168 case GeneratorExp_kind:
Victor Stinner74419f02020-07-03 11:35:37 +02004169 tp = (PyTypeObject *)state->GeneratorExp_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07004170 result = PyType_GenericNew(tp, NULL, NULL);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004171 if (!result) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004172 value = ast2obj_expr(state, o->v.GeneratorExp.elt);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004173 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004174 if (PyObject_SetAttr(result, state->elt, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004175 goto failed;
4176 Py_DECREF(value);
Pablo Galindoa5634c42020-09-16 19:42:00 +01004177 value = ast2obj_list(state, (asdl_seq*)o->v.GeneratorExp.generators,
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004178 ast2obj_comprehension);
4179 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004180 if (PyObject_SetAttr(result, state->generators, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004181 goto failed;
4182 Py_DECREF(value);
4183 break;
Yury Selivanov75445082015-05-11 22:57:16 -04004184 case Await_kind:
Victor Stinner74419f02020-07-03 11:35:37 +02004185 tp = (PyTypeObject *)state->Await_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07004186 result = PyType_GenericNew(tp, NULL, NULL);
Yury Selivanov75445082015-05-11 22:57:16 -04004187 if (!result) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004188 value = ast2obj_expr(state, o->v.Await.value);
Yury Selivanov75445082015-05-11 22:57:16 -04004189 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004190 if (PyObject_SetAttr(result, state->value, value) == -1)
Yury Selivanov75445082015-05-11 22:57:16 -04004191 goto failed;
4192 Py_DECREF(value);
4193 break;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004194 case Yield_kind:
Victor Stinner74419f02020-07-03 11:35:37 +02004195 tp = (PyTypeObject *)state->Yield_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07004196 result = PyType_GenericNew(tp, NULL, NULL);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004197 if (!result) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004198 value = ast2obj_expr(state, o->v.Yield.value);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004199 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004200 if (PyObject_SetAttr(result, state->value, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004201 goto failed;
4202 Py_DECREF(value);
4203 break;
4204 case YieldFrom_kind:
Victor Stinner74419f02020-07-03 11:35:37 +02004205 tp = (PyTypeObject *)state->YieldFrom_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07004206 result = PyType_GenericNew(tp, NULL, NULL);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004207 if (!result) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004208 value = ast2obj_expr(state, o->v.YieldFrom.value);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004209 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004210 if (PyObject_SetAttr(result, state->value, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004211 goto failed;
4212 Py_DECREF(value);
4213 break;
4214 case Compare_kind:
Victor Stinner74419f02020-07-03 11:35:37 +02004215 tp = (PyTypeObject *)state->Compare_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07004216 result = PyType_GenericNew(tp, NULL, NULL);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004217 if (!result) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004218 value = ast2obj_expr(state, o->v.Compare.left);
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->left, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004221 goto failed;
4222 Py_DECREF(value);
4223 {
4224 Py_ssize_t i, n = asdl_seq_LEN(o->v.Compare.ops);
4225 value = PyList_New(n);
4226 if (!value) goto failed;
4227 for(i = 0; i < n; i++)
Victor Stinner74419f02020-07-03 11:35:37 +02004228 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 +00004229 }
Martin v. Löwis577b5b92006-02-27 15:23:19 +00004230 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004231 if (PyObject_SetAttr(result, state->ops, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004232 goto failed;
Martin v. Löwis03e5bc02006-03-02 00:31:27 +00004233 Py_DECREF(value);
Pablo Galindoa5634c42020-09-16 19:42:00 +01004234 value = ast2obj_list(state, (asdl_seq*)o->v.Compare.comparators,
4235 ast2obj_expr);
Martin v. Löwis49c5da12006-03-01 22:49:05 +00004236 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004237 if (PyObject_SetAttr(result, state->comparators, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004238 goto failed;
Martin v. Löwis03e5bc02006-03-02 00:31:27 +00004239 Py_DECREF(value);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004240 break;
4241 case Call_kind:
Victor Stinner74419f02020-07-03 11:35:37 +02004242 tp = (PyTypeObject *)state->Call_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07004243 result = PyType_GenericNew(tp, NULL, NULL);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004244 if (!result) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004245 value = ast2obj_expr(state, o->v.Call.func);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004246 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004247 if (PyObject_SetAttr(result, state->func, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004248 goto failed;
4249 Py_DECREF(value);
Pablo Galindoa5634c42020-09-16 19:42:00 +01004250 value = ast2obj_list(state, (asdl_seq*)o->v.Call.args, ast2obj_expr);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004251 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004252 if (PyObject_SetAttr(result, state->args, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004253 goto failed;
4254 Py_DECREF(value);
Pablo Galindoa5634c42020-09-16 19:42:00 +01004255 value = ast2obj_list(state, (asdl_seq*)o->v.Call.keywords,
4256 ast2obj_keyword);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004257 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004258 if (PyObject_SetAttr(result, state->keywords, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004259 goto failed;
4260 Py_DECREF(value);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004261 break;
Eric V. Smith235a6f02015-09-19 14:51:32 -04004262 case FormattedValue_kind:
Victor Stinner74419f02020-07-03 11:35:37 +02004263 tp = (PyTypeObject *)state->FormattedValue_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07004264 result = PyType_GenericNew(tp, NULL, NULL);
Eric V. Smith235a6f02015-09-19 14:51:32 -04004265 if (!result) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004266 value = ast2obj_expr(state, o->v.FormattedValue.value);
Eric V. Smith235a6f02015-09-19 14:51:32 -04004267 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004268 if (PyObject_SetAttr(result, state->value, value) == -1)
Eric V. Smith235a6f02015-09-19 14:51:32 -04004269 goto failed;
4270 Py_DECREF(value);
Victor Stinner74419f02020-07-03 11:35:37 +02004271 value = ast2obj_int(state, o->v.FormattedValue.conversion);
Eric V. Smith235a6f02015-09-19 14:51:32 -04004272 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004273 if (PyObject_SetAttr(result, state->conversion, value) == -1)
Eric V. Smith235a6f02015-09-19 14:51:32 -04004274 goto failed;
4275 Py_DECREF(value);
Victor Stinner74419f02020-07-03 11:35:37 +02004276 value = ast2obj_expr(state, o->v.FormattedValue.format_spec);
Eric V. Smith235a6f02015-09-19 14:51:32 -04004277 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004278 if (PyObject_SetAttr(result, state->format_spec, value) == -1)
Eric V. Smith235a6f02015-09-19 14:51:32 -04004279 goto failed;
4280 Py_DECREF(value);
4281 break;
4282 case JoinedStr_kind:
Victor Stinner74419f02020-07-03 11:35:37 +02004283 tp = (PyTypeObject *)state->JoinedStr_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07004284 result = PyType_GenericNew(tp, NULL, NULL);
Eric V. Smith235a6f02015-09-19 14:51:32 -04004285 if (!result) goto failed;
Pablo Galindoa5634c42020-09-16 19:42:00 +01004286 value = ast2obj_list(state, (asdl_seq*)o->v.JoinedStr.values,
4287 ast2obj_expr);
Eric V. Smith235a6f02015-09-19 14:51:32 -04004288 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004289 if (PyObject_SetAttr(result, state->values, value) == -1)
Eric V. Smith235a6f02015-09-19 14:51:32 -04004290 goto failed;
4291 Py_DECREF(value);
4292 break;
Victor Stinnerf2c1aa12016-01-26 00:40:57 +01004293 case Constant_kind:
Victor Stinner74419f02020-07-03 11:35:37 +02004294 tp = (PyTypeObject *)state->Constant_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07004295 result = PyType_GenericNew(tp, NULL, NULL);
Victor Stinnerf2c1aa12016-01-26 00:40:57 +01004296 if (!result) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004297 value = ast2obj_constant(state, o->v.Constant.value);
Victor Stinnerf2c1aa12016-01-26 00:40:57 +01004298 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004299 if (PyObject_SetAttr(result, state->value, value) == -1)
Victor Stinnerf2c1aa12016-01-26 00:40:57 +01004300 goto failed;
4301 Py_DECREF(value);
Victor Stinner74419f02020-07-03 11:35:37 +02004302 value = ast2obj_string(state, o->v.Constant.kind);
Guido van Rossum10f8ce62019-03-13 13:00:46 -07004303 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004304 if (PyObject_SetAttr(result, state->kind, value) == -1)
Guido van Rossum10f8ce62019-03-13 13:00:46 -07004305 goto failed;
4306 Py_DECREF(value);
Victor Stinnerf2c1aa12016-01-26 00:40:57 +01004307 break;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004308 case Attribute_kind:
Victor Stinner74419f02020-07-03 11:35:37 +02004309 tp = (PyTypeObject *)state->Attribute_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07004310 result = PyType_GenericNew(tp, NULL, NULL);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004311 if (!result) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004312 value = ast2obj_expr(state, o->v.Attribute.value);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004313 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004314 if (PyObject_SetAttr(result, state->value, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004315 goto failed;
4316 Py_DECREF(value);
Victor Stinner74419f02020-07-03 11:35:37 +02004317 value = ast2obj_identifier(state, o->v.Attribute.attr);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004318 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004319 if (PyObject_SetAttr(result, state->attr, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004320 goto failed;
4321 Py_DECREF(value);
Victor Stinner74419f02020-07-03 11:35:37 +02004322 value = ast2obj_expr_context(state, o->v.Attribute.ctx);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004323 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004324 if (PyObject_SetAttr(result, state->ctx, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004325 goto failed;
4326 Py_DECREF(value);
4327 break;
4328 case Subscript_kind:
Victor Stinner74419f02020-07-03 11:35:37 +02004329 tp = (PyTypeObject *)state->Subscript_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07004330 result = PyType_GenericNew(tp, NULL, NULL);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004331 if (!result) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004332 value = ast2obj_expr(state, o->v.Subscript.value);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004333 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004334 if (PyObject_SetAttr(result, state->value, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004335 goto failed;
4336 Py_DECREF(value);
Victor Stinner74419f02020-07-03 11:35:37 +02004337 value = ast2obj_expr(state, o->v.Subscript.slice);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004338 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004339 if (PyObject_SetAttr(result, state->slice, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004340 goto failed;
4341 Py_DECREF(value);
Victor Stinner74419f02020-07-03 11:35:37 +02004342 value = ast2obj_expr_context(state, o->v.Subscript.ctx);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004343 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004344 if (PyObject_SetAttr(result, state->ctx, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004345 goto failed;
4346 Py_DECREF(value);
4347 break;
4348 case Starred_kind:
Victor Stinner74419f02020-07-03 11:35:37 +02004349 tp = (PyTypeObject *)state->Starred_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07004350 result = PyType_GenericNew(tp, NULL, NULL);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004351 if (!result) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004352 value = ast2obj_expr(state, o->v.Starred.value);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004353 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004354 if (PyObject_SetAttr(result, state->value, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004355 goto failed;
4356 Py_DECREF(value);
Victor Stinner74419f02020-07-03 11:35:37 +02004357 value = ast2obj_expr_context(state, o->v.Starred.ctx);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004358 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004359 if (PyObject_SetAttr(result, state->ctx, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004360 goto failed;
4361 Py_DECREF(value);
4362 break;
4363 case Name_kind:
Victor Stinner74419f02020-07-03 11:35:37 +02004364 tp = (PyTypeObject *)state->Name_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07004365 result = PyType_GenericNew(tp, NULL, NULL);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004366 if (!result) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004367 value = ast2obj_identifier(state, o->v.Name.id);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004368 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004369 if (PyObject_SetAttr(result, state->id, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004370 goto failed;
4371 Py_DECREF(value);
Victor Stinner74419f02020-07-03 11:35:37 +02004372 value = ast2obj_expr_context(state, o->v.Name.ctx);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004373 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004374 if (PyObject_SetAttr(result, state->ctx, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004375 goto failed;
4376 Py_DECREF(value);
4377 break;
4378 case List_kind:
Victor Stinner74419f02020-07-03 11:35:37 +02004379 tp = (PyTypeObject *)state->List_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07004380 result = PyType_GenericNew(tp, NULL, NULL);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004381 if (!result) goto failed;
Pablo Galindoa5634c42020-09-16 19:42:00 +01004382 value = ast2obj_list(state, (asdl_seq*)o->v.List.elts, ast2obj_expr);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004383 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004384 if (PyObject_SetAttr(result, state->elts, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004385 goto failed;
4386 Py_DECREF(value);
Victor Stinner74419f02020-07-03 11:35:37 +02004387 value = ast2obj_expr_context(state, o->v.List.ctx);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004388 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004389 if (PyObject_SetAttr(result, state->ctx, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004390 goto failed;
4391 Py_DECREF(value);
4392 break;
4393 case Tuple_kind:
Victor Stinner74419f02020-07-03 11:35:37 +02004394 tp = (PyTypeObject *)state->Tuple_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07004395 result = PyType_GenericNew(tp, NULL, NULL);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004396 if (!result) goto failed;
Pablo Galindoa5634c42020-09-16 19:42:00 +01004397 value = ast2obj_list(state, (asdl_seq*)o->v.Tuple.elts, ast2obj_expr);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004398 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004399 if (PyObject_SetAttr(result, state->elts, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004400 goto failed;
4401 Py_DECREF(value);
Victor Stinner74419f02020-07-03 11:35:37 +02004402 value = ast2obj_expr_context(state, o->v.Tuple.ctx);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004403 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004404 if (PyObject_SetAttr(result, state->ctx, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004405 goto failed;
4406 Py_DECREF(value);
4407 break;
Serhiy Storchaka13d52c22020-03-10 18:52:34 +02004408 case Slice_kind:
Victor Stinner74419f02020-07-03 11:35:37 +02004409 tp = (PyTypeObject *)state->Slice_type;
Serhiy Storchaka13d52c22020-03-10 18:52:34 +02004410 result = PyType_GenericNew(tp, NULL, NULL);
4411 if (!result) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004412 value = ast2obj_expr(state, o->v.Slice.lower);
Serhiy Storchaka13d52c22020-03-10 18:52:34 +02004413 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004414 if (PyObject_SetAttr(result, state->lower, value) == -1)
Serhiy Storchaka13d52c22020-03-10 18:52:34 +02004415 goto failed;
4416 Py_DECREF(value);
Victor Stinner74419f02020-07-03 11:35:37 +02004417 value = ast2obj_expr(state, o->v.Slice.upper);
Serhiy Storchaka13d52c22020-03-10 18:52:34 +02004418 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004419 if (PyObject_SetAttr(result, state->upper, value) == -1)
Serhiy Storchaka13d52c22020-03-10 18:52:34 +02004420 goto failed;
4421 Py_DECREF(value);
Victor Stinner74419f02020-07-03 11:35:37 +02004422 value = ast2obj_expr(state, o->v.Slice.step);
Serhiy Storchaka13d52c22020-03-10 18:52:34 +02004423 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004424 if (PyObject_SetAttr(result, state->step, value) == -1)
Serhiy Storchaka13d52c22020-03-10 18:52:34 +02004425 goto failed;
4426 Py_DECREF(value);
4427 break;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004428 }
Victor Stinner74419f02020-07-03 11:35:37 +02004429 value = ast2obj_int(state, o->lineno);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004430 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004431 if (PyObject_SetAttr(result, state->lineno, value) < 0)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004432 goto failed;
4433 Py_DECREF(value);
Victor Stinner74419f02020-07-03 11:35:37 +02004434 value = ast2obj_int(state, o->col_offset);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004435 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004436 if (PyObject_SetAttr(result, state->col_offset, value) < 0)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004437 goto failed;
4438 Py_DECREF(value);
Victor Stinner74419f02020-07-03 11:35:37 +02004439 value = ast2obj_int(state, o->end_lineno);
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00004440 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004441 if (PyObject_SetAttr(result, state->end_lineno, value) < 0)
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00004442 goto failed;
4443 Py_DECREF(value);
Victor Stinner74419f02020-07-03 11:35:37 +02004444 value = ast2obj_int(state, o->end_col_offset);
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00004445 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004446 if (PyObject_SetAttr(result, state->end_col_offset, value) < 0)
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00004447 goto failed;
4448 Py_DECREF(value);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004449 return result;
Martin v. Löwisbd260da2006-02-26 19:42:26 +00004450failed:
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004451 Py_XDECREF(value);
4452 Py_XDECREF(result);
4453 return NULL;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00004454}
4455
Victor Stinner74419f02020-07-03 11:35:37 +02004456PyObject* ast2obj_expr_context(astmodulestate *state, expr_context_ty o)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00004457{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004458 switch(o) {
4459 case Load:
Victor Stinner74419f02020-07-03 11:35:37 +02004460 Py_INCREF(state->Load_singleton);
4461 return state->Load_singleton;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004462 case Store:
Victor Stinner74419f02020-07-03 11:35:37 +02004463 Py_INCREF(state->Store_singleton);
4464 return state->Store_singleton;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004465 case Del:
Victor Stinner74419f02020-07-03 11:35:37 +02004466 Py_INCREF(state->Del_singleton);
4467 return state->Del_singleton;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004468 }
Batuhan Taskaya091951a2020-05-06 17:29:32 +03004469 Py_UNREACHABLE();
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00004470}
Victor Stinner74419f02020-07-03 11:35:37 +02004471PyObject* ast2obj_boolop(astmodulestate *state, boolop_ty o)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00004472{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004473 switch(o) {
4474 case And:
Victor Stinner74419f02020-07-03 11:35:37 +02004475 Py_INCREF(state->And_singleton);
4476 return state->And_singleton;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004477 case Or:
Victor Stinner74419f02020-07-03 11:35:37 +02004478 Py_INCREF(state->Or_singleton);
4479 return state->Or_singleton;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004480 }
Batuhan Taskaya091951a2020-05-06 17:29:32 +03004481 Py_UNREACHABLE();
Martin v. Löwisbd260da2006-02-26 19:42:26 +00004482}
Victor Stinner74419f02020-07-03 11:35:37 +02004483PyObject* ast2obj_operator(astmodulestate *state, operator_ty o)
Martin v. Löwisbd260da2006-02-26 19:42:26 +00004484{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004485 switch(o) {
4486 case Add:
Victor Stinner74419f02020-07-03 11:35:37 +02004487 Py_INCREF(state->Add_singleton);
4488 return state->Add_singleton;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004489 case Sub:
Victor Stinner74419f02020-07-03 11:35:37 +02004490 Py_INCREF(state->Sub_singleton);
4491 return state->Sub_singleton;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004492 case Mult:
Victor Stinner74419f02020-07-03 11:35:37 +02004493 Py_INCREF(state->Mult_singleton);
4494 return state->Mult_singleton;
Benjamin Petersond51374e2014-04-09 23:55:56 -04004495 case MatMult:
Victor Stinner74419f02020-07-03 11:35:37 +02004496 Py_INCREF(state->MatMult_singleton);
4497 return state->MatMult_singleton;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004498 case Div:
Victor Stinner74419f02020-07-03 11:35:37 +02004499 Py_INCREF(state->Div_singleton);
4500 return state->Div_singleton;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004501 case Mod:
Victor Stinner74419f02020-07-03 11:35:37 +02004502 Py_INCREF(state->Mod_singleton);
4503 return state->Mod_singleton;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004504 case Pow:
Victor Stinner74419f02020-07-03 11:35:37 +02004505 Py_INCREF(state->Pow_singleton);
4506 return state->Pow_singleton;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004507 case LShift:
Victor Stinner74419f02020-07-03 11:35:37 +02004508 Py_INCREF(state->LShift_singleton);
4509 return state->LShift_singleton;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004510 case RShift:
Victor Stinner74419f02020-07-03 11:35:37 +02004511 Py_INCREF(state->RShift_singleton);
4512 return state->RShift_singleton;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004513 case BitOr:
Victor Stinner74419f02020-07-03 11:35:37 +02004514 Py_INCREF(state->BitOr_singleton);
4515 return state->BitOr_singleton;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004516 case BitXor:
Victor Stinner74419f02020-07-03 11:35:37 +02004517 Py_INCREF(state->BitXor_singleton);
4518 return state->BitXor_singleton;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004519 case BitAnd:
Victor Stinner74419f02020-07-03 11:35:37 +02004520 Py_INCREF(state->BitAnd_singleton);
4521 return state->BitAnd_singleton;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004522 case FloorDiv:
Victor Stinner74419f02020-07-03 11:35:37 +02004523 Py_INCREF(state->FloorDiv_singleton);
4524 return state->FloorDiv_singleton;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004525 }
Batuhan Taskaya091951a2020-05-06 17:29:32 +03004526 Py_UNREACHABLE();
Martin v. Löwisbd260da2006-02-26 19:42:26 +00004527}
Victor Stinner74419f02020-07-03 11:35:37 +02004528PyObject* ast2obj_unaryop(astmodulestate *state, unaryop_ty o)
Martin v. Löwisbd260da2006-02-26 19:42:26 +00004529{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004530 switch(o) {
4531 case Invert:
Victor Stinner74419f02020-07-03 11:35:37 +02004532 Py_INCREF(state->Invert_singleton);
4533 return state->Invert_singleton;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004534 case Not:
Victor Stinner74419f02020-07-03 11:35:37 +02004535 Py_INCREF(state->Not_singleton);
4536 return state->Not_singleton;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004537 case UAdd:
Victor Stinner74419f02020-07-03 11:35:37 +02004538 Py_INCREF(state->UAdd_singleton);
4539 return state->UAdd_singleton;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004540 case USub:
Victor Stinner74419f02020-07-03 11:35:37 +02004541 Py_INCREF(state->USub_singleton);
4542 return state->USub_singleton;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004543 }
Batuhan Taskaya091951a2020-05-06 17:29:32 +03004544 Py_UNREACHABLE();
Martin v. Löwisbd260da2006-02-26 19:42:26 +00004545}
Victor Stinner74419f02020-07-03 11:35:37 +02004546PyObject* ast2obj_cmpop(astmodulestate *state, cmpop_ty o)
Martin v. Löwisbd260da2006-02-26 19:42:26 +00004547{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004548 switch(o) {
4549 case Eq:
Victor Stinner74419f02020-07-03 11:35:37 +02004550 Py_INCREF(state->Eq_singleton);
4551 return state->Eq_singleton;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004552 case NotEq:
Victor Stinner74419f02020-07-03 11:35:37 +02004553 Py_INCREF(state->NotEq_singleton);
4554 return state->NotEq_singleton;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004555 case Lt:
Victor Stinner74419f02020-07-03 11:35:37 +02004556 Py_INCREF(state->Lt_singleton);
4557 return state->Lt_singleton;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004558 case LtE:
Victor Stinner74419f02020-07-03 11:35:37 +02004559 Py_INCREF(state->LtE_singleton);
4560 return state->LtE_singleton;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004561 case Gt:
Victor Stinner74419f02020-07-03 11:35:37 +02004562 Py_INCREF(state->Gt_singleton);
4563 return state->Gt_singleton;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004564 case GtE:
Victor Stinner74419f02020-07-03 11:35:37 +02004565 Py_INCREF(state->GtE_singleton);
4566 return state->GtE_singleton;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004567 case Is:
Victor Stinner74419f02020-07-03 11:35:37 +02004568 Py_INCREF(state->Is_singleton);
4569 return state->Is_singleton;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004570 case IsNot:
Victor Stinner74419f02020-07-03 11:35:37 +02004571 Py_INCREF(state->IsNot_singleton);
4572 return state->IsNot_singleton;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004573 case In:
Victor Stinner74419f02020-07-03 11:35:37 +02004574 Py_INCREF(state->In_singleton);
4575 return state->In_singleton;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004576 case NotIn:
Victor Stinner74419f02020-07-03 11:35:37 +02004577 Py_INCREF(state->NotIn_singleton);
4578 return state->NotIn_singleton;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004579 }
Batuhan Taskaya091951a2020-05-06 17:29:32 +03004580 Py_UNREACHABLE();
Martin v. Löwisbd260da2006-02-26 19:42:26 +00004581}
4582PyObject*
Victor Stinner74419f02020-07-03 11:35:37 +02004583ast2obj_comprehension(astmodulestate *state, void* _o)
Martin v. Löwisbd260da2006-02-26 19:42:26 +00004584{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004585 comprehension_ty o = (comprehension_ty)_o;
4586 PyObject *result = NULL, *value = NULL;
Dino Viehlandac46eb42019-09-11 10:16:34 -07004587 PyTypeObject *tp;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004588 if (!o) {
Serhiy Storchaka228b12e2017-01-23 09:47:21 +02004589 Py_RETURN_NONE;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004590 }
Victor Stinner74419f02020-07-03 11:35:37 +02004591 tp = (PyTypeObject *)state->comprehension_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07004592 result = PyType_GenericNew(tp, NULL, NULL);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004593 if (!result) return NULL;
Victor Stinner74419f02020-07-03 11:35:37 +02004594 value = ast2obj_expr(state, o->target);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004595 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004596 if (PyObject_SetAttr(result, state->target, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004597 goto failed;
4598 Py_DECREF(value);
Victor Stinner74419f02020-07-03 11:35:37 +02004599 value = ast2obj_expr(state, o->iter);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004600 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004601 if (PyObject_SetAttr(result, state->iter, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004602 goto failed;
4603 Py_DECREF(value);
Pablo Galindoa5634c42020-09-16 19:42:00 +01004604 value = ast2obj_list(state, (asdl_seq*)o->ifs, ast2obj_expr);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004605 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004606 if (PyObject_SetAttr(result, state->ifs, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004607 goto failed;
4608 Py_DECREF(value);
Victor Stinner74419f02020-07-03 11:35:37 +02004609 value = ast2obj_int(state, o->is_async);
Yury Selivanov52c4e7c2016-09-09 10:36:01 -07004610 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004611 if (PyObject_SetAttr(result, state->is_async, value) == -1)
Yury Selivanov52c4e7c2016-09-09 10:36:01 -07004612 goto failed;
4613 Py_DECREF(value);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004614 return result;
Martin v. Löwisbd260da2006-02-26 19:42:26 +00004615failed:
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004616 Py_XDECREF(value);
4617 Py_XDECREF(result);
4618 return NULL;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00004619}
4620
Martin v. Löwisbd260da2006-02-26 19:42:26 +00004621PyObject*
Victor Stinner74419f02020-07-03 11:35:37 +02004622ast2obj_excepthandler(astmodulestate *state, void* _o)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00004623{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004624 excepthandler_ty o = (excepthandler_ty)_o;
4625 PyObject *result = NULL, *value = NULL;
Dino Viehlandac46eb42019-09-11 10:16:34 -07004626 PyTypeObject *tp;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004627 if (!o) {
Serhiy Storchaka228b12e2017-01-23 09:47:21 +02004628 Py_RETURN_NONE;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004629 }
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004630 switch (o->kind) {
4631 case ExceptHandler_kind:
Victor Stinner74419f02020-07-03 11:35:37 +02004632 tp = (PyTypeObject *)state->ExceptHandler_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07004633 result = PyType_GenericNew(tp, NULL, NULL);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004634 if (!result) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004635 value = ast2obj_expr(state, o->v.ExceptHandler.type);
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00004636 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004637 if (PyObject_SetAttr(result, state->type, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004638 goto failed;
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00004639 Py_DECREF(value);
Victor Stinner74419f02020-07-03 11:35:37 +02004640 value = ast2obj_identifier(state, o->v.ExceptHandler.name);
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00004641 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004642 if (PyObject_SetAttr(result, state->name, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004643 goto failed;
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00004644 Py_DECREF(value);
Pablo Galindoa5634c42020-09-16 19:42:00 +01004645 value = ast2obj_list(state, (asdl_seq*)o->v.ExceptHandler.body,
4646 ast2obj_stmt);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004647 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004648 if (PyObject_SetAttr(result, state->body, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004649 goto failed;
4650 Py_DECREF(value);
4651 break;
4652 }
Victor Stinner74419f02020-07-03 11:35:37 +02004653 value = ast2obj_int(state, o->lineno);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004654 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004655 if (PyObject_SetAttr(result, state->lineno, value) < 0)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004656 goto failed;
4657 Py_DECREF(value);
Victor Stinner74419f02020-07-03 11:35:37 +02004658 value = ast2obj_int(state, o->col_offset);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004659 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004660 if (PyObject_SetAttr(result, state->col_offset, value) < 0)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004661 goto failed;
4662 Py_DECREF(value);
Victor Stinner74419f02020-07-03 11:35:37 +02004663 value = ast2obj_int(state, o->end_lineno);
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00004664 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004665 if (PyObject_SetAttr(result, state->end_lineno, value) < 0)
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00004666 goto failed;
4667 Py_DECREF(value);
Victor Stinner74419f02020-07-03 11:35:37 +02004668 value = ast2obj_int(state, o->end_col_offset);
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00004669 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004670 if (PyObject_SetAttr(result, state->end_col_offset, value) < 0)
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00004671 goto failed;
4672 Py_DECREF(value);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004673 return result;
Martin v. Löwisbd260da2006-02-26 19:42:26 +00004674failed:
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004675 Py_XDECREF(value);
4676 Py_XDECREF(result);
4677 return NULL;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00004678}
4679
Martin v. Löwisbd260da2006-02-26 19:42:26 +00004680PyObject*
Victor Stinner74419f02020-07-03 11:35:37 +02004681ast2obj_arguments(astmodulestate *state, void* _o)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00004682{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004683 arguments_ty o = (arguments_ty)_o;
4684 PyObject *result = NULL, *value = NULL;
Dino Viehlandac46eb42019-09-11 10:16:34 -07004685 PyTypeObject *tp;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004686 if (!o) {
Serhiy Storchaka228b12e2017-01-23 09:47:21 +02004687 Py_RETURN_NONE;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004688 }
Victor Stinner74419f02020-07-03 11:35:37 +02004689 tp = (PyTypeObject *)state->arguments_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07004690 result = PyType_GenericNew(tp, NULL, NULL);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004691 if (!result) return NULL;
Pablo Galindoa5634c42020-09-16 19:42:00 +01004692 value = ast2obj_list(state, (asdl_seq*)o->posonlyargs, ast2obj_arg);
Pablo Galindo8c77b8c2019-04-29 13:36:57 +01004693 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004694 if (PyObject_SetAttr(result, state->posonlyargs, value) == -1)
Pablo Galindo8c77b8c2019-04-29 13:36:57 +01004695 goto failed;
4696 Py_DECREF(value);
Pablo Galindoa5634c42020-09-16 19:42:00 +01004697 value = ast2obj_list(state, (asdl_seq*)o->args, ast2obj_arg);
Pablo Galindocd6e83b2019-07-15 01:32:18 +02004698 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004699 if (PyObject_SetAttr(result, state->args, value) == -1)
Pablo Galindocd6e83b2019-07-15 01:32:18 +02004700 goto failed;
4701 Py_DECREF(value);
Victor Stinner74419f02020-07-03 11:35:37 +02004702 value = ast2obj_arg(state, o->vararg);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004703 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004704 if (PyObject_SetAttr(result, state->vararg, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004705 goto failed;
4706 Py_DECREF(value);
Pablo Galindoa5634c42020-09-16 19:42:00 +01004707 value = ast2obj_list(state, (asdl_seq*)o->kwonlyargs, ast2obj_arg);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004708 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004709 if (PyObject_SetAttr(result, state->kwonlyargs, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004710 goto failed;
4711 Py_DECREF(value);
Pablo Galindoa5634c42020-09-16 19:42:00 +01004712 value = ast2obj_list(state, (asdl_seq*)o->kw_defaults, ast2obj_expr);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004713 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004714 if (PyObject_SetAttr(result, state->kw_defaults, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004715 goto failed;
4716 Py_DECREF(value);
Victor Stinner74419f02020-07-03 11:35:37 +02004717 value = ast2obj_arg(state, o->kwarg);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004718 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004719 if (PyObject_SetAttr(result, state->kwarg, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004720 goto failed;
4721 Py_DECREF(value);
Pablo Galindoa5634c42020-09-16 19:42:00 +01004722 value = ast2obj_list(state, (asdl_seq*)o->defaults, ast2obj_expr);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004723 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004724 if (PyObject_SetAttr(result, state->defaults, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004725 goto failed;
4726 Py_DECREF(value);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004727 return result;
Martin v. Löwisbd260da2006-02-26 19:42:26 +00004728failed:
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004729 Py_XDECREF(value);
4730 Py_XDECREF(result);
4731 return NULL;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00004732}
4733
Martin v. Löwisbd260da2006-02-26 19:42:26 +00004734PyObject*
Victor Stinner74419f02020-07-03 11:35:37 +02004735ast2obj_arg(astmodulestate *state, void* _o)
Neal Norwitzc1505362006-12-28 06:47:50 +00004736{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004737 arg_ty o = (arg_ty)_o;
4738 PyObject *result = NULL, *value = NULL;
Dino Viehlandac46eb42019-09-11 10:16:34 -07004739 PyTypeObject *tp;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004740 if (!o) {
Serhiy Storchaka228b12e2017-01-23 09:47:21 +02004741 Py_RETURN_NONE;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004742 }
Victor Stinner74419f02020-07-03 11:35:37 +02004743 tp = (PyTypeObject *)state->arg_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07004744 result = PyType_GenericNew(tp, NULL, NULL);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004745 if (!result) return NULL;
Victor Stinner74419f02020-07-03 11:35:37 +02004746 value = ast2obj_identifier(state, o->arg);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004747 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004748 if (PyObject_SetAttr(result, state->arg, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004749 goto failed;
4750 Py_DECREF(value);
Victor Stinner74419f02020-07-03 11:35:37 +02004751 value = ast2obj_expr(state, o->annotation);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004752 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004753 if (PyObject_SetAttr(result, state->annotation, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004754 goto failed;
4755 Py_DECREF(value);
Victor Stinner74419f02020-07-03 11:35:37 +02004756 value = ast2obj_string(state, o->type_comment);
Guido van Rossumdcfcd142019-01-31 03:40:27 -08004757 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004758 if (PyObject_SetAttr(result, state->type_comment, value) == -1)
Guido van Rossumdcfcd142019-01-31 03:40:27 -08004759 goto failed;
4760 Py_DECREF(value);
Victor Stinner74419f02020-07-03 11:35:37 +02004761 value = ast2obj_int(state, o->lineno);
Victor Stinneree4b59c2013-07-27 00:01:35 +02004762 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004763 if (PyObject_SetAttr(result, state->lineno, value) < 0)
Victor Stinneree4b59c2013-07-27 00:01:35 +02004764 goto failed;
4765 Py_DECREF(value);
Victor Stinner74419f02020-07-03 11:35:37 +02004766 value = ast2obj_int(state, o->col_offset);
Victor Stinneree4b59c2013-07-27 00:01:35 +02004767 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004768 if (PyObject_SetAttr(result, state->col_offset, value) < 0)
Victor Stinneree4b59c2013-07-27 00:01:35 +02004769 goto failed;
4770 Py_DECREF(value);
Victor Stinner74419f02020-07-03 11:35:37 +02004771 value = ast2obj_int(state, o->end_lineno);
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00004772 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004773 if (PyObject_SetAttr(result, state->end_lineno, value) < 0)
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00004774 goto failed;
4775 Py_DECREF(value);
Victor Stinner74419f02020-07-03 11:35:37 +02004776 value = ast2obj_int(state, o->end_col_offset);
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00004777 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004778 if (PyObject_SetAttr(result, state->end_col_offset, value) < 0)
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00004779 goto failed;
4780 Py_DECREF(value);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004781 return result;
Neal Norwitzc1505362006-12-28 06:47:50 +00004782failed:
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004783 Py_XDECREF(value);
4784 Py_XDECREF(result);
4785 return NULL;
Neal Norwitzc1505362006-12-28 06:47:50 +00004786}
4787
4788PyObject*
Victor Stinner74419f02020-07-03 11:35:37 +02004789ast2obj_keyword(astmodulestate *state, void* _o)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00004790{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004791 keyword_ty o = (keyword_ty)_o;
4792 PyObject *result = NULL, *value = NULL;
Dino Viehlandac46eb42019-09-11 10:16:34 -07004793 PyTypeObject *tp;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004794 if (!o) {
Serhiy Storchaka228b12e2017-01-23 09:47:21 +02004795 Py_RETURN_NONE;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004796 }
Victor Stinner74419f02020-07-03 11:35:37 +02004797 tp = (PyTypeObject *)state->keyword_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07004798 result = PyType_GenericNew(tp, NULL, NULL);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004799 if (!result) return NULL;
Victor Stinner74419f02020-07-03 11:35:37 +02004800 value = ast2obj_identifier(state, o->arg);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004801 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004802 if (PyObject_SetAttr(result, state->arg, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004803 goto failed;
4804 Py_DECREF(value);
Victor Stinner74419f02020-07-03 11:35:37 +02004805 value = ast2obj_expr(state, o->value);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004806 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004807 if (PyObject_SetAttr(result, state->value, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004808 goto failed;
4809 Py_DECREF(value);
Victor Stinner74419f02020-07-03 11:35:37 +02004810 value = ast2obj_int(state, o->lineno);
Pablo Galindo168660b2020-04-02 00:47:39 +01004811 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004812 if (PyObject_SetAttr(result, state->lineno, value) < 0)
Pablo Galindo168660b2020-04-02 00:47:39 +01004813 goto failed;
4814 Py_DECREF(value);
Victor Stinner74419f02020-07-03 11:35:37 +02004815 value = ast2obj_int(state, o->col_offset);
Pablo Galindo168660b2020-04-02 00:47:39 +01004816 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004817 if (PyObject_SetAttr(result, state->col_offset, value) < 0)
Pablo Galindo168660b2020-04-02 00:47:39 +01004818 goto failed;
4819 Py_DECREF(value);
Victor Stinner74419f02020-07-03 11:35:37 +02004820 value = ast2obj_int(state, o->end_lineno);
Pablo Galindo168660b2020-04-02 00:47:39 +01004821 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004822 if (PyObject_SetAttr(result, state->end_lineno, value) < 0)
Pablo Galindo168660b2020-04-02 00:47:39 +01004823 goto failed;
4824 Py_DECREF(value);
Victor Stinner74419f02020-07-03 11:35:37 +02004825 value = ast2obj_int(state, o->end_col_offset);
Pablo Galindo168660b2020-04-02 00:47:39 +01004826 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004827 if (PyObject_SetAttr(result, state->end_col_offset, value) < 0)
Pablo Galindo168660b2020-04-02 00:47:39 +01004828 goto failed;
4829 Py_DECREF(value);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004830 return result;
Martin v. Löwisbd260da2006-02-26 19:42:26 +00004831failed:
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004832 Py_XDECREF(value);
4833 Py_XDECREF(result);
4834 return NULL;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00004835}
4836
Martin v. Löwisbd260da2006-02-26 19:42:26 +00004837PyObject*
Victor Stinner74419f02020-07-03 11:35:37 +02004838ast2obj_alias(astmodulestate *state, void* _o)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00004839{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004840 alias_ty o = (alias_ty)_o;
4841 PyObject *result = NULL, *value = NULL;
Dino Viehlandac46eb42019-09-11 10:16:34 -07004842 PyTypeObject *tp;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004843 if (!o) {
Serhiy Storchaka228b12e2017-01-23 09:47:21 +02004844 Py_RETURN_NONE;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004845 }
Victor Stinner74419f02020-07-03 11:35:37 +02004846 tp = (PyTypeObject *)state->alias_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07004847 result = PyType_GenericNew(tp, NULL, NULL);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004848 if (!result) return NULL;
Victor Stinner74419f02020-07-03 11:35:37 +02004849 value = ast2obj_identifier(state, o->name);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004850 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004851 if (PyObject_SetAttr(result, state->name, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004852 goto failed;
4853 Py_DECREF(value);
Victor Stinner74419f02020-07-03 11:35:37 +02004854 value = ast2obj_identifier(state, o->asname);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004855 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004856 if (PyObject_SetAttr(result, state->asname, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004857 goto failed;
4858 Py_DECREF(value);
4859 return result;
Martin v. Löwisbd260da2006-02-26 19:42:26 +00004860failed:
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004861 Py_XDECREF(value);
4862 Py_XDECREF(result);
4863 return NULL;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00004864}
4865
Benjamin Petersonbf1bbc12011-05-27 13:58:08 -05004866PyObject*
Victor Stinner74419f02020-07-03 11:35:37 +02004867ast2obj_withitem(astmodulestate *state, void* _o)
Benjamin Petersonbf1bbc12011-05-27 13:58:08 -05004868{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004869 withitem_ty o = (withitem_ty)_o;
4870 PyObject *result = NULL, *value = NULL;
Dino Viehlandac46eb42019-09-11 10:16:34 -07004871 PyTypeObject *tp;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004872 if (!o) {
Serhiy Storchaka228b12e2017-01-23 09:47:21 +02004873 Py_RETURN_NONE;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004874 }
Victor Stinner74419f02020-07-03 11:35:37 +02004875 tp = (PyTypeObject *)state->withitem_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07004876 result = PyType_GenericNew(tp, NULL, NULL);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004877 if (!result) return NULL;
Victor Stinner74419f02020-07-03 11:35:37 +02004878 value = ast2obj_expr(state, o->context_expr);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004879 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004880 if (PyObject_SetAttr(result, state->context_expr, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004881 goto failed;
4882 Py_DECREF(value);
Victor Stinner74419f02020-07-03 11:35:37 +02004883 value = ast2obj_expr(state, o->optional_vars);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004884 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004885 if (PyObject_SetAttr(result, state->optional_vars, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004886 goto failed;
4887 Py_DECREF(value);
4888 return result;
Benjamin Petersonbf1bbc12011-05-27 13:58:08 -05004889failed:
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004890 Py_XDECREF(value);
4891 Py_XDECREF(result);
4892 return NULL;
Benjamin Petersonbf1bbc12011-05-27 13:58:08 -05004893}
4894
Guido van Rossumdcfcd142019-01-31 03:40:27 -08004895PyObject*
Victor Stinner74419f02020-07-03 11:35:37 +02004896ast2obj_type_ignore(astmodulestate *state, void* _o)
Guido van Rossumdcfcd142019-01-31 03:40:27 -08004897{
4898 type_ignore_ty o = (type_ignore_ty)_o;
4899 PyObject *result = NULL, *value = NULL;
Dino Viehlandac46eb42019-09-11 10:16:34 -07004900 PyTypeObject *tp;
Guido van Rossumdcfcd142019-01-31 03:40:27 -08004901 if (!o) {
4902 Py_RETURN_NONE;
4903 }
Guido van Rossumdcfcd142019-01-31 03:40:27 -08004904 switch (o->kind) {
4905 case TypeIgnore_kind:
Victor Stinner74419f02020-07-03 11:35:37 +02004906 tp = (PyTypeObject *)state->TypeIgnore_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07004907 result = PyType_GenericNew(tp, NULL, NULL);
Guido van Rossumdcfcd142019-01-31 03:40:27 -08004908 if (!result) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004909 value = ast2obj_int(state, o->v.TypeIgnore.lineno);
Guido van Rossumdcfcd142019-01-31 03:40:27 -08004910 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004911 if (PyObject_SetAttr(result, state->lineno, value) == -1)
Guido van Rossumdcfcd142019-01-31 03:40:27 -08004912 goto failed;
4913 Py_DECREF(value);
Victor Stinner74419f02020-07-03 11:35:37 +02004914 value = ast2obj_string(state, o->v.TypeIgnore.tag);
Michael J. Sullivan933e1502019-05-22 07:54:20 -07004915 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004916 if (PyObject_SetAttr(result, state->tag, value) == -1)
Michael J. Sullivan933e1502019-05-22 07:54:20 -07004917 goto failed;
4918 Py_DECREF(value);
Guido van Rossumdcfcd142019-01-31 03:40:27 -08004919 break;
4920 }
4921 return result;
4922failed:
4923 Py_XDECREF(value);
4924 Py_XDECREF(result);
4925 return NULL;
4926}
4927
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00004928
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00004929int
Victor Stinner74419f02020-07-03 11:35:37 +02004930obj2ast_mod(astmodulestate *state, PyObject* obj, mod_ty* out, PyArena* arena)
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00004931{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004932 int isinstance;
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00004933
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004934 PyObject *tmp = NULL;
Dino Viehlandac46eb42019-09-11 10:16:34 -07004935 PyObject *tp;
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00004936
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004937 if (obj == Py_None) {
4938 *out = NULL;
4939 return 0;
4940 }
Victor Stinner74419f02020-07-03 11:35:37 +02004941 tp = state->Module_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07004942 isinstance = PyObject_IsInstance(obj, tp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004943 if (isinstance == -1) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00004944 return 1;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004945 }
4946 if (isinstance) {
Pablo Galindoa5634c42020-09-16 19:42:00 +01004947 asdl_stmt_seq* body;
4948 asdl_type_ignore_seq* type_ignores;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004949
Victor Stinner74419f02020-07-03 11:35:37 +02004950 if (_PyObject_LookupAttr(obj, state->body, &tmp) < 0) {
Serhiy Storchakaf320be72018-01-25 10:49:40 +02004951 return 1;
4952 }
4953 if (tmp == NULL) {
4954 PyErr_SetString(PyExc_TypeError, "required field \"body\" missing from Module");
4955 return 1;
4956 }
4957 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004958 int res;
4959 Py_ssize_t len;
4960 Py_ssize_t i;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004961 if (!PyList_Check(tmp)) {
Dino Viehlandac46eb42019-09-11 10:16:34 -07004962 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 +02004963 goto failed;
4964 }
4965 len = PyList_GET_SIZE(tmp);
Pablo Galindoa5634c42020-09-16 19:42:00 +01004966 body = _Py_asdl_stmt_seq_new(len, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004967 if (body == NULL) goto failed;
4968 for (i = 0; i < len; i++) {
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07004969 stmt_ty val;
Serhiy Storchaka43c97312019-09-10 13:02:30 +03004970 PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
4971 Py_INCREF(tmp2);
Victor Stinner74419f02020-07-03 11:35:37 +02004972 res = obj2ast_stmt(state, tmp2, &val, arena);
Serhiy Storchaka43c97312019-09-10 13:02:30 +03004973 Py_DECREF(tmp2);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004974 if (res != 0) goto failed;
Serhiy Storchakacf380602016-10-07 21:51:28 +03004975 if (len != PyList_GET_SIZE(tmp)) {
4976 PyErr_SetString(PyExc_RuntimeError, "Module field \"body\" changed size during iteration");
4977 goto failed;
4978 }
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07004979 asdl_seq_SET(body, i, val);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004980 }
Victor Stinner1acc1292013-07-27 00:03:47 +02004981 Py_CLEAR(tmp);
Serhiy Storchakaf320be72018-01-25 10:49:40 +02004982 }
Victor Stinner74419f02020-07-03 11:35:37 +02004983 if (_PyObject_LookupAttr(obj, state->type_ignores, &tmp) < 0) {
Guido van Rossumdcfcd142019-01-31 03:40:27 -08004984 return 1;
4985 }
4986 if (tmp == NULL) {
4987 PyErr_SetString(PyExc_TypeError, "required field \"type_ignores\" missing from Module");
4988 return 1;
4989 }
4990 else {
4991 int res;
4992 Py_ssize_t len;
4993 Py_ssize_t i;
4994 if (!PyList_Check(tmp)) {
Dino Viehlandac46eb42019-09-11 10:16:34 -07004995 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 -08004996 goto failed;
4997 }
4998 len = PyList_GET_SIZE(tmp);
Pablo Galindoa5634c42020-09-16 19:42:00 +01004999 type_ignores = _Py_asdl_type_ignore_seq_new(len, arena);
Guido van Rossumdcfcd142019-01-31 03:40:27 -08005000 if (type_ignores == NULL) goto failed;
5001 for (i = 0; i < len; i++) {
5002 type_ignore_ty val;
Serhiy Storchaka43c97312019-09-10 13:02:30 +03005003 PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
5004 Py_INCREF(tmp2);
Victor Stinner74419f02020-07-03 11:35:37 +02005005 res = obj2ast_type_ignore(state, tmp2, &val, arena);
Serhiy Storchaka43c97312019-09-10 13:02:30 +03005006 Py_DECREF(tmp2);
Guido van Rossumdcfcd142019-01-31 03:40:27 -08005007 if (res != 0) goto failed;
5008 if (len != PyList_GET_SIZE(tmp)) {
5009 PyErr_SetString(PyExc_RuntimeError, "Module field \"type_ignores\" changed size during iteration");
5010 goto failed;
5011 }
5012 asdl_seq_SET(type_ignores, i, val);
5013 }
5014 Py_CLEAR(tmp);
5015 }
5016 *out = Module(body, type_ignores, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005017 if (*out == NULL) goto failed;
5018 return 0;
5019 }
Victor Stinner74419f02020-07-03 11:35:37 +02005020 tp = state->Interactive_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07005021 isinstance = PyObject_IsInstance(obj, tp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005022 if (isinstance == -1) {
5023 return 1;
5024 }
5025 if (isinstance) {
Pablo Galindoa5634c42020-09-16 19:42:00 +01005026 asdl_stmt_seq* body;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005027
Victor Stinner74419f02020-07-03 11:35:37 +02005028 if (_PyObject_LookupAttr(obj, state->body, &tmp) < 0) {
Serhiy Storchakaf320be72018-01-25 10:49:40 +02005029 return 1;
5030 }
5031 if (tmp == NULL) {
5032 PyErr_SetString(PyExc_TypeError, "required field \"body\" missing from Interactive");
5033 return 1;
5034 }
5035 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005036 int res;
5037 Py_ssize_t len;
5038 Py_ssize_t i;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005039 if (!PyList_Check(tmp)) {
Dino Viehlandac46eb42019-09-11 10:16:34 -07005040 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 +02005041 goto failed;
5042 }
5043 len = PyList_GET_SIZE(tmp);
Pablo Galindoa5634c42020-09-16 19:42:00 +01005044 body = _Py_asdl_stmt_seq_new(len, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005045 if (body == NULL) goto failed;
5046 for (i = 0; i < len; i++) {
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07005047 stmt_ty val;
Serhiy Storchaka43c97312019-09-10 13:02:30 +03005048 PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
5049 Py_INCREF(tmp2);
Victor Stinner74419f02020-07-03 11:35:37 +02005050 res = obj2ast_stmt(state, tmp2, &val, arena);
Serhiy Storchaka43c97312019-09-10 13:02:30 +03005051 Py_DECREF(tmp2);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005052 if (res != 0) goto failed;
Serhiy Storchakacf380602016-10-07 21:51:28 +03005053 if (len != PyList_GET_SIZE(tmp)) {
5054 PyErr_SetString(PyExc_RuntimeError, "Interactive field \"body\" changed size during iteration");
5055 goto failed;
5056 }
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07005057 asdl_seq_SET(body, i, val);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005058 }
Victor Stinner1acc1292013-07-27 00:03:47 +02005059 Py_CLEAR(tmp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005060 }
5061 *out = Interactive(body, arena);
5062 if (*out == NULL) goto failed;
5063 return 0;
5064 }
Victor Stinner74419f02020-07-03 11:35:37 +02005065 tp = state->Expression_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07005066 isinstance = PyObject_IsInstance(obj, tp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005067 if (isinstance == -1) {
5068 return 1;
5069 }
5070 if (isinstance) {
5071 expr_ty body;
5072
Victor Stinner74419f02020-07-03 11:35:37 +02005073 if (_PyObject_LookupAttr(obj, state->body, &tmp) < 0) {
Serhiy Storchakaf320be72018-01-25 10:49:40 +02005074 return 1;
5075 }
5076 if (tmp == NULL) {
5077 PyErr_SetString(PyExc_TypeError, "required field \"body\" missing from Expression");
5078 return 1;
5079 }
5080 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005081 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02005082 res = obj2ast_expr(state, tmp, &body, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005083 if (res != 0) goto failed;
Victor Stinner1acc1292013-07-27 00:03:47 +02005084 Py_CLEAR(tmp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005085 }
5086 *out = Expression(body, arena);
5087 if (*out == NULL) goto failed;
5088 return 0;
5089 }
Victor Stinner74419f02020-07-03 11:35:37 +02005090 tp = state->FunctionType_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07005091 isinstance = PyObject_IsInstance(obj, tp);
Guido van Rossumdcfcd142019-01-31 03:40:27 -08005092 if (isinstance == -1) {
5093 return 1;
5094 }
5095 if (isinstance) {
Pablo Galindoa5634c42020-09-16 19:42:00 +01005096 asdl_expr_seq* argtypes;
Guido van Rossumdcfcd142019-01-31 03:40:27 -08005097 expr_ty returns;
5098
Victor Stinner74419f02020-07-03 11:35:37 +02005099 if (_PyObject_LookupAttr(obj, state->argtypes, &tmp) < 0) {
Guido van Rossumdcfcd142019-01-31 03:40:27 -08005100 return 1;
5101 }
5102 if (tmp == NULL) {
5103 PyErr_SetString(PyExc_TypeError, "required field \"argtypes\" missing from FunctionType");
5104 return 1;
5105 }
5106 else {
5107 int res;
5108 Py_ssize_t len;
5109 Py_ssize_t i;
5110 if (!PyList_Check(tmp)) {
Dino Viehlandac46eb42019-09-11 10:16:34 -07005111 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 -08005112 goto failed;
5113 }
5114 len = PyList_GET_SIZE(tmp);
Pablo Galindoa5634c42020-09-16 19:42:00 +01005115 argtypes = _Py_asdl_expr_seq_new(len, arena);
Guido van Rossumdcfcd142019-01-31 03:40:27 -08005116 if (argtypes == NULL) goto failed;
5117 for (i = 0; i < len; i++) {
5118 expr_ty val;
Serhiy Storchaka43c97312019-09-10 13:02:30 +03005119 PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
5120 Py_INCREF(tmp2);
Victor Stinner74419f02020-07-03 11:35:37 +02005121 res = obj2ast_expr(state, tmp2, &val, arena);
Serhiy Storchaka43c97312019-09-10 13:02:30 +03005122 Py_DECREF(tmp2);
Guido van Rossumdcfcd142019-01-31 03:40:27 -08005123 if (res != 0) goto failed;
5124 if (len != PyList_GET_SIZE(tmp)) {
5125 PyErr_SetString(PyExc_RuntimeError, "FunctionType field \"argtypes\" changed size during iteration");
5126 goto failed;
5127 }
5128 asdl_seq_SET(argtypes, i, val);
5129 }
5130 Py_CLEAR(tmp);
5131 }
Victor Stinner74419f02020-07-03 11:35:37 +02005132 if (_PyObject_LookupAttr(obj, state->returns, &tmp) < 0) {
Guido van Rossumdcfcd142019-01-31 03:40:27 -08005133 return 1;
5134 }
5135 if (tmp == NULL) {
5136 PyErr_SetString(PyExc_TypeError, "required field \"returns\" missing from FunctionType");
5137 return 1;
5138 }
5139 else {
5140 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02005141 res = obj2ast_expr(state, tmp, &returns, arena);
Guido van Rossumdcfcd142019-01-31 03:40:27 -08005142 if (res != 0) goto failed;
5143 Py_CLEAR(tmp);
5144 }
5145 *out = FunctionType(argtypes, returns, arena);
5146 if (*out == NULL) goto failed;
5147 return 0;
5148 }
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005149
5150 PyErr_Format(PyExc_TypeError, "expected some sort of mod, but got %R", obj);
5151 failed:
5152 Py_XDECREF(tmp);
5153 return 1;
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00005154}
5155
5156int
Victor Stinner74419f02020-07-03 11:35:37 +02005157obj2ast_stmt(astmodulestate *state, PyObject* obj, stmt_ty* out, PyArena* arena)
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00005158{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005159 int isinstance;
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00005160
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005161 PyObject *tmp = NULL;
Dino Viehlandac46eb42019-09-11 10:16:34 -07005162 PyObject *tp;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005163 int lineno;
5164 int col_offset;
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00005165 int end_lineno;
5166 int end_col_offset;
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00005167
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005168 if (obj == Py_None) {
5169 *out = NULL;
5170 return 0;
5171 }
Victor Stinner74419f02020-07-03 11:35:37 +02005172 if (_PyObject_LookupAttr(obj, state->lineno, &tmp) < 0) {
Serhiy Storchakaf320be72018-01-25 10:49:40 +02005173 return 1;
5174 }
5175 if (tmp == NULL) {
5176 PyErr_SetString(PyExc_TypeError, "required field \"lineno\" missing from stmt");
5177 return 1;
5178 }
5179 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005180 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02005181 res = obj2ast_int(state, tmp, &lineno, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005182 if (res != 0) goto failed;
Victor Stinner1acc1292013-07-27 00:03:47 +02005183 Py_CLEAR(tmp);
Serhiy Storchakaf320be72018-01-25 10:49:40 +02005184 }
Victor Stinner74419f02020-07-03 11:35:37 +02005185 if (_PyObject_LookupAttr(obj, state->col_offset, &tmp) < 0) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00005186 return 1;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005187 }
Serhiy Storchakaf320be72018-01-25 10:49:40 +02005188 if (tmp == NULL) {
5189 PyErr_SetString(PyExc_TypeError, "required field \"col_offset\" missing from stmt");
5190 return 1;
5191 }
5192 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005193 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02005194 res = obj2ast_int(state, tmp, &col_offset, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005195 if (res != 0) goto failed;
Victor Stinner1acc1292013-07-27 00:03:47 +02005196 Py_CLEAR(tmp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005197 }
Victor Stinner74419f02020-07-03 11:35:37 +02005198 if (_PyObject_LookupAttr(obj, state->end_lineno, &tmp) < 0) {
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00005199 return 1;
5200 }
5201 if (tmp == NULL || tmp == Py_None) {
5202 Py_CLEAR(tmp);
5203 end_lineno = 0;
5204 }
5205 else {
5206 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02005207 res = obj2ast_int(state, tmp, &end_lineno, arena);
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00005208 if (res != 0) goto failed;
5209 Py_CLEAR(tmp);
5210 }
Victor Stinner74419f02020-07-03 11:35:37 +02005211 if (_PyObject_LookupAttr(obj, state->end_col_offset, &tmp) < 0) {
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00005212 return 1;
5213 }
5214 if (tmp == NULL || tmp == Py_None) {
5215 Py_CLEAR(tmp);
5216 end_col_offset = 0;
5217 }
5218 else {
5219 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02005220 res = obj2ast_int(state, tmp, &end_col_offset, arena);
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00005221 if (res != 0) goto failed;
5222 Py_CLEAR(tmp);
5223 }
Victor Stinner74419f02020-07-03 11:35:37 +02005224 tp = state->FunctionDef_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07005225 isinstance = PyObject_IsInstance(obj, tp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005226 if (isinstance == -1) {
5227 return 1;
5228 }
5229 if (isinstance) {
5230 identifier name;
5231 arguments_ty args;
Pablo Galindoa5634c42020-09-16 19:42:00 +01005232 asdl_stmt_seq* body;
5233 asdl_expr_seq* decorator_list;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005234 expr_ty returns;
Guido van Rossumdcfcd142019-01-31 03:40:27 -08005235 string type_comment;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005236
Victor Stinner74419f02020-07-03 11:35:37 +02005237 if (_PyObject_LookupAttr(obj, state->name, &tmp) < 0) {
Serhiy Storchakaf320be72018-01-25 10:49:40 +02005238 return 1;
5239 }
5240 if (tmp == NULL) {
5241 PyErr_SetString(PyExc_TypeError, "required field \"name\" missing from FunctionDef");
5242 return 1;
5243 }
5244 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005245 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02005246 res = obj2ast_identifier(state, tmp, &name, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005247 if (res != 0) goto failed;
Victor Stinner1acc1292013-07-27 00:03:47 +02005248 Py_CLEAR(tmp);
Serhiy Storchakaf320be72018-01-25 10:49:40 +02005249 }
Victor Stinner74419f02020-07-03 11:35:37 +02005250 if (_PyObject_LookupAttr(obj, state->args, &tmp) < 0) {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005251 return 1;
5252 }
Serhiy Storchakaf320be72018-01-25 10:49:40 +02005253 if (tmp == NULL) {
5254 PyErr_SetString(PyExc_TypeError, "required field \"args\" missing from FunctionDef");
5255 return 1;
5256 }
5257 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005258 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02005259 res = obj2ast_arguments(state, tmp, &args, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005260 if (res != 0) goto failed;
Victor Stinner1acc1292013-07-27 00:03:47 +02005261 Py_CLEAR(tmp);
Serhiy Storchakaf320be72018-01-25 10:49:40 +02005262 }
Victor Stinner74419f02020-07-03 11:35:37 +02005263 if (_PyObject_LookupAttr(obj, state->body, &tmp) < 0) {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005264 return 1;
5265 }
Serhiy Storchakaf320be72018-01-25 10:49:40 +02005266 if (tmp == NULL) {
5267 PyErr_SetString(PyExc_TypeError, "required field \"body\" missing from FunctionDef");
5268 return 1;
5269 }
5270 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005271 int res;
5272 Py_ssize_t len;
5273 Py_ssize_t i;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005274 if (!PyList_Check(tmp)) {
Dino Viehlandac46eb42019-09-11 10:16:34 -07005275 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 +02005276 goto failed;
5277 }
5278 len = PyList_GET_SIZE(tmp);
Pablo Galindoa5634c42020-09-16 19:42:00 +01005279 body = _Py_asdl_stmt_seq_new(len, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005280 if (body == NULL) goto failed;
5281 for (i = 0; i < len; i++) {
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07005282 stmt_ty val;
Serhiy Storchaka43c97312019-09-10 13:02:30 +03005283 PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
5284 Py_INCREF(tmp2);
Victor Stinner74419f02020-07-03 11:35:37 +02005285 res = obj2ast_stmt(state, tmp2, &val, arena);
Serhiy Storchaka43c97312019-09-10 13:02:30 +03005286 Py_DECREF(tmp2);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005287 if (res != 0) goto failed;
Serhiy Storchakacf380602016-10-07 21:51:28 +03005288 if (len != PyList_GET_SIZE(tmp)) {
5289 PyErr_SetString(PyExc_RuntimeError, "FunctionDef field \"body\" changed size during iteration");
5290 goto failed;
5291 }
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07005292 asdl_seq_SET(body, i, val);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005293 }
Victor Stinner1acc1292013-07-27 00:03:47 +02005294 Py_CLEAR(tmp);
Serhiy Storchakaf320be72018-01-25 10:49:40 +02005295 }
Victor Stinner74419f02020-07-03 11:35:37 +02005296 if (_PyObject_LookupAttr(obj, state->decorator_list, &tmp) < 0) {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005297 return 1;
5298 }
Serhiy Storchakaf320be72018-01-25 10:49:40 +02005299 if (tmp == NULL) {
5300 PyErr_SetString(PyExc_TypeError, "required field \"decorator_list\" missing from FunctionDef");
5301 return 1;
5302 }
5303 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005304 int res;
5305 Py_ssize_t len;
5306 Py_ssize_t i;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005307 if (!PyList_Check(tmp)) {
Dino Viehlandac46eb42019-09-11 10:16:34 -07005308 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 +02005309 goto failed;
5310 }
5311 len = PyList_GET_SIZE(tmp);
Pablo Galindoa5634c42020-09-16 19:42:00 +01005312 decorator_list = _Py_asdl_expr_seq_new(len, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005313 if (decorator_list == NULL) goto failed;
5314 for (i = 0; i < len; i++) {
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07005315 expr_ty val;
Serhiy Storchaka43c97312019-09-10 13:02:30 +03005316 PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
5317 Py_INCREF(tmp2);
Victor Stinner74419f02020-07-03 11:35:37 +02005318 res = obj2ast_expr(state, tmp2, &val, arena);
Serhiy Storchaka43c97312019-09-10 13:02:30 +03005319 Py_DECREF(tmp2);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005320 if (res != 0) goto failed;
Serhiy Storchakacf380602016-10-07 21:51:28 +03005321 if (len != PyList_GET_SIZE(tmp)) {
5322 PyErr_SetString(PyExc_RuntimeError, "FunctionDef field \"decorator_list\" changed size during iteration");
5323 goto failed;
5324 }
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07005325 asdl_seq_SET(decorator_list, i, val);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005326 }
Victor Stinner1acc1292013-07-27 00:03:47 +02005327 Py_CLEAR(tmp);
Serhiy Storchakaf320be72018-01-25 10:49:40 +02005328 }
Victor Stinner74419f02020-07-03 11:35:37 +02005329 if (_PyObject_LookupAttr(obj, state->returns, &tmp) < 0) {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005330 return 1;
5331 }
Serhiy Storchakaf320be72018-01-25 10:49:40 +02005332 if (tmp == NULL || tmp == Py_None) {
5333 Py_CLEAR(tmp);
5334 returns = NULL;
5335 }
5336 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005337 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02005338 res = obj2ast_expr(state, tmp, &returns, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005339 if (res != 0) goto failed;
Victor Stinner1acc1292013-07-27 00:03:47 +02005340 Py_CLEAR(tmp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005341 }
Victor Stinner74419f02020-07-03 11:35:37 +02005342 if (_PyObject_LookupAttr(obj, state->type_comment, &tmp) < 0) {
Guido van Rossumdcfcd142019-01-31 03:40:27 -08005343 return 1;
5344 }
5345 if (tmp == NULL || tmp == Py_None) {
5346 Py_CLEAR(tmp);
5347 type_comment = NULL;
5348 }
5349 else {
5350 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02005351 res = obj2ast_string(state, tmp, &type_comment, arena);
Guido van Rossumdcfcd142019-01-31 03:40:27 -08005352 if (res != 0) goto failed;
5353 Py_CLEAR(tmp);
5354 }
5355 *out = FunctionDef(name, args, body, decorator_list, returns,
5356 type_comment, lineno, col_offset, end_lineno,
5357 end_col_offset, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005358 if (*out == NULL) goto failed;
5359 return 0;
5360 }
Victor Stinner74419f02020-07-03 11:35:37 +02005361 tp = state->AsyncFunctionDef_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07005362 isinstance = PyObject_IsInstance(obj, tp);
Yury Selivanov75445082015-05-11 22:57:16 -04005363 if (isinstance == -1) {
5364 return 1;
5365 }
5366 if (isinstance) {
5367 identifier name;
5368 arguments_ty args;
Pablo Galindoa5634c42020-09-16 19:42:00 +01005369 asdl_stmt_seq* body;
5370 asdl_expr_seq* decorator_list;
Yury Selivanov75445082015-05-11 22:57:16 -04005371 expr_ty returns;
Guido van Rossumdcfcd142019-01-31 03:40:27 -08005372 string type_comment;
Yury Selivanov75445082015-05-11 22:57:16 -04005373
Victor Stinner74419f02020-07-03 11:35:37 +02005374 if (_PyObject_LookupAttr(obj, state->name, &tmp) < 0) {
Serhiy Storchakaf320be72018-01-25 10:49:40 +02005375 return 1;
5376 }
5377 if (tmp == NULL) {
5378 PyErr_SetString(PyExc_TypeError, "required field \"name\" missing from AsyncFunctionDef");
5379 return 1;
5380 }
5381 else {
Yury Selivanov75445082015-05-11 22:57:16 -04005382 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02005383 res = obj2ast_identifier(state, tmp, &name, arena);
Yury Selivanov75445082015-05-11 22:57:16 -04005384 if (res != 0) goto failed;
5385 Py_CLEAR(tmp);
Serhiy Storchakaf320be72018-01-25 10:49:40 +02005386 }
Victor Stinner74419f02020-07-03 11:35:37 +02005387 if (_PyObject_LookupAttr(obj, state->args, &tmp) < 0) {
Yury Selivanov75445082015-05-11 22:57:16 -04005388 return 1;
5389 }
Serhiy Storchakaf320be72018-01-25 10:49:40 +02005390 if (tmp == NULL) {
5391 PyErr_SetString(PyExc_TypeError, "required field \"args\" missing from AsyncFunctionDef");
5392 return 1;
5393 }
5394 else {
Yury Selivanov75445082015-05-11 22:57:16 -04005395 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02005396 res = obj2ast_arguments(state, tmp, &args, arena);
Yury Selivanov75445082015-05-11 22:57:16 -04005397 if (res != 0) goto failed;
5398 Py_CLEAR(tmp);
Serhiy Storchakaf320be72018-01-25 10:49:40 +02005399 }
Victor Stinner74419f02020-07-03 11:35:37 +02005400 if (_PyObject_LookupAttr(obj, state->body, &tmp) < 0) {
Yury Selivanov75445082015-05-11 22:57:16 -04005401 return 1;
5402 }
Serhiy Storchakaf320be72018-01-25 10:49:40 +02005403 if (tmp == NULL) {
5404 PyErr_SetString(PyExc_TypeError, "required field \"body\" missing from AsyncFunctionDef");
5405 return 1;
5406 }
5407 else {
Yury Selivanov75445082015-05-11 22:57:16 -04005408 int res;
5409 Py_ssize_t len;
5410 Py_ssize_t i;
Yury Selivanov75445082015-05-11 22:57:16 -04005411 if (!PyList_Check(tmp)) {
Dino Viehlandac46eb42019-09-11 10:16:34 -07005412 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 -04005413 goto failed;
5414 }
5415 len = PyList_GET_SIZE(tmp);
Pablo Galindoa5634c42020-09-16 19:42:00 +01005416 body = _Py_asdl_stmt_seq_new(len, arena);
Yury Selivanov75445082015-05-11 22:57:16 -04005417 if (body == NULL) goto failed;
5418 for (i = 0; i < len; i++) {
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07005419 stmt_ty val;
Serhiy Storchaka43c97312019-09-10 13:02:30 +03005420 PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
5421 Py_INCREF(tmp2);
Victor Stinner74419f02020-07-03 11:35:37 +02005422 res = obj2ast_stmt(state, tmp2, &val, arena);
Serhiy Storchaka43c97312019-09-10 13:02:30 +03005423 Py_DECREF(tmp2);
Yury Selivanov75445082015-05-11 22:57:16 -04005424 if (res != 0) goto failed;
Serhiy Storchakacf380602016-10-07 21:51:28 +03005425 if (len != PyList_GET_SIZE(tmp)) {
5426 PyErr_SetString(PyExc_RuntimeError, "AsyncFunctionDef field \"body\" changed size during iteration");
5427 goto failed;
5428 }
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07005429 asdl_seq_SET(body, i, val);
Yury Selivanov75445082015-05-11 22:57:16 -04005430 }
5431 Py_CLEAR(tmp);
Serhiy Storchakaf320be72018-01-25 10:49:40 +02005432 }
Victor Stinner74419f02020-07-03 11:35:37 +02005433 if (_PyObject_LookupAttr(obj, state->decorator_list, &tmp) < 0) {
Yury Selivanov75445082015-05-11 22:57:16 -04005434 return 1;
5435 }
Serhiy Storchakaf320be72018-01-25 10:49:40 +02005436 if (tmp == NULL) {
5437 PyErr_SetString(PyExc_TypeError, "required field \"decorator_list\" missing from AsyncFunctionDef");
5438 return 1;
5439 }
5440 else {
Yury Selivanov75445082015-05-11 22:57:16 -04005441 int res;
5442 Py_ssize_t len;
5443 Py_ssize_t i;
Yury Selivanov75445082015-05-11 22:57:16 -04005444 if (!PyList_Check(tmp)) {
Dino Viehlandac46eb42019-09-11 10:16:34 -07005445 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 -04005446 goto failed;
5447 }
5448 len = PyList_GET_SIZE(tmp);
Pablo Galindoa5634c42020-09-16 19:42:00 +01005449 decorator_list = _Py_asdl_expr_seq_new(len, arena);
Yury Selivanov75445082015-05-11 22:57:16 -04005450 if (decorator_list == NULL) goto failed;
5451 for (i = 0; i < len; i++) {
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07005452 expr_ty val;
Serhiy Storchaka43c97312019-09-10 13:02:30 +03005453 PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
5454 Py_INCREF(tmp2);
Victor Stinner74419f02020-07-03 11:35:37 +02005455 res = obj2ast_expr(state, tmp2, &val, arena);
Serhiy Storchaka43c97312019-09-10 13:02:30 +03005456 Py_DECREF(tmp2);
Yury Selivanov75445082015-05-11 22:57:16 -04005457 if (res != 0) goto failed;
Serhiy Storchakacf380602016-10-07 21:51:28 +03005458 if (len != PyList_GET_SIZE(tmp)) {
5459 PyErr_SetString(PyExc_RuntimeError, "AsyncFunctionDef field \"decorator_list\" changed size during iteration");
5460 goto failed;
5461 }
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07005462 asdl_seq_SET(decorator_list, i, val);
Yury Selivanov75445082015-05-11 22:57:16 -04005463 }
5464 Py_CLEAR(tmp);
Serhiy Storchakaf320be72018-01-25 10:49:40 +02005465 }
Victor Stinner74419f02020-07-03 11:35:37 +02005466 if (_PyObject_LookupAttr(obj, state->returns, &tmp) < 0) {
Yury Selivanov75445082015-05-11 22:57:16 -04005467 return 1;
5468 }
Serhiy Storchakaf320be72018-01-25 10:49:40 +02005469 if (tmp == NULL || tmp == Py_None) {
5470 Py_CLEAR(tmp);
5471 returns = NULL;
5472 }
5473 else {
Yury Selivanov75445082015-05-11 22:57:16 -04005474 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02005475 res = obj2ast_expr(state, tmp, &returns, arena);
Yury Selivanov75445082015-05-11 22:57:16 -04005476 if (res != 0) goto failed;
5477 Py_CLEAR(tmp);
Yury Selivanov75445082015-05-11 22:57:16 -04005478 }
Victor Stinner74419f02020-07-03 11:35:37 +02005479 if (_PyObject_LookupAttr(obj, state->type_comment, &tmp) < 0) {
Guido van Rossumdcfcd142019-01-31 03:40:27 -08005480 return 1;
5481 }
5482 if (tmp == NULL || tmp == Py_None) {
5483 Py_CLEAR(tmp);
5484 type_comment = NULL;
5485 }
5486 else {
5487 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02005488 res = obj2ast_string(state, tmp, &type_comment, arena);
Guido van Rossumdcfcd142019-01-31 03:40:27 -08005489 if (res != 0) goto failed;
5490 Py_CLEAR(tmp);
5491 }
Yury Selivanov75445082015-05-11 22:57:16 -04005492 *out = AsyncFunctionDef(name, args, body, decorator_list, returns,
Guido van Rossumdcfcd142019-01-31 03:40:27 -08005493 type_comment, lineno, col_offset, end_lineno,
5494 end_col_offset, arena);
Yury Selivanov75445082015-05-11 22:57:16 -04005495 if (*out == NULL) goto failed;
5496 return 0;
5497 }
Victor Stinner74419f02020-07-03 11:35:37 +02005498 tp = state->ClassDef_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07005499 isinstance = PyObject_IsInstance(obj, tp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005500 if (isinstance == -1) {
5501 return 1;
5502 }
5503 if (isinstance) {
5504 identifier name;
Pablo Galindoa5634c42020-09-16 19:42:00 +01005505 asdl_expr_seq* bases;
5506 asdl_keyword_seq* keywords;
5507 asdl_stmt_seq* body;
5508 asdl_expr_seq* decorator_list;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005509
Victor Stinner74419f02020-07-03 11:35:37 +02005510 if (_PyObject_LookupAttr(obj, state->name, &tmp) < 0) {
Serhiy Storchakaf320be72018-01-25 10:49:40 +02005511 return 1;
5512 }
5513 if (tmp == NULL) {
5514 PyErr_SetString(PyExc_TypeError, "required field \"name\" missing from ClassDef");
5515 return 1;
5516 }
5517 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005518 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02005519 res = obj2ast_identifier(state, tmp, &name, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005520 if (res != 0) goto failed;
Victor Stinner1acc1292013-07-27 00:03:47 +02005521 Py_CLEAR(tmp);
Serhiy Storchakaf320be72018-01-25 10:49:40 +02005522 }
Victor Stinner74419f02020-07-03 11:35:37 +02005523 if (_PyObject_LookupAttr(obj, state->bases, &tmp) < 0) {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005524 return 1;
5525 }
Serhiy Storchakaf320be72018-01-25 10:49:40 +02005526 if (tmp == NULL) {
5527 PyErr_SetString(PyExc_TypeError, "required field \"bases\" missing from ClassDef");
5528 return 1;
5529 }
5530 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005531 int res;
5532 Py_ssize_t len;
5533 Py_ssize_t i;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005534 if (!PyList_Check(tmp)) {
Dino Viehlandac46eb42019-09-11 10:16:34 -07005535 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 +02005536 goto failed;
5537 }
5538 len = PyList_GET_SIZE(tmp);
Pablo Galindoa5634c42020-09-16 19:42:00 +01005539 bases = _Py_asdl_expr_seq_new(len, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005540 if (bases == NULL) goto failed;
5541 for (i = 0; i < len; i++) {
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07005542 expr_ty val;
Serhiy Storchaka43c97312019-09-10 13:02:30 +03005543 PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
5544 Py_INCREF(tmp2);
Victor Stinner74419f02020-07-03 11:35:37 +02005545 res = obj2ast_expr(state, tmp2, &val, arena);
Serhiy Storchaka43c97312019-09-10 13:02:30 +03005546 Py_DECREF(tmp2);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005547 if (res != 0) goto failed;
Serhiy Storchakacf380602016-10-07 21:51:28 +03005548 if (len != PyList_GET_SIZE(tmp)) {
5549 PyErr_SetString(PyExc_RuntimeError, "ClassDef field \"bases\" changed size during iteration");
5550 goto failed;
5551 }
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07005552 asdl_seq_SET(bases, i, val);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005553 }
Victor Stinner1acc1292013-07-27 00:03:47 +02005554 Py_CLEAR(tmp);
Serhiy Storchakaf320be72018-01-25 10:49:40 +02005555 }
Victor Stinner74419f02020-07-03 11:35:37 +02005556 if (_PyObject_LookupAttr(obj, state->keywords, &tmp) < 0) {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005557 return 1;
5558 }
Serhiy Storchakaf320be72018-01-25 10:49:40 +02005559 if (tmp == NULL) {
5560 PyErr_SetString(PyExc_TypeError, "required field \"keywords\" missing from ClassDef");
5561 return 1;
5562 }
5563 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005564 int res;
5565 Py_ssize_t len;
5566 Py_ssize_t i;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005567 if (!PyList_Check(tmp)) {
Dino Viehlandac46eb42019-09-11 10:16:34 -07005568 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 +02005569 goto failed;
5570 }
5571 len = PyList_GET_SIZE(tmp);
Pablo Galindoa5634c42020-09-16 19:42:00 +01005572 keywords = _Py_asdl_keyword_seq_new(len, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005573 if (keywords == NULL) goto failed;
5574 for (i = 0; i < len; i++) {
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07005575 keyword_ty val;
Serhiy Storchaka43c97312019-09-10 13:02:30 +03005576 PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
5577 Py_INCREF(tmp2);
Victor Stinner74419f02020-07-03 11:35:37 +02005578 res = obj2ast_keyword(state, tmp2, &val, arena);
Serhiy Storchaka43c97312019-09-10 13:02:30 +03005579 Py_DECREF(tmp2);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005580 if (res != 0) goto failed;
Serhiy Storchakacf380602016-10-07 21:51:28 +03005581 if (len != PyList_GET_SIZE(tmp)) {
5582 PyErr_SetString(PyExc_RuntimeError, "ClassDef field \"keywords\" changed size during iteration");
5583 goto failed;
5584 }
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07005585 asdl_seq_SET(keywords, i, val);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005586 }
Victor Stinner1acc1292013-07-27 00:03:47 +02005587 Py_CLEAR(tmp);
Serhiy Storchakaf320be72018-01-25 10:49:40 +02005588 }
Victor Stinner74419f02020-07-03 11:35:37 +02005589 if (_PyObject_LookupAttr(obj, state->body, &tmp) < 0) {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005590 return 1;
5591 }
Serhiy Storchakaf320be72018-01-25 10:49:40 +02005592 if (tmp == NULL) {
5593 PyErr_SetString(PyExc_TypeError, "required field \"body\" missing from ClassDef");
5594 return 1;
5595 }
5596 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005597 int res;
5598 Py_ssize_t len;
5599 Py_ssize_t i;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005600 if (!PyList_Check(tmp)) {
Dino Viehlandac46eb42019-09-11 10:16:34 -07005601 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 +02005602 goto failed;
5603 }
5604 len = PyList_GET_SIZE(tmp);
Pablo Galindoa5634c42020-09-16 19:42:00 +01005605 body = _Py_asdl_stmt_seq_new(len, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005606 if (body == NULL) goto failed;
5607 for (i = 0; i < len; i++) {
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07005608 stmt_ty val;
Serhiy Storchaka43c97312019-09-10 13:02:30 +03005609 PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
5610 Py_INCREF(tmp2);
Victor Stinner74419f02020-07-03 11:35:37 +02005611 res = obj2ast_stmt(state, tmp2, &val, arena);
Serhiy Storchaka43c97312019-09-10 13:02:30 +03005612 Py_DECREF(tmp2);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005613 if (res != 0) goto failed;
Serhiy Storchakacf380602016-10-07 21:51:28 +03005614 if (len != PyList_GET_SIZE(tmp)) {
5615 PyErr_SetString(PyExc_RuntimeError, "ClassDef field \"body\" changed size during iteration");
5616 goto failed;
5617 }
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07005618 asdl_seq_SET(body, i, val);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005619 }
Victor Stinner1acc1292013-07-27 00:03:47 +02005620 Py_CLEAR(tmp);
Serhiy Storchakaf320be72018-01-25 10:49:40 +02005621 }
Victor Stinner74419f02020-07-03 11:35:37 +02005622 if (_PyObject_LookupAttr(obj, state->decorator_list, &tmp) < 0) {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005623 return 1;
5624 }
Serhiy Storchakaf320be72018-01-25 10:49:40 +02005625 if (tmp == NULL) {
5626 PyErr_SetString(PyExc_TypeError, "required field \"decorator_list\" missing from ClassDef");
5627 return 1;
5628 }
5629 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005630 int res;
5631 Py_ssize_t len;
5632 Py_ssize_t i;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005633 if (!PyList_Check(tmp)) {
Dino Viehlandac46eb42019-09-11 10:16:34 -07005634 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 +02005635 goto failed;
5636 }
5637 len = PyList_GET_SIZE(tmp);
Pablo Galindoa5634c42020-09-16 19:42:00 +01005638 decorator_list = _Py_asdl_expr_seq_new(len, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005639 if (decorator_list == NULL) goto failed;
5640 for (i = 0; i < len; i++) {
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07005641 expr_ty val;
Serhiy Storchaka43c97312019-09-10 13:02:30 +03005642 PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
5643 Py_INCREF(tmp2);
Victor Stinner74419f02020-07-03 11:35:37 +02005644 res = obj2ast_expr(state, tmp2, &val, arena);
Serhiy Storchaka43c97312019-09-10 13:02:30 +03005645 Py_DECREF(tmp2);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005646 if (res != 0) goto failed;
Serhiy Storchakacf380602016-10-07 21:51:28 +03005647 if (len != PyList_GET_SIZE(tmp)) {
5648 PyErr_SetString(PyExc_RuntimeError, "ClassDef field \"decorator_list\" changed size during iteration");
5649 goto failed;
5650 }
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07005651 asdl_seq_SET(decorator_list, i, val);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005652 }
Victor Stinner1acc1292013-07-27 00:03:47 +02005653 Py_CLEAR(tmp);
Serhiy Storchakaf320be72018-01-25 10:49:40 +02005654 }
Serhiy Storchaka73cbe7a2018-05-29 12:04:55 +03005655 *out = ClassDef(name, bases, keywords, body, decorator_list, lineno,
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00005656 col_offset, end_lineno, end_col_offset, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005657 if (*out == NULL) goto failed;
5658 return 0;
5659 }
Victor Stinner74419f02020-07-03 11:35:37 +02005660 tp = state->Return_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07005661 isinstance = PyObject_IsInstance(obj, tp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005662 if (isinstance == -1) {
5663 return 1;
5664 }
5665 if (isinstance) {
5666 expr_ty value;
5667
Victor Stinner74419f02020-07-03 11:35:37 +02005668 if (_PyObject_LookupAttr(obj, state->value, &tmp) < 0) {
Serhiy Storchakaf320be72018-01-25 10:49:40 +02005669 return 1;
5670 }
5671 if (tmp == NULL || tmp == Py_None) {
5672 Py_CLEAR(tmp);
5673 value = NULL;
5674 }
5675 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005676 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02005677 res = obj2ast_expr(state, tmp, &value, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005678 if (res != 0) goto failed;
Victor Stinner1acc1292013-07-27 00:03:47 +02005679 Py_CLEAR(tmp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005680 }
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00005681 *out = Return(value, lineno, col_offset, end_lineno, end_col_offset,
5682 arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005683 if (*out == NULL) goto failed;
5684 return 0;
5685 }
Victor Stinner74419f02020-07-03 11:35:37 +02005686 tp = state->Delete_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07005687 isinstance = PyObject_IsInstance(obj, tp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005688 if (isinstance == -1) {
5689 return 1;
5690 }
5691 if (isinstance) {
Pablo Galindoa5634c42020-09-16 19:42:00 +01005692 asdl_expr_seq* targets;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005693
Victor Stinner74419f02020-07-03 11:35:37 +02005694 if (_PyObject_LookupAttr(obj, state->targets, &tmp) < 0) {
Serhiy Storchakaf320be72018-01-25 10:49:40 +02005695 return 1;
5696 }
5697 if (tmp == NULL) {
5698 PyErr_SetString(PyExc_TypeError, "required field \"targets\" missing from Delete");
5699 return 1;
5700 }
5701 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005702 int res;
5703 Py_ssize_t len;
5704 Py_ssize_t i;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005705 if (!PyList_Check(tmp)) {
Dino Viehlandac46eb42019-09-11 10:16:34 -07005706 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 +02005707 goto failed;
5708 }
5709 len = PyList_GET_SIZE(tmp);
Pablo Galindoa5634c42020-09-16 19:42:00 +01005710 targets = _Py_asdl_expr_seq_new(len, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005711 if (targets == NULL) goto failed;
5712 for (i = 0; i < len; i++) {
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07005713 expr_ty val;
Serhiy Storchaka43c97312019-09-10 13:02:30 +03005714 PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
5715 Py_INCREF(tmp2);
Victor Stinner74419f02020-07-03 11:35:37 +02005716 res = obj2ast_expr(state, tmp2, &val, arena);
Serhiy Storchaka43c97312019-09-10 13:02:30 +03005717 Py_DECREF(tmp2);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005718 if (res != 0) goto failed;
Serhiy Storchakacf380602016-10-07 21:51:28 +03005719 if (len != PyList_GET_SIZE(tmp)) {
5720 PyErr_SetString(PyExc_RuntimeError, "Delete field \"targets\" changed size during iteration");
5721 goto failed;
5722 }
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07005723 asdl_seq_SET(targets, i, val);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005724 }
Victor Stinner1acc1292013-07-27 00:03:47 +02005725 Py_CLEAR(tmp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005726 }
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00005727 *out = Delete(targets, lineno, col_offset, end_lineno, end_col_offset,
5728 arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005729 if (*out == NULL) goto failed;
5730 return 0;
5731 }
Victor Stinner74419f02020-07-03 11:35:37 +02005732 tp = state->Assign_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07005733 isinstance = PyObject_IsInstance(obj, tp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005734 if (isinstance == -1) {
5735 return 1;
5736 }
5737 if (isinstance) {
Pablo Galindoa5634c42020-09-16 19:42:00 +01005738 asdl_expr_seq* targets;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005739 expr_ty value;
Guido van Rossumdcfcd142019-01-31 03:40:27 -08005740 string type_comment;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005741
Victor Stinner74419f02020-07-03 11:35:37 +02005742 if (_PyObject_LookupAttr(obj, state->targets, &tmp) < 0) {
Serhiy Storchakaf320be72018-01-25 10:49:40 +02005743 return 1;
5744 }
5745 if (tmp == NULL) {
5746 PyErr_SetString(PyExc_TypeError, "required field \"targets\" missing from Assign");
5747 return 1;
5748 }
5749 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005750 int res;
5751 Py_ssize_t len;
5752 Py_ssize_t i;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005753 if (!PyList_Check(tmp)) {
Dino Viehlandac46eb42019-09-11 10:16:34 -07005754 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 +02005755 goto failed;
5756 }
5757 len = PyList_GET_SIZE(tmp);
Pablo Galindoa5634c42020-09-16 19:42:00 +01005758 targets = _Py_asdl_expr_seq_new(len, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005759 if (targets == NULL) goto failed;
5760 for (i = 0; i < len; i++) {
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07005761 expr_ty val;
Serhiy Storchaka43c97312019-09-10 13:02:30 +03005762 PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
5763 Py_INCREF(tmp2);
Victor Stinner74419f02020-07-03 11:35:37 +02005764 res = obj2ast_expr(state, tmp2, &val, arena);
Serhiy Storchaka43c97312019-09-10 13:02:30 +03005765 Py_DECREF(tmp2);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005766 if (res != 0) goto failed;
Serhiy Storchakacf380602016-10-07 21:51:28 +03005767 if (len != PyList_GET_SIZE(tmp)) {
5768 PyErr_SetString(PyExc_RuntimeError, "Assign field \"targets\" changed size during iteration");
5769 goto failed;
5770 }
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07005771 asdl_seq_SET(targets, i, val);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005772 }
Victor Stinner1acc1292013-07-27 00:03:47 +02005773 Py_CLEAR(tmp);
Serhiy Storchakaf320be72018-01-25 10:49:40 +02005774 }
Victor Stinner74419f02020-07-03 11:35:37 +02005775 if (_PyObject_LookupAttr(obj, state->value, &tmp) < 0) {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005776 return 1;
5777 }
Serhiy Storchakaf320be72018-01-25 10:49:40 +02005778 if (tmp == NULL) {
5779 PyErr_SetString(PyExc_TypeError, "required field \"value\" missing from Assign");
5780 return 1;
5781 }
5782 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005783 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02005784 res = obj2ast_expr(state, tmp, &value, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005785 if (res != 0) goto failed;
Victor Stinner1acc1292013-07-27 00:03:47 +02005786 Py_CLEAR(tmp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005787 }
Victor Stinner74419f02020-07-03 11:35:37 +02005788 if (_PyObject_LookupAttr(obj, state->type_comment, &tmp) < 0) {
Guido van Rossumdcfcd142019-01-31 03:40:27 -08005789 return 1;
5790 }
5791 if (tmp == NULL || tmp == Py_None) {
5792 Py_CLEAR(tmp);
5793 type_comment = NULL;
5794 }
5795 else {
5796 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02005797 res = obj2ast_string(state, tmp, &type_comment, arena);
Guido van Rossumdcfcd142019-01-31 03:40:27 -08005798 if (res != 0) goto failed;
5799 Py_CLEAR(tmp);
5800 }
5801 *out = Assign(targets, value, type_comment, lineno, col_offset,
5802 end_lineno, end_col_offset, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005803 if (*out == NULL) goto failed;
5804 return 0;
5805 }
Victor Stinner74419f02020-07-03 11:35:37 +02005806 tp = state->AugAssign_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07005807 isinstance = PyObject_IsInstance(obj, tp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005808 if (isinstance == -1) {
5809 return 1;
5810 }
5811 if (isinstance) {
5812 expr_ty target;
5813 operator_ty op;
5814 expr_ty value;
5815
Victor Stinner74419f02020-07-03 11:35:37 +02005816 if (_PyObject_LookupAttr(obj, state->target, &tmp) < 0) {
Serhiy Storchakaf320be72018-01-25 10:49:40 +02005817 return 1;
5818 }
5819 if (tmp == NULL) {
5820 PyErr_SetString(PyExc_TypeError, "required field \"target\" missing from AugAssign");
5821 return 1;
5822 }
5823 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005824 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02005825 res = obj2ast_expr(state, tmp, &target, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005826 if (res != 0) goto failed;
Victor Stinner1acc1292013-07-27 00:03:47 +02005827 Py_CLEAR(tmp);
Serhiy Storchakaf320be72018-01-25 10:49:40 +02005828 }
Victor Stinner74419f02020-07-03 11:35:37 +02005829 if (_PyObject_LookupAttr(obj, state->op, &tmp) < 0) {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005830 return 1;
5831 }
Serhiy Storchakaf320be72018-01-25 10:49:40 +02005832 if (tmp == NULL) {
5833 PyErr_SetString(PyExc_TypeError, "required field \"op\" missing from AugAssign");
5834 return 1;
5835 }
5836 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005837 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02005838 res = obj2ast_operator(state, tmp, &op, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005839 if (res != 0) goto failed;
Victor Stinner1acc1292013-07-27 00:03:47 +02005840 Py_CLEAR(tmp);
Serhiy Storchakaf320be72018-01-25 10:49:40 +02005841 }
Victor Stinner74419f02020-07-03 11:35:37 +02005842 if (_PyObject_LookupAttr(obj, state->value, &tmp) < 0) {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005843 return 1;
5844 }
Serhiy Storchakaf320be72018-01-25 10:49:40 +02005845 if (tmp == NULL) {
5846 PyErr_SetString(PyExc_TypeError, "required field \"value\" missing from AugAssign");
5847 return 1;
5848 }
5849 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005850 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02005851 res = obj2ast_expr(state, tmp, &value, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005852 if (res != 0) goto failed;
Victor Stinner1acc1292013-07-27 00:03:47 +02005853 Py_CLEAR(tmp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005854 }
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00005855 *out = AugAssign(target, op, value, lineno, col_offset, end_lineno,
5856 end_col_offset, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005857 if (*out == NULL) goto failed;
5858 return 0;
5859 }
Victor Stinner74419f02020-07-03 11:35:37 +02005860 tp = state->AnnAssign_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07005861 isinstance = PyObject_IsInstance(obj, tp);
Yury Selivanovf8cb8a12016-09-08 20:50:03 -07005862 if (isinstance == -1) {
5863 return 1;
5864 }
5865 if (isinstance) {
5866 expr_ty target;
5867 expr_ty annotation;
5868 expr_ty value;
5869 int simple;
5870
Victor Stinner74419f02020-07-03 11:35:37 +02005871 if (_PyObject_LookupAttr(obj, state->target, &tmp) < 0) {
Serhiy Storchakaf320be72018-01-25 10:49:40 +02005872 return 1;
5873 }
5874 if (tmp == NULL) {
5875 PyErr_SetString(PyExc_TypeError, "required field \"target\" missing from AnnAssign");
5876 return 1;
5877 }
5878 else {
Yury Selivanovf8cb8a12016-09-08 20:50:03 -07005879 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02005880 res = obj2ast_expr(state, tmp, &target, arena);
Yury Selivanovf8cb8a12016-09-08 20:50:03 -07005881 if (res != 0) goto failed;
5882 Py_CLEAR(tmp);
Serhiy Storchakaf320be72018-01-25 10:49:40 +02005883 }
Victor Stinner74419f02020-07-03 11:35:37 +02005884 if (_PyObject_LookupAttr(obj, state->annotation, &tmp) < 0) {
Yury Selivanovf8cb8a12016-09-08 20:50:03 -07005885 return 1;
5886 }
Serhiy Storchakaf320be72018-01-25 10:49:40 +02005887 if (tmp == NULL) {
5888 PyErr_SetString(PyExc_TypeError, "required field \"annotation\" missing from AnnAssign");
5889 return 1;
5890 }
5891 else {
Yury Selivanovf8cb8a12016-09-08 20:50:03 -07005892 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02005893 res = obj2ast_expr(state, tmp, &annotation, arena);
Yury Selivanovf8cb8a12016-09-08 20:50:03 -07005894 if (res != 0) goto failed;
5895 Py_CLEAR(tmp);
Serhiy Storchakaf320be72018-01-25 10:49:40 +02005896 }
Victor Stinner74419f02020-07-03 11:35:37 +02005897 if (_PyObject_LookupAttr(obj, state->value, &tmp) < 0) {
Yury Selivanovf8cb8a12016-09-08 20:50:03 -07005898 return 1;
5899 }
Serhiy Storchakaf320be72018-01-25 10:49:40 +02005900 if (tmp == NULL || tmp == Py_None) {
5901 Py_CLEAR(tmp);
5902 value = NULL;
5903 }
5904 else {
Yury Selivanovf8cb8a12016-09-08 20:50:03 -07005905 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02005906 res = obj2ast_expr(state, tmp, &value, arena);
Yury Selivanovf8cb8a12016-09-08 20:50:03 -07005907 if (res != 0) goto failed;
5908 Py_CLEAR(tmp);
Yury Selivanovf8cb8a12016-09-08 20:50:03 -07005909 }
Victor Stinner74419f02020-07-03 11:35:37 +02005910 if (_PyObject_LookupAttr(obj, state->simple, &tmp) < 0) {
Serhiy Storchakaf320be72018-01-25 10:49:40 +02005911 return 1;
5912 }
5913 if (tmp == NULL) {
5914 PyErr_SetString(PyExc_TypeError, "required field \"simple\" missing from AnnAssign");
5915 return 1;
5916 }
5917 else {
Yury Selivanovf8cb8a12016-09-08 20:50:03 -07005918 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02005919 res = obj2ast_int(state, tmp, &simple, arena);
Yury Selivanovf8cb8a12016-09-08 20:50:03 -07005920 if (res != 0) goto failed;
5921 Py_CLEAR(tmp);
Yury Selivanovf8cb8a12016-09-08 20:50:03 -07005922 }
5923 *out = AnnAssign(target, annotation, value, simple, lineno, col_offset,
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00005924 end_lineno, end_col_offset, arena);
Yury Selivanovf8cb8a12016-09-08 20:50:03 -07005925 if (*out == NULL) goto failed;
5926 return 0;
5927 }
Victor Stinner74419f02020-07-03 11:35:37 +02005928 tp = state->For_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07005929 isinstance = PyObject_IsInstance(obj, tp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005930 if (isinstance == -1) {
5931 return 1;
5932 }
5933 if (isinstance) {
5934 expr_ty target;
5935 expr_ty iter;
Pablo Galindoa5634c42020-09-16 19:42:00 +01005936 asdl_stmt_seq* body;
5937 asdl_stmt_seq* orelse;
Guido van Rossumdcfcd142019-01-31 03:40:27 -08005938 string type_comment;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005939
Victor Stinner74419f02020-07-03 11:35:37 +02005940 if (_PyObject_LookupAttr(obj, state->target, &tmp) < 0) {
Serhiy Storchakaf320be72018-01-25 10:49:40 +02005941 return 1;
5942 }
5943 if (tmp == NULL) {
5944 PyErr_SetString(PyExc_TypeError, "required field \"target\" missing from For");
5945 return 1;
5946 }
5947 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005948 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02005949 res = obj2ast_expr(state, tmp, &target, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005950 if (res != 0) goto failed;
Victor Stinner1acc1292013-07-27 00:03:47 +02005951 Py_CLEAR(tmp);
Serhiy Storchakaf320be72018-01-25 10:49:40 +02005952 }
Victor Stinner74419f02020-07-03 11:35:37 +02005953 if (_PyObject_LookupAttr(obj, state->iter, &tmp) < 0) {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005954 return 1;
5955 }
Serhiy Storchakaf320be72018-01-25 10:49:40 +02005956 if (tmp == NULL) {
5957 PyErr_SetString(PyExc_TypeError, "required field \"iter\" missing from For");
5958 return 1;
5959 }
5960 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005961 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02005962 res = obj2ast_expr(state, tmp, &iter, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005963 if (res != 0) goto failed;
Victor Stinner1acc1292013-07-27 00:03:47 +02005964 Py_CLEAR(tmp);
Serhiy Storchakaf320be72018-01-25 10:49:40 +02005965 }
Victor Stinner74419f02020-07-03 11:35:37 +02005966 if (_PyObject_LookupAttr(obj, state->body, &tmp) < 0) {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005967 return 1;
5968 }
Serhiy Storchakaf320be72018-01-25 10:49:40 +02005969 if (tmp == NULL) {
5970 PyErr_SetString(PyExc_TypeError, "required field \"body\" missing from For");
5971 return 1;
5972 }
5973 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005974 int res;
5975 Py_ssize_t len;
5976 Py_ssize_t i;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005977 if (!PyList_Check(tmp)) {
Dino Viehlandac46eb42019-09-11 10:16:34 -07005978 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 +02005979 goto failed;
5980 }
5981 len = PyList_GET_SIZE(tmp);
Pablo Galindoa5634c42020-09-16 19:42:00 +01005982 body = _Py_asdl_stmt_seq_new(len, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005983 if (body == NULL) goto failed;
5984 for (i = 0; i < len; i++) {
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07005985 stmt_ty val;
Serhiy Storchaka43c97312019-09-10 13:02:30 +03005986 PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
5987 Py_INCREF(tmp2);
Victor Stinner74419f02020-07-03 11:35:37 +02005988 res = obj2ast_stmt(state, tmp2, &val, arena);
Serhiy Storchaka43c97312019-09-10 13:02:30 +03005989 Py_DECREF(tmp2);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005990 if (res != 0) goto failed;
Serhiy Storchakacf380602016-10-07 21:51:28 +03005991 if (len != PyList_GET_SIZE(tmp)) {
5992 PyErr_SetString(PyExc_RuntimeError, "For field \"body\" changed size during iteration");
5993 goto failed;
5994 }
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07005995 asdl_seq_SET(body, i, val);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005996 }
Victor Stinner1acc1292013-07-27 00:03:47 +02005997 Py_CLEAR(tmp);
Serhiy Storchakaf320be72018-01-25 10:49:40 +02005998 }
Victor Stinner74419f02020-07-03 11:35:37 +02005999 if (_PyObject_LookupAttr(obj, state->orelse, &tmp) < 0) {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006000 return 1;
6001 }
Serhiy Storchakaf320be72018-01-25 10:49:40 +02006002 if (tmp == NULL) {
6003 PyErr_SetString(PyExc_TypeError, "required field \"orelse\" missing from For");
6004 return 1;
6005 }
6006 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006007 int res;
6008 Py_ssize_t len;
6009 Py_ssize_t i;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006010 if (!PyList_Check(tmp)) {
Dino Viehlandac46eb42019-09-11 10:16:34 -07006011 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 +02006012 goto failed;
6013 }
6014 len = PyList_GET_SIZE(tmp);
Pablo Galindoa5634c42020-09-16 19:42:00 +01006015 orelse = _Py_asdl_stmt_seq_new(len, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006016 if (orelse == NULL) goto failed;
6017 for (i = 0; i < len; i++) {
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07006018 stmt_ty val;
Serhiy Storchaka43c97312019-09-10 13:02:30 +03006019 PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
6020 Py_INCREF(tmp2);
Victor Stinner74419f02020-07-03 11:35:37 +02006021 res = obj2ast_stmt(state, tmp2, &val, arena);
Serhiy Storchaka43c97312019-09-10 13:02:30 +03006022 Py_DECREF(tmp2);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006023 if (res != 0) goto failed;
Serhiy Storchakacf380602016-10-07 21:51:28 +03006024 if (len != PyList_GET_SIZE(tmp)) {
6025 PyErr_SetString(PyExc_RuntimeError, "For field \"orelse\" changed size during iteration");
6026 goto failed;
6027 }
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07006028 asdl_seq_SET(orelse, i, val);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006029 }
Victor Stinner1acc1292013-07-27 00:03:47 +02006030 Py_CLEAR(tmp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006031 }
Victor Stinner74419f02020-07-03 11:35:37 +02006032 if (_PyObject_LookupAttr(obj, state->type_comment, &tmp) < 0) {
Guido van Rossumdcfcd142019-01-31 03:40:27 -08006033 return 1;
6034 }
6035 if (tmp == NULL || tmp == Py_None) {
6036 Py_CLEAR(tmp);
6037 type_comment = NULL;
6038 }
6039 else {
6040 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02006041 res = obj2ast_string(state, tmp, &type_comment, arena);
Guido van Rossumdcfcd142019-01-31 03:40:27 -08006042 if (res != 0) goto failed;
6043 Py_CLEAR(tmp);
6044 }
6045 *out = For(target, iter, body, orelse, type_comment, lineno,
6046 col_offset, end_lineno, end_col_offset, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006047 if (*out == NULL) goto failed;
6048 return 0;
6049 }
Victor Stinner74419f02020-07-03 11:35:37 +02006050 tp = state->AsyncFor_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07006051 isinstance = PyObject_IsInstance(obj, tp);
Yury Selivanov75445082015-05-11 22:57:16 -04006052 if (isinstance == -1) {
6053 return 1;
6054 }
6055 if (isinstance) {
6056 expr_ty target;
6057 expr_ty iter;
Pablo Galindoa5634c42020-09-16 19:42:00 +01006058 asdl_stmt_seq* body;
6059 asdl_stmt_seq* orelse;
Guido van Rossumdcfcd142019-01-31 03:40:27 -08006060 string type_comment;
Yury Selivanov75445082015-05-11 22:57:16 -04006061
Victor Stinner74419f02020-07-03 11:35:37 +02006062 if (_PyObject_LookupAttr(obj, state->target, &tmp) < 0) {
Serhiy Storchakaf320be72018-01-25 10:49:40 +02006063 return 1;
6064 }
6065 if (tmp == NULL) {
6066 PyErr_SetString(PyExc_TypeError, "required field \"target\" missing from AsyncFor");
6067 return 1;
6068 }
6069 else {
Yury Selivanov75445082015-05-11 22:57:16 -04006070 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02006071 res = obj2ast_expr(state, tmp, &target, arena);
Yury Selivanov75445082015-05-11 22:57:16 -04006072 if (res != 0) goto failed;
6073 Py_CLEAR(tmp);
Serhiy Storchakaf320be72018-01-25 10:49:40 +02006074 }
Victor Stinner74419f02020-07-03 11:35:37 +02006075 if (_PyObject_LookupAttr(obj, state->iter, &tmp) < 0) {
Yury Selivanov75445082015-05-11 22:57:16 -04006076 return 1;
6077 }
Serhiy Storchakaf320be72018-01-25 10:49:40 +02006078 if (tmp == NULL) {
6079 PyErr_SetString(PyExc_TypeError, "required field \"iter\" missing from AsyncFor");
6080 return 1;
6081 }
6082 else {
Yury Selivanov75445082015-05-11 22:57:16 -04006083 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02006084 res = obj2ast_expr(state, tmp, &iter, arena);
Yury Selivanov75445082015-05-11 22:57:16 -04006085 if (res != 0) goto failed;
6086 Py_CLEAR(tmp);
Serhiy Storchakaf320be72018-01-25 10:49:40 +02006087 }
Victor Stinner74419f02020-07-03 11:35:37 +02006088 if (_PyObject_LookupAttr(obj, state->body, &tmp) < 0) {
Yury Selivanov75445082015-05-11 22:57:16 -04006089 return 1;
6090 }
Serhiy Storchakaf320be72018-01-25 10:49:40 +02006091 if (tmp == NULL) {
6092 PyErr_SetString(PyExc_TypeError, "required field \"body\" missing from AsyncFor");
6093 return 1;
6094 }
6095 else {
Yury Selivanov75445082015-05-11 22:57:16 -04006096 int res;
6097 Py_ssize_t len;
6098 Py_ssize_t i;
Yury Selivanov75445082015-05-11 22:57:16 -04006099 if (!PyList_Check(tmp)) {
Dino Viehlandac46eb42019-09-11 10:16:34 -07006100 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 -04006101 goto failed;
6102 }
6103 len = PyList_GET_SIZE(tmp);
Pablo Galindoa5634c42020-09-16 19:42:00 +01006104 body = _Py_asdl_stmt_seq_new(len, arena);
Yury Selivanov75445082015-05-11 22:57:16 -04006105 if (body == NULL) goto failed;
6106 for (i = 0; i < len; i++) {
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07006107 stmt_ty val;
Serhiy Storchaka43c97312019-09-10 13:02:30 +03006108 PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
6109 Py_INCREF(tmp2);
Victor Stinner74419f02020-07-03 11:35:37 +02006110 res = obj2ast_stmt(state, tmp2, &val, arena);
Serhiy Storchaka43c97312019-09-10 13:02:30 +03006111 Py_DECREF(tmp2);
Yury Selivanov75445082015-05-11 22:57:16 -04006112 if (res != 0) goto failed;
Serhiy Storchakacf380602016-10-07 21:51:28 +03006113 if (len != PyList_GET_SIZE(tmp)) {
6114 PyErr_SetString(PyExc_RuntimeError, "AsyncFor field \"body\" changed size during iteration");
6115 goto failed;
6116 }
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07006117 asdl_seq_SET(body, i, val);
Yury Selivanov75445082015-05-11 22:57:16 -04006118 }
6119 Py_CLEAR(tmp);
Serhiy Storchakaf320be72018-01-25 10:49:40 +02006120 }
Victor Stinner74419f02020-07-03 11:35:37 +02006121 if (_PyObject_LookupAttr(obj, state->orelse, &tmp) < 0) {
Yury Selivanov75445082015-05-11 22:57:16 -04006122 return 1;
6123 }
Serhiy Storchakaf320be72018-01-25 10:49:40 +02006124 if (tmp == NULL) {
6125 PyErr_SetString(PyExc_TypeError, "required field \"orelse\" missing from AsyncFor");
6126 return 1;
6127 }
6128 else {
Yury Selivanov75445082015-05-11 22:57:16 -04006129 int res;
6130 Py_ssize_t len;
6131 Py_ssize_t i;
Yury Selivanov75445082015-05-11 22:57:16 -04006132 if (!PyList_Check(tmp)) {
Dino Viehlandac46eb42019-09-11 10:16:34 -07006133 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 -04006134 goto failed;
6135 }
6136 len = PyList_GET_SIZE(tmp);
Pablo Galindoa5634c42020-09-16 19:42:00 +01006137 orelse = _Py_asdl_stmt_seq_new(len, arena);
Yury Selivanov75445082015-05-11 22:57:16 -04006138 if (orelse == NULL) goto failed;
6139 for (i = 0; i < len; i++) {
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07006140 stmt_ty val;
Serhiy Storchaka43c97312019-09-10 13:02:30 +03006141 PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
6142 Py_INCREF(tmp2);
Victor Stinner74419f02020-07-03 11:35:37 +02006143 res = obj2ast_stmt(state, tmp2, &val, arena);
Serhiy Storchaka43c97312019-09-10 13:02:30 +03006144 Py_DECREF(tmp2);
Yury Selivanov75445082015-05-11 22:57:16 -04006145 if (res != 0) goto failed;
Serhiy Storchakacf380602016-10-07 21:51:28 +03006146 if (len != PyList_GET_SIZE(tmp)) {
6147 PyErr_SetString(PyExc_RuntimeError, "AsyncFor field \"orelse\" changed size during iteration");
6148 goto failed;
6149 }
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07006150 asdl_seq_SET(orelse, i, val);
Yury Selivanov75445082015-05-11 22:57:16 -04006151 }
6152 Py_CLEAR(tmp);
Yury Selivanov75445082015-05-11 22:57:16 -04006153 }
Victor Stinner74419f02020-07-03 11:35:37 +02006154 if (_PyObject_LookupAttr(obj, state->type_comment, &tmp) < 0) {
Guido van Rossumdcfcd142019-01-31 03:40:27 -08006155 return 1;
6156 }
6157 if (tmp == NULL || tmp == Py_None) {
6158 Py_CLEAR(tmp);
6159 type_comment = NULL;
6160 }
6161 else {
6162 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02006163 res = obj2ast_string(state, tmp, &type_comment, arena);
Guido van Rossumdcfcd142019-01-31 03:40:27 -08006164 if (res != 0) goto failed;
6165 Py_CLEAR(tmp);
6166 }
6167 *out = AsyncFor(target, iter, body, orelse, type_comment, lineno,
6168 col_offset, end_lineno, end_col_offset, arena);
Yury Selivanov75445082015-05-11 22:57:16 -04006169 if (*out == NULL) goto failed;
6170 return 0;
6171 }
Victor Stinner74419f02020-07-03 11:35:37 +02006172 tp = state->While_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07006173 isinstance = PyObject_IsInstance(obj, tp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006174 if (isinstance == -1) {
6175 return 1;
6176 }
6177 if (isinstance) {
6178 expr_ty test;
Pablo Galindoa5634c42020-09-16 19:42:00 +01006179 asdl_stmt_seq* body;
6180 asdl_stmt_seq* orelse;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006181
Victor Stinner74419f02020-07-03 11:35:37 +02006182 if (_PyObject_LookupAttr(obj, state->test, &tmp) < 0) {
Serhiy Storchakaf320be72018-01-25 10:49:40 +02006183 return 1;
6184 }
6185 if (tmp == NULL) {
6186 PyErr_SetString(PyExc_TypeError, "required field \"test\" missing from While");
6187 return 1;
6188 }
6189 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006190 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02006191 res = obj2ast_expr(state, tmp, &test, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006192 if (res != 0) goto failed;
Victor Stinner1acc1292013-07-27 00:03:47 +02006193 Py_CLEAR(tmp);
Serhiy Storchakaf320be72018-01-25 10:49:40 +02006194 }
Victor Stinner74419f02020-07-03 11:35:37 +02006195 if (_PyObject_LookupAttr(obj, state->body, &tmp) < 0) {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006196 return 1;
6197 }
Serhiy Storchakaf320be72018-01-25 10:49:40 +02006198 if (tmp == NULL) {
6199 PyErr_SetString(PyExc_TypeError, "required field \"body\" missing from While");
6200 return 1;
6201 }
6202 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006203 int res;
6204 Py_ssize_t len;
6205 Py_ssize_t i;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006206 if (!PyList_Check(tmp)) {
Dino Viehlandac46eb42019-09-11 10:16:34 -07006207 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 +02006208 goto failed;
6209 }
6210 len = PyList_GET_SIZE(tmp);
Pablo Galindoa5634c42020-09-16 19:42:00 +01006211 body = _Py_asdl_stmt_seq_new(len, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006212 if (body == NULL) goto failed;
6213 for (i = 0; i < len; i++) {
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07006214 stmt_ty val;
Serhiy Storchaka43c97312019-09-10 13:02:30 +03006215 PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
6216 Py_INCREF(tmp2);
Victor Stinner74419f02020-07-03 11:35:37 +02006217 res = obj2ast_stmt(state, tmp2, &val, arena);
Serhiy Storchaka43c97312019-09-10 13:02:30 +03006218 Py_DECREF(tmp2);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006219 if (res != 0) goto failed;
Serhiy Storchakacf380602016-10-07 21:51:28 +03006220 if (len != PyList_GET_SIZE(tmp)) {
6221 PyErr_SetString(PyExc_RuntimeError, "While field \"body\" changed size during iteration");
6222 goto failed;
6223 }
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07006224 asdl_seq_SET(body, i, val);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006225 }
Victor Stinner1acc1292013-07-27 00:03:47 +02006226 Py_CLEAR(tmp);
Serhiy Storchakaf320be72018-01-25 10:49:40 +02006227 }
Victor Stinner74419f02020-07-03 11:35:37 +02006228 if (_PyObject_LookupAttr(obj, state->orelse, &tmp) < 0) {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006229 return 1;
6230 }
Serhiy Storchakaf320be72018-01-25 10:49:40 +02006231 if (tmp == NULL) {
6232 PyErr_SetString(PyExc_TypeError, "required field \"orelse\" missing from While");
6233 return 1;
6234 }
6235 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006236 int res;
6237 Py_ssize_t len;
6238 Py_ssize_t i;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006239 if (!PyList_Check(tmp)) {
Dino Viehlandac46eb42019-09-11 10:16:34 -07006240 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 +02006241 goto failed;
6242 }
6243 len = PyList_GET_SIZE(tmp);
Pablo Galindoa5634c42020-09-16 19:42:00 +01006244 orelse = _Py_asdl_stmt_seq_new(len, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006245 if (orelse == NULL) goto failed;
6246 for (i = 0; i < len; i++) {
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07006247 stmt_ty val;
Serhiy Storchaka43c97312019-09-10 13:02:30 +03006248 PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
6249 Py_INCREF(tmp2);
Victor Stinner74419f02020-07-03 11:35:37 +02006250 res = obj2ast_stmt(state, tmp2, &val, arena);
Serhiy Storchaka43c97312019-09-10 13:02:30 +03006251 Py_DECREF(tmp2);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006252 if (res != 0) goto failed;
Serhiy Storchakacf380602016-10-07 21:51:28 +03006253 if (len != PyList_GET_SIZE(tmp)) {
6254 PyErr_SetString(PyExc_RuntimeError, "While field \"orelse\" changed size during iteration");
6255 goto failed;
6256 }
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07006257 asdl_seq_SET(orelse, i, val);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006258 }
Victor Stinner1acc1292013-07-27 00:03:47 +02006259 Py_CLEAR(tmp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006260 }
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00006261 *out = While(test, body, orelse, lineno, col_offset, end_lineno,
6262 end_col_offset, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006263 if (*out == NULL) goto failed;
6264 return 0;
6265 }
Victor Stinner74419f02020-07-03 11:35:37 +02006266 tp = state->If_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07006267 isinstance = PyObject_IsInstance(obj, tp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006268 if (isinstance == -1) {
6269 return 1;
6270 }
6271 if (isinstance) {
6272 expr_ty test;
Pablo Galindoa5634c42020-09-16 19:42:00 +01006273 asdl_stmt_seq* body;
6274 asdl_stmt_seq* orelse;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006275
Victor Stinner74419f02020-07-03 11:35:37 +02006276 if (_PyObject_LookupAttr(obj, state->test, &tmp) < 0) {
Serhiy Storchakaf320be72018-01-25 10:49:40 +02006277 return 1;
6278 }
6279 if (tmp == NULL) {
6280 PyErr_SetString(PyExc_TypeError, "required field \"test\" missing from If");
6281 return 1;
6282 }
6283 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006284 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02006285 res = obj2ast_expr(state, tmp, &test, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006286 if (res != 0) goto failed;
Victor Stinner1acc1292013-07-27 00:03:47 +02006287 Py_CLEAR(tmp);
Serhiy Storchakaf320be72018-01-25 10:49:40 +02006288 }
Victor Stinner74419f02020-07-03 11:35:37 +02006289 if (_PyObject_LookupAttr(obj, state->body, &tmp) < 0) {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006290 return 1;
6291 }
Serhiy Storchakaf320be72018-01-25 10:49:40 +02006292 if (tmp == NULL) {
6293 PyErr_SetString(PyExc_TypeError, "required field \"body\" missing from If");
6294 return 1;
6295 }
6296 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006297 int res;
6298 Py_ssize_t len;
6299 Py_ssize_t i;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006300 if (!PyList_Check(tmp)) {
Dino Viehlandac46eb42019-09-11 10:16:34 -07006301 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 +02006302 goto failed;
6303 }
6304 len = PyList_GET_SIZE(tmp);
Pablo Galindoa5634c42020-09-16 19:42:00 +01006305 body = _Py_asdl_stmt_seq_new(len, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006306 if (body == NULL) goto failed;
6307 for (i = 0; i < len; i++) {
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07006308 stmt_ty val;
Serhiy Storchaka43c97312019-09-10 13:02:30 +03006309 PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
6310 Py_INCREF(tmp2);
Victor Stinner74419f02020-07-03 11:35:37 +02006311 res = obj2ast_stmt(state, tmp2, &val, arena);
Serhiy Storchaka43c97312019-09-10 13:02:30 +03006312 Py_DECREF(tmp2);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006313 if (res != 0) goto failed;
Serhiy Storchakacf380602016-10-07 21:51:28 +03006314 if (len != PyList_GET_SIZE(tmp)) {
6315 PyErr_SetString(PyExc_RuntimeError, "If field \"body\" changed size during iteration");
6316 goto failed;
6317 }
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07006318 asdl_seq_SET(body, i, val);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006319 }
Victor Stinner1acc1292013-07-27 00:03:47 +02006320 Py_CLEAR(tmp);
Serhiy Storchakaf320be72018-01-25 10:49:40 +02006321 }
Victor Stinner74419f02020-07-03 11:35:37 +02006322 if (_PyObject_LookupAttr(obj, state->orelse, &tmp) < 0) {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006323 return 1;
6324 }
Serhiy Storchakaf320be72018-01-25 10:49:40 +02006325 if (tmp == NULL) {
6326 PyErr_SetString(PyExc_TypeError, "required field \"orelse\" missing from If");
6327 return 1;
6328 }
6329 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006330 int res;
6331 Py_ssize_t len;
6332 Py_ssize_t i;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006333 if (!PyList_Check(tmp)) {
Dino Viehlandac46eb42019-09-11 10:16:34 -07006334 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 +02006335 goto failed;
6336 }
6337 len = PyList_GET_SIZE(tmp);
Pablo Galindoa5634c42020-09-16 19:42:00 +01006338 orelse = _Py_asdl_stmt_seq_new(len, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006339 if (orelse == NULL) goto failed;
6340 for (i = 0; i < len; i++) {
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07006341 stmt_ty val;
Serhiy Storchaka43c97312019-09-10 13:02:30 +03006342 PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
6343 Py_INCREF(tmp2);
Victor Stinner74419f02020-07-03 11:35:37 +02006344 res = obj2ast_stmt(state, tmp2, &val, arena);
Serhiy Storchaka43c97312019-09-10 13:02:30 +03006345 Py_DECREF(tmp2);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006346 if (res != 0) goto failed;
Serhiy Storchakacf380602016-10-07 21:51:28 +03006347 if (len != PyList_GET_SIZE(tmp)) {
6348 PyErr_SetString(PyExc_RuntimeError, "If field \"orelse\" changed size during iteration");
6349 goto failed;
6350 }
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07006351 asdl_seq_SET(orelse, i, val);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006352 }
Victor Stinner1acc1292013-07-27 00:03:47 +02006353 Py_CLEAR(tmp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006354 }
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00006355 *out = If(test, body, orelse, lineno, col_offset, end_lineno,
6356 end_col_offset, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006357 if (*out == NULL) goto failed;
6358 return 0;
6359 }
Victor Stinner74419f02020-07-03 11:35:37 +02006360 tp = state->With_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07006361 isinstance = PyObject_IsInstance(obj, tp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006362 if (isinstance == -1) {
6363 return 1;
6364 }
6365 if (isinstance) {
Pablo Galindoa5634c42020-09-16 19:42:00 +01006366 asdl_withitem_seq* items;
6367 asdl_stmt_seq* body;
Guido van Rossumdcfcd142019-01-31 03:40:27 -08006368 string type_comment;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006369
Victor Stinner74419f02020-07-03 11:35:37 +02006370 if (_PyObject_LookupAttr(obj, state->items, &tmp) < 0) {
Serhiy Storchakaf320be72018-01-25 10:49:40 +02006371 return 1;
6372 }
6373 if (tmp == NULL) {
6374 PyErr_SetString(PyExc_TypeError, "required field \"items\" missing from With");
6375 return 1;
6376 }
6377 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006378 int res;
6379 Py_ssize_t len;
6380 Py_ssize_t i;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006381 if (!PyList_Check(tmp)) {
Dino Viehlandac46eb42019-09-11 10:16:34 -07006382 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 +02006383 goto failed;
6384 }
6385 len = PyList_GET_SIZE(tmp);
Pablo Galindoa5634c42020-09-16 19:42:00 +01006386 items = _Py_asdl_withitem_seq_new(len, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006387 if (items == NULL) goto failed;
6388 for (i = 0; i < len; i++) {
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07006389 withitem_ty val;
Serhiy Storchaka43c97312019-09-10 13:02:30 +03006390 PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
6391 Py_INCREF(tmp2);
Victor Stinner74419f02020-07-03 11:35:37 +02006392 res = obj2ast_withitem(state, tmp2, &val, arena);
Serhiy Storchaka43c97312019-09-10 13:02:30 +03006393 Py_DECREF(tmp2);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006394 if (res != 0) goto failed;
Serhiy Storchakacf380602016-10-07 21:51:28 +03006395 if (len != PyList_GET_SIZE(tmp)) {
6396 PyErr_SetString(PyExc_RuntimeError, "With field \"items\" changed size during iteration");
6397 goto failed;
6398 }
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07006399 asdl_seq_SET(items, i, val);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006400 }
Victor Stinner1acc1292013-07-27 00:03:47 +02006401 Py_CLEAR(tmp);
Serhiy Storchakaf320be72018-01-25 10:49:40 +02006402 }
Victor Stinner74419f02020-07-03 11:35:37 +02006403 if (_PyObject_LookupAttr(obj, state->body, &tmp) < 0) {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006404 return 1;
6405 }
Serhiy Storchakaf320be72018-01-25 10:49:40 +02006406 if (tmp == NULL) {
6407 PyErr_SetString(PyExc_TypeError, "required field \"body\" missing from With");
6408 return 1;
6409 }
6410 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006411 int res;
6412 Py_ssize_t len;
6413 Py_ssize_t i;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006414 if (!PyList_Check(tmp)) {
Dino Viehlandac46eb42019-09-11 10:16:34 -07006415 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 +02006416 goto failed;
6417 }
6418 len = PyList_GET_SIZE(tmp);
Pablo Galindoa5634c42020-09-16 19:42:00 +01006419 body = _Py_asdl_stmt_seq_new(len, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006420 if (body == NULL) goto failed;
6421 for (i = 0; i < len; i++) {
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07006422 stmt_ty val;
Serhiy Storchaka43c97312019-09-10 13:02:30 +03006423 PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
6424 Py_INCREF(tmp2);
Victor Stinner74419f02020-07-03 11:35:37 +02006425 res = obj2ast_stmt(state, tmp2, &val, arena);
Serhiy Storchaka43c97312019-09-10 13:02:30 +03006426 Py_DECREF(tmp2);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006427 if (res != 0) goto failed;
Serhiy Storchakacf380602016-10-07 21:51:28 +03006428 if (len != PyList_GET_SIZE(tmp)) {
6429 PyErr_SetString(PyExc_RuntimeError, "With field \"body\" changed size during iteration");
6430 goto failed;
6431 }
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07006432 asdl_seq_SET(body, i, val);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006433 }
Victor Stinner1acc1292013-07-27 00:03:47 +02006434 Py_CLEAR(tmp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006435 }
Victor Stinner74419f02020-07-03 11:35:37 +02006436 if (_PyObject_LookupAttr(obj, state->type_comment, &tmp) < 0) {
Guido van Rossumdcfcd142019-01-31 03:40:27 -08006437 return 1;
6438 }
6439 if (tmp == NULL || tmp == Py_None) {
6440 Py_CLEAR(tmp);
6441 type_comment = NULL;
6442 }
6443 else {
6444 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02006445 res = obj2ast_string(state, tmp, &type_comment, arena);
Guido van Rossumdcfcd142019-01-31 03:40:27 -08006446 if (res != 0) goto failed;
6447 Py_CLEAR(tmp);
6448 }
6449 *out = With(items, body, type_comment, lineno, col_offset, end_lineno,
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00006450 end_col_offset, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006451 if (*out == NULL) goto failed;
6452 return 0;
6453 }
Victor Stinner74419f02020-07-03 11:35:37 +02006454 tp = state->AsyncWith_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07006455 isinstance = PyObject_IsInstance(obj, tp);
Yury Selivanov75445082015-05-11 22:57:16 -04006456 if (isinstance == -1) {
6457 return 1;
6458 }
6459 if (isinstance) {
Pablo Galindoa5634c42020-09-16 19:42:00 +01006460 asdl_withitem_seq* items;
6461 asdl_stmt_seq* body;
Guido van Rossumdcfcd142019-01-31 03:40:27 -08006462 string type_comment;
Yury Selivanov75445082015-05-11 22:57:16 -04006463
Victor Stinner74419f02020-07-03 11:35:37 +02006464 if (_PyObject_LookupAttr(obj, state->items, &tmp) < 0) {
Serhiy Storchakaf320be72018-01-25 10:49:40 +02006465 return 1;
6466 }
6467 if (tmp == NULL) {
6468 PyErr_SetString(PyExc_TypeError, "required field \"items\" missing from AsyncWith");
6469 return 1;
6470 }
6471 else {
Yury Selivanov75445082015-05-11 22:57:16 -04006472 int res;
6473 Py_ssize_t len;
6474 Py_ssize_t i;
Yury Selivanov75445082015-05-11 22:57:16 -04006475 if (!PyList_Check(tmp)) {
Dino Viehlandac46eb42019-09-11 10:16:34 -07006476 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 -04006477 goto failed;
6478 }
6479 len = PyList_GET_SIZE(tmp);
Pablo Galindoa5634c42020-09-16 19:42:00 +01006480 items = _Py_asdl_withitem_seq_new(len, arena);
Yury Selivanov75445082015-05-11 22:57:16 -04006481 if (items == NULL) goto failed;
6482 for (i = 0; i < len; i++) {
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07006483 withitem_ty val;
Serhiy Storchaka43c97312019-09-10 13:02:30 +03006484 PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
6485 Py_INCREF(tmp2);
Victor Stinner74419f02020-07-03 11:35:37 +02006486 res = obj2ast_withitem(state, tmp2, &val, arena);
Serhiy Storchaka43c97312019-09-10 13:02:30 +03006487 Py_DECREF(tmp2);
Yury Selivanov75445082015-05-11 22:57:16 -04006488 if (res != 0) goto failed;
Serhiy Storchakacf380602016-10-07 21:51:28 +03006489 if (len != PyList_GET_SIZE(tmp)) {
6490 PyErr_SetString(PyExc_RuntimeError, "AsyncWith field \"items\" changed size during iteration");
6491 goto failed;
6492 }
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07006493 asdl_seq_SET(items, i, val);
Yury Selivanov75445082015-05-11 22:57:16 -04006494 }
6495 Py_CLEAR(tmp);
Serhiy Storchakaf320be72018-01-25 10:49:40 +02006496 }
Victor Stinner74419f02020-07-03 11:35:37 +02006497 if (_PyObject_LookupAttr(obj, state->body, &tmp) < 0) {
Yury Selivanov75445082015-05-11 22:57:16 -04006498 return 1;
6499 }
Serhiy Storchakaf320be72018-01-25 10:49:40 +02006500 if (tmp == NULL) {
6501 PyErr_SetString(PyExc_TypeError, "required field \"body\" missing from AsyncWith");
6502 return 1;
6503 }
6504 else {
Yury Selivanov75445082015-05-11 22:57:16 -04006505 int res;
6506 Py_ssize_t len;
6507 Py_ssize_t i;
Yury Selivanov75445082015-05-11 22:57:16 -04006508 if (!PyList_Check(tmp)) {
Dino Viehlandac46eb42019-09-11 10:16:34 -07006509 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 -04006510 goto failed;
6511 }
6512 len = PyList_GET_SIZE(tmp);
Pablo Galindoa5634c42020-09-16 19:42:00 +01006513 body = _Py_asdl_stmt_seq_new(len, arena);
Yury Selivanov75445082015-05-11 22:57:16 -04006514 if (body == NULL) goto failed;
6515 for (i = 0; i < len; i++) {
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07006516 stmt_ty val;
Serhiy Storchaka43c97312019-09-10 13:02:30 +03006517 PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
6518 Py_INCREF(tmp2);
Victor Stinner74419f02020-07-03 11:35:37 +02006519 res = obj2ast_stmt(state, tmp2, &val, arena);
Serhiy Storchaka43c97312019-09-10 13:02:30 +03006520 Py_DECREF(tmp2);
Yury Selivanov75445082015-05-11 22:57:16 -04006521 if (res != 0) goto failed;
Serhiy Storchakacf380602016-10-07 21:51:28 +03006522 if (len != PyList_GET_SIZE(tmp)) {
6523 PyErr_SetString(PyExc_RuntimeError, "AsyncWith field \"body\" changed size during iteration");
6524 goto failed;
6525 }
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07006526 asdl_seq_SET(body, i, val);
Yury Selivanov75445082015-05-11 22:57:16 -04006527 }
6528 Py_CLEAR(tmp);
Yury Selivanov75445082015-05-11 22:57:16 -04006529 }
Victor Stinner74419f02020-07-03 11:35:37 +02006530 if (_PyObject_LookupAttr(obj, state->type_comment, &tmp) < 0) {
Guido van Rossumdcfcd142019-01-31 03:40:27 -08006531 return 1;
6532 }
6533 if (tmp == NULL || tmp == Py_None) {
6534 Py_CLEAR(tmp);
6535 type_comment = NULL;
6536 }
6537 else {
6538 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02006539 res = obj2ast_string(state, tmp, &type_comment, arena);
Guido van Rossumdcfcd142019-01-31 03:40:27 -08006540 if (res != 0) goto failed;
6541 Py_CLEAR(tmp);
6542 }
6543 *out = AsyncWith(items, body, type_comment, lineno, col_offset,
6544 end_lineno, end_col_offset, arena);
Yury Selivanov75445082015-05-11 22:57:16 -04006545 if (*out == NULL) goto failed;
6546 return 0;
6547 }
Victor Stinner74419f02020-07-03 11:35:37 +02006548 tp = state->Raise_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07006549 isinstance = PyObject_IsInstance(obj, tp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006550 if (isinstance == -1) {
6551 return 1;
6552 }
6553 if (isinstance) {
6554 expr_ty exc;
6555 expr_ty cause;
6556
Victor Stinner74419f02020-07-03 11:35:37 +02006557 if (_PyObject_LookupAttr(obj, state->exc, &tmp) < 0) {
Serhiy Storchakaf320be72018-01-25 10:49:40 +02006558 return 1;
6559 }
6560 if (tmp == NULL || tmp == Py_None) {
6561 Py_CLEAR(tmp);
6562 exc = NULL;
6563 }
6564 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006565 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02006566 res = obj2ast_expr(state, tmp, &exc, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006567 if (res != 0) goto failed;
Victor Stinner1acc1292013-07-27 00:03:47 +02006568 Py_CLEAR(tmp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006569 }
Victor Stinner74419f02020-07-03 11:35:37 +02006570 if (_PyObject_LookupAttr(obj, state->cause, &tmp) < 0) {
Serhiy Storchakaf320be72018-01-25 10:49:40 +02006571 return 1;
6572 }
6573 if (tmp == NULL || tmp == Py_None) {
6574 Py_CLEAR(tmp);
6575 cause = NULL;
6576 }
6577 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006578 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02006579 res = obj2ast_expr(state, tmp, &cause, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006580 if (res != 0) goto failed;
Victor Stinner1acc1292013-07-27 00:03:47 +02006581 Py_CLEAR(tmp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006582 }
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00006583 *out = Raise(exc, cause, lineno, col_offset, end_lineno,
6584 end_col_offset, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006585 if (*out == NULL) goto failed;
6586 return 0;
6587 }
Victor Stinner74419f02020-07-03 11:35:37 +02006588 tp = state->Try_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07006589 isinstance = PyObject_IsInstance(obj, tp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006590 if (isinstance == -1) {
6591 return 1;
6592 }
6593 if (isinstance) {
Pablo Galindoa5634c42020-09-16 19:42:00 +01006594 asdl_stmt_seq* body;
6595 asdl_excepthandler_seq* handlers;
6596 asdl_stmt_seq* orelse;
6597 asdl_stmt_seq* finalbody;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006598
Victor Stinner74419f02020-07-03 11:35:37 +02006599 if (_PyObject_LookupAttr(obj, state->body, &tmp) < 0) {
Serhiy Storchakaf320be72018-01-25 10:49:40 +02006600 return 1;
6601 }
6602 if (tmp == NULL) {
6603 PyErr_SetString(PyExc_TypeError, "required field \"body\" missing from Try");
6604 return 1;
6605 }
6606 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006607 int res;
6608 Py_ssize_t len;
6609 Py_ssize_t i;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006610 if (!PyList_Check(tmp)) {
Dino Viehlandac46eb42019-09-11 10:16:34 -07006611 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 +02006612 goto failed;
6613 }
6614 len = PyList_GET_SIZE(tmp);
Pablo Galindoa5634c42020-09-16 19:42:00 +01006615 body = _Py_asdl_stmt_seq_new(len, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006616 if (body == NULL) goto failed;
6617 for (i = 0; i < len; i++) {
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07006618 stmt_ty val;
Serhiy Storchaka43c97312019-09-10 13:02:30 +03006619 PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
6620 Py_INCREF(tmp2);
Victor Stinner74419f02020-07-03 11:35:37 +02006621 res = obj2ast_stmt(state, tmp2, &val, arena);
Serhiy Storchaka43c97312019-09-10 13:02:30 +03006622 Py_DECREF(tmp2);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006623 if (res != 0) goto failed;
Serhiy Storchakacf380602016-10-07 21:51:28 +03006624 if (len != PyList_GET_SIZE(tmp)) {
6625 PyErr_SetString(PyExc_RuntimeError, "Try field \"body\" changed size during iteration");
6626 goto failed;
6627 }
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07006628 asdl_seq_SET(body, i, val);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006629 }
Victor Stinner1acc1292013-07-27 00:03:47 +02006630 Py_CLEAR(tmp);
Serhiy Storchakaf320be72018-01-25 10:49:40 +02006631 }
Victor Stinner74419f02020-07-03 11:35:37 +02006632 if (_PyObject_LookupAttr(obj, state->handlers, &tmp) < 0) {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006633 return 1;
6634 }
Serhiy Storchakaf320be72018-01-25 10:49:40 +02006635 if (tmp == NULL) {
6636 PyErr_SetString(PyExc_TypeError, "required field \"handlers\" missing from Try");
6637 return 1;
6638 }
6639 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006640 int res;
6641 Py_ssize_t len;
6642 Py_ssize_t i;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006643 if (!PyList_Check(tmp)) {
Dino Viehlandac46eb42019-09-11 10:16:34 -07006644 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 +02006645 goto failed;
6646 }
6647 len = PyList_GET_SIZE(tmp);
Pablo Galindoa5634c42020-09-16 19:42:00 +01006648 handlers = _Py_asdl_excepthandler_seq_new(len, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006649 if (handlers == NULL) goto failed;
6650 for (i = 0; i < len; i++) {
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07006651 excepthandler_ty val;
Serhiy Storchaka43c97312019-09-10 13:02:30 +03006652 PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
6653 Py_INCREF(tmp2);
Victor Stinner74419f02020-07-03 11:35:37 +02006654 res = obj2ast_excepthandler(state, tmp2, &val, arena);
Serhiy Storchaka43c97312019-09-10 13:02:30 +03006655 Py_DECREF(tmp2);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006656 if (res != 0) goto failed;
Serhiy Storchakacf380602016-10-07 21:51:28 +03006657 if (len != PyList_GET_SIZE(tmp)) {
6658 PyErr_SetString(PyExc_RuntimeError, "Try field \"handlers\" changed size during iteration");
6659 goto failed;
6660 }
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07006661 asdl_seq_SET(handlers, i, val);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006662 }
Victor Stinner1acc1292013-07-27 00:03:47 +02006663 Py_CLEAR(tmp);
Serhiy Storchakaf320be72018-01-25 10:49:40 +02006664 }
Victor Stinner74419f02020-07-03 11:35:37 +02006665 if (_PyObject_LookupAttr(obj, state->orelse, &tmp) < 0) {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006666 return 1;
6667 }
Serhiy Storchakaf320be72018-01-25 10:49:40 +02006668 if (tmp == NULL) {
6669 PyErr_SetString(PyExc_TypeError, "required field \"orelse\" missing from Try");
6670 return 1;
6671 }
6672 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006673 int res;
6674 Py_ssize_t len;
6675 Py_ssize_t i;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006676 if (!PyList_Check(tmp)) {
Dino Viehlandac46eb42019-09-11 10:16:34 -07006677 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 +02006678 goto failed;
6679 }
6680 len = PyList_GET_SIZE(tmp);
Pablo Galindoa5634c42020-09-16 19:42:00 +01006681 orelse = _Py_asdl_stmt_seq_new(len, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006682 if (orelse == NULL) goto failed;
6683 for (i = 0; i < len; i++) {
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07006684 stmt_ty val;
Serhiy Storchaka43c97312019-09-10 13:02:30 +03006685 PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
6686 Py_INCREF(tmp2);
Victor Stinner74419f02020-07-03 11:35:37 +02006687 res = obj2ast_stmt(state, tmp2, &val, arena);
Serhiy Storchaka43c97312019-09-10 13:02:30 +03006688 Py_DECREF(tmp2);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006689 if (res != 0) goto failed;
Serhiy Storchakacf380602016-10-07 21:51:28 +03006690 if (len != PyList_GET_SIZE(tmp)) {
6691 PyErr_SetString(PyExc_RuntimeError, "Try field \"orelse\" changed size during iteration");
6692 goto failed;
6693 }
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07006694 asdl_seq_SET(orelse, i, val);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006695 }
Victor Stinner1acc1292013-07-27 00:03:47 +02006696 Py_CLEAR(tmp);
Serhiy Storchakaf320be72018-01-25 10:49:40 +02006697 }
Victor Stinner74419f02020-07-03 11:35:37 +02006698 if (_PyObject_LookupAttr(obj, state->finalbody, &tmp) < 0) {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006699 return 1;
6700 }
Serhiy Storchakaf320be72018-01-25 10:49:40 +02006701 if (tmp == NULL) {
6702 PyErr_SetString(PyExc_TypeError, "required field \"finalbody\" missing from Try");
6703 return 1;
6704 }
6705 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006706 int res;
6707 Py_ssize_t len;
6708 Py_ssize_t i;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006709 if (!PyList_Check(tmp)) {
Dino Viehlandac46eb42019-09-11 10:16:34 -07006710 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 +02006711 goto failed;
6712 }
6713 len = PyList_GET_SIZE(tmp);
Pablo Galindoa5634c42020-09-16 19:42:00 +01006714 finalbody = _Py_asdl_stmt_seq_new(len, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006715 if (finalbody == NULL) goto failed;
6716 for (i = 0; i < len; i++) {
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07006717 stmt_ty val;
Serhiy Storchaka43c97312019-09-10 13:02:30 +03006718 PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
6719 Py_INCREF(tmp2);
Victor Stinner74419f02020-07-03 11:35:37 +02006720 res = obj2ast_stmt(state, tmp2, &val, arena);
Serhiy Storchaka43c97312019-09-10 13:02:30 +03006721 Py_DECREF(tmp2);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006722 if (res != 0) goto failed;
Serhiy Storchakacf380602016-10-07 21:51:28 +03006723 if (len != PyList_GET_SIZE(tmp)) {
6724 PyErr_SetString(PyExc_RuntimeError, "Try field \"finalbody\" changed size during iteration");
6725 goto failed;
6726 }
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07006727 asdl_seq_SET(finalbody, i, val);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006728 }
Victor Stinner1acc1292013-07-27 00:03:47 +02006729 Py_CLEAR(tmp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006730 }
6731 *out = Try(body, handlers, orelse, finalbody, lineno, col_offset,
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00006732 end_lineno, end_col_offset, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006733 if (*out == NULL) goto failed;
6734 return 0;
6735 }
Victor Stinner74419f02020-07-03 11:35:37 +02006736 tp = state->Assert_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07006737 isinstance = PyObject_IsInstance(obj, tp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006738 if (isinstance == -1) {
6739 return 1;
6740 }
6741 if (isinstance) {
6742 expr_ty test;
6743 expr_ty msg;
6744
Victor Stinner74419f02020-07-03 11:35:37 +02006745 if (_PyObject_LookupAttr(obj, state->test, &tmp) < 0) {
Serhiy Storchakaf320be72018-01-25 10:49:40 +02006746 return 1;
6747 }
6748 if (tmp == NULL) {
6749 PyErr_SetString(PyExc_TypeError, "required field \"test\" missing from Assert");
6750 return 1;
6751 }
6752 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006753 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02006754 res = obj2ast_expr(state, tmp, &test, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006755 if (res != 0) goto failed;
Victor Stinner1acc1292013-07-27 00:03:47 +02006756 Py_CLEAR(tmp);
Serhiy Storchakaf320be72018-01-25 10:49:40 +02006757 }
Victor Stinner74419f02020-07-03 11:35:37 +02006758 if (_PyObject_LookupAttr(obj, state->msg, &tmp) < 0) {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006759 return 1;
6760 }
Serhiy Storchakaf320be72018-01-25 10:49:40 +02006761 if (tmp == NULL || tmp == Py_None) {
6762 Py_CLEAR(tmp);
6763 msg = NULL;
6764 }
6765 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006766 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02006767 res = obj2ast_expr(state, tmp, &msg, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006768 if (res != 0) goto failed;
Victor Stinner1acc1292013-07-27 00:03:47 +02006769 Py_CLEAR(tmp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006770 }
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00006771 *out = Assert(test, msg, lineno, col_offset, end_lineno,
6772 end_col_offset, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006773 if (*out == NULL) goto failed;
6774 return 0;
6775 }
Victor Stinner74419f02020-07-03 11:35:37 +02006776 tp = state->Import_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07006777 isinstance = PyObject_IsInstance(obj, tp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006778 if (isinstance == -1) {
6779 return 1;
6780 }
6781 if (isinstance) {
Pablo Galindoa5634c42020-09-16 19:42:00 +01006782 asdl_alias_seq* names;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006783
Victor Stinner74419f02020-07-03 11:35:37 +02006784 if (_PyObject_LookupAttr(obj, state->names, &tmp) < 0) {
Serhiy Storchakaf320be72018-01-25 10:49:40 +02006785 return 1;
6786 }
6787 if (tmp == NULL) {
6788 PyErr_SetString(PyExc_TypeError, "required field \"names\" missing from Import");
6789 return 1;
6790 }
6791 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006792 int res;
6793 Py_ssize_t len;
6794 Py_ssize_t i;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006795 if (!PyList_Check(tmp)) {
Dino Viehlandac46eb42019-09-11 10:16:34 -07006796 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 +02006797 goto failed;
6798 }
6799 len = PyList_GET_SIZE(tmp);
Pablo Galindoa5634c42020-09-16 19:42:00 +01006800 names = _Py_asdl_alias_seq_new(len, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006801 if (names == NULL) goto failed;
6802 for (i = 0; i < len; i++) {
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07006803 alias_ty val;
Serhiy Storchaka43c97312019-09-10 13:02:30 +03006804 PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
6805 Py_INCREF(tmp2);
Victor Stinner74419f02020-07-03 11:35:37 +02006806 res = obj2ast_alias(state, tmp2, &val, arena);
Serhiy Storchaka43c97312019-09-10 13:02:30 +03006807 Py_DECREF(tmp2);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006808 if (res != 0) goto failed;
Serhiy Storchakacf380602016-10-07 21:51:28 +03006809 if (len != PyList_GET_SIZE(tmp)) {
6810 PyErr_SetString(PyExc_RuntimeError, "Import field \"names\" changed size during iteration");
6811 goto failed;
6812 }
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07006813 asdl_seq_SET(names, i, val);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006814 }
Victor Stinner1acc1292013-07-27 00:03:47 +02006815 Py_CLEAR(tmp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006816 }
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00006817 *out = Import(names, lineno, col_offset, end_lineno, end_col_offset,
6818 arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006819 if (*out == NULL) goto failed;
6820 return 0;
6821 }
Victor Stinner74419f02020-07-03 11:35:37 +02006822 tp = state->ImportFrom_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07006823 isinstance = PyObject_IsInstance(obj, tp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006824 if (isinstance == -1) {
6825 return 1;
6826 }
6827 if (isinstance) {
6828 identifier module;
Pablo Galindoa5634c42020-09-16 19:42:00 +01006829 asdl_alias_seq* names;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006830 int level;
6831
Victor Stinner74419f02020-07-03 11:35:37 +02006832 if (_PyObject_LookupAttr(obj, state->module, &tmp) < 0) {
Serhiy Storchakaf320be72018-01-25 10:49:40 +02006833 return 1;
6834 }
6835 if (tmp == NULL || tmp == Py_None) {
6836 Py_CLEAR(tmp);
6837 module = NULL;
6838 }
6839 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006840 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02006841 res = obj2ast_identifier(state, tmp, &module, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006842 if (res != 0) goto failed;
Victor Stinner1acc1292013-07-27 00:03:47 +02006843 Py_CLEAR(tmp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006844 }
Victor Stinner74419f02020-07-03 11:35:37 +02006845 if (_PyObject_LookupAttr(obj, state->names, &tmp) < 0) {
Serhiy Storchakaf320be72018-01-25 10:49:40 +02006846 return 1;
6847 }
6848 if (tmp == NULL) {
6849 PyErr_SetString(PyExc_TypeError, "required field \"names\" missing from ImportFrom");
6850 return 1;
6851 }
6852 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006853 int res;
6854 Py_ssize_t len;
6855 Py_ssize_t i;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006856 if (!PyList_Check(tmp)) {
Dino Viehlandac46eb42019-09-11 10:16:34 -07006857 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 +02006858 goto failed;
6859 }
6860 len = PyList_GET_SIZE(tmp);
Pablo Galindoa5634c42020-09-16 19:42:00 +01006861 names = _Py_asdl_alias_seq_new(len, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006862 if (names == NULL) goto failed;
6863 for (i = 0; i < len; i++) {
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07006864 alias_ty val;
Serhiy Storchaka43c97312019-09-10 13:02:30 +03006865 PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
6866 Py_INCREF(tmp2);
Victor Stinner74419f02020-07-03 11:35:37 +02006867 res = obj2ast_alias(state, tmp2, &val, arena);
Serhiy Storchaka43c97312019-09-10 13:02:30 +03006868 Py_DECREF(tmp2);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006869 if (res != 0) goto failed;
Serhiy Storchakacf380602016-10-07 21:51:28 +03006870 if (len != PyList_GET_SIZE(tmp)) {
6871 PyErr_SetString(PyExc_RuntimeError, "ImportFrom field \"names\" changed size during iteration");
6872 goto failed;
6873 }
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07006874 asdl_seq_SET(names, i, val);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006875 }
Victor Stinner1acc1292013-07-27 00:03:47 +02006876 Py_CLEAR(tmp);
Serhiy Storchakaf320be72018-01-25 10:49:40 +02006877 }
Victor Stinner74419f02020-07-03 11:35:37 +02006878 if (_PyObject_LookupAttr(obj, state->level, &tmp) < 0) {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006879 return 1;
6880 }
Serhiy Storchakaf320be72018-01-25 10:49:40 +02006881 if (tmp == NULL || tmp == Py_None) {
6882 Py_CLEAR(tmp);
6883 level = 0;
6884 }
6885 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006886 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02006887 res = obj2ast_int(state, tmp, &level, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006888 if (res != 0) goto failed;
Victor Stinner1acc1292013-07-27 00:03:47 +02006889 Py_CLEAR(tmp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006890 }
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00006891 *out = ImportFrom(module, names, level, lineno, col_offset, end_lineno,
6892 end_col_offset, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006893 if (*out == NULL) goto failed;
6894 return 0;
6895 }
Victor Stinner74419f02020-07-03 11:35:37 +02006896 tp = state->Global_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07006897 isinstance = PyObject_IsInstance(obj, tp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006898 if (isinstance == -1) {
6899 return 1;
6900 }
6901 if (isinstance) {
Pablo Galindoa5634c42020-09-16 19:42:00 +01006902 asdl_identifier_seq* names;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006903
Victor Stinner74419f02020-07-03 11:35:37 +02006904 if (_PyObject_LookupAttr(obj, state->names, &tmp) < 0) {
Serhiy Storchakaf320be72018-01-25 10:49:40 +02006905 return 1;
6906 }
6907 if (tmp == NULL) {
6908 PyErr_SetString(PyExc_TypeError, "required field \"names\" missing from Global");
6909 return 1;
6910 }
6911 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006912 int res;
6913 Py_ssize_t len;
6914 Py_ssize_t i;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006915 if (!PyList_Check(tmp)) {
Dino Viehlandac46eb42019-09-11 10:16:34 -07006916 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 +02006917 goto failed;
6918 }
6919 len = PyList_GET_SIZE(tmp);
Pablo Galindoa5634c42020-09-16 19:42:00 +01006920 names = _Py_asdl_identifier_seq_new(len, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006921 if (names == NULL) goto failed;
6922 for (i = 0; i < len; i++) {
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07006923 identifier val;
Serhiy Storchaka43c97312019-09-10 13:02:30 +03006924 PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
6925 Py_INCREF(tmp2);
Victor Stinner74419f02020-07-03 11:35:37 +02006926 res = obj2ast_identifier(state, tmp2, &val, arena);
Serhiy Storchaka43c97312019-09-10 13:02:30 +03006927 Py_DECREF(tmp2);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006928 if (res != 0) goto failed;
Serhiy Storchakacf380602016-10-07 21:51:28 +03006929 if (len != PyList_GET_SIZE(tmp)) {
6930 PyErr_SetString(PyExc_RuntimeError, "Global field \"names\" changed size during iteration");
6931 goto failed;
6932 }
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07006933 asdl_seq_SET(names, i, val);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006934 }
Victor Stinner1acc1292013-07-27 00:03:47 +02006935 Py_CLEAR(tmp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006936 }
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00006937 *out = Global(names, lineno, col_offset, end_lineno, end_col_offset,
6938 arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006939 if (*out == NULL) goto failed;
6940 return 0;
6941 }
Victor Stinner74419f02020-07-03 11:35:37 +02006942 tp = state->Nonlocal_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07006943 isinstance = PyObject_IsInstance(obj, tp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006944 if (isinstance == -1) {
6945 return 1;
6946 }
6947 if (isinstance) {
Pablo Galindoa5634c42020-09-16 19:42:00 +01006948 asdl_identifier_seq* names;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006949
Victor Stinner74419f02020-07-03 11:35:37 +02006950 if (_PyObject_LookupAttr(obj, state->names, &tmp) < 0) {
Serhiy Storchakaf320be72018-01-25 10:49:40 +02006951 return 1;
6952 }
6953 if (tmp == NULL) {
6954 PyErr_SetString(PyExc_TypeError, "required field \"names\" missing from Nonlocal");
6955 return 1;
6956 }
6957 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006958 int res;
6959 Py_ssize_t len;
6960 Py_ssize_t i;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006961 if (!PyList_Check(tmp)) {
Dino Viehlandac46eb42019-09-11 10:16:34 -07006962 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 +02006963 goto failed;
6964 }
6965 len = PyList_GET_SIZE(tmp);
Pablo Galindoa5634c42020-09-16 19:42:00 +01006966 names = _Py_asdl_identifier_seq_new(len, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006967 if (names == NULL) goto failed;
6968 for (i = 0; i < len; i++) {
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07006969 identifier val;
Serhiy Storchaka43c97312019-09-10 13:02:30 +03006970 PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
6971 Py_INCREF(tmp2);
Victor Stinner74419f02020-07-03 11:35:37 +02006972 res = obj2ast_identifier(state, tmp2, &val, arena);
Serhiy Storchaka43c97312019-09-10 13:02:30 +03006973 Py_DECREF(tmp2);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006974 if (res != 0) goto failed;
Serhiy Storchakacf380602016-10-07 21:51:28 +03006975 if (len != PyList_GET_SIZE(tmp)) {
6976 PyErr_SetString(PyExc_RuntimeError, "Nonlocal field \"names\" changed size during iteration");
6977 goto failed;
6978 }
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07006979 asdl_seq_SET(names, i, val);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006980 }
Victor Stinner1acc1292013-07-27 00:03:47 +02006981 Py_CLEAR(tmp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006982 }
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00006983 *out = Nonlocal(names, lineno, col_offset, end_lineno, end_col_offset,
6984 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->Expr_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) {
6994 expr_ty value;
6995
Victor Stinner74419f02020-07-03 11:35:37 +02006996 if (_PyObject_LookupAttr(obj, state->value, &tmp) < 0) {
Serhiy Storchakaf320be72018-01-25 10:49:40 +02006997 return 1;
6998 }
6999 if (tmp == NULL) {
7000 PyErr_SetString(PyExc_TypeError, "required field \"value\" missing from Expr");
7001 return 1;
7002 }
7003 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007004 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02007005 res = obj2ast_expr(state, tmp, &value, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007006 if (res != 0) goto failed;
Victor Stinner1acc1292013-07-27 00:03:47 +02007007 Py_CLEAR(tmp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007008 }
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00007009 *out = Expr(value, lineno, col_offset, end_lineno, end_col_offset,
7010 arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007011 if (*out == NULL) goto failed;
7012 return 0;
7013 }
Victor Stinner74419f02020-07-03 11:35:37 +02007014 tp = state->Pass_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07007015 isinstance = PyObject_IsInstance(obj, tp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007016 if (isinstance == -1) {
7017 return 1;
7018 }
7019 if (isinstance) {
7020
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00007021 *out = Pass(lineno, col_offset, end_lineno, end_col_offset, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007022 if (*out == NULL) goto failed;
7023 return 0;
7024 }
Victor Stinner74419f02020-07-03 11:35:37 +02007025 tp = state->Break_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07007026 isinstance = PyObject_IsInstance(obj, tp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007027 if (isinstance == -1) {
7028 return 1;
7029 }
7030 if (isinstance) {
7031
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00007032 *out = Break(lineno, col_offset, end_lineno, end_col_offset, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007033 if (*out == NULL) goto failed;
7034 return 0;
7035 }
Victor Stinner74419f02020-07-03 11:35:37 +02007036 tp = state->Continue_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07007037 isinstance = PyObject_IsInstance(obj, tp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007038 if (isinstance == -1) {
7039 return 1;
7040 }
7041 if (isinstance) {
7042
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00007043 *out = Continue(lineno, col_offset, end_lineno, end_col_offset, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007044 if (*out == NULL) goto failed;
7045 return 0;
7046 }
7047
7048 PyErr_Format(PyExc_TypeError, "expected some sort of stmt, but got %R", obj);
7049 failed:
7050 Py_XDECREF(tmp);
7051 return 1;
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00007052}
7053
7054int
Victor Stinner74419f02020-07-03 11:35:37 +02007055obj2ast_expr(astmodulestate *state, PyObject* obj, expr_ty* out, PyArena* arena)
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00007056{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007057 int isinstance;
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00007058
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007059 PyObject *tmp = NULL;
Dino Viehlandac46eb42019-09-11 10:16:34 -07007060 PyObject *tp;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007061 int lineno;
7062 int col_offset;
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00007063 int end_lineno;
7064 int end_col_offset;
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00007065
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007066 if (obj == Py_None) {
7067 *out = NULL;
7068 return 0;
7069 }
Victor Stinner74419f02020-07-03 11:35:37 +02007070 if (_PyObject_LookupAttr(obj, state->lineno, &tmp) < 0) {
Serhiy Storchakaf320be72018-01-25 10:49:40 +02007071 return 1;
7072 }
7073 if (tmp == NULL) {
7074 PyErr_SetString(PyExc_TypeError, "required field \"lineno\" missing from expr");
7075 return 1;
7076 }
7077 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007078 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02007079 res = obj2ast_int(state, tmp, &lineno, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007080 if (res != 0) goto failed;
Victor Stinner1acc1292013-07-27 00:03:47 +02007081 Py_CLEAR(tmp);
Serhiy Storchakaf320be72018-01-25 10:49:40 +02007082 }
Victor Stinner74419f02020-07-03 11:35:37 +02007083 if (_PyObject_LookupAttr(obj, state->col_offset, &tmp) < 0) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00007084 return 1;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007085 }
Serhiy Storchakaf320be72018-01-25 10:49:40 +02007086 if (tmp == NULL) {
7087 PyErr_SetString(PyExc_TypeError, "required field \"col_offset\" missing from expr");
7088 return 1;
7089 }
7090 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007091 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02007092 res = obj2ast_int(state, tmp, &col_offset, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007093 if (res != 0) goto failed;
Victor Stinner1acc1292013-07-27 00:03:47 +02007094 Py_CLEAR(tmp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007095 }
Victor Stinner74419f02020-07-03 11:35:37 +02007096 if (_PyObject_LookupAttr(obj, state->end_lineno, &tmp) < 0) {
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00007097 return 1;
7098 }
7099 if (tmp == NULL || tmp == Py_None) {
7100 Py_CLEAR(tmp);
7101 end_lineno = 0;
7102 }
7103 else {
7104 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02007105 res = obj2ast_int(state, tmp, &end_lineno, arena);
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00007106 if (res != 0) goto failed;
7107 Py_CLEAR(tmp);
7108 }
Victor Stinner74419f02020-07-03 11:35:37 +02007109 if (_PyObject_LookupAttr(obj, state->end_col_offset, &tmp) < 0) {
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00007110 return 1;
7111 }
7112 if (tmp == NULL || tmp == Py_None) {
7113 Py_CLEAR(tmp);
7114 end_col_offset = 0;
7115 }
7116 else {
7117 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02007118 res = obj2ast_int(state, tmp, &end_col_offset, arena);
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00007119 if (res != 0) goto failed;
7120 Py_CLEAR(tmp);
7121 }
Victor Stinner74419f02020-07-03 11:35:37 +02007122 tp = state->BoolOp_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07007123 isinstance = PyObject_IsInstance(obj, tp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007124 if (isinstance == -1) {
7125 return 1;
7126 }
7127 if (isinstance) {
7128 boolop_ty op;
Pablo Galindoa5634c42020-09-16 19:42:00 +01007129 asdl_expr_seq* values;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007130
Victor Stinner74419f02020-07-03 11:35:37 +02007131 if (_PyObject_LookupAttr(obj, state->op, &tmp) < 0) {
Serhiy Storchakaf320be72018-01-25 10:49:40 +02007132 return 1;
7133 }
7134 if (tmp == NULL) {
7135 PyErr_SetString(PyExc_TypeError, "required field \"op\" missing from BoolOp");
7136 return 1;
7137 }
7138 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007139 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02007140 res = obj2ast_boolop(state, tmp, &op, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007141 if (res != 0) goto failed;
Victor Stinner1acc1292013-07-27 00:03:47 +02007142 Py_CLEAR(tmp);
Serhiy Storchakaf320be72018-01-25 10:49:40 +02007143 }
Victor Stinner74419f02020-07-03 11:35:37 +02007144 if (_PyObject_LookupAttr(obj, state->values, &tmp) < 0) {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007145 return 1;
7146 }
Serhiy Storchakaf320be72018-01-25 10:49:40 +02007147 if (tmp == NULL) {
7148 PyErr_SetString(PyExc_TypeError, "required field \"values\" missing from BoolOp");
7149 return 1;
7150 }
7151 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007152 int res;
7153 Py_ssize_t len;
7154 Py_ssize_t i;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007155 if (!PyList_Check(tmp)) {
Dino Viehlandac46eb42019-09-11 10:16:34 -07007156 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 +02007157 goto failed;
7158 }
7159 len = PyList_GET_SIZE(tmp);
Pablo Galindoa5634c42020-09-16 19:42:00 +01007160 values = _Py_asdl_expr_seq_new(len, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007161 if (values == NULL) goto failed;
7162 for (i = 0; i < len; i++) {
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07007163 expr_ty val;
Serhiy Storchaka43c97312019-09-10 13:02:30 +03007164 PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
7165 Py_INCREF(tmp2);
Victor Stinner74419f02020-07-03 11:35:37 +02007166 res = obj2ast_expr(state, tmp2, &val, arena);
Serhiy Storchaka43c97312019-09-10 13:02:30 +03007167 Py_DECREF(tmp2);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007168 if (res != 0) goto failed;
Serhiy Storchakacf380602016-10-07 21:51:28 +03007169 if (len != PyList_GET_SIZE(tmp)) {
7170 PyErr_SetString(PyExc_RuntimeError, "BoolOp field \"values\" changed size during iteration");
7171 goto failed;
7172 }
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07007173 asdl_seq_SET(values, i, val);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007174 }
Victor Stinner1acc1292013-07-27 00:03:47 +02007175 Py_CLEAR(tmp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007176 }
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00007177 *out = BoolOp(op, values, lineno, col_offset, end_lineno,
7178 end_col_offset, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007179 if (*out == NULL) goto failed;
7180 return 0;
7181 }
Victor Stinner74419f02020-07-03 11:35:37 +02007182 tp = state->NamedExpr_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07007183 isinstance = PyObject_IsInstance(obj, tp);
Emily Morehouse8f59ee02019-01-24 16:49:56 -07007184 if (isinstance == -1) {
7185 return 1;
7186 }
7187 if (isinstance) {
7188 expr_ty target;
7189 expr_ty value;
7190
Victor Stinner74419f02020-07-03 11:35:37 +02007191 if (_PyObject_LookupAttr(obj, state->target, &tmp) < 0) {
Emily Morehouse8f59ee02019-01-24 16:49:56 -07007192 return 1;
7193 }
7194 if (tmp == NULL) {
7195 PyErr_SetString(PyExc_TypeError, "required field \"target\" missing from NamedExpr");
7196 return 1;
7197 }
7198 else {
7199 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02007200 res = obj2ast_expr(state, tmp, &target, arena);
Emily Morehouse8f59ee02019-01-24 16:49:56 -07007201 if (res != 0) goto failed;
7202 Py_CLEAR(tmp);
7203 }
Victor Stinner74419f02020-07-03 11:35:37 +02007204 if (_PyObject_LookupAttr(obj, state->value, &tmp) < 0) {
Emily Morehouse8f59ee02019-01-24 16:49:56 -07007205 return 1;
7206 }
7207 if (tmp == NULL) {
7208 PyErr_SetString(PyExc_TypeError, "required field \"value\" missing from NamedExpr");
7209 return 1;
7210 }
7211 else {
7212 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02007213 res = obj2ast_expr(state, tmp, &value, arena);
Emily Morehouse8f59ee02019-01-24 16:49:56 -07007214 if (res != 0) goto failed;
7215 Py_CLEAR(tmp);
7216 }
7217 *out = NamedExpr(target, value, lineno, col_offset, end_lineno,
7218 end_col_offset, arena);
7219 if (*out == NULL) goto failed;
7220 return 0;
7221 }
Victor Stinner74419f02020-07-03 11:35:37 +02007222 tp = state->BinOp_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07007223 isinstance = PyObject_IsInstance(obj, tp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007224 if (isinstance == -1) {
7225 return 1;
7226 }
7227 if (isinstance) {
7228 expr_ty left;
7229 operator_ty op;
7230 expr_ty right;
7231
Victor Stinner74419f02020-07-03 11:35:37 +02007232 if (_PyObject_LookupAttr(obj, state->left, &tmp) < 0) {
Serhiy Storchakaf320be72018-01-25 10:49:40 +02007233 return 1;
7234 }
7235 if (tmp == NULL) {
7236 PyErr_SetString(PyExc_TypeError, "required field \"left\" missing from BinOp");
7237 return 1;
7238 }
7239 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007240 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02007241 res = obj2ast_expr(state, tmp, &left, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007242 if (res != 0) goto failed;
Victor Stinner1acc1292013-07-27 00:03:47 +02007243 Py_CLEAR(tmp);
Serhiy Storchakaf320be72018-01-25 10:49:40 +02007244 }
Victor Stinner74419f02020-07-03 11:35:37 +02007245 if (_PyObject_LookupAttr(obj, state->op, &tmp) < 0) {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007246 return 1;
7247 }
Serhiy Storchakaf320be72018-01-25 10:49:40 +02007248 if (tmp == NULL) {
7249 PyErr_SetString(PyExc_TypeError, "required field \"op\" missing from BinOp");
7250 return 1;
7251 }
7252 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007253 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02007254 res = obj2ast_operator(state, tmp, &op, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007255 if (res != 0) goto failed;
Victor Stinner1acc1292013-07-27 00:03:47 +02007256 Py_CLEAR(tmp);
Serhiy Storchakaf320be72018-01-25 10:49:40 +02007257 }
Victor Stinner74419f02020-07-03 11:35:37 +02007258 if (_PyObject_LookupAttr(obj, state->right, &tmp) < 0) {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007259 return 1;
7260 }
Serhiy Storchakaf320be72018-01-25 10:49:40 +02007261 if (tmp == NULL) {
7262 PyErr_SetString(PyExc_TypeError, "required field \"right\" missing from BinOp");
7263 return 1;
7264 }
7265 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007266 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02007267 res = obj2ast_expr(state, tmp, &right, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007268 if (res != 0) goto failed;
Victor Stinner1acc1292013-07-27 00:03:47 +02007269 Py_CLEAR(tmp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007270 }
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00007271 *out = BinOp(left, op, right, lineno, col_offset, end_lineno,
7272 end_col_offset, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007273 if (*out == NULL) goto failed;
7274 return 0;
7275 }
Victor Stinner74419f02020-07-03 11:35:37 +02007276 tp = state->UnaryOp_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07007277 isinstance = PyObject_IsInstance(obj, tp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007278 if (isinstance == -1) {
7279 return 1;
7280 }
7281 if (isinstance) {
7282 unaryop_ty op;
7283 expr_ty operand;
7284
Victor Stinner74419f02020-07-03 11:35:37 +02007285 if (_PyObject_LookupAttr(obj, state->op, &tmp) < 0) {
Serhiy Storchakaf320be72018-01-25 10:49:40 +02007286 return 1;
7287 }
7288 if (tmp == NULL) {
7289 PyErr_SetString(PyExc_TypeError, "required field \"op\" missing from UnaryOp");
7290 return 1;
7291 }
7292 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007293 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02007294 res = obj2ast_unaryop(state, tmp, &op, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007295 if (res != 0) goto failed;
Victor Stinner1acc1292013-07-27 00:03:47 +02007296 Py_CLEAR(tmp);
Serhiy Storchakaf320be72018-01-25 10:49:40 +02007297 }
Victor Stinner74419f02020-07-03 11:35:37 +02007298 if (_PyObject_LookupAttr(obj, state->operand, &tmp) < 0) {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007299 return 1;
7300 }
Serhiy Storchakaf320be72018-01-25 10:49:40 +02007301 if (tmp == NULL) {
7302 PyErr_SetString(PyExc_TypeError, "required field \"operand\" missing from UnaryOp");
7303 return 1;
7304 }
7305 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007306 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02007307 res = obj2ast_expr(state, tmp, &operand, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007308 if (res != 0) goto failed;
Victor Stinner1acc1292013-07-27 00:03:47 +02007309 Py_CLEAR(tmp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007310 }
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00007311 *out = UnaryOp(op, operand, lineno, col_offset, end_lineno,
7312 end_col_offset, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007313 if (*out == NULL) goto failed;
7314 return 0;
7315 }
Victor Stinner74419f02020-07-03 11:35:37 +02007316 tp = state->Lambda_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07007317 isinstance = PyObject_IsInstance(obj, tp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007318 if (isinstance == -1) {
7319 return 1;
7320 }
7321 if (isinstance) {
7322 arguments_ty args;
7323 expr_ty body;
7324
Victor Stinner74419f02020-07-03 11:35:37 +02007325 if (_PyObject_LookupAttr(obj, state->args, &tmp) < 0) {
Serhiy Storchakaf320be72018-01-25 10:49:40 +02007326 return 1;
7327 }
7328 if (tmp == NULL) {
7329 PyErr_SetString(PyExc_TypeError, "required field \"args\" missing from Lambda");
7330 return 1;
7331 }
7332 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007333 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02007334 res = obj2ast_arguments(state, tmp, &args, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007335 if (res != 0) goto failed;
Victor Stinner1acc1292013-07-27 00:03:47 +02007336 Py_CLEAR(tmp);
Serhiy Storchakaf320be72018-01-25 10:49:40 +02007337 }
Victor Stinner74419f02020-07-03 11:35:37 +02007338 if (_PyObject_LookupAttr(obj, state->body, &tmp) < 0) {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007339 return 1;
7340 }
Serhiy Storchakaf320be72018-01-25 10:49:40 +02007341 if (tmp == NULL) {
7342 PyErr_SetString(PyExc_TypeError, "required field \"body\" missing from Lambda");
7343 return 1;
7344 }
7345 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007346 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02007347 res = obj2ast_expr(state, tmp, &body, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007348 if (res != 0) goto failed;
Victor Stinner1acc1292013-07-27 00:03:47 +02007349 Py_CLEAR(tmp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007350 }
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00007351 *out = Lambda(args, body, lineno, col_offset, end_lineno,
7352 end_col_offset, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007353 if (*out == NULL) goto failed;
7354 return 0;
7355 }
Victor Stinner74419f02020-07-03 11:35:37 +02007356 tp = state->IfExp_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07007357 isinstance = PyObject_IsInstance(obj, tp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007358 if (isinstance == -1) {
7359 return 1;
7360 }
7361 if (isinstance) {
7362 expr_ty test;
7363 expr_ty body;
7364 expr_ty orelse;
7365
Victor Stinner74419f02020-07-03 11:35:37 +02007366 if (_PyObject_LookupAttr(obj, state->test, &tmp) < 0) {
Serhiy Storchakaf320be72018-01-25 10:49:40 +02007367 return 1;
7368 }
7369 if (tmp == NULL) {
7370 PyErr_SetString(PyExc_TypeError, "required field \"test\" missing from IfExp");
7371 return 1;
7372 }
7373 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007374 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02007375 res = obj2ast_expr(state, tmp, &test, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007376 if (res != 0) goto failed;
Victor Stinner1acc1292013-07-27 00:03:47 +02007377 Py_CLEAR(tmp);
Serhiy Storchakaf320be72018-01-25 10:49:40 +02007378 }
Victor Stinner74419f02020-07-03 11:35:37 +02007379 if (_PyObject_LookupAttr(obj, state->body, &tmp) < 0) {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007380 return 1;
7381 }
Serhiy Storchakaf320be72018-01-25 10:49:40 +02007382 if (tmp == NULL) {
7383 PyErr_SetString(PyExc_TypeError, "required field \"body\" missing from IfExp");
7384 return 1;
7385 }
7386 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007387 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02007388 res = obj2ast_expr(state, tmp, &body, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007389 if (res != 0) goto failed;
Victor Stinner1acc1292013-07-27 00:03:47 +02007390 Py_CLEAR(tmp);
Serhiy Storchakaf320be72018-01-25 10:49:40 +02007391 }
Victor Stinner74419f02020-07-03 11:35:37 +02007392 if (_PyObject_LookupAttr(obj, state->orelse, &tmp) < 0) {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007393 return 1;
7394 }
Serhiy Storchakaf320be72018-01-25 10:49:40 +02007395 if (tmp == NULL) {
7396 PyErr_SetString(PyExc_TypeError, "required field \"orelse\" missing from IfExp");
7397 return 1;
7398 }
7399 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007400 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02007401 res = obj2ast_expr(state, tmp, &orelse, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007402 if (res != 0) goto failed;
Victor Stinner1acc1292013-07-27 00:03:47 +02007403 Py_CLEAR(tmp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007404 }
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00007405 *out = IfExp(test, body, orelse, lineno, col_offset, end_lineno,
7406 end_col_offset, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007407 if (*out == NULL) goto failed;
7408 return 0;
7409 }
Victor Stinner74419f02020-07-03 11:35:37 +02007410 tp = state->Dict_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07007411 isinstance = PyObject_IsInstance(obj, tp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007412 if (isinstance == -1) {
7413 return 1;
7414 }
7415 if (isinstance) {
Pablo Galindoa5634c42020-09-16 19:42:00 +01007416 asdl_expr_seq* keys;
7417 asdl_expr_seq* values;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007418
Victor Stinner74419f02020-07-03 11:35:37 +02007419 if (_PyObject_LookupAttr(obj, state->keys, &tmp) < 0) {
Serhiy Storchakaf320be72018-01-25 10:49:40 +02007420 return 1;
7421 }
7422 if (tmp == NULL) {
7423 PyErr_SetString(PyExc_TypeError, "required field \"keys\" missing from Dict");
7424 return 1;
7425 }
7426 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007427 int res;
7428 Py_ssize_t len;
7429 Py_ssize_t i;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007430 if (!PyList_Check(tmp)) {
Dino Viehlandac46eb42019-09-11 10:16:34 -07007431 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 +02007432 goto failed;
7433 }
7434 len = PyList_GET_SIZE(tmp);
Pablo Galindoa5634c42020-09-16 19:42:00 +01007435 keys = _Py_asdl_expr_seq_new(len, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007436 if (keys == NULL) goto failed;
7437 for (i = 0; i < len; i++) {
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07007438 expr_ty val;
Serhiy Storchaka43c97312019-09-10 13:02:30 +03007439 PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
7440 Py_INCREF(tmp2);
Victor Stinner74419f02020-07-03 11:35:37 +02007441 res = obj2ast_expr(state, tmp2, &val, arena);
Serhiy Storchaka43c97312019-09-10 13:02:30 +03007442 Py_DECREF(tmp2);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007443 if (res != 0) goto failed;
Serhiy Storchakacf380602016-10-07 21:51:28 +03007444 if (len != PyList_GET_SIZE(tmp)) {
7445 PyErr_SetString(PyExc_RuntimeError, "Dict field \"keys\" changed size during iteration");
7446 goto failed;
7447 }
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07007448 asdl_seq_SET(keys, i, val);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007449 }
Victor Stinner1acc1292013-07-27 00:03:47 +02007450 Py_CLEAR(tmp);
Serhiy Storchakaf320be72018-01-25 10:49:40 +02007451 }
Victor Stinner74419f02020-07-03 11:35:37 +02007452 if (_PyObject_LookupAttr(obj, state->values, &tmp) < 0) {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007453 return 1;
7454 }
Serhiy Storchakaf320be72018-01-25 10:49:40 +02007455 if (tmp == NULL) {
7456 PyErr_SetString(PyExc_TypeError, "required field \"values\" missing from Dict");
7457 return 1;
7458 }
7459 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007460 int res;
7461 Py_ssize_t len;
7462 Py_ssize_t i;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007463 if (!PyList_Check(tmp)) {
Dino Viehlandac46eb42019-09-11 10:16:34 -07007464 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 +02007465 goto failed;
7466 }
7467 len = PyList_GET_SIZE(tmp);
Pablo Galindoa5634c42020-09-16 19:42:00 +01007468 values = _Py_asdl_expr_seq_new(len, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007469 if (values == NULL) goto failed;
7470 for (i = 0; i < len; i++) {
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07007471 expr_ty val;
Serhiy Storchaka43c97312019-09-10 13:02:30 +03007472 PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
7473 Py_INCREF(tmp2);
Victor Stinner74419f02020-07-03 11:35:37 +02007474 res = obj2ast_expr(state, tmp2, &val, arena);
Serhiy Storchaka43c97312019-09-10 13:02:30 +03007475 Py_DECREF(tmp2);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007476 if (res != 0) goto failed;
Serhiy Storchakacf380602016-10-07 21:51:28 +03007477 if (len != PyList_GET_SIZE(tmp)) {
7478 PyErr_SetString(PyExc_RuntimeError, "Dict field \"values\" changed size during iteration");
7479 goto failed;
7480 }
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07007481 asdl_seq_SET(values, i, val);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007482 }
Victor Stinner1acc1292013-07-27 00:03:47 +02007483 Py_CLEAR(tmp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007484 }
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00007485 *out = Dict(keys, values, lineno, col_offset, end_lineno,
7486 end_col_offset, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007487 if (*out == NULL) goto failed;
7488 return 0;
7489 }
Victor Stinner74419f02020-07-03 11:35:37 +02007490 tp = state->Set_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07007491 isinstance = PyObject_IsInstance(obj, tp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007492 if (isinstance == -1) {
7493 return 1;
7494 }
7495 if (isinstance) {
Pablo Galindoa5634c42020-09-16 19:42:00 +01007496 asdl_expr_seq* elts;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007497
Victor Stinner74419f02020-07-03 11:35:37 +02007498 if (_PyObject_LookupAttr(obj, state->elts, &tmp) < 0) {
Serhiy Storchakaf320be72018-01-25 10:49:40 +02007499 return 1;
7500 }
7501 if (tmp == NULL) {
7502 PyErr_SetString(PyExc_TypeError, "required field \"elts\" missing from Set");
7503 return 1;
7504 }
7505 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007506 int res;
7507 Py_ssize_t len;
7508 Py_ssize_t i;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007509 if (!PyList_Check(tmp)) {
Dino Viehlandac46eb42019-09-11 10:16:34 -07007510 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 +02007511 goto failed;
7512 }
7513 len = PyList_GET_SIZE(tmp);
Pablo Galindoa5634c42020-09-16 19:42:00 +01007514 elts = _Py_asdl_expr_seq_new(len, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007515 if (elts == NULL) goto failed;
7516 for (i = 0; i < len; i++) {
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07007517 expr_ty val;
Serhiy Storchaka43c97312019-09-10 13:02:30 +03007518 PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
7519 Py_INCREF(tmp2);
Victor Stinner74419f02020-07-03 11:35:37 +02007520 res = obj2ast_expr(state, tmp2, &val, arena);
Serhiy Storchaka43c97312019-09-10 13:02:30 +03007521 Py_DECREF(tmp2);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007522 if (res != 0) goto failed;
Serhiy Storchakacf380602016-10-07 21:51:28 +03007523 if (len != PyList_GET_SIZE(tmp)) {
7524 PyErr_SetString(PyExc_RuntimeError, "Set field \"elts\" changed size during iteration");
7525 goto failed;
7526 }
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07007527 asdl_seq_SET(elts, i, val);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007528 }
Victor Stinner1acc1292013-07-27 00:03:47 +02007529 Py_CLEAR(tmp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007530 }
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00007531 *out = Set(elts, lineno, col_offset, end_lineno, end_col_offset, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007532 if (*out == NULL) goto failed;
7533 return 0;
7534 }
Victor Stinner74419f02020-07-03 11:35:37 +02007535 tp = state->ListComp_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07007536 isinstance = PyObject_IsInstance(obj, tp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007537 if (isinstance == -1) {
7538 return 1;
7539 }
7540 if (isinstance) {
7541 expr_ty elt;
Pablo Galindoa5634c42020-09-16 19:42:00 +01007542 asdl_comprehension_seq* generators;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007543
Victor Stinner74419f02020-07-03 11:35:37 +02007544 if (_PyObject_LookupAttr(obj, state->elt, &tmp) < 0) {
Serhiy Storchakaf320be72018-01-25 10:49:40 +02007545 return 1;
7546 }
7547 if (tmp == NULL) {
7548 PyErr_SetString(PyExc_TypeError, "required field \"elt\" missing from ListComp");
7549 return 1;
7550 }
7551 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007552 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02007553 res = obj2ast_expr(state, tmp, &elt, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007554 if (res != 0) goto failed;
Victor Stinner1acc1292013-07-27 00:03:47 +02007555 Py_CLEAR(tmp);
Serhiy Storchakaf320be72018-01-25 10:49:40 +02007556 }
Victor Stinner74419f02020-07-03 11:35:37 +02007557 if (_PyObject_LookupAttr(obj, state->generators, &tmp) < 0) {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007558 return 1;
7559 }
Serhiy Storchakaf320be72018-01-25 10:49:40 +02007560 if (tmp == NULL) {
7561 PyErr_SetString(PyExc_TypeError, "required field \"generators\" missing from ListComp");
7562 return 1;
7563 }
7564 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007565 int res;
7566 Py_ssize_t len;
7567 Py_ssize_t i;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007568 if (!PyList_Check(tmp)) {
Dino Viehlandac46eb42019-09-11 10:16:34 -07007569 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 +02007570 goto failed;
7571 }
7572 len = PyList_GET_SIZE(tmp);
Pablo Galindoa5634c42020-09-16 19:42:00 +01007573 generators = _Py_asdl_comprehension_seq_new(len, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007574 if (generators == NULL) goto failed;
7575 for (i = 0; i < len; i++) {
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07007576 comprehension_ty val;
Serhiy Storchaka43c97312019-09-10 13:02:30 +03007577 PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
7578 Py_INCREF(tmp2);
Victor Stinner74419f02020-07-03 11:35:37 +02007579 res = obj2ast_comprehension(state, tmp2, &val, arena);
Serhiy Storchaka43c97312019-09-10 13:02:30 +03007580 Py_DECREF(tmp2);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007581 if (res != 0) goto failed;
Serhiy Storchakacf380602016-10-07 21:51:28 +03007582 if (len != PyList_GET_SIZE(tmp)) {
7583 PyErr_SetString(PyExc_RuntimeError, "ListComp field \"generators\" changed size during iteration");
7584 goto failed;
7585 }
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07007586 asdl_seq_SET(generators, i, val);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007587 }
Victor Stinner1acc1292013-07-27 00:03:47 +02007588 Py_CLEAR(tmp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007589 }
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00007590 *out = ListComp(elt, generators, lineno, col_offset, end_lineno,
7591 end_col_offset, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007592 if (*out == NULL) goto failed;
7593 return 0;
7594 }
Victor Stinner74419f02020-07-03 11:35:37 +02007595 tp = state->SetComp_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07007596 isinstance = PyObject_IsInstance(obj, tp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007597 if (isinstance == -1) {
7598 return 1;
7599 }
7600 if (isinstance) {
7601 expr_ty elt;
Pablo Galindoa5634c42020-09-16 19:42:00 +01007602 asdl_comprehension_seq* generators;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007603
Victor Stinner74419f02020-07-03 11:35:37 +02007604 if (_PyObject_LookupAttr(obj, state->elt, &tmp) < 0) {
Serhiy Storchakaf320be72018-01-25 10:49:40 +02007605 return 1;
7606 }
7607 if (tmp == NULL) {
7608 PyErr_SetString(PyExc_TypeError, "required field \"elt\" missing from SetComp");
7609 return 1;
7610 }
7611 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007612 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02007613 res = obj2ast_expr(state, tmp, &elt, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007614 if (res != 0) goto failed;
Victor Stinner1acc1292013-07-27 00:03:47 +02007615 Py_CLEAR(tmp);
Serhiy Storchakaf320be72018-01-25 10:49:40 +02007616 }
Victor Stinner74419f02020-07-03 11:35:37 +02007617 if (_PyObject_LookupAttr(obj, state->generators, &tmp) < 0) {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007618 return 1;
7619 }
Serhiy Storchakaf320be72018-01-25 10:49:40 +02007620 if (tmp == NULL) {
7621 PyErr_SetString(PyExc_TypeError, "required field \"generators\" missing from SetComp");
7622 return 1;
7623 }
7624 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007625 int res;
7626 Py_ssize_t len;
7627 Py_ssize_t i;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007628 if (!PyList_Check(tmp)) {
Dino Viehlandac46eb42019-09-11 10:16:34 -07007629 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 +02007630 goto failed;
7631 }
7632 len = PyList_GET_SIZE(tmp);
Pablo Galindoa5634c42020-09-16 19:42:00 +01007633 generators = _Py_asdl_comprehension_seq_new(len, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007634 if (generators == NULL) goto failed;
7635 for (i = 0; i < len; i++) {
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07007636 comprehension_ty val;
Serhiy Storchaka43c97312019-09-10 13:02:30 +03007637 PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
7638 Py_INCREF(tmp2);
Victor Stinner74419f02020-07-03 11:35:37 +02007639 res = obj2ast_comprehension(state, tmp2, &val, arena);
Serhiy Storchaka43c97312019-09-10 13:02:30 +03007640 Py_DECREF(tmp2);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007641 if (res != 0) goto failed;
Serhiy Storchakacf380602016-10-07 21:51:28 +03007642 if (len != PyList_GET_SIZE(tmp)) {
7643 PyErr_SetString(PyExc_RuntimeError, "SetComp field \"generators\" changed size during iteration");
7644 goto failed;
7645 }
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07007646 asdl_seq_SET(generators, i, val);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007647 }
Victor Stinner1acc1292013-07-27 00:03:47 +02007648 Py_CLEAR(tmp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007649 }
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00007650 *out = SetComp(elt, generators, lineno, col_offset, end_lineno,
7651 end_col_offset, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007652 if (*out == NULL) goto failed;
7653 return 0;
7654 }
Victor Stinner74419f02020-07-03 11:35:37 +02007655 tp = state->DictComp_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07007656 isinstance = PyObject_IsInstance(obj, tp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007657 if (isinstance == -1) {
7658 return 1;
7659 }
7660 if (isinstance) {
7661 expr_ty key;
7662 expr_ty value;
Pablo Galindoa5634c42020-09-16 19:42:00 +01007663 asdl_comprehension_seq* generators;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007664
Victor Stinner74419f02020-07-03 11:35:37 +02007665 if (_PyObject_LookupAttr(obj, state->key, &tmp) < 0) {
Serhiy Storchakaf320be72018-01-25 10:49:40 +02007666 return 1;
7667 }
7668 if (tmp == NULL) {
7669 PyErr_SetString(PyExc_TypeError, "required field \"key\" missing from DictComp");
7670 return 1;
7671 }
7672 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007673 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02007674 res = obj2ast_expr(state, tmp, &key, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007675 if (res != 0) goto failed;
Victor Stinner1acc1292013-07-27 00:03:47 +02007676 Py_CLEAR(tmp);
Serhiy Storchakaf320be72018-01-25 10:49:40 +02007677 }
Victor Stinner74419f02020-07-03 11:35:37 +02007678 if (_PyObject_LookupAttr(obj, state->value, &tmp) < 0) {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007679 return 1;
7680 }
Serhiy Storchakaf320be72018-01-25 10:49:40 +02007681 if (tmp == NULL) {
7682 PyErr_SetString(PyExc_TypeError, "required field \"value\" missing from DictComp");
7683 return 1;
7684 }
7685 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007686 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02007687 res = obj2ast_expr(state, tmp, &value, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007688 if (res != 0) goto failed;
Victor Stinner1acc1292013-07-27 00:03:47 +02007689 Py_CLEAR(tmp);
Serhiy Storchakaf320be72018-01-25 10:49:40 +02007690 }
Victor Stinner74419f02020-07-03 11:35:37 +02007691 if (_PyObject_LookupAttr(obj, state->generators, &tmp) < 0) {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007692 return 1;
7693 }
Serhiy Storchakaf320be72018-01-25 10:49:40 +02007694 if (tmp == NULL) {
7695 PyErr_SetString(PyExc_TypeError, "required field \"generators\" missing from DictComp");
7696 return 1;
7697 }
7698 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007699 int res;
7700 Py_ssize_t len;
7701 Py_ssize_t i;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007702 if (!PyList_Check(tmp)) {
Dino Viehlandac46eb42019-09-11 10:16:34 -07007703 PyErr_Format(PyExc_TypeError, "DictComp field \"generators\" must be a list, not a %.200s", _PyType_Name(Py_TYPE(tmp)));
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007704 goto failed;
7705 }
7706 len = PyList_GET_SIZE(tmp);
Pablo Galindoa5634c42020-09-16 19:42:00 +01007707 generators = _Py_asdl_comprehension_seq_new(len, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007708 if (generators == NULL) goto failed;
7709 for (i = 0; i < len; i++) {
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07007710 comprehension_ty val;
Serhiy Storchaka43c97312019-09-10 13:02:30 +03007711 PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
7712 Py_INCREF(tmp2);
Victor Stinner74419f02020-07-03 11:35:37 +02007713 res = obj2ast_comprehension(state, tmp2, &val, arena);
Serhiy Storchaka43c97312019-09-10 13:02:30 +03007714 Py_DECREF(tmp2);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007715 if (res != 0) goto failed;
Serhiy Storchakacf380602016-10-07 21:51:28 +03007716 if (len != PyList_GET_SIZE(tmp)) {
7717 PyErr_SetString(PyExc_RuntimeError, "DictComp field \"generators\" changed size during iteration");
7718 goto failed;
7719 }
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07007720 asdl_seq_SET(generators, i, val);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007721 }
Victor Stinner1acc1292013-07-27 00:03:47 +02007722 Py_CLEAR(tmp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007723 }
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00007724 *out = DictComp(key, value, generators, lineno, col_offset, end_lineno,
7725 end_col_offset, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007726 if (*out == NULL) goto failed;
7727 return 0;
7728 }
Victor Stinner74419f02020-07-03 11:35:37 +02007729 tp = state->GeneratorExp_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07007730 isinstance = PyObject_IsInstance(obj, tp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007731 if (isinstance == -1) {
7732 return 1;
7733 }
7734 if (isinstance) {
7735 expr_ty elt;
Pablo Galindoa5634c42020-09-16 19:42:00 +01007736 asdl_comprehension_seq* generators;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007737
Victor Stinner74419f02020-07-03 11:35:37 +02007738 if (_PyObject_LookupAttr(obj, state->elt, &tmp) < 0) {
Serhiy Storchakaf320be72018-01-25 10:49:40 +02007739 return 1;
7740 }
7741 if (tmp == NULL) {
7742 PyErr_SetString(PyExc_TypeError, "required field \"elt\" missing from GeneratorExp");
7743 return 1;
7744 }
7745 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007746 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02007747 res = obj2ast_expr(state, tmp, &elt, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007748 if (res != 0) goto failed;
Victor Stinner1acc1292013-07-27 00:03:47 +02007749 Py_CLEAR(tmp);
Serhiy Storchakaf320be72018-01-25 10:49:40 +02007750 }
Victor Stinner74419f02020-07-03 11:35:37 +02007751 if (_PyObject_LookupAttr(obj, state->generators, &tmp) < 0) {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007752 return 1;
7753 }
Serhiy Storchakaf320be72018-01-25 10:49:40 +02007754 if (tmp == NULL) {
7755 PyErr_SetString(PyExc_TypeError, "required field \"generators\" missing from GeneratorExp");
7756 return 1;
7757 }
7758 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007759 int res;
7760 Py_ssize_t len;
7761 Py_ssize_t i;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007762 if (!PyList_Check(tmp)) {
Dino Viehlandac46eb42019-09-11 10:16:34 -07007763 PyErr_Format(PyExc_TypeError, "GeneratorExp field \"generators\" must be a list, not a %.200s", _PyType_Name(Py_TYPE(tmp)));
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007764 goto failed;
7765 }
7766 len = PyList_GET_SIZE(tmp);
Pablo Galindoa5634c42020-09-16 19:42:00 +01007767 generators = _Py_asdl_comprehension_seq_new(len, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007768 if (generators == NULL) goto failed;
7769 for (i = 0; i < len; i++) {
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07007770 comprehension_ty val;
Serhiy Storchaka43c97312019-09-10 13:02:30 +03007771 PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
7772 Py_INCREF(tmp2);
Victor Stinner74419f02020-07-03 11:35:37 +02007773 res = obj2ast_comprehension(state, tmp2, &val, arena);
Serhiy Storchaka43c97312019-09-10 13:02:30 +03007774 Py_DECREF(tmp2);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007775 if (res != 0) goto failed;
Serhiy Storchakacf380602016-10-07 21:51:28 +03007776 if (len != PyList_GET_SIZE(tmp)) {
7777 PyErr_SetString(PyExc_RuntimeError, "GeneratorExp field \"generators\" changed size during iteration");
7778 goto failed;
7779 }
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07007780 asdl_seq_SET(generators, i, val);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007781 }
Victor Stinner1acc1292013-07-27 00:03:47 +02007782 Py_CLEAR(tmp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007783 }
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00007784 *out = GeneratorExp(elt, generators, lineno, col_offset, end_lineno,
7785 end_col_offset, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007786 if (*out == NULL) goto failed;
7787 return 0;
7788 }
Victor Stinner74419f02020-07-03 11:35:37 +02007789 tp = state->Await_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07007790 isinstance = PyObject_IsInstance(obj, tp);
Yury Selivanov75445082015-05-11 22:57:16 -04007791 if (isinstance == -1) {
7792 return 1;
7793 }
7794 if (isinstance) {
7795 expr_ty value;
7796
Victor Stinner74419f02020-07-03 11:35:37 +02007797 if (_PyObject_LookupAttr(obj, state->value, &tmp) < 0) {
Serhiy Storchakaf320be72018-01-25 10:49:40 +02007798 return 1;
7799 }
7800 if (tmp == NULL) {
7801 PyErr_SetString(PyExc_TypeError, "required field \"value\" missing from Await");
7802 return 1;
7803 }
7804 else {
Yury Selivanov75445082015-05-11 22:57:16 -04007805 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02007806 res = obj2ast_expr(state, tmp, &value, arena);
Yury Selivanov75445082015-05-11 22:57:16 -04007807 if (res != 0) goto failed;
7808 Py_CLEAR(tmp);
Yury Selivanov75445082015-05-11 22:57:16 -04007809 }
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00007810 *out = Await(value, lineno, col_offset, end_lineno, end_col_offset,
7811 arena);
Yury Selivanov75445082015-05-11 22:57:16 -04007812 if (*out == NULL) goto failed;
7813 return 0;
7814 }
Victor Stinner74419f02020-07-03 11:35:37 +02007815 tp = state->Yield_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07007816 isinstance = PyObject_IsInstance(obj, tp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007817 if (isinstance == -1) {
7818 return 1;
7819 }
7820 if (isinstance) {
7821 expr_ty value;
7822
Victor Stinner74419f02020-07-03 11:35:37 +02007823 if (_PyObject_LookupAttr(obj, state->value, &tmp) < 0) {
Serhiy Storchakaf320be72018-01-25 10:49:40 +02007824 return 1;
7825 }
7826 if (tmp == NULL || tmp == Py_None) {
7827 Py_CLEAR(tmp);
7828 value = NULL;
7829 }
7830 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007831 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02007832 res = obj2ast_expr(state, tmp, &value, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007833 if (res != 0) goto failed;
Victor Stinner1acc1292013-07-27 00:03:47 +02007834 Py_CLEAR(tmp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007835 }
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00007836 *out = Yield(value, lineno, col_offset, end_lineno, end_col_offset,
7837 arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007838 if (*out == NULL) goto failed;
7839 return 0;
7840 }
Victor Stinner74419f02020-07-03 11:35:37 +02007841 tp = state->YieldFrom_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07007842 isinstance = PyObject_IsInstance(obj, tp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007843 if (isinstance == -1) {
7844 return 1;
7845 }
7846 if (isinstance) {
7847 expr_ty value;
7848
Victor Stinner74419f02020-07-03 11:35:37 +02007849 if (_PyObject_LookupAttr(obj, state->value, &tmp) < 0) {
Serhiy Storchakaf320be72018-01-25 10:49:40 +02007850 return 1;
7851 }
7852 if (tmp == NULL) {
7853 PyErr_SetString(PyExc_TypeError, "required field \"value\" missing from YieldFrom");
7854 return 1;
7855 }
7856 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007857 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02007858 res = obj2ast_expr(state, tmp, &value, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007859 if (res != 0) goto failed;
Victor Stinner1acc1292013-07-27 00:03:47 +02007860 Py_CLEAR(tmp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007861 }
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00007862 *out = YieldFrom(value, lineno, col_offset, end_lineno, end_col_offset,
7863 arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007864 if (*out == NULL) goto failed;
7865 return 0;
7866 }
Victor Stinner74419f02020-07-03 11:35:37 +02007867 tp = state->Compare_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07007868 isinstance = PyObject_IsInstance(obj, tp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007869 if (isinstance == -1) {
7870 return 1;
7871 }
7872 if (isinstance) {
7873 expr_ty left;
7874 asdl_int_seq* ops;
Pablo Galindoa5634c42020-09-16 19:42:00 +01007875 asdl_expr_seq* comparators;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007876
Victor Stinner74419f02020-07-03 11:35:37 +02007877 if (_PyObject_LookupAttr(obj, state->left, &tmp) < 0) {
Serhiy Storchakaf320be72018-01-25 10:49:40 +02007878 return 1;
7879 }
7880 if (tmp == NULL) {
7881 PyErr_SetString(PyExc_TypeError, "required field \"left\" missing from Compare");
7882 return 1;
7883 }
7884 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007885 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02007886 res = obj2ast_expr(state, tmp, &left, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007887 if (res != 0) goto failed;
Victor Stinner1acc1292013-07-27 00:03:47 +02007888 Py_CLEAR(tmp);
Serhiy Storchakaf320be72018-01-25 10:49:40 +02007889 }
Victor Stinner74419f02020-07-03 11:35:37 +02007890 if (_PyObject_LookupAttr(obj, state->ops, &tmp) < 0) {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007891 return 1;
7892 }
Serhiy Storchakaf320be72018-01-25 10:49:40 +02007893 if (tmp == NULL) {
7894 PyErr_SetString(PyExc_TypeError, "required field \"ops\" missing from Compare");
7895 return 1;
7896 }
7897 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007898 int res;
7899 Py_ssize_t len;
7900 Py_ssize_t i;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007901 if (!PyList_Check(tmp)) {
Dino Viehlandac46eb42019-09-11 10:16:34 -07007902 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 +02007903 goto failed;
7904 }
7905 len = PyList_GET_SIZE(tmp);
Antoine Pitroud01d396e2013-10-12 22:52:43 +02007906 ops = _Py_asdl_int_seq_new(len, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007907 if (ops == NULL) goto failed;
7908 for (i = 0; i < len; i++) {
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07007909 cmpop_ty val;
Serhiy Storchaka43c97312019-09-10 13:02:30 +03007910 PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
7911 Py_INCREF(tmp2);
Victor Stinner74419f02020-07-03 11:35:37 +02007912 res = obj2ast_cmpop(state, tmp2, &val, arena);
Serhiy Storchaka43c97312019-09-10 13:02:30 +03007913 Py_DECREF(tmp2);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007914 if (res != 0) goto failed;
Serhiy Storchakacf380602016-10-07 21:51:28 +03007915 if (len != PyList_GET_SIZE(tmp)) {
7916 PyErr_SetString(PyExc_RuntimeError, "Compare field \"ops\" changed size during iteration");
7917 goto failed;
7918 }
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07007919 asdl_seq_SET(ops, i, val);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007920 }
Victor Stinner1acc1292013-07-27 00:03:47 +02007921 Py_CLEAR(tmp);
Serhiy Storchakaf320be72018-01-25 10:49:40 +02007922 }
Victor Stinner74419f02020-07-03 11:35:37 +02007923 if (_PyObject_LookupAttr(obj, state->comparators, &tmp) < 0) {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007924 return 1;
7925 }
Serhiy Storchakaf320be72018-01-25 10:49:40 +02007926 if (tmp == NULL) {
7927 PyErr_SetString(PyExc_TypeError, "required field \"comparators\" missing from Compare");
7928 return 1;
7929 }
7930 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007931 int res;
7932 Py_ssize_t len;
7933 Py_ssize_t i;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007934 if (!PyList_Check(tmp)) {
Dino Viehlandac46eb42019-09-11 10:16:34 -07007935 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 +02007936 goto failed;
7937 }
7938 len = PyList_GET_SIZE(tmp);
Pablo Galindoa5634c42020-09-16 19:42:00 +01007939 comparators = _Py_asdl_expr_seq_new(len, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007940 if (comparators == NULL) goto failed;
7941 for (i = 0; i < len; i++) {
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07007942 expr_ty val;
Serhiy Storchaka43c97312019-09-10 13:02:30 +03007943 PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
7944 Py_INCREF(tmp2);
Victor Stinner74419f02020-07-03 11:35:37 +02007945 res = obj2ast_expr(state, tmp2, &val, arena);
Serhiy Storchaka43c97312019-09-10 13:02:30 +03007946 Py_DECREF(tmp2);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007947 if (res != 0) goto failed;
Serhiy Storchakacf380602016-10-07 21:51:28 +03007948 if (len != PyList_GET_SIZE(tmp)) {
7949 PyErr_SetString(PyExc_RuntimeError, "Compare field \"comparators\" changed size during iteration");
7950 goto failed;
7951 }
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07007952 asdl_seq_SET(comparators, i, val);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007953 }
Victor Stinner1acc1292013-07-27 00:03:47 +02007954 Py_CLEAR(tmp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007955 }
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00007956 *out = Compare(left, ops, comparators, lineno, col_offset, end_lineno,
7957 end_col_offset, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007958 if (*out == NULL) goto failed;
7959 return 0;
7960 }
Victor Stinner74419f02020-07-03 11:35:37 +02007961 tp = state->Call_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07007962 isinstance = PyObject_IsInstance(obj, tp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007963 if (isinstance == -1) {
7964 return 1;
7965 }
7966 if (isinstance) {
7967 expr_ty func;
Pablo Galindoa5634c42020-09-16 19:42:00 +01007968 asdl_expr_seq* args;
7969 asdl_keyword_seq* keywords;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007970
Victor Stinner74419f02020-07-03 11:35:37 +02007971 if (_PyObject_LookupAttr(obj, state->func, &tmp) < 0) {
Serhiy Storchakaf320be72018-01-25 10:49:40 +02007972 return 1;
7973 }
7974 if (tmp == NULL) {
7975 PyErr_SetString(PyExc_TypeError, "required field \"func\" missing from Call");
7976 return 1;
7977 }
7978 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007979 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02007980 res = obj2ast_expr(state, tmp, &func, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007981 if (res != 0) goto failed;
Victor Stinner1acc1292013-07-27 00:03:47 +02007982 Py_CLEAR(tmp);
Serhiy Storchakaf320be72018-01-25 10:49:40 +02007983 }
Victor Stinner74419f02020-07-03 11:35:37 +02007984 if (_PyObject_LookupAttr(obj, state->args, &tmp) < 0) {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007985 return 1;
7986 }
Serhiy Storchakaf320be72018-01-25 10:49:40 +02007987 if (tmp == NULL) {
7988 PyErr_SetString(PyExc_TypeError, "required field \"args\" missing from Call");
7989 return 1;
7990 }
7991 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007992 int res;
7993 Py_ssize_t len;
7994 Py_ssize_t i;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007995 if (!PyList_Check(tmp)) {
Dino Viehlandac46eb42019-09-11 10:16:34 -07007996 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 +02007997 goto failed;
7998 }
7999 len = PyList_GET_SIZE(tmp);
Pablo Galindoa5634c42020-09-16 19:42:00 +01008000 args = _Py_asdl_expr_seq_new(len, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008001 if (args == NULL) goto failed;
8002 for (i = 0; i < len; i++) {
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07008003 expr_ty val;
Serhiy Storchaka43c97312019-09-10 13:02:30 +03008004 PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
8005 Py_INCREF(tmp2);
Victor Stinner74419f02020-07-03 11:35:37 +02008006 res = obj2ast_expr(state, tmp2, &val, arena);
Serhiy Storchaka43c97312019-09-10 13:02:30 +03008007 Py_DECREF(tmp2);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008008 if (res != 0) goto failed;
Serhiy Storchakacf380602016-10-07 21:51:28 +03008009 if (len != PyList_GET_SIZE(tmp)) {
8010 PyErr_SetString(PyExc_RuntimeError, "Call field \"args\" changed size during iteration");
8011 goto failed;
8012 }
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07008013 asdl_seq_SET(args, i, val);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008014 }
Victor Stinner1acc1292013-07-27 00:03:47 +02008015 Py_CLEAR(tmp);
Serhiy Storchakaf320be72018-01-25 10:49:40 +02008016 }
Victor Stinner74419f02020-07-03 11:35:37 +02008017 if (_PyObject_LookupAttr(obj, state->keywords, &tmp) < 0) {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008018 return 1;
8019 }
Serhiy Storchakaf320be72018-01-25 10:49:40 +02008020 if (tmp == NULL) {
8021 PyErr_SetString(PyExc_TypeError, "required field \"keywords\" missing from Call");
8022 return 1;
8023 }
8024 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008025 int res;
8026 Py_ssize_t len;
8027 Py_ssize_t i;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008028 if (!PyList_Check(tmp)) {
Dino Viehlandac46eb42019-09-11 10:16:34 -07008029 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 +02008030 goto failed;
8031 }
8032 len = PyList_GET_SIZE(tmp);
Pablo Galindoa5634c42020-09-16 19:42:00 +01008033 keywords = _Py_asdl_keyword_seq_new(len, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008034 if (keywords == NULL) goto failed;
8035 for (i = 0; i < len; i++) {
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07008036 keyword_ty val;
Serhiy Storchaka43c97312019-09-10 13:02:30 +03008037 PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
8038 Py_INCREF(tmp2);
Victor Stinner74419f02020-07-03 11:35:37 +02008039 res = obj2ast_keyword(state, tmp2, &val, arena);
Serhiy Storchaka43c97312019-09-10 13:02:30 +03008040 Py_DECREF(tmp2);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008041 if (res != 0) goto failed;
Serhiy Storchakacf380602016-10-07 21:51:28 +03008042 if (len != PyList_GET_SIZE(tmp)) {
8043 PyErr_SetString(PyExc_RuntimeError, "Call field \"keywords\" changed size during iteration");
8044 goto failed;
8045 }
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07008046 asdl_seq_SET(keywords, i, val);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008047 }
Victor Stinner1acc1292013-07-27 00:03:47 +02008048 Py_CLEAR(tmp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008049 }
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00008050 *out = Call(func, args, keywords, lineno, col_offset, end_lineno,
8051 end_col_offset, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008052 if (*out == NULL) goto failed;
8053 return 0;
8054 }
Victor Stinner74419f02020-07-03 11:35:37 +02008055 tp = state->FormattedValue_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07008056 isinstance = PyObject_IsInstance(obj, tp);
Eric V. Smith235a6f02015-09-19 14:51:32 -04008057 if (isinstance == -1) {
8058 return 1;
8059 }
8060 if (isinstance) {
8061 expr_ty value;
8062 int conversion;
8063 expr_ty format_spec;
8064
Victor Stinner74419f02020-07-03 11:35:37 +02008065 if (_PyObject_LookupAttr(obj, state->value, &tmp) < 0) {
Serhiy Storchakaf320be72018-01-25 10:49:40 +02008066 return 1;
8067 }
8068 if (tmp == NULL) {
8069 PyErr_SetString(PyExc_TypeError, "required field \"value\" missing from FormattedValue");
8070 return 1;
8071 }
8072 else {
Eric V. Smith235a6f02015-09-19 14:51:32 -04008073 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02008074 res = obj2ast_expr(state, tmp, &value, arena);
Eric V. Smith235a6f02015-09-19 14:51:32 -04008075 if (res != 0) goto failed;
8076 Py_CLEAR(tmp);
Serhiy Storchakaf320be72018-01-25 10:49:40 +02008077 }
Victor Stinner74419f02020-07-03 11:35:37 +02008078 if (_PyObject_LookupAttr(obj, state->conversion, &tmp) < 0) {
Eric V. Smith235a6f02015-09-19 14:51:32 -04008079 return 1;
8080 }
Serhiy Storchakaf320be72018-01-25 10:49:40 +02008081 if (tmp == NULL || tmp == Py_None) {
8082 Py_CLEAR(tmp);
8083 conversion = 0;
8084 }
8085 else {
Eric V. Smith235a6f02015-09-19 14:51:32 -04008086 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02008087 res = obj2ast_int(state, tmp, &conversion, arena);
Eric V. Smith235a6f02015-09-19 14:51:32 -04008088 if (res != 0) goto failed;
8089 Py_CLEAR(tmp);
Eric V. Smith235a6f02015-09-19 14:51:32 -04008090 }
Victor Stinner74419f02020-07-03 11:35:37 +02008091 if (_PyObject_LookupAttr(obj, state->format_spec, &tmp) < 0) {
Serhiy Storchakaf320be72018-01-25 10:49:40 +02008092 return 1;
8093 }
8094 if (tmp == NULL || tmp == Py_None) {
8095 Py_CLEAR(tmp);
8096 format_spec = NULL;
8097 }
8098 else {
Eric V. Smith235a6f02015-09-19 14:51:32 -04008099 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02008100 res = obj2ast_expr(state, tmp, &format_spec, arena);
Eric V. Smith235a6f02015-09-19 14:51:32 -04008101 if (res != 0) goto failed;
8102 Py_CLEAR(tmp);
Eric V. Smith235a6f02015-09-19 14:51:32 -04008103 }
Eric V. Smith6f6ff8a2019-05-27 15:31:52 -04008104 *out = FormattedValue(value, conversion, format_spec, lineno,
8105 col_offset, end_lineno, end_col_offset, arena);
Eric V. Smith235a6f02015-09-19 14:51:32 -04008106 if (*out == NULL) goto failed;
8107 return 0;
8108 }
Victor Stinner74419f02020-07-03 11:35:37 +02008109 tp = state->JoinedStr_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07008110 isinstance = PyObject_IsInstance(obj, tp);
Eric V. Smith235a6f02015-09-19 14:51:32 -04008111 if (isinstance == -1) {
8112 return 1;
8113 }
8114 if (isinstance) {
Pablo Galindoa5634c42020-09-16 19:42:00 +01008115 asdl_expr_seq* values;
Eric V. Smith235a6f02015-09-19 14:51:32 -04008116
Victor Stinner74419f02020-07-03 11:35:37 +02008117 if (_PyObject_LookupAttr(obj, state->values, &tmp) < 0) {
Serhiy Storchakaf320be72018-01-25 10:49:40 +02008118 return 1;
8119 }
8120 if (tmp == NULL) {
8121 PyErr_SetString(PyExc_TypeError, "required field \"values\" missing from JoinedStr");
8122 return 1;
8123 }
8124 else {
Eric V. Smith235a6f02015-09-19 14:51:32 -04008125 int res;
8126 Py_ssize_t len;
8127 Py_ssize_t i;
Eric V. Smith235a6f02015-09-19 14:51:32 -04008128 if (!PyList_Check(tmp)) {
Dino Viehlandac46eb42019-09-11 10:16:34 -07008129 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 -04008130 goto failed;
8131 }
8132 len = PyList_GET_SIZE(tmp);
Pablo Galindoa5634c42020-09-16 19:42:00 +01008133 values = _Py_asdl_expr_seq_new(len, arena);
Eric V. Smith235a6f02015-09-19 14:51:32 -04008134 if (values == NULL) goto failed;
8135 for (i = 0; i < len; i++) {
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07008136 expr_ty val;
Serhiy Storchaka43c97312019-09-10 13:02:30 +03008137 PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
8138 Py_INCREF(tmp2);
Victor Stinner74419f02020-07-03 11:35:37 +02008139 res = obj2ast_expr(state, tmp2, &val, arena);
Serhiy Storchaka43c97312019-09-10 13:02:30 +03008140 Py_DECREF(tmp2);
Eric V. Smith235a6f02015-09-19 14:51:32 -04008141 if (res != 0) goto failed;
Serhiy Storchaka5e808552016-10-07 21:55:49 +03008142 if (len != PyList_GET_SIZE(tmp)) {
8143 PyErr_SetString(PyExc_RuntimeError, "JoinedStr field \"values\" changed size during iteration");
8144 goto failed;
8145 }
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07008146 asdl_seq_SET(values, i, val);
Eric V. Smith235a6f02015-09-19 14:51:32 -04008147 }
8148 Py_CLEAR(tmp);
Eric V. Smith235a6f02015-09-19 14:51:32 -04008149 }
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00008150 *out = JoinedStr(values, lineno, col_offset, end_lineno,
8151 end_col_offset, arena);
Eric V. Smith235a6f02015-09-19 14:51:32 -04008152 if (*out == NULL) goto failed;
8153 return 0;
8154 }
Victor Stinner74419f02020-07-03 11:35:37 +02008155 tp = state->Constant_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07008156 isinstance = PyObject_IsInstance(obj, tp);
Victor Stinnerf2c1aa12016-01-26 00:40:57 +01008157 if (isinstance == -1) {
8158 return 1;
8159 }
8160 if (isinstance) {
8161 constant value;
Guido van Rossum10f8ce62019-03-13 13:00:46 -07008162 string kind;
Victor Stinnerf2c1aa12016-01-26 00:40:57 +01008163
Victor Stinner74419f02020-07-03 11:35:37 +02008164 if (_PyObject_LookupAttr(obj, state->value, &tmp) < 0) {
Serhiy Storchakaf320be72018-01-25 10:49:40 +02008165 return 1;
8166 }
8167 if (tmp == NULL) {
8168 PyErr_SetString(PyExc_TypeError, "required field \"value\" missing from Constant");
8169 return 1;
8170 }
8171 else {
Victor Stinnerf2c1aa12016-01-26 00:40:57 +01008172 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02008173 res = obj2ast_constant(state, tmp, &value, arena);
Victor Stinnerf2c1aa12016-01-26 00:40:57 +01008174 if (res != 0) goto failed;
8175 Py_CLEAR(tmp);
Victor Stinnerf2c1aa12016-01-26 00:40:57 +01008176 }
Victor Stinner74419f02020-07-03 11:35:37 +02008177 if (_PyObject_LookupAttr(obj, state->kind, &tmp) < 0) {
Guido van Rossum10f8ce62019-03-13 13:00:46 -07008178 return 1;
8179 }
8180 if (tmp == NULL || tmp == Py_None) {
8181 Py_CLEAR(tmp);
8182 kind = NULL;
8183 }
8184 else {
8185 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02008186 res = obj2ast_string(state, tmp, &kind, arena);
Guido van Rossum10f8ce62019-03-13 13:00:46 -07008187 if (res != 0) goto failed;
8188 Py_CLEAR(tmp);
8189 }
8190 *out = Constant(value, kind, lineno, col_offset, end_lineno,
8191 end_col_offset, arena);
Victor Stinnerf2c1aa12016-01-26 00:40:57 +01008192 if (*out == NULL) goto failed;
8193 return 0;
8194 }
Victor Stinner74419f02020-07-03 11:35:37 +02008195 tp = state->Attribute_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07008196 isinstance = PyObject_IsInstance(obj, tp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008197 if (isinstance == -1) {
8198 return 1;
8199 }
8200 if (isinstance) {
8201 expr_ty value;
8202 identifier attr;
8203 expr_context_ty ctx;
8204
Victor Stinner74419f02020-07-03 11:35:37 +02008205 if (_PyObject_LookupAttr(obj, state->value, &tmp) < 0) {
Serhiy Storchakaf320be72018-01-25 10:49:40 +02008206 return 1;
8207 }
8208 if (tmp == NULL) {
8209 PyErr_SetString(PyExc_TypeError, "required field \"value\" missing from Attribute");
8210 return 1;
8211 }
8212 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008213 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02008214 res = obj2ast_expr(state, tmp, &value, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008215 if (res != 0) goto failed;
Victor Stinner1acc1292013-07-27 00:03:47 +02008216 Py_CLEAR(tmp);
Serhiy Storchakaf320be72018-01-25 10:49:40 +02008217 }
Victor Stinner74419f02020-07-03 11:35:37 +02008218 if (_PyObject_LookupAttr(obj, state->attr, &tmp) < 0) {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008219 return 1;
8220 }
Serhiy Storchakaf320be72018-01-25 10:49:40 +02008221 if (tmp == NULL) {
8222 PyErr_SetString(PyExc_TypeError, "required field \"attr\" missing from Attribute");
8223 return 1;
8224 }
8225 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008226 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02008227 res = obj2ast_identifier(state, tmp, &attr, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008228 if (res != 0) goto failed;
Victor Stinner1acc1292013-07-27 00:03:47 +02008229 Py_CLEAR(tmp);
Serhiy Storchakaf320be72018-01-25 10:49:40 +02008230 }
Victor Stinner74419f02020-07-03 11:35:37 +02008231 if (_PyObject_LookupAttr(obj, state->ctx, &tmp) < 0) {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008232 return 1;
8233 }
Serhiy Storchakaf320be72018-01-25 10:49:40 +02008234 if (tmp == NULL) {
8235 PyErr_SetString(PyExc_TypeError, "required field \"ctx\" missing from Attribute");
8236 return 1;
8237 }
8238 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008239 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02008240 res = obj2ast_expr_context(state, tmp, &ctx, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008241 if (res != 0) goto failed;
Victor Stinner1acc1292013-07-27 00:03:47 +02008242 Py_CLEAR(tmp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008243 }
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00008244 *out = Attribute(value, attr, ctx, lineno, col_offset, end_lineno,
8245 end_col_offset, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008246 if (*out == NULL) goto failed;
8247 return 0;
8248 }
Victor Stinner74419f02020-07-03 11:35:37 +02008249 tp = state->Subscript_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07008250 isinstance = PyObject_IsInstance(obj, tp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008251 if (isinstance == -1) {
8252 return 1;
8253 }
8254 if (isinstance) {
8255 expr_ty value;
Serhiy Storchaka13d52c22020-03-10 18:52:34 +02008256 expr_ty slice;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008257 expr_context_ty ctx;
8258
Victor Stinner74419f02020-07-03 11:35:37 +02008259 if (_PyObject_LookupAttr(obj, state->value, &tmp) < 0) {
Serhiy Storchakaf320be72018-01-25 10:49:40 +02008260 return 1;
8261 }
8262 if (tmp == NULL) {
8263 PyErr_SetString(PyExc_TypeError, "required field \"value\" missing from Subscript");
8264 return 1;
8265 }
8266 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008267 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02008268 res = obj2ast_expr(state, tmp, &value, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008269 if (res != 0) goto failed;
Victor Stinner1acc1292013-07-27 00:03:47 +02008270 Py_CLEAR(tmp);
Serhiy Storchakaf320be72018-01-25 10:49:40 +02008271 }
Victor Stinner74419f02020-07-03 11:35:37 +02008272 if (_PyObject_LookupAttr(obj, state->slice, &tmp) < 0) {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008273 return 1;
8274 }
Serhiy Storchakaf320be72018-01-25 10:49:40 +02008275 if (tmp == NULL) {
8276 PyErr_SetString(PyExc_TypeError, "required field \"slice\" missing from Subscript");
8277 return 1;
8278 }
8279 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008280 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02008281 res = obj2ast_expr(state, tmp, &slice, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008282 if (res != 0) goto failed;
Victor Stinner1acc1292013-07-27 00:03:47 +02008283 Py_CLEAR(tmp);
Serhiy Storchakaf320be72018-01-25 10:49:40 +02008284 }
Victor Stinner74419f02020-07-03 11:35:37 +02008285 if (_PyObject_LookupAttr(obj, state->ctx, &tmp) < 0) {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008286 return 1;
8287 }
Serhiy Storchakaf320be72018-01-25 10:49:40 +02008288 if (tmp == NULL) {
8289 PyErr_SetString(PyExc_TypeError, "required field \"ctx\" missing from Subscript");
8290 return 1;
8291 }
8292 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008293 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02008294 res = obj2ast_expr_context(state, tmp, &ctx, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008295 if (res != 0) goto failed;
Victor Stinner1acc1292013-07-27 00:03:47 +02008296 Py_CLEAR(tmp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008297 }
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00008298 *out = Subscript(value, slice, ctx, lineno, col_offset, end_lineno,
8299 end_col_offset, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008300 if (*out == NULL) goto failed;
8301 return 0;
8302 }
Victor Stinner74419f02020-07-03 11:35:37 +02008303 tp = state->Starred_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07008304 isinstance = PyObject_IsInstance(obj, tp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008305 if (isinstance == -1) {
8306 return 1;
8307 }
8308 if (isinstance) {
8309 expr_ty value;
8310 expr_context_ty ctx;
8311
Victor Stinner74419f02020-07-03 11:35:37 +02008312 if (_PyObject_LookupAttr(obj, state->value, &tmp) < 0) {
Serhiy Storchakaf320be72018-01-25 10:49:40 +02008313 return 1;
8314 }
8315 if (tmp == NULL) {
8316 PyErr_SetString(PyExc_TypeError, "required field \"value\" missing from Starred");
8317 return 1;
8318 }
8319 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008320 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02008321 res = obj2ast_expr(state, tmp, &value, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008322 if (res != 0) goto failed;
Victor Stinner1acc1292013-07-27 00:03:47 +02008323 Py_CLEAR(tmp);
Serhiy Storchakaf320be72018-01-25 10:49:40 +02008324 }
Victor Stinner74419f02020-07-03 11:35:37 +02008325 if (_PyObject_LookupAttr(obj, state->ctx, &tmp) < 0) {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008326 return 1;
8327 }
Serhiy Storchakaf320be72018-01-25 10:49:40 +02008328 if (tmp == NULL) {
8329 PyErr_SetString(PyExc_TypeError, "required field \"ctx\" missing from Starred");
8330 return 1;
8331 }
8332 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008333 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02008334 res = obj2ast_expr_context(state, tmp, &ctx, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008335 if (res != 0) goto failed;
Victor Stinner1acc1292013-07-27 00:03:47 +02008336 Py_CLEAR(tmp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008337 }
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00008338 *out = Starred(value, ctx, lineno, col_offset, end_lineno,
8339 end_col_offset, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008340 if (*out == NULL) goto failed;
8341 return 0;
8342 }
Victor Stinner74419f02020-07-03 11:35:37 +02008343 tp = state->Name_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07008344 isinstance = PyObject_IsInstance(obj, tp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008345 if (isinstance == -1) {
8346 return 1;
8347 }
8348 if (isinstance) {
8349 identifier id;
8350 expr_context_ty ctx;
8351
Victor Stinner74419f02020-07-03 11:35:37 +02008352 if (_PyObject_LookupAttr(obj, state->id, &tmp) < 0) {
Serhiy Storchakaf320be72018-01-25 10:49:40 +02008353 return 1;
8354 }
8355 if (tmp == NULL) {
8356 PyErr_SetString(PyExc_TypeError, "required field \"id\" missing from Name");
8357 return 1;
8358 }
8359 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008360 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02008361 res = obj2ast_identifier(state, tmp, &id, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008362 if (res != 0) goto failed;
Victor Stinner1acc1292013-07-27 00:03:47 +02008363 Py_CLEAR(tmp);
Serhiy Storchakaf320be72018-01-25 10:49:40 +02008364 }
Victor Stinner74419f02020-07-03 11:35:37 +02008365 if (_PyObject_LookupAttr(obj, state->ctx, &tmp) < 0) {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008366 return 1;
8367 }
Serhiy Storchakaf320be72018-01-25 10:49:40 +02008368 if (tmp == NULL) {
8369 PyErr_SetString(PyExc_TypeError, "required field \"ctx\" missing from Name");
8370 return 1;
8371 }
8372 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008373 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02008374 res = obj2ast_expr_context(state, tmp, &ctx, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008375 if (res != 0) goto failed;
Victor Stinner1acc1292013-07-27 00:03:47 +02008376 Py_CLEAR(tmp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008377 }
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00008378 *out = Name(id, ctx, lineno, col_offset, end_lineno, end_col_offset,
8379 arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008380 if (*out == NULL) goto failed;
8381 return 0;
8382 }
Victor Stinner74419f02020-07-03 11:35:37 +02008383 tp = state->List_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07008384 isinstance = PyObject_IsInstance(obj, tp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008385 if (isinstance == -1) {
8386 return 1;
8387 }
8388 if (isinstance) {
Pablo Galindoa5634c42020-09-16 19:42:00 +01008389 asdl_expr_seq* elts;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008390 expr_context_ty ctx;
8391
Victor Stinner74419f02020-07-03 11:35:37 +02008392 if (_PyObject_LookupAttr(obj, state->elts, &tmp) < 0) {
Serhiy Storchakaf320be72018-01-25 10:49:40 +02008393 return 1;
8394 }
8395 if (tmp == NULL) {
8396 PyErr_SetString(PyExc_TypeError, "required field \"elts\" missing from List");
8397 return 1;
8398 }
8399 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008400 int res;
8401 Py_ssize_t len;
8402 Py_ssize_t i;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008403 if (!PyList_Check(tmp)) {
Dino Viehlandac46eb42019-09-11 10:16:34 -07008404 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 +02008405 goto failed;
8406 }
8407 len = PyList_GET_SIZE(tmp);
Pablo Galindoa5634c42020-09-16 19:42:00 +01008408 elts = _Py_asdl_expr_seq_new(len, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008409 if (elts == NULL) goto failed;
8410 for (i = 0; i < len; i++) {
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07008411 expr_ty val;
Serhiy Storchaka43c97312019-09-10 13:02:30 +03008412 PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
8413 Py_INCREF(tmp2);
Victor Stinner74419f02020-07-03 11:35:37 +02008414 res = obj2ast_expr(state, tmp2, &val, arena);
Serhiy Storchaka43c97312019-09-10 13:02:30 +03008415 Py_DECREF(tmp2);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008416 if (res != 0) goto failed;
Serhiy Storchakacf380602016-10-07 21:51:28 +03008417 if (len != PyList_GET_SIZE(tmp)) {
8418 PyErr_SetString(PyExc_RuntimeError, "List field \"elts\" changed size during iteration");
8419 goto failed;
8420 }
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07008421 asdl_seq_SET(elts, i, val);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008422 }
Victor Stinner1acc1292013-07-27 00:03:47 +02008423 Py_CLEAR(tmp);
Serhiy Storchakaf320be72018-01-25 10:49:40 +02008424 }
Victor Stinner74419f02020-07-03 11:35:37 +02008425 if (_PyObject_LookupAttr(obj, state->ctx, &tmp) < 0) {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008426 return 1;
8427 }
Serhiy Storchakaf320be72018-01-25 10:49:40 +02008428 if (tmp == NULL) {
8429 PyErr_SetString(PyExc_TypeError, "required field \"ctx\" missing from List");
8430 return 1;
8431 }
8432 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008433 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02008434 res = obj2ast_expr_context(state, tmp, &ctx, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008435 if (res != 0) goto failed;
Victor Stinner1acc1292013-07-27 00:03:47 +02008436 Py_CLEAR(tmp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008437 }
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00008438 *out = List(elts, ctx, lineno, col_offset, end_lineno, end_col_offset,
8439 arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008440 if (*out == NULL) goto failed;
8441 return 0;
8442 }
Victor Stinner74419f02020-07-03 11:35:37 +02008443 tp = state->Tuple_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07008444 isinstance = PyObject_IsInstance(obj, tp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008445 if (isinstance == -1) {
8446 return 1;
8447 }
8448 if (isinstance) {
Pablo Galindoa5634c42020-09-16 19:42:00 +01008449 asdl_expr_seq* elts;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008450 expr_context_ty ctx;
8451
Victor Stinner74419f02020-07-03 11:35:37 +02008452 if (_PyObject_LookupAttr(obj, state->elts, &tmp) < 0) {
Serhiy Storchakaf320be72018-01-25 10:49:40 +02008453 return 1;
8454 }
8455 if (tmp == NULL) {
8456 PyErr_SetString(PyExc_TypeError, "required field \"elts\" missing from Tuple");
8457 return 1;
8458 }
8459 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008460 int res;
8461 Py_ssize_t len;
8462 Py_ssize_t i;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008463 if (!PyList_Check(tmp)) {
Dino Viehlandac46eb42019-09-11 10:16:34 -07008464 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 +02008465 goto failed;
8466 }
8467 len = PyList_GET_SIZE(tmp);
Pablo Galindoa5634c42020-09-16 19:42:00 +01008468 elts = _Py_asdl_expr_seq_new(len, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008469 if (elts == NULL) goto failed;
8470 for (i = 0; i < len; i++) {
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07008471 expr_ty val;
Serhiy Storchaka43c97312019-09-10 13:02:30 +03008472 PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
8473 Py_INCREF(tmp2);
Victor Stinner74419f02020-07-03 11:35:37 +02008474 res = obj2ast_expr(state, tmp2, &val, arena);
Serhiy Storchaka43c97312019-09-10 13:02:30 +03008475 Py_DECREF(tmp2);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008476 if (res != 0) goto failed;
Serhiy Storchakacf380602016-10-07 21:51:28 +03008477 if (len != PyList_GET_SIZE(tmp)) {
8478 PyErr_SetString(PyExc_RuntimeError, "Tuple field \"elts\" changed size during iteration");
8479 goto failed;
8480 }
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07008481 asdl_seq_SET(elts, i, val);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008482 }
Victor Stinner1acc1292013-07-27 00:03:47 +02008483 Py_CLEAR(tmp);
Serhiy Storchakaf320be72018-01-25 10:49:40 +02008484 }
Victor Stinner74419f02020-07-03 11:35:37 +02008485 if (_PyObject_LookupAttr(obj, state->ctx, &tmp) < 0) {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008486 return 1;
8487 }
Serhiy Storchakaf320be72018-01-25 10:49:40 +02008488 if (tmp == NULL) {
8489 PyErr_SetString(PyExc_TypeError, "required field \"ctx\" missing from Tuple");
8490 return 1;
8491 }
8492 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008493 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02008494 res = obj2ast_expr_context(state, tmp, &ctx, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008495 if (res != 0) goto failed;
Victor Stinner1acc1292013-07-27 00:03:47 +02008496 Py_CLEAR(tmp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008497 }
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00008498 *out = Tuple(elts, ctx, lineno, col_offset, end_lineno, end_col_offset,
8499 arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008500 if (*out == NULL) goto failed;
8501 return 0;
8502 }
Victor Stinner74419f02020-07-03 11:35:37 +02008503 tp = state->Slice_type;
Serhiy Storchaka13d52c22020-03-10 18:52:34 +02008504 isinstance = PyObject_IsInstance(obj, tp);
8505 if (isinstance == -1) {
8506 return 1;
8507 }
8508 if (isinstance) {
8509 expr_ty lower;
8510 expr_ty upper;
8511 expr_ty step;
8512
Victor Stinner74419f02020-07-03 11:35:37 +02008513 if (_PyObject_LookupAttr(obj, state->lower, &tmp) < 0) {
Serhiy Storchaka13d52c22020-03-10 18:52:34 +02008514 return 1;
8515 }
8516 if (tmp == NULL || tmp == Py_None) {
8517 Py_CLEAR(tmp);
8518 lower = NULL;
8519 }
8520 else {
8521 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02008522 res = obj2ast_expr(state, tmp, &lower, arena);
Serhiy Storchaka13d52c22020-03-10 18:52:34 +02008523 if (res != 0) goto failed;
8524 Py_CLEAR(tmp);
8525 }
Victor Stinner74419f02020-07-03 11:35:37 +02008526 if (_PyObject_LookupAttr(obj, state->upper, &tmp) < 0) {
Serhiy Storchaka13d52c22020-03-10 18:52:34 +02008527 return 1;
8528 }
8529 if (tmp == NULL || tmp == Py_None) {
8530 Py_CLEAR(tmp);
8531 upper = NULL;
8532 }
8533 else {
8534 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02008535 res = obj2ast_expr(state, tmp, &upper, arena);
Serhiy Storchaka13d52c22020-03-10 18:52:34 +02008536 if (res != 0) goto failed;
8537 Py_CLEAR(tmp);
8538 }
Victor Stinner74419f02020-07-03 11:35:37 +02008539 if (_PyObject_LookupAttr(obj, state->step, &tmp) < 0) {
Serhiy Storchaka13d52c22020-03-10 18:52:34 +02008540 return 1;
8541 }
8542 if (tmp == NULL || tmp == Py_None) {
8543 Py_CLEAR(tmp);
8544 step = NULL;
8545 }
8546 else {
8547 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02008548 res = obj2ast_expr(state, tmp, &step, arena);
Serhiy Storchaka13d52c22020-03-10 18:52:34 +02008549 if (res != 0) goto failed;
8550 Py_CLEAR(tmp);
8551 }
8552 *out = Slice(lower, upper, step, lineno, col_offset, end_lineno,
8553 end_col_offset, arena);
8554 if (*out == NULL) goto failed;
8555 return 0;
8556 }
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008557
8558 PyErr_Format(PyExc_TypeError, "expected some sort of expr, but got %R", obj);
8559 failed:
8560 Py_XDECREF(tmp);
8561 return 1;
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00008562}
8563
8564int
Victor Stinner74419f02020-07-03 11:35:37 +02008565obj2ast_expr_context(astmodulestate *state, PyObject* obj, expr_context_ty*
8566 out, PyArena* arena)
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00008567{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008568 int isinstance;
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00008569
Victor Stinner74419f02020-07-03 11:35:37 +02008570 isinstance = PyObject_IsInstance(obj, state->Load_type);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008571 if (isinstance == -1) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00008572 return 1;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008573 }
8574 if (isinstance) {
8575 *out = Load;
8576 return 0;
8577 }
Victor Stinner74419f02020-07-03 11:35:37 +02008578 isinstance = PyObject_IsInstance(obj, state->Store_type);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008579 if (isinstance == -1) {
8580 return 1;
8581 }
8582 if (isinstance) {
8583 *out = Store;
8584 return 0;
8585 }
Victor Stinner74419f02020-07-03 11:35:37 +02008586 isinstance = PyObject_IsInstance(obj, state->Del_type);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008587 if (isinstance == -1) {
8588 return 1;
8589 }
8590 if (isinstance) {
8591 *out = Del;
8592 return 0;
8593 }
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008594
8595 PyErr_Format(PyExc_TypeError, "expected some sort of expr_context, but got %R", obj);
8596 return 1;
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00008597}
8598
8599int
Victor Stinner74419f02020-07-03 11:35:37 +02008600obj2ast_boolop(astmodulestate *state, PyObject* obj, boolop_ty* out, PyArena*
8601 arena)
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00008602{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008603 int isinstance;
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00008604
Victor Stinner74419f02020-07-03 11:35:37 +02008605 isinstance = PyObject_IsInstance(obj, state->And_type);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008606 if (isinstance == -1) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00008607 return 1;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008608 }
8609 if (isinstance) {
8610 *out = And;
8611 return 0;
8612 }
Victor Stinner74419f02020-07-03 11:35:37 +02008613 isinstance = PyObject_IsInstance(obj, state->Or_type);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008614 if (isinstance == -1) {
8615 return 1;
8616 }
8617 if (isinstance) {
8618 *out = Or;
8619 return 0;
8620 }
8621
8622 PyErr_Format(PyExc_TypeError, "expected some sort of boolop, but got %R", obj);
8623 return 1;
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00008624}
8625
8626int
Victor Stinner74419f02020-07-03 11:35:37 +02008627obj2ast_operator(astmodulestate *state, PyObject* obj, operator_ty* out,
8628 PyArena* arena)
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00008629{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008630 int isinstance;
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00008631
Victor Stinner74419f02020-07-03 11:35:37 +02008632 isinstance = PyObject_IsInstance(obj, state->Add_type);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008633 if (isinstance == -1) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00008634 return 1;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008635 }
8636 if (isinstance) {
8637 *out = Add;
8638 return 0;
8639 }
Victor Stinner74419f02020-07-03 11:35:37 +02008640 isinstance = PyObject_IsInstance(obj, state->Sub_type);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008641 if (isinstance == -1) {
8642 return 1;
8643 }
8644 if (isinstance) {
8645 *out = Sub;
8646 return 0;
8647 }
Victor Stinner74419f02020-07-03 11:35:37 +02008648 isinstance = PyObject_IsInstance(obj, state->Mult_type);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008649 if (isinstance == -1) {
8650 return 1;
8651 }
8652 if (isinstance) {
8653 *out = Mult;
8654 return 0;
8655 }
Victor Stinner74419f02020-07-03 11:35:37 +02008656 isinstance = PyObject_IsInstance(obj, state->MatMult_type);
Benjamin Petersond51374e2014-04-09 23:55:56 -04008657 if (isinstance == -1) {
8658 return 1;
8659 }
8660 if (isinstance) {
8661 *out = MatMult;
8662 return 0;
8663 }
Victor Stinner74419f02020-07-03 11:35:37 +02008664 isinstance = PyObject_IsInstance(obj, state->Div_type);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008665 if (isinstance == -1) {
8666 return 1;
8667 }
8668 if (isinstance) {
8669 *out = Div;
8670 return 0;
8671 }
Victor Stinner74419f02020-07-03 11:35:37 +02008672 isinstance = PyObject_IsInstance(obj, state->Mod_type);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008673 if (isinstance == -1) {
8674 return 1;
8675 }
8676 if (isinstance) {
8677 *out = Mod;
8678 return 0;
8679 }
Victor Stinner74419f02020-07-03 11:35:37 +02008680 isinstance = PyObject_IsInstance(obj, state->Pow_type);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008681 if (isinstance == -1) {
8682 return 1;
8683 }
8684 if (isinstance) {
8685 *out = Pow;
8686 return 0;
8687 }
Victor Stinner74419f02020-07-03 11:35:37 +02008688 isinstance = PyObject_IsInstance(obj, state->LShift_type);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008689 if (isinstance == -1) {
8690 return 1;
8691 }
8692 if (isinstance) {
8693 *out = LShift;
8694 return 0;
8695 }
Victor Stinner74419f02020-07-03 11:35:37 +02008696 isinstance = PyObject_IsInstance(obj, state->RShift_type);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008697 if (isinstance == -1) {
8698 return 1;
8699 }
8700 if (isinstance) {
8701 *out = RShift;
8702 return 0;
8703 }
Victor Stinner74419f02020-07-03 11:35:37 +02008704 isinstance = PyObject_IsInstance(obj, state->BitOr_type);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008705 if (isinstance == -1) {
8706 return 1;
8707 }
8708 if (isinstance) {
8709 *out = BitOr;
8710 return 0;
8711 }
Victor Stinner74419f02020-07-03 11:35:37 +02008712 isinstance = PyObject_IsInstance(obj, state->BitXor_type);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008713 if (isinstance == -1) {
8714 return 1;
8715 }
8716 if (isinstance) {
8717 *out = BitXor;
8718 return 0;
8719 }
Victor Stinner74419f02020-07-03 11:35:37 +02008720 isinstance = PyObject_IsInstance(obj, state->BitAnd_type);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008721 if (isinstance == -1) {
8722 return 1;
8723 }
8724 if (isinstance) {
8725 *out = BitAnd;
8726 return 0;
8727 }
Victor Stinner74419f02020-07-03 11:35:37 +02008728 isinstance = PyObject_IsInstance(obj, state->FloorDiv_type);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008729 if (isinstance == -1) {
8730 return 1;
8731 }
8732 if (isinstance) {
8733 *out = FloorDiv;
8734 return 0;
8735 }
8736
8737 PyErr_Format(PyExc_TypeError, "expected some sort of operator, but got %R", obj);
8738 return 1;
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00008739}
8740
8741int
Victor Stinner74419f02020-07-03 11:35:37 +02008742obj2ast_unaryop(astmodulestate *state, PyObject* obj, unaryop_ty* out, PyArena*
8743 arena)
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00008744{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008745 int isinstance;
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00008746
Victor Stinner74419f02020-07-03 11:35:37 +02008747 isinstance = PyObject_IsInstance(obj, state->Invert_type);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008748 if (isinstance == -1) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00008749 return 1;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008750 }
8751 if (isinstance) {
8752 *out = Invert;
8753 return 0;
8754 }
Victor Stinner74419f02020-07-03 11:35:37 +02008755 isinstance = PyObject_IsInstance(obj, state->Not_type);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008756 if (isinstance == -1) {
8757 return 1;
8758 }
8759 if (isinstance) {
8760 *out = Not;
8761 return 0;
8762 }
Victor Stinner74419f02020-07-03 11:35:37 +02008763 isinstance = PyObject_IsInstance(obj, state->UAdd_type);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008764 if (isinstance == -1) {
8765 return 1;
8766 }
8767 if (isinstance) {
8768 *out = UAdd;
8769 return 0;
8770 }
Victor Stinner74419f02020-07-03 11:35:37 +02008771 isinstance = PyObject_IsInstance(obj, state->USub_type);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008772 if (isinstance == -1) {
8773 return 1;
8774 }
8775 if (isinstance) {
8776 *out = USub;
8777 return 0;
8778 }
8779
8780 PyErr_Format(PyExc_TypeError, "expected some sort of unaryop, but got %R", obj);
8781 return 1;
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00008782}
8783
8784int
Victor Stinner74419f02020-07-03 11:35:37 +02008785obj2ast_cmpop(astmodulestate *state, PyObject* obj, cmpop_ty* out, PyArena*
8786 arena)
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00008787{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008788 int isinstance;
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00008789
Victor Stinner74419f02020-07-03 11:35:37 +02008790 isinstance = PyObject_IsInstance(obj, state->Eq_type);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008791 if (isinstance == -1) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00008792 return 1;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008793 }
8794 if (isinstance) {
8795 *out = Eq;
8796 return 0;
8797 }
Victor Stinner74419f02020-07-03 11:35:37 +02008798 isinstance = PyObject_IsInstance(obj, state->NotEq_type);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008799 if (isinstance == -1) {
8800 return 1;
8801 }
8802 if (isinstance) {
8803 *out = NotEq;
8804 return 0;
8805 }
Victor Stinner74419f02020-07-03 11:35:37 +02008806 isinstance = PyObject_IsInstance(obj, state->Lt_type);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008807 if (isinstance == -1) {
8808 return 1;
8809 }
8810 if (isinstance) {
8811 *out = Lt;
8812 return 0;
8813 }
Victor Stinner74419f02020-07-03 11:35:37 +02008814 isinstance = PyObject_IsInstance(obj, state->LtE_type);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008815 if (isinstance == -1) {
8816 return 1;
8817 }
8818 if (isinstance) {
8819 *out = LtE;
8820 return 0;
8821 }
Victor Stinner74419f02020-07-03 11:35:37 +02008822 isinstance = PyObject_IsInstance(obj, state->Gt_type);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008823 if (isinstance == -1) {
8824 return 1;
8825 }
8826 if (isinstance) {
8827 *out = Gt;
8828 return 0;
8829 }
Victor Stinner74419f02020-07-03 11:35:37 +02008830 isinstance = PyObject_IsInstance(obj, state->GtE_type);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008831 if (isinstance == -1) {
8832 return 1;
8833 }
8834 if (isinstance) {
8835 *out = GtE;
8836 return 0;
8837 }
Victor Stinner74419f02020-07-03 11:35:37 +02008838 isinstance = PyObject_IsInstance(obj, state->Is_type);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008839 if (isinstance == -1) {
8840 return 1;
8841 }
8842 if (isinstance) {
8843 *out = Is;
8844 return 0;
8845 }
Victor Stinner74419f02020-07-03 11:35:37 +02008846 isinstance = PyObject_IsInstance(obj, state->IsNot_type);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008847 if (isinstance == -1) {
8848 return 1;
8849 }
8850 if (isinstance) {
8851 *out = IsNot;
8852 return 0;
8853 }
Victor Stinner74419f02020-07-03 11:35:37 +02008854 isinstance = PyObject_IsInstance(obj, state->In_type);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008855 if (isinstance == -1) {
8856 return 1;
8857 }
8858 if (isinstance) {
8859 *out = In;
8860 return 0;
8861 }
Victor Stinner74419f02020-07-03 11:35:37 +02008862 isinstance = PyObject_IsInstance(obj, state->NotIn_type);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008863 if (isinstance == -1) {
8864 return 1;
8865 }
8866 if (isinstance) {
8867 *out = NotIn;
8868 return 0;
8869 }
8870
8871 PyErr_Format(PyExc_TypeError, "expected some sort of cmpop, but got %R", obj);
8872 return 1;
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00008873}
8874
8875int
Victor Stinner74419f02020-07-03 11:35:37 +02008876obj2ast_comprehension(astmodulestate *state, PyObject* obj, comprehension_ty*
8877 out, PyArena* arena)
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00008878{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008879 PyObject* tmp = NULL;
8880 expr_ty target;
8881 expr_ty iter;
Pablo Galindoa5634c42020-09-16 19:42:00 +01008882 asdl_expr_seq* ifs;
Yury Selivanov52c4e7c2016-09-09 10:36:01 -07008883 int is_async;
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00008884
Victor Stinner74419f02020-07-03 11:35:37 +02008885 if (_PyObject_LookupAttr(obj, state->target, &tmp) < 0) {
Serhiy Storchakaf320be72018-01-25 10:49:40 +02008886 return 1;
8887 }
8888 if (tmp == NULL) {
8889 PyErr_SetString(PyExc_TypeError, "required field \"target\" missing from comprehension");
8890 return 1;
8891 }
8892 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008893 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02008894 res = obj2ast_expr(state, tmp, &target, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008895 if (res != 0) goto failed;
Victor Stinner1acc1292013-07-27 00:03:47 +02008896 Py_CLEAR(tmp);
Serhiy Storchakaf320be72018-01-25 10:49:40 +02008897 }
Victor Stinner74419f02020-07-03 11:35:37 +02008898 if (_PyObject_LookupAttr(obj, state->iter, &tmp) < 0) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00008899 return 1;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008900 }
Serhiy Storchakaf320be72018-01-25 10:49:40 +02008901 if (tmp == NULL) {
8902 PyErr_SetString(PyExc_TypeError, "required field \"iter\" missing from comprehension");
8903 return 1;
8904 }
8905 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008906 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02008907 res = obj2ast_expr(state, tmp, &iter, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008908 if (res != 0) goto failed;
Victor Stinner1acc1292013-07-27 00:03:47 +02008909 Py_CLEAR(tmp);
Serhiy Storchakaf320be72018-01-25 10:49:40 +02008910 }
Victor Stinner74419f02020-07-03 11:35:37 +02008911 if (_PyObject_LookupAttr(obj, state->ifs, &tmp) < 0) {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008912 return 1;
8913 }
Serhiy Storchakaf320be72018-01-25 10:49:40 +02008914 if (tmp == NULL) {
8915 PyErr_SetString(PyExc_TypeError, "required field \"ifs\" missing from comprehension");
8916 return 1;
8917 }
8918 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008919 int res;
8920 Py_ssize_t len;
8921 Py_ssize_t i;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008922 if (!PyList_Check(tmp)) {
Dino Viehlandac46eb42019-09-11 10:16:34 -07008923 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 +02008924 goto failed;
8925 }
8926 len = PyList_GET_SIZE(tmp);
Pablo Galindoa5634c42020-09-16 19:42:00 +01008927 ifs = _Py_asdl_expr_seq_new(len, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008928 if (ifs == NULL) goto failed;
8929 for (i = 0; i < len; i++) {
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07008930 expr_ty val;
Serhiy Storchaka43c97312019-09-10 13:02:30 +03008931 PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
8932 Py_INCREF(tmp2);
Victor Stinner74419f02020-07-03 11:35:37 +02008933 res = obj2ast_expr(state, tmp2, &val, arena);
Serhiy Storchaka43c97312019-09-10 13:02:30 +03008934 Py_DECREF(tmp2);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008935 if (res != 0) goto failed;
Serhiy Storchakacf380602016-10-07 21:51:28 +03008936 if (len != PyList_GET_SIZE(tmp)) {
8937 PyErr_SetString(PyExc_RuntimeError, "comprehension field \"ifs\" changed size during iteration");
8938 goto failed;
8939 }
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07008940 asdl_seq_SET(ifs, i, val);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008941 }
Victor Stinner1acc1292013-07-27 00:03:47 +02008942 Py_CLEAR(tmp);
Serhiy Storchakaf320be72018-01-25 10:49:40 +02008943 }
Victor Stinner74419f02020-07-03 11:35:37 +02008944 if (_PyObject_LookupAttr(obj, state->is_async, &tmp) < 0) {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008945 return 1;
8946 }
Serhiy Storchakaf320be72018-01-25 10:49:40 +02008947 if (tmp == NULL) {
8948 PyErr_SetString(PyExc_TypeError, "required field \"is_async\" missing from comprehension");
8949 return 1;
8950 }
8951 else {
Yury Selivanov52c4e7c2016-09-09 10:36:01 -07008952 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02008953 res = obj2ast_int(state, tmp, &is_async, arena);
Yury Selivanov52c4e7c2016-09-09 10:36:01 -07008954 if (res != 0) goto failed;
8955 Py_CLEAR(tmp);
Yury Selivanov52c4e7c2016-09-09 10:36:01 -07008956 }
8957 *out = comprehension(target, iter, ifs, is_async, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008958 return 0;
8959failed:
8960 Py_XDECREF(tmp);
8961 return 1;
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00008962}
8963
8964int
Victor Stinner74419f02020-07-03 11:35:37 +02008965obj2ast_excepthandler(astmodulestate *state, PyObject* obj, excepthandler_ty*
8966 out, PyArena* arena)
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00008967{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008968 int isinstance;
Neal Norwitzad74aa82008-03-31 05:14:30 +00008969
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008970 PyObject *tmp = NULL;
Dino Viehlandac46eb42019-09-11 10:16:34 -07008971 PyObject *tp;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008972 int lineno;
8973 int col_offset;
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00008974 int end_lineno;
8975 int end_col_offset;
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00008976
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008977 if (obj == Py_None) {
8978 *out = NULL;
8979 return 0;
8980 }
Victor Stinner74419f02020-07-03 11:35:37 +02008981 if (_PyObject_LookupAttr(obj, state->lineno, &tmp) < 0) {
Serhiy Storchakaf320be72018-01-25 10:49:40 +02008982 return 1;
8983 }
8984 if (tmp == NULL) {
8985 PyErr_SetString(PyExc_TypeError, "required field \"lineno\" missing from excepthandler");
8986 return 1;
8987 }
8988 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008989 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02008990 res = obj2ast_int(state, tmp, &lineno, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008991 if (res != 0) goto failed;
Victor Stinner1acc1292013-07-27 00:03:47 +02008992 Py_CLEAR(tmp);
Serhiy Storchakaf320be72018-01-25 10:49:40 +02008993 }
Victor Stinner74419f02020-07-03 11:35:37 +02008994 if (_PyObject_LookupAttr(obj, state->col_offset, &tmp) < 0) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00008995 return 1;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008996 }
Serhiy Storchakaf320be72018-01-25 10:49:40 +02008997 if (tmp == NULL) {
8998 PyErr_SetString(PyExc_TypeError, "required field \"col_offset\" missing from excepthandler");
8999 return 1;
9000 }
9001 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009002 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02009003 res = obj2ast_int(state, tmp, &col_offset, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009004 if (res != 0) goto failed;
Victor Stinner1acc1292013-07-27 00:03:47 +02009005 Py_CLEAR(tmp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009006 }
Victor Stinner74419f02020-07-03 11:35:37 +02009007 if (_PyObject_LookupAttr(obj, state->end_lineno, &tmp) < 0) {
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00009008 return 1;
9009 }
9010 if (tmp == NULL || tmp == Py_None) {
9011 Py_CLEAR(tmp);
9012 end_lineno = 0;
9013 }
9014 else {
9015 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02009016 res = obj2ast_int(state, tmp, &end_lineno, arena);
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00009017 if (res != 0) goto failed;
9018 Py_CLEAR(tmp);
9019 }
Victor Stinner74419f02020-07-03 11:35:37 +02009020 if (_PyObject_LookupAttr(obj, state->end_col_offset, &tmp) < 0) {
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00009021 return 1;
9022 }
9023 if (tmp == NULL || tmp == Py_None) {
9024 Py_CLEAR(tmp);
9025 end_col_offset = 0;
9026 }
9027 else {
9028 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02009029 res = obj2ast_int(state, tmp, &end_col_offset, arena);
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00009030 if (res != 0) goto failed;
9031 Py_CLEAR(tmp);
9032 }
Victor Stinner74419f02020-07-03 11:35:37 +02009033 tp = state->ExceptHandler_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07009034 isinstance = PyObject_IsInstance(obj, tp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009035 if (isinstance == -1) {
9036 return 1;
9037 }
9038 if (isinstance) {
9039 expr_ty type;
9040 identifier name;
Pablo Galindoa5634c42020-09-16 19:42:00 +01009041 asdl_stmt_seq* body;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009042
Victor Stinner74419f02020-07-03 11:35:37 +02009043 if (_PyObject_LookupAttr(obj, state->type, &tmp) < 0) {
Serhiy Storchakaf320be72018-01-25 10:49:40 +02009044 return 1;
9045 }
9046 if (tmp == NULL || tmp == Py_None) {
9047 Py_CLEAR(tmp);
9048 type = NULL;
9049 }
9050 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009051 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02009052 res = obj2ast_expr(state, tmp, &type, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009053 if (res != 0) goto failed;
Victor Stinner1acc1292013-07-27 00:03:47 +02009054 Py_CLEAR(tmp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009055 }
Victor Stinner74419f02020-07-03 11:35:37 +02009056 if (_PyObject_LookupAttr(obj, state->name, &tmp) < 0) {
Serhiy Storchakaf320be72018-01-25 10:49:40 +02009057 return 1;
9058 }
9059 if (tmp == NULL || tmp == Py_None) {
9060 Py_CLEAR(tmp);
9061 name = NULL;
9062 }
9063 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009064 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02009065 res = obj2ast_identifier(state, tmp, &name, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009066 if (res != 0) goto failed;
Victor Stinner1acc1292013-07-27 00:03:47 +02009067 Py_CLEAR(tmp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009068 }
Victor Stinner74419f02020-07-03 11:35:37 +02009069 if (_PyObject_LookupAttr(obj, state->body, &tmp) < 0) {
Serhiy Storchakaf320be72018-01-25 10:49:40 +02009070 return 1;
9071 }
9072 if (tmp == NULL) {
9073 PyErr_SetString(PyExc_TypeError, "required field \"body\" missing from ExceptHandler");
9074 return 1;
9075 }
9076 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009077 int res;
9078 Py_ssize_t len;
9079 Py_ssize_t i;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009080 if (!PyList_Check(tmp)) {
Dino Viehlandac46eb42019-09-11 10:16:34 -07009081 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 +02009082 goto failed;
9083 }
9084 len = PyList_GET_SIZE(tmp);
Pablo Galindoa5634c42020-09-16 19:42:00 +01009085 body = _Py_asdl_stmt_seq_new(len, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009086 if (body == NULL) goto failed;
9087 for (i = 0; i < len; i++) {
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07009088 stmt_ty val;
Serhiy Storchaka43c97312019-09-10 13:02:30 +03009089 PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
9090 Py_INCREF(tmp2);
Victor Stinner74419f02020-07-03 11:35:37 +02009091 res = obj2ast_stmt(state, tmp2, &val, arena);
Serhiy Storchaka43c97312019-09-10 13:02:30 +03009092 Py_DECREF(tmp2);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009093 if (res != 0) goto failed;
Serhiy Storchakacf380602016-10-07 21:51:28 +03009094 if (len != PyList_GET_SIZE(tmp)) {
9095 PyErr_SetString(PyExc_RuntimeError, "ExceptHandler field \"body\" changed size during iteration");
9096 goto failed;
9097 }
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07009098 asdl_seq_SET(body, i, val);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009099 }
Victor Stinner1acc1292013-07-27 00:03:47 +02009100 Py_CLEAR(tmp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009101 }
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00009102 *out = ExceptHandler(type, name, body, lineno, col_offset, end_lineno,
9103 end_col_offset, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009104 if (*out == NULL) goto failed;
9105 return 0;
9106 }
9107
9108 PyErr_Format(PyExc_TypeError, "expected some sort of excepthandler, but got %R", obj);
9109 failed:
9110 Py_XDECREF(tmp);
9111 return 1;
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00009112}
9113
9114int
Victor Stinner74419f02020-07-03 11:35:37 +02009115obj2ast_arguments(astmodulestate *state, PyObject* obj, arguments_ty* out,
9116 PyArena* arena)
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00009117{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009118 PyObject* tmp = NULL;
Pablo Galindoa5634c42020-09-16 19:42:00 +01009119 asdl_arg_seq* posonlyargs;
9120 asdl_arg_seq* args;
Victor Stinneree4b59c2013-07-27 00:01:35 +02009121 arg_ty vararg;
Pablo Galindoa5634c42020-09-16 19:42:00 +01009122 asdl_arg_seq* kwonlyargs;
9123 asdl_expr_seq* kw_defaults;
Victor Stinneree4b59c2013-07-27 00:01:35 +02009124 arg_ty kwarg;
Pablo Galindoa5634c42020-09-16 19:42:00 +01009125 asdl_expr_seq* defaults;
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00009126
Victor Stinner74419f02020-07-03 11:35:37 +02009127 if (_PyObject_LookupAttr(obj, state->posonlyargs, &tmp) < 0) {
Pablo Galindo8c77b8c2019-04-29 13:36:57 +01009128 return 1;
9129 }
9130 if (tmp == NULL) {
9131 PyErr_SetString(PyExc_TypeError, "required field \"posonlyargs\" missing from arguments");
9132 return 1;
9133 }
9134 else {
9135 int res;
9136 Py_ssize_t len;
9137 Py_ssize_t i;
9138 if (!PyList_Check(tmp)) {
Dino Viehlandac46eb42019-09-11 10:16:34 -07009139 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 +01009140 goto failed;
9141 }
9142 len = PyList_GET_SIZE(tmp);
Pablo Galindoa5634c42020-09-16 19:42:00 +01009143 posonlyargs = _Py_asdl_arg_seq_new(len, arena);
Pablo Galindo8c77b8c2019-04-29 13:36:57 +01009144 if (posonlyargs == NULL) goto failed;
9145 for (i = 0; i < len; i++) {
9146 arg_ty val;
Serhiy Storchaka43c97312019-09-10 13:02:30 +03009147 PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
9148 Py_INCREF(tmp2);
Victor Stinner74419f02020-07-03 11:35:37 +02009149 res = obj2ast_arg(state, tmp2, &val, arena);
Serhiy Storchaka43c97312019-09-10 13:02:30 +03009150 Py_DECREF(tmp2);
Pablo Galindo8c77b8c2019-04-29 13:36:57 +01009151 if (res != 0) goto failed;
9152 if (len != PyList_GET_SIZE(tmp)) {
9153 PyErr_SetString(PyExc_RuntimeError, "arguments field \"posonlyargs\" changed size during iteration");
9154 goto failed;
9155 }
9156 asdl_seq_SET(posonlyargs, i, val);
9157 }
9158 Py_CLEAR(tmp);
9159 }
Victor Stinner74419f02020-07-03 11:35:37 +02009160 if (_PyObject_LookupAttr(obj, state->args, &tmp) < 0) {
Pablo Galindocd6e83b2019-07-15 01:32:18 +02009161 return 1;
9162 }
9163 if (tmp == NULL) {
9164 PyErr_SetString(PyExc_TypeError, "required field \"args\" missing from arguments");
9165 return 1;
9166 }
9167 else {
9168 int res;
9169 Py_ssize_t len;
9170 Py_ssize_t i;
9171 if (!PyList_Check(tmp)) {
Dino Viehlandac46eb42019-09-11 10:16:34 -07009172 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 +02009173 goto failed;
9174 }
9175 len = PyList_GET_SIZE(tmp);
Pablo Galindoa5634c42020-09-16 19:42:00 +01009176 args = _Py_asdl_arg_seq_new(len, arena);
Pablo Galindocd6e83b2019-07-15 01:32:18 +02009177 if (args == NULL) goto failed;
9178 for (i = 0; i < len; i++) {
9179 arg_ty val;
Serhiy Storchaka43c97312019-09-10 13:02:30 +03009180 PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
9181 Py_INCREF(tmp2);
Victor Stinner74419f02020-07-03 11:35:37 +02009182 res = obj2ast_arg(state, tmp2, &val, arena);
Serhiy Storchaka43c97312019-09-10 13:02:30 +03009183 Py_DECREF(tmp2);
Pablo Galindocd6e83b2019-07-15 01:32:18 +02009184 if (res != 0) goto failed;
9185 if (len != PyList_GET_SIZE(tmp)) {
9186 PyErr_SetString(PyExc_RuntimeError, "arguments field \"args\" changed size during iteration");
9187 goto failed;
9188 }
9189 asdl_seq_SET(args, i, val);
9190 }
9191 Py_CLEAR(tmp);
9192 }
Victor Stinner74419f02020-07-03 11:35:37 +02009193 if (_PyObject_LookupAttr(obj, state->vararg, &tmp) < 0) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00009194 return 1;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009195 }
Serhiy Storchakaf320be72018-01-25 10:49:40 +02009196 if (tmp == NULL || tmp == Py_None) {
9197 Py_CLEAR(tmp);
9198 vararg = NULL;
9199 }
9200 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009201 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02009202 res = obj2ast_arg(state, tmp, &vararg, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009203 if (res != 0) goto failed;
Victor Stinner1acc1292013-07-27 00:03:47 +02009204 Py_CLEAR(tmp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009205 }
Victor Stinner74419f02020-07-03 11:35:37 +02009206 if (_PyObject_LookupAttr(obj, state->kwonlyargs, &tmp) < 0) {
Serhiy Storchakaf320be72018-01-25 10:49:40 +02009207 return 1;
9208 }
9209 if (tmp == NULL) {
9210 PyErr_SetString(PyExc_TypeError, "required field \"kwonlyargs\" missing from arguments");
9211 return 1;
9212 }
9213 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009214 int res;
9215 Py_ssize_t len;
9216 Py_ssize_t i;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009217 if (!PyList_Check(tmp)) {
Dino Viehlandac46eb42019-09-11 10:16:34 -07009218 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 +02009219 goto failed;
9220 }
9221 len = PyList_GET_SIZE(tmp);
Pablo Galindoa5634c42020-09-16 19:42:00 +01009222 kwonlyargs = _Py_asdl_arg_seq_new(len, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009223 if (kwonlyargs == NULL) goto failed;
9224 for (i = 0; i < len; i++) {
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07009225 arg_ty val;
Serhiy Storchaka43c97312019-09-10 13:02:30 +03009226 PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
9227 Py_INCREF(tmp2);
Victor Stinner74419f02020-07-03 11:35:37 +02009228 res = obj2ast_arg(state, tmp2, &val, arena);
Serhiy Storchaka43c97312019-09-10 13:02:30 +03009229 Py_DECREF(tmp2);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009230 if (res != 0) goto failed;
Serhiy Storchakacf380602016-10-07 21:51:28 +03009231 if (len != PyList_GET_SIZE(tmp)) {
9232 PyErr_SetString(PyExc_RuntimeError, "arguments field \"kwonlyargs\" changed size during iteration");
9233 goto failed;
9234 }
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07009235 asdl_seq_SET(kwonlyargs, i, val);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009236 }
Victor Stinner1acc1292013-07-27 00:03:47 +02009237 Py_CLEAR(tmp);
Serhiy Storchakaf320be72018-01-25 10:49:40 +02009238 }
Victor Stinner74419f02020-07-03 11:35:37 +02009239 if (_PyObject_LookupAttr(obj, state->kw_defaults, &tmp) < 0) {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009240 return 1;
9241 }
Serhiy Storchakaf320be72018-01-25 10:49:40 +02009242 if (tmp == NULL) {
9243 PyErr_SetString(PyExc_TypeError, "required field \"kw_defaults\" missing from arguments");
9244 return 1;
9245 }
9246 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009247 int res;
9248 Py_ssize_t len;
9249 Py_ssize_t i;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009250 if (!PyList_Check(tmp)) {
Dino Viehlandac46eb42019-09-11 10:16:34 -07009251 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 +02009252 goto failed;
9253 }
9254 len = PyList_GET_SIZE(tmp);
Pablo Galindoa5634c42020-09-16 19:42:00 +01009255 kw_defaults = _Py_asdl_expr_seq_new(len, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009256 if (kw_defaults == NULL) goto failed;
9257 for (i = 0; i < len; i++) {
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07009258 expr_ty val;
Serhiy Storchaka43c97312019-09-10 13:02:30 +03009259 PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
9260 Py_INCREF(tmp2);
Victor Stinner74419f02020-07-03 11:35:37 +02009261 res = obj2ast_expr(state, tmp2, &val, arena);
Serhiy Storchaka43c97312019-09-10 13:02:30 +03009262 Py_DECREF(tmp2);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009263 if (res != 0) goto failed;
Serhiy Storchakacf380602016-10-07 21:51:28 +03009264 if (len != PyList_GET_SIZE(tmp)) {
9265 PyErr_SetString(PyExc_RuntimeError, "arguments field \"kw_defaults\" changed size during iteration");
9266 goto failed;
9267 }
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07009268 asdl_seq_SET(kw_defaults, i, val);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009269 }
Victor Stinner1acc1292013-07-27 00:03:47 +02009270 Py_CLEAR(tmp);
Serhiy Storchakaf320be72018-01-25 10:49:40 +02009271 }
Victor Stinner74419f02020-07-03 11:35:37 +02009272 if (_PyObject_LookupAttr(obj, state->kwarg, &tmp) < 0) {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009273 return 1;
9274 }
Serhiy Storchakaf320be72018-01-25 10:49:40 +02009275 if (tmp == NULL || tmp == Py_None) {
9276 Py_CLEAR(tmp);
9277 kwarg = NULL;
9278 }
9279 else {
Victor Stinneree4b59c2013-07-27 00:01:35 +02009280 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02009281 res = obj2ast_arg(state, tmp, &kwarg, arena);
Victor Stinneree4b59c2013-07-27 00:01:35 +02009282 if (res != 0) goto failed;
Victor Stinnerb3189902013-07-27 00:04:42 +02009283 Py_CLEAR(tmp);
Victor Stinneree4b59c2013-07-27 00:01:35 +02009284 }
Victor Stinner74419f02020-07-03 11:35:37 +02009285 if (_PyObject_LookupAttr(obj, state->defaults, &tmp) < 0) {
Serhiy Storchakaf320be72018-01-25 10:49:40 +02009286 return 1;
9287 }
9288 if (tmp == NULL) {
9289 PyErr_SetString(PyExc_TypeError, "required field \"defaults\" missing from arguments");
9290 return 1;
9291 }
9292 else {
Victor Stinneree4b59c2013-07-27 00:01:35 +02009293 int res;
9294 Py_ssize_t len;
9295 Py_ssize_t i;
Victor Stinneree4b59c2013-07-27 00:01:35 +02009296 if (!PyList_Check(tmp)) {
Dino Viehlandac46eb42019-09-11 10:16:34 -07009297 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 +02009298 goto failed;
9299 }
9300 len = PyList_GET_SIZE(tmp);
Pablo Galindoa5634c42020-09-16 19:42:00 +01009301 defaults = _Py_asdl_expr_seq_new(len, arena);
Victor Stinneree4b59c2013-07-27 00:01:35 +02009302 if (defaults == NULL) goto failed;
9303 for (i = 0; i < len; i++) {
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07009304 expr_ty val;
Serhiy Storchaka43c97312019-09-10 13:02:30 +03009305 PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
9306 Py_INCREF(tmp2);
Victor Stinner74419f02020-07-03 11:35:37 +02009307 res = obj2ast_expr(state, tmp2, &val, arena);
Serhiy Storchaka43c97312019-09-10 13:02:30 +03009308 Py_DECREF(tmp2);
Victor Stinneree4b59c2013-07-27 00:01:35 +02009309 if (res != 0) goto failed;
Serhiy Storchakacf380602016-10-07 21:51:28 +03009310 if (len != PyList_GET_SIZE(tmp)) {
9311 PyErr_SetString(PyExc_RuntimeError, "arguments field \"defaults\" changed size during iteration");
9312 goto failed;
9313 }
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07009314 asdl_seq_SET(defaults, i, val);
Victor Stinneree4b59c2013-07-27 00:01:35 +02009315 }
Victor Stinnerb3189902013-07-27 00:04:42 +02009316 Py_CLEAR(tmp);
Victor Stinneree4b59c2013-07-27 00:01:35 +02009317 }
Pablo Galindocd6e83b2019-07-15 01:32:18 +02009318 *out = arguments(posonlyargs, args, vararg, kwonlyargs, kw_defaults, kwarg,
Pablo Galindo8c77b8c2019-04-29 13:36:57 +01009319 defaults, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009320 return 0;
9321failed:
9322 Py_XDECREF(tmp);
9323 return 1;
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00009324}
9325
9326int
Victor Stinner74419f02020-07-03 11:35:37 +02009327obj2ast_arg(astmodulestate *state, PyObject* obj, arg_ty* out, PyArena* arena)
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00009328{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009329 PyObject* tmp = NULL;
9330 identifier arg;
9331 expr_ty annotation;
Guido van Rossumdcfcd142019-01-31 03:40:27 -08009332 string type_comment;
Victor Stinnerc106c682015-11-06 17:01:48 +01009333 int lineno;
9334 int col_offset;
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00009335 int end_lineno;
9336 int end_col_offset;
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00009337
Victor Stinner74419f02020-07-03 11:35:37 +02009338 if (_PyObject_LookupAttr(obj, state->arg, &tmp) < 0) {
Serhiy Storchakaf320be72018-01-25 10:49:40 +02009339 return 1;
9340 }
9341 if (tmp == NULL) {
9342 PyErr_SetString(PyExc_TypeError, "required field \"arg\" missing from arg");
9343 return 1;
9344 }
9345 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009346 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02009347 res = obj2ast_identifier(state, tmp, &arg, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009348 if (res != 0) goto failed;
Victor Stinner1acc1292013-07-27 00:03:47 +02009349 Py_CLEAR(tmp);
Serhiy Storchakaf320be72018-01-25 10:49:40 +02009350 }
Victor Stinner74419f02020-07-03 11:35:37 +02009351 if (_PyObject_LookupAttr(obj, state->annotation, &tmp) < 0) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00009352 return 1;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009353 }
Serhiy Storchakaf320be72018-01-25 10:49:40 +02009354 if (tmp == NULL || tmp == Py_None) {
9355 Py_CLEAR(tmp);
9356 annotation = NULL;
9357 }
9358 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009359 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02009360 res = obj2ast_expr(state, tmp, &annotation, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009361 if (res != 0) goto failed;
Victor Stinner1acc1292013-07-27 00:03:47 +02009362 Py_CLEAR(tmp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009363 }
Victor Stinner74419f02020-07-03 11:35:37 +02009364 if (_PyObject_LookupAttr(obj, state->type_comment, &tmp) < 0) {
Guido van Rossumdcfcd142019-01-31 03:40:27 -08009365 return 1;
9366 }
9367 if (tmp == NULL || tmp == Py_None) {
9368 Py_CLEAR(tmp);
9369 type_comment = NULL;
9370 }
9371 else {
9372 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02009373 res = obj2ast_string(state, tmp, &type_comment, arena);
Guido van Rossumdcfcd142019-01-31 03:40:27 -08009374 if (res != 0) goto failed;
9375 Py_CLEAR(tmp);
9376 }
Victor Stinner74419f02020-07-03 11:35:37 +02009377 if (_PyObject_LookupAttr(obj, state->lineno, &tmp) < 0) {
Serhiy Storchakaf320be72018-01-25 10:49:40 +02009378 return 1;
9379 }
9380 if (tmp == NULL) {
9381 PyErr_SetString(PyExc_TypeError, "required field \"lineno\" missing from arg");
9382 return 1;
9383 }
9384 else {
Victor Stinnerc106c682015-11-06 17:01:48 +01009385 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02009386 res = obj2ast_int(state, tmp, &lineno, arena);
Victor Stinnerc106c682015-11-06 17:01:48 +01009387 if (res != 0) goto failed;
9388 Py_CLEAR(tmp);
Serhiy Storchakaf320be72018-01-25 10:49:40 +02009389 }
Victor Stinner74419f02020-07-03 11:35:37 +02009390 if (_PyObject_LookupAttr(obj, state->col_offset, &tmp) < 0) {
Victor Stinnerc106c682015-11-06 17:01:48 +01009391 return 1;
9392 }
Serhiy Storchakaf320be72018-01-25 10:49:40 +02009393 if (tmp == NULL) {
9394 PyErr_SetString(PyExc_TypeError, "required field \"col_offset\" missing from arg");
9395 return 1;
9396 }
9397 else {
Victor Stinnerc106c682015-11-06 17:01:48 +01009398 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02009399 res = obj2ast_int(state, tmp, &col_offset, arena);
Victor Stinnerc106c682015-11-06 17:01:48 +01009400 if (res != 0) goto failed;
9401 Py_CLEAR(tmp);
Victor Stinnerc106c682015-11-06 17:01:48 +01009402 }
Victor Stinner74419f02020-07-03 11:35:37 +02009403 if (_PyObject_LookupAttr(obj, state->end_lineno, &tmp) < 0) {
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00009404 return 1;
9405 }
9406 if (tmp == NULL || tmp == Py_None) {
9407 Py_CLEAR(tmp);
9408 end_lineno = 0;
9409 }
9410 else {
9411 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02009412 res = obj2ast_int(state, tmp, &end_lineno, arena);
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00009413 if (res != 0) goto failed;
9414 Py_CLEAR(tmp);
9415 }
Victor Stinner74419f02020-07-03 11:35:37 +02009416 if (_PyObject_LookupAttr(obj, state->end_col_offset, &tmp) < 0) {
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00009417 return 1;
9418 }
9419 if (tmp == NULL || tmp == Py_None) {
9420 Py_CLEAR(tmp);
9421 end_col_offset = 0;
9422 }
9423 else {
9424 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02009425 res = obj2ast_int(state, tmp, &end_col_offset, arena);
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00009426 if (res != 0) goto failed;
9427 Py_CLEAR(tmp);
9428 }
Guido van Rossumdcfcd142019-01-31 03:40:27 -08009429 *out = arg(arg, annotation, type_comment, lineno, col_offset, end_lineno,
9430 end_col_offset, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009431 return 0;
9432failed:
9433 Py_XDECREF(tmp);
9434 return 1;
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00009435}
9436
9437int
Victor Stinner74419f02020-07-03 11:35:37 +02009438obj2ast_keyword(astmodulestate *state, PyObject* obj, keyword_ty* out, PyArena*
9439 arena)
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00009440{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009441 PyObject* tmp = NULL;
9442 identifier arg;
9443 expr_ty value;
Pablo Galindo168660b2020-04-02 00:47:39 +01009444 int lineno;
9445 int col_offset;
9446 int end_lineno;
9447 int end_col_offset;
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00009448
Victor Stinner74419f02020-07-03 11:35:37 +02009449 if (_PyObject_LookupAttr(obj, state->arg, &tmp) < 0) {
Serhiy Storchakaf320be72018-01-25 10:49:40 +02009450 return 1;
9451 }
9452 if (tmp == NULL || tmp == Py_None) {
9453 Py_CLEAR(tmp);
9454 arg = NULL;
9455 }
9456 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009457 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02009458 res = obj2ast_identifier(state, tmp, &arg, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009459 if (res != 0) goto failed;
Victor Stinner1acc1292013-07-27 00:03:47 +02009460 Py_CLEAR(tmp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009461 }
Victor Stinner74419f02020-07-03 11:35:37 +02009462 if (_PyObject_LookupAttr(obj, state->value, &tmp) < 0) {
Serhiy Storchakaf320be72018-01-25 10:49:40 +02009463 return 1;
9464 }
9465 if (tmp == NULL) {
9466 PyErr_SetString(PyExc_TypeError, "required field \"value\" missing from keyword");
9467 return 1;
9468 }
9469 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009470 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02009471 res = obj2ast_expr(state, tmp, &value, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009472 if (res != 0) goto failed;
Victor Stinner1acc1292013-07-27 00:03:47 +02009473 Py_CLEAR(tmp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009474 }
Victor Stinner74419f02020-07-03 11:35:37 +02009475 if (_PyObject_LookupAttr(obj, state->lineno, &tmp) < 0) {
Pablo Galindo168660b2020-04-02 00:47:39 +01009476 return 1;
9477 }
9478 if (tmp == NULL) {
9479 PyErr_SetString(PyExc_TypeError, "required field \"lineno\" missing from keyword");
9480 return 1;
9481 }
9482 else {
9483 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02009484 res = obj2ast_int(state, tmp, &lineno, arena);
Pablo Galindo168660b2020-04-02 00:47:39 +01009485 if (res != 0) goto failed;
9486 Py_CLEAR(tmp);
9487 }
Victor Stinner74419f02020-07-03 11:35:37 +02009488 if (_PyObject_LookupAttr(obj, state->col_offset, &tmp) < 0) {
Pablo Galindo168660b2020-04-02 00:47:39 +01009489 return 1;
9490 }
9491 if (tmp == NULL) {
9492 PyErr_SetString(PyExc_TypeError, "required field \"col_offset\" missing from keyword");
9493 return 1;
9494 }
9495 else {
9496 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02009497 res = obj2ast_int(state, tmp, &col_offset, arena);
Pablo Galindo168660b2020-04-02 00:47:39 +01009498 if (res != 0) goto failed;
9499 Py_CLEAR(tmp);
9500 }
Victor Stinner74419f02020-07-03 11:35:37 +02009501 if (_PyObject_LookupAttr(obj, state->end_lineno, &tmp) < 0) {
Pablo Galindo168660b2020-04-02 00:47:39 +01009502 return 1;
9503 }
9504 if (tmp == NULL || tmp == Py_None) {
9505 Py_CLEAR(tmp);
9506 end_lineno = 0;
9507 }
9508 else {
9509 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02009510 res = obj2ast_int(state, tmp, &end_lineno, arena);
Pablo Galindo168660b2020-04-02 00:47:39 +01009511 if (res != 0) goto failed;
9512 Py_CLEAR(tmp);
9513 }
Victor Stinner74419f02020-07-03 11:35:37 +02009514 if (_PyObject_LookupAttr(obj, state->end_col_offset, &tmp) < 0) {
Pablo Galindo168660b2020-04-02 00:47:39 +01009515 return 1;
9516 }
9517 if (tmp == NULL || tmp == Py_None) {
9518 Py_CLEAR(tmp);
9519 end_col_offset = 0;
9520 }
9521 else {
9522 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02009523 res = obj2ast_int(state, tmp, &end_col_offset, arena);
Pablo Galindo168660b2020-04-02 00:47:39 +01009524 if (res != 0) goto failed;
9525 Py_CLEAR(tmp);
9526 }
9527 *out = keyword(arg, value, lineno, col_offset, end_lineno, end_col_offset,
9528 arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009529 return 0;
9530failed:
9531 Py_XDECREF(tmp);
9532 return 1;
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00009533}
9534
9535int
Victor Stinner74419f02020-07-03 11:35:37 +02009536obj2ast_alias(astmodulestate *state, PyObject* obj, alias_ty* out, PyArena*
9537 arena)
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00009538{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009539 PyObject* tmp = NULL;
9540 identifier name;
9541 identifier asname;
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00009542
Victor Stinner74419f02020-07-03 11:35:37 +02009543 if (_PyObject_LookupAttr(obj, state->name, &tmp) < 0) {
Serhiy Storchakaf320be72018-01-25 10:49:40 +02009544 return 1;
9545 }
9546 if (tmp == NULL) {
9547 PyErr_SetString(PyExc_TypeError, "required field \"name\" missing from alias");
9548 return 1;
9549 }
9550 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009551 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02009552 res = obj2ast_identifier(state, tmp, &name, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009553 if (res != 0) goto failed;
Victor Stinner1acc1292013-07-27 00:03:47 +02009554 Py_CLEAR(tmp);
Serhiy Storchakaf320be72018-01-25 10:49:40 +02009555 }
Victor Stinner74419f02020-07-03 11:35:37 +02009556 if (_PyObject_LookupAttr(obj, state->asname, &tmp) < 0) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00009557 return 1;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009558 }
Serhiy Storchakaf320be72018-01-25 10:49:40 +02009559 if (tmp == NULL || tmp == Py_None) {
9560 Py_CLEAR(tmp);
9561 asname = NULL;
9562 }
9563 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009564 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02009565 res = obj2ast_identifier(state, tmp, &asname, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009566 if (res != 0) goto failed;
Victor Stinner1acc1292013-07-27 00:03:47 +02009567 Py_CLEAR(tmp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009568 }
9569 *out = alias(name, asname, arena);
9570 return 0;
9571failed:
9572 Py_XDECREF(tmp);
9573 return 1;
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00009574}
9575
Benjamin Petersonbf1bbc12011-05-27 13:58:08 -05009576int
Victor Stinner74419f02020-07-03 11:35:37 +02009577obj2ast_withitem(astmodulestate *state, PyObject* obj, withitem_ty* out,
9578 PyArena* arena)
Benjamin Petersonbf1bbc12011-05-27 13:58:08 -05009579{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009580 PyObject* tmp = NULL;
9581 expr_ty context_expr;
9582 expr_ty optional_vars;
Benjamin Petersonbf1bbc12011-05-27 13:58:08 -05009583
Victor Stinner74419f02020-07-03 11:35:37 +02009584 if (_PyObject_LookupAttr(obj, state->context_expr, &tmp) < 0) {
Serhiy Storchakaf320be72018-01-25 10:49:40 +02009585 return 1;
9586 }
9587 if (tmp == NULL) {
9588 PyErr_SetString(PyExc_TypeError, "required field \"context_expr\" missing from withitem");
9589 return 1;
9590 }
9591 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009592 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02009593 res = obj2ast_expr(state, tmp, &context_expr, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009594 if (res != 0) goto failed;
Victor Stinner1acc1292013-07-27 00:03:47 +02009595 Py_CLEAR(tmp);
Serhiy Storchakaf320be72018-01-25 10:49:40 +02009596 }
Victor Stinner74419f02020-07-03 11:35:37 +02009597 if (_PyObject_LookupAttr(obj, state->optional_vars, &tmp) < 0) {
Benjamin Petersonbf1bbc12011-05-27 13:58:08 -05009598 return 1;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009599 }
Serhiy Storchakaf320be72018-01-25 10:49:40 +02009600 if (tmp == NULL || tmp == Py_None) {
9601 Py_CLEAR(tmp);
9602 optional_vars = NULL;
9603 }
9604 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009605 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02009606 res = obj2ast_expr(state, tmp, &optional_vars, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009607 if (res != 0) goto failed;
Victor Stinner1acc1292013-07-27 00:03:47 +02009608 Py_CLEAR(tmp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009609 }
9610 *out = withitem(context_expr, optional_vars, arena);
9611 return 0;
9612failed:
9613 Py_XDECREF(tmp);
9614 return 1;
Benjamin Petersonbf1bbc12011-05-27 13:58:08 -05009615}
9616
Guido van Rossumdcfcd142019-01-31 03:40:27 -08009617int
Victor Stinner74419f02020-07-03 11:35:37 +02009618obj2ast_type_ignore(astmodulestate *state, PyObject* obj, type_ignore_ty* out,
9619 PyArena* arena)
Guido van Rossumdcfcd142019-01-31 03:40:27 -08009620{
9621 int isinstance;
9622
9623 PyObject *tmp = NULL;
Dino Viehlandac46eb42019-09-11 10:16:34 -07009624 PyObject *tp;
Guido van Rossumdcfcd142019-01-31 03:40:27 -08009625
9626 if (obj == Py_None) {
9627 *out = NULL;
9628 return 0;
9629 }
Victor Stinner74419f02020-07-03 11:35:37 +02009630 tp = state->TypeIgnore_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07009631 isinstance = PyObject_IsInstance(obj, tp);
Guido van Rossumdcfcd142019-01-31 03:40:27 -08009632 if (isinstance == -1) {
9633 return 1;
9634 }
9635 if (isinstance) {
9636 int lineno;
Michael J. Sullivan933e1502019-05-22 07:54:20 -07009637 string tag;
Guido van Rossumdcfcd142019-01-31 03:40:27 -08009638
Victor Stinner74419f02020-07-03 11:35:37 +02009639 if (_PyObject_LookupAttr(obj, state->lineno, &tmp) < 0) {
Guido van Rossumdcfcd142019-01-31 03:40:27 -08009640 return 1;
9641 }
9642 if (tmp == NULL) {
9643 PyErr_SetString(PyExc_TypeError, "required field \"lineno\" missing from TypeIgnore");
9644 return 1;
9645 }
9646 else {
9647 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02009648 res = obj2ast_int(state, tmp, &lineno, arena);
Guido van Rossumdcfcd142019-01-31 03:40:27 -08009649 if (res != 0) goto failed;
9650 Py_CLEAR(tmp);
9651 }
Victor Stinner74419f02020-07-03 11:35:37 +02009652 if (_PyObject_LookupAttr(obj, state->tag, &tmp) < 0) {
Michael J. Sullivan933e1502019-05-22 07:54:20 -07009653 return 1;
9654 }
9655 if (tmp == NULL) {
9656 PyErr_SetString(PyExc_TypeError, "required field \"tag\" missing from TypeIgnore");
9657 return 1;
9658 }
9659 else {
9660 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02009661 res = obj2ast_string(state, tmp, &tag, arena);
Michael J. Sullivan933e1502019-05-22 07:54:20 -07009662 if (res != 0) goto failed;
9663 Py_CLEAR(tmp);
9664 }
9665 *out = TypeIgnore(lineno, tag, arena);
Guido van Rossumdcfcd142019-01-31 03:40:27 -08009666 if (*out == NULL) goto failed;
9667 return 0;
9668 }
9669
9670 PyErr_Format(PyExc_TypeError, "expected some sort of type_ignore, but got %R", obj);
9671 failed:
9672 Py_XDECREF(tmp);
9673 return 1;
9674}
9675
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00009676
Victor Stinnerb1cc6ba2020-07-03 20:01:46 +02009677static int
9678astmodule_exec(PyObject *m)
Martin v. Löwis577b5b92006-02-27 15:23:19 +00009679{
Victor Stinner74419f02020-07-03 11:35:37 +02009680 astmodulestate *state = get_ast_state(m);
9681
Victor Stinnerb1cc6ba2020-07-03 20:01:46 +02009682 if (!init_types(state)) {
9683 return -1;
Victor Stinner91e1bc12020-07-03 14:15:53 +02009684 }
Victor Stinner74419f02020-07-03 11:35:37 +02009685 if (PyModule_AddObject(m, "AST", state->AST_type) < 0) {
Victor Stinnerb1cc6ba2020-07-03 20:01:46 +02009686 return -1;
Brandt Bucherd2f96672020-02-06 06:45:46 -08009687 }
Victor Stinner74419f02020-07-03 11:35:37 +02009688 Py_INCREF(state->AST_type);
Brandt Bucherd2f96672020-02-06 06:45:46 -08009689 if (PyModule_AddIntMacro(m, PyCF_ALLOW_TOP_LEVEL_AWAIT) < 0) {
Victor Stinnerb1cc6ba2020-07-03 20:01:46 +02009690 return -1;
Brandt Bucherd2f96672020-02-06 06:45:46 -08009691 }
9692 if (PyModule_AddIntMacro(m, PyCF_ONLY_AST) < 0) {
Victor Stinnerb1cc6ba2020-07-03 20:01:46 +02009693 return -1;
Brandt Bucherd2f96672020-02-06 06:45:46 -08009694 }
9695 if (PyModule_AddIntMacro(m, PyCF_TYPE_COMMENTS) < 0) {
Victor Stinnerb1cc6ba2020-07-03 20:01:46 +02009696 return -1;
Brandt Bucherd2f96672020-02-06 06:45:46 -08009697 }
Victor Stinner74419f02020-07-03 11:35:37 +02009698 if (PyModule_AddObject(m, "mod", state->mod_type) < 0) {
Victor Stinnerb1cc6ba2020-07-03 20:01:46 +02009699 return -1;
Brandt Bucherd2f96672020-02-06 06:45:46 -08009700 }
Victor Stinner74419f02020-07-03 11:35:37 +02009701 Py_INCREF(state->mod_type);
9702 if (PyModule_AddObject(m, "Module", state->Module_type) < 0) {
Victor Stinnerb1cc6ba2020-07-03 20:01:46 +02009703 return -1;
Brandt Bucherd2f96672020-02-06 06:45:46 -08009704 }
Victor Stinner74419f02020-07-03 11:35:37 +02009705 Py_INCREF(state->Module_type);
9706 if (PyModule_AddObject(m, "Interactive", state->Interactive_type) < 0) {
Victor Stinnerb1cc6ba2020-07-03 20:01:46 +02009707 return -1;
Brandt Bucherd2f96672020-02-06 06:45:46 -08009708 }
Victor Stinner74419f02020-07-03 11:35:37 +02009709 Py_INCREF(state->Interactive_type);
9710 if (PyModule_AddObject(m, "Expression", state->Expression_type) < 0) {
Victor Stinnerb1cc6ba2020-07-03 20:01:46 +02009711 return -1;
Brandt Bucherd2f96672020-02-06 06:45:46 -08009712 }
Victor Stinner74419f02020-07-03 11:35:37 +02009713 Py_INCREF(state->Expression_type);
9714 if (PyModule_AddObject(m, "FunctionType", state->FunctionType_type) < 0) {
Victor Stinnerb1cc6ba2020-07-03 20:01:46 +02009715 return -1;
Brandt Bucherd2f96672020-02-06 06:45:46 -08009716 }
Victor Stinner74419f02020-07-03 11:35:37 +02009717 Py_INCREF(state->FunctionType_type);
9718 if (PyModule_AddObject(m, "stmt", state->stmt_type) < 0) {
Victor Stinnerb1cc6ba2020-07-03 20:01:46 +02009719 return -1;
Brandt Bucherd2f96672020-02-06 06:45:46 -08009720 }
Victor Stinner74419f02020-07-03 11:35:37 +02009721 Py_INCREF(state->stmt_type);
9722 if (PyModule_AddObject(m, "FunctionDef", state->FunctionDef_type) < 0) {
Victor Stinnerb1cc6ba2020-07-03 20:01:46 +02009723 return -1;
Brandt Bucherd2f96672020-02-06 06:45:46 -08009724 }
Victor Stinner74419f02020-07-03 11:35:37 +02009725 Py_INCREF(state->FunctionDef_type);
9726 if (PyModule_AddObject(m, "AsyncFunctionDef", state->AsyncFunctionDef_type)
Brandt Bucherd2f96672020-02-06 06:45:46 -08009727 < 0) {
Victor Stinnerb1cc6ba2020-07-03 20:01:46 +02009728 return -1;
Brandt Bucherd2f96672020-02-06 06:45:46 -08009729 }
Victor Stinner74419f02020-07-03 11:35:37 +02009730 Py_INCREF(state->AsyncFunctionDef_type);
9731 if (PyModule_AddObject(m, "ClassDef", state->ClassDef_type) < 0) {
Victor Stinnerb1cc6ba2020-07-03 20:01:46 +02009732 return -1;
Victor Stinner74419f02020-07-03 11:35:37 +02009733 }
9734 Py_INCREF(state->ClassDef_type);
9735 if (PyModule_AddObject(m, "Return", state->Return_type) < 0) {
Victor Stinnerb1cc6ba2020-07-03 20:01:46 +02009736 return -1;
Victor Stinner74419f02020-07-03 11:35:37 +02009737 }
9738 Py_INCREF(state->Return_type);
9739 if (PyModule_AddObject(m, "Delete", state->Delete_type) < 0) {
Victor Stinnerb1cc6ba2020-07-03 20:01:46 +02009740 return -1;
Victor Stinner74419f02020-07-03 11:35:37 +02009741 }
9742 Py_INCREF(state->Delete_type);
9743 if (PyModule_AddObject(m, "Assign", state->Assign_type) < 0) {
Victor Stinnerb1cc6ba2020-07-03 20:01:46 +02009744 return -1;
Victor Stinner74419f02020-07-03 11:35:37 +02009745 }
9746 Py_INCREF(state->Assign_type);
9747 if (PyModule_AddObject(m, "AugAssign", state->AugAssign_type) < 0) {
Victor Stinnerb1cc6ba2020-07-03 20:01:46 +02009748 return -1;
Victor Stinner74419f02020-07-03 11:35:37 +02009749 }
9750 Py_INCREF(state->AugAssign_type);
9751 if (PyModule_AddObject(m, "AnnAssign", state->AnnAssign_type) < 0) {
Victor Stinnerb1cc6ba2020-07-03 20:01:46 +02009752 return -1;
Victor Stinner74419f02020-07-03 11:35:37 +02009753 }
9754 Py_INCREF(state->AnnAssign_type);
9755 if (PyModule_AddObject(m, "For", state->For_type) < 0) {
Victor Stinnerb1cc6ba2020-07-03 20:01:46 +02009756 return -1;
Victor Stinner74419f02020-07-03 11:35:37 +02009757 }
9758 Py_INCREF(state->For_type);
9759 if (PyModule_AddObject(m, "AsyncFor", state->AsyncFor_type) < 0) {
Victor Stinnerb1cc6ba2020-07-03 20:01:46 +02009760 return -1;
Victor Stinner74419f02020-07-03 11:35:37 +02009761 }
9762 Py_INCREF(state->AsyncFor_type);
9763 if (PyModule_AddObject(m, "While", state->While_type) < 0) {
Victor Stinnerb1cc6ba2020-07-03 20:01:46 +02009764 return -1;
Victor Stinner74419f02020-07-03 11:35:37 +02009765 }
9766 Py_INCREF(state->While_type);
9767 if (PyModule_AddObject(m, "If", state->If_type) < 0) {
Victor Stinnerb1cc6ba2020-07-03 20:01:46 +02009768 return -1;
Victor Stinner74419f02020-07-03 11:35:37 +02009769 }
9770 Py_INCREF(state->If_type);
9771 if (PyModule_AddObject(m, "With", state->With_type) < 0) {
Victor Stinnerb1cc6ba2020-07-03 20:01:46 +02009772 return -1;
Victor Stinner74419f02020-07-03 11:35:37 +02009773 }
9774 Py_INCREF(state->With_type);
9775 if (PyModule_AddObject(m, "AsyncWith", state->AsyncWith_type) < 0) {
Victor Stinnerb1cc6ba2020-07-03 20:01:46 +02009776 return -1;
Victor Stinner74419f02020-07-03 11:35:37 +02009777 }
9778 Py_INCREF(state->AsyncWith_type);
9779 if (PyModule_AddObject(m, "Raise", state->Raise_type) < 0) {
Victor Stinnerb1cc6ba2020-07-03 20:01:46 +02009780 return -1;
Victor Stinner74419f02020-07-03 11:35:37 +02009781 }
9782 Py_INCREF(state->Raise_type);
9783 if (PyModule_AddObject(m, "Try", state->Try_type) < 0) {
Victor Stinnerb1cc6ba2020-07-03 20:01:46 +02009784 return -1;
Victor Stinner74419f02020-07-03 11:35:37 +02009785 }
9786 Py_INCREF(state->Try_type);
9787 if (PyModule_AddObject(m, "Assert", state->Assert_type) < 0) {
Victor Stinnerb1cc6ba2020-07-03 20:01:46 +02009788 return -1;
Victor Stinner74419f02020-07-03 11:35:37 +02009789 }
9790 Py_INCREF(state->Assert_type);
9791 if (PyModule_AddObject(m, "Import", state->Import_type) < 0) {
Victor Stinnerb1cc6ba2020-07-03 20:01:46 +02009792 return -1;
Victor Stinner74419f02020-07-03 11:35:37 +02009793 }
9794 Py_INCREF(state->Import_type);
9795 if (PyModule_AddObject(m, "ImportFrom", state->ImportFrom_type) < 0) {
Victor Stinnerb1cc6ba2020-07-03 20:01:46 +02009796 return -1;
Victor Stinner74419f02020-07-03 11:35:37 +02009797 }
9798 Py_INCREF(state->ImportFrom_type);
9799 if (PyModule_AddObject(m, "Global", state->Global_type) < 0) {
Victor Stinnerb1cc6ba2020-07-03 20:01:46 +02009800 return -1;
Victor Stinner74419f02020-07-03 11:35:37 +02009801 }
9802 Py_INCREF(state->Global_type);
9803 if (PyModule_AddObject(m, "Nonlocal", state->Nonlocal_type) < 0) {
Victor Stinnerb1cc6ba2020-07-03 20:01:46 +02009804 return -1;
Victor Stinner74419f02020-07-03 11:35:37 +02009805 }
9806 Py_INCREF(state->Nonlocal_type);
9807 if (PyModule_AddObject(m, "Expr", state->Expr_type) < 0) {
Victor Stinnerb1cc6ba2020-07-03 20:01:46 +02009808 return -1;
Victor Stinner74419f02020-07-03 11:35:37 +02009809 }
9810 Py_INCREF(state->Expr_type);
9811 if (PyModule_AddObject(m, "Pass", state->Pass_type) < 0) {
Victor Stinnerb1cc6ba2020-07-03 20:01:46 +02009812 return -1;
Victor Stinner74419f02020-07-03 11:35:37 +02009813 }
9814 Py_INCREF(state->Pass_type);
9815 if (PyModule_AddObject(m, "Break", state->Break_type) < 0) {
Victor Stinnerb1cc6ba2020-07-03 20:01:46 +02009816 return -1;
Victor Stinner74419f02020-07-03 11:35:37 +02009817 }
9818 Py_INCREF(state->Break_type);
9819 if (PyModule_AddObject(m, "Continue", state->Continue_type) < 0) {
Victor Stinnerb1cc6ba2020-07-03 20:01:46 +02009820 return -1;
Victor Stinner74419f02020-07-03 11:35:37 +02009821 }
9822 Py_INCREF(state->Continue_type);
9823 if (PyModule_AddObject(m, "expr", state->expr_type) < 0) {
Victor Stinnerb1cc6ba2020-07-03 20:01:46 +02009824 return -1;
Victor Stinner74419f02020-07-03 11:35:37 +02009825 }
9826 Py_INCREF(state->expr_type);
9827 if (PyModule_AddObject(m, "BoolOp", state->BoolOp_type) < 0) {
Victor Stinnerb1cc6ba2020-07-03 20:01:46 +02009828 return -1;
Victor Stinner74419f02020-07-03 11:35:37 +02009829 }
9830 Py_INCREF(state->BoolOp_type);
9831 if (PyModule_AddObject(m, "NamedExpr", state->NamedExpr_type) < 0) {
Victor Stinnerb1cc6ba2020-07-03 20:01:46 +02009832 return -1;
Victor Stinner74419f02020-07-03 11:35:37 +02009833 }
9834 Py_INCREF(state->NamedExpr_type);
9835 if (PyModule_AddObject(m, "BinOp", state->BinOp_type) < 0) {
Victor Stinnerb1cc6ba2020-07-03 20:01:46 +02009836 return -1;
Victor Stinner74419f02020-07-03 11:35:37 +02009837 }
9838 Py_INCREF(state->BinOp_type);
9839 if (PyModule_AddObject(m, "UnaryOp", state->UnaryOp_type) < 0) {
Victor Stinnerb1cc6ba2020-07-03 20:01:46 +02009840 return -1;
Victor Stinner74419f02020-07-03 11:35:37 +02009841 }
9842 Py_INCREF(state->UnaryOp_type);
9843 if (PyModule_AddObject(m, "Lambda", state->Lambda_type) < 0) {
Victor Stinnerb1cc6ba2020-07-03 20:01:46 +02009844 return -1;
Victor Stinner74419f02020-07-03 11:35:37 +02009845 }
9846 Py_INCREF(state->Lambda_type);
9847 if (PyModule_AddObject(m, "IfExp", state->IfExp_type) < 0) {
Victor Stinnerb1cc6ba2020-07-03 20:01:46 +02009848 return -1;
Victor Stinner74419f02020-07-03 11:35:37 +02009849 }
9850 Py_INCREF(state->IfExp_type);
9851 if (PyModule_AddObject(m, "Dict", state->Dict_type) < 0) {
Victor Stinnerb1cc6ba2020-07-03 20:01:46 +02009852 return -1;
Victor Stinner74419f02020-07-03 11:35:37 +02009853 }
9854 Py_INCREF(state->Dict_type);
9855 if (PyModule_AddObject(m, "Set", state->Set_type) < 0) {
Victor Stinnerb1cc6ba2020-07-03 20:01:46 +02009856 return -1;
Victor Stinner74419f02020-07-03 11:35:37 +02009857 }
9858 Py_INCREF(state->Set_type);
9859 if (PyModule_AddObject(m, "ListComp", state->ListComp_type) < 0) {
Victor Stinnerb1cc6ba2020-07-03 20:01:46 +02009860 return -1;
Victor Stinner74419f02020-07-03 11:35:37 +02009861 }
9862 Py_INCREF(state->ListComp_type);
9863 if (PyModule_AddObject(m, "SetComp", state->SetComp_type) < 0) {
Victor Stinnerb1cc6ba2020-07-03 20:01:46 +02009864 return -1;
Victor Stinner74419f02020-07-03 11:35:37 +02009865 }
9866 Py_INCREF(state->SetComp_type);
9867 if (PyModule_AddObject(m, "DictComp", state->DictComp_type) < 0) {
Victor Stinnerb1cc6ba2020-07-03 20:01:46 +02009868 return -1;
Victor Stinner74419f02020-07-03 11:35:37 +02009869 }
9870 Py_INCREF(state->DictComp_type);
9871 if (PyModule_AddObject(m, "GeneratorExp", state->GeneratorExp_type) < 0) {
Victor Stinnerb1cc6ba2020-07-03 20:01:46 +02009872 return -1;
Victor Stinner74419f02020-07-03 11:35:37 +02009873 }
9874 Py_INCREF(state->GeneratorExp_type);
9875 if (PyModule_AddObject(m, "Await", state->Await_type) < 0) {
Victor Stinnerb1cc6ba2020-07-03 20:01:46 +02009876 return -1;
Victor Stinner74419f02020-07-03 11:35:37 +02009877 }
9878 Py_INCREF(state->Await_type);
9879 if (PyModule_AddObject(m, "Yield", state->Yield_type) < 0) {
Victor Stinnerb1cc6ba2020-07-03 20:01:46 +02009880 return -1;
Victor Stinner74419f02020-07-03 11:35:37 +02009881 }
9882 Py_INCREF(state->Yield_type);
9883 if (PyModule_AddObject(m, "YieldFrom", state->YieldFrom_type) < 0) {
Victor Stinnerb1cc6ba2020-07-03 20:01:46 +02009884 return -1;
Victor Stinner74419f02020-07-03 11:35:37 +02009885 }
9886 Py_INCREF(state->YieldFrom_type);
9887 if (PyModule_AddObject(m, "Compare", state->Compare_type) < 0) {
Victor Stinnerb1cc6ba2020-07-03 20:01:46 +02009888 return -1;
Victor Stinner74419f02020-07-03 11:35:37 +02009889 }
9890 Py_INCREF(state->Compare_type);
9891 if (PyModule_AddObject(m, "Call", state->Call_type) < 0) {
Victor Stinnerb1cc6ba2020-07-03 20:01:46 +02009892 return -1;
Victor Stinner74419f02020-07-03 11:35:37 +02009893 }
9894 Py_INCREF(state->Call_type);
9895 if (PyModule_AddObject(m, "FormattedValue", state->FormattedValue_type) <
Brandt Bucherd2f96672020-02-06 06:45:46 -08009896 0) {
Victor Stinnerb1cc6ba2020-07-03 20:01:46 +02009897 return -1;
Brandt Bucherd2f96672020-02-06 06:45:46 -08009898 }
Victor Stinner74419f02020-07-03 11:35:37 +02009899 Py_INCREF(state->FormattedValue_type);
9900 if (PyModule_AddObject(m, "JoinedStr", state->JoinedStr_type) < 0) {
Victor Stinnerb1cc6ba2020-07-03 20:01:46 +02009901 return -1;
Brandt Bucherd2f96672020-02-06 06:45:46 -08009902 }
Victor Stinner74419f02020-07-03 11:35:37 +02009903 Py_INCREF(state->JoinedStr_type);
9904 if (PyModule_AddObject(m, "Constant", state->Constant_type) < 0) {
Victor Stinnerb1cc6ba2020-07-03 20:01:46 +02009905 return -1;
Brandt Bucherd2f96672020-02-06 06:45:46 -08009906 }
Victor Stinner74419f02020-07-03 11:35:37 +02009907 Py_INCREF(state->Constant_type);
9908 if (PyModule_AddObject(m, "Attribute", state->Attribute_type) < 0) {
Victor Stinnerb1cc6ba2020-07-03 20:01:46 +02009909 return -1;
Brandt Bucherd2f96672020-02-06 06:45:46 -08009910 }
Victor Stinner74419f02020-07-03 11:35:37 +02009911 Py_INCREF(state->Attribute_type);
9912 if (PyModule_AddObject(m, "Subscript", state->Subscript_type) < 0) {
Victor Stinnerb1cc6ba2020-07-03 20:01:46 +02009913 return -1;
Brandt Bucherd2f96672020-02-06 06:45:46 -08009914 }
Victor Stinner74419f02020-07-03 11:35:37 +02009915 Py_INCREF(state->Subscript_type);
9916 if (PyModule_AddObject(m, "Starred", state->Starred_type) < 0) {
Victor Stinnerb1cc6ba2020-07-03 20:01:46 +02009917 return -1;
Brandt Bucherd2f96672020-02-06 06:45:46 -08009918 }
Victor Stinner74419f02020-07-03 11:35:37 +02009919 Py_INCREF(state->Starred_type);
9920 if (PyModule_AddObject(m, "Name", state->Name_type) < 0) {
Victor Stinnerb1cc6ba2020-07-03 20:01:46 +02009921 return -1;
Brandt Bucherd2f96672020-02-06 06:45:46 -08009922 }
Victor Stinner74419f02020-07-03 11:35:37 +02009923 Py_INCREF(state->Name_type);
9924 if (PyModule_AddObject(m, "List", state->List_type) < 0) {
Victor Stinnerb1cc6ba2020-07-03 20:01:46 +02009925 return -1;
Brandt Bucherd2f96672020-02-06 06:45:46 -08009926 }
Victor Stinner74419f02020-07-03 11:35:37 +02009927 Py_INCREF(state->List_type);
9928 if (PyModule_AddObject(m, "Tuple", state->Tuple_type) < 0) {
Victor Stinnerb1cc6ba2020-07-03 20:01:46 +02009929 return -1;
Brandt Bucherd2f96672020-02-06 06:45:46 -08009930 }
Victor Stinner74419f02020-07-03 11:35:37 +02009931 Py_INCREF(state->Tuple_type);
9932 if (PyModule_AddObject(m, "Slice", state->Slice_type) < 0) {
Victor Stinnerb1cc6ba2020-07-03 20:01:46 +02009933 return -1;
Brandt Bucherd2f96672020-02-06 06:45:46 -08009934 }
Victor Stinner74419f02020-07-03 11:35:37 +02009935 Py_INCREF(state->Slice_type);
9936 if (PyModule_AddObject(m, "expr_context", state->expr_context_type) < 0) {
Victor Stinnerb1cc6ba2020-07-03 20:01:46 +02009937 return -1;
Brandt Bucherd2f96672020-02-06 06:45:46 -08009938 }
Victor Stinner74419f02020-07-03 11:35:37 +02009939 Py_INCREF(state->expr_context_type);
9940 if (PyModule_AddObject(m, "Load", state->Load_type) < 0) {
Victor Stinnerb1cc6ba2020-07-03 20:01:46 +02009941 return -1;
Brandt Bucherd2f96672020-02-06 06:45:46 -08009942 }
Victor Stinner74419f02020-07-03 11:35:37 +02009943 Py_INCREF(state->Load_type);
9944 if (PyModule_AddObject(m, "Store", state->Store_type) < 0) {
Victor Stinnerb1cc6ba2020-07-03 20:01:46 +02009945 return -1;
Brandt Bucherd2f96672020-02-06 06:45:46 -08009946 }
Victor Stinner74419f02020-07-03 11:35:37 +02009947 Py_INCREF(state->Store_type);
9948 if (PyModule_AddObject(m, "Del", state->Del_type) < 0) {
Victor Stinnerb1cc6ba2020-07-03 20:01:46 +02009949 return -1;
Brandt Bucherd2f96672020-02-06 06:45:46 -08009950 }
Victor Stinner74419f02020-07-03 11:35:37 +02009951 Py_INCREF(state->Del_type);
9952 if (PyModule_AddObject(m, "boolop", state->boolop_type) < 0) {
Victor Stinnerb1cc6ba2020-07-03 20:01:46 +02009953 return -1;
Brandt Bucherd2f96672020-02-06 06:45:46 -08009954 }
Victor Stinner74419f02020-07-03 11:35:37 +02009955 Py_INCREF(state->boolop_type);
9956 if (PyModule_AddObject(m, "And", state->And_type) < 0) {
Victor Stinnerb1cc6ba2020-07-03 20:01:46 +02009957 return -1;
Brandt Bucherd2f96672020-02-06 06:45:46 -08009958 }
Victor Stinner74419f02020-07-03 11:35:37 +02009959 Py_INCREF(state->And_type);
9960 if (PyModule_AddObject(m, "Or", state->Or_type) < 0) {
Victor Stinnerb1cc6ba2020-07-03 20:01:46 +02009961 return -1;
Brandt Bucherd2f96672020-02-06 06:45:46 -08009962 }
Victor Stinner74419f02020-07-03 11:35:37 +02009963 Py_INCREF(state->Or_type);
9964 if (PyModule_AddObject(m, "operator", state->operator_type) < 0) {
Victor Stinnerb1cc6ba2020-07-03 20:01:46 +02009965 return -1;
Brandt Bucherd2f96672020-02-06 06:45:46 -08009966 }
Victor Stinner74419f02020-07-03 11:35:37 +02009967 Py_INCREF(state->operator_type);
9968 if (PyModule_AddObject(m, "Add", state->Add_type) < 0) {
Victor Stinnerb1cc6ba2020-07-03 20:01:46 +02009969 return -1;
Brandt Bucherd2f96672020-02-06 06:45:46 -08009970 }
Victor Stinner74419f02020-07-03 11:35:37 +02009971 Py_INCREF(state->Add_type);
9972 if (PyModule_AddObject(m, "Sub", state->Sub_type) < 0) {
Victor Stinnerb1cc6ba2020-07-03 20:01:46 +02009973 return -1;
Brandt Bucherd2f96672020-02-06 06:45:46 -08009974 }
Victor Stinner74419f02020-07-03 11:35:37 +02009975 Py_INCREF(state->Sub_type);
9976 if (PyModule_AddObject(m, "Mult", state->Mult_type) < 0) {
Victor Stinnerb1cc6ba2020-07-03 20:01:46 +02009977 return -1;
Brandt Bucherd2f96672020-02-06 06:45:46 -08009978 }
Victor Stinner74419f02020-07-03 11:35:37 +02009979 Py_INCREF(state->Mult_type);
9980 if (PyModule_AddObject(m, "MatMult", state->MatMult_type) < 0) {
Victor Stinnerb1cc6ba2020-07-03 20:01:46 +02009981 return -1;
Brandt Bucherd2f96672020-02-06 06:45:46 -08009982 }
Victor Stinner74419f02020-07-03 11:35:37 +02009983 Py_INCREF(state->MatMult_type);
9984 if (PyModule_AddObject(m, "Div", state->Div_type) < 0) {
Victor Stinnerb1cc6ba2020-07-03 20:01:46 +02009985 return -1;
Brandt Bucherd2f96672020-02-06 06:45:46 -08009986 }
Victor Stinner74419f02020-07-03 11:35:37 +02009987 Py_INCREF(state->Div_type);
9988 if (PyModule_AddObject(m, "Mod", state->Mod_type) < 0) {
Victor Stinnerb1cc6ba2020-07-03 20:01:46 +02009989 return -1;
Brandt Bucherd2f96672020-02-06 06:45:46 -08009990 }
Victor Stinner74419f02020-07-03 11:35:37 +02009991 Py_INCREF(state->Mod_type);
9992 if (PyModule_AddObject(m, "Pow", state->Pow_type) < 0) {
Victor Stinnerb1cc6ba2020-07-03 20:01:46 +02009993 return -1;
Brandt Bucherd2f96672020-02-06 06:45:46 -08009994 }
Victor Stinner74419f02020-07-03 11:35:37 +02009995 Py_INCREF(state->Pow_type);
9996 if (PyModule_AddObject(m, "LShift", state->LShift_type) < 0) {
Victor Stinnerb1cc6ba2020-07-03 20:01:46 +02009997 return -1;
Brandt Bucherd2f96672020-02-06 06:45:46 -08009998 }
Victor Stinner74419f02020-07-03 11:35:37 +02009999 Py_INCREF(state->LShift_type);
10000 if (PyModule_AddObject(m, "RShift", state->RShift_type) < 0) {
Victor Stinnerb1cc6ba2020-07-03 20:01:46 +020010001 return -1;
Brandt Bucherd2f96672020-02-06 06:45:46 -080010002 }
Victor Stinner74419f02020-07-03 11:35:37 +020010003 Py_INCREF(state->RShift_type);
10004 if (PyModule_AddObject(m, "BitOr", state->BitOr_type) < 0) {
Victor Stinnerb1cc6ba2020-07-03 20:01:46 +020010005 return -1;
Brandt Bucherd2f96672020-02-06 06:45:46 -080010006 }
Victor Stinner74419f02020-07-03 11:35:37 +020010007 Py_INCREF(state->BitOr_type);
10008 if (PyModule_AddObject(m, "BitXor", state->BitXor_type) < 0) {
Victor Stinnerb1cc6ba2020-07-03 20:01:46 +020010009 return -1;
Brandt Bucherd2f96672020-02-06 06:45:46 -080010010 }
Victor Stinner74419f02020-07-03 11:35:37 +020010011 Py_INCREF(state->BitXor_type);
10012 if (PyModule_AddObject(m, "BitAnd", state->BitAnd_type) < 0) {
Victor Stinnerb1cc6ba2020-07-03 20:01:46 +020010013 return -1;
Brandt Bucherd2f96672020-02-06 06:45:46 -080010014 }
Victor Stinner74419f02020-07-03 11:35:37 +020010015 Py_INCREF(state->BitAnd_type);
10016 if (PyModule_AddObject(m, "FloorDiv", state->FloorDiv_type) < 0) {
Victor Stinnerb1cc6ba2020-07-03 20:01:46 +020010017 return -1;
Brandt Bucherd2f96672020-02-06 06:45:46 -080010018 }
Victor Stinner74419f02020-07-03 11:35:37 +020010019 Py_INCREF(state->FloorDiv_type);
10020 if (PyModule_AddObject(m, "unaryop", state->unaryop_type) < 0) {
Victor Stinnerb1cc6ba2020-07-03 20:01:46 +020010021 return -1;
Brandt Bucherd2f96672020-02-06 06:45:46 -080010022 }
Victor Stinner74419f02020-07-03 11:35:37 +020010023 Py_INCREF(state->unaryop_type);
10024 if (PyModule_AddObject(m, "Invert", state->Invert_type) < 0) {
Victor Stinnerb1cc6ba2020-07-03 20:01:46 +020010025 return -1;
Brandt Bucherd2f96672020-02-06 06:45:46 -080010026 }
Victor Stinner74419f02020-07-03 11:35:37 +020010027 Py_INCREF(state->Invert_type);
10028 if (PyModule_AddObject(m, "Not", state->Not_type) < 0) {
Victor Stinnerb1cc6ba2020-07-03 20:01:46 +020010029 return -1;
Brandt Bucherd2f96672020-02-06 06:45:46 -080010030 }
Victor Stinner74419f02020-07-03 11:35:37 +020010031 Py_INCREF(state->Not_type);
10032 if (PyModule_AddObject(m, "UAdd", state->UAdd_type) < 0) {
Victor Stinnerb1cc6ba2020-07-03 20:01:46 +020010033 return -1;
Brandt Bucherd2f96672020-02-06 06:45:46 -080010034 }
Victor Stinner74419f02020-07-03 11:35:37 +020010035 Py_INCREF(state->UAdd_type);
10036 if (PyModule_AddObject(m, "USub", state->USub_type) < 0) {
Victor Stinnerb1cc6ba2020-07-03 20:01:46 +020010037 return -1;
Brandt Bucherd2f96672020-02-06 06:45:46 -080010038 }
Victor Stinner74419f02020-07-03 11:35:37 +020010039 Py_INCREF(state->USub_type);
10040 if (PyModule_AddObject(m, "cmpop", state->cmpop_type) < 0) {
Victor Stinnerb1cc6ba2020-07-03 20:01:46 +020010041 return -1;
Brandt Bucherd2f96672020-02-06 06:45:46 -080010042 }
Victor Stinner74419f02020-07-03 11:35:37 +020010043 Py_INCREF(state->cmpop_type);
10044 if (PyModule_AddObject(m, "Eq", state->Eq_type) < 0) {
Victor Stinnerb1cc6ba2020-07-03 20:01:46 +020010045 return -1;
Brandt Bucherd2f96672020-02-06 06:45:46 -080010046 }
Victor Stinner74419f02020-07-03 11:35:37 +020010047 Py_INCREF(state->Eq_type);
10048 if (PyModule_AddObject(m, "NotEq", state->NotEq_type) < 0) {
Victor Stinnerb1cc6ba2020-07-03 20:01:46 +020010049 return -1;
Brandt Bucherd2f96672020-02-06 06:45:46 -080010050 }
Victor Stinner74419f02020-07-03 11:35:37 +020010051 Py_INCREF(state->NotEq_type);
10052 if (PyModule_AddObject(m, "Lt", state->Lt_type) < 0) {
Victor Stinnerb1cc6ba2020-07-03 20:01:46 +020010053 return -1;
Brandt Bucherd2f96672020-02-06 06:45:46 -080010054 }
Victor Stinner74419f02020-07-03 11:35:37 +020010055 Py_INCREF(state->Lt_type);
10056 if (PyModule_AddObject(m, "LtE", state->LtE_type) < 0) {
Victor Stinnerb1cc6ba2020-07-03 20:01:46 +020010057 return -1;
Brandt Bucherd2f96672020-02-06 06:45:46 -080010058 }
Victor Stinner74419f02020-07-03 11:35:37 +020010059 Py_INCREF(state->LtE_type);
10060 if (PyModule_AddObject(m, "Gt", state->Gt_type) < 0) {
Victor Stinnerb1cc6ba2020-07-03 20:01:46 +020010061 return -1;
Brandt Bucherd2f96672020-02-06 06:45:46 -080010062 }
Victor Stinner74419f02020-07-03 11:35:37 +020010063 Py_INCREF(state->Gt_type);
10064 if (PyModule_AddObject(m, "GtE", state->GtE_type) < 0) {
Victor Stinnerb1cc6ba2020-07-03 20:01:46 +020010065 return -1;
Brandt Bucherd2f96672020-02-06 06:45:46 -080010066 }
Victor Stinner74419f02020-07-03 11:35:37 +020010067 Py_INCREF(state->GtE_type);
10068 if (PyModule_AddObject(m, "Is", state->Is_type) < 0) {
Victor Stinnerb1cc6ba2020-07-03 20:01:46 +020010069 return -1;
Brandt Bucherd2f96672020-02-06 06:45:46 -080010070 }
Victor Stinner74419f02020-07-03 11:35:37 +020010071 Py_INCREF(state->Is_type);
10072 if (PyModule_AddObject(m, "IsNot", state->IsNot_type) < 0) {
Victor Stinnerb1cc6ba2020-07-03 20:01:46 +020010073 return -1;
Brandt Bucherd2f96672020-02-06 06:45:46 -080010074 }
Victor Stinner74419f02020-07-03 11:35:37 +020010075 Py_INCREF(state->IsNot_type);
10076 if (PyModule_AddObject(m, "In", state->In_type) < 0) {
Victor Stinnerb1cc6ba2020-07-03 20:01:46 +020010077 return -1;
Brandt Bucherd2f96672020-02-06 06:45:46 -080010078 }
Victor Stinner74419f02020-07-03 11:35:37 +020010079 Py_INCREF(state->In_type);
10080 if (PyModule_AddObject(m, "NotIn", state->NotIn_type) < 0) {
Victor Stinnerb1cc6ba2020-07-03 20:01:46 +020010081 return -1;
Brandt Bucherd2f96672020-02-06 06:45:46 -080010082 }
Victor Stinner74419f02020-07-03 11:35:37 +020010083 Py_INCREF(state->NotIn_type);
10084 if (PyModule_AddObject(m, "comprehension", state->comprehension_type) < 0) {
Victor Stinnerb1cc6ba2020-07-03 20:01:46 +020010085 return -1;
Brandt Bucherd2f96672020-02-06 06:45:46 -080010086 }
Victor Stinner74419f02020-07-03 11:35:37 +020010087 Py_INCREF(state->comprehension_type);
10088 if (PyModule_AddObject(m, "excepthandler", state->excepthandler_type) < 0) {
Victor Stinnerb1cc6ba2020-07-03 20:01:46 +020010089 return -1;
Brandt Bucherd2f96672020-02-06 06:45:46 -080010090 }
Victor Stinner74419f02020-07-03 11:35:37 +020010091 Py_INCREF(state->excepthandler_type);
10092 if (PyModule_AddObject(m, "ExceptHandler", state->ExceptHandler_type) < 0) {
Victor Stinnerb1cc6ba2020-07-03 20:01:46 +020010093 return -1;
Brandt Bucherd2f96672020-02-06 06:45:46 -080010094 }
Victor Stinner74419f02020-07-03 11:35:37 +020010095 Py_INCREF(state->ExceptHandler_type);
10096 if (PyModule_AddObject(m, "arguments", state->arguments_type) < 0) {
Victor Stinnerb1cc6ba2020-07-03 20:01:46 +020010097 return -1;
Brandt Bucherd2f96672020-02-06 06:45:46 -080010098 }
Victor Stinner74419f02020-07-03 11:35:37 +020010099 Py_INCREF(state->arguments_type);
10100 if (PyModule_AddObject(m, "arg", state->arg_type) < 0) {
Victor Stinnerb1cc6ba2020-07-03 20:01:46 +020010101 return -1;
Brandt Bucherd2f96672020-02-06 06:45:46 -080010102 }
Victor Stinner74419f02020-07-03 11:35:37 +020010103 Py_INCREF(state->arg_type);
10104 if (PyModule_AddObject(m, "keyword", state->keyword_type) < 0) {
Victor Stinnerb1cc6ba2020-07-03 20:01:46 +020010105 return -1;
Brandt Bucherd2f96672020-02-06 06:45:46 -080010106 }
Victor Stinner74419f02020-07-03 11:35:37 +020010107 Py_INCREF(state->keyword_type);
10108 if (PyModule_AddObject(m, "alias", state->alias_type) < 0) {
Victor Stinnerb1cc6ba2020-07-03 20:01:46 +020010109 return -1;
Brandt Bucherd2f96672020-02-06 06:45:46 -080010110 }
Victor Stinner74419f02020-07-03 11:35:37 +020010111 Py_INCREF(state->alias_type);
10112 if (PyModule_AddObject(m, "withitem", state->withitem_type) < 0) {
Victor Stinnerb1cc6ba2020-07-03 20:01:46 +020010113 return -1;
Brandt Bucherd2f96672020-02-06 06:45:46 -080010114 }
Victor Stinner74419f02020-07-03 11:35:37 +020010115 Py_INCREF(state->withitem_type);
10116 if (PyModule_AddObject(m, "type_ignore", state->type_ignore_type) < 0) {
Victor Stinnerb1cc6ba2020-07-03 20:01:46 +020010117 return -1;
Brandt Bucherd2f96672020-02-06 06:45:46 -080010118 }
Victor Stinner74419f02020-07-03 11:35:37 +020010119 Py_INCREF(state->type_ignore_type);
10120 if (PyModule_AddObject(m, "TypeIgnore", state->TypeIgnore_type) < 0) {
Victor Stinnerb1cc6ba2020-07-03 20:01:46 +020010121 return -1;
Brandt Bucherd2f96672020-02-06 06:45:46 -080010122 }
Victor Stinner74419f02020-07-03 11:35:37 +020010123 Py_INCREF(state->TypeIgnore_type);
Victor Stinnerb1cc6ba2020-07-03 20:01:46 +020010124 return 0;
10125}
Victor Stinner91e1bc12020-07-03 14:15:53 +020010126
Victor Stinnerb1cc6ba2020-07-03 20:01:46 +020010127static PyModuleDef_Slot astmodule_slots[] = {
10128 {Py_mod_exec, astmodule_exec},
10129 {0, NULL}
10130};
10131
10132static struct PyModuleDef _astmodule = {
10133 PyModuleDef_HEAD_INIT,
10134 .m_name = "_ast",
Victor Stinnere5fbe0c2020-09-15 18:03:34 +020010135 // The _ast module uses a global state (global_ast_state).
10136 .m_size = 0,
Victor Stinnerb1cc6ba2020-07-03 20:01:46 +020010137 .m_slots = astmodule_slots,
Victor Stinnerb1cc6ba2020-07-03 20:01:46 +020010138};
10139
10140PyMODINIT_FUNC
10141PyInit__ast(void)
10142{
10143 return PyModuleDef_Init(&_astmodule);
Martin v. Löwis577b5b92006-02-27 15:23:19 +000010144}
10145
Jeremy Hylton3e0055f2005-10-20 19:59:25 +000010146
Martin v. Löwisbd260da2006-02-26 19:42:26 +000010147PyObject* PyAST_mod2obj(mod_ty t)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +000010148{
Victor Stinnerb1cc6ba2020-07-03 20:01:46 +020010149 astmodulestate *state = get_global_ast_state();
10150 if (state == NULL) {
Victor Stinnerbdf630c2013-07-17 00:17:15 +020010151 return NULL;
Victor Stinner91e1bc12020-07-03 14:15:53 +020010152 }
Victor Stinner74419f02020-07-03 11:35:37 +020010153 return ast2obj_mod(state, t);
Jeremy Hylton3e0055f2005-10-20 19:59:25 +000010154}
Martin v. Löwis5b222132007-06-10 09:51:05 +000010155
Neal Norwitzdb4115f2008-03-31 04:20:05 +000010156/* mode is 0 for "exec", 1 for "eval" and 2 for "single" input */
10157mod_ty PyAST_obj2mod(PyObject* ast, PyArena* arena, int mode)
Martin v. Löwis618dc5e2008-03-30 20:03:44 +000010158{
Serhiy Storchaka43c97312019-09-10 13:02:30 +030010159 const char * const req_name[] = {"Module", "Expression", "Interactive"};
Benjamin Peterson0496c9e2009-12-13 01:24:58 +000010160 int isinstance;
Benjamin Peterson42ec0312014-02-10 22:41:40 -050010161
Steve Dowerb82e17e2019-05-23 08:45:22 -070010162 if (PySys_Audit("compile", "OO", ast, Py_None) < 0) {
10163 return NULL;
10164 }
10165
Victor Stinner91e1bc12020-07-03 14:15:53 +020010166 astmodulestate *state = get_global_ast_state();
Victor Stinner74419f02020-07-03 11:35:37 +020010167 PyObject *req_type[3];
10168 req_type[0] = state->Module_type;
10169 req_type[1] = state->Expression_type;
10170 req_type[2] = state->Interactive_type;
Benjamin Peterson42ec0312014-02-10 22:41:40 -050010171
Guido van Rossum3a32e3b2019-02-01 11:37:34 -080010172 assert(0 <= mode && mode <= 2);
Neal Norwitzdb4115f2008-03-31 04:20:05 +000010173
Benjamin Peterson0496c9e2009-12-13 01:24:58 +000010174 isinstance = PyObject_IsInstance(ast, req_type[mode]);
10175 if (isinstance == -1)
10176 return NULL;
10177 if (!isinstance) {
Neal Norwitzdb4115f2008-03-31 04:20:05 +000010178 PyErr_Format(PyExc_TypeError, "expected %s node, got %.400s",
Dino Viehlandac46eb42019-09-11 10:16:34 -070010179 req_name[mode], _PyType_Name(Py_TYPE(ast)));
Martin v. Löwis618dc5e2008-03-30 20:03:44 +000010180 return NULL;
10181 }
Dong-hee Naa05fcd32019-10-10 16:41:26 +090010182
10183 mod_ty res = NULL;
Victor Stinner74419f02020-07-03 11:35:37 +020010184 if (obj2ast_mod(state, ast, &res, arena) != 0)
Martin v. Löwis618dc5e2008-03-30 20:03:44 +000010185 return NULL;
10186 else
10187 return res;
10188}
10189
10190int PyAST_Check(PyObject* obj)
10191{
Victor Stinnerb1cc6ba2020-07-03 20:01:46 +020010192 astmodulestate *state = get_global_ast_state();
10193 if (state == NULL) {
Victor Stinnerbdf630c2013-07-17 00:17:15 +020010194 return -1;
Victor Stinner91e1bc12020-07-03 14:15:53 +020010195 }
Victor Stinner74419f02020-07-03 11:35:37 +020010196 return PyObject_IsInstance(obj, state->AST_type);
Martin v. Löwis618dc5e2008-03-30 20:03:44 +000010197}
10198
Martin v. Löwis5b222132007-06-10 09:51:05 +000010199