blob: 5367cb39a91fdbca409ae37cf13fe8251715bd1c [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
Pablo Galindo55e08362020-09-15 19:32:56 +0100227// 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 Stinnerd2bea262020-08-10 15:55:54 +0200232
233static astmodulestate*
234get_global_ast_state(void)
235{
Pablo Galindo55e08362020-09-15 19:32:56 +0100236 astmodulestate* state = &global_ast_state;
237 if (!init_types(state)) {
Victor Stinnerd2bea262020-08-10 15:55:54 +0200238 return NULL;
239 }
Victor Stinnerd2bea262020-08-10 15:55:54 +0200240 return state;
Victor Stinnerf8599272020-07-03 16:57:19 +0200241}
Dino Viehlandac46eb42019-09-11 10:16:34 -0700242
Pablo Galindo55e08362020-09-15 19:32:56 +0100243static astmodulestate*
244get_ast_state(PyObject* Py_UNUSED(module))
Dino Viehlandac46eb42019-09-11 10:16:34 -0700245{
Pablo Galindo55e08362020-09-15 19:32:56 +0100246 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
Haibo Huang5bb95e92021-01-14 11:35:14 -0800253void _PyAST_Fini(void)
Pablo Galindo55e08362020-09-15 19:32:56 +0100254{
255 astmodulestate* state = &global_ast_state;
Victor Stinnerf8599272020-07-03 16:57:19 +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
Pablo Galindo55e08362020-09-15 19:32:56 +0100470 state->initialized = 0;
Dino Viehlandac46eb42019-09-11 10:16:34 -0700471}
472
Victor Stinnerf8599272020-07-03 16:57:19 +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
Victor Stinnerf8599272020-07-03 16:57:19 +0200552static PyObject* ast2obj_mod(astmodulestate *state, void*);
Serhiy Storchaka43c97312019-09-10 13:02:30 +0300553static const char * const Module_fields[]={
Victor Stinnerce72e1c2013-07-27 00:00:36 +0200554 "body",
Guido van Rossumdcfcd142019-01-31 03:40:27 -0800555 "type_ignores",
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000556};
Serhiy Storchaka43c97312019-09-10 13:02:30 +0300557static const char * const Interactive_fields[]={
Victor Stinnerce72e1c2013-07-27 00:00:36 +0200558 "body",
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000559};
Serhiy Storchaka43c97312019-09-10 13:02:30 +0300560static const char * const Expression_fields[]={
Victor Stinnerce72e1c2013-07-27 00:00:36 +0200561 "body",
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000562};
Serhiy Storchaka43c97312019-09-10 13:02:30 +0300563static const char * const FunctionType_fields[]={
Guido van Rossumdcfcd142019-01-31 03:40:27 -0800564 "argtypes",
565 "returns",
566};
Serhiy Storchaka43c97312019-09-10 13:02:30 +0300567static const char * const stmt_attributes[] = {
Victor Stinnerce72e1c2013-07-27 00:00:36 +0200568 "lineno",
569 "col_offset",
Ivan Levkivskyi9932a222019-01-22 11:18:22 +0000570 "end_lineno",
571 "end_col_offset",
Martin v. Löwis577b5b92006-02-27 15:23:19 +0000572};
Victor Stinnerf8599272020-07-03 16:57:19 +0200573static PyObject* ast2obj_stmt(astmodulestate *state, void*);
Serhiy Storchaka43c97312019-09-10 13:02:30 +0300574static const char * const FunctionDef_fields[]={
Victor Stinnerce72e1c2013-07-27 00:00:36 +0200575 "name",
576 "args",
577 "body",
578 "decorator_list",
579 "returns",
Guido van Rossumdcfcd142019-01-31 03:40:27 -0800580 "type_comment",
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000581};
Serhiy Storchaka43c97312019-09-10 13:02:30 +0300582static const char * const AsyncFunctionDef_fields[]={
Yury Selivanov75445082015-05-11 22:57:16 -0400583 "name",
584 "args",
585 "body",
586 "decorator_list",
587 "returns",
Guido van Rossumdcfcd142019-01-31 03:40:27 -0800588 "type_comment",
Yury Selivanov75445082015-05-11 22:57:16 -0400589};
Serhiy Storchaka43c97312019-09-10 13:02:30 +0300590static const char * const ClassDef_fields[]={
Victor Stinnerce72e1c2013-07-27 00:00:36 +0200591 "name",
592 "bases",
593 "keywords",
Victor Stinnerce72e1c2013-07-27 00:00:36 +0200594 "body",
595 "decorator_list",
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000596};
Serhiy Storchaka43c97312019-09-10 13:02:30 +0300597static const char * const Return_fields[]={
Victor Stinnerce72e1c2013-07-27 00:00:36 +0200598 "value",
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000599};
Serhiy Storchaka43c97312019-09-10 13:02:30 +0300600static const char * const Delete_fields[]={
Victor Stinnerce72e1c2013-07-27 00:00:36 +0200601 "targets",
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000602};
Serhiy Storchaka43c97312019-09-10 13:02:30 +0300603static const char * const Assign_fields[]={
Victor Stinnerce72e1c2013-07-27 00:00:36 +0200604 "targets",
605 "value",
Guido van Rossumdcfcd142019-01-31 03:40:27 -0800606 "type_comment",
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000607};
Serhiy Storchaka43c97312019-09-10 13:02:30 +0300608static const char * const AugAssign_fields[]={
Victor Stinnerce72e1c2013-07-27 00:00:36 +0200609 "target",
610 "op",
611 "value",
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000612};
Serhiy Storchaka43c97312019-09-10 13:02:30 +0300613static const char * const AnnAssign_fields[]={
Yury Selivanovf8cb8a12016-09-08 20:50:03 -0700614 "target",
615 "annotation",
616 "value",
617 "simple",
618};
Serhiy Storchaka43c97312019-09-10 13:02:30 +0300619static const char * const For_fields[]={
Victor Stinnerce72e1c2013-07-27 00:00:36 +0200620 "target",
621 "iter",
622 "body",
623 "orelse",
Guido van Rossumdcfcd142019-01-31 03:40:27 -0800624 "type_comment",
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000625};
Serhiy Storchaka43c97312019-09-10 13:02:30 +0300626static const char * const AsyncFor_fields[]={
Yury Selivanov75445082015-05-11 22:57:16 -0400627 "target",
628 "iter",
629 "body",
630 "orelse",
Guido van Rossumdcfcd142019-01-31 03:40:27 -0800631 "type_comment",
Yury Selivanov75445082015-05-11 22:57:16 -0400632};
Serhiy Storchaka43c97312019-09-10 13:02:30 +0300633static const char * const While_fields[]={
Victor Stinnerce72e1c2013-07-27 00:00:36 +0200634 "test",
635 "body",
636 "orelse",
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000637};
Serhiy Storchaka43c97312019-09-10 13:02:30 +0300638static const char * const If_fields[]={
Victor Stinnerce72e1c2013-07-27 00:00:36 +0200639 "test",
640 "body",
641 "orelse",
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000642};
Serhiy Storchaka43c97312019-09-10 13:02:30 +0300643static const char * const With_fields[]={
Victor Stinnerce72e1c2013-07-27 00:00:36 +0200644 "items",
645 "body",
Guido van Rossumdcfcd142019-01-31 03:40:27 -0800646 "type_comment",
Guido van Rossumc2e20742006-02-27 22:32:47 +0000647};
Serhiy Storchaka43c97312019-09-10 13:02:30 +0300648static const char * const AsyncWith_fields[]={
Yury Selivanov75445082015-05-11 22:57:16 -0400649 "items",
650 "body",
Guido van Rossumdcfcd142019-01-31 03:40:27 -0800651 "type_comment",
Yury Selivanov75445082015-05-11 22:57:16 -0400652};
Serhiy Storchaka43c97312019-09-10 13:02:30 +0300653static const char * const Raise_fields[]={
Victor Stinnerce72e1c2013-07-27 00:00:36 +0200654 "exc",
655 "cause",
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000656};
Serhiy Storchaka43c97312019-09-10 13:02:30 +0300657static const char * const Try_fields[]={
Victor Stinnerce72e1c2013-07-27 00:00:36 +0200658 "body",
659 "handlers",
660 "orelse",
661 "finalbody",
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000662};
Serhiy Storchaka43c97312019-09-10 13:02:30 +0300663static const char * const Assert_fields[]={
Victor Stinnerce72e1c2013-07-27 00:00:36 +0200664 "test",
665 "msg",
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000666};
Serhiy Storchaka43c97312019-09-10 13:02:30 +0300667static const char * const Import_fields[]={
Victor Stinnerce72e1c2013-07-27 00:00:36 +0200668 "names",
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000669};
Serhiy Storchaka43c97312019-09-10 13:02:30 +0300670static const char * const ImportFrom_fields[]={
Victor Stinnerce72e1c2013-07-27 00:00:36 +0200671 "module",
672 "names",
673 "level",
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000674};
Serhiy Storchaka43c97312019-09-10 13:02:30 +0300675static const char * const Global_fields[]={
Victor Stinnerce72e1c2013-07-27 00:00:36 +0200676 "names",
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000677};
Serhiy Storchaka43c97312019-09-10 13:02:30 +0300678static const char * const Nonlocal_fields[]={
Victor Stinnerce72e1c2013-07-27 00:00:36 +0200679 "names",
Jeremy Hylton81e95022007-02-27 06:50:52 +0000680};
Serhiy Storchaka43c97312019-09-10 13:02:30 +0300681static const char * const Expr_fields[]={
Victor Stinnerce72e1c2013-07-27 00:00:36 +0200682 "value",
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000683};
Serhiy Storchaka43c97312019-09-10 13:02:30 +0300684static const char * const expr_attributes[] = {
Victor Stinnerce72e1c2013-07-27 00:00:36 +0200685 "lineno",
686 "col_offset",
Ivan Levkivskyi9932a222019-01-22 11:18:22 +0000687 "end_lineno",
688 "end_col_offset",
Martin v. Löwis577b5b92006-02-27 15:23:19 +0000689};
Victor Stinnerf8599272020-07-03 16:57:19 +0200690static PyObject* ast2obj_expr(astmodulestate *state, void*);
Serhiy Storchaka43c97312019-09-10 13:02:30 +0300691static const char * const BoolOp_fields[]={
Victor Stinnerce72e1c2013-07-27 00:00:36 +0200692 "op",
693 "values",
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000694};
Serhiy Storchaka43c97312019-09-10 13:02:30 +0300695static const char * const NamedExpr_fields[]={
Emily Morehouse8f59ee02019-01-24 16:49:56 -0700696 "target",
697 "value",
698};
Serhiy Storchaka43c97312019-09-10 13:02:30 +0300699static const char * const BinOp_fields[]={
Victor Stinnerce72e1c2013-07-27 00:00:36 +0200700 "left",
701 "op",
702 "right",
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000703};
Serhiy Storchaka43c97312019-09-10 13:02:30 +0300704static const char * const UnaryOp_fields[]={
Victor Stinnerce72e1c2013-07-27 00:00:36 +0200705 "op",
706 "operand",
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000707};
Serhiy Storchaka43c97312019-09-10 13:02:30 +0300708static const char * const Lambda_fields[]={
Victor Stinnerce72e1c2013-07-27 00:00:36 +0200709 "args",
710 "body",
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000711};
Serhiy Storchaka43c97312019-09-10 13:02:30 +0300712static const char * const IfExp_fields[]={
Victor Stinnerce72e1c2013-07-27 00:00:36 +0200713 "test",
714 "body",
715 "orelse",
Thomas Woutersdca3b9c2006-02-27 00:24:13 +0000716};
Serhiy Storchaka43c97312019-09-10 13:02:30 +0300717static const char * const Dict_fields[]={
Victor Stinnerce72e1c2013-07-27 00:00:36 +0200718 "keys",
719 "values",
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000720};
Serhiy Storchaka43c97312019-09-10 13:02:30 +0300721static const char * const Set_fields[]={
Victor Stinnerce72e1c2013-07-27 00:00:36 +0200722 "elts",
Guido van Rossum86e58e22006-08-28 15:27:34 +0000723};
Serhiy Storchaka43c97312019-09-10 13:02:30 +0300724static const char * const ListComp_fields[]={
Victor Stinnerce72e1c2013-07-27 00:00:36 +0200725 "elt",
726 "generators",
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000727};
Serhiy Storchaka43c97312019-09-10 13:02:30 +0300728static const char * const SetComp_fields[]={
Victor Stinnerce72e1c2013-07-27 00:00:36 +0200729 "elt",
730 "generators",
Nick Coghlan650f0d02007-04-15 12:05:43 +0000731};
Serhiy Storchaka43c97312019-09-10 13:02:30 +0300732static const char * const DictComp_fields[]={
Victor Stinnerce72e1c2013-07-27 00:00:36 +0200733 "key",
734 "value",
735 "generators",
Guido van Rossum992d4a32007-07-11 13:09:30 +0000736};
Serhiy Storchaka43c97312019-09-10 13:02:30 +0300737static const char * const GeneratorExp_fields[]={
Victor Stinnerce72e1c2013-07-27 00:00:36 +0200738 "elt",
739 "generators",
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000740};
Serhiy Storchaka43c97312019-09-10 13:02:30 +0300741static const char * const Await_fields[]={
Yury Selivanov75445082015-05-11 22:57:16 -0400742 "value",
743};
Serhiy Storchaka43c97312019-09-10 13:02:30 +0300744static const char * const Yield_fields[]={
Victor Stinnerce72e1c2013-07-27 00:00:36 +0200745 "value",
Benjamin Peterson527c6222012-01-14 08:58:23 -0500746};
Serhiy Storchaka43c97312019-09-10 13:02:30 +0300747static const char * const YieldFrom_fields[]={
Victor Stinnerce72e1c2013-07-27 00:00:36 +0200748 "value",
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000749};
Serhiy Storchaka43c97312019-09-10 13:02:30 +0300750static const char * const Compare_fields[]={
Victor Stinnerce72e1c2013-07-27 00:00:36 +0200751 "left",
752 "ops",
753 "comparators",
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000754};
Serhiy Storchaka43c97312019-09-10 13:02:30 +0300755static const char * const Call_fields[]={
Victor Stinnerce72e1c2013-07-27 00:00:36 +0200756 "func",
757 "args",
758 "keywords",
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000759};
Serhiy Storchaka43c97312019-09-10 13:02:30 +0300760static const char * const FormattedValue_fields[]={
Eric V. Smith235a6f02015-09-19 14:51:32 -0400761 "value",
762 "conversion",
763 "format_spec",
764};
Serhiy Storchaka43c97312019-09-10 13:02:30 +0300765static const char * const JoinedStr_fields[]={
Eric V. Smith235a6f02015-09-19 14:51:32 -0400766 "values",
767};
Serhiy Storchaka43c97312019-09-10 13:02:30 +0300768static const char * const Constant_fields[]={
Victor Stinnerf2c1aa12016-01-26 00:40:57 +0100769 "value",
Guido van Rossum10f8ce62019-03-13 13:00:46 -0700770 "kind",
Victor Stinnerf2c1aa12016-01-26 00:40:57 +0100771};
Serhiy Storchaka43c97312019-09-10 13:02:30 +0300772static const char * const Attribute_fields[]={
Victor Stinnerce72e1c2013-07-27 00:00:36 +0200773 "value",
774 "attr",
775 "ctx",
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000776};
Serhiy Storchaka43c97312019-09-10 13:02:30 +0300777static const char * const Subscript_fields[]={
Victor Stinnerce72e1c2013-07-27 00:00:36 +0200778 "value",
779 "slice",
780 "ctx",
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000781};
Serhiy Storchaka43c97312019-09-10 13:02:30 +0300782static const char * const Starred_fields[]={
Victor Stinnerce72e1c2013-07-27 00:00:36 +0200783 "value",
784 "ctx",
Guido van Rossum0368b722007-05-11 16:50:42 +0000785};
Serhiy Storchaka43c97312019-09-10 13:02:30 +0300786static const char * const Name_fields[]={
Victor Stinnerce72e1c2013-07-27 00:00:36 +0200787 "id",
788 "ctx",
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000789};
Serhiy Storchaka43c97312019-09-10 13:02:30 +0300790static const char * const List_fields[]={
Victor Stinnerce72e1c2013-07-27 00:00:36 +0200791 "elts",
792 "ctx",
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000793};
Serhiy Storchaka43c97312019-09-10 13:02:30 +0300794static const char * const Tuple_fields[]={
Victor Stinnerce72e1c2013-07-27 00:00:36 +0200795 "elts",
796 "ctx",
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000797};
Serhiy Storchaka43c97312019-09-10 13:02:30 +0300798static const char * const Slice_fields[]={
Victor Stinnerce72e1c2013-07-27 00:00:36 +0200799 "lower",
800 "upper",
801 "step",
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000802};
Victor Stinnerf8599272020-07-03 16:57:19 +0200803static PyObject* ast2obj_expr_context(astmodulestate *state, expr_context_ty);
804static PyObject* ast2obj_boolop(astmodulestate *state, boolop_ty);
805static PyObject* ast2obj_operator(astmodulestate *state, operator_ty);
806static PyObject* ast2obj_unaryop(astmodulestate *state, unaryop_ty);
807static PyObject* ast2obj_cmpop(astmodulestate *state, cmpop_ty);
808static PyObject* ast2obj_comprehension(astmodulestate *state, void*);
Serhiy Storchaka43c97312019-09-10 13:02:30 +0300809static const char * const comprehension_fields[]={
Victor Stinnerce72e1c2013-07-27 00:00:36 +0200810 "target",
811 "iter",
812 "ifs",
Yury Selivanov52c4e7c2016-09-09 10:36:01 -0700813 "is_async",
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000814};
Serhiy Storchaka43c97312019-09-10 13:02:30 +0300815static const char * const excepthandler_attributes[] = {
Victor Stinnerce72e1c2013-07-27 00:00:36 +0200816 "lineno",
817 "col_offset",
Ivan Levkivskyi9932a222019-01-22 11:18:22 +0000818 "end_lineno",
819 "end_col_offset",
Neal Norwitzad74aa82008-03-31 05:14:30 +0000820};
Victor Stinnerf8599272020-07-03 16:57:19 +0200821static PyObject* ast2obj_excepthandler(astmodulestate *state, void*);
Serhiy Storchaka43c97312019-09-10 13:02:30 +0300822static const char * const ExceptHandler_fields[]={
Victor Stinnerce72e1c2013-07-27 00:00:36 +0200823 "type",
824 "name",
825 "body",
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000826};
Victor Stinnerf8599272020-07-03 16:57:19 +0200827static PyObject* ast2obj_arguments(astmodulestate *state, void*);
Serhiy Storchaka43c97312019-09-10 13:02:30 +0300828static const char * const arguments_fields[]={
Pablo Galindo8c77b8c2019-04-29 13:36:57 +0100829 "posonlyargs",
Miss Islington (bot)cf9a63c2019-07-14 16:49:52 -0700830 "args",
Victor Stinnerce72e1c2013-07-27 00:00:36 +0200831 "vararg",
Victor Stinnerce72e1c2013-07-27 00:00:36 +0200832 "kwonlyargs",
Victor Stinnerce72e1c2013-07-27 00:00:36 +0200833 "kw_defaults",
Victor Stinneree4b59c2013-07-27 00:01:35 +0200834 "kwarg",
835 "defaults",
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000836};
Victor Stinnerf8599272020-07-03 16:57:19 +0200837static PyObject* ast2obj_arg(astmodulestate *state, void*);
Serhiy Storchaka43c97312019-09-10 13:02:30 +0300838static const char * const arg_attributes[] = {
Victor Stinneree4b59c2013-07-27 00:01:35 +0200839 "lineno",
840 "col_offset",
Ivan Levkivskyi9932a222019-01-22 11:18:22 +0000841 "end_lineno",
842 "end_col_offset",
Benjamin Petersoncda75be2013-03-18 10:48:58 -0700843};
Serhiy Storchaka43c97312019-09-10 13:02:30 +0300844static const char * const arg_fields[]={
Victor Stinnerce72e1c2013-07-27 00:00:36 +0200845 "arg",
846 "annotation",
Guido van Rossumdcfcd142019-01-31 03:40:27 -0800847 "type_comment",
Neal Norwitzc1505362006-12-28 06:47:50 +0000848};
Victor Stinnerf8599272020-07-03 16:57:19 +0200849static PyObject* ast2obj_keyword(astmodulestate *state, void*);
Pablo Galindo168660b2020-04-02 00:47:39 +0100850static const char * const keyword_attributes[] = {
851 "lineno",
852 "col_offset",
853 "end_lineno",
854 "end_col_offset",
855};
Serhiy Storchaka43c97312019-09-10 13:02:30 +0300856static const char * const keyword_fields[]={
Victor Stinnerce72e1c2013-07-27 00:00:36 +0200857 "arg",
858 "value",
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000859};
Victor Stinnerf8599272020-07-03 16:57:19 +0200860static PyObject* ast2obj_alias(astmodulestate *state, void*);
Serhiy Storchaka43c97312019-09-10 13:02:30 +0300861static const char * const alias_fields[]={
Victor Stinnerce72e1c2013-07-27 00:00:36 +0200862 "name",
863 "asname",
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000864};
Victor Stinnerf8599272020-07-03 16:57:19 +0200865static PyObject* ast2obj_withitem(astmodulestate *state, void*);
Serhiy Storchaka43c97312019-09-10 13:02:30 +0300866static const char * const withitem_fields[]={
Victor Stinnerce72e1c2013-07-27 00:00:36 +0200867 "context_expr",
868 "optional_vars",
Benjamin Petersonbf1bbc12011-05-27 13:58:08 -0500869};
Victor Stinnerf8599272020-07-03 16:57:19 +0200870static PyObject* ast2obj_type_ignore(astmodulestate *state, void*);
Serhiy Storchaka43c97312019-09-10 13:02:30 +0300871static const char * const TypeIgnore_fields[]={
Guido van Rossumdcfcd142019-01-31 03:40:27 -0800872 "lineno",
Michael J. Sullivan933e1502019-05-22 07:54:20 -0700873 "tag",
Guido van Rossumdcfcd142019-01-31 03:40:27 -0800874};
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000875
876
INADA Naokifc489082017-01-25 22:33:43 +0900877
Benjamin Peterson7e0dbfb2012-03-12 09:46:44 -0700878typedef struct {
Victor Stinner45e50de2012-03-13 01:17:31 +0100879 PyObject_HEAD
Benjamin Peterson7e0dbfb2012-03-12 09:46:44 -0700880 PyObject *dict;
881} AST_object;
882
Benjamin Peterson1767e022012-03-14 21:50:29 -0500883static void
884ast_dealloc(AST_object *self)
885{
INADA Naokia6296d32017-08-24 14:55:17 +0900886 /* bpo-31095: UnTrack is needed before calling any callbacks */
Eddie Elizondo0247e802019-09-14 09:38:17 -0400887 PyTypeObject *tp = Py_TYPE(self);
INADA Naokia6296d32017-08-24 14:55:17 +0900888 PyObject_GC_UnTrack(self);
Benjamin Peterson1767e022012-03-14 21:50:29 -0500889 Py_CLEAR(self->dict);
Eddie Elizondo0247e802019-09-14 09:38:17 -0400890 freefunc free_func = PyType_GetSlot(tp, Py_tp_free);
891 assert(free_func != NULL);
892 free_func(self);
893 Py_DECREF(tp);
Benjamin Peterson1767e022012-03-14 21:50:29 -0500894}
895
Neal Norwitz207c9f32008-03-31 04:42:11 +0000896static int
Benjamin Peterson81071762012-07-08 11:03:46 -0700897ast_traverse(AST_object *self, visitproc visit, void *arg)
898{
Miss Islington (bot)bcbe5c52020-05-28 08:12:23 -0700899 Py_VISIT(Py_TYPE(self));
Benjamin Peterson81071762012-07-08 11:03:46 -0700900 Py_VISIT(self->dict);
901 return 0;
902}
903
Serhiy Storchakaa5c42282018-05-31 07:34:34 +0300904static int
Benjamin Peterson81071762012-07-08 11:03:46 -0700905ast_clear(AST_object *self)
906{
907 Py_CLEAR(self->dict);
Serhiy Storchakaa5c42282018-05-31 07:34:34 +0300908 return 0;
Benjamin Peterson81071762012-07-08 11:03:46 -0700909}
910
911static int
Neal Norwitz207c9f32008-03-31 04:42:11 +0000912ast_type_init(PyObject *self, PyObject *args, PyObject *kw)
913{
Victor Stinnerd2bea262020-08-10 15:55:54 +0200914 astmodulestate *state = get_global_ast_state();
915 if (state == NULL) {
916 return -1;
917 }
918
Neal Norwitz207c9f32008-03-31 04:42:11 +0000919 Py_ssize_t i, numfields = 0;
920 int res = -1;
921 PyObject *key, *value, *fields;
Victor Stinnerf8599272020-07-03 16:57:19 +0200922 if (_PyObject_LookupAttr((PyObject*)Py_TYPE(self), state->_fields, &fields) < 0) {
Serhiy Storchakaf320be72018-01-25 10:49:40 +0200923 goto cleanup;
924 }
Neal Norwitz207c9f32008-03-31 04:42:11 +0000925 if (fields) {
926 numfields = PySequence_Size(fields);
Miss Islington (bot)907ee1f2020-05-24 14:31:47 -0700927 if (numfields == -1) {
Neal Norwitz207c9f32008-03-31 04:42:11 +0000928 goto cleanup;
Miss Islington (bot)907ee1f2020-05-24 14:31:47 -0700929 }
Neal Norwitz207c9f32008-03-31 04:42:11 +0000930 }
INADA Naoki4c78c522017-02-24 02:48:17 +0900931
Neal Norwitz207c9f32008-03-31 04:42:11 +0000932 res = 0; /* if no error occurs, this stays 0 to the end */
INADA Naoki4c78c522017-02-24 02:48:17 +0900933 if (numfields < PyTuple_GET_SIZE(args)) {
934 PyErr_Format(PyExc_TypeError, "%.400s constructor takes at most "
935 "%zd positional argument%s",
Dino Viehlandac46eb42019-09-11 10:16:34 -0700936 _PyType_Name(Py_TYPE(self)),
INADA Naoki4c78c522017-02-24 02:48:17 +0900937 numfields, numfields == 1 ? "" : "s");
938 res = -1;
939 goto cleanup;
940 }
941 for (i = 0; i < PyTuple_GET_SIZE(args); i++) {
942 /* cannot be reached when fields is NULL */
943 PyObject *name = PySequence_GetItem(fields, i);
944 if (!name) {
Neal Norwitz207c9f32008-03-31 04:42:11 +0000945 res = -1;
946 goto cleanup;
947 }
INADA Naoki4c78c522017-02-24 02:48:17 +0900948 res = PyObject_SetAttr(self, name, PyTuple_GET_ITEM(args, i));
949 Py_DECREF(name);
Miss Islington (bot)907ee1f2020-05-24 14:31:47 -0700950 if (res < 0) {
INADA Naoki4c78c522017-02-24 02:48:17 +0900951 goto cleanup;
Miss Islington (bot)907ee1f2020-05-24 14:31:47 -0700952 }
Neal Norwitz207c9f32008-03-31 04:42:11 +0000953 }
954 if (kw) {
955 i = 0; /* needed by PyDict_Next */
956 while (PyDict_Next(kw, &i, &key, &value)) {
Miss Islington (bot)907ee1f2020-05-24 14:31:47 -0700957 int contains = PySequence_Contains(fields, key);
958 if (contains == -1) {
959 res = -1;
Neal Norwitz207c9f32008-03-31 04:42:11 +0000960 goto cleanup;
Miss Islington (bot)907ee1f2020-05-24 14:31:47 -0700961 } else if (contains == 1) {
962 Py_ssize_t p = PySequence_Index(fields, key);
963 if (p == -1) {
964 res = -1;
965 goto cleanup;
966 }
967 if (p < PyTuple_GET_SIZE(args)) {
968 PyErr_Format(PyExc_TypeError,
969 "%.400s got multiple values for argument '%U'",
970 Py_TYPE(self)->tp_name, key);
971 res = -1;
972 goto cleanup;
973 }
974 }
975 res = PyObject_SetAttr(self, key, value);
976 if (res < 0) {
977 goto cleanup;
978 }
Neal Norwitz207c9f32008-03-31 04:42:11 +0000979 }
980 }
981 cleanup:
982 Py_XDECREF(fields);
983 return res;
984}
985
Neal Norwitzee9b10a2008-03-31 05:29:39 +0000986/* Pickling support */
987static PyObject *
988ast_type_reduce(PyObject *self, PyObject *unused)
989{
Victor Stinnerf8599272020-07-03 16:57:19 +0200990 astmodulestate *state = get_global_ast_state();
Victor Stinnerd2bea262020-08-10 15:55:54 +0200991 if (state == NULL) {
992 return NULL;
993 }
994
Serhiy Storchakaf320be72018-01-25 10:49:40 +0200995 PyObject *dict;
Victor Stinnerf8599272020-07-03 16:57:19 +0200996 if (_PyObject_LookupAttr(self, state->__dict__, &dict) < 0) {
Serhiy Storchakaf320be72018-01-25 10:49:40 +0200997 return NULL;
Neal Norwitzee9b10a2008-03-31 05:29:39 +0000998 }
999 if (dict) {
Serhiy Storchakaf320be72018-01-25 10:49:40 +02001000 return Py_BuildValue("O()N", Py_TYPE(self), dict);
Neal Norwitzee9b10a2008-03-31 05:29:39 +00001001 }
1002 return Py_BuildValue("O()", Py_TYPE(self));
1003}
1004
Eddie Elizondo3368f3c2019-09-19 09:29:05 -07001005static PyMemberDef ast_type_members[] = {
1006 {"__dictoffset__", T_PYSSIZET, offsetof(AST_object, dict), READONLY},
1007 {NULL} /* Sentinel */
1008};
1009
Neal Norwitzee9b10a2008-03-31 05:29:39 +00001010static PyMethodDef ast_type_methods[] = {
1011 {"__reduce__", ast_type_reduce, METH_NOARGS, NULL},
1012 {NULL}
1013};
1014
Benjamin Peterson7e0dbfb2012-03-12 09:46:44 -07001015static PyGetSetDef ast_type_getsets[] = {
1016 {"__dict__", PyObject_GenericGetDict, PyObject_GenericSetDict},
1017 {NULL}
1018};
1019
Dino Viehlandac46eb42019-09-11 10:16:34 -07001020static PyType_Slot AST_type_slots[] = {
1021 {Py_tp_dealloc, ast_dealloc},
1022 {Py_tp_getattro, PyObject_GenericGetAttr},
1023 {Py_tp_setattro, PyObject_GenericSetAttr},
1024 {Py_tp_traverse, ast_traverse},
1025 {Py_tp_clear, ast_clear},
Eddie Elizondo3368f3c2019-09-19 09:29:05 -07001026 {Py_tp_members, ast_type_members},
Dino Viehlandac46eb42019-09-11 10:16:34 -07001027 {Py_tp_methods, ast_type_methods},
1028 {Py_tp_getset, ast_type_getsets},
1029 {Py_tp_init, ast_type_init},
1030 {Py_tp_alloc, PyType_GenericAlloc},
1031 {Py_tp_new, PyType_GenericNew},
Dino Viehlandac46eb42019-09-11 10:16:34 -07001032 {Py_tp_free, PyObject_GC_Del},
1033 {0, 0},
Neal Norwitz207c9f32008-03-31 04:42:11 +00001034};
1035
Dino Viehlandac46eb42019-09-11 10:16:34 -07001036static PyType_Spec AST_type_spec = {
Serhiy Storchakabace59d2020-03-22 20:33:34 +02001037 "ast.AST",
Neal Norwitz207c9f32008-03-31 04:42:11 +00001038 sizeof(AST_object),
1039 0,
Dino Viehlandac46eb42019-09-11 10:16:34 -07001040 Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE | Py_TPFLAGS_HAVE_GC,
1041 AST_type_slots
Neal Norwitz207c9f32008-03-31 04:42:11 +00001042};
Neal Norwitz207c9f32008-03-31 04:42:11 +00001043
Dino Viehlandac46eb42019-09-11 10:16:34 -07001044static PyObject *
Victor Stinnerf8599272020-07-03 16:57:19 +02001045make_type(astmodulestate *state, const char *type, PyObject* base,
1046 const char* const* fields, int num_fields, const char *doc)
Martin v. Löwisbd260da2006-02-26 19:42:26 +00001047{
1048 PyObject *fnames, *result;
1049 int i;
Neal Norwitzee9b10a2008-03-31 05:29:39 +00001050 fnames = PyTuple_New(num_fields);
1051 if (!fnames) return NULL;
1052 for (i = 0; i < num_fields; i++) {
Serhiy Storchaka43c97312019-09-10 13:02:30 +03001053 PyObject *field = PyUnicode_InternFromString(fields[i]);
Martin v. Löwisbd260da2006-02-26 19:42:26 +00001054 if (!field) {
1055 Py_DECREF(fnames);
1056 return NULL;
1057 }
1058 PyTuple_SET_ITEM(fnames, i, field);
1059 }
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001060 result = PyObject_CallFunction((PyObject*)&PyType_Type, "s(O){OOOOOs}",
INADA Naokifc489082017-01-25 22:33:43 +09001061 type, base,
Victor Stinnerf8599272020-07-03 16:57:19 +02001062 state->_fields, fnames,
1063 state->__module__,
1064 state->ast,
1065 state->__doc__, doc);
Martin v. Löwisbd260da2006-02-26 19:42:26 +00001066 Py_DECREF(fnames);
Dino Viehlandac46eb42019-09-11 10:16:34 -07001067 return result;
Martin v. Löwisbd260da2006-02-26 19:42:26 +00001068}
1069
Serhiy Storchaka43c97312019-09-10 13:02:30 +03001070static int
Victor Stinnerf8599272020-07-03 16:57:19 +02001071add_attributes(astmodulestate *state, PyObject *type, const char * const *attrs, int num_fields)
Martin v. Löwis577b5b92006-02-27 15:23:19 +00001072{
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00001073 int i, result;
Neal Norwitz207c9f32008-03-31 04:42:11 +00001074 PyObject *s, *l = PyTuple_New(num_fields);
Benjamin Peterson3e5cd1d2010-06-27 21:45:24 +00001075 if (!l)
1076 return 0;
1077 for (i = 0; i < num_fields; i++) {
Serhiy Storchaka43c97312019-09-10 13:02:30 +03001078 s = PyUnicode_InternFromString(attrs[i]);
Martin v. Löwis577b5b92006-02-27 15:23:19 +00001079 if (!s) {
1080 Py_DECREF(l);
1081 return 0;
1082 }
Neal Norwitz207c9f32008-03-31 04:42:11 +00001083 PyTuple_SET_ITEM(l, i, s);
Martin v. Löwis577b5b92006-02-27 15:23:19 +00001084 }
Victor Stinnerf8599272020-07-03 16:57:19 +02001085 result = PyObject_SetAttr(type, state->_attributes, l) >= 0;
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00001086 Py_DECREF(l);
1087 return result;
Martin v. Löwis577b5b92006-02-27 15:23:19 +00001088}
1089
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00001090/* Conversion AST -> Python */
1091
Victor Stinnerf8599272020-07-03 16:57:19 +02001092static PyObject* ast2obj_list(astmodulestate *state, asdl_seq *seq, PyObject* (*func)(astmodulestate *state, void*))
Martin v. Löwisbd260da2006-02-26 19:42:26 +00001093{
Benjamin Peterson77fa9372012-05-15 10:10:27 -07001094 Py_ssize_t i, n = asdl_seq_LEN(seq);
Martin v. Löwisbd260da2006-02-26 19:42:26 +00001095 PyObject *result = PyList_New(n);
1096 PyObject *value;
1097 if (!result)
1098 return NULL;
1099 for (i = 0; i < n; i++) {
Victor Stinnerf8599272020-07-03 16:57:19 +02001100 value = func(state, asdl_seq_GET(seq, i));
Martin v. Löwisbd260da2006-02-26 19:42:26 +00001101 if (!value) {
1102 Py_DECREF(result);
1103 return NULL;
1104 }
1105 PyList_SET_ITEM(result, i, value);
1106 }
1107 return result;
1108}
1109
Victor Stinnerf8599272020-07-03 16:57:19 +02001110static PyObject* ast2obj_object(astmodulestate *Py_UNUSED(state), void *o)
Martin v. Löwisbd260da2006-02-26 19:42:26 +00001111{
1112 if (!o)
1113 o = Py_None;
1114 Py_INCREF((PyObject*)o);
1115 return (PyObject*)o;
1116}
Victor Stinnerf2c1aa12016-01-26 00:40:57 +01001117#define ast2obj_constant ast2obj_object
Martin v. Löwisbd260da2006-02-26 19:42:26 +00001118#define ast2obj_identifier ast2obj_object
1119#define ast2obj_string ast2obj_object
Martin v. Löwisbd260da2006-02-26 19:42:26 +00001120
Victor Stinnerf8599272020-07-03 16:57:19 +02001121static PyObject* ast2obj_int(astmodulestate *Py_UNUSED(state), long b)
Martin v. Löwis577b5b92006-02-27 15:23:19 +00001122{
Christian Heimes217cfd12007-12-02 14:31:20 +00001123 return PyLong_FromLong(b);
Martin v. Löwis577b5b92006-02-27 15:23:19 +00001124}
1125
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00001126/* Conversion Python -> AST */
1127
Victor Stinnerf8599272020-07-03 16:57:19 +02001128static int obj2ast_object(astmodulestate *Py_UNUSED(state), PyObject* obj, PyObject** out, PyArena* arena)
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00001129{
1130 if (obj == Py_None)
1131 obj = NULL;
Christian Heimes70c94e72013-07-27 00:33:13 +02001132 if (obj) {
1133 if (PyArena_AddPyObject(arena, obj) < 0) {
1134 *out = NULL;
1135 return -1;
1136 }
1137 Py_INCREF(obj);
1138 }
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00001139 *out = obj;
1140 return 0;
1141}
1142
Victor Stinnerf8599272020-07-03 16:57:19 +02001143static int obj2ast_constant(astmodulestate *Py_UNUSED(state), PyObject* obj, PyObject** out, PyArena* arena)
Victor Stinnerf2c1aa12016-01-26 00:40:57 +01001144{
Serhiy Storchaka3f228112018-09-27 17:42:37 +03001145 if (PyArena_AddPyObject(arena, obj) < 0) {
1146 *out = NULL;
1147 return -1;
Victor Stinnerf2c1aa12016-01-26 00:40:57 +01001148 }
Serhiy Storchaka3f228112018-09-27 17:42:37 +03001149 Py_INCREF(obj);
Victor Stinnerf2c1aa12016-01-26 00:40:57 +01001150 *out = obj;
1151 return 0;
1152}
1153
Victor Stinnerf8599272020-07-03 16:57:19 +02001154static int obj2ast_identifier(astmodulestate *state, PyObject* obj, PyObject** out, PyArena* arena)
Benjamin Peterson2193d2b2011-07-22 10:50:23 -05001155{
Benjamin Peterson180e6352011-07-22 11:09:07 -05001156 if (!PyUnicode_CheckExact(obj) && obj != Py_None) {
1157 PyErr_SetString(PyExc_TypeError, "AST identifier must be of type str");
Benjamin Peterson2193d2b2011-07-22 10:50:23 -05001158 return 1;
1159 }
Victor Stinnerf8599272020-07-03 16:57:19 +02001160 return obj2ast_object(state, obj, out, arena);
Benjamin Peterson2193d2b2011-07-22 10:50:23 -05001161}
1162
Victor Stinnerf8599272020-07-03 16:57:19 +02001163static int obj2ast_string(astmodulestate *state, PyObject* obj, PyObject** out, PyArena* arena)
Guido van Rossumdcfcd142019-01-31 03:40:27 -08001164{
1165 if (!PyUnicode_CheckExact(obj) && !PyBytes_CheckExact(obj)) {
1166 PyErr_SetString(PyExc_TypeError, "AST string must be of type str");
1167 return 1;
1168 }
Victor Stinnerf8599272020-07-03 16:57:19 +02001169 return obj2ast_object(state, obj, out, arena);
Guido van Rossumdcfcd142019-01-31 03:40:27 -08001170}
1171
Victor Stinnerf8599272020-07-03 16:57:19 +02001172static int obj2ast_int(astmodulestate* Py_UNUSED(state), PyObject* obj, int* out, PyArena* arena)
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00001173{
1174 int i;
1175 if (!PyLong_Check(obj)) {
Amaury Forgeot d'Arc5e8f8102011-11-22 21:52:30 +01001176 PyErr_Format(PyExc_ValueError, "invalid integer value: %R", obj);
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00001177 return 1;
1178 }
1179
Serhiy Storchaka56f6e762015-09-06 21:25:30 +03001180 i = _PyLong_AsInt(obj);
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00001181 if (i == -1 && PyErr_Occurred())
1182 return 1;
1183 *out = i;
1184 return 0;
1185}
1186
Victor Stinnerf8599272020-07-03 16:57:19 +02001187static int add_ast_fields(astmodulestate *state)
Benjamin Petersonce825f12008-10-24 23:11:02 +00001188{
Dino Viehlandac46eb42019-09-11 10:16:34 -07001189 PyObject *empty_tuple;
Benjamin Petersonce825f12008-10-24 23:11:02 +00001190 empty_tuple = PyTuple_New(0);
1191 if (!empty_tuple ||
Victor Stinnerf8599272020-07-03 16:57:19 +02001192 PyObject_SetAttrString(state->AST_type, "_fields", empty_tuple) < 0 ||
1193 PyObject_SetAttrString(state->AST_type, "_attributes", empty_tuple) < 0) {
Benjamin Petersonce825f12008-10-24 23:11:02 +00001194 Py_XDECREF(empty_tuple);
1195 return -1;
1196 }
1197 Py_DECREF(empty_tuple);
1198 return 0;
1199}
1200
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00001201
Victor Stinnerd2bea262020-08-10 15:55:54 +02001202static int init_types(astmodulestate *state)
Martin v. Löwisbd260da2006-02-26 19:42:26 +00001203{
Dino Viehlandac46eb42019-09-11 10:16:34 -07001204 if (state->initialized) return 1;
Victor Stinnerf8599272020-07-03 16:57:19 +02001205 if (init_identifiers(state) < 0) return 0;
Dino Viehlandac46eb42019-09-11 10:16:34 -07001206 state->AST_type = PyType_FromSpec(&AST_type_spec);
1207 if (!state->AST_type) return 0;
Victor Stinnerf8599272020-07-03 16:57:19 +02001208 if (add_ast_fields(state) < 0) return 0;
1209 state->mod_type = make_type(state, "mod", state->AST_type, NULL, 0,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001210 "mod = Module(stmt* body, type_ignore* type_ignores)\n"
1211 " | Interactive(stmt* body)\n"
1212 " | Expression(expr body)\n"
1213 " | FunctionType(expr* argtypes, expr returns)");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001214 if (!state->mod_type) return 0;
Victor Stinnerf8599272020-07-03 16:57:19 +02001215 if (!add_attributes(state, state->mod_type, NULL, 0)) return 0;
1216 state->Module_type = make_type(state, "Module", state->mod_type,
1217 Module_fields, 2,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001218 "Module(stmt* body, type_ignore* type_ignores)");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001219 if (!state->Module_type) return 0;
Victor Stinnerf8599272020-07-03 16:57:19 +02001220 state->Interactive_type = make_type(state, "Interactive", state->mod_type,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001221 Interactive_fields, 1,
1222 "Interactive(stmt* body)");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001223 if (!state->Interactive_type) return 0;
Victor Stinnerf8599272020-07-03 16:57:19 +02001224 state->Expression_type = make_type(state, "Expression", state->mod_type,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001225 Expression_fields, 1,
1226 "Expression(expr body)");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001227 if (!state->Expression_type) return 0;
Victor Stinnerf8599272020-07-03 16:57:19 +02001228 state->FunctionType_type = make_type(state, "FunctionType",
1229 state->mod_type, FunctionType_fields,
1230 2,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001231 "FunctionType(expr* argtypes, expr returns)");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001232 if (!state->FunctionType_type) return 0;
Victor Stinnerf8599272020-07-03 16:57:19 +02001233 state->stmt_type = make_type(state, "stmt", state->AST_type, NULL, 0,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001234 "stmt = FunctionDef(identifier name, arguments args, stmt* body, expr* decorator_list, expr? returns, string? type_comment)\n"
1235 " | AsyncFunctionDef(identifier name, arguments args, stmt* body, expr* decorator_list, expr? returns, string? type_comment)\n"
1236 " | ClassDef(identifier name, expr* bases, keyword* keywords, stmt* body, expr* decorator_list)\n"
1237 " | Return(expr? value)\n"
1238 " | Delete(expr* targets)\n"
1239 " | Assign(expr* targets, expr value, string? type_comment)\n"
1240 " | AugAssign(expr target, operator op, expr value)\n"
1241 " | AnnAssign(expr target, expr annotation, expr? value, int simple)\n"
1242 " | For(expr target, expr iter, stmt* body, stmt* orelse, string? type_comment)\n"
1243 " | AsyncFor(expr target, expr iter, stmt* body, stmt* orelse, string? type_comment)\n"
1244 " | While(expr test, stmt* body, stmt* orelse)\n"
1245 " | If(expr test, stmt* body, stmt* orelse)\n"
1246 " | With(withitem* items, stmt* body, string? type_comment)\n"
1247 " | AsyncWith(withitem* items, stmt* body, string? type_comment)\n"
1248 " | Raise(expr? exc, expr? cause)\n"
1249 " | Try(stmt* body, excepthandler* handlers, stmt* orelse, stmt* finalbody)\n"
1250 " | Assert(expr test, expr? msg)\n"
1251 " | Import(alias* names)\n"
1252 " | ImportFrom(identifier? module, alias* names, int? level)\n"
1253 " | Global(identifier* names)\n"
1254 " | Nonlocal(identifier* names)\n"
1255 " | Expr(expr value)\n"
1256 " | Pass\n"
1257 " | Break\n"
1258 " | Continue");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001259 if (!state->stmt_type) return 0;
Victor Stinnerf8599272020-07-03 16:57:19 +02001260 if (!add_attributes(state, state->stmt_type, stmt_attributes, 4)) return 0;
Serhiy Storchakab7e95252020-03-10 00:07:47 +02001261 if (PyObject_SetAttr(state->stmt_type, state->end_lineno, Py_None) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02001262 return 0;
Serhiy Storchakab7e95252020-03-10 00:07:47 +02001263 if (PyObject_SetAttr(state->stmt_type, state->end_col_offset, Py_None) ==
1264 -1)
1265 return 0;
Victor Stinnerf8599272020-07-03 16:57:19 +02001266 state->FunctionDef_type = make_type(state, "FunctionDef", state->stmt_type,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001267 FunctionDef_fields, 6,
1268 "FunctionDef(identifier name, arguments args, stmt* body, expr* decorator_list, expr? returns, string? type_comment)");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001269 if (!state->FunctionDef_type) return 0;
Serhiy Storchakab7e95252020-03-10 00:07:47 +02001270 if (PyObject_SetAttr(state->FunctionDef_type, state->returns, Py_None) ==
1271 -1)
1272 return 0;
1273 if (PyObject_SetAttr(state->FunctionDef_type, state->type_comment, Py_None)
1274 == -1)
1275 return 0;
Victor Stinnerf8599272020-07-03 16:57:19 +02001276 state->AsyncFunctionDef_type = make_type(state, "AsyncFunctionDef",
Dino Viehlandac46eb42019-09-11 10:16:34 -07001277 state->stmt_type,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001278 AsyncFunctionDef_fields, 6,
1279 "AsyncFunctionDef(identifier name, arguments args, stmt* body, expr* decorator_list, expr? returns, string? type_comment)");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001280 if (!state->AsyncFunctionDef_type) return 0;
Serhiy Storchakab7e95252020-03-10 00:07:47 +02001281 if (PyObject_SetAttr(state->AsyncFunctionDef_type, state->returns, Py_None)
1282 == -1)
1283 return 0;
1284 if (PyObject_SetAttr(state->AsyncFunctionDef_type, state->type_comment,
1285 Py_None) == -1)
1286 return 0;
Victor Stinnerf8599272020-07-03 16:57:19 +02001287 state->ClassDef_type = make_type(state, "ClassDef", state->stmt_type,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001288 ClassDef_fields, 5,
1289 "ClassDef(identifier name, expr* bases, keyword* keywords, stmt* body, expr* decorator_list)");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001290 if (!state->ClassDef_type) return 0;
Victor Stinnerf8599272020-07-03 16:57:19 +02001291 state->Return_type = make_type(state, "Return", state->stmt_type,
1292 Return_fields, 1,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001293 "Return(expr? value)");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001294 if (!state->Return_type) return 0;
Serhiy Storchakab7e95252020-03-10 00:07:47 +02001295 if (PyObject_SetAttr(state->Return_type, state->value, Py_None) == -1)
1296 return 0;
Victor Stinnerf8599272020-07-03 16:57:19 +02001297 state->Delete_type = make_type(state, "Delete", state->stmt_type,
1298 Delete_fields, 1,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001299 "Delete(expr* targets)");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001300 if (!state->Delete_type) return 0;
Victor Stinnerf8599272020-07-03 16:57:19 +02001301 state->Assign_type = make_type(state, "Assign", state->stmt_type,
1302 Assign_fields, 3,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001303 "Assign(expr* targets, expr value, string? type_comment)");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001304 if (!state->Assign_type) return 0;
Serhiy Storchakab7e95252020-03-10 00:07:47 +02001305 if (PyObject_SetAttr(state->Assign_type, state->type_comment, Py_None) ==
1306 -1)
1307 return 0;
Victor Stinnerf8599272020-07-03 16:57:19 +02001308 state->AugAssign_type = make_type(state, "AugAssign", state->stmt_type,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001309 AugAssign_fields, 3,
1310 "AugAssign(expr target, operator op, expr value)");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001311 if (!state->AugAssign_type) return 0;
Victor Stinnerf8599272020-07-03 16:57:19 +02001312 state->AnnAssign_type = make_type(state, "AnnAssign", state->stmt_type,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001313 AnnAssign_fields, 4,
1314 "AnnAssign(expr target, expr annotation, expr? value, int simple)");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001315 if (!state->AnnAssign_type) return 0;
Serhiy Storchakab7e95252020-03-10 00:07:47 +02001316 if (PyObject_SetAttr(state->AnnAssign_type, state->value, Py_None) == -1)
1317 return 0;
Victor Stinnerf8599272020-07-03 16:57:19 +02001318 state->For_type = make_type(state, "For", state->stmt_type, For_fields, 5,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001319 "For(expr target, expr iter, stmt* body, stmt* orelse, string? type_comment)");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001320 if (!state->For_type) return 0;
Serhiy Storchakab7e95252020-03-10 00:07:47 +02001321 if (PyObject_SetAttr(state->For_type, state->type_comment, Py_None) == -1)
1322 return 0;
Victor Stinnerf8599272020-07-03 16:57:19 +02001323 state->AsyncFor_type = make_type(state, "AsyncFor", state->stmt_type,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001324 AsyncFor_fields, 5,
1325 "AsyncFor(expr target, expr iter, stmt* body, stmt* orelse, string? type_comment)");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001326 if (!state->AsyncFor_type) return 0;
Serhiy Storchakab7e95252020-03-10 00:07:47 +02001327 if (PyObject_SetAttr(state->AsyncFor_type, state->type_comment, Py_None) ==
1328 -1)
1329 return 0;
Victor Stinnerf8599272020-07-03 16:57:19 +02001330 state->While_type = make_type(state, "While", state->stmt_type,
1331 While_fields, 3,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001332 "While(expr test, stmt* body, stmt* orelse)");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001333 if (!state->While_type) return 0;
Victor Stinnerf8599272020-07-03 16:57:19 +02001334 state->If_type = make_type(state, "If", state->stmt_type, If_fields, 3,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001335 "If(expr test, stmt* body, stmt* orelse)");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001336 if (!state->If_type) return 0;
Victor Stinnerf8599272020-07-03 16:57:19 +02001337 state->With_type = make_type(state, "With", state->stmt_type, With_fields,
1338 3,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001339 "With(withitem* items, stmt* body, string? type_comment)");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001340 if (!state->With_type) return 0;
Serhiy Storchakab7e95252020-03-10 00:07:47 +02001341 if (PyObject_SetAttr(state->With_type, state->type_comment, Py_None) == -1)
1342 return 0;
Victor Stinnerf8599272020-07-03 16:57:19 +02001343 state->AsyncWith_type = make_type(state, "AsyncWith", state->stmt_type,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001344 AsyncWith_fields, 3,
1345 "AsyncWith(withitem* items, stmt* body, string? type_comment)");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001346 if (!state->AsyncWith_type) return 0;
Serhiy Storchakab7e95252020-03-10 00:07:47 +02001347 if (PyObject_SetAttr(state->AsyncWith_type, state->type_comment, Py_None)
1348 == -1)
1349 return 0;
Victor Stinnerf8599272020-07-03 16:57:19 +02001350 state->Raise_type = make_type(state, "Raise", state->stmt_type,
1351 Raise_fields, 2,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001352 "Raise(expr? exc, expr? cause)");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001353 if (!state->Raise_type) return 0;
Serhiy Storchakab7e95252020-03-10 00:07:47 +02001354 if (PyObject_SetAttr(state->Raise_type, state->exc, Py_None) == -1)
1355 return 0;
1356 if (PyObject_SetAttr(state->Raise_type, state->cause, Py_None) == -1)
1357 return 0;
Victor Stinnerf8599272020-07-03 16:57:19 +02001358 state->Try_type = make_type(state, "Try", state->stmt_type, Try_fields, 4,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001359 "Try(stmt* body, excepthandler* handlers, stmt* orelse, stmt* finalbody)");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001360 if (!state->Try_type) return 0;
Victor Stinnerf8599272020-07-03 16:57:19 +02001361 state->Assert_type = make_type(state, "Assert", state->stmt_type,
1362 Assert_fields, 2,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001363 "Assert(expr test, expr? msg)");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001364 if (!state->Assert_type) return 0;
Serhiy Storchakab7e95252020-03-10 00:07:47 +02001365 if (PyObject_SetAttr(state->Assert_type, state->msg, Py_None) == -1)
1366 return 0;
Victor Stinnerf8599272020-07-03 16:57:19 +02001367 state->Import_type = make_type(state, "Import", state->stmt_type,
1368 Import_fields, 1,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001369 "Import(alias* names)");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001370 if (!state->Import_type) return 0;
Victor Stinnerf8599272020-07-03 16:57:19 +02001371 state->ImportFrom_type = make_type(state, "ImportFrom", state->stmt_type,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001372 ImportFrom_fields, 3,
1373 "ImportFrom(identifier? module, alias* names, int? level)");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001374 if (!state->ImportFrom_type) return 0;
Serhiy Storchakab7e95252020-03-10 00:07:47 +02001375 if (PyObject_SetAttr(state->ImportFrom_type, state->module, Py_None) == -1)
1376 return 0;
1377 if (PyObject_SetAttr(state->ImportFrom_type, state->level, Py_None) == -1)
1378 return 0;
Victor Stinnerf8599272020-07-03 16:57:19 +02001379 state->Global_type = make_type(state, "Global", state->stmt_type,
1380 Global_fields, 1,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001381 "Global(identifier* names)");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001382 if (!state->Global_type) return 0;
Victor Stinnerf8599272020-07-03 16:57:19 +02001383 state->Nonlocal_type = make_type(state, "Nonlocal", state->stmt_type,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001384 Nonlocal_fields, 1,
1385 "Nonlocal(identifier* names)");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001386 if (!state->Nonlocal_type) return 0;
Victor Stinnerf8599272020-07-03 16:57:19 +02001387 state->Expr_type = make_type(state, "Expr", state->stmt_type, Expr_fields,
1388 1,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001389 "Expr(expr value)");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001390 if (!state->Expr_type) return 0;
Victor Stinnerf8599272020-07-03 16:57:19 +02001391 state->Pass_type = make_type(state, "Pass", state->stmt_type, NULL, 0,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001392 "Pass");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001393 if (!state->Pass_type) return 0;
Victor Stinnerf8599272020-07-03 16:57:19 +02001394 state->Break_type = make_type(state, "Break", state->stmt_type, NULL, 0,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001395 "Break");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001396 if (!state->Break_type) return 0;
Victor Stinnerf8599272020-07-03 16:57:19 +02001397 state->Continue_type = make_type(state, "Continue", state->stmt_type, NULL,
1398 0,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001399 "Continue");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001400 if (!state->Continue_type) return 0;
Victor Stinnerf8599272020-07-03 16:57:19 +02001401 state->expr_type = make_type(state, "expr", state->AST_type, NULL, 0,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001402 "expr = BoolOp(boolop op, expr* values)\n"
1403 " | NamedExpr(expr target, expr value)\n"
1404 " | BinOp(expr left, operator op, expr right)\n"
1405 " | UnaryOp(unaryop op, expr operand)\n"
1406 " | Lambda(arguments args, expr body)\n"
1407 " | IfExp(expr test, expr body, expr orelse)\n"
1408 " | Dict(expr* keys, expr* values)\n"
1409 " | Set(expr* elts)\n"
1410 " | ListComp(expr elt, comprehension* generators)\n"
1411 " | SetComp(expr elt, comprehension* generators)\n"
1412 " | DictComp(expr key, expr value, comprehension* generators)\n"
1413 " | GeneratorExp(expr elt, comprehension* generators)\n"
1414 " | Await(expr value)\n"
1415 " | Yield(expr? value)\n"
1416 " | YieldFrom(expr value)\n"
1417 " | Compare(expr left, cmpop* ops, expr* comparators)\n"
1418 " | Call(expr func, expr* args, keyword* keywords)\n"
1419 " | FormattedValue(expr value, int? conversion, expr? format_spec)\n"
1420 " | JoinedStr(expr* values)\n"
1421 " | Constant(constant value, string? kind)\n"
1422 " | Attribute(expr value, identifier attr, expr_context ctx)\n"
1423 " | Subscript(expr value, expr slice, expr_context ctx)\n"
1424 " | Starred(expr value, expr_context ctx)\n"
1425 " | Name(identifier id, expr_context ctx)\n"
1426 " | List(expr* elts, expr_context ctx)\n"
1427 " | Tuple(expr* elts, expr_context ctx)\n"
1428 " | Slice(expr? lower, expr? upper, expr? step)");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001429 if (!state->expr_type) return 0;
Victor Stinnerf8599272020-07-03 16:57:19 +02001430 if (!add_attributes(state, state->expr_type, expr_attributes, 4)) return 0;
Serhiy Storchakab7e95252020-03-10 00:07:47 +02001431 if (PyObject_SetAttr(state->expr_type, state->end_lineno, Py_None) == -1)
1432 return 0;
1433 if (PyObject_SetAttr(state->expr_type, state->end_col_offset, Py_None) ==
1434 -1)
1435 return 0;
Victor Stinnerf8599272020-07-03 16:57:19 +02001436 state->BoolOp_type = make_type(state, "BoolOp", state->expr_type,
1437 BoolOp_fields, 2,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001438 "BoolOp(boolop op, expr* values)");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001439 if (!state->BoolOp_type) return 0;
Victor Stinnerf8599272020-07-03 16:57:19 +02001440 state->NamedExpr_type = make_type(state, "NamedExpr", state->expr_type,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001441 NamedExpr_fields, 2,
1442 "NamedExpr(expr target, expr value)");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001443 if (!state->NamedExpr_type) return 0;
Victor Stinnerf8599272020-07-03 16:57:19 +02001444 state->BinOp_type = make_type(state, "BinOp", state->expr_type,
1445 BinOp_fields, 3,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001446 "BinOp(expr left, operator op, expr right)");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001447 if (!state->BinOp_type) return 0;
Victor Stinnerf8599272020-07-03 16:57:19 +02001448 state->UnaryOp_type = make_type(state, "UnaryOp", state->expr_type,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001449 UnaryOp_fields, 2,
1450 "UnaryOp(unaryop op, expr operand)");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001451 if (!state->UnaryOp_type) return 0;
Victor Stinnerf8599272020-07-03 16:57:19 +02001452 state->Lambda_type = make_type(state, "Lambda", state->expr_type,
1453 Lambda_fields, 2,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001454 "Lambda(arguments args, expr body)");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001455 if (!state->Lambda_type) return 0;
Victor Stinnerf8599272020-07-03 16:57:19 +02001456 state->IfExp_type = make_type(state, "IfExp", state->expr_type,
1457 IfExp_fields, 3,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001458 "IfExp(expr test, expr body, expr orelse)");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001459 if (!state->IfExp_type) return 0;
Victor Stinnerf8599272020-07-03 16:57:19 +02001460 state->Dict_type = make_type(state, "Dict", state->expr_type, Dict_fields,
1461 2,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001462 "Dict(expr* keys, expr* values)");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001463 if (!state->Dict_type) return 0;
Victor Stinnerf8599272020-07-03 16:57:19 +02001464 state->Set_type = make_type(state, "Set", state->expr_type, Set_fields, 1,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001465 "Set(expr* elts)");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001466 if (!state->Set_type) return 0;
Victor Stinnerf8599272020-07-03 16:57:19 +02001467 state->ListComp_type = make_type(state, "ListComp", state->expr_type,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001468 ListComp_fields, 2,
1469 "ListComp(expr elt, comprehension* generators)");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001470 if (!state->ListComp_type) return 0;
Victor Stinnerf8599272020-07-03 16:57:19 +02001471 state->SetComp_type = make_type(state, "SetComp", state->expr_type,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001472 SetComp_fields, 2,
1473 "SetComp(expr elt, comprehension* generators)");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001474 if (!state->SetComp_type) return 0;
Victor Stinnerf8599272020-07-03 16:57:19 +02001475 state->DictComp_type = make_type(state, "DictComp", state->expr_type,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001476 DictComp_fields, 3,
1477 "DictComp(expr key, expr value, comprehension* generators)");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001478 if (!state->DictComp_type) return 0;
Victor Stinnerf8599272020-07-03 16:57:19 +02001479 state->GeneratorExp_type = make_type(state, "GeneratorExp",
1480 state->expr_type, GeneratorExp_fields,
1481 2,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001482 "GeneratorExp(expr elt, comprehension* generators)");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001483 if (!state->GeneratorExp_type) return 0;
Victor Stinnerf8599272020-07-03 16:57:19 +02001484 state->Await_type = make_type(state, "Await", state->expr_type,
1485 Await_fields, 1,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001486 "Await(expr value)");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001487 if (!state->Await_type) return 0;
Victor Stinnerf8599272020-07-03 16:57:19 +02001488 state->Yield_type = make_type(state, "Yield", state->expr_type,
1489 Yield_fields, 1,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001490 "Yield(expr? value)");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001491 if (!state->Yield_type) return 0;
Serhiy Storchakab7e95252020-03-10 00:07:47 +02001492 if (PyObject_SetAttr(state->Yield_type, state->value, Py_None) == -1)
1493 return 0;
Victor Stinnerf8599272020-07-03 16:57:19 +02001494 state->YieldFrom_type = make_type(state, "YieldFrom", state->expr_type,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001495 YieldFrom_fields, 1,
1496 "YieldFrom(expr value)");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001497 if (!state->YieldFrom_type) return 0;
Victor Stinnerf8599272020-07-03 16:57:19 +02001498 state->Compare_type = make_type(state, "Compare", state->expr_type,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001499 Compare_fields, 3,
1500 "Compare(expr left, cmpop* ops, expr* comparators)");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001501 if (!state->Compare_type) return 0;
Victor Stinnerf8599272020-07-03 16:57:19 +02001502 state->Call_type = make_type(state, "Call", state->expr_type, Call_fields,
1503 3,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001504 "Call(expr func, expr* args, keyword* keywords)");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001505 if (!state->Call_type) return 0;
Victor Stinnerf8599272020-07-03 16:57:19 +02001506 state->FormattedValue_type = make_type(state, "FormattedValue",
1507 state->expr_type,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001508 FormattedValue_fields, 3,
1509 "FormattedValue(expr value, int? conversion, expr? format_spec)");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001510 if (!state->FormattedValue_type) return 0;
Serhiy Storchakab7e95252020-03-10 00:07:47 +02001511 if (PyObject_SetAttr(state->FormattedValue_type, state->conversion,
1512 Py_None) == -1)
1513 return 0;
1514 if (PyObject_SetAttr(state->FormattedValue_type, state->format_spec,
1515 Py_None) == -1)
1516 return 0;
Victor Stinnerf8599272020-07-03 16:57:19 +02001517 state->JoinedStr_type = make_type(state, "JoinedStr", state->expr_type,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001518 JoinedStr_fields, 1,
1519 "JoinedStr(expr* values)");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001520 if (!state->JoinedStr_type) return 0;
Victor Stinnerf8599272020-07-03 16:57:19 +02001521 state->Constant_type = make_type(state, "Constant", state->expr_type,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001522 Constant_fields, 2,
1523 "Constant(constant value, string? kind)");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001524 if (!state->Constant_type) return 0;
Serhiy Storchakab7e95252020-03-10 00:07:47 +02001525 if (PyObject_SetAttr(state->Constant_type, state->kind, Py_None) == -1)
1526 return 0;
Victor Stinnerf8599272020-07-03 16:57:19 +02001527 state->Attribute_type = make_type(state, "Attribute", state->expr_type,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001528 Attribute_fields, 3,
1529 "Attribute(expr value, identifier attr, expr_context ctx)");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001530 if (!state->Attribute_type) return 0;
Victor Stinnerf8599272020-07-03 16:57:19 +02001531 state->Subscript_type = make_type(state, "Subscript", state->expr_type,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001532 Subscript_fields, 3,
1533 "Subscript(expr value, expr slice, expr_context ctx)");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001534 if (!state->Subscript_type) return 0;
Victor Stinnerf8599272020-07-03 16:57:19 +02001535 state->Starred_type = make_type(state, "Starred", state->expr_type,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001536 Starred_fields, 2,
1537 "Starred(expr value, expr_context ctx)");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001538 if (!state->Starred_type) return 0;
Victor Stinnerf8599272020-07-03 16:57:19 +02001539 state->Name_type = make_type(state, "Name", state->expr_type, Name_fields,
1540 2,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001541 "Name(identifier id, expr_context ctx)");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001542 if (!state->Name_type) return 0;
Victor Stinnerf8599272020-07-03 16:57:19 +02001543 state->List_type = make_type(state, "List", state->expr_type, List_fields,
1544 2,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001545 "List(expr* elts, expr_context ctx)");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001546 if (!state->List_type) return 0;
Victor Stinnerf8599272020-07-03 16:57:19 +02001547 state->Tuple_type = make_type(state, "Tuple", state->expr_type,
1548 Tuple_fields, 2,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001549 "Tuple(expr* elts, expr_context ctx)");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001550 if (!state->Tuple_type) return 0;
Victor Stinnerf8599272020-07-03 16:57:19 +02001551 state->Slice_type = make_type(state, "Slice", state->expr_type,
1552 Slice_fields, 3,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001553 "Slice(expr? lower, expr? upper, expr? step)");
Serhiy Storchaka13d52c22020-03-10 18:52:34 +02001554 if (!state->Slice_type) return 0;
1555 if (PyObject_SetAttr(state->Slice_type, state->lower, Py_None) == -1)
1556 return 0;
1557 if (PyObject_SetAttr(state->Slice_type, state->upper, Py_None) == -1)
1558 return 0;
1559 if (PyObject_SetAttr(state->Slice_type, state->step, Py_None) == -1)
1560 return 0;
Victor Stinnerf8599272020-07-03 16:57:19 +02001561 state->expr_context_type = make_type(state, "expr_context",
1562 state->AST_type, NULL, 0,
Serhiy Storchaka6b975982020-03-17 23:41:08 +02001563 "expr_context = Load | Store | Del");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001564 if (!state->expr_context_type) return 0;
Victor Stinnerf8599272020-07-03 16:57:19 +02001565 if (!add_attributes(state, state->expr_context_type, NULL, 0)) return 0;
1566 state->Load_type = make_type(state, "Load", state->expr_context_type, NULL,
1567 0,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001568 "Load");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001569 if (!state->Load_type) return 0;
1570 state->Load_singleton = PyType_GenericNew((PyTypeObject *)state->Load_type,
1571 NULL, NULL);
1572 if (!state->Load_singleton) return 0;
Victor Stinnerf8599272020-07-03 16:57:19 +02001573 state->Store_type = make_type(state, "Store", state->expr_context_type,
1574 NULL, 0,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001575 "Store");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001576 if (!state->Store_type) return 0;
1577 state->Store_singleton = PyType_GenericNew((PyTypeObject
1578 *)state->Store_type, NULL, NULL);
1579 if (!state->Store_singleton) return 0;
Victor Stinnerf8599272020-07-03 16:57:19 +02001580 state->Del_type = make_type(state, "Del", state->expr_context_type, NULL, 0,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001581 "Del");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001582 if (!state->Del_type) return 0;
1583 state->Del_singleton = PyType_GenericNew((PyTypeObject *)state->Del_type,
1584 NULL, NULL);
1585 if (!state->Del_singleton) return 0;
Victor Stinnerf8599272020-07-03 16:57:19 +02001586 state->boolop_type = make_type(state, "boolop", state->AST_type, NULL, 0,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001587 "boolop = And | Or");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001588 if (!state->boolop_type) return 0;
Victor Stinnerf8599272020-07-03 16:57:19 +02001589 if (!add_attributes(state, state->boolop_type, NULL, 0)) return 0;
1590 state->And_type = make_type(state, "And", state->boolop_type, NULL, 0,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001591 "And");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001592 if (!state->And_type) return 0;
1593 state->And_singleton = PyType_GenericNew((PyTypeObject *)state->And_type,
1594 NULL, NULL);
1595 if (!state->And_singleton) return 0;
Victor Stinnerf8599272020-07-03 16:57:19 +02001596 state->Or_type = make_type(state, "Or", state->boolop_type, NULL, 0,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001597 "Or");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001598 if (!state->Or_type) return 0;
1599 state->Or_singleton = PyType_GenericNew((PyTypeObject *)state->Or_type,
1600 NULL, NULL);
1601 if (!state->Or_singleton) return 0;
Victor Stinnerf8599272020-07-03 16:57:19 +02001602 state->operator_type = make_type(state, "operator", state->AST_type, NULL,
1603 0,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001604 "operator = Add | Sub | Mult | MatMult | Div | Mod | Pow | LShift | RShift | BitOr | BitXor | BitAnd | FloorDiv");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001605 if (!state->operator_type) return 0;
Victor Stinnerf8599272020-07-03 16:57:19 +02001606 if (!add_attributes(state, state->operator_type, NULL, 0)) return 0;
1607 state->Add_type = make_type(state, "Add", state->operator_type, NULL, 0,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001608 "Add");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001609 if (!state->Add_type) return 0;
1610 state->Add_singleton = PyType_GenericNew((PyTypeObject *)state->Add_type,
1611 NULL, NULL);
1612 if (!state->Add_singleton) return 0;
Victor Stinnerf8599272020-07-03 16:57:19 +02001613 state->Sub_type = make_type(state, "Sub", state->operator_type, NULL, 0,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001614 "Sub");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001615 if (!state->Sub_type) return 0;
1616 state->Sub_singleton = PyType_GenericNew((PyTypeObject *)state->Sub_type,
1617 NULL, NULL);
1618 if (!state->Sub_singleton) return 0;
Victor Stinnerf8599272020-07-03 16:57:19 +02001619 state->Mult_type = make_type(state, "Mult", state->operator_type, NULL, 0,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001620 "Mult");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001621 if (!state->Mult_type) return 0;
1622 state->Mult_singleton = PyType_GenericNew((PyTypeObject *)state->Mult_type,
1623 NULL, NULL);
1624 if (!state->Mult_singleton) return 0;
Victor Stinnerf8599272020-07-03 16:57:19 +02001625 state->MatMult_type = make_type(state, "MatMult", state->operator_type,
1626 NULL, 0,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001627 "MatMult");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001628 if (!state->MatMult_type) return 0;
1629 state->MatMult_singleton = PyType_GenericNew((PyTypeObject
1630 *)state->MatMult_type, NULL,
1631 NULL);
1632 if (!state->MatMult_singleton) return 0;
Victor Stinnerf8599272020-07-03 16:57:19 +02001633 state->Div_type = make_type(state, "Div", state->operator_type, NULL, 0,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001634 "Div");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001635 if (!state->Div_type) return 0;
1636 state->Div_singleton = PyType_GenericNew((PyTypeObject *)state->Div_type,
1637 NULL, NULL);
1638 if (!state->Div_singleton) return 0;
Victor Stinnerf8599272020-07-03 16:57:19 +02001639 state->Mod_type = make_type(state, "Mod", state->operator_type, NULL, 0,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001640 "Mod");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001641 if (!state->Mod_type) return 0;
1642 state->Mod_singleton = PyType_GenericNew((PyTypeObject *)state->Mod_type,
1643 NULL, NULL);
1644 if (!state->Mod_singleton) return 0;
Victor Stinnerf8599272020-07-03 16:57:19 +02001645 state->Pow_type = make_type(state, "Pow", state->operator_type, NULL, 0,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001646 "Pow");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001647 if (!state->Pow_type) return 0;
1648 state->Pow_singleton = PyType_GenericNew((PyTypeObject *)state->Pow_type,
1649 NULL, NULL);
1650 if (!state->Pow_singleton) return 0;
Victor Stinnerf8599272020-07-03 16:57:19 +02001651 state->LShift_type = make_type(state, "LShift", state->operator_type, NULL,
1652 0,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001653 "LShift");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001654 if (!state->LShift_type) return 0;
1655 state->LShift_singleton = PyType_GenericNew((PyTypeObject
1656 *)state->LShift_type, NULL,
1657 NULL);
1658 if (!state->LShift_singleton) return 0;
Victor Stinnerf8599272020-07-03 16:57:19 +02001659 state->RShift_type = make_type(state, "RShift", state->operator_type, NULL,
1660 0,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001661 "RShift");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001662 if (!state->RShift_type) return 0;
1663 state->RShift_singleton = PyType_GenericNew((PyTypeObject
1664 *)state->RShift_type, NULL,
1665 NULL);
1666 if (!state->RShift_singleton) return 0;
Victor Stinnerf8599272020-07-03 16:57:19 +02001667 state->BitOr_type = make_type(state, "BitOr", state->operator_type, NULL, 0,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001668 "BitOr");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001669 if (!state->BitOr_type) return 0;
1670 state->BitOr_singleton = PyType_GenericNew((PyTypeObject
1671 *)state->BitOr_type, NULL, NULL);
1672 if (!state->BitOr_singleton) return 0;
Victor Stinnerf8599272020-07-03 16:57:19 +02001673 state->BitXor_type = make_type(state, "BitXor", state->operator_type, NULL,
1674 0,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001675 "BitXor");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001676 if (!state->BitXor_type) return 0;
1677 state->BitXor_singleton = PyType_GenericNew((PyTypeObject
1678 *)state->BitXor_type, NULL,
1679 NULL);
1680 if (!state->BitXor_singleton) return 0;
Victor Stinnerf8599272020-07-03 16:57:19 +02001681 state->BitAnd_type = make_type(state, "BitAnd", state->operator_type, NULL,
1682 0,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001683 "BitAnd");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001684 if (!state->BitAnd_type) return 0;
1685 state->BitAnd_singleton = PyType_GenericNew((PyTypeObject
1686 *)state->BitAnd_type, NULL,
1687 NULL);
1688 if (!state->BitAnd_singleton) return 0;
Victor Stinnerf8599272020-07-03 16:57:19 +02001689 state->FloorDiv_type = make_type(state, "FloorDiv", state->operator_type,
1690 NULL, 0,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001691 "FloorDiv");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001692 if (!state->FloorDiv_type) return 0;
1693 state->FloorDiv_singleton = PyType_GenericNew((PyTypeObject
1694 *)state->FloorDiv_type, NULL,
1695 NULL);
1696 if (!state->FloorDiv_singleton) return 0;
Victor Stinnerf8599272020-07-03 16:57:19 +02001697 state->unaryop_type = make_type(state, "unaryop", state->AST_type, NULL, 0,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001698 "unaryop = Invert | Not | UAdd | USub");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001699 if (!state->unaryop_type) return 0;
Victor Stinnerf8599272020-07-03 16:57:19 +02001700 if (!add_attributes(state, state->unaryop_type, NULL, 0)) return 0;
1701 state->Invert_type = make_type(state, "Invert", state->unaryop_type, NULL,
1702 0,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001703 "Invert");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001704 if (!state->Invert_type) return 0;
1705 state->Invert_singleton = PyType_GenericNew((PyTypeObject
1706 *)state->Invert_type, NULL,
1707 NULL);
1708 if (!state->Invert_singleton) return 0;
Victor Stinnerf8599272020-07-03 16:57:19 +02001709 state->Not_type = make_type(state, "Not", state->unaryop_type, NULL, 0,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001710 "Not");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001711 if (!state->Not_type) return 0;
1712 state->Not_singleton = PyType_GenericNew((PyTypeObject *)state->Not_type,
1713 NULL, NULL);
1714 if (!state->Not_singleton) return 0;
Victor Stinnerf8599272020-07-03 16:57:19 +02001715 state->UAdd_type = make_type(state, "UAdd", state->unaryop_type, NULL, 0,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001716 "UAdd");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001717 if (!state->UAdd_type) return 0;
1718 state->UAdd_singleton = PyType_GenericNew((PyTypeObject *)state->UAdd_type,
1719 NULL, NULL);
1720 if (!state->UAdd_singleton) return 0;
Victor Stinnerf8599272020-07-03 16:57:19 +02001721 state->USub_type = make_type(state, "USub", state->unaryop_type, NULL, 0,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001722 "USub");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001723 if (!state->USub_type) return 0;
1724 state->USub_singleton = PyType_GenericNew((PyTypeObject *)state->USub_type,
1725 NULL, NULL);
1726 if (!state->USub_singleton) return 0;
Victor Stinnerf8599272020-07-03 16:57:19 +02001727 state->cmpop_type = make_type(state, "cmpop", state->AST_type, NULL, 0,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001728 "cmpop = Eq | NotEq | Lt | LtE | Gt | GtE | Is | IsNot | In | NotIn");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001729 if (!state->cmpop_type) return 0;
Victor Stinnerf8599272020-07-03 16:57:19 +02001730 if (!add_attributes(state, state->cmpop_type, NULL, 0)) return 0;
1731 state->Eq_type = make_type(state, "Eq", state->cmpop_type, NULL, 0,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001732 "Eq");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001733 if (!state->Eq_type) return 0;
1734 state->Eq_singleton = PyType_GenericNew((PyTypeObject *)state->Eq_type,
1735 NULL, NULL);
1736 if (!state->Eq_singleton) return 0;
Victor Stinnerf8599272020-07-03 16:57:19 +02001737 state->NotEq_type = make_type(state, "NotEq", state->cmpop_type, NULL, 0,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001738 "NotEq");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001739 if (!state->NotEq_type) return 0;
1740 state->NotEq_singleton = PyType_GenericNew((PyTypeObject
1741 *)state->NotEq_type, NULL, NULL);
1742 if (!state->NotEq_singleton) return 0;
Victor Stinnerf8599272020-07-03 16:57:19 +02001743 state->Lt_type = make_type(state, "Lt", state->cmpop_type, NULL, 0,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001744 "Lt");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001745 if (!state->Lt_type) return 0;
1746 state->Lt_singleton = PyType_GenericNew((PyTypeObject *)state->Lt_type,
1747 NULL, NULL);
1748 if (!state->Lt_singleton) return 0;
Victor Stinnerf8599272020-07-03 16:57:19 +02001749 state->LtE_type = make_type(state, "LtE", state->cmpop_type, NULL, 0,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001750 "LtE");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001751 if (!state->LtE_type) return 0;
1752 state->LtE_singleton = PyType_GenericNew((PyTypeObject *)state->LtE_type,
1753 NULL, NULL);
1754 if (!state->LtE_singleton) return 0;
Victor Stinnerf8599272020-07-03 16:57:19 +02001755 state->Gt_type = make_type(state, "Gt", state->cmpop_type, NULL, 0,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001756 "Gt");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001757 if (!state->Gt_type) return 0;
1758 state->Gt_singleton = PyType_GenericNew((PyTypeObject *)state->Gt_type,
1759 NULL, NULL);
1760 if (!state->Gt_singleton) return 0;
Victor Stinnerf8599272020-07-03 16:57:19 +02001761 state->GtE_type = make_type(state, "GtE", state->cmpop_type, NULL, 0,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001762 "GtE");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001763 if (!state->GtE_type) return 0;
1764 state->GtE_singleton = PyType_GenericNew((PyTypeObject *)state->GtE_type,
1765 NULL, NULL);
1766 if (!state->GtE_singleton) return 0;
Victor Stinnerf8599272020-07-03 16:57:19 +02001767 state->Is_type = make_type(state, "Is", state->cmpop_type, NULL, 0,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001768 "Is");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001769 if (!state->Is_type) return 0;
1770 state->Is_singleton = PyType_GenericNew((PyTypeObject *)state->Is_type,
1771 NULL, NULL);
1772 if (!state->Is_singleton) return 0;
Victor Stinnerf8599272020-07-03 16:57:19 +02001773 state->IsNot_type = make_type(state, "IsNot", state->cmpop_type, NULL, 0,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001774 "IsNot");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001775 if (!state->IsNot_type) return 0;
1776 state->IsNot_singleton = PyType_GenericNew((PyTypeObject
1777 *)state->IsNot_type, NULL, NULL);
1778 if (!state->IsNot_singleton) return 0;
Victor Stinnerf8599272020-07-03 16:57:19 +02001779 state->In_type = make_type(state, "In", state->cmpop_type, NULL, 0,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001780 "In");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001781 if (!state->In_type) return 0;
1782 state->In_singleton = PyType_GenericNew((PyTypeObject *)state->In_type,
1783 NULL, NULL);
1784 if (!state->In_singleton) return 0;
Victor Stinnerf8599272020-07-03 16:57:19 +02001785 state->NotIn_type = make_type(state, "NotIn", state->cmpop_type, NULL, 0,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001786 "NotIn");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001787 if (!state->NotIn_type) return 0;
1788 state->NotIn_singleton = PyType_GenericNew((PyTypeObject
1789 *)state->NotIn_type, NULL, NULL);
1790 if (!state->NotIn_singleton) return 0;
Victor Stinnerf8599272020-07-03 16:57:19 +02001791 state->comprehension_type = make_type(state, "comprehension",
1792 state->AST_type,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001793 comprehension_fields, 4,
1794 "comprehension(expr target, expr iter, expr* ifs, int is_async)");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001795 if (!state->comprehension_type) return 0;
Victor Stinnerf8599272020-07-03 16:57:19 +02001796 if (!add_attributes(state, state->comprehension_type, NULL, 0)) return 0;
1797 state->excepthandler_type = make_type(state, "excepthandler",
1798 state->AST_type, NULL, 0,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001799 "excepthandler = ExceptHandler(expr? type, identifier? name, stmt* body)");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001800 if (!state->excepthandler_type) return 0;
Victor Stinnerf8599272020-07-03 16:57:19 +02001801 if (!add_attributes(state, state->excepthandler_type,
1802 excepthandler_attributes, 4)) return 0;
Serhiy Storchakab7e95252020-03-10 00:07:47 +02001803 if (PyObject_SetAttr(state->excepthandler_type, state->end_lineno, Py_None)
1804 == -1)
1805 return 0;
1806 if (PyObject_SetAttr(state->excepthandler_type, state->end_col_offset,
1807 Py_None) == -1)
1808 return 0;
Victor Stinnerf8599272020-07-03 16:57:19 +02001809 state->ExceptHandler_type = make_type(state, "ExceptHandler",
Dino Viehlandac46eb42019-09-11 10:16:34 -07001810 state->excepthandler_type,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001811 ExceptHandler_fields, 3,
1812 "ExceptHandler(expr? type, identifier? name, stmt* body)");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001813 if (!state->ExceptHandler_type) return 0;
Serhiy Storchakab7e95252020-03-10 00:07:47 +02001814 if (PyObject_SetAttr(state->ExceptHandler_type, state->type, Py_None) == -1)
1815 return 0;
1816 if (PyObject_SetAttr(state->ExceptHandler_type, state->name, Py_None) == -1)
1817 return 0;
Victor Stinnerf8599272020-07-03 16:57:19 +02001818 state->arguments_type = make_type(state, "arguments", state->AST_type,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001819 arguments_fields, 7,
1820 "arguments(arg* posonlyargs, arg* args, arg? vararg, arg* kwonlyargs, expr* kw_defaults, arg? kwarg, expr* defaults)");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001821 if (!state->arguments_type) return 0;
Victor Stinnerf8599272020-07-03 16:57:19 +02001822 if (!add_attributes(state, state->arguments_type, NULL, 0)) return 0;
Serhiy Storchakab7e95252020-03-10 00:07:47 +02001823 if (PyObject_SetAttr(state->arguments_type, state->vararg, Py_None) == -1)
1824 return 0;
1825 if (PyObject_SetAttr(state->arguments_type, state->kwarg, Py_None) == -1)
1826 return 0;
Victor Stinnerf8599272020-07-03 16:57:19 +02001827 state->arg_type = make_type(state, "arg", state->AST_type, arg_fields, 3,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001828 "arg(identifier arg, expr? annotation, string? type_comment)");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001829 if (!state->arg_type) return 0;
Victor Stinnerf8599272020-07-03 16:57:19 +02001830 if (!add_attributes(state, state->arg_type, arg_attributes, 4)) return 0;
Serhiy Storchakab7e95252020-03-10 00:07:47 +02001831 if (PyObject_SetAttr(state->arg_type, state->annotation, Py_None) == -1)
1832 return 0;
1833 if (PyObject_SetAttr(state->arg_type, state->type_comment, Py_None) == -1)
1834 return 0;
1835 if (PyObject_SetAttr(state->arg_type, state->end_lineno, Py_None) == -1)
1836 return 0;
1837 if (PyObject_SetAttr(state->arg_type, state->end_col_offset, Py_None) == -1)
1838 return 0;
Victor Stinnerf8599272020-07-03 16:57:19 +02001839 state->keyword_type = make_type(state, "keyword", state->AST_type,
1840 keyword_fields, 2,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001841 "keyword(identifier? arg, expr value)");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001842 if (!state->keyword_type) return 0;
Victor Stinnerf8599272020-07-03 16:57:19 +02001843 if (!add_attributes(state, state->keyword_type, keyword_attributes, 4))
1844 return 0;
Serhiy Storchakab7e95252020-03-10 00:07:47 +02001845 if (PyObject_SetAttr(state->keyword_type, state->arg, Py_None) == -1)
1846 return 0;
Pablo Galindo168660b2020-04-02 00:47:39 +01001847 if (PyObject_SetAttr(state->keyword_type, state->end_lineno, Py_None) == -1)
1848 return 0;
1849 if (PyObject_SetAttr(state->keyword_type, state->end_col_offset, Py_None)
1850 == -1)
1851 return 0;
Victor Stinnerf8599272020-07-03 16:57:19 +02001852 state->alias_type = make_type(state, "alias", state->AST_type,
1853 alias_fields, 2,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001854 "alias(identifier name, identifier? asname)");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001855 if (!state->alias_type) return 0;
Victor Stinnerf8599272020-07-03 16:57:19 +02001856 if (!add_attributes(state, state->alias_type, NULL, 0)) return 0;
Serhiy Storchakab7e95252020-03-10 00:07:47 +02001857 if (PyObject_SetAttr(state->alias_type, state->asname, Py_None) == -1)
1858 return 0;
Victor Stinnerf8599272020-07-03 16:57:19 +02001859 state->withitem_type = make_type(state, "withitem", state->AST_type,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001860 withitem_fields, 2,
1861 "withitem(expr context_expr, expr? optional_vars)");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001862 if (!state->withitem_type) return 0;
Victor Stinnerf8599272020-07-03 16:57:19 +02001863 if (!add_attributes(state, state->withitem_type, NULL, 0)) return 0;
Serhiy Storchakab7e95252020-03-10 00:07:47 +02001864 if (PyObject_SetAttr(state->withitem_type, state->optional_vars, Py_None)
1865 == -1)
1866 return 0;
Victor Stinnerf8599272020-07-03 16:57:19 +02001867 state->type_ignore_type = make_type(state, "type_ignore", state->AST_type,
1868 NULL, 0,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001869 "type_ignore = TypeIgnore(int lineno, string tag)");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001870 if (!state->type_ignore_type) return 0;
Victor Stinnerf8599272020-07-03 16:57:19 +02001871 if (!add_attributes(state, state->type_ignore_type, NULL, 0)) return 0;
1872 state->TypeIgnore_type = make_type(state, "TypeIgnore",
1873 state->type_ignore_type,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001874 TypeIgnore_fields, 2,
1875 "TypeIgnore(int lineno, string tag)");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001876 if (!state->TypeIgnore_type) return 0;
1877 state->initialized = 1;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02001878 return 1;
Martin v. Löwisbd260da2006-02-26 19:42:26 +00001879}
Neal Norwitz7b5a6042005-11-13 19:14:20 +00001880
Victor Stinnerf8599272020-07-03 16:57:19 +02001881static int obj2ast_mod(astmodulestate *state, PyObject* obj, mod_ty* out,
1882 PyArena* arena);
1883static int obj2ast_stmt(astmodulestate *state, PyObject* obj, stmt_ty* out,
1884 PyArena* arena);
1885static int obj2ast_expr(astmodulestate *state, PyObject* obj, expr_ty* out,
1886 PyArena* arena);
1887static int obj2ast_expr_context(astmodulestate *state, PyObject* obj,
1888 expr_context_ty* out, PyArena* arena);
1889static int obj2ast_boolop(astmodulestate *state, PyObject* obj, boolop_ty* out,
1890 PyArena* arena);
1891static int obj2ast_operator(astmodulestate *state, PyObject* obj, operator_ty*
1892 out, PyArena* arena);
1893static int obj2ast_unaryop(astmodulestate *state, PyObject* obj, unaryop_ty*
1894 out, PyArena* arena);
1895static int obj2ast_cmpop(astmodulestate *state, PyObject* obj, cmpop_ty* out,
1896 PyArena* arena);
1897static int obj2ast_comprehension(astmodulestate *state, PyObject* obj,
1898 comprehension_ty* out, PyArena* arena);
1899static int obj2ast_excepthandler(astmodulestate *state, PyObject* obj,
1900 excepthandler_ty* out, PyArena* arena);
1901static int obj2ast_arguments(astmodulestate *state, PyObject* obj,
1902 arguments_ty* out, PyArena* arena);
1903static int obj2ast_arg(astmodulestate *state, PyObject* obj, arg_ty* out,
1904 PyArena* arena);
1905static int obj2ast_keyword(astmodulestate *state, PyObject* obj, keyword_ty*
1906 out, PyArena* arena);
1907static int obj2ast_alias(astmodulestate *state, PyObject* obj, alias_ty* out,
1908 PyArena* arena);
1909static int obj2ast_withitem(astmodulestate *state, PyObject* obj, withitem_ty*
1910 out, PyArena* arena);
1911static int obj2ast_type_ignore(astmodulestate *state, PyObject* obj,
1912 type_ignore_ty* out, PyArena* arena);
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00001913
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001914mod_ty
Guido van Rossumdcfcd142019-01-31 03:40:27 -08001915Module(asdl_seq * body, asdl_seq * type_ignores, PyArena *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001916{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02001917 mod_ty p;
1918 p = (mod_ty)PyArena_Malloc(arena, sizeof(*p));
1919 if (!p)
1920 return NULL;
1921 p->kind = Module_kind;
1922 p->v.Module.body = body;
Guido van Rossumdcfcd142019-01-31 03:40:27 -08001923 p->v.Module.type_ignores = type_ignores;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02001924 return p;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001925}
1926
1927mod_ty
Neal Norwitzadb69fc2005-12-17 20:54:49 +00001928Interactive(asdl_seq * body, PyArena *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 = Interactive_kind;
1935 p->v.Interactive.body = body;
1936 return p;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001937}
1938
1939mod_ty
Neal Norwitzadb69fc2005-12-17 20:54:49 +00001940Expression(expr_ty body, PyArena *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001941{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02001942 mod_ty p;
1943 if (!body) {
1944 PyErr_SetString(PyExc_ValueError,
Batuhan Taskaya091951a2020-05-06 17:29:32 +03001945 "field 'body' is required for Expression");
Victor Stinnerce72e1c2013-07-27 00:00:36 +02001946 return NULL;
1947 }
1948 p = (mod_ty)PyArena_Malloc(arena, sizeof(*p));
1949 if (!p)
1950 return NULL;
1951 p->kind = Expression_kind;
1952 p->v.Expression.body = body;
1953 return p;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001954}
1955
1956mod_ty
Guido van Rossumdcfcd142019-01-31 03:40:27 -08001957FunctionType(asdl_seq * argtypes, expr_ty returns, PyArena *arena)
1958{
1959 mod_ty p;
1960 if (!returns) {
1961 PyErr_SetString(PyExc_ValueError,
Batuhan Taskaya091951a2020-05-06 17:29:32 +03001962 "field 'returns' is required for FunctionType");
Guido van Rossumdcfcd142019-01-31 03:40:27 -08001963 return NULL;
1964 }
1965 p = (mod_ty)PyArena_Malloc(arena, sizeof(*p));
1966 if (!p)
1967 return NULL;
1968 p->kind = FunctionType_kind;
1969 p->v.FunctionType.argtypes = argtypes;
1970 p->v.FunctionType.returns = returns;
1971 return p;
1972}
1973
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001974stmt_ty
1975FunctionDef(identifier name, arguments_ty args, asdl_seq * body, asdl_seq *
Guido van Rossumdcfcd142019-01-31 03:40:27 -08001976 decorator_list, expr_ty returns, string type_comment, int lineno,
1977 int col_offset, int end_lineno, int end_col_offset, PyArena *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001978{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02001979 stmt_ty p;
1980 if (!name) {
1981 PyErr_SetString(PyExc_ValueError,
Batuhan Taskaya091951a2020-05-06 17:29:32 +03001982 "field 'name' is required for FunctionDef");
Victor Stinnerce72e1c2013-07-27 00:00:36 +02001983 return NULL;
1984 }
1985 if (!args) {
1986 PyErr_SetString(PyExc_ValueError,
Batuhan Taskaya091951a2020-05-06 17:29:32 +03001987 "field 'args' is required for FunctionDef");
Victor Stinnerce72e1c2013-07-27 00:00:36 +02001988 return NULL;
1989 }
1990 p = (stmt_ty)PyArena_Malloc(arena, sizeof(*p));
1991 if (!p)
1992 return NULL;
1993 p->kind = FunctionDef_kind;
1994 p->v.FunctionDef.name = name;
1995 p->v.FunctionDef.args = args;
1996 p->v.FunctionDef.body = body;
1997 p->v.FunctionDef.decorator_list = decorator_list;
1998 p->v.FunctionDef.returns = returns;
Guido van Rossumdcfcd142019-01-31 03:40:27 -08001999 p->v.FunctionDef.type_comment = type_comment;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002000 p->lineno = lineno;
2001 p->col_offset = col_offset;
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00002002 p->end_lineno = end_lineno;
2003 p->end_col_offset = end_col_offset;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002004 return p;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002005}
2006
2007stmt_ty
Yury Selivanov75445082015-05-11 22:57:16 -04002008AsyncFunctionDef(identifier name, arguments_ty args, asdl_seq * body, asdl_seq
Guido van Rossumdcfcd142019-01-31 03:40:27 -08002009 * decorator_list, expr_ty returns, string type_comment, int
2010 lineno, int col_offset, int end_lineno, int end_col_offset,
2011 PyArena *arena)
Yury Selivanov75445082015-05-11 22:57:16 -04002012{
2013 stmt_ty p;
2014 if (!name) {
2015 PyErr_SetString(PyExc_ValueError,
Batuhan Taskaya091951a2020-05-06 17:29:32 +03002016 "field 'name' is required for AsyncFunctionDef");
Yury Selivanov75445082015-05-11 22:57:16 -04002017 return NULL;
2018 }
2019 if (!args) {
2020 PyErr_SetString(PyExc_ValueError,
Batuhan Taskaya091951a2020-05-06 17:29:32 +03002021 "field 'args' is required for AsyncFunctionDef");
Yury Selivanov75445082015-05-11 22:57:16 -04002022 return NULL;
2023 }
2024 p = (stmt_ty)PyArena_Malloc(arena, sizeof(*p));
2025 if (!p)
2026 return NULL;
2027 p->kind = AsyncFunctionDef_kind;
2028 p->v.AsyncFunctionDef.name = name;
2029 p->v.AsyncFunctionDef.args = args;
2030 p->v.AsyncFunctionDef.body = body;
2031 p->v.AsyncFunctionDef.decorator_list = decorator_list;
2032 p->v.AsyncFunctionDef.returns = returns;
Guido van Rossumdcfcd142019-01-31 03:40:27 -08002033 p->v.AsyncFunctionDef.type_comment = type_comment;
Yury Selivanov75445082015-05-11 22:57:16 -04002034 p->lineno = lineno;
2035 p->col_offset = col_offset;
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00002036 p->end_lineno = end_lineno;
2037 p->end_col_offset = end_col_offset;
Yury Selivanov75445082015-05-11 22:57:16 -04002038 return p;
2039}
2040
2041stmt_ty
Benjamin Peterson025e9eb2015-05-05 20:16:41 -04002042ClassDef(identifier name, asdl_seq * bases, asdl_seq * keywords, asdl_seq *
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00002043 body, asdl_seq * decorator_list, int lineno, int col_offset, int
2044 end_lineno, int end_col_offset, PyArena *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002045{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002046 stmt_ty p;
2047 if (!name) {
2048 PyErr_SetString(PyExc_ValueError,
Batuhan Taskaya091951a2020-05-06 17:29:32 +03002049 "field 'name' is required for ClassDef");
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002050 return NULL;
2051 }
2052 p = (stmt_ty)PyArena_Malloc(arena, sizeof(*p));
2053 if (!p)
2054 return NULL;
2055 p->kind = ClassDef_kind;
2056 p->v.ClassDef.name = name;
2057 p->v.ClassDef.bases = bases;
2058 p->v.ClassDef.keywords = keywords;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002059 p->v.ClassDef.body = body;
2060 p->v.ClassDef.decorator_list = decorator_list;
2061 p->lineno = lineno;
2062 p->col_offset = col_offset;
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00002063 p->end_lineno = end_lineno;
2064 p->end_col_offset = end_col_offset;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002065 return p;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002066}
2067
2068stmt_ty
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00002069Return(expr_ty value, int lineno, int col_offset, int end_lineno, int
2070 end_col_offset, PyArena *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002071{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002072 stmt_ty p;
2073 p = (stmt_ty)PyArena_Malloc(arena, sizeof(*p));
2074 if (!p)
2075 return NULL;
2076 p->kind = Return_kind;
2077 p->v.Return.value = value;
2078 p->lineno = lineno;
2079 p->col_offset = col_offset;
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00002080 p->end_lineno = end_lineno;
2081 p->end_col_offset = end_col_offset;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002082 return p;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002083}
2084
2085stmt_ty
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00002086Delete(asdl_seq * targets, int lineno, int col_offset, int end_lineno, int
2087 end_col_offset, PyArena *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002088{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002089 stmt_ty p;
2090 p = (stmt_ty)PyArena_Malloc(arena, sizeof(*p));
2091 if (!p)
2092 return NULL;
2093 p->kind = Delete_kind;
2094 p->v.Delete.targets = targets;
2095 p->lineno = lineno;
2096 p->col_offset = col_offset;
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00002097 p->end_lineno = end_lineno;
2098 p->end_col_offset = end_col_offset;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002099 return p;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002100}
2101
2102stmt_ty
Guido van Rossumdcfcd142019-01-31 03:40:27 -08002103Assign(asdl_seq * targets, expr_ty value, string type_comment, int lineno, int
2104 col_offset, int end_lineno, int end_col_offset, PyArena *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002105{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002106 stmt_ty p;
2107 if (!value) {
2108 PyErr_SetString(PyExc_ValueError,
Batuhan Taskaya091951a2020-05-06 17:29:32 +03002109 "field 'value' is required for Assign");
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002110 return NULL;
2111 }
2112 p = (stmt_ty)PyArena_Malloc(arena, sizeof(*p));
2113 if (!p)
2114 return NULL;
2115 p->kind = Assign_kind;
2116 p->v.Assign.targets = targets;
2117 p->v.Assign.value = value;
Guido van Rossumdcfcd142019-01-31 03:40:27 -08002118 p->v.Assign.type_comment = type_comment;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002119 p->lineno = lineno;
2120 p->col_offset = col_offset;
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00002121 p->end_lineno = end_lineno;
2122 p->end_col_offset = end_col_offset;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002123 return p;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002124}
2125
2126stmt_ty
Martin v. Löwis49c5da12006-03-01 22:49:05 +00002127AugAssign(expr_ty target, operator_ty op, expr_ty value, int lineno, int
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00002128 col_offset, int end_lineno, int end_col_offset, PyArena *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002129{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002130 stmt_ty p;
2131 if (!target) {
2132 PyErr_SetString(PyExc_ValueError,
Batuhan Taskaya091951a2020-05-06 17:29:32 +03002133 "field 'target' is required for AugAssign");
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002134 return NULL;
2135 }
2136 if (!op) {
2137 PyErr_SetString(PyExc_ValueError,
Batuhan Taskaya091951a2020-05-06 17:29:32 +03002138 "field 'op' is required for AugAssign");
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002139 return NULL;
2140 }
2141 if (!value) {
2142 PyErr_SetString(PyExc_ValueError,
Batuhan Taskaya091951a2020-05-06 17:29:32 +03002143 "field 'value' is required for AugAssign");
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002144 return NULL;
2145 }
2146 p = (stmt_ty)PyArena_Malloc(arena, sizeof(*p));
2147 if (!p)
2148 return NULL;
2149 p->kind = AugAssign_kind;
2150 p->v.AugAssign.target = target;
2151 p->v.AugAssign.op = op;
2152 p->v.AugAssign.value = value;
2153 p->lineno = lineno;
2154 p->col_offset = col_offset;
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00002155 p->end_lineno = end_lineno;
2156 p->end_col_offset = end_col_offset;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002157 return p;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002158}
2159
2160stmt_ty
Yury Selivanovf8cb8a12016-09-08 20:50:03 -07002161AnnAssign(expr_ty target, expr_ty annotation, expr_ty value, int simple, int
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00002162 lineno, int col_offset, int end_lineno, int end_col_offset, PyArena
2163 *arena)
Yury Selivanovf8cb8a12016-09-08 20:50:03 -07002164{
2165 stmt_ty p;
2166 if (!target) {
2167 PyErr_SetString(PyExc_ValueError,
Batuhan Taskaya091951a2020-05-06 17:29:32 +03002168 "field 'target' is required for AnnAssign");
Yury Selivanovf8cb8a12016-09-08 20:50:03 -07002169 return NULL;
2170 }
2171 if (!annotation) {
2172 PyErr_SetString(PyExc_ValueError,
Batuhan Taskaya091951a2020-05-06 17:29:32 +03002173 "field 'annotation' is required for AnnAssign");
Yury Selivanovf8cb8a12016-09-08 20:50:03 -07002174 return NULL;
2175 }
2176 p = (stmt_ty)PyArena_Malloc(arena, sizeof(*p));
2177 if (!p)
2178 return NULL;
2179 p->kind = AnnAssign_kind;
2180 p->v.AnnAssign.target = target;
2181 p->v.AnnAssign.annotation = annotation;
2182 p->v.AnnAssign.value = value;
2183 p->v.AnnAssign.simple = simple;
2184 p->lineno = lineno;
2185 p->col_offset = col_offset;
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00002186 p->end_lineno = end_lineno;
2187 p->end_col_offset = end_col_offset;
Yury Selivanovf8cb8a12016-09-08 20:50:03 -07002188 return p;
2189}
2190
2191stmt_ty
Guido van Rossumdcfcd142019-01-31 03:40:27 -08002192For(expr_ty target, expr_ty iter, asdl_seq * body, asdl_seq * orelse, string
2193 type_comment, int lineno, int col_offset, int end_lineno, int
2194 end_col_offset, PyArena *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002195{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002196 stmt_ty p;
2197 if (!target) {
2198 PyErr_SetString(PyExc_ValueError,
Batuhan Taskaya091951a2020-05-06 17:29:32 +03002199 "field 'target' is required for For");
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002200 return NULL;
2201 }
2202 if (!iter) {
2203 PyErr_SetString(PyExc_ValueError,
Batuhan Taskaya091951a2020-05-06 17:29:32 +03002204 "field 'iter' is required for For");
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002205 return NULL;
2206 }
2207 p = (stmt_ty)PyArena_Malloc(arena, sizeof(*p));
2208 if (!p)
2209 return NULL;
2210 p->kind = For_kind;
2211 p->v.For.target = target;
2212 p->v.For.iter = iter;
2213 p->v.For.body = body;
2214 p->v.For.orelse = orelse;
Guido van Rossumdcfcd142019-01-31 03:40:27 -08002215 p->v.For.type_comment = type_comment;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002216 p->lineno = lineno;
2217 p->col_offset = col_offset;
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00002218 p->end_lineno = end_lineno;
2219 p->end_col_offset = end_col_offset;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002220 return p;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002221}
2222
2223stmt_ty
Guido van Rossumdcfcd142019-01-31 03:40:27 -08002224AsyncFor(expr_ty target, expr_ty iter, asdl_seq * body, asdl_seq * orelse,
2225 string type_comment, int lineno, int col_offset, int end_lineno, int
2226 end_col_offset, PyArena *arena)
Yury Selivanov75445082015-05-11 22:57:16 -04002227{
2228 stmt_ty p;
2229 if (!target) {
2230 PyErr_SetString(PyExc_ValueError,
Batuhan Taskaya091951a2020-05-06 17:29:32 +03002231 "field 'target' is required for AsyncFor");
Yury Selivanov75445082015-05-11 22:57:16 -04002232 return NULL;
2233 }
2234 if (!iter) {
2235 PyErr_SetString(PyExc_ValueError,
Batuhan Taskaya091951a2020-05-06 17:29:32 +03002236 "field 'iter' is required for AsyncFor");
Yury Selivanov75445082015-05-11 22:57:16 -04002237 return NULL;
2238 }
2239 p = (stmt_ty)PyArena_Malloc(arena, sizeof(*p));
2240 if (!p)
2241 return NULL;
2242 p->kind = AsyncFor_kind;
2243 p->v.AsyncFor.target = target;
2244 p->v.AsyncFor.iter = iter;
2245 p->v.AsyncFor.body = body;
2246 p->v.AsyncFor.orelse = orelse;
Guido van Rossumdcfcd142019-01-31 03:40:27 -08002247 p->v.AsyncFor.type_comment = type_comment;
Yury Selivanov75445082015-05-11 22:57:16 -04002248 p->lineno = lineno;
2249 p->col_offset = col_offset;
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00002250 p->end_lineno = end_lineno;
2251 p->end_col_offset = end_col_offset;
Yury Selivanov75445082015-05-11 22:57:16 -04002252 return p;
2253}
2254
2255stmt_ty
Martin v. Löwis49c5da12006-03-01 22:49:05 +00002256While(expr_ty test, asdl_seq * body, asdl_seq * orelse, int lineno, int
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00002257 col_offset, int end_lineno, int end_col_offset, PyArena *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002258{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002259 stmt_ty p;
2260 if (!test) {
2261 PyErr_SetString(PyExc_ValueError,
Batuhan Taskaya091951a2020-05-06 17:29:32 +03002262 "field 'test' is required for While");
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002263 return NULL;
2264 }
2265 p = (stmt_ty)PyArena_Malloc(arena, sizeof(*p));
2266 if (!p)
2267 return NULL;
2268 p->kind = While_kind;
2269 p->v.While.test = test;
2270 p->v.While.body = body;
2271 p->v.While.orelse = orelse;
2272 p->lineno = lineno;
2273 p->col_offset = col_offset;
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00002274 p->end_lineno = end_lineno;
2275 p->end_col_offset = end_col_offset;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002276 return p;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002277}
2278
2279stmt_ty
Martin v. Löwis49c5da12006-03-01 22:49:05 +00002280If(expr_ty test, asdl_seq * body, asdl_seq * orelse, int lineno, int
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00002281 col_offset, int end_lineno, int end_col_offset, PyArena *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002282{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002283 stmt_ty p;
2284 if (!test) {
2285 PyErr_SetString(PyExc_ValueError,
Batuhan Taskaya091951a2020-05-06 17:29:32 +03002286 "field 'test' is required for If");
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002287 return NULL;
2288 }
2289 p = (stmt_ty)PyArena_Malloc(arena, sizeof(*p));
2290 if (!p)
2291 return NULL;
2292 p->kind = If_kind;
2293 p->v.If.test = test;
2294 p->v.If.body = body;
2295 p->v.If.orelse = orelse;
2296 p->lineno = lineno;
2297 p->col_offset = col_offset;
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00002298 p->end_lineno = end_lineno;
2299 p->end_col_offset = end_col_offset;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002300 return p;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002301}
2302
2303stmt_ty
Guido van Rossumdcfcd142019-01-31 03:40:27 -08002304With(asdl_seq * items, asdl_seq * body, string type_comment, int lineno, int
2305 col_offset, int end_lineno, int end_col_offset, PyArena *arena)
Guido van Rossumc2e20742006-02-27 22:32:47 +00002306{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002307 stmt_ty p;
2308 p = (stmt_ty)PyArena_Malloc(arena, sizeof(*p));
2309 if (!p)
2310 return NULL;
2311 p->kind = With_kind;
2312 p->v.With.items = items;
2313 p->v.With.body = body;
Guido van Rossumdcfcd142019-01-31 03:40:27 -08002314 p->v.With.type_comment = type_comment;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002315 p->lineno = lineno;
2316 p->col_offset = col_offset;
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00002317 p->end_lineno = end_lineno;
2318 p->end_col_offset = end_col_offset;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002319 return p;
Guido van Rossumc2e20742006-02-27 22:32:47 +00002320}
2321
2322stmt_ty
Guido van Rossumdcfcd142019-01-31 03:40:27 -08002323AsyncWith(asdl_seq * items, asdl_seq * body, string type_comment, int lineno,
2324 int col_offset, int end_lineno, int end_col_offset, PyArena *arena)
Yury Selivanov75445082015-05-11 22:57:16 -04002325{
2326 stmt_ty p;
2327 p = (stmt_ty)PyArena_Malloc(arena, sizeof(*p));
2328 if (!p)
2329 return NULL;
2330 p->kind = AsyncWith_kind;
2331 p->v.AsyncWith.items = items;
2332 p->v.AsyncWith.body = body;
Guido van Rossumdcfcd142019-01-31 03:40:27 -08002333 p->v.AsyncWith.type_comment = type_comment;
Yury Selivanov75445082015-05-11 22:57:16 -04002334 p->lineno = lineno;
2335 p->col_offset = col_offset;
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00002336 p->end_lineno = end_lineno;
2337 p->end_col_offset = end_col_offset;
Yury Selivanov75445082015-05-11 22:57:16 -04002338 return p;
2339}
2340
2341stmt_ty
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00002342Raise(expr_ty exc, expr_ty cause, int lineno, int col_offset, int end_lineno,
2343 int end_col_offset, PyArena *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002344{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002345 stmt_ty p;
2346 p = (stmt_ty)PyArena_Malloc(arena, sizeof(*p));
2347 if (!p)
2348 return NULL;
2349 p->kind = Raise_kind;
2350 p->v.Raise.exc = exc;
2351 p->v.Raise.cause = cause;
2352 p->lineno = lineno;
2353 p->col_offset = col_offset;
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00002354 p->end_lineno = end_lineno;
2355 p->end_col_offset = end_col_offset;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002356 return p;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002357}
2358
2359stmt_ty
Benjamin Peterson43af12b2011-05-29 11:43:10 -05002360Try(asdl_seq * body, asdl_seq * handlers, asdl_seq * orelse, asdl_seq *
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00002361 finalbody, int lineno, int col_offset, int end_lineno, int end_col_offset,
2362 PyArena *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002363{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002364 stmt_ty p;
2365 p = (stmt_ty)PyArena_Malloc(arena, sizeof(*p));
2366 if (!p)
2367 return NULL;
2368 p->kind = Try_kind;
2369 p->v.Try.body = body;
2370 p->v.Try.handlers = handlers;
2371 p->v.Try.orelse = orelse;
2372 p->v.Try.finalbody = finalbody;
2373 p->lineno = lineno;
2374 p->col_offset = col_offset;
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00002375 p->end_lineno = end_lineno;
2376 p->end_col_offset = end_col_offset;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002377 return p;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002378}
2379
2380stmt_ty
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00002381Assert(expr_ty test, expr_ty msg, int lineno, int col_offset, int end_lineno,
2382 int end_col_offset, PyArena *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002383{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002384 stmt_ty p;
2385 if (!test) {
2386 PyErr_SetString(PyExc_ValueError,
Batuhan Taskaya091951a2020-05-06 17:29:32 +03002387 "field 'test' is required for Assert");
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002388 return NULL;
2389 }
2390 p = (stmt_ty)PyArena_Malloc(arena, sizeof(*p));
2391 if (!p)
2392 return NULL;
2393 p->kind = Assert_kind;
2394 p->v.Assert.test = test;
2395 p->v.Assert.msg = msg;
2396 p->lineno = lineno;
2397 p->col_offset = col_offset;
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00002398 p->end_lineno = end_lineno;
2399 p->end_col_offset = end_col_offset;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002400 return p;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002401}
2402
2403stmt_ty
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00002404Import(asdl_seq * names, int lineno, int col_offset, int end_lineno, int
2405 end_col_offset, PyArena *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002406{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002407 stmt_ty p;
2408 p = (stmt_ty)PyArena_Malloc(arena, sizeof(*p));
2409 if (!p)
2410 return NULL;
2411 p->kind = Import_kind;
2412 p->v.Import.names = names;
2413 p->lineno = lineno;
2414 p->col_offset = col_offset;
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00002415 p->end_lineno = end_lineno;
2416 p->end_col_offset = end_col_offset;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002417 return p;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002418}
2419
2420stmt_ty
Martin v. Löwis49c5da12006-03-01 22:49:05 +00002421ImportFrom(identifier module, asdl_seq * names, int level, int lineno, int
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00002422 col_offset, int end_lineno, int end_col_offset, PyArena *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002423{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002424 stmt_ty p;
2425 p = (stmt_ty)PyArena_Malloc(arena, sizeof(*p));
2426 if (!p)
2427 return NULL;
2428 p->kind = ImportFrom_kind;
2429 p->v.ImportFrom.module = module;
2430 p->v.ImportFrom.names = names;
2431 p->v.ImportFrom.level = level;
2432 p->lineno = lineno;
2433 p->col_offset = col_offset;
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00002434 p->end_lineno = end_lineno;
2435 p->end_col_offset = end_col_offset;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002436 return p;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002437}
2438
2439stmt_ty
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00002440Global(asdl_seq * names, int lineno, int col_offset, int end_lineno, int
2441 end_col_offset, PyArena *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002442{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002443 stmt_ty p;
2444 p = (stmt_ty)PyArena_Malloc(arena, sizeof(*p));
2445 if (!p)
2446 return NULL;
2447 p->kind = Global_kind;
2448 p->v.Global.names = names;
2449 p->lineno = lineno;
2450 p->col_offset = col_offset;
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00002451 p->end_lineno = end_lineno;
2452 p->end_col_offset = end_col_offset;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002453 return p;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002454}
2455
2456stmt_ty
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00002457Nonlocal(asdl_seq * names, int lineno, int col_offset, int end_lineno, int
2458 end_col_offset, PyArena *arena)
Jeremy Hylton81e95022007-02-27 06:50:52 +00002459{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002460 stmt_ty p;
2461 p = (stmt_ty)PyArena_Malloc(arena, sizeof(*p));
2462 if (!p)
2463 return NULL;
2464 p->kind = Nonlocal_kind;
2465 p->v.Nonlocal.names = names;
2466 p->lineno = lineno;
2467 p->col_offset = col_offset;
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00002468 p->end_lineno = end_lineno;
2469 p->end_col_offset = end_col_offset;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002470 return p;
Jeremy Hylton81e95022007-02-27 06:50:52 +00002471}
2472
2473stmt_ty
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00002474Expr(expr_ty value, int lineno, int col_offset, int end_lineno, int
2475 end_col_offset, PyArena *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002476{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002477 stmt_ty p;
2478 if (!value) {
2479 PyErr_SetString(PyExc_ValueError,
Batuhan Taskaya091951a2020-05-06 17:29:32 +03002480 "field 'value' is required for Expr");
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002481 return NULL;
2482 }
2483 p = (stmt_ty)PyArena_Malloc(arena, sizeof(*p));
2484 if (!p)
2485 return NULL;
2486 p->kind = Expr_kind;
2487 p->v.Expr.value = value;
2488 p->lineno = lineno;
2489 p->col_offset = col_offset;
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00002490 p->end_lineno = end_lineno;
2491 p->end_col_offset = end_col_offset;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002492 return p;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002493}
2494
2495stmt_ty
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00002496Pass(int lineno, int col_offset, int end_lineno, int end_col_offset, PyArena
2497 *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002498{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002499 stmt_ty p;
2500 p = (stmt_ty)PyArena_Malloc(arena, sizeof(*p));
2501 if (!p)
2502 return NULL;
2503 p->kind = Pass_kind;
2504 p->lineno = lineno;
2505 p->col_offset = col_offset;
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00002506 p->end_lineno = end_lineno;
2507 p->end_col_offset = end_col_offset;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002508 return p;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002509}
2510
2511stmt_ty
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00002512Break(int lineno, int col_offset, int end_lineno, int end_col_offset, PyArena
2513 *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002514{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002515 stmt_ty p;
2516 p = (stmt_ty)PyArena_Malloc(arena, sizeof(*p));
2517 if (!p)
2518 return NULL;
2519 p->kind = Break_kind;
2520 p->lineno = lineno;
2521 p->col_offset = col_offset;
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00002522 p->end_lineno = end_lineno;
2523 p->end_col_offset = end_col_offset;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002524 return p;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002525}
2526
2527stmt_ty
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00002528Continue(int lineno, int col_offset, int end_lineno, int end_col_offset,
2529 PyArena *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002530{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002531 stmt_ty p;
2532 p = (stmt_ty)PyArena_Malloc(arena, sizeof(*p));
2533 if (!p)
2534 return NULL;
2535 p->kind = Continue_kind;
2536 p->lineno = lineno;
2537 p->col_offset = col_offset;
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00002538 p->end_lineno = end_lineno;
2539 p->end_col_offset = end_col_offset;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002540 return p;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002541}
2542
2543expr_ty
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00002544BoolOp(boolop_ty op, asdl_seq * values, int lineno, int col_offset, int
2545 end_lineno, int end_col_offset, PyArena *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002546{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002547 expr_ty p;
2548 if (!op) {
2549 PyErr_SetString(PyExc_ValueError,
Batuhan Taskaya091951a2020-05-06 17:29:32 +03002550 "field 'op' is required for BoolOp");
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002551 return NULL;
2552 }
2553 p = (expr_ty)PyArena_Malloc(arena, sizeof(*p));
2554 if (!p)
2555 return NULL;
2556 p->kind = BoolOp_kind;
2557 p->v.BoolOp.op = op;
2558 p->v.BoolOp.values = values;
2559 p->lineno = lineno;
2560 p->col_offset = col_offset;
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00002561 p->end_lineno = end_lineno;
2562 p->end_col_offset = end_col_offset;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002563 return p;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002564}
2565
2566expr_ty
Emily Morehouse8f59ee02019-01-24 16:49:56 -07002567NamedExpr(expr_ty target, expr_ty value, int lineno, int col_offset, int
2568 end_lineno, int end_col_offset, PyArena *arena)
2569{
2570 expr_ty p;
2571 if (!target) {
2572 PyErr_SetString(PyExc_ValueError,
Batuhan Taskaya091951a2020-05-06 17:29:32 +03002573 "field 'target' is required for NamedExpr");
Emily Morehouse8f59ee02019-01-24 16:49:56 -07002574 return NULL;
2575 }
2576 if (!value) {
2577 PyErr_SetString(PyExc_ValueError,
Batuhan Taskaya091951a2020-05-06 17:29:32 +03002578 "field 'value' is required for NamedExpr");
Emily Morehouse8f59ee02019-01-24 16:49:56 -07002579 return NULL;
2580 }
2581 p = (expr_ty)PyArena_Malloc(arena, sizeof(*p));
2582 if (!p)
2583 return NULL;
2584 p->kind = NamedExpr_kind;
2585 p->v.NamedExpr.target = target;
2586 p->v.NamedExpr.value = value;
2587 p->lineno = lineno;
2588 p->col_offset = col_offset;
2589 p->end_lineno = end_lineno;
2590 p->end_col_offset = end_col_offset;
2591 return p;
2592}
2593
2594expr_ty
Martin v. Löwis49c5da12006-03-01 22:49:05 +00002595BinOp(expr_ty left, operator_ty op, expr_ty right, int lineno, int col_offset,
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00002596 int end_lineno, int end_col_offset, PyArena *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002597{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002598 expr_ty p;
2599 if (!left) {
2600 PyErr_SetString(PyExc_ValueError,
Batuhan Taskaya091951a2020-05-06 17:29:32 +03002601 "field 'left' is required for BinOp");
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002602 return NULL;
2603 }
2604 if (!op) {
2605 PyErr_SetString(PyExc_ValueError,
Batuhan Taskaya091951a2020-05-06 17:29:32 +03002606 "field 'op' is required for BinOp");
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002607 return NULL;
2608 }
2609 if (!right) {
2610 PyErr_SetString(PyExc_ValueError,
Batuhan Taskaya091951a2020-05-06 17:29:32 +03002611 "field 'right' is required for BinOp");
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002612 return NULL;
2613 }
2614 p = (expr_ty)PyArena_Malloc(arena, sizeof(*p));
2615 if (!p)
2616 return NULL;
2617 p->kind = BinOp_kind;
2618 p->v.BinOp.left = left;
2619 p->v.BinOp.op = op;
2620 p->v.BinOp.right = right;
2621 p->lineno = lineno;
2622 p->col_offset = col_offset;
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00002623 p->end_lineno = end_lineno;
2624 p->end_col_offset = end_col_offset;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002625 return p;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002626}
2627
2628expr_ty
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00002629UnaryOp(unaryop_ty op, expr_ty operand, int lineno, int col_offset, int
2630 end_lineno, int end_col_offset, PyArena *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002631{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002632 expr_ty p;
2633 if (!op) {
2634 PyErr_SetString(PyExc_ValueError,
Batuhan Taskaya091951a2020-05-06 17:29:32 +03002635 "field 'op' is required for UnaryOp");
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002636 return NULL;
2637 }
2638 if (!operand) {
2639 PyErr_SetString(PyExc_ValueError,
Batuhan Taskaya091951a2020-05-06 17:29:32 +03002640 "field 'operand' is required for UnaryOp");
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002641 return NULL;
2642 }
2643 p = (expr_ty)PyArena_Malloc(arena, sizeof(*p));
2644 if (!p)
2645 return NULL;
2646 p->kind = UnaryOp_kind;
2647 p->v.UnaryOp.op = op;
2648 p->v.UnaryOp.operand = operand;
2649 p->lineno = lineno;
2650 p->col_offset = col_offset;
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00002651 p->end_lineno = end_lineno;
2652 p->end_col_offset = end_col_offset;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002653 return p;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002654}
2655
2656expr_ty
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00002657Lambda(arguments_ty args, expr_ty body, int lineno, int col_offset, int
2658 end_lineno, int end_col_offset, PyArena *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002659{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002660 expr_ty p;
2661 if (!args) {
2662 PyErr_SetString(PyExc_ValueError,
Batuhan Taskaya091951a2020-05-06 17:29:32 +03002663 "field 'args' is required for Lambda");
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002664 return NULL;
2665 }
2666 if (!body) {
2667 PyErr_SetString(PyExc_ValueError,
Batuhan Taskaya091951a2020-05-06 17:29:32 +03002668 "field 'body' is required for Lambda");
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002669 return NULL;
2670 }
2671 p = (expr_ty)PyArena_Malloc(arena, sizeof(*p));
2672 if (!p)
2673 return NULL;
2674 p->kind = Lambda_kind;
2675 p->v.Lambda.args = args;
2676 p->v.Lambda.body = body;
2677 p->lineno = lineno;
2678 p->col_offset = col_offset;
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00002679 p->end_lineno = end_lineno;
2680 p->end_col_offset = end_col_offset;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002681 return p;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002682}
2683
2684expr_ty
Martin v. Löwis49c5da12006-03-01 22:49:05 +00002685IfExp(expr_ty test, expr_ty body, expr_ty orelse, int lineno, int col_offset,
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00002686 int end_lineno, int end_col_offset, PyArena *arena)
Thomas Woutersdca3b9c2006-02-27 00:24:13 +00002687{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002688 expr_ty p;
2689 if (!test) {
2690 PyErr_SetString(PyExc_ValueError,
Batuhan Taskaya091951a2020-05-06 17:29:32 +03002691 "field 'test' is required for IfExp");
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002692 return NULL;
2693 }
2694 if (!body) {
2695 PyErr_SetString(PyExc_ValueError,
Batuhan Taskaya091951a2020-05-06 17:29:32 +03002696 "field 'body' is required for IfExp");
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002697 return NULL;
2698 }
2699 if (!orelse) {
2700 PyErr_SetString(PyExc_ValueError,
Batuhan Taskaya091951a2020-05-06 17:29:32 +03002701 "field 'orelse' is required for IfExp");
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002702 return NULL;
2703 }
2704 p = (expr_ty)PyArena_Malloc(arena, sizeof(*p));
2705 if (!p)
2706 return NULL;
2707 p->kind = IfExp_kind;
2708 p->v.IfExp.test = test;
2709 p->v.IfExp.body = body;
2710 p->v.IfExp.orelse = orelse;
2711 p->lineno = lineno;
2712 p->col_offset = col_offset;
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00002713 p->end_lineno = end_lineno;
2714 p->end_col_offset = end_col_offset;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002715 return p;
Thomas Woutersdca3b9c2006-02-27 00:24:13 +00002716}
2717
2718expr_ty
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00002719Dict(asdl_seq * keys, asdl_seq * values, int lineno, int col_offset, int
2720 end_lineno, int end_col_offset, PyArena *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002721{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002722 expr_ty p;
2723 p = (expr_ty)PyArena_Malloc(arena, sizeof(*p));
2724 if (!p)
2725 return NULL;
2726 p->kind = Dict_kind;
2727 p->v.Dict.keys = keys;
2728 p->v.Dict.values = values;
2729 p->lineno = lineno;
2730 p->col_offset = col_offset;
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00002731 p->end_lineno = end_lineno;
2732 p->end_col_offset = end_col_offset;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002733 return p;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002734}
2735
2736expr_ty
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00002737Set(asdl_seq * elts, int lineno, int col_offset, int end_lineno, int
2738 end_col_offset, PyArena *arena)
Guido van Rossum86e58e22006-08-28 15:27:34 +00002739{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002740 expr_ty p;
2741 p = (expr_ty)PyArena_Malloc(arena, sizeof(*p));
2742 if (!p)
2743 return NULL;
2744 p->kind = Set_kind;
2745 p->v.Set.elts = elts;
2746 p->lineno = lineno;
2747 p->col_offset = col_offset;
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00002748 p->end_lineno = end_lineno;
2749 p->end_col_offset = end_col_offset;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002750 return p;
Guido van Rossum86e58e22006-08-28 15:27:34 +00002751}
2752
2753expr_ty
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00002754ListComp(expr_ty elt, asdl_seq * generators, int lineno, int col_offset, int
2755 end_lineno, int end_col_offset, PyArena *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002756{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002757 expr_ty p;
2758 if (!elt) {
2759 PyErr_SetString(PyExc_ValueError,
Batuhan Taskaya091951a2020-05-06 17:29:32 +03002760 "field 'elt' is required for ListComp");
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002761 return NULL;
2762 }
2763 p = (expr_ty)PyArena_Malloc(arena, sizeof(*p));
2764 if (!p)
2765 return NULL;
2766 p->kind = ListComp_kind;
2767 p->v.ListComp.elt = elt;
2768 p->v.ListComp.generators = generators;
2769 p->lineno = lineno;
2770 p->col_offset = col_offset;
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00002771 p->end_lineno = end_lineno;
2772 p->end_col_offset = end_col_offset;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002773 return p;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002774}
2775
2776expr_ty
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00002777SetComp(expr_ty elt, asdl_seq * generators, int lineno, int col_offset, int
2778 end_lineno, int end_col_offset, PyArena *arena)
Nick Coghlan650f0d02007-04-15 12:05:43 +00002779{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002780 expr_ty p;
2781 if (!elt) {
2782 PyErr_SetString(PyExc_ValueError,
Batuhan Taskaya091951a2020-05-06 17:29:32 +03002783 "field 'elt' is required for SetComp");
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002784 return NULL;
2785 }
2786 p = (expr_ty)PyArena_Malloc(arena, sizeof(*p));
2787 if (!p)
2788 return NULL;
2789 p->kind = SetComp_kind;
2790 p->v.SetComp.elt = elt;
2791 p->v.SetComp.generators = generators;
2792 p->lineno = lineno;
2793 p->col_offset = col_offset;
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00002794 p->end_lineno = end_lineno;
2795 p->end_col_offset = end_col_offset;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002796 return p;
Nick Coghlan650f0d02007-04-15 12:05:43 +00002797}
2798
2799expr_ty
Guido van Rossum992d4a32007-07-11 13:09:30 +00002800DictComp(expr_ty key, expr_ty value, asdl_seq * generators, int lineno, int
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00002801 col_offset, int end_lineno, int end_col_offset, PyArena *arena)
Guido van Rossum992d4a32007-07-11 13:09:30 +00002802{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002803 expr_ty p;
2804 if (!key) {
2805 PyErr_SetString(PyExc_ValueError,
Batuhan Taskaya091951a2020-05-06 17:29:32 +03002806 "field 'key' is required for DictComp");
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002807 return NULL;
2808 }
2809 if (!value) {
2810 PyErr_SetString(PyExc_ValueError,
Batuhan Taskaya091951a2020-05-06 17:29:32 +03002811 "field 'value' is required for DictComp");
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002812 return NULL;
2813 }
2814 p = (expr_ty)PyArena_Malloc(arena, sizeof(*p));
2815 if (!p)
2816 return NULL;
2817 p->kind = DictComp_kind;
2818 p->v.DictComp.key = key;
2819 p->v.DictComp.value = value;
2820 p->v.DictComp.generators = generators;
2821 p->lineno = lineno;
2822 p->col_offset = col_offset;
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00002823 p->end_lineno = end_lineno;
2824 p->end_col_offset = end_col_offset;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002825 return p;
Guido van Rossum992d4a32007-07-11 13:09:30 +00002826}
2827
2828expr_ty
Martin v. Löwis49c5da12006-03-01 22:49:05 +00002829GeneratorExp(expr_ty elt, asdl_seq * generators, int lineno, int col_offset,
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00002830 int end_lineno, int end_col_offset, PyArena *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002831{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002832 expr_ty p;
2833 if (!elt) {
2834 PyErr_SetString(PyExc_ValueError,
Batuhan Taskaya091951a2020-05-06 17:29:32 +03002835 "field 'elt' is required for GeneratorExp");
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002836 return NULL;
2837 }
2838 p = (expr_ty)PyArena_Malloc(arena, sizeof(*p));
2839 if (!p)
2840 return NULL;
2841 p->kind = GeneratorExp_kind;
2842 p->v.GeneratorExp.elt = elt;
2843 p->v.GeneratorExp.generators = generators;
2844 p->lineno = lineno;
2845 p->col_offset = col_offset;
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00002846 p->end_lineno = end_lineno;
2847 p->end_col_offset = end_col_offset;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002848 return p;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002849}
2850
2851expr_ty
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00002852Await(expr_ty value, int lineno, int col_offset, int end_lineno, int
2853 end_col_offset, PyArena *arena)
Yury Selivanov75445082015-05-11 22:57:16 -04002854{
2855 expr_ty p;
2856 if (!value) {
2857 PyErr_SetString(PyExc_ValueError,
Batuhan Taskaya091951a2020-05-06 17:29:32 +03002858 "field 'value' is required for Await");
Yury Selivanov75445082015-05-11 22:57:16 -04002859 return NULL;
2860 }
2861 p = (expr_ty)PyArena_Malloc(arena, sizeof(*p));
2862 if (!p)
2863 return NULL;
2864 p->kind = Await_kind;
2865 p->v.Await.value = value;
2866 p->lineno = lineno;
2867 p->col_offset = col_offset;
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00002868 p->end_lineno = end_lineno;
2869 p->end_col_offset = end_col_offset;
Yury Selivanov75445082015-05-11 22:57:16 -04002870 return p;
2871}
2872
2873expr_ty
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00002874Yield(expr_ty value, int lineno, int col_offset, int end_lineno, int
2875 end_col_offset, PyArena *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002876{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002877 expr_ty p;
2878 p = (expr_ty)PyArena_Malloc(arena, sizeof(*p));
2879 if (!p)
2880 return NULL;
2881 p->kind = Yield_kind;
2882 p->v.Yield.value = value;
2883 p->lineno = lineno;
2884 p->col_offset = col_offset;
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00002885 p->end_lineno = end_lineno;
2886 p->end_col_offset = end_col_offset;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002887 return p;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002888}
2889
2890expr_ty
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00002891YieldFrom(expr_ty value, int lineno, int col_offset, int end_lineno, int
2892 end_col_offset, PyArena *arena)
Benjamin Peterson527c6222012-01-14 08:58:23 -05002893{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002894 expr_ty p;
2895 if (!value) {
2896 PyErr_SetString(PyExc_ValueError,
Batuhan Taskaya091951a2020-05-06 17:29:32 +03002897 "field 'value' is required for YieldFrom");
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002898 return NULL;
2899 }
2900 p = (expr_ty)PyArena_Malloc(arena, sizeof(*p));
2901 if (!p)
2902 return NULL;
2903 p->kind = YieldFrom_kind;
2904 p->v.YieldFrom.value = value;
2905 p->lineno = lineno;
2906 p->col_offset = col_offset;
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00002907 p->end_lineno = end_lineno;
2908 p->end_col_offset = end_col_offset;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002909 return p;
Benjamin Peterson527c6222012-01-14 08:58:23 -05002910}
2911
2912expr_ty
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00002913Compare(expr_ty left, asdl_int_seq * ops, asdl_seq * comparators, int lineno,
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00002914 int col_offset, int end_lineno, int end_col_offset, PyArena *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002915{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002916 expr_ty p;
2917 if (!left) {
2918 PyErr_SetString(PyExc_ValueError,
Batuhan Taskaya091951a2020-05-06 17:29:32 +03002919 "field 'left' is required for Compare");
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002920 return NULL;
2921 }
2922 p = (expr_ty)PyArena_Malloc(arena, sizeof(*p));
2923 if (!p)
2924 return NULL;
2925 p->kind = Compare_kind;
2926 p->v.Compare.left = left;
2927 p->v.Compare.ops = ops;
2928 p->v.Compare.comparators = comparators;
2929 p->lineno = lineno;
2930 p->col_offset = col_offset;
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00002931 p->end_lineno = end_lineno;
2932 p->end_col_offset = end_col_offset;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002933 return p;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002934}
2935
2936expr_ty
Benjamin Peterson025e9eb2015-05-05 20:16:41 -04002937Call(expr_ty func, asdl_seq * args, asdl_seq * keywords, int lineno, int
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00002938 col_offset, int end_lineno, int end_col_offset, PyArena *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002939{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002940 expr_ty p;
2941 if (!func) {
2942 PyErr_SetString(PyExc_ValueError,
Batuhan Taskaya091951a2020-05-06 17:29:32 +03002943 "field 'func' is required for Call");
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002944 return NULL;
2945 }
2946 p = (expr_ty)PyArena_Malloc(arena, sizeof(*p));
2947 if (!p)
2948 return NULL;
2949 p->kind = Call_kind;
2950 p->v.Call.func = func;
2951 p->v.Call.args = args;
2952 p->v.Call.keywords = keywords;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002953 p->lineno = lineno;
2954 p->col_offset = col_offset;
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00002955 p->end_lineno = end_lineno;
2956 p->end_col_offset = end_col_offset;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002957 return p;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002958}
2959
2960expr_ty
Eric V. Smith6f6ff8a2019-05-27 15:31:52 -04002961FormattedValue(expr_ty value, int conversion, expr_ty format_spec, int lineno,
2962 int col_offset, int end_lineno, int end_col_offset, PyArena
2963 *arena)
Eric V. Smith235a6f02015-09-19 14:51:32 -04002964{
2965 expr_ty p;
2966 if (!value) {
2967 PyErr_SetString(PyExc_ValueError,
Batuhan Taskaya091951a2020-05-06 17:29:32 +03002968 "field 'value' is required for FormattedValue");
Eric V. Smith235a6f02015-09-19 14:51:32 -04002969 return NULL;
2970 }
2971 p = (expr_ty)PyArena_Malloc(arena, sizeof(*p));
2972 if (!p)
2973 return NULL;
2974 p->kind = FormattedValue_kind;
2975 p->v.FormattedValue.value = value;
2976 p->v.FormattedValue.conversion = conversion;
2977 p->v.FormattedValue.format_spec = format_spec;
2978 p->lineno = lineno;
2979 p->col_offset = col_offset;
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00002980 p->end_lineno = end_lineno;
2981 p->end_col_offset = end_col_offset;
Eric V. Smith235a6f02015-09-19 14:51:32 -04002982 return p;
2983}
2984
2985expr_ty
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00002986JoinedStr(asdl_seq * values, int lineno, int col_offset, int end_lineno, int
2987 end_col_offset, PyArena *arena)
Eric V. Smith235a6f02015-09-19 14:51:32 -04002988{
2989 expr_ty p;
2990 p = (expr_ty)PyArena_Malloc(arena, sizeof(*p));
2991 if (!p)
2992 return NULL;
2993 p->kind = JoinedStr_kind;
2994 p->v.JoinedStr.values = values;
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
Guido van Rossum10f8ce62019-03-13 13:00:46 -07003003Constant(constant value, string kind, int lineno, int col_offset, int
3004 end_lineno, int end_col_offset, PyArena *arena)
Victor Stinnerf2c1aa12016-01-26 00:40:57 +01003005{
3006 expr_ty p;
3007 if (!value) {
3008 PyErr_SetString(PyExc_ValueError,
Batuhan Taskaya091951a2020-05-06 17:29:32 +03003009 "field 'value' is required for Constant");
Victor Stinnerf2c1aa12016-01-26 00:40:57 +01003010 return NULL;
3011 }
3012 p = (expr_ty)PyArena_Malloc(arena, sizeof(*p));
3013 if (!p)
3014 return NULL;
3015 p->kind = Constant_kind;
3016 p->v.Constant.value = value;
Guido van Rossum10f8ce62019-03-13 13:00:46 -07003017 p->v.Constant.kind = kind;
Victor Stinnerf2c1aa12016-01-26 00:40:57 +01003018 p->lineno = lineno;
3019 p->col_offset = col_offset;
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00003020 p->end_lineno = end_lineno;
3021 p->end_col_offset = end_col_offset;
Victor Stinnerf2c1aa12016-01-26 00:40:57 +01003022 return p;
3023}
3024
3025expr_ty
Martin v. Löwis49c5da12006-03-01 22:49:05 +00003026Attribute(expr_ty value, identifier attr, expr_context_ty ctx, int lineno, int
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00003027 col_offset, int end_lineno, int end_col_offset, PyArena *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00003028{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003029 expr_ty p;
3030 if (!value) {
3031 PyErr_SetString(PyExc_ValueError,
Batuhan Taskaya091951a2020-05-06 17:29:32 +03003032 "field 'value' is required for Attribute");
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003033 return NULL;
3034 }
3035 if (!attr) {
3036 PyErr_SetString(PyExc_ValueError,
Batuhan Taskaya091951a2020-05-06 17:29:32 +03003037 "field 'attr' is required for Attribute");
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003038 return NULL;
3039 }
3040 if (!ctx) {
3041 PyErr_SetString(PyExc_ValueError,
Batuhan Taskaya091951a2020-05-06 17:29:32 +03003042 "field 'ctx' is required for Attribute");
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003043 return NULL;
3044 }
3045 p = (expr_ty)PyArena_Malloc(arena, sizeof(*p));
3046 if (!p)
3047 return NULL;
3048 p->kind = Attribute_kind;
3049 p->v.Attribute.value = value;
3050 p->v.Attribute.attr = attr;
3051 p->v.Attribute.ctx = ctx;
3052 p->lineno = lineno;
3053 p->col_offset = col_offset;
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00003054 p->end_lineno = end_lineno;
3055 p->end_col_offset = end_col_offset;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003056 return p;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00003057}
3058
3059expr_ty
Serhiy Storchaka13d52c22020-03-10 18:52:34 +02003060Subscript(expr_ty value, expr_ty slice, expr_context_ty ctx, int lineno, int
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00003061 col_offset, int end_lineno, int end_col_offset, PyArena *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00003062{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003063 expr_ty p;
3064 if (!value) {
3065 PyErr_SetString(PyExc_ValueError,
Batuhan Taskaya091951a2020-05-06 17:29:32 +03003066 "field 'value' is required for Subscript");
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003067 return NULL;
3068 }
3069 if (!slice) {
3070 PyErr_SetString(PyExc_ValueError,
Batuhan Taskaya091951a2020-05-06 17:29:32 +03003071 "field 'slice' is required for Subscript");
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003072 return NULL;
3073 }
3074 if (!ctx) {
3075 PyErr_SetString(PyExc_ValueError,
Batuhan Taskaya091951a2020-05-06 17:29:32 +03003076 "field 'ctx' is required for Subscript");
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003077 return NULL;
3078 }
3079 p = (expr_ty)PyArena_Malloc(arena, sizeof(*p));
3080 if (!p)
3081 return NULL;
3082 p->kind = Subscript_kind;
3083 p->v.Subscript.value = value;
3084 p->v.Subscript.slice = slice;
3085 p->v.Subscript.ctx = ctx;
3086 p->lineno = lineno;
3087 p->col_offset = col_offset;
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00003088 p->end_lineno = end_lineno;
3089 p->end_col_offset = end_col_offset;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003090 return p;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00003091}
3092
3093expr_ty
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00003094Starred(expr_ty value, expr_context_ty ctx, int lineno, int col_offset, int
3095 end_lineno, int end_col_offset, PyArena *arena)
Guido van Rossum0368b722007-05-11 16:50:42 +00003096{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003097 expr_ty p;
3098 if (!value) {
3099 PyErr_SetString(PyExc_ValueError,
Batuhan Taskaya091951a2020-05-06 17:29:32 +03003100 "field 'value' is required for Starred");
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003101 return NULL;
3102 }
3103 if (!ctx) {
3104 PyErr_SetString(PyExc_ValueError,
Batuhan Taskaya091951a2020-05-06 17:29:32 +03003105 "field 'ctx' is required for Starred");
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003106 return NULL;
3107 }
3108 p = (expr_ty)PyArena_Malloc(arena, sizeof(*p));
3109 if (!p)
3110 return NULL;
3111 p->kind = Starred_kind;
3112 p->v.Starred.value = value;
3113 p->v.Starred.ctx = ctx;
3114 p->lineno = lineno;
3115 p->col_offset = col_offset;
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00003116 p->end_lineno = end_lineno;
3117 p->end_col_offset = end_col_offset;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003118 return p;
Guido van Rossum0368b722007-05-11 16:50:42 +00003119}
3120
3121expr_ty
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00003122Name(identifier id, expr_context_ty ctx, int lineno, int col_offset, int
3123 end_lineno, int end_col_offset, PyArena *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00003124{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003125 expr_ty p;
3126 if (!id) {
3127 PyErr_SetString(PyExc_ValueError,
Batuhan Taskaya091951a2020-05-06 17:29:32 +03003128 "field 'id' is required for Name");
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003129 return NULL;
3130 }
3131 if (!ctx) {
3132 PyErr_SetString(PyExc_ValueError,
Batuhan Taskaya091951a2020-05-06 17:29:32 +03003133 "field 'ctx' is required for Name");
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003134 return NULL;
3135 }
3136 p = (expr_ty)PyArena_Malloc(arena, sizeof(*p));
3137 if (!p)
3138 return NULL;
3139 p->kind = Name_kind;
3140 p->v.Name.id = id;
3141 p->v.Name.ctx = ctx;
3142 p->lineno = lineno;
3143 p->col_offset = col_offset;
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00003144 p->end_lineno = end_lineno;
3145 p->end_col_offset = end_col_offset;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003146 return p;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00003147}
3148
3149expr_ty
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00003150List(asdl_seq * elts, expr_context_ty ctx, int lineno, int col_offset, int
3151 end_lineno, int end_col_offset, PyArena *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00003152{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003153 expr_ty p;
3154 if (!ctx) {
3155 PyErr_SetString(PyExc_ValueError,
Batuhan Taskaya091951a2020-05-06 17:29:32 +03003156 "field 'ctx' is required for List");
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003157 return NULL;
3158 }
3159 p = (expr_ty)PyArena_Malloc(arena, sizeof(*p));
3160 if (!p)
3161 return NULL;
3162 p->kind = List_kind;
3163 p->v.List.elts = elts;
3164 p->v.List.ctx = ctx;
3165 p->lineno = lineno;
3166 p->col_offset = col_offset;
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00003167 p->end_lineno = end_lineno;
3168 p->end_col_offset = end_col_offset;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003169 return p;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00003170}
3171
3172expr_ty
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00003173Tuple(asdl_seq * elts, expr_context_ty ctx, int lineno, int col_offset, int
3174 end_lineno, int end_col_offset, PyArena *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00003175{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003176 expr_ty p;
3177 if (!ctx) {
3178 PyErr_SetString(PyExc_ValueError,
Batuhan Taskaya091951a2020-05-06 17:29:32 +03003179 "field 'ctx' is required for Tuple");
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003180 return NULL;
3181 }
3182 p = (expr_ty)PyArena_Malloc(arena, sizeof(*p));
3183 if (!p)
3184 return NULL;
3185 p->kind = Tuple_kind;
3186 p->v.Tuple.elts = elts;
3187 p->v.Tuple.ctx = ctx;
3188 p->lineno = lineno;
3189 p->col_offset = col_offset;
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00003190 p->end_lineno = end_lineno;
3191 p->end_col_offset = end_col_offset;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003192 return p;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00003193}
3194
Serhiy Storchaka13d52c22020-03-10 18:52:34 +02003195expr_ty
3196Slice(expr_ty lower, expr_ty upper, expr_ty step, int lineno, int col_offset,
3197 int end_lineno, int end_col_offset, PyArena *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00003198{
Serhiy Storchaka13d52c22020-03-10 18:52:34 +02003199 expr_ty p;
3200 p = (expr_ty)PyArena_Malloc(arena, sizeof(*p));
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003201 if (!p)
3202 return NULL;
3203 p->kind = Slice_kind;
3204 p->v.Slice.lower = lower;
3205 p->v.Slice.upper = upper;
3206 p->v.Slice.step = step;
Serhiy Storchaka13d52c22020-03-10 18:52:34 +02003207 p->lineno = lineno;
3208 p->col_offset = col_offset;
3209 p->end_lineno = end_lineno;
3210 p->end_col_offset = end_col_offset;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003211 return p;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00003212}
3213
3214comprehension_ty
Yury Selivanov52c4e7c2016-09-09 10:36:01 -07003215comprehension(expr_ty target, expr_ty iter, asdl_seq * ifs, int is_async,
3216 PyArena *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00003217{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003218 comprehension_ty p;
3219 if (!target) {
3220 PyErr_SetString(PyExc_ValueError,
Batuhan Taskaya091951a2020-05-06 17:29:32 +03003221 "field 'target' is required for comprehension");
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003222 return NULL;
3223 }
3224 if (!iter) {
3225 PyErr_SetString(PyExc_ValueError,
Batuhan Taskaya091951a2020-05-06 17:29:32 +03003226 "field 'iter' is required for comprehension");
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003227 return NULL;
3228 }
3229 p = (comprehension_ty)PyArena_Malloc(arena, sizeof(*p));
3230 if (!p)
3231 return NULL;
3232 p->target = target;
3233 p->iter = iter;
3234 p->ifs = ifs;
Yury Selivanov52c4e7c2016-09-09 10:36:01 -07003235 p->is_async = is_async;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003236 return p;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00003237}
3238
3239excepthandler_ty
Neal Norwitzad74aa82008-03-31 05:14:30 +00003240ExceptHandler(expr_ty type, identifier name, asdl_seq * body, int lineno, int
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00003241 col_offset, int end_lineno, int end_col_offset, PyArena *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00003242{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003243 excepthandler_ty p;
3244 p = (excepthandler_ty)PyArena_Malloc(arena, sizeof(*p));
3245 if (!p)
3246 return NULL;
3247 p->kind = ExceptHandler_kind;
3248 p->v.ExceptHandler.type = type;
3249 p->v.ExceptHandler.name = name;
3250 p->v.ExceptHandler.body = body;
3251 p->lineno = lineno;
3252 p->col_offset = col_offset;
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00003253 p->end_lineno = end_lineno;
3254 p->end_col_offset = end_col_offset;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003255 return p;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00003256}
3257
3258arguments_ty
Miss Islington (bot)cf9a63c2019-07-14 16:49:52 -07003259arguments(asdl_seq * posonlyargs, asdl_seq * args, arg_ty vararg, asdl_seq *
Pablo Galindo8c77b8c2019-04-29 13:36:57 +01003260 kwonlyargs, asdl_seq * kw_defaults, arg_ty kwarg, asdl_seq *
3261 defaults, PyArena *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00003262{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003263 arguments_ty p;
3264 p = (arguments_ty)PyArena_Malloc(arena, sizeof(*p));
3265 if (!p)
3266 return NULL;
Pablo Galindo8c77b8c2019-04-29 13:36:57 +01003267 p->posonlyargs = posonlyargs;
Miss Islington (bot)cf9a63c2019-07-14 16:49:52 -07003268 p->args = args;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003269 p->vararg = vararg;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003270 p->kwonlyargs = kwonlyargs;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003271 p->kw_defaults = kw_defaults;
Victor Stinneree4b59c2013-07-27 00:01:35 +02003272 p->kwarg = kwarg;
3273 p->defaults = defaults;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003274 return p;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00003275}
3276
Neal Norwitzc1505362006-12-28 06:47:50 +00003277arg_ty
Guido van Rossumdcfcd142019-01-31 03:40:27 -08003278arg(identifier arg, expr_ty annotation, string type_comment, int lineno, int
3279 col_offset, int end_lineno, int end_col_offset, PyArena *arena)
Neal Norwitzc1505362006-12-28 06:47:50 +00003280{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003281 arg_ty p;
3282 if (!arg) {
3283 PyErr_SetString(PyExc_ValueError,
Batuhan Taskaya091951a2020-05-06 17:29:32 +03003284 "field 'arg' is required for arg");
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003285 return NULL;
3286 }
3287 p = (arg_ty)PyArena_Malloc(arena, sizeof(*p));
3288 if (!p)
3289 return NULL;
3290 p->arg = arg;
3291 p->annotation = annotation;
Guido van Rossumdcfcd142019-01-31 03:40:27 -08003292 p->type_comment = type_comment;
Victor Stinnerc106c682015-11-06 17:01:48 +01003293 p->lineno = lineno;
3294 p->col_offset = col_offset;
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00003295 p->end_lineno = end_lineno;
3296 p->end_col_offset = end_col_offset;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003297 return p;
Neal Norwitzc1505362006-12-28 06:47:50 +00003298}
3299
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00003300keyword_ty
Pablo Galindo168660b2020-04-02 00:47:39 +01003301keyword(identifier arg, expr_ty value, int lineno, int col_offset, int
3302 end_lineno, int end_col_offset, PyArena *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00003303{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003304 keyword_ty p;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003305 if (!value) {
3306 PyErr_SetString(PyExc_ValueError,
Batuhan Taskaya091951a2020-05-06 17:29:32 +03003307 "field 'value' is required for keyword");
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003308 return NULL;
3309 }
3310 p = (keyword_ty)PyArena_Malloc(arena, sizeof(*p));
3311 if (!p)
3312 return NULL;
3313 p->arg = arg;
3314 p->value = value;
Pablo Galindo168660b2020-04-02 00:47:39 +01003315 p->lineno = lineno;
3316 p->col_offset = col_offset;
3317 p->end_lineno = end_lineno;
3318 p->end_col_offset = end_col_offset;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003319 return p;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00003320}
3321
3322alias_ty
Neal Norwitzadb69fc2005-12-17 20:54:49 +00003323alias(identifier name, identifier asname, PyArena *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00003324{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003325 alias_ty p;
3326 if (!name) {
3327 PyErr_SetString(PyExc_ValueError,
Batuhan Taskaya091951a2020-05-06 17:29:32 +03003328 "field 'name' is required for alias");
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003329 return NULL;
3330 }
3331 p = (alias_ty)PyArena_Malloc(arena, sizeof(*p));
3332 if (!p)
3333 return NULL;
3334 p->name = name;
3335 p->asname = asname;
3336 return p;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00003337}
3338
Benjamin Petersonbf1bbc12011-05-27 13:58:08 -05003339withitem_ty
3340withitem(expr_ty context_expr, expr_ty optional_vars, PyArena *arena)
3341{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003342 withitem_ty p;
3343 if (!context_expr) {
3344 PyErr_SetString(PyExc_ValueError,
Batuhan Taskaya091951a2020-05-06 17:29:32 +03003345 "field 'context_expr' is required for withitem");
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003346 return NULL;
3347 }
3348 p = (withitem_ty)PyArena_Malloc(arena, sizeof(*p));
3349 if (!p)
3350 return NULL;
3351 p->context_expr = context_expr;
3352 p->optional_vars = optional_vars;
3353 return p;
Benjamin Petersonbf1bbc12011-05-27 13:58:08 -05003354}
3355
Guido van Rossumdcfcd142019-01-31 03:40:27 -08003356type_ignore_ty
Michael J. Sullivan933e1502019-05-22 07:54:20 -07003357TypeIgnore(int lineno, string tag, PyArena *arena)
Guido van Rossumdcfcd142019-01-31 03:40:27 -08003358{
3359 type_ignore_ty p;
Michael J. Sullivan933e1502019-05-22 07:54:20 -07003360 if (!tag) {
3361 PyErr_SetString(PyExc_ValueError,
Batuhan Taskaya091951a2020-05-06 17:29:32 +03003362 "field 'tag' is required for TypeIgnore");
Michael J. Sullivan933e1502019-05-22 07:54:20 -07003363 return NULL;
3364 }
Guido van Rossumdcfcd142019-01-31 03:40:27 -08003365 p = (type_ignore_ty)PyArena_Malloc(arena, sizeof(*p));
3366 if (!p)
3367 return NULL;
3368 p->kind = TypeIgnore_kind;
3369 p->v.TypeIgnore.lineno = lineno;
Michael J. Sullivan933e1502019-05-22 07:54:20 -07003370 p->v.TypeIgnore.tag = tag;
Guido van Rossumdcfcd142019-01-31 03:40:27 -08003371 return p;
3372}
3373
Neal Norwitz7b5a6042005-11-13 19:14:20 +00003374
Martin v. Löwisbd260da2006-02-26 19:42:26 +00003375PyObject*
Victor Stinnerf8599272020-07-03 16:57:19 +02003376ast2obj_mod(astmodulestate *state, void* _o)
Neal Norwitz7b5a6042005-11-13 19:14:20 +00003377{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003378 mod_ty o = (mod_ty)_o;
3379 PyObject *result = NULL, *value = NULL;
Dino Viehlandac46eb42019-09-11 10:16:34 -07003380 PyTypeObject *tp;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003381 if (!o) {
Serhiy Storchaka228b12e2017-01-23 09:47:21 +02003382 Py_RETURN_NONE;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003383 }
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003384 switch (o->kind) {
3385 case Module_kind:
Victor Stinnerf8599272020-07-03 16:57:19 +02003386 tp = (PyTypeObject *)state->Module_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07003387 result = PyType_GenericNew(tp, NULL, NULL);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003388 if (!result) goto failed;
Victor Stinnerf8599272020-07-03 16:57:19 +02003389 value = ast2obj_list(state, o->v.Module.body, ast2obj_stmt);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003390 if (!value) goto failed;
Victor Stinnerf8599272020-07-03 16:57:19 +02003391 if (PyObject_SetAttr(result, state->body, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003392 goto failed;
3393 Py_DECREF(value);
Victor Stinnerf8599272020-07-03 16:57:19 +02003394 value = ast2obj_list(state, o->v.Module.type_ignores,
3395 ast2obj_type_ignore);
Guido van Rossumdcfcd142019-01-31 03:40:27 -08003396 if (!value) goto failed;
Victor Stinnerf8599272020-07-03 16:57:19 +02003397 if (PyObject_SetAttr(result, state->type_ignores, value) == -1)
Guido van Rossumdcfcd142019-01-31 03:40:27 -08003398 goto failed;
3399 Py_DECREF(value);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003400 break;
3401 case Interactive_kind:
Victor Stinnerf8599272020-07-03 16:57:19 +02003402 tp = (PyTypeObject *)state->Interactive_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07003403 result = PyType_GenericNew(tp, NULL, NULL);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003404 if (!result) goto failed;
Victor Stinnerf8599272020-07-03 16:57:19 +02003405 value = ast2obj_list(state, o->v.Interactive.body, ast2obj_stmt);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003406 if (!value) goto failed;
Victor Stinnerf8599272020-07-03 16:57:19 +02003407 if (PyObject_SetAttr(result, state->body, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003408 goto failed;
3409 Py_DECREF(value);
3410 break;
3411 case Expression_kind:
Victor Stinnerf8599272020-07-03 16:57:19 +02003412 tp = (PyTypeObject *)state->Expression_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07003413 result = PyType_GenericNew(tp, NULL, NULL);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003414 if (!result) goto failed;
Victor Stinnerf8599272020-07-03 16:57:19 +02003415 value = ast2obj_expr(state, o->v.Expression.body);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003416 if (!value) goto failed;
Victor Stinnerf8599272020-07-03 16:57:19 +02003417 if (PyObject_SetAttr(result, state->body, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003418 goto failed;
3419 Py_DECREF(value);
3420 break;
Guido van Rossumdcfcd142019-01-31 03:40:27 -08003421 case FunctionType_kind:
Victor Stinnerf8599272020-07-03 16:57:19 +02003422 tp = (PyTypeObject *)state->FunctionType_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07003423 result = PyType_GenericNew(tp, NULL, NULL);
Guido van Rossumdcfcd142019-01-31 03:40:27 -08003424 if (!result) goto failed;
Victor Stinnerf8599272020-07-03 16:57:19 +02003425 value = ast2obj_list(state, o->v.FunctionType.argtypes, ast2obj_expr);
Guido van Rossumdcfcd142019-01-31 03:40:27 -08003426 if (!value) goto failed;
Victor Stinnerf8599272020-07-03 16:57:19 +02003427 if (PyObject_SetAttr(result, state->argtypes, value) == -1)
Guido van Rossumdcfcd142019-01-31 03:40:27 -08003428 goto failed;
3429 Py_DECREF(value);
Victor Stinnerf8599272020-07-03 16:57:19 +02003430 value = ast2obj_expr(state, o->v.FunctionType.returns);
Guido van Rossumdcfcd142019-01-31 03:40:27 -08003431 if (!value) goto failed;
Victor Stinnerf8599272020-07-03 16:57:19 +02003432 if (PyObject_SetAttr(result, state->returns, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003433 goto failed;
3434 Py_DECREF(value);
3435 break;
3436 }
3437 return result;
Martin v. Löwisbd260da2006-02-26 19:42:26 +00003438failed:
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003439 Py_XDECREF(value);
3440 Py_XDECREF(result);
3441 return NULL;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00003442}
3443
Martin v. Löwisbd260da2006-02-26 19:42:26 +00003444PyObject*
Victor Stinnerf8599272020-07-03 16:57:19 +02003445ast2obj_stmt(astmodulestate *state, void* _o)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00003446{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003447 stmt_ty o = (stmt_ty)_o;
3448 PyObject *result = NULL, *value = NULL;
Dino Viehlandac46eb42019-09-11 10:16:34 -07003449 PyTypeObject *tp;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003450 if (!o) {
Serhiy Storchaka228b12e2017-01-23 09:47:21 +02003451 Py_RETURN_NONE;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003452 }
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003453 switch (o->kind) {
3454 case FunctionDef_kind:
Victor Stinnerf8599272020-07-03 16:57:19 +02003455 tp = (PyTypeObject *)state->FunctionDef_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07003456 result = PyType_GenericNew(tp, NULL, NULL);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003457 if (!result) goto failed;
Victor Stinnerf8599272020-07-03 16:57:19 +02003458 value = ast2obj_identifier(state, o->v.FunctionDef.name);
Martin v. Löwis577b5b92006-02-27 15:23:19 +00003459 if (!value) goto failed;
Victor Stinnerf8599272020-07-03 16:57:19 +02003460 if (PyObject_SetAttr(result, state->name, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003461 goto failed;
Martin v. Löwis03e5bc02006-03-02 00:31:27 +00003462 Py_DECREF(value);
Victor Stinnerf8599272020-07-03 16:57:19 +02003463 value = ast2obj_arguments(state, o->v.FunctionDef.args);
Martin v. Löwis49c5da12006-03-01 22:49:05 +00003464 if (!value) goto failed;
Victor Stinnerf8599272020-07-03 16:57:19 +02003465 if (PyObject_SetAttr(result, state->args, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003466 goto failed;
Martin v. Löwis03e5bc02006-03-02 00:31:27 +00003467 Py_DECREF(value);
Victor Stinnerf8599272020-07-03 16:57:19 +02003468 value = ast2obj_list(state, o->v.FunctionDef.body, ast2obj_stmt);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003469 if (!value) goto failed;
Victor Stinnerf8599272020-07-03 16:57:19 +02003470 if (PyObject_SetAttr(result, state->body, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003471 goto failed;
3472 Py_DECREF(value);
Victor Stinnerf8599272020-07-03 16:57:19 +02003473 value = ast2obj_list(state, o->v.FunctionDef.decorator_list,
3474 ast2obj_expr);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003475 if (!value) goto failed;
Victor Stinnerf8599272020-07-03 16:57:19 +02003476 if (PyObject_SetAttr(result, state->decorator_list, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003477 goto failed;
3478 Py_DECREF(value);
Victor Stinnerf8599272020-07-03 16:57:19 +02003479 value = ast2obj_expr(state, o->v.FunctionDef.returns);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003480 if (!value) goto failed;
Victor Stinnerf8599272020-07-03 16:57:19 +02003481 if (PyObject_SetAttr(result, state->returns, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003482 goto failed;
3483 Py_DECREF(value);
Victor Stinnerf8599272020-07-03 16:57:19 +02003484 value = ast2obj_string(state, o->v.FunctionDef.type_comment);
Guido van Rossumdcfcd142019-01-31 03:40:27 -08003485 if (!value) goto failed;
Victor Stinnerf8599272020-07-03 16:57:19 +02003486 if (PyObject_SetAttr(result, state->type_comment, value) == -1)
Guido van Rossumdcfcd142019-01-31 03:40:27 -08003487 goto failed;
3488 Py_DECREF(value);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003489 break;
Yury Selivanov75445082015-05-11 22:57:16 -04003490 case AsyncFunctionDef_kind:
Victor Stinnerf8599272020-07-03 16:57:19 +02003491 tp = (PyTypeObject *)state->AsyncFunctionDef_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07003492 result = PyType_GenericNew(tp, NULL, NULL);
Yury Selivanov75445082015-05-11 22:57:16 -04003493 if (!result) goto failed;
Victor Stinnerf8599272020-07-03 16:57:19 +02003494 value = ast2obj_identifier(state, o->v.AsyncFunctionDef.name);
Yury Selivanov75445082015-05-11 22:57:16 -04003495 if (!value) goto failed;
Victor Stinnerf8599272020-07-03 16:57:19 +02003496 if (PyObject_SetAttr(result, state->name, value) == -1)
Yury Selivanov75445082015-05-11 22:57:16 -04003497 goto failed;
3498 Py_DECREF(value);
Victor Stinnerf8599272020-07-03 16:57:19 +02003499 value = ast2obj_arguments(state, o->v.AsyncFunctionDef.args);
Yury Selivanov75445082015-05-11 22:57:16 -04003500 if (!value) goto failed;
Victor Stinnerf8599272020-07-03 16:57:19 +02003501 if (PyObject_SetAttr(result, state->args, value) == -1)
Yury Selivanov75445082015-05-11 22:57:16 -04003502 goto failed;
3503 Py_DECREF(value);
Victor Stinnerf8599272020-07-03 16:57:19 +02003504 value = ast2obj_list(state, o->v.AsyncFunctionDef.body, ast2obj_stmt);
Yury Selivanov75445082015-05-11 22:57:16 -04003505 if (!value) goto failed;
Victor Stinnerf8599272020-07-03 16:57:19 +02003506 if (PyObject_SetAttr(result, state->body, value) == -1)
Yury Selivanov75445082015-05-11 22:57:16 -04003507 goto failed;
3508 Py_DECREF(value);
Victor Stinnerf8599272020-07-03 16:57:19 +02003509 value = ast2obj_list(state, o->v.AsyncFunctionDef.decorator_list,
Yury Selivanov75445082015-05-11 22:57:16 -04003510 ast2obj_expr);
3511 if (!value) goto failed;
Victor Stinnerf8599272020-07-03 16:57:19 +02003512 if (PyObject_SetAttr(result, state->decorator_list, value) == -1)
Yury Selivanov75445082015-05-11 22:57:16 -04003513 goto failed;
3514 Py_DECREF(value);
Victor Stinnerf8599272020-07-03 16:57:19 +02003515 value = ast2obj_expr(state, o->v.AsyncFunctionDef.returns);
Yury Selivanov75445082015-05-11 22:57:16 -04003516 if (!value) goto failed;
Victor Stinnerf8599272020-07-03 16:57:19 +02003517 if (PyObject_SetAttr(result, state->returns, value) == -1)
Yury Selivanov75445082015-05-11 22:57:16 -04003518 goto failed;
3519 Py_DECREF(value);
Victor Stinnerf8599272020-07-03 16:57:19 +02003520 value = ast2obj_string(state, o->v.AsyncFunctionDef.type_comment);
Guido van Rossumdcfcd142019-01-31 03:40:27 -08003521 if (!value) goto failed;
Victor Stinnerf8599272020-07-03 16:57:19 +02003522 if (PyObject_SetAttr(result, state->type_comment, value) == -1)
Guido van Rossumdcfcd142019-01-31 03:40:27 -08003523 goto failed;
3524 Py_DECREF(value);
Yury Selivanov75445082015-05-11 22:57:16 -04003525 break;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003526 case ClassDef_kind:
Victor Stinnerf8599272020-07-03 16:57:19 +02003527 tp = (PyTypeObject *)state->ClassDef_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07003528 result = PyType_GenericNew(tp, NULL, NULL);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003529 if (!result) goto failed;
Victor Stinnerf8599272020-07-03 16:57:19 +02003530 value = ast2obj_identifier(state, o->v.ClassDef.name);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003531 if (!value) goto failed;
Victor Stinnerf8599272020-07-03 16:57:19 +02003532 if (PyObject_SetAttr(result, state->name, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003533 goto failed;
3534 Py_DECREF(value);
Victor Stinnerf8599272020-07-03 16:57:19 +02003535 value = ast2obj_list(state, o->v.ClassDef.bases, ast2obj_expr);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003536 if (!value) goto failed;
Victor Stinnerf8599272020-07-03 16:57:19 +02003537 if (PyObject_SetAttr(result, state->bases, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003538 goto failed;
3539 Py_DECREF(value);
Victor Stinnerf8599272020-07-03 16:57:19 +02003540 value = ast2obj_list(state, o->v.ClassDef.keywords, ast2obj_keyword);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003541 if (!value) goto failed;
Victor Stinnerf8599272020-07-03 16:57:19 +02003542 if (PyObject_SetAttr(result, state->keywords, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003543 goto failed;
3544 Py_DECREF(value);
Victor Stinnerf8599272020-07-03 16:57:19 +02003545 value = ast2obj_list(state, o->v.ClassDef.body, ast2obj_stmt);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003546 if (!value) goto failed;
Victor Stinnerf8599272020-07-03 16:57:19 +02003547 if (PyObject_SetAttr(result, state->body, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003548 goto failed;
3549 Py_DECREF(value);
Victor Stinnerf8599272020-07-03 16:57:19 +02003550 value = ast2obj_list(state, o->v.ClassDef.decorator_list, ast2obj_expr);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003551 if (!value) goto failed;
Victor Stinnerf8599272020-07-03 16:57:19 +02003552 if (PyObject_SetAttr(result, state->decorator_list, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003553 goto failed;
3554 Py_DECREF(value);
3555 break;
3556 case Return_kind:
Victor Stinnerf8599272020-07-03 16:57:19 +02003557 tp = (PyTypeObject *)state->Return_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07003558 result = PyType_GenericNew(tp, NULL, NULL);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003559 if (!result) goto failed;
Victor Stinnerf8599272020-07-03 16:57:19 +02003560 value = ast2obj_expr(state, o->v.Return.value);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003561 if (!value) goto failed;
Victor Stinnerf8599272020-07-03 16:57:19 +02003562 if (PyObject_SetAttr(result, state->value, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003563 goto failed;
3564 Py_DECREF(value);
3565 break;
3566 case Delete_kind:
Victor Stinnerf8599272020-07-03 16:57:19 +02003567 tp = (PyTypeObject *)state->Delete_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07003568 result = PyType_GenericNew(tp, NULL, NULL);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003569 if (!result) goto failed;
Victor Stinnerf8599272020-07-03 16:57:19 +02003570 value = ast2obj_list(state, o->v.Delete.targets, ast2obj_expr);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003571 if (!value) goto failed;
Victor Stinnerf8599272020-07-03 16:57:19 +02003572 if (PyObject_SetAttr(result, state->targets, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003573 goto failed;
3574 Py_DECREF(value);
3575 break;
3576 case Assign_kind:
Victor Stinnerf8599272020-07-03 16:57:19 +02003577 tp = (PyTypeObject *)state->Assign_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07003578 result = PyType_GenericNew(tp, NULL, NULL);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003579 if (!result) goto failed;
Victor Stinnerf8599272020-07-03 16:57:19 +02003580 value = ast2obj_list(state, o->v.Assign.targets, ast2obj_expr);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003581 if (!value) goto failed;
Victor Stinnerf8599272020-07-03 16:57:19 +02003582 if (PyObject_SetAttr(result, state->targets, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003583 goto failed;
3584 Py_DECREF(value);
Victor Stinnerf8599272020-07-03 16:57:19 +02003585 value = ast2obj_expr(state, o->v.Assign.value);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003586 if (!value) goto failed;
Victor Stinnerf8599272020-07-03 16:57:19 +02003587 if (PyObject_SetAttr(result, state->value, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003588 goto failed;
3589 Py_DECREF(value);
Victor Stinnerf8599272020-07-03 16:57:19 +02003590 value = ast2obj_string(state, o->v.Assign.type_comment);
Guido van Rossumdcfcd142019-01-31 03:40:27 -08003591 if (!value) goto failed;
Victor Stinnerf8599272020-07-03 16:57:19 +02003592 if (PyObject_SetAttr(result, state->type_comment, value) == -1)
Guido van Rossumdcfcd142019-01-31 03:40:27 -08003593 goto failed;
3594 Py_DECREF(value);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003595 break;
3596 case AugAssign_kind:
Victor Stinnerf8599272020-07-03 16:57:19 +02003597 tp = (PyTypeObject *)state->AugAssign_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07003598 result = PyType_GenericNew(tp, NULL, NULL);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003599 if (!result) goto failed;
Victor Stinnerf8599272020-07-03 16:57:19 +02003600 value = ast2obj_expr(state, o->v.AugAssign.target);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003601 if (!value) goto failed;
Victor Stinnerf8599272020-07-03 16:57:19 +02003602 if (PyObject_SetAttr(result, state->target, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003603 goto failed;
3604 Py_DECREF(value);
Victor Stinnerf8599272020-07-03 16:57:19 +02003605 value = ast2obj_operator(state, o->v.AugAssign.op);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003606 if (!value) goto failed;
Victor Stinnerf8599272020-07-03 16:57:19 +02003607 if (PyObject_SetAttr(result, state->op, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003608 goto failed;
3609 Py_DECREF(value);
Victor Stinnerf8599272020-07-03 16:57:19 +02003610 value = ast2obj_expr(state, o->v.AugAssign.value);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003611 if (!value) goto failed;
Victor Stinnerf8599272020-07-03 16:57:19 +02003612 if (PyObject_SetAttr(result, state->value, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003613 goto failed;
3614 Py_DECREF(value);
3615 break;
Yury Selivanovf8cb8a12016-09-08 20:50:03 -07003616 case AnnAssign_kind:
Victor Stinnerf8599272020-07-03 16:57:19 +02003617 tp = (PyTypeObject *)state->AnnAssign_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07003618 result = PyType_GenericNew(tp, NULL, NULL);
Yury Selivanovf8cb8a12016-09-08 20:50:03 -07003619 if (!result) goto failed;
Victor Stinnerf8599272020-07-03 16:57:19 +02003620 value = ast2obj_expr(state, o->v.AnnAssign.target);
Yury Selivanovf8cb8a12016-09-08 20:50:03 -07003621 if (!value) goto failed;
Victor Stinnerf8599272020-07-03 16:57:19 +02003622 if (PyObject_SetAttr(result, state->target, value) == -1)
Yury Selivanovf8cb8a12016-09-08 20:50:03 -07003623 goto failed;
3624 Py_DECREF(value);
Victor Stinnerf8599272020-07-03 16:57:19 +02003625 value = ast2obj_expr(state, o->v.AnnAssign.annotation);
Yury Selivanovf8cb8a12016-09-08 20:50:03 -07003626 if (!value) goto failed;
Victor Stinnerf8599272020-07-03 16:57:19 +02003627 if (PyObject_SetAttr(result, state->annotation, value) == -1)
Yury Selivanovf8cb8a12016-09-08 20:50:03 -07003628 goto failed;
3629 Py_DECREF(value);
Victor Stinnerf8599272020-07-03 16:57:19 +02003630 value = ast2obj_expr(state, o->v.AnnAssign.value);
Yury Selivanovf8cb8a12016-09-08 20:50:03 -07003631 if (!value) goto failed;
Victor Stinnerf8599272020-07-03 16:57:19 +02003632 if (PyObject_SetAttr(result, state->value, value) == -1)
Yury Selivanovf8cb8a12016-09-08 20:50:03 -07003633 goto failed;
3634 Py_DECREF(value);
Victor Stinnerf8599272020-07-03 16:57:19 +02003635 value = ast2obj_int(state, o->v.AnnAssign.simple);
Yury Selivanovf8cb8a12016-09-08 20:50:03 -07003636 if (!value) goto failed;
Victor Stinnerf8599272020-07-03 16:57:19 +02003637 if (PyObject_SetAttr(result, state->simple, value) == -1)
Yury Selivanovf8cb8a12016-09-08 20:50:03 -07003638 goto failed;
3639 Py_DECREF(value);
3640 break;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003641 case For_kind:
Victor Stinnerf8599272020-07-03 16:57:19 +02003642 tp = (PyTypeObject *)state->For_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07003643 result = PyType_GenericNew(tp, NULL, NULL);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003644 if (!result) goto failed;
Victor Stinnerf8599272020-07-03 16:57:19 +02003645 value = ast2obj_expr(state, o->v.For.target);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003646 if (!value) goto failed;
Victor Stinnerf8599272020-07-03 16:57:19 +02003647 if (PyObject_SetAttr(result, state->target, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003648 goto failed;
3649 Py_DECREF(value);
Victor Stinnerf8599272020-07-03 16:57:19 +02003650 value = ast2obj_expr(state, o->v.For.iter);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003651 if (!value) goto failed;
Victor Stinnerf8599272020-07-03 16:57:19 +02003652 if (PyObject_SetAttr(result, state->iter, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003653 goto failed;
3654 Py_DECREF(value);
Victor Stinnerf8599272020-07-03 16:57:19 +02003655 value = ast2obj_list(state, o->v.For.body, ast2obj_stmt);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003656 if (!value) goto failed;
Victor Stinnerf8599272020-07-03 16:57:19 +02003657 if (PyObject_SetAttr(result, state->body, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003658 goto failed;
3659 Py_DECREF(value);
Victor Stinnerf8599272020-07-03 16:57:19 +02003660 value = ast2obj_list(state, o->v.For.orelse, ast2obj_stmt);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003661 if (!value) goto failed;
Victor Stinnerf8599272020-07-03 16:57:19 +02003662 if (PyObject_SetAttr(result, state->orelse, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003663 goto failed;
3664 Py_DECREF(value);
Victor Stinnerf8599272020-07-03 16:57:19 +02003665 value = ast2obj_string(state, o->v.For.type_comment);
Guido van Rossumdcfcd142019-01-31 03:40:27 -08003666 if (!value) goto failed;
Victor Stinnerf8599272020-07-03 16:57:19 +02003667 if (PyObject_SetAttr(result, state->type_comment, value) == -1)
Guido van Rossumdcfcd142019-01-31 03:40:27 -08003668 goto failed;
3669 Py_DECREF(value);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003670 break;
Yury Selivanov75445082015-05-11 22:57:16 -04003671 case AsyncFor_kind:
Victor Stinnerf8599272020-07-03 16:57:19 +02003672 tp = (PyTypeObject *)state->AsyncFor_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07003673 result = PyType_GenericNew(tp, NULL, NULL);
Yury Selivanov75445082015-05-11 22:57:16 -04003674 if (!result) goto failed;
Victor Stinnerf8599272020-07-03 16:57:19 +02003675 value = ast2obj_expr(state, o->v.AsyncFor.target);
Yury Selivanov75445082015-05-11 22:57:16 -04003676 if (!value) goto failed;
Victor Stinnerf8599272020-07-03 16:57:19 +02003677 if (PyObject_SetAttr(result, state->target, value) == -1)
Yury Selivanov75445082015-05-11 22:57:16 -04003678 goto failed;
3679 Py_DECREF(value);
Victor Stinnerf8599272020-07-03 16:57:19 +02003680 value = ast2obj_expr(state, o->v.AsyncFor.iter);
Yury Selivanov75445082015-05-11 22:57:16 -04003681 if (!value) goto failed;
Victor Stinnerf8599272020-07-03 16:57:19 +02003682 if (PyObject_SetAttr(result, state->iter, value) == -1)
Yury Selivanov75445082015-05-11 22:57:16 -04003683 goto failed;
3684 Py_DECREF(value);
Victor Stinnerf8599272020-07-03 16:57:19 +02003685 value = ast2obj_list(state, o->v.AsyncFor.body, ast2obj_stmt);
Yury Selivanov75445082015-05-11 22:57:16 -04003686 if (!value) goto failed;
Victor Stinnerf8599272020-07-03 16:57:19 +02003687 if (PyObject_SetAttr(result, state->body, value) == -1)
Yury Selivanov75445082015-05-11 22:57:16 -04003688 goto failed;
3689 Py_DECREF(value);
Victor Stinnerf8599272020-07-03 16:57:19 +02003690 value = ast2obj_list(state, o->v.AsyncFor.orelse, ast2obj_stmt);
Yury Selivanov75445082015-05-11 22:57:16 -04003691 if (!value) goto failed;
Victor Stinnerf8599272020-07-03 16:57:19 +02003692 if (PyObject_SetAttr(result, state->orelse, value) == -1)
Yury Selivanov75445082015-05-11 22:57:16 -04003693 goto failed;
3694 Py_DECREF(value);
Victor Stinnerf8599272020-07-03 16:57:19 +02003695 value = ast2obj_string(state, o->v.AsyncFor.type_comment);
Guido van Rossumdcfcd142019-01-31 03:40:27 -08003696 if (!value) goto failed;
Victor Stinnerf8599272020-07-03 16:57:19 +02003697 if (PyObject_SetAttr(result, state->type_comment, value) == -1)
Guido van Rossumdcfcd142019-01-31 03:40:27 -08003698 goto failed;
3699 Py_DECREF(value);
Yury Selivanov75445082015-05-11 22:57:16 -04003700 break;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003701 case While_kind:
Victor Stinnerf8599272020-07-03 16:57:19 +02003702 tp = (PyTypeObject *)state->While_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07003703 result = PyType_GenericNew(tp, NULL, NULL);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003704 if (!result) goto failed;
Victor Stinnerf8599272020-07-03 16:57:19 +02003705 value = ast2obj_expr(state, o->v.While.test);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003706 if (!value) goto failed;
Victor Stinnerf8599272020-07-03 16:57:19 +02003707 if (PyObject_SetAttr(result, state->test, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003708 goto failed;
3709 Py_DECREF(value);
Victor Stinnerf8599272020-07-03 16:57:19 +02003710 value = ast2obj_list(state, o->v.While.body, ast2obj_stmt);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003711 if (!value) goto failed;
Victor Stinnerf8599272020-07-03 16:57:19 +02003712 if (PyObject_SetAttr(result, state->body, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003713 goto failed;
3714 Py_DECREF(value);
Victor Stinnerf8599272020-07-03 16:57:19 +02003715 value = ast2obj_list(state, o->v.While.orelse, ast2obj_stmt);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003716 if (!value) goto failed;
Victor Stinnerf8599272020-07-03 16:57:19 +02003717 if (PyObject_SetAttr(result, state->orelse, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003718 goto failed;
3719 Py_DECREF(value);
3720 break;
3721 case If_kind:
Victor Stinnerf8599272020-07-03 16:57:19 +02003722 tp = (PyTypeObject *)state->If_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07003723 result = PyType_GenericNew(tp, NULL, NULL);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003724 if (!result) goto failed;
Victor Stinnerf8599272020-07-03 16:57:19 +02003725 value = ast2obj_expr(state, o->v.If.test);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003726 if (!value) goto failed;
Victor Stinnerf8599272020-07-03 16:57:19 +02003727 if (PyObject_SetAttr(result, state->test, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003728 goto failed;
3729 Py_DECREF(value);
Victor Stinnerf8599272020-07-03 16:57:19 +02003730 value = ast2obj_list(state, o->v.If.body, ast2obj_stmt);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003731 if (!value) goto failed;
Victor Stinnerf8599272020-07-03 16:57:19 +02003732 if (PyObject_SetAttr(result, state->body, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003733 goto failed;
3734 Py_DECREF(value);
Victor Stinnerf8599272020-07-03 16:57:19 +02003735 value = ast2obj_list(state, o->v.If.orelse, ast2obj_stmt);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003736 if (!value) goto failed;
Victor Stinnerf8599272020-07-03 16:57:19 +02003737 if (PyObject_SetAttr(result, state->orelse, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003738 goto failed;
3739 Py_DECREF(value);
3740 break;
3741 case With_kind:
Victor Stinnerf8599272020-07-03 16:57:19 +02003742 tp = (PyTypeObject *)state->With_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07003743 result = PyType_GenericNew(tp, NULL, NULL);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003744 if (!result) goto failed;
Victor Stinnerf8599272020-07-03 16:57:19 +02003745 value = ast2obj_list(state, o->v.With.items, ast2obj_withitem);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003746 if (!value) goto failed;
Victor Stinnerf8599272020-07-03 16:57:19 +02003747 if (PyObject_SetAttr(result, state->items, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003748 goto failed;
3749 Py_DECREF(value);
Victor Stinnerf8599272020-07-03 16:57:19 +02003750 value = ast2obj_list(state, o->v.With.body, ast2obj_stmt);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003751 if (!value) goto failed;
Victor Stinnerf8599272020-07-03 16:57:19 +02003752 if (PyObject_SetAttr(result, state->body, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003753 goto failed;
3754 Py_DECREF(value);
Victor Stinnerf8599272020-07-03 16:57:19 +02003755 value = ast2obj_string(state, o->v.With.type_comment);
Guido van Rossumdcfcd142019-01-31 03:40:27 -08003756 if (!value) goto failed;
Victor Stinnerf8599272020-07-03 16:57:19 +02003757 if (PyObject_SetAttr(result, state->type_comment, value) == -1)
Guido van Rossumdcfcd142019-01-31 03:40:27 -08003758 goto failed;
3759 Py_DECREF(value);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003760 break;
Yury Selivanov75445082015-05-11 22:57:16 -04003761 case AsyncWith_kind:
Victor Stinnerf8599272020-07-03 16:57:19 +02003762 tp = (PyTypeObject *)state->AsyncWith_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07003763 result = PyType_GenericNew(tp, NULL, NULL);
Yury Selivanov75445082015-05-11 22:57:16 -04003764 if (!result) goto failed;
Victor Stinnerf8599272020-07-03 16:57:19 +02003765 value = ast2obj_list(state, o->v.AsyncWith.items, ast2obj_withitem);
Yury Selivanov75445082015-05-11 22:57:16 -04003766 if (!value) goto failed;
Victor Stinnerf8599272020-07-03 16:57:19 +02003767 if (PyObject_SetAttr(result, state->items, value) == -1)
Yury Selivanov75445082015-05-11 22:57:16 -04003768 goto failed;
3769 Py_DECREF(value);
Victor Stinnerf8599272020-07-03 16:57:19 +02003770 value = ast2obj_list(state, o->v.AsyncWith.body, ast2obj_stmt);
Yury Selivanov75445082015-05-11 22:57:16 -04003771 if (!value) goto failed;
Victor Stinnerf8599272020-07-03 16:57:19 +02003772 if (PyObject_SetAttr(result, state->body, value) == -1)
Yury Selivanov75445082015-05-11 22:57:16 -04003773 goto failed;
3774 Py_DECREF(value);
Victor Stinnerf8599272020-07-03 16:57:19 +02003775 value = ast2obj_string(state, o->v.AsyncWith.type_comment);
Guido van Rossumdcfcd142019-01-31 03:40:27 -08003776 if (!value) goto failed;
Victor Stinnerf8599272020-07-03 16:57:19 +02003777 if (PyObject_SetAttr(result, state->type_comment, value) == -1)
Guido van Rossumdcfcd142019-01-31 03:40:27 -08003778 goto failed;
3779 Py_DECREF(value);
Yury Selivanov75445082015-05-11 22:57:16 -04003780 break;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003781 case Raise_kind:
Victor Stinnerf8599272020-07-03 16:57:19 +02003782 tp = (PyTypeObject *)state->Raise_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07003783 result = PyType_GenericNew(tp, NULL, NULL);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003784 if (!result) goto failed;
Victor Stinnerf8599272020-07-03 16:57:19 +02003785 value = ast2obj_expr(state, o->v.Raise.exc);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003786 if (!value) goto failed;
Victor Stinnerf8599272020-07-03 16:57:19 +02003787 if (PyObject_SetAttr(result, state->exc, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003788 goto failed;
3789 Py_DECREF(value);
Victor Stinnerf8599272020-07-03 16:57:19 +02003790 value = ast2obj_expr(state, o->v.Raise.cause);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003791 if (!value) goto failed;
Victor Stinnerf8599272020-07-03 16:57:19 +02003792 if (PyObject_SetAttr(result, state->cause, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003793 goto failed;
3794 Py_DECREF(value);
3795 break;
3796 case Try_kind:
Victor Stinnerf8599272020-07-03 16:57:19 +02003797 tp = (PyTypeObject *)state->Try_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07003798 result = PyType_GenericNew(tp, NULL, NULL);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003799 if (!result) goto failed;
Victor Stinnerf8599272020-07-03 16:57:19 +02003800 value = ast2obj_list(state, o->v.Try.body, ast2obj_stmt);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003801 if (!value) goto failed;
Victor Stinnerf8599272020-07-03 16:57:19 +02003802 if (PyObject_SetAttr(result, state->body, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003803 goto failed;
3804 Py_DECREF(value);
Victor Stinnerf8599272020-07-03 16:57:19 +02003805 value = ast2obj_list(state, o->v.Try.handlers, ast2obj_excepthandler);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003806 if (!value) goto failed;
Victor Stinnerf8599272020-07-03 16:57:19 +02003807 if (PyObject_SetAttr(result, state->handlers, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003808 goto failed;
3809 Py_DECREF(value);
Victor Stinnerf8599272020-07-03 16:57:19 +02003810 value = ast2obj_list(state, o->v.Try.orelse, ast2obj_stmt);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003811 if (!value) goto failed;
Victor Stinnerf8599272020-07-03 16:57:19 +02003812 if (PyObject_SetAttr(result, state->orelse, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003813 goto failed;
3814 Py_DECREF(value);
Victor Stinnerf8599272020-07-03 16:57:19 +02003815 value = ast2obj_list(state, o->v.Try.finalbody, ast2obj_stmt);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003816 if (!value) goto failed;
Victor Stinnerf8599272020-07-03 16:57:19 +02003817 if (PyObject_SetAttr(result, state->finalbody, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003818 goto failed;
3819 Py_DECREF(value);
3820 break;
3821 case Assert_kind:
Victor Stinnerf8599272020-07-03 16:57:19 +02003822 tp = (PyTypeObject *)state->Assert_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07003823 result = PyType_GenericNew(tp, NULL, NULL);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003824 if (!result) goto failed;
Victor Stinnerf8599272020-07-03 16:57:19 +02003825 value = ast2obj_expr(state, o->v.Assert.test);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003826 if (!value) goto failed;
Victor Stinnerf8599272020-07-03 16:57:19 +02003827 if (PyObject_SetAttr(result, state->test, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003828 goto failed;
3829 Py_DECREF(value);
Victor Stinnerf8599272020-07-03 16:57:19 +02003830 value = ast2obj_expr(state, o->v.Assert.msg);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003831 if (!value) goto failed;
Victor Stinnerf8599272020-07-03 16:57:19 +02003832 if (PyObject_SetAttr(result, state->msg, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003833 goto failed;
3834 Py_DECREF(value);
3835 break;
3836 case Import_kind:
Victor Stinnerf8599272020-07-03 16:57:19 +02003837 tp = (PyTypeObject *)state->Import_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07003838 result = PyType_GenericNew(tp, NULL, NULL);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003839 if (!result) goto failed;
Victor Stinnerf8599272020-07-03 16:57:19 +02003840 value = ast2obj_list(state, o->v.Import.names, ast2obj_alias);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003841 if (!value) goto failed;
Victor Stinnerf8599272020-07-03 16:57:19 +02003842 if (PyObject_SetAttr(result, state->names, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003843 goto failed;
3844 Py_DECREF(value);
3845 break;
3846 case ImportFrom_kind:
Victor Stinnerf8599272020-07-03 16:57:19 +02003847 tp = (PyTypeObject *)state->ImportFrom_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07003848 result = PyType_GenericNew(tp, NULL, NULL);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003849 if (!result) goto failed;
Victor Stinnerf8599272020-07-03 16:57:19 +02003850 value = ast2obj_identifier(state, o->v.ImportFrom.module);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003851 if (!value) goto failed;
Victor Stinnerf8599272020-07-03 16:57:19 +02003852 if (PyObject_SetAttr(result, state->module, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003853 goto failed;
3854 Py_DECREF(value);
Victor Stinnerf8599272020-07-03 16:57:19 +02003855 value = ast2obj_list(state, o->v.ImportFrom.names, ast2obj_alias);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003856 if (!value) goto failed;
Victor Stinnerf8599272020-07-03 16:57:19 +02003857 if (PyObject_SetAttr(result, state->names, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003858 goto failed;
3859 Py_DECREF(value);
Victor Stinnerf8599272020-07-03 16:57:19 +02003860 value = ast2obj_int(state, o->v.ImportFrom.level);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003861 if (!value) goto failed;
Victor Stinnerf8599272020-07-03 16:57:19 +02003862 if (PyObject_SetAttr(result, state->level, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003863 goto failed;
3864 Py_DECREF(value);
3865 break;
3866 case Global_kind:
Victor Stinnerf8599272020-07-03 16:57:19 +02003867 tp = (PyTypeObject *)state->Global_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07003868 result = PyType_GenericNew(tp, NULL, NULL);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003869 if (!result) goto failed;
Victor Stinnerf8599272020-07-03 16:57:19 +02003870 value = ast2obj_list(state, o->v.Global.names, ast2obj_identifier);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003871 if (!value) goto failed;
Victor Stinnerf8599272020-07-03 16:57:19 +02003872 if (PyObject_SetAttr(result, state->names, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003873 goto failed;
3874 Py_DECREF(value);
3875 break;
3876 case Nonlocal_kind:
Victor Stinnerf8599272020-07-03 16:57:19 +02003877 tp = (PyTypeObject *)state->Nonlocal_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07003878 result = PyType_GenericNew(tp, NULL, NULL);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003879 if (!result) goto failed;
Victor Stinnerf8599272020-07-03 16:57:19 +02003880 value = ast2obj_list(state, o->v.Nonlocal.names, ast2obj_identifier);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003881 if (!value) goto failed;
Victor Stinnerf8599272020-07-03 16:57:19 +02003882 if (PyObject_SetAttr(result, state->names, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003883 goto failed;
3884 Py_DECREF(value);
3885 break;
3886 case Expr_kind:
Victor Stinnerf8599272020-07-03 16:57:19 +02003887 tp = (PyTypeObject *)state->Expr_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07003888 result = PyType_GenericNew(tp, NULL, NULL);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003889 if (!result) goto failed;
Victor Stinnerf8599272020-07-03 16:57:19 +02003890 value = ast2obj_expr(state, o->v.Expr.value);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003891 if (!value) goto failed;
Victor Stinnerf8599272020-07-03 16:57:19 +02003892 if (PyObject_SetAttr(result, state->value, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003893 goto failed;
3894 Py_DECREF(value);
3895 break;
3896 case Pass_kind:
Victor Stinnerf8599272020-07-03 16:57:19 +02003897 tp = (PyTypeObject *)state->Pass_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07003898 result = PyType_GenericNew(tp, NULL, NULL);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003899 if (!result) goto failed;
3900 break;
3901 case Break_kind:
Victor Stinnerf8599272020-07-03 16:57:19 +02003902 tp = (PyTypeObject *)state->Break_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07003903 result = PyType_GenericNew(tp, NULL, NULL);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003904 if (!result) goto failed;
3905 break;
3906 case Continue_kind:
Victor Stinnerf8599272020-07-03 16:57:19 +02003907 tp = (PyTypeObject *)state->Continue_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07003908 result = PyType_GenericNew(tp, NULL, NULL);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003909 if (!result) goto failed;
3910 break;
3911 }
Victor Stinnerf8599272020-07-03 16:57:19 +02003912 value = ast2obj_int(state, o->lineno);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003913 if (!value) goto failed;
Victor Stinnerf8599272020-07-03 16:57:19 +02003914 if (PyObject_SetAttr(result, state->lineno, value) < 0)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003915 goto failed;
3916 Py_DECREF(value);
Victor Stinnerf8599272020-07-03 16:57:19 +02003917 value = ast2obj_int(state, o->col_offset);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003918 if (!value) goto failed;
Victor Stinnerf8599272020-07-03 16:57:19 +02003919 if (PyObject_SetAttr(result, state->col_offset, value) < 0)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003920 goto failed;
3921 Py_DECREF(value);
Victor Stinnerf8599272020-07-03 16:57:19 +02003922 value = ast2obj_int(state, o->end_lineno);
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00003923 if (!value) goto failed;
Victor Stinnerf8599272020-07-03 16:57:19 +02003924 if (PyObject_SetAttr(result, state->end_lineno, value) < 0)
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00003925 goto failed;
3926 Py_DECREF(value);
Victor Stinnerf8599272020-07-03 16:57:19 +02003927 value = ast2obj_int(state, o->end_col_offset);
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00003928 if (!value) goto failed;
Victor Stinnerf8599272020-07-03 16:57:19 +02003929 if (PyObject_SetAttr(result, state->end_col_offset, value) < 0)
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00003930 goto failed;
3931 Py_DECREF(value);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003932 return result;
Martin v. Löwisbd260da2006-02-26 19:42:26 +00003933failed:
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003934 Py_XDECREF(value);
3935 Py_XDECREF(result);
3936 return NULL;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00003937}
3938
Martin v. Löwisbd260da2006-02-26 19:42:26 +00003939PyObject*
Victor Stinnerf8599272020-07-03 16:57:19 +02003940ast2obj_expr(astmodulestate *state, void* _o)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00003941{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003942 expr_ty o = (expr_ty)_o;
3943 PyObject *result = NULL, *value = NULL;
Dino Viehlandac46eb42019-09-11 10:16:34 -07003944 PyTypeObject *tp;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003945 if (!o) {
Serhiy Storchaka228b12e2017-01-23 09:47:21 +02003946 Py_RETURN_NONE;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003947 }
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003948 switch (o->kind) {
3949 case BoolOp_kind:
Victor Stinnerf8599272020-07-03 16:57:19 +02003950 tp = (PyTypeObject *)state->BoolOp_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07003951 result = PyType_GenericNew(tp, NULL, NULL);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003952 if (!result) goto failed;
Victor Stinnerf8599272020-07-03 16:57:19 +02003953 value = ast2obj_boolop(state, o->v.BoolOp.op);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003954 if (!value) goto failed;
Victor Stinnerf8599272020-07-03 16:57:19 +02003955 if (PyObject_SetAttr(result, state->op, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003956 goto failed;
3957 Py_DECREF(value);
Victor Stinnerf8599272020-07-03 16:57:19 +02003958 value = ast2obj_list(state, o->v.BoolOp.values, ast2obj_expr);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003959 if (!value) goto failed;
Victor Stinnerf8599272020-07-03 16:57:19 +02003960 if (PyObject_SetAttr(result, state->values, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003961 goto failed;
3962 Py_DECREF(value);
3963 break;
Emily Morehouse8f59ee02019-01-24 16:49:56 -07003964 case NamedExpr_kind:
Victor Stinnerf8599272020-07-03 16:57:19 +02003965 tp = (PyTypeObject *)state->NamedExpr_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07003966 result = PyType_GenericNew(tp, NULL, NULL);
Emily Morehouse8f59ee02019-01-24 16:49:56 -07003967 if (!result) goto failed;
Victor Stinnerf8599272020-07-03 16:57:19 +02003968 value = ast2obj_expr(state, o->v.NamedExpr.target);
Emily Morehouse8f59ee02019-01-24 16:49:56 -07003969 if (!value) goto failed;
Victor Stinnerf8599272020-07-03 16:57:19 +02003970 if (PyObject_SetAttr(result, state->target, value) == -1)
Emily Morehouse8f59ee02019-01-24 16:49:56 -07003971 goto failed;
3972 Py_DECREF(value);
Victor Stinnerf8599272020-07-03 16:57:19 +02003973 value = ast2obj_expr(state, o->v.NamedExpr.value);
Emily Morehouse8f59ee02019-01-24 16:49:56 -07003974 if (!value) goto failed;
Victor Stinnerf8599272020-07-03 16:57:19 +02003975 if (PyObject_SetAttr(result, state->value, value) == -1)
Emily Morehouse8f59ee02019-01-24 16:49:56 -07003976 goto failed;
3977 Py_DECREF(value);
3978 break;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003979 case BinOp_kind:
Victor Stinnerf8599272020-07-03 16:57:19 +02003980 tp = (PyTypeObject *)state->BinOp_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07003981 result = PyType_GenericNew(tp, NULL, NULL);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003982 if (!result) goto failed;
Victor Stinnerf8599272020-07-03 16:57:19 +02003983 value = ast2obj_expr(state, o->v.BinOp.left);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003984 if (!value) goto failed;
Victor Stinnerf8599272020-07-03 16:57:19 +02003985 if (PyObject_SetAttr(result, state->left, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003986 goto failed;
3987 Py_DECREF(value);
Victor Stinnerf8599272020-07-03 16:57:19 +02003988 value = ast2obj_operator(state, o->v.BinOp.op);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003989 if (!value) goto failed;
Victor Stinnerf8599272020-07-03 16:57:19 +02003990 if (PyObject_SetAttr(result, state->op, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003991 goto failed;
3992 Py_DECREF(value);
Victor Stinnerf8599272020-07-03 16:57:19 +02003993 value = ast2obj_expr(state, o->v.BinOp.right);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003994 if (!value) goto failed;
Victor Stinnerf8599272020-07-03 16:57:19 +02003995 if (PyObject_SetAttr(result, state->right, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003996 goto failed;
3997 Py_DECREF(value);
3998 break;
3999 case UnaryOp_kind:
Victor Stinnerf8599272020-07-03 16:57:19 +02004000 tp = (PyTypeObject *)state->UnaryOp_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07004001 result = PyType_GenericNew(tp, NULL, NULL);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004002 if (!result) goto failed;
Victor Stinnerf8599272020-07-03 16:57:19 +02004003 value = ast2obj_unaryop(state, o->v.UnaryOp.op);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004004 if (!value) goto failed;
Victor Stinnerf8599272020-07-03 16:57:19 +02004005 if (PyObject_SetAttr(result, state->op, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004006 goto failed;
4007 Py_DECREF(value);
Victor Stinnerf8599272020-07-03 16:57:19 +02004008 value = ast2obj_expr(state, o->v.UnaryOp.operand);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004009 if (!value) goto failed;
Victor Stinnerf8599272020-07-03 16:57:19 +02004010 if (PyObject_SetAttr(result, state->operand, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004011 goto failed;
4012 Py_DECREF(value);
4013 break;
4014 case Lambda_kind:
Victor Stinnerf8599272020-07-03 16:57:19 +02004015 tp = (PyTypeObject *)state->Lambda_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07004016 result = PyType_GenericNew(tp, NULL, NULL);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004017 if (!result) goto failed;
Victor Stinnerf8599272020-07-03 16:57:19 +02004018 value = ast2obj_arguments(state, o->v.Lambda.args);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004019 if (!value) goto failed;
Victor Stinnerf8599272020-07-03 16:57:19 +02004020 if (PyObject_SetAttr(result, state->args, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004021 goto failed;
4022 Py_DECREF(value);
Victor Stinnerf8599272020-07-03 16:57:19 +02004023 value = ast2obj_expr(state, o->v.Lambda.body);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004024 if (!value) goto failed;
Victor Stinnerf8599272020-07-03 16:57:19 +02004025 if (PyObject_SetAttr(result, state->body, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004026 goto failed;
4027 Py_DECREF(value);
4028 break;
4029 case IfExp_kind:
Victor Stinnerf8599272020-07-03 16:57:19 +02004030 tp = (PyTypeObject *)state->IfExp_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07004031 result = PyType_GenericNew(tp, NULL, NULL);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004032 if (!result) goto failed;
Victor Stinnerf8599272020-07-03 16:57:19 +02004033 value = ast2obj_expr(state, o->v.IfExp.test);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004034 if (!value) goto failed;
Victor Stinnerf8599272020-07-03 16:57:19 +02004035 if (PyObject_SetAttr(result, state->test, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004036 goto failed;
4037 Py_DECREF(value);
Victor Stinnerf8599272020-07-03 16:57:19 +02004038 value = ast2obj_expr(state, o->v.IfExp.body);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004039 if (!value) goto failed;
Victor Stinnerf8599272020-07-03 16:57:19 +02004040 if (PyObject_SetAttr(result, state->body, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004041 goto failed;
4042 Py_DECREF(value);
Victor Stinnerf8599272020-07-03 16:57:19 +02004043 value = ast2obj_expr(state, o->v.IfExp.orelse);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004044 if (!value) goto failed;
Victor Stinnerf8599272020-07-03 16:57:19 +02004045 if (PyObject_SetAttr(result, state->orelse, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004046 goto failed;
4047 Py_DECREF(value);
4048 break;
4049 case Dict_kind:
Victor Stinnerf8599272020-07-03 16:57:19 +02004050 tp = (PyTypeObject *)state->Dict_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07004051 result = PyType_GenericNew(tp, NULL, NULL);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004052 if (!result) goto failed;
Victor Stinnerf8599272020-07-03 16:57:19 +02004053 value = ast2obj_list(state, o->v.Dict.keys, ast2obj_expr);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004054 if (!value) goto failed;
Victor Stinnerf8599272020-07-03 16:57:19 +02004055 if (PyObject_SetAttr(result, state->keys, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004056 goto failed;
4057 Py_DECREF(value);
Victor Stinnerf8599272020-07-03 16:57:19 +02004058 value = ast2obj_list(state, o->v.Dict.values, ast2obj_expr);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004059 if (!value) goto failed;
Victor Stinnerf8599272020-07-03 16:57:19 +02004060 if (PyObject_SetAttr(result, state->values, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004061 goto failed;
4062 Py_DECREF(value);
4063 break;
4064 case Set_kind:
Victor Stinnerf8599272020-07-03 16:57:19 +02004065 tp = (PyTypeObject *)state->Set_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07004066 result = PyType_GenericNew(tp, NULL, NULL);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004067 if (!result) goto failed;
Victor Stinnerf8599272020-07-03 16:57:19 +02004068 value = ast2obj_list(state, o->v.Set.elts, ast2obj_expr);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004069 if (!value) goto failed;
Victor Stinnerf8599272020-07-03 16:57:19 +02004070 if (PyObject_SetAttr(result, state->elts, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004071 goto failed;
4072 Py_DECREF(value);
4073 break;
4074 case ListComp_kind:
Victor Stinnerf8599272020-07-03 16:57:19 +02004075 tp = (PyTypeObject *)state->ListComp_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07004076 result = PyType_GenericNew(tp, NULL, NULL);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004077 if (!result) goto failed;
Victor Stinnerf8599272020-07-03 16:57:19 +02004078 value = ast2obj_expr(state, o->v.ListComp.elt);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004079 if (!value) goto failed;
Victor Stinnerf8599272020-07-03 16:57:19 +02004080 if (PyObject_SetAttr(result, state->elt, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004081 goto failed;
4082 Py_DECREF(value);
Victor Stinnerf8599272020-07-03 16:57:19 +02004083 value = ast2obj_list(state, o->v.ListComp.generators,
4084 ast2obj_comprehension);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004085 if (!value) goto failed;
Victor Stinnerf8599272020-07-03 16:57:19 +02004086 if (PyObject_SetAttr(result, state->generators, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004087 goto failed;
4088 Py_DECREF(value);
4089 break;
4090 case SetComp_kind:
Victor Stinnerf8599272020-07-03 16:57:19 +02004091 tp = (PyTypeObject *)state->SetComp_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;
Victor Stinnerf8599272020-07-03 16:57:19 +02004094 value = ast2obj_expr(state, o->v.SetComp.elt);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004095 if (!value) goto failed;
Victor Stinnerf8599272020-07-03 16:57:19 +02004096 if (PyObject_SetAttr(result, state->elt, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004097 goto failed;
4098 Py_DECREF(value);
Victor Stinnerf8599272020-07-03 16:57:19 +02004099 value = ast2obj_list(state, o->v.SetComp.generators,
4100 ast2obj_comprehension);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004101 if (!value) goto failed;
Victor Stinnerf8599272020-07-03 16:57:19 +02004102 if (PyObject_SetAttr(result, state->generators, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004103 goto failed;
4104 Py_DECREF(value);
4105 break;
4106 case DictComp_kind:
Victor Stinnerf8599272020-07-03 16:57:19 +02004107 tp = (PyTypeObject *)state->DictComp_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07004108 result = PyType_GenericNew(tp, NULL, NULL);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004109 if (!result) goto failed;
Victor Stinnerf8599272020-07-03 16:57:19 +02004110 value = ast2obj_expr(state, o->v.DictComp.key);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004111 if (!value) goto failed;
Victor Stinnerf8599272020-07-03 16:57:19 +02004112 if (PyObject_SetAttr(result, state->key, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004113 goto failed;
4114 Py_DECREF(value);
Victor Stinnerf8599272020-07-03 16:57:19 +02004115 value = ast2obj_expr(state, o->v.DictComp.value);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004116 if (!value) goto failed;
Victor Stinnerf8599272020-07-03 16:57:19 +02004117 if (PyObject_SetAttr(result, state->value, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004118 goto failed;
4119 Py_DECREF(value);
Victor Stinnerf8599272020-07-03 16:57:19 +02004120 value = ast2obj_list(state, o->v.DictComp.generators,
4121 ast2obj_comprehension);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004122 if (!value) goto failed;
Victor Stinnerf8599272020-07-03 16:57:19 +02004123 if (PyObject_SetAttr(result, state->generators, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004124 goto failed;
4125 Py_DECREF(value);
4126 break;
4127 case GeneratorExp_kind:
Victor Stinnerf8599272020-07-03 16:57:19 +02004128 tp = (PyTypeObject *)state->GeneratorExp_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07004129 result = PyType_GenericNew(tp, NULL, NULL);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004130 if (!result) goto failed;
Victor Stinnerf8599272020-07-03 16:57:19 +02004131 value = ast2obj_expr(state, o->v.GeneratorExp.elt);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004132 if (!value) goto failed;
Victor Stinnerf8599272020-07-03 16:57:19 +02004133 if (PyObject_SetAttr(result, state->elt, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004134 goto failed;
4135 Py_DECREF(value);
Victor Stinnerf8599272020-07-03 16:57:19 +02004136 value = ast2obj_list(state, o->v.GeneratorExp.generators,
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004137 ast2obj_comprehension);
4138 if (!value) goto failed;
Victor Stinnerf8599272020-07-03 16:57:19 +02004139 if (PyObject_SetAttr(result, state->generators, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004140 goto failed;
4141 Py_DECREF(value);
4142 break;
Yury Selivanov75445082015-05-11 22:57:16 -04004143 case Await_kind:
Victor Stinnerf8599272020-07-03 16:57:19 +02004144 tp = (PyTypeObject *)state->Await_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07004145 result = PyType_GenericNew(tp, NULL, NULL);
Yury Selivanov75445082015-05-11 22:57:16 -04004146 if (!result) goto failed;
Victor Stinnerf8599272020-07-03 16:57:19 +02004147 value = ast2obj_expr(state, o->v.Await.value);
Yury Selivanov75445082015-05-11 22:57:16 -04004148 if (!value) goto failed;
Victor Stinnerf8599272020-07-03 16:57:19 +02004149 if (PyObject_SetAttr(result, state->value, value) == -1)
Yury Selivanov75445082015-05-11 22:57:16 -04004150 goto failed;
4151 Py_DECREF(value);
4152 break;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004153 case Yield_kind:
Victor Stinnerf8599272020-07-03 16:57:19 +02004154 tp = (PyTypeObject *)state->Yield_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07004155 result = PyType_GenericNew(tp, NULL, NULL);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004156 if (!result) goto failed;
Victor Stinnerf8599272020-07-03 16:57:19 +02004157 value = ast2obj_expr(state, o->v.Yield.value);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004158 if (!value) goto failed;
Victor Stinnerf8599272020-07-03 16:57:19 +02004159 if (PyObject_SetAttr(result, state->value, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004160 goto failed;
4161 Py_DECREF(value);
4162 break;
4163 case YieldFrom_kind:
Victor Stinnerf8599272020-07-03 16:57:19 +02004164 tp = (PyTypeObject *)state->YieldFrom_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07004165 result = PyType_GenericNew(tp, NULL, NULL);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004166 if (!result) goto failed;
Victor Stinnerf8599272020-07-03 16:57:19 +02004167 value = ast2obj_expr(state, o->v.YieldFrom.value);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004168 if (!value) goto failed;
Victor Stinnerf8599272020-07-03 16:57:19 +02004169 if (PyObject_SetAttr(result, state->value, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004170 goto failed;
4171 Py_DECREF(value);
4172 break;
4173 case Compare_kind:
Victor Stinnerf8599272020-07-03 16:57:19 +02004174 tp = (PyTypeObject *)state->Compare_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07004175 result = PyType_GenericNew(tp, NULL, NULL);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004176 if (!result) goto failed;
Victor Stinnerf8599272020-07-03 16:57:19 +02004177 value = ast2obj_expr(state, o->v.Compare.left);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004178 if (!value) goto failed;
Victor Stinnerf8599272020-07-03 16:57:19 +02004179 if (PyObject_SetAttr(result, state->left, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004180 goto failed;
4181 Py_DECREF(value);
4182 {
4183 Py_ssize_t i, n = asdl_seq_LEN(o->v.Compare.ops);
4184 value = PyList_New(n);
4185 if (!value) goto failed;
4186 for(i = 0; i < n; i++)
Victor Stinnerf8599272020-07-03 16:57:19 +02004187 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 +00004188 }
Martin v. Löwis577b5b92006-02-27 15:23:19 +00004189 if (!value) goto failed;
Victor Stinnerf8599272020-07-03 16:57:19 +02004190 if (PyObject_SetAttr(result, state->ops, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004191 goto failed;
Martin v. Löwis03e5bc02006-03-02 00:31:27 +00004192 Py_DECREF(value);
Victor Stinnerf8599272020-07-03 16:57:19 +02004193 value = ast2obj_list(state, o->v.Compare.comparators, ast2obj_expr);
Martin v. Löwis49c5da12006-03-01 22:49:05 +00004194 if (!value) goto failed;
Victor Stinnerf8599272020-07-03 16:57:19 +02004195 if (PyObject_SetAttr(result, state->comparators, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004196 goto failed;
Martin v. Löwis03e5bc02006-03-02 00:31:27 +00004197 Py_DECREF(value);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004198 break;
4199 case Call_kind:
Victor Stinnerf8599272020-07-03 16:57:19 +02004200 tp = (PyTypeObject *)state->Call_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07004201 result = PyType_GenericNew(tp, NULL, NULL);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004202 if (!result) goto failed;
Victor Stinnerf8599272020-07-03 16:57:19 +02004203 value = ast2obj_expr(state, o->v.Call.func);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004204 if (!value) goto failed;
Victor Stinnerf8599272020-07-03 16:57:19 +02004205 if (PyObject_SetAttr(result, state->func, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004206 goto failed;
4207 Py_DECREF(value);
Victor Stinnerf8599272020-07-03 16:57:19 +02004208 value = ast2obj_list(state, o->v.Call.args, ast2obj_expr);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004209 if (!value) goto failed;
Victor Stinnerf8599272020-07-03 16:57:19 +02004210 if (PyObject_SetAttr(result, state->args, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004211 goto failed;
4212 Py_DECREF(value);
Victor Stinnerf8599272020-07-03 16:57:19 +02004213 value = ast2obj_list(state, o->v.Call.keywords, ast2obj_keyword);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004214 if (!value) goto failed;
Victor Stinnerf8599272020-07-03 16:57:19 +02004215 if (PyObject_SetAttr(result, state->keywords, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004216 goto failed;
4217 Py_DECREF(value);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004218 break;
Eric V. Smith235a6f02015-09-19 14:51:32 -04004219 case FormattedValue_kind:
Victor Stinnerf8599272020-07-03 16:57:19 +02004220 tp = (PyTypeObject *)state->FormattedValue_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07004221 result = PyType_GenericNew(tp, NULL, NULL);
Eric V. Smith235a6f02015-09-19 14:51:32 -04004222 if (!result) goto failed;
Victor Stinnerf8599272020-07-03 16:57:19 +02004223 value = ast2obj_expr(state, o->v.FormattedValue.value);
Eric V. Smith235a6f02015-09-19 14:51:32 -04004224 if (!value) goto failed;
Victor Stinnerf8599272020-07-03 16:57:19 +02004225 if (PyObject_SetAttr(result, state->value, value) == -1)
Eric V. Smith235a6f02015-09-19 14:51:32 -04004226 goto failed;
4227 Py_DECREF(value);
Victor Stinnerf8599272020-07-03 16:57:19 +02004228 value = ast2obj_int(state, o->v.FormattedValue.conversion);
Eric V. Smith235a6f02015-09-19 14:51:32 -04004229 if (!value) goto failed;
Victor Stinnerf8599272020-07-03 16:57:19 +02004230 if (PyObject_SetAttr(result, state->conversion, value) == -1)
Eric V. Smith235a6f02015-09-19 14:51:32 -04004231 goto failed;
4232 Py_DECREF(value);
Victor Stinnerf8599272020-07-03 16:57:19 +02004233 value = ast2obj_expr(state, o->v.FormattedValue.format_spec);
Eric V. Smith235a6f02015-09-19 14:51:32 -04004234 if (!value) goto failed;
Victor Stinnerf8599272020-07-03 16:57:19 +02004235 if (PyObject_SetAttr(result, state->format_spec, value) == -1)
Eric V. Smith235a6f02015-09-19 14:51:32 -04004236 goto failed;
4237 Py_DECREF(value);
4238 break;
4239 case JoinedStr_kind:
Victor Stinnerf8599272020-07-03 16:57:19 +02004240 tp = (PyTypeObject *)state->JoinedStr_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07004241 result = PyType_GenericNew(tp, NULL, NULL);
Eric V. Smith235a6f02015-09-19 14:51:32 -04004242 if (!result) goto failed;
Victor Stinnerf8599272020-07-03 16:57:19 +02004243 value = ast2obj_list(state, o->v.JoinedStr.values, ast2obj_expr);
Eric V. Smith235a6f02015-09-19 14:51:32 -04004244 if (!value) goto failed;
Victor Stinnerf8599272020-07-03 16:57:19 +02004245 if (PyObject_SetAttr(result, state->values, value) == -1)
Eric V. Smith235a6f02015-09-19 14:51:32 -04004246 goto failed;
4247 Py_DECREF(value);
4248 break;
Victor Stinnerf2c1aa12016-01-26 00:40:57 +01004249 case Constant_kind:
Victor Stinnerf8599272020-07-03 16:57:19 +02004250 tp = (PyTypeObject *)state->Constant_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07004251 result = PyType_GenericNew(tp, NULL, NULL);
Victor Stinnerf2c1aa12016-01-26 00:40:57 +01004252 if (!result) goto failed;
Victor Stinnerf8599272020-07-03 16:57:19 +02004253 value = ast2obj_constant(state, o->v.Constant.value);
Victor Stinnerf2c1aa12016-01-26 00:40:57 +01004254 if (!value) goto failed;
Victor Stinnerf8599272020-07-03 16:57:19 +02004255 if (PyObject_SetAttr(result, state->value, value) == -1)
Victor Stinnerf2c1aa12016-01-26 00:40:57 +01004256 goto failed;
4257 Py_DECREF(value);
Victor Stinnerf8599272020-07-03 16:57:19 +02004258 value = ast2obj_string(state, o->v.Constant.kind);
Guido van Rossum10f8ce62019-03-13 13:00:46 -07004259 if (!value) goto failed;
Victor Stinnerf8599272020-07-03 16:57:19 +02004260 if (PyObject_SetAttr(result, state->kind, value) == -1)
Guido van Rossum10f8ce62019-03-13 13:00:46 -07004261 goto failed;
4262 Py_DECREF(value);
Victor Stinnerf2c1aa12016-01-26 00:40:57 +01004263 break;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004264 case Attribute_kind:
Victor Stinnerf8599272020-07-03 16:57:19 +02004265 tp = (PyTypeObject *)state->Attribute_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07004266 result = PyType_GenericNew(tp, NULL, NULL);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004267 if (!result) goto failed;
Victor Stinnerf8599272020-07-03 16:57:19 +02004268 value = ast2obj_expr(state, o->v.Attribute.value);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004269 if (!value) goto failed;
Victor Stinnerf8599272020-07-03 16:57:19 +02004270 if (PyObject_SetAttr(result, state->value, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004271 goto failed;
4272 Py_DECREF(value);
Victor Stinnerf8599272020-07-03 16:57:19 +02004273 value = ast2obj_identifier(state, o->v.Attribute.attr);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004274 if (!value) goto failed;
Victor Stinnerf8599272020-07-03 16:57:19 +02004275 if (PyObject_SetAttr(result, state->attr, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004276 goto failed;
4277 Py_DECREF(value);
Victor Stinnerf8599272020-07-03 16:57:19 +02004278 value = ast2obj_expr_context(state, o->v.Attribute.ctx);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004279 if (!value) goto failed;
Victor Stinnerf8599272020-07-03 16:57:19 +02004280 if (PyObject_SetAttr(result, state->ctx, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004281 goto failed;
4282 Py_DECREF(value);
4283 break;
4284 case Subscript_kind:
Victor Stinnerf8599272020-07-03 16:57:19 +02004285 tp = (PyTypeObject *)state->Subscript_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07004286 result = PyType_GenericNew(tp, NULL, NULL);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004287 if (!result) goto failed;
Victor Stinnerf8599272020-07-03 16:57:19 +02004288 value = ast2obj_expr(state, o->v.Subscript.value);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004289 if (!value) goto failed;
Victor Stinnerf8599272020-07-03 16:57:19 +02004290 if (PyObject_SetAttr(result, state->value, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004291 goto failed;
4292 Py_DECREF(value);
Victor Stinnerf8599272020-07-03 16:57:19 +02004293 value = ast2obj_expr(state, o->v.Subscript.slice);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004294 if (!value) goto failed;
Victor Stinnerf8599272020-07-03 16:57:19 +02004295 if (PyObject_SetAttr(result, state->slice, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004296 goto failed;
4297 Py_DECREF(value);
Victor Stinnerf8599272020-07-03 16:57:19 +02004298 value = ast2obj_expr_context(state, o->v.Subscript.ctx);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004299 if (!value) goto failed;
Victor Stinnerf8599272020-07-03 16:57:19 +02004300 if (PyObject_SetAttr(result, state->ctx, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004301 goto failed;
4302 Py_DECREF(value);
4303 break;
4304 case Starred_kind:
Victor Stinnerf8599272020-07-03 16:57:19 +02004305 tp = (PyTypeObject *)state->Starred_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07004306 result = PyType_GenericNew(tp, NULL, NULL);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004307 if (!result) goto failed;
Victor Stinnerf8599272020-07-03 16:57:19 +02004308 value = ast2obj_expr(state, o->v.Starred.value);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004309 if (!value) goto failed;
Victor Stinnerf8599272020-07-03 16:57:19 +02004310 if (PyObject_SetAttr(result, state->value, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004311 goto failed;
4312 Py_DECREF(value);
Victor Stinnerf8599272020-07-03 16:57:19 +02004313 value = ast2obj_expr_context(state, o->v.Starred.ctx);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004314 if (!value) goto failed;
Victor Stinnerf8599272020-07-03 16:57:19 +02004315 if (PyObject_SetAttr(result, state->ctx, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004316 goto failed;
4317 Py_DECREF(value);
4318 break;
4319 case Name_kind:
Victor Stinnerf8599272020-07-03 16:57:19 +02004320 tp = (PyTypeObject *)state->Name_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07004321 result = PyType_GenericNew(tp, NULL, NULL);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004322 if (!result) goto failed;
Victor Stinnerf8599272020-07-03 16:57:19 +02004323 value = ast2obj_identifier(state, o->v.Name.id);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004324 if (!value) goto failed;
Victor Stinnerf8599272020-07-03 16:57:19 +02004325 if (PyObject_SetAttr(result, state->id, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004326 goto failed;
4327 Py_DECREF(value);
Victor Stinnerf8599272020-07-03 16:57:19 +02004328 value = ast2obj_expr_context(state, o->v.Name.ctx);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004329 if (!value) goto failed;
Victor Stinnerf8599272020-07-03 16:57:19 +02004330 if (PyObject_SetAttr(result, state->ctx, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004331 goto failed;
4332 Py_DECREF(value);
4333 break;
4334 case List_kind:
Victor Stinnerf8599272020-07-03 16:57:19 +02004335 tp = (PyTypeObject *)state->List_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07004336 result = PyType_GenericNew(tp, NULL, NULL);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004337 if (!result) goto failed;
Victor Stinnerf8599272020-07-03 16:57:19 +02004338 value = ast2obj_list(state, o->v.List.elts, ast2obj_expr);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004339 if (!value) goto failed;
Victor Stinnerf8599272020-07-03 16:57:19 +02004340 if (PyObject_SetAttr(result, state->elts, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004341 goto failed;
4342 Py_DECREF(value);
Victor Stinnerf8599272020-07-03 16:57:19 +02004343 value = ast2obj_expr_context(state, o->v.List.ctx);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004344 if (!value) goto failed;
Victor Stinnerf8599272020-07-03 16:57:19 +02004345 if (PyObject_SetAttr(result, state->ctx, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004346 goto failed;
4347 Py_DECREF(value);
4348 break;
4349 case Tuple_kind:
Victor Stinnerf8599272020-07-03 16:57:19 +02004350 tp = (PyTypeObject *)state->Tuple_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07004351 result = PyType_GenericNew(tp, NULL, NULL);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004352 if (!result) goto failed;
Victor Stinnerf8599272020-07-03 16:57:19 +02004353 value = ast2obj_list(state, o->v.Tuple.elts, ast2obj_expr);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004354 if (!value) goto failed;
Victor Stinnerf8599272020-07-03 16:57:19 +02004355 if (PyObject_SetAttr(result, state->elts, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004356 goto failed;
4357 Py_DECREF(value);
Victor Stinnerf8599272020-07-03 16:57:19 +02004358 value = ast2obj_expr_context(state, o->v.Tuple.ctx);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004359 if (!value) goto failed;
Victor Stinnerf8599272020-07-03 16:57:19 +02004360 if (PyObject_SetAttr(result, state->ctx, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004361 goto failed;
4362 Py_DECREF(value);
4363 break;
Serhiy Storchaka13d52c22020-03-10 18:52:34 +02004364 case Slice_kind:
Victor Stinnerf8599272020-07-03 16:57:19 +02004365 tp = (PyTypeObject *)state->Slice_type;
Serhiy Storchaka13d52c22020-03-10 18:52:34 +02004366 result = PyType_GenericNew(tp, NULL, NULL);
4367 if (!result) goto failed;
Victor Stinnerf8599272020-07-03 16:57:19 +02004368 value = ast2obj_expr(state, o->v.Slice.lower);
Serhiy Storchaka13d52c22020-03-10 18:52:34 +02004369 if (!value) goto failed;
Victor Stinnerf8599272020-07-03 16:57:19 +02004370 if (PyObject_SetAttr(result, state->lower, value) == -1)
Serhiy Storchaka13d52c22020-03-10 18:52:34 +02004371 goto failed;
4372 Py_DECREF(value);
Victor Stinnerf8599272020-07-03 16:57:19 +02004373 value = ast2obj_expr(state, o->v.Slice.upper);
Serhiy Storchaka13d52c22020-03-10 18:52:34 +02004374 if (!value) goto failed;
Victor Stinnerf8599272020-07-03 16:57:19 +02004375 if (PyObject_SetAttr(result, state->upper, value) == -1)
Serhiy Storchaka13d52c22020-03-10 18:52:34 +02004376 goto failed;
4377 Py_DECREF(value);
Victor Stinnerf8599272020-07-03 16:57:19 +02004378 value = ast2obj_expr(state, o->v.Slice.step);
Serhiy Storchaka13d52c22020-03-10 18:52:34 +02004379 if (!value) goto failed;
Victor Stinnerf8599272020-07-03 16:57:19 +02004380 if (PyObject_SetAttr(result, state->step, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004381 goto failed;
4382 Py_DECREF(value);
4383 break;
4384 }
Victor Stinnerf8599272020-07-03 16:57:19 +02004385 value = ast2obj_int(state, o->lineno);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004386 if (!value) goto failed;
Victor Stinnerf8599272020-07-03 16:57:19 +02004387 if (PyObject_SetAttr(result, state->lineno, value) < 0)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004388 goto failed;
4389 Py_DECREF(value);
Victor Stinnerf8599272020-07-03 16:57:19 +02004390 value = ast2obj_int(state, o->col_offset);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004391 if (!value) goto failed;
Victor Stinnerf8599272020-07-03 16:57:19 +02004392 if (PyObject_SetAttr(result, state->col_offset, value) < 0)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004393 goto failed;
4394 Py_DECREF(value);
Victor Stinnerf8599272020-07-03 16:57:19 +02004395 value = ast2obj_int(state, o->end_lineno);
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00004396 if (!value) goto failed;
Victor Stinnerf8599272020-07-03 16:57:19 +02004397 if (PyObject_SetAttr(result, state->end_lineno, value) < 0)
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00004398 goto failed;
4399 Py_DECREF(value);
Victor Stinnerf8599272020-07-03 16:57:19 +02004400 value = ast2obj_int(state, o->end_col_offset);
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00004401 if (!value) goto failed;
Victor Stinnerf8599272020-07-03 16:57:19 +02004402 if (PyObject_SetAttr(result, state->end_col_offset, value) < 0)
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00004403 goto failed;
4404 Py_DECREF(value);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004405 return result;
Martin v. Löwisbd260da2006-02-26 19:42:26 +00004406failed:
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004407 Py_XDECREF(value);
4408 Py_XDECREF(result);
4409 return NULL;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00004410}
4411
Victor Stinnerf8599272020-07-03 16:57:19 +02004412PyObject* ast2obj_expr_context(astmodulestate *state, expr_context_ty o)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00004413{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004414 switch(o) {
4415 case Load:
Victor Stinnerf8599272020-07-03 16:57:19 +02004416 Py_INCREF(state->Load_singleton);
4417 return state->Load_singleton;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004418 case Store:
Victor Stinnerf8599272020-07-03 16:57:19 +02004419 Py_INCREF(state->Store_singleton);
4420 return state->Store_singleton;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004421 case Del:
Victor Stinnerf8599272020-07-03 16:57:19 +02004422 Py_INCREF(state->Del_singleton);
4423 return state->Del_singleton;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004424 }
Batuhan Taskaya091951a2020-05-06 17:29:32 +03004425 Py_UNREACHABLE();
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00004426}
Victor Stinnerf8599272020-07-03 16:57:19 +02004427PyObject* ast2obj_boolop(astmodulestate *state, boolop_ty o)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00004428{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004429 switch(o) {
4430 case And:
Victor Stinnerf8599272020-07-03 16:57:19 +02004431 Py_INCREF(state->And_singleton);
4432 return state->And_singleton;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004433 case Or:
Victor Stinnerf8599272020-07-03 16:57:19 +02004434 Py_INCREF(state->Or_singleton);
4435 return state->Or_singleton;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004436 }
Batuhan Taskaya091951a2020-05-06 17:29:32 +03004437 Py_UNREACHABLE();
Martin v. Löwisbd260da2006-02-26 19:42:26 +00004438}
Victor Stinnerf8599272020-07-03 16:57:19 +02004439PyObject* ast2obj_operator(astmodulestate *state, operator_ty o)
Martin v. Löwisbd260da2006-02-26 19:42:26 +00004440{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004441 switch(o) {
4442 case Add:
Victor Stinnerf8599272020-07-03 16:57:19 +02004443 Py_INCREF(state->Add_singleton);
4444 return state->Add_singleton;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004445 case Sub:
Victor Stinnerf8599272020-07-03 16:57:19 +02004446 Py_INCREF(state->Sub_singleton);
4447 return state->Sub_singleton;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004448 case Mult:
Victor Stinnerf8599272020-07-03 16:57:19 +02004449 Py_INCREF(state->Mult_singleton);
4450 return state->Mult_singleton;
Benjamin Petersond51374e2014-04-09 23:55:56 -04004451 case MatMult:
Victor Stinnerf8599272020-07-03 16:57:19 +02004452 Py_INCREF(state->MatMult_singleton);
4453 return state->MatMult_singleton;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004454 case Div:
Victor Stinnerf8599272020-07-03 16:57:19 +02004455 Py_INCREF(state->Div_singleton);
4456 return state->Div_singleton;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004457 case Mod:
Victor Stinnerf8599272020-07-03 16:57:19 +02004458 Py_INCREF(state->Mod_singleton);
4459 return state->Mod_singleton;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004460 case Pow:
Victor Stinnerf8599272020-07-03 16:57:19 +02004461 Py_INCREF(state->Pow_singleton);
4462 return state->Pow_singleton;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004463 case LShift:
Victor Stinnerf8599272020-07-03 16:57:19 +02004464 Py_INCREF(state->LShift_singleton);
4465 return state->LShift_singleton;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004466 case RShift:
Victor Stinnerf8599272020-07-03 16:57:19 +02004467 Py_INCREF(state->RShift_singleton);
4468 return state->RShift_singleton;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004469 case BitOr:
Victor Stinnerf8599272020-07-03 16:57:19 +02004470 Py_INCREF(state->BitOr_singleton);
4471 return state->BitOr_singleton;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004472 case BitXor:
Victor Stinnerf8599272020-07-03 16:57:19 +02004473 Py_INCREF(state->BitXor_singleton);
4474 return state->BitXor_singleton;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004475 case BitAnd:
Victor Stinnerf8599272020-07-03 16:57:19 +02004476 Py_INCREF(state->BitAnd_singleton);
4477 return state->BitAnd_singleton;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004478 case FloorDiv:
Victor Stinnerf8599272020-07-03 16:57:19 +02004479 Py_INCREF(state->FloorDiv_singleton);
4480 return state->FloorDiv_singleton;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004481 }
Batuhan Taskaya091951a2020-05-06 17:29:32 +03004482 Py_UNREACHABLE();
Martin v. Löwisbd260da2006-02-26 19:42:26 +00004483}
Victor Stinnerf8599272020-07-03 16:57:19 +02004484PyObject* ast2obj_unaryop(astmodulestate *state, unaryop_ty o)
Martin v. Löwisbd260da2006-02-26 19:42:26 +00004485{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004486 switch(o) {
4487 case Invert:
Victor Stinnerf8599272020-07-03 16:57:19 +02004488 Py_INCREF(state->Invert_singleton);
4489 return state->Invert_singleton;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004490 case Not:
Victor Stinnerf8599272020-07-03 16:57:19 +02004491 Py_INCREF(state->Not_singleton);
4492 return state->Not_singleton;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004493 case UAdd:
Victor Stinnerf8599272020-07-03 16:57:19 +02004494 Py_INCREF(state->UAdd_singleton);
4495 return state->UAdd_singleton;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004496 case USub:
Victor Stinnerf8599272020-07-03 16:57:19 +02004497 Py_INCREF(state->USub_singleton);
4498 return state->USub_singleton;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004499 }
Batuhan Taskaya091951a2020-05-06 17:29:32 +03004500 Py_UNREACHABLE();
Martin v. Löwisbd260da2006-02-26 19:42:26 +00004501}
Victor Stinnerf8599272020-07-03 16:57:19 +02004502PyObject* ast2obj_cmpop(astmodulestate *state, cmpop_ty o)
Martin v. Löwisbd260da2006-02-26 19:42:26 +00004503{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004504 switch(o) {
4505 case Eq:
Victor Stinnerf8599272020-07-03 16:57:19 +02004506 Py_INCREF(state->Eq_singleton);
4507 return state->Eq_singleton;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004508 case NotEq:
Victor Stinnerf8599272020-07-03 16:57:19 +02004509 Py_INCREF(state->NotEq_singleton);
4510 return state->NotEq_singleton;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004511 case Lt:
Victor Stinnerf8599272020-07-03 16:57:19 +02004512 Py_INCREF(state->Lt_singleton);
4513 return state->Lt_singleton;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004514 case LtE:
Victor Stinnerf8599272020-07-03 16:57:19 +02004515 Py_INCREF(state->LtE_singleton);
4516 return state->LtE_singleton;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004517 case Gt:
Victor Stinnerf8599272020-07-03 16:57:19 +02004518 Py_INCREF(state->Gt_singleton);
4519 return state->Gt_singleton;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004520 case GtE:
Victor Stinnerf8599272020-07-03 16:57:19 +02004521 Py_INCREF(state->GtE_singleton);
4522 return state->GtE_singleton;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004523 case Is:
Victor Stinnerf8599272020-07-03 16:57:19 +02004524 Py_INCREF(state->Is_singleton);
4525 return state->Is_singleton;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004526 case IsNot:
Victor Stinnerf8599272020-07-03 16:57:19 +02004527 Py_INCREF(state->IsNot_singleton);
4528 return state->IsNot_singleton;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004529 case In:
Victor Stinnerf8599272020-07-03 16:57:19 +02004530 Py_INCREF(state->In_singleton);
4531 return state->In_singleton;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004532 case NotIn:
Victor Stinnerf8599272020-07-03 16:57:19 +02004533 Py_INCREF(state->NotIn_singleton);
4534 return state->NotIn_singleton;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004535 }
Batuhan Taskaya091951a2020-05-06 17:29:32 +03004536 Py_UNREACHABLE();
Martin v. Löwisbd260da2006-02-26 19:42:26 +00004537}
4538PyObject*
Victor Stinnerf8599272020-07-03 16:57:19 +02004539ast2obj_comprehension(astmodulestate *state, void* _o)
Martin v. Löwisbd260da2006-02-26 19:42:26 +00004540{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004541 comprehension_ty o = (comprehension_ty)_o;
4542 PyObject *result = NULL, *value = NULL;
Dino Viehlandac46eb42019-09-11 10:16:34 -07004543 PyTypeObject *tp;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004544 if (!o) {
Serhiy Storchaka228b12e2017-01-23 09:47:21 +02004545 Py_RETURN_NONE;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004546 }
Victor Stinnerf8599272020-07-03 16:57:19 +02004547 tp = (PyTypeObject *)state->comprehension_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07004548 result = PyType_GenericNew(tp, NULL, NULL);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004549 if (!result) return NULL;
Victor Stinnerf8599272020-07-03 16:57:19 +02004550 value = ast2obj_expr(state, o->target);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004551 if (!value) goto failed;
Victor Stinnerf8599272020-07-03 16:57:19 +02004552 if (PyObject_SetAttr(result, state->target, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004553 goto failed;
4554 Py_DECREF(value);
Victor Stinnerf8599272020-07-03 16:57:19 +02004555 value = ast2obj_expr(state, o->iter);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004556 if (!value) goto failed;
Victor Stinnerf8599272020-07-03 16:57:19 +02004557 if (PyObject_SetAttr(result, state->iter, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004558 goto failed;
4559 Py_DECREF(value);
Victor Stinnerf8599272020-07-03 16:57:19 +02004560 value = ast2obj_list(state, o->ifs, ast2obj_expr);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004561 if (!value) goto failed;
Victor Stinnerf8599272020-07-03 16:57:19 +02004562 if (PyObject_SetAttr(result, state->ifs, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004563 goto failed;
4564 Py_DECREF(value);
Victor Stinnerf8599272020-07-03 16:57:19 +02004565 value = ast2obj_int(state, o->is_async);
Yury Selivanov52c4e7c2016-09-09 10:36:01 -07004566 if (!value) goto failed;
Victor Stinnerf8599272020-07-03 16:57:19 +02004567 if (PyObject_SetAttr(result, state->is_async, value) == -1)
Yury Selivanov52c4e7c2016-09-09 10:36:01 -07004568 goto failed;
4569 Py_DECREF(value);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004570 return result;
Martin v. Löwisbd260da2006-02-26 19:42:26 +00004571failed:
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004572 Py_XDECREF(value);
4573 Py_XDECREF(result);
4574 return NULL;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00004575}
4576
Martin v. Löwisbd260da2006-02-26 19:42:26 +00004577PyObject*
Victor Stinnerf8599272020-07-03 16:57:19 +02004578ast2obj_excepthandler(astmodulestate *state, void* _o)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00004579{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004580 excepthandler_ty o = (excepthandler_ty)_o;
4581 PyObject *result = NULL, *value = NULL;
Dino Viehlandac46eb42019-09-11 10:16:34 -07004582 PyTypeObject *tp;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004583 if (!o) {
Serhiy Storchaka228b12e2017-01-23 09:47:21 +02004584 Py_RETURN_NONE;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004585 }
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004586 switch (o->kind) {
4587 case ExceptHandler_kind:
Victor Stinnerf8599272020-07-03 16:57:19 +02004588 tp = (PyTypeObject *)state->ExceptHandler_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07004589 result = PyType_GenericNew(tp, NULL, NULL);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004590 if (!result) goto failed;
Victor Stinnerf8599272020-07-03 16:57:19 +02004591 value = ast2obj_expr(state, o->v.ExceptHandler.type);
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00004592 if (!value) goto failed;
Victor Stinnerf8599272020-07-03 16:57:19 +02004593 if (PyObject_SetAttr(result, state->type, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004594 goto failed;
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00004595 Py_DECREF(value);
Victor Stinnerf8599272020-07-03 16:57:19 +02004596 value = ast2obj_identifier(state, o->v.ExceptHandler.name);
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00004597 if (!value) goto failed;
Victor Stinnerf8599272020-07-03 16:57:19 +02004598 if (PyObject_SetAttr(result, state->name, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004599 goto failed;
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00004600 Py_DECREF(value);
Victor Stinnerf8599272020-07-03 16:57:19 +02004601 value = ast2obj_list(state, o->v.ExceptHandler.body, ast2obj_stmt);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004602 if (!value) goto failed;
Victor Stinnerf8599272020-07-03 16:57:19 +02004603 if (PyObject_SetAttr(result, state->body, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004604 goto failed;
4605 Py_DECREF(value);
4606 break;
4607 }
Victor Stinnerf8599272020-07-03 16:57:19 +02004608 value = ast2obj_int(state, o->lineno);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004609 if (!value) goto failed;
Victor Stinnerf8599272020-07-03 16:57:19 +02004610 if (PyObject_SetAttr(result, state->lineno, value) < 0)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004611 goto failed;
4612 Py_DECREF(value);
Victor Stinnerf8599272020-07-03 16:57:19 +02004613 value = ast2obj_int(state, o->col_offset);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004614 if (!value) goto failed;
Victor Stinnerf8599272020-07-03 16:57:19 +02004615 if (PyObject_SetAttr(result, state->col_offset, value) < 0)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004616 goto failed;
4617 Py_DECREF(value);
Victor Stinnerf8599272020-07-03 16:57:19 +02004618 value = ast2obj_int(state, o->end_lineno);
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00004619 if (!value) goto failed;
Victor Stinnerf8599272020-07-03 16:57:19 +02004620 if (PyObject_SetAttr(result, state->end_lineno, value) < 0)
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00004621 goto failed;
4622 Py_DECREF(value);
Victor Stinnerf8599272020-07-03 16:57:19 +02004623 value = ast2obj_int(state, o->end_col_offset);
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00004624 if (!value) goto failed;
Victor Stinnerf8599272020-07-03 16:57:19 +02004625 if (PyObject_SetAttr(result, state->end_col_offset, value) < 0)
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00004626 goto failed;
4627 Py_DECREF(value);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004628 return result;
Martin v. Löwisbd260da2006-02-26 19:42:26 +00004629failed:
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004630 Py_XDECREF(value);
4631 Py_XDECREF(result);
4632 return NULL;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00004633}
4634
Martin v. Löwisbd260da2006-02-26 19:42:26 +00004635PyObject*
Victor Stinnerf8599272020-07-03 16:57:19 +02004636ast2obj_arguments(astmodulestate *state, void* _o)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00004637{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004638 arguments_ty o = (arguments_ty)_o;
4639 PyObject *result = NULL, *value = NULL;
Dino Viehlandac46eb42019-09-11 10:16:34 -07004640 PyTypeObject *tp;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004641 if (!o) {
Serhiy Storchaka228b12e2017-01-23 09:47:21 +02004642 Py_RETURN_NONE;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004643 }
Victor Stinnerf8599272020-07-03 16:57:19 +02004644 tp = (PyTypeObject *)state->arguments_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07004645 result = PyType_GenericNew(tp, NULL, NULL);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004646 if (!result) return NULL;
Victor Stinnerf8599272020-07-03 16:57:19 +02004647 value = ast2obj_list(state, o->posonlyargs, ast2obj_arg);
Pablo Galindo8c77b8c2019-04-29 13:36:57 +01004648 if (!value) goto failed;
Victor Stinnerf8599272020-07-03 16:57:19 +02004649 if (PyObject_SetAttr(result, state->posonlyargs, value) == -1)
Pablo Galindo8c77b8c2019-04-29 13:36:57 +01004650 goto failed;
4651 Py_DECREF(value);
Victor Stinnerf8599272020-07-03 16:57:19 +02004652 value = ast2obj_list(state, o->args, ast2obj_arg);
Miss Islington (bot)cf9a63c2019-07-14 16:49:52 -07004653 if (!value) goto failed;
Victor Stinnerf8599272020-07-03 16:57:19 +02004654 if (PyObject_SetAttr(result, state->args, value) == -1)
Miss Islington (bot)cf9a63c2019-07-14 16:49:52 -07004655 goto failed;
4656 Py_DECREF(value);
Victor Stinnerf8599272020-07-03 16:57:19 +02004657 value = ast2obj_arg(state, o->vararg);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004658 if (!value) goto failed;
Victor Stinnerf8599272020-07-03 16:57:19 +02004659 if (PyObject_SetAttr(result, state->vararg, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004660 goto failed;
4661 Py_DECREF(value);
Victor Stinnerf8599272020-07-03 16:57:19 +02004662 value = ast2obj_list(state, o->kwonlyargs, ast2obj_arg);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004663 if (!value) goto failed;
Victor Stinnerf8599272020-07-03 16:57:19 +02004664 if (PyObject_SetAttr(result, state->kwonlyargs, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004665 goto failed;
4666 Py_DECREF(value);
Victor Stinnerf8599272020-07-03 16:57:19 +02004667 value = ast2obj_list(state, o->kw_defaults, ast2obj_expr);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004668 if (!value) goto failed;
Victor Stinnerf8599272020-07-03 16:57:19 +02004669 if (PyObject_SetAttr(result, state->kw_defaults, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004670 goto failed;
4671 Py_DECREF(value);
Victor Stinnerf8599272020-07-03 16:57:19 +02004672 value = ast2obj_arg(state, o->kwarg);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004673 if (!value) goto failed;
Victor Stinnerf8599272020-07-03 16:57:19 +02004674 if (PyObject_SetAttr(result, state->kwarg, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004675 goto failed;
4676 Py_DECREF(value);
Victor Stinnerf8599272020-07-03 16:57:19 +02004677 value = ast2obj_list(state, o->defaults, ast2obj_expr);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004678 if (!value) goto failed;
Victor Stinnerf8599272020-07-03 16:57:19 +02004679 if (PyObject_SetAttr(result, state->defaults, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004680 goto failed;
4681 Py_DECREF(value);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004682 return result;
Martin v. Löwisbd260da2006-02-26 19:42:26 +00004683failed:
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004684 Py_XDECREF(value);
4685 Py_XDECREF(result);
4686 return NULL;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00004687}
4688
Martin v. Löwisbd260da2006-02-26 19:42:26 +00004689PyObject*
Victor Stinnerf8599272020-07-03 16:57:19 +02004690ast2obj_arg(astmodulestate *state, void* _o)
Neal Norwitzc1505362006-12-28 06:47:50 +00004691{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004692 arg_ty o = (arg_ty)_o;
4693 PyObject *result = NULL, *value = NULL;
Dino Viehlandac46eb42019-09-11 10:16:34 -07004694 PyTypeObject *tp;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004695 if (!o) {
Serhiy Storchaka228b12e2017-01-23 09:47:21 +02004696 Py_RETURN_NONE;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004697 }
Victor Stinnerf8599272020-07-03 16:57:19 +02004698 tp = (PyTypeObject *)state->arg_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07004699 result = PyType_GenericNew(tp, NULL, NULL);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004700 if (!result) return NULL;
Victor Stinnerf8599272020-07-03 16:57:19 +02004701 value = ast2obj_identifier(state, o->arg);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004702 if (!value) goto failed;
Victor Stinnerf8599272020-07-03 16:57:19 +02004703 if (PyObject_SetAttr(result, state->arg, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004704 goto failed;
4705 Py_DECREF(value);
Victor Stinnerf8599272020-07-03 16:57:19 +02004706 value = ast2obj_expr(state, o->annotation);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004707 if (!value) goto failed;
Victor Stinnerf8599272020-07-03 16:57:19 +02004708 if (PyObject_SetAttr(result, state->annotation, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004709 goto failed;
4710 Py_DECREF(value);
Victor Stinnerf8599272020-07-03 16:57:19 +02004711 value = ast2obj_string(state, o->type_comment);
Guido van Rossumdcfcd142019-01-31 03:40:27 -08004712 if (!value) goto failed;
Victor Stinnerf8599272020-07-03 16:57:19 +02004713 if (PyObject_SetAttr(result, state->type_comment, value) == -1)
Guido van Rossumdcfcd142019-01-31 03:40:27 -08004714 goto failed;
4715 Py_DECREF(value);
Victor Stinnerf8599272020-07-03 16:57:19 +02004716 value = ast2obj_int(state, o->lineno);
Victor Stinneree4b59c2013-07-27 00:01:35 +02004717 if (!value) goto failed;
Victor Stinnerf8599272020-07-03 16:57:19 +02004718 if (PyObject_SetAttr(result, state->lineno, value) < 0)
Victor Stinneree4b59c2013-07-27 00:01:35 +02004719 goto failed;
4720 Py_DECREF(value);
Victor Stinnerf8599272020-07-03 16:57:19 +02004721 value = ast2obj_int(state, o->col_offset);
Victor Stinneree4b59c2013-07-27 00:01:35 +02004722 if (!value) goto failed;
Victor Stinnerf8599272020-07-03 16:57:19 +02004723 if (PyObject_SetAttr(result, state->col_offset, value) < 0)
Victor Stinneree4b59c2013-07-27 00:01:35 +02004724 goto failed;
4725 Py_DECREF(value);
Victor Stinnerf8599272020-07-03 16:57:19 +02004726 value = ast2obj_int(state, o->end_lineno);
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00004727 if (!value) goto failed;
Victor Stinnerf8599272020-07-03 16:57:19 +02004728 if (PyObject_SetAttr(result, state->end_lineno, value) < 0)
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00004729 goto failed;
4730 Py_DECREF(value);
Victor Stinnerf8599272020-07-03 16:57:19 +02004731 value = ast2obj_int(state, o->end_col_offset);
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00004732 if (!value) goto failed;
Victor Stinnerf8599272020-07-03 16:57:19 +02004733 if (PyObject_SetAttr(result, state->end_col_offset, value) < 0)
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00004734 goto failed;
4735 Py_DECREF(value);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004736 return result;
Neal Norwitzc1505362006-12-28 06:47:50 +00004737failed:
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004738 Py_XDECREF(value);
4739 Py_XDECREF(result);
4740 return NULL;
Neal Norwitzc1505362006-12-28 06:47:50 +00004741}
4742
4743PyObject*
Victor Stinnerf8599272020-07-03 16:57:19 +02004744ast2obj_keyword(astmodulestate *state, void* _o)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00004745{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004746 keyword_ty o = (keyword_ty)_o;
4747 PyObject *result = NULL, *value = NULL;
Dino Viehlandac46eb42019-09-11 10:16:34 -07004748 PyTypeObject *tp;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004749 if (!o) {
Serhiy Storchaka228b12e2017-01-23 09:47:21 +02004750 Py_RETURN_NONE;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004751 }
Victor Stinnerf8599272020-07-03 16:57:19 +02004752 tp = (PyTypeObject *)state->keyword_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07004753 result = PyType_GenericNew(tp, NULL, NULL);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004754 if (!result) return NULL;
Victor Stinnerf8599272020-07-03 16:57:19 +02004755 value = ast2obj_identifier(state, o->arg);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004756 if (!value) goto failed;
Victor Stinnerf8599272020-07-03 16:57:19 +02004757 if (PyObject_SetAttr(result, state->arg, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004758 goto failed;
4759 Py_DECREF(value);
Victor Stinnerf8599272020-07-03 16:57:19 +02004760 value = ast2obj_expr(state, o->value);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004761 if (!value) goto failed;
Victor Stinnerf8599272020-07-03 16:57:19 +02004762 if (PyObject_SetAttr(result, state->value, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004763 goto failed;
4764 Py_DECREF(value);
Victor Stinnerf8599272020-07-03 16:57:19 +02004765 value = ast2obj_int(state, o->lineno);
Pablo Galindo168660b2020-04-02 00:47:39 +01004766 if (!value) goto failed;
Victor Stinnerf8599272020-07-03 16:57:19 +02004767 if (PyObject_SetAttr(result, state->lineno, value) < 0)
Pablo Galindo168660b2020-04-02 00:47:39 +01004768 goto failed;
4769 Py_DECREF(value);
Victor Stinnerf8599272020-07-03 16:57:19 +02004770 value = ast2obj_int(state, o->col_offset);
Pablo Galindo168660b2020-04-02 00:47:39 +01004771 if (!value) goto failed;
Victor Stinnerf8599272020-07-03 16:57:19 +02004772 if (PyObject_SetAttr(result, state->col_offset, value) < 0)
Pablo Galindo168660b2020-04-02 00:47:39 +01004773 goto failed;
4774 Py_DECREF(value);
Victor Stinnerf8599272020-07-03 16:57:19 +02004775 value = ast2obj_int(state, o->end_lineno);
Pablo Galindo168660b2020-04-02 00:47:39 +01004776 if (!value) goto failed;
Victor Stinnerf8599272020-07-03 16:57:19 +02004777 if (PyObject_SetAttr(result, state->end_lineno, value) < 0)
Pablo Galindo168660b2020-04-02 00:47:39 +01004778 goto failed;
4779 Py_DECREF(value);
Victor Stinnerf8599272020-07-03 16:57:19 +02004780 value = ast2obj_int(state, o->end_col_offset);
Pablo Galindo168660b2020-04-02 00:47:39 +01004781 if (!value) goto failed;
Victor Stinnerf8599272020-07-03 16:57:19 +02004782 if (PyObject_SetAttr(result, state->end_col_offset, value) < 0)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004783 goto failed;
4784 Py_DECREF(value);
4785 return result;
Martin v. Löwisbd260da2006-02-26 19:42:26 +00004786failed:
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004787 Py_XDECREF(value);
4788 Py_XDECREF(result);
4789 return NULL;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00004790}
4791
Martin v. Löwisbd260da2006-02-26 19:42:26 +00004792PyObject*
Victor Stinnerf8599272020-07-03 16:57:19 +02004793ast2obj_alias(astmodulestate *state, void* _o)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00004794{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004795 alias_ty o = (alias_ty)_o;
4796 PyObject *result = NULL, *value = NULL;
Dino Viehlandac46eb42019-09-11 10:16:34 -07004797 PyTypeObject *tp;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004798 if (!o) {
Serhiy Storchaka228b12e2017-01-23 09:47:21 +02004799 Py_RETURN_NONE;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004800 }
Victor Stinnerf8599272020-07-03 16:57:19 +02004801 tp = (PyTypeObject *)state->alias_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07004802 result = PyType_GenericNew(tp, NULL, NULL);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004803 if (!result) return NULL;
Victor Stinnerf8599272020-07-03 16:57:19 +02004804 value = ast2obj_identifier(state, o->name);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004805 if (!value) goto failed;
Victor Stinnerf8599272020-07-03 16:57:19 +02004806 if (PyObject_SetAttr(result, state->name, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004807 goto failed;
4808 Py_DECREF(value);
Victor Stinnerf8599272020-07-03 16:57:19 +02004809 value = ast2obj_identifier(state, o->asname);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004810 if (!value) goto failed;
Victor Stinnerf8599272020-07-03 16:57:19 +02004811 if (PyObject_SetAttr(result, state->asname, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004812 goto failed;
4813 Py_DECREF(value);
4814 return result;
Martin v. Löwisbd260da2006-02-26 19:42:26 +00004815failed:
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004816 Py_XDECREF(value);
4817 Py_XDECREF(result);
4818 return NULL;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00004819}
4820
Benjamin Petersonbf1bbc12011-05-27 13:58:08 -05004821PyObject*
Victor Stinnerf8599272020-07-03 16:57:19 +02004822ast2obj_withitem(astmodulestate *state, void* _o)
Benjamin Petersonbf1bbc12011-05-27 13:58:08 -05004823{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004824 withitem_ty o = (withitem_ty)_o;
4825 PyObject *result = NULL, *value = NULL;
Dino Viehlandac46eb42019-09-11 10:16:34 -07004826 PyTypeObject *tp;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004827 if (!o) {
Serhiy Storchaka228b12e2017-01-23 09:47:21 +02004828 Py_RETURN_NONE;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004829 }
Victor Stinnerf8599272020-07-03 16:57:19 +02004830 tp = (PyTypeObject *)state->withitem_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07004831 result = PyType_GenericNew(tp, NULL, NULL);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004832 if (!result) return NULL;
Victor Stinnerf8599272020-07-03 16:57:19 +02004833 value = ast2obj_expr(state, o->context_expr);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004834 if (!value) goto failed;
Victor Stinnerf8599272020-07-03 16:57:19 +02004835 if (PyObject_SetAttr(result, state->context_expr, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004836 goto failed;
4837 Py_DECREF(value);
Victor Stinnerf8599272020-07-03 16:57:19 +02004838 value = ast2obj_expr(state, o->optional_vars);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004839 if (!value) goto failed;
Victor Stinnerf8599272020-07-03 16:57:19 +02004840 if (PyObject_SetAttr(result, state->optional_vars, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004841 goto failed;
4842 Py_DECREF(value);
4843 return result;
Benjamin Petersonbf1bbc12011-05-27 13:58:08 -05004844failed:
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004845 Py_XDECREF(value);
4846 Py_XDECREF(result);
4847 return NULL;
Benjamin Petersonbf1bbc12011-05-27 13:58:08 -05004848}
4849
Guido van Rossumdcfcd142019-01-31 03:40:27 -08004850PyObject*
Victor Stinnerf8599272020-07-03 16:57:19 +02004851ast2obj_type_ignore(astmodulestate *state, void* _o)
Guido van Rossumdcfcd142019-01-31 03:40:27 -08004852{
4853 type_ignore_ty o = (type_ignore_ty)_o;
4854 PyObject *result = NULL, *value = NULL;
Dino Viehlandac46eb42019-09-11 10:16:34 -07004855 PyTypeObject *tp;
Guido van Rossumdcfcd142019-01-31 03:40:27 -08004856 if (!o) {
4857 Py_RETURN_NONE;
4858 }
Guido van Rossumdcfcd142019-01-31 03:40:27 -08004859 switch (o->kind) {
4860 case TypeIgnore_kind:
Victor Stinnerf8599272020-07-03 16:57:19 +02004861 tp = (PyTypeObject *)state->TypeIgnore_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07004862 result = PyType_GenericNew(tp, NULL, NULL);
Guido van Rossumdcfcd142019-01-31 03:40:27 -08004863 if (!result) goto failed;
Victor Stinnerf8599272020-07-03 16:57:19 +02004864 value = ast2obj_int(state, o->v.TypeIgnore.lineno);
Guido van Rossumdcfcd142019-01-31 03:40:27 -08004865 if (!value) goto failed;
Victor Stinnerf8599272020-07-03 16:57:19 +02004866 if (PyObject_SetAttr(result, state->lineno, value) == -1)
Guido van Rossumdcfcd142019-01-31 03:40:27 -08004867 goto failed;
4868 Py_DECREF(value);
Victor Stinnerf8599272020-07-03 16:57:19 +02004869 value = ast2obj_string(state, o->v.TypeIgnore.tag);
Michael J. Sullivan933e1502019-05-22 07:54:20 -07004870 if (!value) goto failed;
Victor Stinnerf8599272020-07-03 16:57:19 +02004871 if (PyObject_SetAttr(result, state->tag, value) == -1)
Michael J. Sullivan933e1502019-05-22 07:54:20 -07004872 goto failed;
4873 Py_DECREF(value);
Guido van Rossumdcfcd142019-01-31 03:40:27 -08004874 break;
4875 }
4876 return result;
4877failed:
4878 Py_XDECREF(value);
4879 Py_XDECREF(result);
4880 return NULL;
4881}
4882
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00004883
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00004884int
Victor Stinnerf8599272020-07-03 16:57:19 +02004885obj2ast_mod(astmodulestate *state, PyObject* obj, mod_ty* out, PyArena* arena)
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00004886{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004887 int isinstance;
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00004888
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004889 PyObject *tmp = NULL;
Dino Viehlandac46eb42019-09-11 10:16:34 -07004890 PyObject *tp;
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00004891
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004892 if (obj == Py_None) {
4893 *out = NULL;
4894 return 0;
4895 }
Victor Stinnerf8599272020-07-03 16:57:19 +02004896 tp = state->Module_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07004897 isinstance = PyObject_IsInstance(obj, tp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004898 if (isinstance == -1) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00004899 return 1;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004900 }
4901 if (isinstance) {
4902 asdl_seq* body;
Guido van Rossumdcfcd142019-01-31 03:40:27 -08004903 asdl_seq* type_ignores;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004904
Victor Stinnerf8599272020-07-03 16:57:19 +02004905 if (_PyObject_LookupAttr(obj, state->body, &tmp) < 0) {
Serhiy Storchakaf320be72018-01-25 10:49:40 +02004906 return 1;
4907 }
4908 if (tmp == NULL) {
4909 PyErr_SetString(PyExc_TypeError, "required field \"body\" missing from Module");
4910 return 1;
4911 }
4912 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004913 int res;
4914 Py_ssize_t len;
4915 Py_ssize_t i;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004916 if (!PyList_Check(tmp)) {
Dino Viehlandac46eb42019-09-11 10:16:34 -07004917 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 +02004918 goto failed;
4919 }
4920 len = PyList_GET_SIZE(tmp);
Antoine Pitroud01d396e2013-10-12 22:52:43 +02004921 body = _Py_asdl_seq_new(len, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004922 if (body == NULL) goto failed;
4923 for (i = 0; i < len; i++) {
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07004924 stmt_ty val;
Serhiy Storchaka43c97312019-09-10 13:02:30 +03004925 PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
4926 Py_INCREF(tmp2);
Victor Stinnerf8599272020-07-03 16:57:19 +02004927 res = obj2ast_stmt(state, tmp2, &val, arena);
Serhiy Storchaka43c97312019-09-10 13:02:30 +03004928 Py_DECREF(tmp2);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004929 if (res != 0) goto failed;
Serhiy Storchakacf380602016-10-07 21:51:28 +03004930 if (len != PyList_GET_SIZE(tmp)) {
4931 PyErr_SetString(PyExc_RuntimeError, "Module field \"body\" changed size during iteration");
4932 goto failed;
4933 }
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07004934 asdl_seq_SET(body, i, val);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004935 }
Victor Stinner1acc1292013-07-27 00:03:47 +02004936 Py_CLEAR(tmp);
Serhiy Storchakaf320be72018-01-25 10:49:40 +02004937 }
Victor Stinnerf8599272020-07-03 16:57:19 +02004938 if (_PyObject_LookupAttr(obj, state->type_ignores, &tmp) < 0) {
Guido van Rossumdcfcd142019-01-31 03:40:27 -08004939 return 1;
4940 }
4941 if (tmp == NULL) {
4942 PyErr_SetString(PyExc_TypeError, "required field \"type_ignores\" missing from Module");
4943 return 1;
4944 }
4945 else {
4946 int res;
4947 Py_ssize_t len;
4948 Py_ssize_t i;
4949 if (!PyList_Check(tmp)) {
Dino Viehlandac46eb42019-09-11 10:16:34 -07004950 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 -08004951 goto failed;
4952 }
4953 len = PyList_GET_SIZE(tmp);
4954 type_ignores = _Py_asdl_seq_new(len, arena);
4955 if (type_ignores == NULL) goto failed;
4956 for (i = 0; i < len; i++) {
4957 type_ignore_ty val;
Serhiy Storchaka43c97312019-09-10 13:02:30 +03004958 PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
4959 Py_INCREF(tmp2);
Victor Stinnerf8599272020-07-03 16:57:19 +02004960 res = obj2ast_type_ignore(state, tmp2, &val, arena);
Serhiy Storchaka43c97312019-09-10 13:02:30 +03004961 Py_DECREF(tmp2);
Guido van Rossumdcfcd142019-01-31 03:40:27 -08004962 if (res != 0) goto failed;
4963 if (len != PyList_GET_SIZE(tmp)) {
4964 PyErr_SetString(PyExc_RuntimeError, "Module field \"type_ignores\" changed size during iteration");
4965 goto failed;
4966 }
4967 asdl_seq_SET(type_ignores, i, val);
4968 }
4969 Py_CLEAR(tmp);
4970 }
4971 *out = Module(body, type_ignores, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004972 if (*out == NULL) goto failed;
4973 return 0;
4974 }
Victor Stinnerf8599272020-07-03 16:57:19 +02004975 tp = state->Interactive_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07004976 isinstance = PyObject_IsInstance(obj, tp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004977 if (isinstance == -1) {
4978 return 1;
4979 }
4980 if (isinstance) {
4981 asdl_seq* body;
4982
Victor Stinnerf8599272020-07-03 16:57:19 +02004983 if (_PyObject_LookupAttr(obj, state->body, &tmp) < 0) {
Serhiy Storchakaf320be72018-01-25 10:49:40 +02004984 return 1;
4985 }
4986 if (tmp == NULL) {
4987 PyErr_SetString(PyExc_TypeError, "required field \"body\" missing from Interactive");
4988 return 1;
4989 }
4990 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004991 int res;
4992 Py_ssize_t len;
4993 Py_ssize_t i;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004994 if (!PyList_Check(tmp)) {
Dino Viehlandac46eb42019-09-11 10:16:34 -07004995 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 +02004996 goto failed;
4997 }
4998 len = PyList_GET_SIZE(tmp);
Antoine Pitroud01d396e2013-10-12 22:52:43 +02004999 body = _Py_asdl_seq_new(len, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005000 if (body == NULL) goto failed;
5001 for (i = 0; i < len; i++) {
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07005002 stmt_ty val;
Serhiy Storchaka43c97312019-09-10 13:02:30 +03005003 PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
5004 Py_INCREF(tmp2);
Victor Stinnerf8599272020-07-03 16:57:19 +02005005 res = obj2ast_stmt(state, tmp2, &val, arena);
Serhiy Storchaka43c97312019-09-10 13:02:30 +03005006 Py_DECREF(tmp2);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005007 if (res != 0) goto failed;
Serhiy Storchakacf380602016-10-07 21:51:28 +03005008 if (len != PyList_GET_SIZE(tmp)) {
5009 PyErr_SetString(PyExc_RuntimeError, "Interactive field \"body\" changed size during iteration");
5010 goto failed;
5011 }
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07005012 asdl_seq_SET(body, i, val);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005013 }
Victor Stinner1acc1292013-07-27 00:03:47 +02005014 Py_CLEAR(tmp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005015 }
5016 *out = Interactive(body, arena);
5017 if (*out == NULL) goto failed;
5018 return 0;
5019 }
Victor Stinnerf8599272020-07-03 16:57:19 +02005020 tp = state->Expression_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) {
5026 expr_ty body;
5027
Victor Stinnerf8599272020-07-03 16:57:19 +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 Expression");
5033 return 1;
5034 }
5035 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005036 int res;
Victor Stinnerf8599272020-07-03 16:57:19 +02005037 res = obj2ast_expr(state, tmp, &body, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005038 if (res != 0) goto failed;
Victor Stinner1acc1292013-07-27 00:03:47 +02005039 Py_CLEAR(tmp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005040 }
5041 *out = Expression(body, arena);
5042 if (*out == NULL) goto failed;
5043 return 0;
5044 }
Victor Stinnerf8599272020-07-03 16:57:19 +02005045 tp = state->FunctionType_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07005046 isinstance = PyObject_IsInstance(obj, tp);
Guido van Rossumdcfcd142019-01-31 03:40:27 -08005047 if (isinstance == -1) {
5048 return 1;
5049 }
5050 if (isinstance) {
5051 asdl_seq* argtypes;
5052 expr_ty returns;
5053
Victor Stinnerf8599272020-07-03 16:57:19 +02005054 if (_PyObject_LookupAttr(obj, state->argtypes, &tmp) < 0) {
Guido van Rossumdcfcd142019-01-31 03:40:27 -08005055 return 1;
5056 }
5057 if (tmp == NULL) {
5058 PyErr_SetString(PyExc_TypeError, "required field \"argtypes\" missing from FunctionType");
5059 return 1;
5060 }
5061 else {
5062 int res;
5063 Py_ssize_t len;
5064 Py_ssize_t i;
5065 if (!PyList_Check(tmp)) {
Dino Viehlandac46eb42019-09-11 10:16:34 -07005066 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 -08005067 goto failed;
5068 }
5069 len = PyList_GET_SIZE(tmp);
5070 argtypes = _Py_asdl_seq_new(len, arena);
5071 if (argtypes == NULL) goto failed;
5072 for (i = 0; i < len; i++) {
5073 expr_ty val;
Serhiy Storchaka43c97312019-09-10 13:02:30 +03005074 PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
5075 Py_INCREF(tmp2);
Victor Stinnerf8599272020-07-03 16:57:19 +02005076 res = obj2ast_expr(state, tmp2, &val, arena);
Serhiy Storchaka43c97312019-09-10 13:02:30 +03005077 Py_DECREF(tmp2);
Guido van Rossumdcfcd142019-01-31 03:40:27 -08005078 if (res != 0) goto failed;
5079 if (len != PyList_GET_SIZE(tmp)) {
5080 PyErr_SetString(PyExc_RuntimeError, "FunctionType field \"argtypes\" changed size during iteration");
5081 goto failed;
5082 }
5083 asdl_seq_SET(argtypes, i, val);
5084 }
5085 Py_CLEAR(tmp);
5086 }
Victor Stinnerf8599272020-07-03 16:57:19 +02005087 if (_PyObject_LookupAttr(obj, state->returns, &tmp) < 0) {
Guido van Rossumdcfcd142019-01-31 03:40:27 -08005088 return 1;
5089 }
5090 if (tmp == NULL) {
5091 PyErr_SetString(PyExc_TypeError, "required field \"returns\" missing from FunctionType");
5092 return 1;
5093 }
5094 else {
5095 int res;
Victor Stinnerf8599272020-07-03 16:57:19 +02005096 res = obj2ast_expr(state, tmp, &returns, arena);
Guido van Rossumdcfcd142019-01-31 03:40:27 -08005097 if (res != 0) goto failed;
5098 Py_CLEAR(tmp);
5099 }
5100 *out = FunctionType(argtypes, returns, arena);
5101 if (*out == NULL) goto failed;
5102 return 0;
5103 }
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005104
5105 PyErr_Format(PyExc_TypeError, "expected some sort of mod, but got %R", obj);
5106 failed:
5107 Py_XDECREF(tmp);
5108 return 1;
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00005109}
5110
5111int
Victor Stinnerf8599272020-07-03 16:57:19 +02005112obj2ast_stmt(astmodulestate *state, PyObject* obj, stmt_ty* out, PyArena* arena)
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00005113{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005114 int isinstance;
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00005115
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005116 PyObject *tmp = NULL;
Dino Viehlandac46eb42019-09-11 10:16:34 -07005117 PyObject *tp;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005118 int lineno;
5119 int col_offset;
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00005120 int end_lineno;
5121 int end_col_offset;
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00005122
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005123 if (obj == Py_None) {
5124 *out = NULL;
5125 return 0;
5126 }
Victor Stinnerf8599272020-07-03 16:57:19 +02005127 if (_PyObject_LookupAttr(obj, state->lineno, &tmp) < 0) {
Serhiy Storchakaf320be72018-01-25 10:49:40 +02005128 return 1;
5129 }
5130 if (tmp == NULL) {
5131 PyErr_SetString(PyExc_TypeError, "required field \"lineno\" missing from stmt");
5132 return 1;
5133 }
5134 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005135 int res;
Victor Stinnerf8599272020-07-03 16:57:19 +02005136 res = obj2ast_int(state, tmp, &lineno, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005137 if (res != 0) goto failed;
Victor Stinner1acc1292013-07-27 00:03:47 +02005138 Py_CLEAR(tmp);
Serhiy Storchakaf320be72018-01-25 10:49:40 +02005139 }
Victor Stinnerf8599272020-07-03 16:57:19 +02005140 if (_PyObject_LookupAttr(obj, state->col_offset, &tmp) < 0) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00005141 return 1;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005142 }
Serhiy Storchakaf320be72018-01-25 10:49:40 +02005143 if (tmp == NULL) {
5144 PyErr_SetString(PyExc_TypeError, "required field \"col_offset\" missing from stmt");
5145 return 1;
5146 }
5147 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005148 int res;
Victor Stinnerf8599272020-07-03 16:57:19 +02005149 res = obj2ast_int(state, tmp, &col_offset, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005150 if (res != 0) goto failed;
Victor Stinner1acc1292013-07-27 00:03:47 +02005151 Py_CLEAR(tmp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005152 }
Victor Stinnerf8599272020-07-03 16:57:19 +02005153 if (_PyObject_LookupAttr(obj, state->end_lineno, &tmp) < 0) {
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00005154 return 1;
5155 }
5156 if (tmp == NULL || tmp == Py_None) {
5157 Py_CLEAR(tmp);
5158 end_lineno = 0;
5159 }
5160 else {
5161 int res;
Victor Stinnerf8599272020-07-03 16:57:19 +02005162 res = obj2ast_int(state, tmp, &end_lineno, arena);
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00005163 if (res != 0) goto failed;
5164 Py_CLEAR(tmp);
5165 }
Victor Stinnerf8599272020-07-03 16:57:19 +02005166 if (_PyObject_LookupAttr(obj, state->end_col_offset, &tmp) < 0) {
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00005167 return 1;
5168 }
5169 if (tmp == NULL || tmp == Py_None) {
5170 Py_CLEAR(tmp);
5171 end_col_offset = 0;
5172 }
5173 else {
5174 int res;
Victor Stinnerf8599272020-07-03 16:57:19 +02005175 res = obj2ast_int(state, tmp, &end_col_offset, arena);
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00005176 if (res != 0) goto failed;
5177 Py_CLEAR(tmp);
5178 }
Victor Stinnerf8599272020-07-03 16:57:19 +02005179 tp = state->FunctionDef_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07005180 isinstance = PyObject_IsInstance(obj, tp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005181 if (isinstance == -1) {
5182 return 1;
5183 }
5184 if (isinstance) {
5185 identifier name;
5186 arguments_ty args;
5187 asdl_seq* body;
5188 asdl_seq* decorator_list;
5189 expr_ty returns;
Guido van Rossumdcfcd142019-01-31 03:40:27 -08005190 string type_comment;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005191
Victor Stinnerf8599272020-07-03 16:57:19 +02005192 if (_PyObject_LookupAttr(obj, state->name, &tmp) < 0) {
Serhiy Storchakaf320be72018-01-25 10:49:40 +02005193 return 1;
5194 }
5195 if (tmp == NULL) {
5196 PyErr_SetString(PyExc_TypeError, "required field \"name\" missing from FunctionDef");
5197 return 1;
5198 }
5199 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005200 int res;
Victor Stinnerf8599272020-07-03 16:57:19 +02005201 res = obj2ast_identifier(state, tmp, &name, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005202 if (res != 0) goto failed;
Victor Stinner1acc1292013-07-27 00:03:47 +02005203 Py_CLEAR(tmp);
Serhiy Storchakaf320be72018-01-25 10:49:40 +02005204 }
Victor Stinnerf8599272020-07-03 16:57:19 +02005205 if (_PyObject_LookupAttr(obj, state->args, &tmp) < 0) {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005206 return 1;
5207 }
Serhiy Storchakaf320be72018-01-25 10:49:40 +02005208 if (tmp == NULL) {
5209 PyErr_SetString(PyExc_TypeError, "required field \"args\" missing from FunctionDef");
5210 return 1;
5211 }
5212 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005213 int res;
Victor Stinnerf8599272020-07-03 16:57:19 +02005214 res = obj2ast_arguments(state, tmp, &args, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005215 if (res != 0) goto failed;
Victor Stinner1acc1292013-07-27 00:03:47 +02005216 Py_CLEAR(tmp);
Serhiy Storchakaf320be72018-01-25 10:49:40 +02005217 }
Victor Stinnerf8599272020-07-03 16:57:19 +02005218 if (_PyObject_LookupAttr(obj, state->body, &tmp) < 0) {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005219 return 1;
5220 }
Serhiy Storchakaf320be72018-01-25 10:49:40 +02005221 if (tmp == NULL) {
5222 PyErr_SetString(PyExc_TypeError, "required field \"body\" missing from FunctionDef");
5223 return 1;
5224 }
5225 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005226 int res;
5227 Py_ssize_t len;
5228 Py_ssize_t i;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005229 if (!PyList_Check(tmp)) {
Dino Viehlandac46eb42019-09-11 10:16:34 -07005230 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 +02005231 goto failed;
5232 }
5233 len = PyList_GET_SIZE(tmp);
Antoine Pitroud01d396e2013-10-12 22:52:43 +02005234 body = _Py_asdl_seq_new(len, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005235 if (body == NULL) goto failed;
5236 for (i = 0; i < len; i++) {
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07005237 stmt_ty val;
Serhiy Storchaka43c97312019-09-10 13:02:30 +03005238 PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
5239 Py_INCREF(tmp2);
Victor Stinnerf8599272020-07-03 16:57:19 +02005240 res = obj2ast_stmt(state, tmp2, &val, arena);
Serhiy Storchaka43c97312019-09-10 13:02:30 +03005241 Py_DECREF(tmp2);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005242 if (res != 0) goto failed;
Serhiy Storchakacf380602016-10-07 21:51:28 +03005243 if (len != PyList_GET_SIZE(tmp)) {
5244 PyErr_SetString(PyExc_RuntimeError, "FunctionDef field \"body\" changed size during iteration");
5245 goto failed;
5246 }
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07005247 asdl_seq_SET(body, i, val);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005248 }
Victor Stinner1acc1292013-07-27 00:03:47 +02005249 Py_CLEAR(tmp);
Serhiy Storchakaf320be72018-01-25 10:49:40 +02005250 }
Victor Stinnerf8599272020-07-03 16:57:19 +02005251 if (_PyObject_LookupAttr(obj, state->decorator_list, &tmp) < 0) {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005252 return 1;
5253 }
Serhiy Storchakaf320be72018-01-25 10:49:40 +02005254 if (tmp == NULL) {
5255 PyErr_SetString(PyExc_TypeError, "required field \"decorator_list\" missing from FunctionDef");
5256 return 1;
5257 }
5258 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005259 int res;
5260 Py_ssize_t len;
5261 Py_ssize_t i;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005262 if (!PyList_Check(tmp)) {
Dino Viehlandac46eb42019-09-11 10:16:34 -07005263 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 +02005264 goto failed;
5265 }
5266 len = PyList_GET_SIZE(tmp);
Antoine Pitroud01d396e2013-10-12 22:52:43 +02005267 decorator_list = _Py_asdl_seq_new(len, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005268 if (decorator_list == NULL) goto failed;
5269 for (i = 0; i < len; i++) {
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07005270 expr_ty val;
Serhiy Storchaka43c97312019-09-10 13:02:30 +03005271 PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
5272 Py_INCREF(tmp2);
Victor Stinnerf8599272020-07-03 16:57:19 +02005273 res = obj2ast_expr(state, tmp2, &val, arena);
Serhiy Storchaka43c97312019-09-10 13:02:30 +03005274 Py_DECREF(tmp2);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005275 if (res != 0) goto failed;
Serhiy Storchakacf380602016-10-07 21:51:28 +03005276 if (len != PyList_GET_SIZE(tmp)) {
5277 PyErr_SetString(PyExc_RuntimeError, "FunctionDef field \"decorator_list\" changed size during iteration");
5278 goto failed;
5279 }
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07005280 asdl_seq_SET(decorator_list, i, val);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005281 }
Victor Stinner1acc1292013-07-27 00:03:47 +02005282 Py_CLEAR(tmp);
Serhiy Storchakaf320be72018-01-25 10:49:40 +02005283 }
Victor Stinnerf8599272020-07-03 16:57:19 +02005284 if (_PyObject_LookupAttr(obj, state->returns, &tmp) < 0) {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005285 return 1;
5286 }
Serhiy Storchakaf320be72018-01-25 10:49:40 +02005287 if (tmp == NULL || tmp == Py_None) {
5288 Py_CLEAR(tmp);
5289 returns = NULL;
5290 }
5291 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005292 int res;
Victor Stinnerf8599272020-07-03 16:57:19 +02005293 res = obj2ast_expr(state, tmp, &returns, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005294 if (res != 0) goto failed;
Victor Stinner1acc1292013-07-27 00:03:47 +02005295 Py_CLEAR(tmp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005296 }
Victor Stinnerf8599272020-07-03 16:57:19 +02005297 if (_PyObject_LookupAttr(obj, state->type_comment, &tmp) < 0) {
Guido van Rossumdcfcd142019-01-31 03:40:27 -08005298 return 1;
5299 }
5300 if (tmp == NULL || tmp == Py_None) {
5301 Py_CLEAR(tmp);
5302 type_comment = NULL;
5303 }
5304 else {
5305 int res;
Victor Stinnerf8599272020-07-03 16:57:19 +02005306 res = obj2ast_string(state, tmp, &type_comment, arena);
Guido van Rossumdcfcd142019-01-31 03:40:27 -08005307 if (res != 0) goto failed;
5308 Py_CLEAR(tmp);
5309 }
5310 *out = FunctionDef(name, args, body, decorator_list, returns,
5311 type_comment, lineno, col_offset, end_lineno,
5312 end_col_offset, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005313 if (*out == NULL) goto failed;
5314 return 0;
5315 }
Victor Stinnerf8599272020-07-03 16:57:19 +02005316 tp = state->AsyncFunctionDef_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07005317 isinstance = PyObject_IsInstance(obj, tp);
Yury Selivanov75445082015-05-11 22:57:16 -04005318 if (isinstance == -1) {
5319 return 1;
5320 }
5321 if (isinstance) {
5322 identifier name;
5323 arguments_ty args;
5324 asdl_seq* body;
5325 asdl_seq* decorator_list;
5326 expr_ty returns;
Guido van Rossumdcfcd142019-01-31 03:40:27 -08005327 string type_comment;
Yury Selivanov75445082015-05-11 22:57:16 -04005328
Victor Stinnerf8599272020-07-03 16:57:19 +02005329 if (_PyObject_LookupAttr(obj, state->name, &tmp) < 0) {
Serhiy Storchakaf320be72018-01-25 10:49:40 +02005330 return 1;
5331 }
5332 if (tmp == NULL) {
5333 PyErr_SetString(PyExc_TypeError, "required field \"name\" missing from AsyncFunctionDef");
5334 return 1;
5335 }
5336 else {
Yury Selivanov75445082015-05-11 22:57:16 -04005337 int res;
Victor Stinnerf8599272020-07-03 16:57:19 +02005338 res = obj2ast_identifier(state, tmp, &name, arena);
Yury Selivanov75445082015-05-11 22:57:16 -04005339 if (res != 0) goto failed;
5340 Py_CLEAR(tmp);
Serhiy Storchakaf320be72018-01-25 10:49:40 +02005341 }
Victor Stinnerf8599272020-07-03 16:57:19 +02005342 if (_PyObject_LookupAttr(obj, state->args, &tmp) < 0) {
Yury Selivanov75445082015-05-11 22:57:16 -04005343 return 1;
5344 }
Serhiy Storchakaf320be72018-01-25 10:49:40 +02005345 if (tmp == NULL) {
5346 PyErr_SetString(PyExc_TypeError, "required field \"args\" missing from AsyncFunctionDef");
5347 return 1;
5348 }
5349 else {
Yury Selivanov75445082015-05-11 22:57:16 -04005350 int res;
Victor Stinnerf8599272020-07-03 16:57:19 +02005351 res = obj2ast_arguments(state, tmp, &args, arena);
Yury Selivanov75445082015-05-11 22:57:16 -04005352 if (res != 0) goto failed;
5353 Py_CLEAR(tmp);
Serhiy Storchakaf320be72018-01-25 10:49:40 +02005354 }
Victor Stinnerf8599272020-07-03 16:57:19 +02005355 if (_PyObject_LookupAttr(obj, state->body, &tmp) < 0) {
Yury Selivanov75445082015-05-11 22:57:16 -04005356 return 1;
5357 }
Serhiy Storchakaf320be72018-01-25 10:49:40 +02005358 if (tmp == NULL) {
5359 PyErr_SetString(PyExc_TypeError, "required field \"body\" missing from AsyncFunctionDef");
5360 return 1;
5361 }
5362 else {
Yury Selivanov75445082015-05-11 22:57:16 -04005363 int res;
5364 Py_ssize_t len;
5365 Py_ssize_t i;
Yury Selivanov75445082015-05-11 22:57:16 -04005366 if (!PyList_Check(tmp)) {
Dino Viehlandac46eb42019-09-11 10:16:34 -07005367 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 -04005368 goto failed;
5369 }
5370 len = PyList_GET_SIZE(tmp);
5371 body = _Py_asdl_seq_new(len, arena);
5372 if (body == NULL) goto failed;
5373 for (i = 0; i < len; i++) {
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07005374 stmt_ty val;
Serhiy Storchaka43c97312019-09-10 13:02:30 +03005375 PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
5376 Py_INCREF(tmp2);
Victor Stinnerf8599272020-07-03 16:57:19 +02005377 res = obj2ast_stmt(state, tmp2, &val, arena);
Serhiy Storchaka43c97312019-09-10 13:02:30 +03005378 Py_DECREF(tmp2);
Yury Selivanov75445082015-05-11 22:57:16 -04005379 if (res != 0) goto failed;
Serhiy Storchakacf380602016-10-07 21:51:28 +03005380 if (len != PyList_GET_SIZE(tmp)) {
5381 PyErr_SetString(PyExc_RuntimeError, "AsyncFunctionDef field \"body\" changed size during iteration");
5382 goto failed;
5383 }
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07005384 asdl_seq_SET(body, i, val);
Yury Selivanov75445082015-05-11 22:57:16 -04005385 }
5386 Py_CLEAR(tmp);
Serhiy Storchakaf320be72018-01-25 10:49:40 +02005387 }
Victor Stinnerf8599272020-07-03 16:57:19 +02005388 if (_PyObject_LookupAttr(obj, state->decorator_list, &tmp) < 0) {
Yury Selivanov75445082015-05-11 22:57:16 -04005389 return 1;
5390 }
Serhiy Storchakaf320be72018-01-25 10:49:40 +02005391 if (tmp == NULL) {
5392 PyErr_SetString(PyExc_TypeError, "required field \"decorator_list\" missing from AsyncFunctionDef");
5393 return 1;
5394 }
5395 else {
Yury Selivanov75445082015-05-11 22:57:16 -04005396 int res;
5397 Py_ssize_t len;
5398 Py_ssize_t i;
Yury Selivanov75445082015-05-11 22:57:16 -04005399 if (!PyList_Check(tmp)) {
Dino Viehlandac46eb42019-09-11 10:16:34 -07005400 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 -04005401 goto failed;
5402 }
5403 len = PyList_GET_SIZE(tmp);
5404 decorator_list = _Py_asdl_seq_new(len, arena);
5405 if (decorator_list == NULL) goto failed;
5406 for (i = 0; i < len; i++) {
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07005407 expr_ty val;
Serhiy Storchaka43c97312019-09-10 13:02:30 +03005408 PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
5409 Py_INCREF(tmp2);
Victor Stinnerf8599272020-07-03 16:57:19 +02005410 res = obj2ast_expr(state, tmp2, &val, arena);
Serhiy Storchaka43c97312019-09-10 13:02:30 +03005411 Py_DECREF(tmp2);
Yury Selivanov75445082015-05-11 22:57:16 -04005412 if (res != 0) goto failed;
Serhiy Storchakacf380602016-10-07 21:51:28 +03005413 if (len != PyList_GET_SIZE(tmp)) {
5414 PyErr_SetString(PyExc_RuntimeError, "AsyncFunctionDef field \"decorator_list\" changed size during iteration");
5415 goto failed;
5416 }
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07005417 asdl_seq_SET(decorator_list, i, val);
Yury Selivanov75445082015-05-11 22:57:16 -04005418 }
5419 Py_CLEAR(tmp);
Serhiy Storchakaf320be72018-01-25 10:49:40 +02005420 }
Victor Stinnerf8599272020-07-03 16:57:19 +02005421 if (_PyObject_LookupAttr(obj, state->returns, &tmp) < 0) {
Yury Selivanov75445082015-05-11 22:57:16 -04005422 return 1;
5423 }
Serhiy Storchakaf320be72018-01-25 10:49:40 +02005424 if (tmp == NULL || tmp == Py_None) {
5425 Py_CLEAR(tmp);
5426 returns = NULL;
5427 }
5428 else {
Yury Selivanov75445082015-05-11 22:57:16 -04005429 int res;
Victor Stinnerf8599272020-07-03 16:57:19 +02005430 res = obj2ast_expr(state, tmp, &returns, arena);
Yury Selivanov75445082015-05-11 22:57:16 -04005431 if (res != 0) goto failed;
5432 Py_CLEAR(tmp);
Yury Selivanov75445082015-05-11 22:57:16 -04005433 }
Victor Stinnerf8599272020-07-03 16:57:19 +02005434 if (_PyObject_LookupAttr(obj, state->type_comment, &tmp) < 0) {
Guido van Rossumdcfcd142019-01-31 03:40:27 -08005435 return 1;
5436 }
5437 if (tmp == NULL || tmp == Py_None) {
5438 Py_CLEAR(tmp);
5439 type_comment = NULL;
5440 }
5441 else {
5442 int res;
Victor Stinnerf8599272020-07-03 16:57:19 +02005443 res = obj2ast_string(state, tmp, &type_comment, arena);
Guido van Rossumdcfcd142019-01-31 03:40:27 -08005444 if (res != 0) goto failed;
5445 Py_CLEAR(tmp);
5446 }
Yury Selivanov75445082015-05-11 22:57:16 -04005447 *out = AsyncFunctionDef(name, args, body, decorator_list, returns,
Guido van Rossumdcfcd142019-01-31 03:40:27 -08005448 type_comment, lineno, col_offset, end_lineno,
5449 end_col_offset, arena);
Yury Selivanov75445082015-05-11 22:57:16 -04005450 if (*out == NULL) goto failed;
5451 return 0;
5452 }
Victor Stinnerf8599272020-07-03 16:57:19 +02005453 tp = state->ClassDef_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07005454 isinstance = PyObject_IsInstance(obj, tp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005455 if (isinstance == -1) {
5456 return 1;
5457 }
5458 if (isinstance) {
5459 identifier name;
5460 asdl_seq* bases;
5461 asdl_seq* keywords;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005462 asdl_seq* body;
5463 asdl_seq* decorator_list;
5464
Victor Stinnerf8599272020-07-03 16:57:19 +02005465 if (_PyObject_LookupAttr(obj, state->name, &tmp) < 0) {
Serhiy Storchakaf320be72018-01-25 10:49:40 +02005466 return 1;
5467 }
5468 if (tmp == NULL) {
5469 PyErr_SetString(PyExc_TypeError, "required field \"name\" missing from ClassDef");
5470 return 1;
5471 }
5472 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005473 int res;
Victor Stinnerf8599272020-07-03 16:57:19 +02005474 res = obj2ast_identifier(state, tmp, &name, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005475 if (res != 0) goto failed;
Victor Stinner1acc1292013-07-27 00:03:47 +02005476 Py_CLEAR(tmp);
Serhiy Storchakaf320be72018-01-25 10:49:40 +02005477 }
Victor Stinnerf8599272020-07-03 16:57:19 +02005478 if (_PyObject_LookupAttr(obj, state->bases, &tmp) < 0) {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005479 return 1;
5480 }
Serhiy Storchakaf320be72018-01-25 10:49:40 +02005481 if (tmp == NULL) {
5482 PyErr_SetString(PyExc_TypeError, "required field \"bases\" missing from ClassDef");
5483 return 1;
5484 }
5485 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005486 int res;
5487 Py_ssize_t len;
5488 Py_ssize_t i;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005489 if (!PyList_Check(tmp)) {
Dino Viehlandac46eb42019-09-11 10:16:34 -07005490 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 +02005491 goto failed;
5492 }
5493 len = PyList_GET_SIZE(tmp);
Antoine Pitroud01d396e2013-10-12 22:52:43 +02005494 bases = _Py_asdl_seq_new(len, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005495 if (bases == NULL) goto failed;
5496 for (i = 0; i < len; i++) {
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07005497 expr_ty val;
Serhiy Storchaka43c97312019-09-10 13:02:30 +03005498 PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
5499 Py_INCREF(tmp2);
Victor Stinnerf8599272020-07-03 16:57:19 +02005500 res = obj2ast_expr(state, tmp2, &val, arena);
Serhiy Storchaka43c97312019-09-10 13:02:30 +03005501 Py_DECREF(tmp2);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005502 if (res != 0) goto failed;
Serhiy Storchakacf380602016-10-07 21:51:28 +03005503 if (len != PyList_GET_SIZE(tmp)) {
5504 PyErr_SetString(PyExc_RuntimeError, "ClassDef field \"bases\" changed size during iteration");
5505 goto failed;
5506 }
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07005507 asdl_seq_SET(bases, i, val);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005508 }
Victor Stinner1acc1292013-07-27 00:03:47 +02005509 Py_CLEAR(tmp);
Serhiy Storchakaf320be72018-01-25 10:49:40 +02005510 }
Victor Stinnerf8599272020-07-03 16:57:19 +02005511 if (_PyObject_LookupAttr(obj, state->keywords, &tmp) < 0) {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005512 return 1;
5513 }
Serhiy Storchakaf320be72018-01-25 10:49:40 +02005514 if (tmp == NULL) {
5515 PyErr_SetString(PyExc_TypeError, "required field \"keywords\" missing from ClassDef");
5516 return 1;
5517 }
5518 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005519 int res;
5520 Py_ssize_t len;
5521 Py_ssize_t i;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005522 if (!PyList_Check(tmp)) {
Dino Viehlandac46eb42019-09-11 10:16:34 -07005523 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 +02005524 goto failed;
5525 }
5526 len = PyList_GET_SIZE(tmp);
Antoine Pitroud01d396e2013-10-12 22:52:43 +02005527 keywords = _Py_asdl_seq_new(len, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005528 if (keywords == NULL) goto failed;
5529 for (i = 0; i < len; i++) {
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07005530 keyword_ty val;
Serhiy Storchaka43c97312019-09-10 13:02:30 +03005531 PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
5532 Py_INCREF(tmp2);
Victor Stinnerf8599272020-07-03 16:57:19 +02005533 res = obj2ast_keyword(state, tmp2, &val, arena);
Serhiy Storchaka43c97312019-09-10 13:02:30 +03005534 Py_DECREF(tmp2);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005535 if (res != 0) goto failed;
Serhiy Storchakacf380602016-10-07 21:51:28 +03005536 if (len != PyList_GET_SIZE(tmp)) {
5537 PyErr_SetString(PyExc_RuntimeError, "ClassDef field \"keywords\" changed size during iteration");
5538 goto failed;
5539 }
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07005540 asdl_seq_SET(keywords, i, val);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005541 }
Victor Stinner1acc1292013-07-27 00:03:47 +02005542 Py_CLEAR(tmp);
Serhiy Storchakaf320be72018-01-25 10:49:40 +02005543 }
Victor Stinnerf8599272020-07-03 16:57:19 +02005544 if (_PyObject_LookupAttr(obj, state->body, &tmp) < 0) {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005545 return 1;
5546 }
Serhiy Storchakaf320be72018-01-25 10:49:40 +02005547 if (tmp == NULL) {
5548 PyErr_SetString(PyExc_TypeError, "required field \"body\" missing from ClassDef");
5549 return 1;
5550 }
5551 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005552 int res;
5553 Py_ssize_t len;
5554 Py_ssize_t i;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005555 if (!PyList_Check(tmp)) {
Dino Viehlandac46eb42019-09-11 10:16:34 -07005556 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 +02005557 goto failed;
5558 }
5559 len = PyList_GET_SIZE(tmp);
Antoine Pitroud01d396e2013-10-12 22:52:43 +02005560 body = _Py_asdl_seq_new(len, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005561 if (body == NULL) goto failed;
5562 for (i = 0; i < len; i++) {
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07005563 stmt_ty val;
Serhiy Storchaka43c97312019-09-10 13:02:30 +03005564 PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
5565 Py_INCREF(tmp2);
Victor Stinnerf8599272020-07-03 16:57:19 +02005566 res = obj2ast_stmt(state, tmp2, &val, arena);
Serhiy Storchaka43c97312019-09-10 13:02:30 +03005567 Py_DECREF(tmp2);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005568 if (res != 0) goto failed;
Serhiy Storchakacf380602016-10-07 21:51:28 +03005569 if (len != PyList_GET_SIZE(tmp)) {
5570 PyErr_SetString(PyExc_RuntimeError, "ClassDef field \"body\" changed size during iteration");
5571 goto failed;
5572 }
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07005573 asdl_seq_SET(body, i, val);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005574 }
Victor Stinner1acc1292013-07-27 00:03:47 +02005575 Py_CLEAR(tmp);
Serhiy Storchakaf320be72018-01-25 10:49:40 +02005576 }
Victor Stinnerf8599272020-07-03 16:57:19 +02005577 if (_PyObject_LookupAttr(obj, state->decorator_list, &tmp) < 0) {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005578 return 1;
5579 }
Serhiy Storchakaf320be72018-01-25 10:49:40 +02005580 if (tmp == NULL) {
5581 PyErr_SetString(PyExc_TypeError, "required field \"decorator_list\" missing from ClassDef");
5582 return 1;
5583 }
5584 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005585 int res;
5586 Py_ssize_t len;
5587 Py_ssize_t i;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005588 if (!PyList_Check(tmp)) {
Dino Viehlandac46eb42019-09-11 10:16:34 -07005589 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 +02005590 goto failed;
5591 }
5592 len = PyList_GET_SIZE(tmp);
Antoine Pitroud01d396e2013-10-12 22:52:43 +02005593 decorator_list = _Py_asdl_seq_new(len, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005594 if (decorator_list == NULL) goto failed;
5595 for (i = 0; i < len; i++) {
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07005596 expr_ty val;
Serhiy Storchaka43c97312019-09-10 13:02:30 +03005597 PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
5598 Py_INCREF(tmp2);
Victor Stinnerf8599272020-07-03 16:57:19 +02005599 res = obj2ast_expr(state, tmp2, &val, arena);
Serhiy Storchaka43c97312019-09-10 13:02:30 +03005600 Py_DECREF(tmp2);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005601 if (res != 0) goto failed;
Serhiy Storchakacf380602016-10-07 21:51:28 +03005602 if (len != PyList_GET_SIZE(tmp)) {
5603 PyErr_SetString(PyExc_RuntimeError, "ClassDef field \"decorator_list\" changed size during iteration");
5604 goto failed;
5605 }
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07005606 asdl_seq_SET(decorator_list, i, val);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005607 }
Victor Stinner1acc1292013-07-27 00:03:47 +02005608 Py_CLEAR(tmp);
Serhiy Storchakaf320be72018-01-25 10:49:40 +02005609 }
Serhiy Storchaka73cbe7a2018-05-29 12:04:55 +03005610 *out = ClassDef(name, bases, keywords, body, decorator_list, lineno,
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00005611 col_offset, end_lineno, end_col_offset, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005612 if (*out == NULL) goto failed;
5613 return 0;
5614 }
Victor Stinnerf8599272020-07-03 16:57:19 +02005615 tp = state->Return_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07005616 isinstance = PyObject_IsInstance(obj, tp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005617 if (isinstance == -1) {
5618 return 1;
5619 }
5620 if (isinstance) {
5621 expr_ty value;
5622
Victor Stinnerf8599272020-07-03 16:57:19 +02005623 if (_PyObject_LookupAttr(obj, state->value, &tmp) < 0) {
Serhiy Storchakaf320be72018-01-25 10:49:40 +02005624 return 1;
5625 }
5626 if (tmp == NULL || tmp == Py_None) {
5627 Py_CLEAR(tmp);
5628 value = NULL;
5629 }
5630 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005631 int res;
Victor Stinnerf8599272020-07-03 16:57:19 +02005632 res = obj2ast_expr(state, tmp, &value, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005633 if (res != 0) goto failed;
Victor Stinner1acc1292013-07-27 00:03:47 +02005634 Py_CLEAR(tmp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005635 }
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00005636 *out = Return(value, lineno, col_offset, end_lineno, end_col_offset,
5637 arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005638 if (*out == NULL) goto failed;
5639 return 0;
5640 }
Victor Stinnerf8599272020-07-03 16:57:19 +02005641 tp = state->Delete_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07005642 isinstance = PyObject_IsInstance(obj, tp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005643 if (isinstance == -1) {
5644 return 1;
5645 }
5646 if (isinstance) {
5647 asdl_seq* targets;
5648
Victor Stinnerf8599272020-07-03 16:57:19 +02005649 if (_PyObject_LookupAttr(obj, state->targets, &tmp) < 0) {
Serhiy Storchakaf320be72018-01-25 10:49:40 +02005650 return 1;
5651 }
5652 if (tmp == NULL) {
5653 PyErr_SetString(PyExc_TypeError, "required field \"targets\" missing from Delete");
5654 return 1;
5655 }
5656 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005657 int res;
5658 Py_ssize_t len;
5659 Py_ssize_t i;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005660 if (!PyList_Check(tmp)) {
Dino Viehlandac46eb42019-09-11 10:16:34 -07005661 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 +02005662 goto failed;
5663 }
5664 len = PyList_GET_SIZE(tmp);
Antoine Pitroud01d396e2013-10-12 22:52:43 +02005665 targets = _Py_asdl_seq_new(len, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005666 if (targets == NULL) goto failed;
5667 for (i = 0; i < len; i++) {
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07005668 expr_ty val;
Serhiy Storchaka43c97312019-09-10 13:02:30 +03005669 PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
5670 Py_INCREF(tmp2);
Victor Stinnerf8599272020-07-03 16:57:19 +02005671 res = obj2ast_expr(state, tmp2, &val, arena);
Serhiy Storchaka43c97312019-09-10 13:02:30 +03005672 Py_DECREF(tmp2);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005673 if (res != 0) goto failed;
Serhiy Storchakacf380602016-10-07 21:51:28 +03005674 if (len != PyList_GET_SIZE(tmp)) {
5675 PyErr_SetString(PyExc_RuntimeError, "Delete field \"targets\" changed size during iteration");
5676 goto failed;
5677 }
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07005678 asdl_seq_SET(targets, i, val);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005679 }
Victor Stinner1acc1292013-07-27 00:03:47 +02005680 Py_CLEAR(tmp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005681 }
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00005682 *out = Delete(targets, lineno, col_offset, end_lineno, end_col_offset,
5683 arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005684 if (*out == NULL) goto failed;
5685 return 0;
5686 }
Victor Stinnerf8599272020-07-03 16:57:19 +02005687 tp = state->Assign_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07005688 isinstance = PyObject_IsInstance(obj, tp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005689 if (isinstance == -1) {
5690 return 1;
5691 }
5692 if (isinstance) {
5693 asdl_seq* targets;
5694 expr_ty value;
Guido van Rossumdcfcd142019-01-31 03:40:27 -08005695 string type_comment;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005696
Victor Stinnerf8599272020-07-03 16:57:19 +02005697 if (_PyObject_LookupAttr(obj, state->targets, &tmp) < 0) {
Serhiy Storchakaf320be72018-01-25 10:49:40 +02005698 return 1;
5699 }
5700 if (tmp == NULL) {
5701 PyErr_SetString(PyExc_TypeError, "required field \"targets\" missing from Assign");
5702 return 1;
5703 }
5704 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005705 int res;
5706 Py_ssize_t len;
5707 Py_ssize_t i;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005708 if (!PyList_Check(tmp)) {
Dino Viehlandac46eb42019-09-11 10:16:34 -07005709 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 +02005710 goto failed;
5711 }
5712 len = PyList_GET_SIZE(tmp);
Antoine Pitroud01d396e2013-10-12 22:52:43 +02005713 targets = _Py_asdl_seq_new(len, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005714 if (targets == NULL) goto failed;
5715 for (i = 0; i < len; i++) {
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07005716 expr_ty val;
Serhiy Storchaka43c97312019-09-10 13:02:30 +03005717 PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
5718 Py_INCREF(tmp2);
Victor Stinnerf8599272020-07-03 16:57:19 +02005719 res = obj2ast_expr(state, tmp2, &val, arena);
Serhiy Storchaka43c97312019-09-10 13:02:30 +03005720 Py_DECREF(tmp2);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005721 if (res != 0) goto failed;
Serhiy Storchakacf380602016-10-07 21:51:28 +03005722 if (len != PyList_GET_SIZE(tmp)) {
5723 PyErr_SetString(PyExc_RuntimeError, "Assign field \"targets\" changed size during iteration");
5724 goto failed;
5725 }
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07005726 asdl_seq_SET(targets, i, val);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005727 }
Victor Stinner1acc1292013-07-27 00:03:47 +02005728 Py_CLEAR(tmp);
Serhiy Storchakaf320be72018-01-25 10:49:40 +02005729 }
Victor Stinnerf8599272020-07-03 16:57:19 +02005730 if (_PyObject_LookupAttr(obj, state->value, &tmp) < 0) {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005731 return 1;
5732 }
Serhiy Storchakaf320be72018-01-25 10:49:40 +02005733 if (tmp == NULL) {
5734 PyErr_SetString(PyExc_TypeError, "required field \"value\" missing from Assign");
5735 return 1;
5736 }
5737 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005738 int res;
Victor Stinnerf8599272020-07-03 16:57:19 +02005739 res = obj2ast_expr(state, tmp, &value, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005740 if (res != 0) goto failed;
Victor Stinner1acc1292013-07-27 00:03:47 +02005741 Py_CLEAR(tmp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005742 }
Victor Stinnerf8599272020-07-03 16:57:19 +02005743 if (_PyObject_LookupAttr(obj, state->type_comment, &tmp) < 0) {
Guido van Rossumdcfcd142019-01-31 03:40:27 -08005744 return 1;
5745 }
5746 if (tmp == NULL || tmp == Py_None) {
5747 Py_CLEAR(tmp);
5748 type_comment = NULL;
5749 }
5750 else {
5751 int res;
Victor Stinnerf8599272020-07-03 16:57:19 +02005752 res = obj2ast_string(state, tmp, &type_comment, arena);
Guido van Rossumdcfcd142019-01-31 03:40:27 -08005753 if (res != 0) goto failed;
5754 Py_CLEAR(tmp);
5755 }
5756 *out = Assign(targets, value, type_comment, lineno, col_offset,
5757 end_lineno, end_col_offset, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005758 if (*out == NULL) goto failed;
5759 return 0;
5760 }
Victor Stinnerf8599272020-07-03 16:57:19 +02005761 tp = state->AugAssign_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07005762 isinstance = PyObject_IsInstance(obj, tp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005763 if (isinstance == -1) {
5764 return 1;
5765 }
5766 if (isinstance) {
5767 expr_ty target;
5768 operator_ty op;
5769 expr_ty value;
5770
Victor Stinnerf8599272020-07-03 16:57:19 +02005771 if (_PyObject_LookupAttr(obj, state->target, &tmp) < 0) {
Serhiy Storchakaf320be72018-01-25 10:49:40 +02005772 return 1;
5773 }
5774 if (tmp == NULL) {
5775 PyErr_SetString(PyExc_TypeError, "required field \"target\" missing from AugAssign");
5776 return 1;
5777 }
5778 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005779 int res;
Victor Stinnerf8599272020-07-03 16:57:19 +02005780 res = obj2ast_expr(state, tmp, &target, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005781 if (res != 0) goto failed;
Victor Stinner1acc1292013-07-27 00:03:47 +02005782 Py_CLEAR(tmp);
Serhiy Storchakaf320be72018-01-25 10:49:40 +02005783 }
Victor Stinnerf8599272020-07-03 16:57:19 +02005784 if (_PyObject_LookupAttr(obj, state->op, &tmp) < 0) {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005785 return 1;
5786 }
Serhiy Storchakaf320be72018-01-25 10:49:40 +02005787 if (tmp == NULL) {
5788 PyErr_SetString(PyExc_TypeError, "required field \"op\" missing from AugAssign");
5789 return 1;
5790 }
5791 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005792 int res;
Victor Stinnerf8599272020-07-03 16:57:19 +02005793 res = obj2ast_operator(state, tmp, &op, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005794 if (res != 0) goto failed;
Victor Stinner1acc1292013-07-27 00:03:47 +02005795 Py_CLEAR(tmp);
Serhiy Storchakaf320be72018-01-25 10:49:40 +02005796 }
Victor Stinnerf8599272020-07-03 16:57:19 +02005797 if (_PyObject_LookupAttr(obj, state->value, &tmp) < 0) {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005798 return 1;
5799 }
Serhiy Storchakaf320be72018-01-25 10:49:40 +02005800 if (tmp == NULL) {
5801 PyErr_SetString(PyExc_TypeError, "required field \"value\" missing from AugAssign");
5802 return 1;
5803 }
5804 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005805 int res;
Victor Stinnerf8599272020-07-03 16:57:19 +02005806 res = obj2ast_expr(state, tmp, &value, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005807 if (res != 0) goto failed;
Victor Stinner1acc1292013-07-27 00:03:47 +02005808 Py_CLEAR(tmp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005809 }
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00005810 *out = AugAssign(target, op, value, lineno, col_offset, end_lineno,
5811 end_col_offset, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005812 if (*out == NULL) goto failed;
5813 return 0;
5814 }
Victor Stinnerf8599272020-07-03 16:57:19 +02005815 tp = state->AnnAssign_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07005816 isinstance = PyObject_IsInstance(obj, tp);
Yury Selivanovf8cb8a12016-09-08 20:50:03 -07005817 if (isinstance == -1) {
5818 return 1;
5819 }
5820 if (isinstance) {
5821 expr_ty target;
5822 expr_ty annotation;
5823 expr_ty value;
5824 int simple;
5825
Victor Stinnerf8599272020-07-03 16:57:19 +02005826 if (_PyObject_LookupAttr(obj, state->target, &tmp) < 0) {
Serhiy Storchakaf320be72018-01-25 10:49:40 +02005827 return 1;
5828 }
5829 if (tmp == NULL) {
5830 PyErr_SetString(PyExc_TypeError, "required field \"target\" missing from AnnAssign");
5831 return 1;
5832 }
5833 else {
Yury Selivanovf8cb8a12016-09-08 20:50:03 -07005834 int res;
Victor Stinnerf8599272020-07-03 16:57:19 +02005835 res = obj2ast_expr(state, tmp, &target, arena);
Yury Selivanovf8cb8a12016-09-08 20:50:03 -07005836 if (res != 0) goto failed;
5837 Py_CLEAR(tmp);
Serhiy Storchakaf320be72018-01-25 10:49:40 +02005838 }
Victor Stinnerf8599272020-07-03 16:57:19 +02005839 if (_PyObject_LookupAttr(obj, state->annotation, &tmp) < 0) {
Yury Selivanovf8cb8a12016-09-08 20:50:03 -07005840 return 1;
5841 }
Serhiy Storchakaf320be72018-01-25 10:49:40 +02005842 if (tmp == NULL) {
5843 PyErr_SetString(PyExc_TypeError, "required field \"annotation\" missing from AnnAssign");
5844 return 1;
5845 }
5846 else {
Yury Selivanovf8cb8a12016-09-08 20:50:03 -07005847 int res;
Victor Stinnerf8599272020-07-03 16:57:19 +02005848 res = obj2ast_expr(state, tmp, &annotation, arena);
Yury Selivanovf8cb8a12016-09-08 20:50:03 -07005849 if (res != 0) goto failed;
5850 Py_CLEAR(tmp);
Serhiy Storchakaf320be72018-01-25 10:49:40 +02005851 }
Victor Stinnerf8599272020-07-03 16:57:19 +02005852 if (_PyObject_LookupAttr(obj, state->value, &tmp) < 0) {
Yury Selivanovf8cb8a12016-09-08 20:50:03 -07005853 return 1;
5854 }
Serhiy Storchakaf320be72018-01-25 10:49:40 +02005855 if (tmp == NULL || tmp == Py_None) {
5856 Py_CLEAR(tmp);
5857 value = NULL;
5858 }
5859 else {
Yury Selivanovf8cb8a12016-09-08 20:50:03 -07005860 int res;
Victor Stinnerf8599272020-07-03 16:57:19 +02005861 res = obj2ast_expr(state, tmp, &value, arena);
Yury Selivanovf8cb8a12016-09-08 20:50:03 -07005862 if (res != 0) goto failed;
5863 Py_CLEAR(tmp);
Yury Selivanovf8cb8a12016-09-08 20:50:03 -07005864 }
Victor Stinnerf8599272020-07-03 16:57:19 +02005865 if (_PyObject_LookupAttr(obj, state->simple, &tmp) < 0) {
Serhiy Storchakaf320be72018-01-25 10:49:40 +02005866 return 1;
5867 }
5868 if (tmp == NULL) {
5869 PyErr_SetString(PyExc_TypeError, "required field \"simple\" missing from AnnAssign");
5870 return 1;
5871 }
5872 else {
Yury Selivanovf8cb8a12016-09-08 20:50:03 -07005873 int res;
Victor Stinnerf8599272020-07-03 16:57:19 +02005874 res = obj2ast_int(state, tmp, &simple, arena);
Yury Selivanovf8cb8a12016-09-08 20:50:03 -07005875 if (res != 0) goto failed;
5876 Py_CLEAR(tmp);
Yury Selivanovf8cb8a12016-09-08 20:50:03 -07005877 }
5878 *out = AnnAssign(target, annotation, value, simple, lineno, col_offset,
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00005879 end_lineno, end_col_offset, arena);
Yury Selivanovf8cb8a12016-09-08 20:50:03 -07005880 if (*out == NULL) goto failed;
5881 return 0;
5882 }
Victor Stinnerf8599272020-07-03 16:57:19 +02005883 tp = state->For_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07005884 isinstance = PyObject_IsInstance(obj, tp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005885 if (isinstance == -1) {
5886 return 1;
5887 }
5888 if (isinstance) {
5889 expr_ty target;
5890 expr_ty iter;
5891 asdl_seq* body;
5892 asdl_seq* orelse;
Guido van Rossumdcfcd142019-01-31 03:40:27 -08005893 string type_comment;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005894
Victor Stinnerf8599272020-07-03 16:57:19 +02005895 if (_PyObject_LookupAttr(obj, state->target, &tmp) < 0) {
Serhiy Storchakaf320be72018-01-25 10:49:40 +02005896 return 1;
5897 }
5898 if (tmp == NULL) {
5899 PyErr_SetString(PyExc_TypeError, "required field \"target\" missing from For");
5900 return 1;
5901 }
5902 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005903 int res;
Victor Stinnerf8599272020-07-03 16:57:19 +02005904 res = obj2ast_expr(state, tmp, &target, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005905 if (res != 0) goto failed;
Victor Stinner1acc1292013-07-27 00:03:47 +02005906 Py_CLEAR(tmp);
Serhiy Storchakaf320be72018-01-25 10:49:40 +02005907 }
Victor Stinnerf8599272020-07-03 16:57:19 +02005908 if (_PyObject_LookupAttr(obj, state->iter, &tmp) < 0) {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005909 return 1;
5910 }
Serhiy Storchakaf320be72018-01-25 10:49:40 +02005911 if (tmp == NULL) {
5912 PyErr_SetString(PyExc_TypeError, "required field \"iter\" missing from For");
5913 return 1;
5914 }
5915 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005916 int res;
Victor Stinnerf8599272020-07-03 16:57:19 +02005917 res = obj2ast_expr(state, tmp, &iter, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005918 if (res != 0) goto failed;
Victor Stinner1acc1292013-07-27 00:03:47 +02005919 Py_CLEAR(tmp);
Serhiy Storchakaf320be72018-01-25 10:49:40 +02005920 }
Victor Stinnerf8599272020-07-03 16:57:19 +02005921 if (_PyObject_LookupAttr(obj, state->body, &tmp) < 0) {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005922 return 1;
5923 }
Serhiy Storchakaf320be72018-01-25 10:49:40 +02005924 if (tmp == NULL) {
5925 PyErr_SetString(PyExc_TypeError, "required field \"body\" missing from For");
5926 return 1;
5927 }
5928 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005929 int res;
5930 Py_ssize_t len;
5931 Py_ssize_t i;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005932 if (!PyList_Check(tmp)) {
Dino Viehlandac46eb42019-09-11 10:16:34 -07005933 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 +02005934 goto failed;
5935 }
5936 len = PyList_GET_SIZE(tmp);
Antoine Pitroud01d396e2013-10-12 22:52:43 +02005937 body = _Py_asdl_seq_new(len, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005938 if (body == NULL) goto failed;
5939 for (i = 0; i < len; i++) {
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07005940 stmt_ty val;
Serhiy Storchaka43c97312019-09-10 13:02:30 +03005941 PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
5942 Py_INCREF(tmp2);
Victor Stinnerf8599272020-07-03 16:57:19 +02005943 res = obj2ast_stmt(state, tmp2, &val, arena);
Serhiy Storchaka43c97312019-09-10 13:02:30 +03005944 Py_DECREF(tmp2);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005945 if (res != 0) goto failed;
Serhiy Storchakacf380602016-10-07 21:51:28 +03005946 if (len != PyList_GET_SIZE(tmp)) {
5947 PyErr_SetString(PyExc_RuntimeError, "For field \"body\" changed size during iteration");
5948 goto failed;
5949 }
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07005950 asdl_seq_SET(body, i, val);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005951 }
Victor Stinner1acc1292013-07-27 00:03:47 +02005952 Py_CLEAR(tmp);
Serhiy Storchakaf320be72018-01-25 10:49:40 +02005953 }
Victor Stinnerf8599272020-07-03 16:57:19 +02005954 if (_PyObject_LookupAttr(obj, state->orelse, &tmp) < 0) {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005955 return 1;
5956 }
Serhiy Storchakaf320be72018-01-25 10:49:40 +02005957 if (tmp == NULL) {
5958 PyErr_SetString(PyExc_TypeError, "required field \"orelse\" missing from For");
5959 return 1;
5960 }
5961 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005962 int res;
5963 Py_ssize_t len;
5964 Py_ssize_t i;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005965 if (!PyList_Check(tmp)) {
Dino Viehlandac46eb42019-09-11 10:16:34 -07005966 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 +02005967 goto failed;
5968 }
5969 len = PyList_GET_SIZE(tmp);
Antoine Pitroud01d396e2013-10-12 22:52:43 +02005970 orelse = _Py_asdl_seq_new(len, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005971 if (orelse == NULL) goto failed;
5972 for (i = 0; i < len; i++) {
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07005973 stmt_ty val;
Serhiy Storchaka43c97312019-09-10 13:02:30 +03005974 PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
5975 Py_INCREF(tmp2);
Victor Stinnerf8599272020-07-03 16:57:19 +02005976 res = obj2ast_stmt(state, tmp2, &val, arena);
Serhiy Storchaka43c97312019-09-10 13:02:30 +03005977 Py_DECREF(tmp2);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005978 if (res != 0) goto failed;
Serhiy Storchakacf380602016-10-07 21:51:28 +03005979 if (len != PyList_GET_SIZE(tmp)) {
5980 PyErr_SetString(PyExc_RuntimeError, "For field \"orelse\" changed size during iteration");
5981 goto failed;
5982 }
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07005983 asdl_seq_SET(orelse, i, val);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005984 }
Victor Stinner1acc1292013-07-27 00:03:47 +02005985 Py_CLEAR(tmp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005986 }
Victor Stinnerf8599272020-07-03 16:57:19 +02005987 if (_PyObject_LookupAttr(obj, state->type_comment, &tmp) < 0) {
Guido van Rossumdcfcd142019-01-31 03:40:27 -08005988 return 1;
5989 }
5990 if (tmp == NULL || tmp == Py_None) {
5991 Py_CLEAR(tmp);
5992 type_comment = NULL;
5993 }
5994 else {
5995 int res;
Victor Stinnerf8599272020-07-03 16:57:19 +02005996 res = obj2ast_string(state, tmp, &type_comment, arena);
Guido van Rossumdcfcd142019-01-31 03:40:27 -08005997 if (res != 0) goto failed;
5998 Py_CLEAR(tmp);
5999 }
6000 *out = For(target, iter, body, orelse, type_comment, lineno,
6001 col_offset, end_lineno, end_col_offset, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006002 if (*out == NULL) goto failed;
6003 return 0;
6004 }
Victor Stinnerf8599272020-07-03 16:57:19 +02006005 tp = state->AsyncFor_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07006006 isinstance = PyObject_IsInstance(obj, tp);
Yury Selivanov75445082015-05-11 22:57:16 -04006007 if (isinstance == -1) {
6008 return 1;
6009 }
6010 if (isinstance) {
6011 expr_ty target;
6012 expr_ty iter;
6013 asdl_seq* body;
6014 asdl_seq* orelse;
Guido van Rossumdcfcd142019-01-31 03:40:27 -08006015 string type_comment;
Yury Selivanov75445082015-05-11 22:57:16 -04006016
Victor Stinnerf8599272020-07-03 16:57:19 +02006017 if (_PyObject_LookupAttr(obj, state->target, &tmp) < 0) {
Serhiy Storchakaf320be72018-01-25 10:49:40 +02006018 return 1;
6019 }
6020 if (tmp == NULL) {
6021 PyErr_SetString(PyExc_TypeError, "required field \"target\" missing from AsyncFor");
6022 return 1;
6023 }
6024 else {
Yury Selivanov75445082015-05-11 22:57:16 -04006025 int res;
Victor Stinnerf8599272020-07-03 16:57:19 +02006026 res = obj2ast_expr(state, tmp, &target, arena);
Yury Selivanov75445082015-05-11 22:57:16 -04006027 if (res != 0) goto failed;
6028 Py_CLEAR(tmp);
Serhiy Storchakaf320be72018-01-25 10:49:40 +02006029 }
Victor Stinnerf8599272020-07-03 16:57:19 +02006030 if (_PyObject_LookupAttr(obj, state->iter, &tmp) < 0) {
Yury Selivanov75445082015-05-11 22:57:16 -04006031 return 1;
6032 }
Serhiy Storchakaf320be72018-01-25 10:49:40 +02006033 if (tmp == NULL) {
6034 PyErr_SetString(PyExc_TypeError, "required field \"iter\" missing from AsyncFor");
6035 return 1;
6036 }
6037 else {
Yury Selivanov75445082015-05-11 22:57:16 -04006038 int res;
Victor Stinnerf8599272020-07-03 16:57:19 +02006039 res = obj2ast_expr(state, tmp, &iter, arena);
Yury Selivanov75445082015-05-11 22:57:16 -04006040 if (res != 0) goto failed;
6041 Py_CLEAR(tmp);
Serhiy Storchakaf320be72018-01-25 10:49:40 +02006042 }
Victor Stinnerf8599272020-07-03 16:57:19 +02006043 if (_PyObject_LookupAttr(obj, state->body, &tmp) < 0) {
Yury Selivanov75445082015-05-11 22:57:16 -04006044 return 1;
6045 }
Serhiy Storchakaf320be72018-01-25 10:49:40 +02006046 if (tmp == NULL) {
6047 PyErr_SetString(PyExc_TypeError, "required field \"body\" missing from AsyncFor");
6048 return 1;
6049 }
6050 else {
Yury Selivanov75445082015-05-11 22:57:16 -04006051 int res;
6052 Py_ssize_t len;
6053 Py_ssize_t i;
Yury Selivanov75445082015-05-11 22:57:16 -04006054 if (!PyList_Check(tmp)) {
Dino Viehlandac46eb42019-09-11 10:16:34 -07006055 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 -04006056 goto failed;
6057 }
6058 len = PyList_GET_SIZE(tmp);
6059 body = _Py_asdl_seq_new(len, arena);
6060 if (body == NULL) goto failed;
6061 for (i = 0; i < len; i++) {
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07006062 stmt_ty val;
Serhiy Storchaka43c97312019-09-10 13:02:30 +03006063 PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
6064 Py_INCREF(tmp2);
Victor Stinnerf8599272020-07-03 16:57:19 +02006065 res = obj2ast_stmt(state, tmp2, &val, arena);
Serhiy Storchaka43c97312019-09-10 13:02:30 +03006066 Py_DECREF(tmp2);
Yury Selivanov75445082015-05-11 22:57:16 -04006067 if (res != 0) goto failed;
Serhiy Storchakacf380602016-10-07 21:51:28 +03006068 if (len != PyList_GET_SIZE(tmp)) {
6069 PyErr_SetString(PyExc_RuntimeError, "AsyncFor field \"body\" changed size during iteration");
6070 goto failed;
6071 }
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07006072 asdl_seq_SET(body, i, val);
Yury Selivanov75445082015-05-11 22:57:16 -04006073 }
6074 Py_CLEAR(tmp);
Serhiy Storchakaf320be72018-01-25 10:49:40 +02006075 }
Victor Stinnerf8599272020-07-03 16:57:19 +02006076 if (_PyObject_LookupAttr(obj, state->orelse, &tmp) < 0) {
Yury Selivanov75445082015-05-11 22:57:16 -04006077 return 1;
6078 }
Serhiy Storchakaf320be72018-01-25 10:49:40 +02006079 if (tmp == NULL) {
6080 PyErr_SetString(PyExc_TypeError, "required field \"orelse\" missing from AsyncFor");
6081 return 1;
6082 }
6083 else {
Yury Selivanov75445082015-05-11 22:57:16 -04006084 int res;
6085 Py_ssize_t len;
6086 Py_ssize_t i;
Yury Selivanov75445082015-05-11 22:57:16 -04006087 if (!PyList_Check(tmp)) {
Dino Viehlandac46eb42019-09-11 10:16:34 -07006088 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 -04006089 goto failed;
6090 }
6091 len = PyList_GET_SIZE(tmp);
6092 orelse = _Py_asdl_seq_new(len, arena);
6093 if (orelse == NULL) goto failed;
6094 for (i = 0; i < len; i++) {
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07006095 stmt_ty val;
Serhiy Storchaka43c97312019-09-10 13:02:30 +03006096 PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
6097 Py_INCREF(tmp2);
Victor Stinnerf8599272020-07-03 16:57:19 +02006098 res = obj2ast_stmt(state, tmp2, &val, arena);
Serhiy Storchaka43c97312019-09-10 13:02:30 +03006099 Py_DECREF(tmp2);
Yury Selivanov75445082015-05-11 22:57:16 -04006100 if (res != 0) goto failed;
Serhiy Storchakacf380602016-10-07 21:51:28 +03006101 if (len != PyList_GET_SIZE(tmp)) {
6102 PyErr_SetString(PyExc_RuntimeError, "AsyncFor field \"orelse\" changed size during iteration");
6103 goto failed;
6104 }
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07006105 asdl_seq_SET(orelse, i, val);
Yury Selivanov75445082015-05-11 22:57:16 -04006106 }
6107 Py_CLEAR(tmp);
Yury Selivanov75445082015-05-11 22:57:16 -04006108 }
Victor Stinnerf8599272020-07-03 16:57:19 +02006109 if (_PyObject_LookupAttr(obj, state->type_comment, &tmp) < 0) {
Guido van Rossumdcfcd142019-01-31 03:40:27 -08006110 return 1;
6111 }
6112 if (tmp == NULL || tmp == Py_None) {
6113 Py_CLEAR(tmp);
6114 type_comment = NULL;
6115 }
6116 else {
6117 int res;
Victor Stinnerf8599272020-07-03 16:57:19 +02006118 res = obj2ast_string(state, tmp, &type_comment, arena);
Guido van Rossumdcfcd142019-01-31 03:40:27 -08006119 if (res != 0) goto failed;
6120 Py_CLEAR(tmp);
6121 }
6122 *out = AsyncFor(target, iter, body, orelse, type_comment, lineno,
6123 col_offset, end_lineno, end_col_offset, arena);
Yury Selivanov75445082015-05-11 22:57:16 -04006124 if (*out == NULL) goto failed;
6125 return 0;
6126 }
Victor Stinnerf8599272020-07-03 16:57:19 +02006127 tp = state->While_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07006128 isinstance = PyObject_IsInstance(obj, tp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006129 if (isinstance == -1) {
6130 return 1;
6131 }
6132 if (isinstance) {
6133 expr_ty test;
6134 asdl_seq* body;
6135 asdl_seq* orelse;
6136
Victor Stinnerf8599272020-07-03 16:57:19 +02006137 if (_PyObject_LookupAttr(obj, state->test, &tmp) < 0) {
Serhiy Storchakaf320be72018-01-25 10:49:40 +02006138 return 1;
6139 }
6140 if (tmp == NULL) {
6141 PyErr_SetString(PyExc_TypeError, "required field \"test\" missing from While");
6142 return 1;
6143 }
6144 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006145 int res;
Victor Stinnerf8599272020-07-03 16:57:19 +02006146 res = obj2ast_expr(state, tmp, &test, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006147 if (res != 0) goto failed;
Victor Stinner1acc1292013-07-27 00:03:47 +02006148 Py_CLEAR(tmp);
Serhiy Storchakaf320be72018-01-25 10:49:40 +02006149 }
Victor Stinnerf8599272020-07-03 16:57:19 +02006150 if (_PyObject_LookupAttr(obj, state->body, &tmp) < 0) {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006151 return 1;
6152 }
Serhiy Storchakaf320be72018-01-25 10:49:40 +02006153 if (tmp == NULL) {
6154 PyErr_SetString(PyExc_TypeError, "required field \"body\" missing from While");
6155 return 1;
6156 }
6157 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006158 int res;
6159 Py_ssize_t len;
6160 Py_ssize_t i;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006161 if (!PyList_Check(tmp)) {
Dino Viehlandac46eb42019-09-11 10:16:34 -07006162 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 +02006163 goto failed;
6164 }
6165 len = PyList_GET_SIZE(tmp);
Antoine Pitroud01d396e2013-10-12 22:52:43 +02006166 body = _Py_asdl_seq_new(len, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006167 if (body == NULL) goto failed;
6168 for (i = 0; i < len; i++) {
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07006169 stmt_ty val;
Serhiy Storchaka43c97312019-09-10 13:02:30 +03006170 PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
6171 Py_INCREF(tmp2);
Victor Stinnerf8599272020-07-03 16:57:19 +02006172 res = obj2ast_stmt(state, tmp2, &val, arena);
Serhiy Storchaka43c97312019-09-10 13:02:30 +03006173 Py_DECREF(tmp2);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006174 if (res != 0) goto failed;
Serhiy Storchakacf380602016-10-07 21:51:28 +03006175 if (len != PyList_GET_SIZE(tmp)) {
6176 PyErr_SetString(PyExc_RuntimeError, "While field \"body\" changed size during iteration");
6177 goto failed;
6178 }
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07006179 asdl_seq_SET(body, i, val);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006180 }
Victor Stinner1acc1292013-07-27 00:03:47 +02006181 Py_CLEAR(tmp);
Serhiy Storchakaf320be72018-01-25 10:49:40 +02006182 }
Victor Stinnerf8599272020-07-03 16:57:19 +02006183 if (_PyObject_LookupAttr(obj, state->orelse, &tmp) < 0) {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006184 return 1;
6185 }
Serhiy Storchakaf320be72018-01-25 10:49:40 +02006186 if (tmp == NULL) {
6187 PyErr_SetString(PyExc_TypeError, "required field \"orelse\" missing from While");
6188 return 1;
6189 }
6190 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006191 int res;
6192 Py_ssize_t len;
6193 Py_ssize_t i;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006194 if (!PyList_Check(tmp)) {
Dino Viehlandac46eb42019-09-11 10:16:34 -07006195 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 +02006196 goto failed;
6197 }
6198 len = PyList_GET_SIZE(tmp);
Antoine Pitroud01d396e2013-10-12 22:52:43 +02006199 orelse = _Py_asdl_seq_new(len, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006200 if (orelse == NULL) goto failed;
6201 for (i = 0; i < len; i++) {
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07006202 stmt_ty val;
Serhiy Storchaka43c97312019-09-10 13:02:30 +03006203 PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
6204 Py_INCREF(tmp2);
Victor Stinnerf8599272020-07-03 16:57:19 +02006205 res = obj2ast_stmt(state, tmp2, &val, arena);
Serhiy Storchaka43c97312019-09-10 13:02:30 +03006206 Py_DECREF(tmp2);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006207 if (res != 0) goto failed;
Serhiy Storchakacf380602016-10-07 21:51:28 +03006208 if (len != PyList_GET_SIZE(tmp)) {
6209 PyErr_SetString(PyExc_RuntimeError, "While field \"orelse\" changed size during iteration");
6210 goto failed;
6211 }
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07006212 asdl_seq_SET(orelse, i, val);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006213 }
Victor Stinner1acc1292013-07-27 00:03:47 +02006214 Py_CLEAR(tmp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006215 }
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00006216 *out = While(test, body, orelse, lineno, col_offset, end_lineno,
6217 end_col_offset, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006218 if (*out == NULL) goto failed;
6219 return 0;
6220 }
Victor Stinnerf8599272020-07-03 16:57:19 +02006221 tp = state->If_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07006222 isinstance = PyObject_IsInstance(obj, tp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006223 if (isinstance == -1) {
6224 return 1;
6225 }
6226 if (isinstance) {
6227 expr_ty test;
6228 asdl_seq* body;
6229 asdl_seq* orelse;
6230
Victor Stinnerf8599272020-07-03 16:57:19 +02006231 if (_PyObject_LookupAttr(obj, state->test, &tmp) < 0) {
Serhiy Storchakaf320be72018-01-25 10:49:40 +02006232 return 1;
6233 }
6234 if (tmp == NULL) {
6235 PyErr_SetString(PyExc_TypeError, "required field \"test\" missing from If");
6236 return 1;
6237 }
6238 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006239 int res;
Victor Stinnerf8599272020-07-03 16:57:19 +02006240 res = obj2ast_expr(state, tmp, &test, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006241 if (res != 0) goto failed;
Victor Stinner1acc1292013-07-27 00:03:47 +02006242 Py_CLEAR(tmp);
Serhiy Storchakaf320be72018-01-25 10:49:40 +02006243 }
Victor Stinnerf8599272020-07-03 16:57:19 +02006244 if (_PyObject_LookupAttr(obj, state->body, &tmp) < 0) {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006245 return 1;
6246 }
Serhiy Storchakaf320be72018-01-25 10:49:40 +02006247 if (tmp == NULL) {
6248 PyErr_SetString(PyExc_TypeError, "required field \"body\" missing from If");
6249 return 1;
6250 }
6251 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006252 int res;
6253 Py_ssize_t len;
6254 Py_ssize_t i;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006255 if (!PyList_Check(tmp)) {
Dino Viehlandac46eb42019-09-11 10:16:34 -07006256 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 +02006257 goto failed;
6258 }
6259 len = PyList_GET_SIZE(tmp);
Antoine Pitroud01d396e2013-10-12 22:52:43 +02006260 body = _Py_asdl_seq_new(len, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006261 if (body == NULL) goto failed;
6262 for (i = 0; i < len; i++) {
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07006263 stmt_ty val;
Serhiy Storchaka43c97312019-09-10 13:02:30 +03006264 PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
6265 Py_INCREF(tmp2);
Victor Stinnerf8599272020-07-03 16:57:19 +02006266 res = obj2ast_stmt(state, tmp2, &val, arena);
Serhiy Storchaka43c97312019-09-10 13:02:30 +03006267 Py_DECREF(tmp2);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006268 if (res != 0) goto failed;
Serhiy Storchakacf380602016-10-07 21:51:28 +03006269 if (len != PyList_GET_SIZE(tmp)) {
6270 PyErr_SetString(PyExc_RuntimeError, "If field \"body\" changed size during iteration");
6271 goto failed;
6272 }
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07006273 asdl_seq_SET(body, i, val);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006274 }
Victor Stinner1acc1292013-07-27 00:03:47 +02006275 Py_CLEAR(tmp);
Serhiy Storchakaf320be72018-01-25 10:49:40 +02006276 }
Victor Stinnerf8599272020-07-03 16:57:19 +02006277 if (_PyObject_LookupAttr(obj, state->orelse, &tmp) < 0) {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006278 return 1;
6279 }
Serhiy Storchakaf320be72018-01-25 10:49:40 +02006280 if (tmp == NULL) {
6281 PyErr_SetString(PyExc_TypeError, "required field \"orelse\" missing from If");
6282 return 1;
6283 }
6284 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006285 int res;
6286 Py_ssize_t len;
6287 Py_ssize_t i;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006288 if (!PyList_Check(tmp)) {
Dino Viehlandac46eb42019-09-11 10:16:34 -07006289 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 +02006290 goto failed;
6291 }
6292 len = PyList_GET_SIZE(tmp);
Antoine Pitroud01d396e2013-10-12 22:52:43 +02006293 orelse = _Py_asdl_seq_new(len, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006294 if (orelse == NULL) goto failed;
6295 for (i = 0; i < len; i++) {
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07006296 stmt_ty val;
Serhiy Storchaka43c97312019-09-10 13:02:30 +03006297 PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
6298 Py_INCREF(tmp2);
Victor Stinnerf8599272020-07-03 16:57:19 +02006299 res = obj2ast_stmt(state, tmp2, &val, arena);
Serhiy Storchaka43c97312019-09-10 13:02:30 +03006300 Py_DECREF(tmp2);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006301 if (res != 0) goto failed;
Serhiy Storchakacf380602016-10-07 21:51:28 +03006302 if (len != PyList_GET_SIZE(tmp)) {
6303 PyErr_SetString(PyExc_RuntimeError, "If field \"orelse\" changed size during iteration");
6304 goto failed;
6305 }
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07006306 asdl_seq_SET(orelse, i, val);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006307 }
Victor Stinner1acc1292013-07-27 00:03:47 +02006308 Py_CLEAR(tmp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006309 }
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00006310 *out = If(test, body, orelse, lineno, col_offset, end_lineno,
6311 end_col_offset, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006312 if (*out == NULL) goto failed;
6313 return 0;
6314 }
Victor Stinnerf8599272020-07-03 16:57:19 +02006315 tp = state->With_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07006316 isinstance = PyObject_IsInstance(obj, tp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006317 if (isinstance == -1) {
6318 return 1;
6319 }
6320 if (isinstance) {
6321 asdl_seq* items;
6322 asdl_seq* body;
Guido van Rossumdcfcd142019-01-31 03:40:27 -08006323 string type_comment;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006324
Victor Stinnerf8599272020-07-03 16:57:19 +02006325 if (_PyObject_LookupAttr(obj, state->items, &tmp) < 0) {
Serhiy Storchakaf320be72018-01-25 10:49:40 +02006326 return 1;
6327 }
6328 if (tmp == NULL) {
6329 PyErr_SetString(PyExc_TypeError, "required field \"items\" missing from With");
6330 return 1;
6331 }
6332 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006333 int res;
6334 Py_ssize_t len;
6335 Py_ssize_t i;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006336 if (!PyList_Check(tmp)) {
Dino Viehlandac46eb42019-09-11 10:16:34 -07006337 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 +02006338 goto failed;
6339 }
6340 len = PyList_GET_SIZE(tmp);
Antoine Pitroud01d396e2013-10-12 22:52:43 +02006341 items = _Py_asdl_seq_new(len, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006342 if (items == NULL) goto failed;
6343 for (i = 0; i < len; i++) {
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07006344 withitem_ty val;
Serhiy Storchaka43c97312019-09-10 13:02:30 +03006345 PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
6346 Py_INCREF(tmp2);
Victor Stinnerf8599272020-07-03 16:57:19 +02006347 res = obj2ast_withitem(state, tmp2, &val, arena);
Serhiy Storchaka43c97312019-09-10 13:02:30 +03006348 Py_DECREF(tmp2);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006349 if (res != 0) goto failed;
Serhiy Storchakacf380602016-10-07 21:51:28 +03006350 if (len != PyList_GET_SIZE(tmp)) {
6351 PyErr_SetString(PyExc_RuntimeError, "With field \"items\" changed size during iteration");
6352 goto failed;
6353 }
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07006354 asdl_seq_SET(items, i, val);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006355 }
Victor Stinner1acc1292013-07-27 00:03:47 +02006356 Py_CLEAR(tmp);
Serhiy Storchakaf320be72018-01-25 10:49:40 +02006357 }
Victor Stinnerf8599272020-07-03 16:57:19 +02006358 if (_PyObject_LookupAttr(obj, state->body, &tmp) < 0) {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006359 return 1;
6360 }
Serhiy Storchakaf320be72018-01-25 10:49:40 +02006361 if (tmp == NULL) {
6362 PyErr_SetString(PyExc_TypeError, "required field \"body\" missing from With");
6363 return 1;
6364 }
6365 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006366 int res;
6367 Py_ssize_t len;
6368 Py_ssize_t i;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006369 if (!PyList_Check(tmp)) {
Dino Viehlandac46eb42019-09-11 10:16:34 -07006370 PyErr_Format(PyExc_TypeError, "With field \"body\" must be a list, not a %.200s", _PyType_Name(Py_TYPE(tmp)));
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006371 goto failed;
6372 }
6373 len = PyList_GET_SIZE(tmp);
Antoine Pitroud01d396e2013-10-12 22:52:43 +02006374 body = _Py_asdl_seq_new(len, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006375 if (body == NULL) goto failed;
6376 for (i = 0; i < len; i++) {
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07006377 stmt_ty val;
Serhiy Storchaka43c97312019-09-10 13:02:30 +03006378 PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
6379 Py_INCREF(tmp2);
Victor Stinnerf8599272020-07-03 16:57:19 +02006380 res = obj2ast_stmt(state, tmp2, &val, arena);
Serhiy Storchaka43c97312019-09-10 13:02:30 +03006381 Py_DECREF(tmp2);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006382 if (res != 0) goto failed;
Serhiy Storchakacf380602016-10-07 21:51:28 +03006383 if (len != PyList_GET_SIZE(tmp)) {
6384 PyErr_SetString(PyExc_RuntimeError, "With field \"body\" changed size during iteration");
6385 goto failed;
6386 }
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07006387 asdl_seq_SET(body, i, val);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006388 }
Victor Stinner1acc1292013-07-27 00:03:47 +02006389 Py_CLEAR(tmp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006390 }
Victor Stinnerf8599272020-07-03 16:57:19 +02006391 if (_PyObject_LookupAttr(obj, state->type_comment, &tmp) < 0) {
Guido van Rossumdcfcd142019-01-31 03:40:27 -08006392 return 1;
6393 }
6394 if (tmp == NULL || tmp == Py_None) {
6395 Py_CLEAR(tmp);
6396 type_comment = NULL;
6397 }
6398 else {
6399 int res;
Victor Stinnerf8599272020-07-03 16:57:19 +02006400 res = obj2ast_string(state, tmp, &type_comment, arena);
Guido van Rossumdcfcd142019-01-31 03:40:27 -08006401 if (res != 0) goto failed;
6402 Py_CLEAR(tmp);
6403 }
6404 *out = With(items, body, type_comment, lineno, col_offset, end_lineno,
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00006405 end_col_offset, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006406 if (*out == NULL) goto failed;
6407 return 0;
6408 }
Victor Stinnerf8599272020-07-03 16:57:19 +02006409 tp = state->AsyncWith_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07006410 isinstance = PyObject_IsInstance(obj, tp);
Yury Selivanov75445082015-05-11 22:57:16 -04006411 if (isinstance == -1) {
6412 return 1;
6413 }
6414 if (isinstance) {
6415 asdl_seq* items;
6416 asdl_seq* body;
Guido van Rossumdcfcd142019-01-31 03:40:27 -08006417 string type_comment;
Yury Selivanov75445082015-05-11 22:57:16 -04006418
Victor Stinnerf8599272020-07-03 16:57:19 +02006419 if (_PyObject_LookupAttr(obj, state->items, &tmp) < 0) {
Serhiy Storchakaf320be72018-01-25 10:49:40 +02006420 return 1;
6421 }
6422 if (tmp == NULL) {
6423 PyErr_SetString(PyExc_TypeError, "required field \"items\" missing from AsyncWith");
6424 return 1;
6425 }
6426 else {
Yury Selivanov75445082015-05-11 22:57:16 -04006427 int res;
6428 Py_ssize_t len;
6429 Py_ssize_t i;
Yury Selivanov75445082015-05-11 22:57:16 -04006430 if (!PyList_Check(tmp)) {
Dino Viehlandac46eb42019-09-11 10:16:34 -07006431 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 -04006432 goto failed;
6433 }
6434 len = PyList_GET_SIZE(tmp);
6435 items = _Py_asdl_seq_new(len, arena);
6436 if (items == NULL) goto failed;
6437 for (i = 0; i < len; i++) {
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07006438 withitem_ty val;
Serhiy Storchaka43c97312019-09-10 13:02:30 +03006439 PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
6440 Py_INCREF(tmp2);
Victor Stinnerf8599272020-07-03 16:57:19 +02006441 res = obj2ast_withitem(state, tmp2, &val, arena);
Serhiy Storchaka43c97312019-09-10 13:02:30 +03006442 Py_DECREF(tmp2);
Yury Selivanov75445082015-05-11 22:57:16 -04006443 if (res != 0) goto failed;
Serhiy Storchakacf380602016-10-07 21:51:28 +03006444 if (len != PyList_GET_SIZE(tmp)) {
6445 PyErr_SetString(PyExc_RuntimeError, "AsyncWith field \"items\" changed size during iteration");
6446 goto failed;
6447 }
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07006448 asdl_seq_SET(items, i, val);
Yury Selivanov75445082015-05-11 22:57:16 -04006449 }
6450 Py_CLEAR(tmp);
Serhiy Storchakaf320be72018-01-25 10:49:40 +02006451 }
Victor Stinnerf8599272020-07-03 16:57:19 +02006452 if (_PyObject_LookupAttr(obj, state->body, &tmp) < 0) {
Yury Selivanov75445082015-05-11 22:57:16 -04006453 return 1;
6454 }
Serhiy Storchakaf320be72018-01-25 10:49:40 +02006455 if (tmp == NULL) {
6456 PyErr_SetString(PyExc_TypeError, "required field \"body\" missing from AsyncWith");
6457 return 1;
6458 }
6459 else {
Yury Selivanov75445082015-05-11 22:57:16 -04006460 int res;
6461 Py_ssize_t len;
6462 Py_ssize_t i;
Yury Selivanov75445082015-05-11 22:57:16 -04006463 if (!PyList_Check(tmp)) {
Dino Viehlandac46eb42019-09-11 10:16:34 -07006464 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 -04006465 goto failed;
6466 }
6467 len = PyList_GET_SIZE(tmp);
6468 body = _Py_asdl_seq_new(len, arena);
6469 if (body == NULL) goto failed;
6470 for (i = 0; i < len; i++) {
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07006471 stmt_ty val;
Serhiy Storchaka43c97312019-09-10 13:02:30 +03006472 PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
6473 Py_INCREF(tmp2);
Victor Stinnerf8599272020-07-03 16:57:19 +02006474 res = obj2ast_stmt(state, tmp2, &val, arena);
Serhiy Storchaka43c97312019-09-10 13:02:30 +03006475 Py_DECREF(tmp2);
Yury Selivanov75445082015-05-11 22:57:16 -04006476 if (res != 0) goto failed;
Serhiy Storchakacf380602016-10-07 21:51:28 +03006477 if (len != PyList_GET_SIZE(tmp)) {
6478 PyErr_SetString(PyExc_RuntimeError, "AsyncWith field \"body\" changed size during iteration");
6479 goto failed;
6480 }
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07006481 asdl_seq_SET(body, i, val);
Yury Selivanov75445082015-05-11 22:57:16 -04006482 }
6483 Py_CLEAR(tmp);
Yury Selivanov75445082015-05-11 22:57:16 -04006484 }
Victor Stinnerf8599272020-07-03 16:57:19 +02006485 if (_PyObject_LookupAttr(obj, state->type_comment, &tmp) < 0) {
Guido van Rossumdcfcd142019-01-31 03:40:27 -08006486 return 1;
6487 }
6488 if (tmp == NULL || tmp == Py_None) {
6489 Py_CLEAR(tmp);
6490 type_comment = NULL;
6491 }
6492 else {
6493 int res;
Victor Stinnerf8599272020-07-03 16:57:19 +02006494 res = obj2ast_string(state, tmp, &type_comment, arena);
Guido van Rossumdcfcd142019-01-31 03:40:27 -08006495 if (res != 0) goto failed;
6496 Py_CLEAR(tmp);
6497 }
6498 *out = AsyncWith(items, body, type_comment, lineno, col_offset,
6499 end_lineno, end_col_offset, arena);
Yury Selivanov75445082015-05-11 22:57:16 -04006500 if (*out == NULL) goto failed;
6501 return 0;
6502 }
Victor Stinnerf8599272020-07-03 16:57:19 +02006503 tp = state->Raise_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07006504 isinstance = PyObject_IsInstance(obj, tp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006505 if (isinstance == -1) {
6506 return 1;
6507 }
6508 if (isinstance) {
6509 expr_ty exc;
6510 expr_ty cause;
6511
Victor Stinnerf8599272020-07-03 16:57:19 +02006512 if (_PyObject_LookupAttr(obj, state->exc, &tmp) < 0) {
Serhiy Storchakaf320be72018-01-25 10:49:40 +02006513 return 1;
6514 }
6515 if (tmp == NULL || tmp == Py_None) {
6516 Py_CLEAR(tmp);
6517 exc = NULL;
6518 }
6519 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006520 int res;
Victor Stinnerf8599272020-07-03 16:57:19 +02006521 res = obj2ast_expr(state, tmp, &exc, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006522 if (res != 0) goto failed;
Victor Stinner1acc1292013-07-27 00:03:47 +02006523 Py_CLEAR(tmp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006524 }
Victor Stinnerf8599272020-07-03 16:57:19 +02006525 if (_PyObject_LookupAttr(obj, state->cause, &tmp) < 0) {
Serhiy Storchakaf320be72018-01-25 10:49:40 +02006526 return 1;
6527 }
6528 if (tmp == NULL || tmp == Py_None) {
6529 Py_CLEAR(tmp);
6530 cause = NULL;
6531 }
6532 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006533 int res;
Victor Stinnerf8599272020-07-03 16:57:19 +02006534 res = obj2ast_expr(state, tmp, &cause, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006535 if (res != 0) goto failed;
Victor Stinner1acc1292013-07-27 00:03:47 +02006536 Py_CLEAR(tmp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006537 }
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00006538 *out = Raise(exc, cause, lineno, col_offset, end_lineno,
6539 end_col_offset, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006540 if (*out == NULL) goto failed;
6541 return 0;
6542 }
Victor Stinnerf8599272020-07-03 16:57:19 +02006543 tp = state->Try_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07006544 isinstance = PyObject_IsInstance(obj, tp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006545 if (isinstance == -1) {
6546 return 1;
6547 }
6548 if (isinstance) {
6549 asdl_seq* body;
6550 asdl_seq* handlers;
6551 asdl_seq* orelse;
6552 asdl_seq* finalbody;
6553
Victor Stinnerf8599272020-07-03 16:57:19 +02006554 if (_PyObject_LookupAttr(obj, state->body, &tmp) < 0) {
Serhiy Storchakaf320be72018-01-25 10:49:40 +02006555 return 1;
6556 }
6557 if (tmp == NULL) {
6558 PyErr_SetString(PyExc_TypeError, "required field \"body\" missing from Try");
6559 return 1;
6560 }
6561 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006562 int res;
6563 Py_ssize_t len;
6564 Py_ssize_t i;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006565 if (!PyList_Check(tmp)) {
Dino Viehlandac46eb42019-09-11 10:16:34 -07006566 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 +02006567 goto failed;
6568 }
6569 len = PyList_GET_SIZE(tmp);
Antoine Pitroud01d396e2013-10-12 22:52:43 +02006570 body = _Py_asdl_seq_new(len, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006571 if (body == NULL) goto failed;
6572 for (i = 0; i < len; i++) {
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07006573 stmt_ty val;
Serhiy Storchaka43c97312019-09-10 13:02:30 +03006574 PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
6575 Py_INCREF(tmp2);
Victor Stinnerf8599272020-07-03 16:57:19 +02006576 res = obj2ast_stmt(state, tmp2, &val, arena);
Serhiy Storchaka43c97312019-09-10 13:02:30 +03006577 Py_DECREF(tmp2);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006578 if (res != 0) goto failed;
Serhiy Storchakacf380602016-10-07 21:51:28 +03006579 if (len != PyList_GET_SIZE(tmp)) {
6580 PyErr_SetString(PyExc_RuntimeError, "Try field \"body\" changed size during iteration");
6581 goto failed;
6582 }
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07006583 asdl_seq_SET(body, i, val);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006584 }
Victor Stinner1acc1292013-07-27 00:03:47 +02006585 Py_CLEAR(tmp);
Serhiy Storchakaf320be72018-01-25 10:49:40 +02006586 }
Victor Stinnerf8599272020-07-03 16:57:19 +02006587 if (_PyObject_LookupAttr(obj, state->handlers, &tmp) < 0) {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006588 return 1;
6589 }
Serhiy Storchakaf320be72018-01-25 10:49:40 +02006590 if (tmp == NULL) {
6591 PyErr_SetString(PyExc_TypeError, "required field \"handlers\" missing from Try");
6592 return 1;
6593 }
6594 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006595 int res;
6596 Py_ssize_t len;
6597 Py_ssize_t i;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006598 if (!PyList_Check(tmp)) {
Dino Viehlandac46eb42019-09-11 10:16:34 -07006599 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 +02006600 goto failed;
6601 }
6602 len = PyList_GET_SIZE(tmp);
Antoine Pitroud01d396e2013-10-12 22:52:43 +02006603 handlers = _Py_asdl_seq_new(len, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006604 if (handlers == NULL) goto failed;
6605 for (i = 0; i < len; i++) {
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07006606 excepthandler_ty val;
Serhiy Storchaka43c97312019-09-10 13:02:30 +03006607 PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
6608 Py_INCREF(tmp2);
Victor Stinnerf8599272020-07-03 16:57:19 +02006609 res = obj2ast_excepthandler(state, tmp2, &val, arena);
Serhiy Storchaka43c97312019-09-10 13:02:30 +03006610 Py_DECREF(tmp2);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006611 if (res != 0) goto failed;
Serhiy Storchakacf380602016-10-07 21:51:28 +03006612 if (len != PyList_GET_SIZE(tmp)) {
6613 PyErr_SetString(PyExc_RuntimeError, "Try field \"handlers\" changed size during iteration");
6614 goto failed;
6615 }
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07006616 asdl_seq_SET(handlers, i, val);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006617 }
Victor Stinner1acc1292013-07-27 00:03:47 +02006618 Py_CLEAR(tmp);
Serhiy Storchakaf320be72018-01-25 10:49:40 +02006619 }
Victor Stinnerf8599272020-07-03 16:57:19 +02006620 if (_PyObject_LookupAttr(obj, state->orelse, &tmp) < 0) {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006621 return 1;
6622 }
Serhiy Storchakaf320be72018-01-25 10:49:40 +02006623 if (tmp == NULL) {
6624 PyErr_SetString(PyExc_TypeError, "required field \"orelse\" missing from Try");
6625 return 1;
6626 }
6627 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006628 int res;
6629 Py_ssize_t len;
6630 Py_ssize_t i;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006631 if (!PyList_Check(tmp)) {
Dino Viehlandac46eb42019-09-11 10:16:34 -07006632 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 +02006633 goto failed;
6634 }
6635 len = PyList_GET_SIZE(tmp);
Antoine Pitroud01d396e2013-10-12 22:52:43 +02006636 orelse = _Py_asdl_seq_new(len, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006637 if (orelse == NULL) goto failed;
6638 for (i = 0; i < len; i++) {
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07006639 stmt_ty val;
Serhiy Storchaka43c97312019-09-10 13:02:30 +03006640 PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
6641 Py_INCREF(tmp2);
Victor Stinnerf8599272020-07-03 16:57:19 +02006642 res = obj2ast_stmt(state, tmp2, &val, arena);
Serhiy Storchaka43c97312019-09-10 13:02:30 +03006643 Py_DECREF(tmp2);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006644 if (res != 0) goto failed;
Serhiy Storchakacf380602016-10-07 21:51:28 +03006645 if (len != PyList_GET_SIZE(tmp)) {
6646 PyErr_SetString(PyExc_RuntimeError, "Try field \"orelse\" changed size during iteration");
6647 goto failed;
6648 }
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07006649 asdl_seq_SET(orelse, i, val);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006650 }
Victor Stinner1acc1292013-07-27 00:03:47 +02006651 Py_CLEAR(tmp);
Serhiy Storchakaf320be72018-01-25 10:49:40 +02006652 }
Victor Stinnerf8599272020-07-03 16:57:19 +02006653 if (_PyObject_LookupAttr(obj, state->finalbody, &tmp) < 0) {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006654 return 1;
6655 }
Serhiy Storchakaf320be72018-01-25 10:49:40 +02006656 if (tmp == NULL) {
6657 PyErr_SetString(PyExc_TypeError, "required field \"finalbody\" missing from Try");
6658 return 1;
6659 }
6660 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006661 int res;
6662 Py_ssize_t len;
6663 Py_ssize_t i;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006664 if (!PyList_Check(tmp)) {
Dino Viehlandac46eb42019-09-11 10:16:34 -07006665 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 +02006666 goto failed;
6667 }
6668 len = PyList_GET_SIZE(tmp);
Antoine Pitroud01d396e2013-10-12 22:52:43 +02006669 finalbody = _Py_asdl_seq_new(len, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006670 if (finalbody == NULL) goto failed;
6671 for (i = 0; i < len; i++) {
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07006672 stmt_ty val;
Serhiy Storchaka43c97312019-09-10 13:02:30 +03006673 PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
6674 Py_INCREF(tmp2);
Victor Stinnerf8599272020-07-03 16:57:19 +02006675 res = obj2ast_stmt(state, tmp2, &val, arena);
Serhiy Storchaka43c97312019-09-10 13:02:30 +03006676 Py_DECREF(tmp2);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006677 if (res != 0) goto failed;
Serhiy Storchakacf380602016-10-07 21:51:28 +03006678 if (len != PyList_GET_SIZE(tmp)) {
6679 PyErr_SetString(PyExc_RuntimeError, "Try field \"finalbody\" changed size during iteration");
6680 goto failed;
6681 }
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07006682 asdl_seq_SET(finalbody, i, val);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006683 }
Victor Stinner1acc1292013-07-27 00:03:47 +02006684 Py_CLEAR(tmp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006685 }
6686 *out = Try(body, handlers, orelse, finalbody, lineno, col_offset,
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00006687 end_lineno, end_col_offset, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006688 if (*out == NULL) goto failed;
6689 return 0;
6690 }
Victor Stinnerf8599272020-07-03 16:57:19 +02006691 tp = state->Assert_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07006692 isinstance = PyObject_IsInstance(obj, tp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006693 if (isinstance == -1) {
6694 return 1;
6695 }
6696 if (isinstance) {
6697 expr_ty test;
6698 expr_ty msg;
6699
Victor Stinnerf8599272020-07-03 16:57:19 +02006700 if (_PyObject_LookupAttr(obj, state->test, &tmp) < 0) {
Serhiy Storchakaf320be72018-01-25 10:49:40 +02006701 return 1;
6702 }
6703 if (tmp == NULL) {
6704 PyErr_SetString(PyExc_TypeError, "required field \"test\" missing from Assert");
6705 return 1;
6706 }
6707 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006708 int res;
Victor Stinnerf8599272020-07-03 16:57:19 +02006709 res = obj2ast_expr(state, tmp, &test, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006710 if (res != 0) goto failed;
Victor Stinner1acc1292013-07-27 00:03:47 +02006711 Py_CLEAR(tmp);
Serhiy Storchakaf320be72018-01-25 10:49:40 +02006712 }
Victor Stinnerf8599272020-07-03 16:57:19 +02006713 if (_PyObject_LookupAttr(obj, state->msg, &tmp) < 0) {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006714 return 1;
6715 }
Serhiy Storchakaf320be72018-01-25 10:49:40 +02006716 if (tmp == NULL || tmp == Py_None) {
6717 Py_CLEAR(tmp);
6718 msg = NULL;
6719 }
6720 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006721 int res;
Victor Stinnerf8599272020-07-03 16:57:19 +02006722 res = obj2ast_expr(state, tmp, &msg, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006723 if (res != 0) goto failed;
Victor Stinner1acc1292013-07-27 00:03:47 +02006724 Py_CLEAR(tmp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006725 }
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00006726 *out = Assert(test, msg, lineno, col_offset, end_lineno,
6727 end_col_offset, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006728 if (*out == NULL) goto failed;
6729 return 0;
6730 }
Victor Stinnerf8599272020-07-03 16:57:19 +02006731 tp = state->Import_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07006732 isinstance = PyObject_IsInstance(obj, tp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006733 if (isinstance == -1) {
6734 return 1;
6735 }
6736 if (isinstance) {
6737 asdl_seq* names;
6738
Victor Stinnerf8599272020-07-03 16:57:19 +02006739 if (_PyObject_LookupAttr(obj, state->names, &tmp) < 0) {
Serhiy Storchakaf320be72018-01-25 10:49:40 +02006740 return 1;
6741 }
6742 if (tmp == NULL) {
6743 PyErr_SetString(PyExc_TypeError, "required field \"names\" missing from Import");
6744 return 1;
6745 }
6746 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006747 int res;
6748 Py_ssize_t len;
6749 Py_ssize_t i;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006750 if (!PyList_Check(tmp)) {
Dino Viehlandac46eb42019-09-11 10:16:34 -07006751 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 +02006752 goto failed;
6753 }
6754 len = PyList_GET_SIZE(tmp);
Antoine Pitroud01d396e2013-10-12 22:52:43 +02006755 names = _Py_asdl_seq_new(len, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006756 if (names == NULL) goto failed;
6757 for (i = 0; i < len; i++) {
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07006758 alias_ty val;
Serhiy Storchaka43c97312019-09-10 13:02:30 +03006759 PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
6760 Py_INCREF(tmp2);
Victor Stinnerf8599272020-07-03 16:57:19 +02006761 res = obj2ast_alias(state, tmp2, &val, arena);
Serhiy Storchaka43c97312019-09-10 13:02:30 +03006762 Py_DECREF(tmp2);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006763 if (res != 0) goto failed;
Serhiy Storchakacf380602016-10-07 21:51:28 +03006764 if (len != PyList_GET_SIZE(tmp)) {
6765 PyErr_SetString(PyExc_RuntimeError, "Import field \"names\" changed size during iteration");
6766 goto failed;
6767 }
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07006768 asdl_seq_SET(names, i, val);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006769 }
Victor Stinner1acc1292013-07-27 00:03:47 +02006770 Py_CLEAR(tmp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006771 }
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00006772 *out = Import(names, lineno, col_offset, end_lineno, end_col_offset,
6773 arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006774 if (*out == NULL) goto failed;
6775 return 0;
6776 }
Victor Stinnerf8599272020-07-03 16:57:19 +02006777 tp = state->ImportFrom_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07006778 isinstance = PyObject_IsInstance(obj, tp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006779 if (isinstance == -1) {
6780 return 1;
6781 }
6782 if (isinstance) {
6783 identifier module;
6784 asdl_seq* names;
6785 int level;
6786
Victor Stinnerf8599272020-07-03 16:57:19 +02006787 if (_PyObject_LookupAttr(obj, state->module, &tmp) < 0) {
Serhiy Storchakaf320be72018-01-25 10:49:40 +02006788 return 1;
6789 }
6790 if (tmp == NULL || tmp == Py_None) {
6791 Py_CLEAR(tmp);
6792 module = NULL;
6793 }
6794 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006795 int res;
Victor Stinnerf8599272020-07-03 16:57:19 +02006796 res = obj2ast_identifier(state, tmp, &module, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006797 if (res != 0) goto failed;
Victor Stinner1acc1292013-07-27 00:03:47 +02006798 Py_CLEAR(tmp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006799 }
Victor Stinnerf8599272020-07-03 16:57:19 +02006800 if (_PyObject_LookupAttr(obj, state->names, &tmp) < 0) {
Serhiy Storchakaf320be72018-01-25 10:49:40 +02006801 return 1;
6802 }
6803 if (tmp == NULL) {
6804 PyErr_SetString(PyExc_TypeError, "required field \"names\" missing from ImportFrom");
6805 return 1;
6806 }
6807 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006808 int res;
6809 Py_ssize_t len;
6810 Py_ssize_t i;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006811 if (!PyList_Check(tmp)) {
Dino Viehlandac46eb42019-09-11 10:16:34 -07006812 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 +02006813 goto failed;
6814 }
6815 len = PyList_GET_SIZE(tmp);
Antoine Pitroud01d396e2013-10-12 22:52:43 +02006816 names = _Py_asdl_seq_new(len, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006817 if (names == NULL) goto failed;
6818 for (i = 0; i < len; i++) {
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07006819 alias_ty val;
Serhiy Storchaka43c97312019-09-10 13:02:30 +03006820 PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
6821 Py_INCREF(tmp2);
Victor Stinnerf8599272020-07-03 16:57:19 +02006822 res = obj2ast_alias(state, tmp2, &val, arena);
Serhiy Storchaka43c97312019-09-10 13:02:30 +03006823 Py_DECREF(tmp2);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006824 if (res != 0) goto failed;
Serhiy Storchakacf380602016-10-07 21:51:28 +03006825 if (len != PyList_GET_SIZE(tmp)) {
6826 PyErr_SetString(PyExc_RuntimeError, "ImportFrom field \"names\" changed size during iteration");
6827 goto failed;
6828 }
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07006829 asdl_seq_SET(names, i, val);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006830 }
Victor Stinner1acc1292013-07-27 00:03:47 +02006831 Py_CLEAR(tmp);
Serhiy Storchakaf320be72018-01-25 10:49:40 +02006832 }
Victor Stinnerf8599272020-07-03 16:57:19 +02006833 if (_PyObject_LookupAttr(obj, state->level, &tmp) < 0) {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006834 return 1;
6835 }
Serhiy Storchakaf320be72018-01-25 10:49:40 +02006836 if (tmp == NULL || tmp == Py_None) {
6837 Py_CLEAR(tmp);
6838 level = 0;
6839 }
6840 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006841 int res;
Victor Stinnerf8599272020-07-03 16:57:19 +02006842 res = obj2ast_int(state, tmp, &level, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006843 if (res != 0) goto failed;
Victor Stinner1acc1292013-07-27 00:03:47 +02006844 Py_CLEAR(tmp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006845 }
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00006846 *out = ImportFrom(module, names, level, lineno, col_offset, end_lineno,
6847 end_col_offset, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006848 if (*out == NULL) goto failed;
6849 return 0;
6850 }
Victor Stinnerf8599272020-07-03 16:57:19 +02006851 tp = state->Global_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07006852 isinstance = PyObject_IsInstance(obj, tp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006853 if (isinstance == -1) {
6854 return 1;
6855 }
6856 if (isinstance) {
6857 asdl_seq* names;
6858
Victor Stinnerf8599272020-07-03 16:57:19 +02006859 if (_PyObject_LookupAttr(obj, state->names, &tmp) < 0) {
Serhiy Storchakaf320be72018-01-25 10:49:40 +02006860 return 1;
6861 }
6862 if (tmp == NULL) {
6863 PyErr_SetString(PyExc_TypeError, "required field \"names\" missing from Global");
6864 return 1;
6865 }
6866 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006867 int res;
6868 Py_ssize_t len;
6869 Py_ssize_t i;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006870 if (!PyList_Check(tmp)) {
Dino Viehlandac46eb42019-09-11 10:16:34 -07006871 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 +02006872 goto failed;
6873 }
6874 len = PyList_GET_SIZE(tmp);
Antoine Pitroud01d396e2013-10-12 22:52:43 +02006875 names = _Py_asdl_seq_new(len, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006876 if (names == NULL) goto failed;
6877 for (i = 0; i < len; i++) {
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07006878 identifier val;
Serhiy Storchaka43c97312019-09-10 13:02:30 +03006879 PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
6880 Py_INCREF(tmp2);
Victor Stinnerf8599272020-07-03 16:57:19 +02006881 res = obj2ast_identifier(state, tmp2, &val, arena);
Serhiy Storchaka43c97312019-09-10 13:02:30 +03006882 Py_DECREF(tmp2);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006883 if (res != 0) goto failed;
Serhiy Storchakacf380602016-10-07 21:51:28 +03006884 if (len != PyList_GET_SIZE(tmp)) {
6885 PyErr_SetString(PyExc_RuntimeError, "Global field \"names\" changed size during iteration");
6886 goto failed;
6887 }
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07006888 asdl_seq_SET(names, i, val);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006889 }
Victor Stinner1acc1292013-07-27 00:03:47 +02006890 Py_CLEAR(tmp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006891 }
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00006892 *out = Global(names, lineno, col_offset, end_lineno, end_col_offset,
6893 arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006894 if (*out == NULL) goto failed;
6895 return 0;
6896 }
Victor Stinnerf8599272020-07-03 16:57:19 +02006897 tp = state->Nonlocal_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07006898 isinstance = PyObject_IsInstance(obj, tp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006899 if (isinstance == -1) {
6900 return 1;
6901 }
6902 if (isinstance) {
6903 asdl_seq* names;
6904
Victor Stinnerf8599272020-07-03 16:57:19 +02006905 if (_PyObject_LookupAttr(obj, state->names, &tmp) < 0) {
Serhiy Storchakaf320be72018-01-25 10:49:40 +02006906 return 1;
6907 }
6908 if (tmp == NULL) {
6909 PyErr_SetString(PyExc_TypeError, "required field \"names\" missing from Nonlocal");
6910 return 1;
6911 }
6912 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006913 int res;
6914 Py_ssize_t len;
6915 Py_ssize_t i;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006916 if (!PyList_Check(tmp)) {
Dino Viehlandac46eb42019-09-11 10:16:34 -07006917 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 +02006918 goto failed;
6919 }
6920 len = PyList_GET_SIZE(tmp);
Antoine Pitroud01d396e2013-10-12 22:52:43 +02006921 names = _Py_asdl_seq_new(len, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006922 if (names == NULL) goto failed;
6923 for (i = 0; i < len; i++) {
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07006924 identifier val;
Serhiy Storchaka43c97312019-09-10 13:02:30 +03006925 PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
6926 Py_INCREF(tmp2);
Victor Stinnerf8599272020-07-03 16:57:19 +02006927 res = obj2ast_identifier(state, tmp2, &val, arena);
Serhiy Storchaka43c97312019-09-10 13:02:30 +03006928 Py_DECREF(tmp2);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006929 if (res != 0) goto failed;
Serhiy Storchakacf380602016-10-07 21:51:28 +03006930 if (len != PyList_GET_SIZE(tmp)) {
6931 PyErr_SetString(PyExc_RuntimeError, "Nonlocal field \"names\" changed size during iteration");
6932 goto failed;
6933 }
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07006934 asdl_seq_SET(names, i, val);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006935 }
Victor Stinner1acc1292013-07-27 00:03:47 +02006936 Py_CLEAR(tmp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006937 }
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00006938 *out = Nonlocal(names, lineno, col_offset, end_lineno, end_col_offset,
6939 arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006940 if (*out == NULL) goto failed;
6941 return 0;
6942 }
Victor Stinnerf8599272020-07-03 16:57:19 +02006943 tp = state->Expr_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07006944 isinstance = PyObject_IsInstance(obj, tp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006945 if (isinstance == -1) {
6946 return 1;
6947 }
6948 if (isinstance) {
6949 expr_ty value;
6950
Victor Stinnerf8599272020-07-03 16:57:19 +02006951 if (_PyObject_LookupAttr(obj, state->value, &tmp) < 0) {
Serhiy Storchakaf320be72018-01-25 10:49:40 +02006952 return 1;
6953 }
6954 if (tmp == NULL) {
6955 PyErr_SetString(PyExc_TypeError, "required field \"value\" missing from Expr");
6956 return 1;
6957 }
6958 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006959 int res;
Victor Stinnerf8599272020-07-03 16:57:19 +02006960 res = obj2ast_expr(state, tmp, &value, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006961 if (res != 0) goto failed;
Victor Stinner1acc1292013-07-27 00:03:47 +02006962 Py_CLEAR(tmp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006963 }
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00006964 *out = Expr(value, lineno, col_offset, end_lineno, end_col_offset,
6965 arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006966 if (*out == NULL) goto failed;
6967 return 0;
6968 }
Victor Stinnerf8599272020-07-03 16:57:19 +02006969 tp = state->Pass_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07006970 isinstance = PyObject_IsInstance(obj, tp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006971 if (isinstance == -1) {
6972 return 1;
6973 }
6974 if (isinstance) {
6975
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00006976 *out = Pass(lineno, col_offset, end_lineno, end_col_offset, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006977 if (*out == NULL) goto failed;
6978 return 0;
6979 }
Victor Stinnerf8599272020-07-03 16:57:19 +02006980 tp = state->Break_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07006981 isinstance = PyObject_IsInstance(obj, tp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006982 if (isinstance == -1) {
6983 return 1;
6984 }
6985 if (isinstance) {
6986
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00006987 *out = Break(lineno, col_offset, end_lineno, end_col_offset, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006988 if (*out == NULL) goto failed;
6989 return 0;
6990 }
Victor Stinnerf8599272020-07-03 16:57:19 +02006991 tp = state->Continue_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07006992 isinstance = PyObject_IsInstance(obj, tp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006993 if (isinstance == -1) {
6994 return 1;
6995 }
6996 if (isinstance) {
6997
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00006998 *out = Continue(lineno, col_offset, end_lineno, end_col_offset, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006999 if (*out == NULL) goto failed;
7000 return 0;
7001 }
7002
7003 PyErr_Format(PyExc_TypeError, "expected some sort of stmt, but got %R", obj);
7004 failed:
7005 Py_XDECREF(tmp);
7006 return 1;
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00007007}
7008
7009int
Victor Stinnerf8599272020-07-03 16:57:19 +02007010obj2ast_expr(astmodulestate *state, PyObject* obj, expr_ty* out, PyArena* arena)
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00007011{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007012 int isinstance;
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00007013
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007014 PyObject *tmp = NULL;
Dino Viehlandac46eb42019-09-11 10:16:34 -07007015 PyObject *tp;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007016 int lineno;
7017 int col_offset;
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00007018 int end_lineno;
7019 int end_col_offset;
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00007020
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007021 if (obj == Py_None) {
7022 *out = NULL;
7023 return 0;
7024 }
Victor Stinnerf8599272020-07-03 16:57:19 +02007025 if (_PyObject_LookupAttr(obj, state->lineno, &tmp) < 0) {
Serhiy Storchakaf320be72018-01-25 10:49:40 +02007026 return 1;
7027 }
7028 if (tmp == NULL) {
7029 PyErr_SetString(PyExc_TypeError, "required field \"lineno\" missing from expr");
7030 return 1;
7031 }
7032 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007033 int res;
Victor Stinnerf8599272020-07-03 16:57:19 +02007034 res = obj2ast_int(state, tmp, &lineno, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007035 if (res != 0) goto failed;
Victor Stinner1acc1292013-07-27 00:03:47 +02007036 Py_CLEAR(tmp);
Serhiy Storchakaf320be72018-01-25 10:49:40 +02007037 }
Victor Stinnerf8599272020-07-03 16:57:19 +02007038 if (_PyObject_LookupAttr(obj, state->col_offset, &tmp) < 0) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00007039 return 1;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007040 }
Serhiy Storchakaf320be72018-01-25 10:49:40 +02007041 if (tmp == NULL) {
7042 PyErr_SetString(PyExc_TypeError, "required field \"col_offset\" missing from expr");
7043 return 1;
7044 }
7045 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007046 int res;
Victor Stinnerf8599272020-07-03 16:57:19 +02007047 res = obj2ast_int(state, tmp, &col_offset, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007048 if (res != 0) goto failed;
Victor Stinner1acc1292013-07-27 00:03:47 +02007049 Py_CLEAR(tmp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007050 }
Victor Stinnerf8599272020-07-03 16:57:19 +02007051 if (_PyObject_LookupAttr(obj, state->end_lineno, &tmp) < 0) {
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00007052 return 1;
7053 }
7054 if (tmp == NULL || tmp == Py_None) {
7055 Py_CLEAR(tmp);
7056 end_lineno = 0;
7057 }
7058 else {
7059 int res;
Victor Stinnerf8599272020-07-03 16:57:19 +02007060 res = obj2ast_int(state, tmp, &end_lineno, arena);
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00007061 if (res != 0) goto failed;
7062 Py_CLEAR(tmp);
7063 }
Victor Stinnerf8599272020-07-03 16:57:19 +02007064 if (_PyObject_LookupAttr(obj, state->end_col_offset, &tmp) < 0) {
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00007065 return 1;
7066 }
7067 if (tmp == NULL || tmp == Py_None) {
7068 Py_CLEAR(tmp);
7069 end_col_offset = 0;
7070 }
7071 else {
7072 int res;
Victor Stinnerf8599272020-07-03 16:57:19 +02007073 res = obj2ast_int(state, tmp, &end_col_offset, arena);
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00007074 if (res != 0) goto failed;
7075 Py_CLEAR(tmp);
7076 }
Victor Stinnerf8599272020-07-03 16:57:19 +02007077 tp = state->BoolOp_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07007078 isinstance = PyObject_IsInstance(obj, tp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007079 if (isinstance == -1) {
7080 return 1;
7081 }
7082 if (isinstance) {
7083 boolop_ty op;
7084 asdl_seq* values;
7085
Victor Stinnerf8599272020-07-03 16:57:19 +02007086 if (_PyObject_LookupAttr(obj, state->op, &tmp) < 0) {
Serhiy Storchakaf320be72018-01-25 10:49:40 +02007087 return 1;
7088 }
7089 if (tmp == NULL) {
7090 PyErr_SetString(PyExc_TypeError, "required field \"op\" missing from BoolOp");
7091 return 1;
7092 }
7093 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007094 int res;
Victor Stinnerf8599272020-07-03 16:57:19 +02007095 res = obj2ast_boolop(state, tmp, &op, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007096 if (res != 0) goto failed;
Victor Stinner1acc1292013-07-27 00:03:47 +02007097 Py_CLEAR(tmp);
Serhiy Storchakaf320be72018-01-25 10:49:40 +02007098 }
Victor Stinnerf8599272020-07-03 16:57:19 +02007099 if (_PyObject_LookupAttr(obj, state->values, &tmp) < 0) {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007100 return 1;
7101 }
Serhiy Storchakaf320be72018-01-25 10:49:40 +02007102 if (tmp == NULL) {
7103 PyErr_SetString(PyExc_TypeError, "required field \"values\" missing from BoolOp");
7104 return 1;
7105 }
7106 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007107 int res;
7108 Py_ssize_t len;
7109 Py_ssize_t i;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007110 if (!PyList_Check(tmp)) {
Dino Viehlandac46eb42019-09-11 10:16:34 -07007111 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 +02007112 goto failed;
7113 }
7114 len = PyList_GET_SIZE(tmp);
Antoine Pitroud01d396e2013-10-12 22:52:43 +02007115 values = _Py_asdl_seq_new(len, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007116 if (values == NULL) goto failed;
7117 for (i = 0; i < len; i++) {
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07007118 expr_ty val;
Serhiy Storchaka43c97312019-09-10 13:02:30 +03007119 PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
7120 Py_INCREF(tmp2);
Victor Stinnerf8599272020-07-03 16:57:19 +02007121 res = obj2ast_expr(state, tmp2, &val, arena);
Serhiy Storchaka43c97312019-09-10 13:02:30 +03007122 Py_DECREF(tmp2);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007123 if (res != 0) goto failed;
Serhiy Storchakacf380602016-10-07 21:51:28 +03007124 if (len != PyList_GET_SIZE(tmp)) {
7125 PyErr_SetString(PyExc_RuntimeError, "BoolOp field \"values\" changed size during iteration");
7126 goto failed;
7127 }
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07007128 asdl_seq_SET(values, i, val);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007129 }
Victor Stinner1acc1292013-07-27 00:03:47 +02007130 Py_CLEAR(tmp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007131 }
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00007132 *out = BoolOp(op, values, lineno, col_offset, end_lineno,
7133 end_col_offset, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007134 if (*out == NULL) goto failed;
7135 return 0;
7136 }
Victor Stinnerf8599272020-07-03 16:57:19 +02007137 tp = state->NamedExpr_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07007138 isinstance = PyObject_IsInstance(obj, tp);
Emily Morehouse8f59ee02019-01-24 16:49:56 -07007139 if (isinstance == -1) {
7140 return 1;
7141 }
7142 if (isinstance) {
7143 expr_ty target;
7144 expr_ty value;
7145
Victor Stinnerf8599272020-07-03 16:57:19 +02007146 if (_PyObject_LookupAttr(obj, state->target, &tmp) < 0) {
Emily Morehouse8f59ee02019-01-24 16:49:56 -07007147 return 1;
7148 }
7149 if (tmp == NULL) {
7150 PyErr_SetString(PyExc_TypeError, "required field \"target\" missing from NamedExpr");
7151 return 1;
7152 }
7153 else {
7154 int res;
Victor Stinnerf8599272020-07-03 16:57:19 +02007155 res = obj2ast_expr(state, tmp, &target, arena);
Emily Morehouse8f59ee02019-01-24 16:49:56 -07007156 if (res != 0) goto failed;
7157 Py_CLEAR(tmp);
7158 }
Victor Stinnerf8599272020-07-03 16:57:19 +02007159 if (_PyObject_LookupAttr(obj, state->value, &tmp) < 0) {
Emily Morehouse8f59ee02019-01-24 16:49:56 -07007160 return 1;
7161 }
7162 if (tmp == NULL) {
7163 PyErr_SetString(PyExc_TypeError, "required field \"value\" missing from NamedExpr");
7164 return 1;
7165 }
7166 else {
7167 int res;
Victor Stinnerf8599272020-07-03 16:57:19 +02007168 res = obj2ast_expr(state, tmp, &value, arena);
Emily Morehouse8f59ee02019-01-24 16:49:56 -07007169 if (res != 0) goto failed;
7170 Py_CLEAR(tmp);
7171 }
7172 *out = NamedExpr(target, value, lineno, col_offset, end_lineno,
7173 end_col_offset, arena);
7174 if (*out == NULL) goto failed;
7175 return 0;
7176 }
Victor Stinnerf8599272020-07-03 16:57:19 +02007177 tp = state->BinOp_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07007178 isinstance = PyObject_IsInstance(obj, tp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007179 if (isinstance == -1) {
7180 return 1;
7181 }
7182 if (isinstance) {
7183 expr_ty left;
7184 operator_ty op;
7185 expr_ty right;
7186
Victor Stinnerf8599272020-07-03 16:57:19 +02007187 if (_PyObject_LookupAttr(obj, state->left, &tmp) < 0) {
Serhiy Storchakaf320be72018-01-25 10:49:40 +02007188 return 1;
7189 }
7190 if (tmp == NULL) {
7191 PyErr_SetString(PyExc_TypeError, "required field \"left\" missing from BinOp");
7192 return 1;
7193 }
7194 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007195 int res;
Victor Stinnerf8599272020-07-03 16:57:19 +02007196 res = obj2ast_expr(state, tmp, &left, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007197 if (res != 0) goto failed;
Victor Stinner1acc1292013-07-27 00:03:47 +02007198 Py_CLEAR(tmp);
Serhiy Storchakaf320be72018-01-25 10:49:40 +02007199 }
Victor Stinnerf8599272020-07-03 16:57:19 +02007200 if (_PyObject_LookupAttr(obj, state->op, &tmp) < 0) {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007201 return 1;
7202 }
Serhiy Storchakaf320be72018-01-25 10:49:40 +02007203 if (tmp == NULL) {
7204 PyErr_SetString(PyExc_TypeError, "required field \"op\" missing from BinOp");
7205 return 1;
7206 }
7207 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007208 int res;
Victor Stinnerf8599272020-07-03 16:57:19 +02007209 res = obj2ast_operator(state, tmp, &op, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007210 if (res != 0) goto failed;
Victor Stinner1acc1292013-07-27 00:03:47 +02007211 Py_CLEAR(tmp);
Serhiy Storchakaf320be72018-01-25 10:49:40 +02007212 }
Victor Stinnerf8599272020-07-03 16:57:19 +02007213 if (_PyObject_LookupAttr(obj, state->right, &tmp) < 0) {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007214 return 1;
7215 }
Serhiy Storchakaf320be72018-01-25 10:49:40 +02007216 if (tmp == NULL) {
7217 PyErr_SetString(PyExc_TypeError, "required field \"right\" missing from BinOp");
7218 return 1;
7219 }
7220 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007221 int res;
Victor Stinnerf8599272020-07-03 16:57:19 +02007222 res = obj2ast_expr(state, tmp, &right, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007223 if (res != 0) goto failed;
Victor Stinner1acc1292013-07-27 00:03:47 +02007224 Py_CLEAR(tmp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007225 }
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00007226 *out = BinOp(left, op, right, lineno, col_offset, end_lineno,
7227 end_col_offset, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007228 if (*out == NULL) goto failed;
7229 return 0;
7230 }
Victor Stinnerf8599272020-07-03 16:57:19 +02007231 tp = state->UnaryOp_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07007232 isinstance = PyObject_IsInstance(obj, tp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007233 if (isinstance == -1) {
7234 return 1;
7235 }
7236 if (isinstance) {
7237 unaryop_ty op;
7238 expr_ty operand;
7239
Victor Stinnerf8599272020-07-03 16:57:19 +02007240 if (_PyObject_LookupAttr(obj, state->op, &tmp) < 0) {
Serhiy Storchakaf320be72018-01-25 10:49:40 +02007241 return 1;
7242 }
7243 if (tmp == NULL) {
7244 PyErr_SetString(PyExc_TypeError, "required field \"op\" missing from UnaryOp");
7245 return 1;
7246 }
7247 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007248 int res;
Victor Stinnerf8599272020-07-03 16:57:19 +02007249 res = obj2ast_unaryop(state, tmp, &op, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007250 if (res != 0) goto failed;
Victor Stinner1acc1292013-07-27 00:03:47 +02007251 Py_CLEAR(tmp);
Serhiy Storchakaf320be72018-01-25 10:49:40 +02007252 }
Victor Stinnerf8599272020-07-03 16:57:19 +02007253 if (_PyObject_LookupAttr(obj, state->operand, &tmp) < 0) {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007254 return 1;
7255 }
Serhiy Storchakaf320be72018-01-25 10:49:40 +02007256 if (tmp == NULL) {
7257 PyErr_SetString(PyExc_TypeError, "required field \"operand\" missing from UnaryOp");
7258 return 1;
7259 }
7260 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007261 int res;
Victor Stinnerf8599272020-07-03 16:57:19 +02007262 res = obj2ast_expr(state, tmp, &operand, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007263 if (res != 0) goto failed;
Victor Stinner1acc1292013-07-27 00:03:47 +02007264 Py_CLEAR(tmp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007265 }
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00007266 *out = UnaryOp(op, operand, lineno, col_offset, end_lineno,
7267 end_col_offset, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007268 if (*out == NULL) goto failed;
7269 return 0;
7270 }
Victor Stinnerf8599272020-07-03 16:57:19 +02007271 tp = state->Lambda_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07007272 isinstance = PyObject_IsInstance(obj, tp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007273 if (isinstance == -1) {
7274 return 1;
7275 }
7276 if (isinstance) {
7277 arguments_ty args;
7278 expr_ty body;
7279
Victor Stinnerf8599272020-07-03 16:57:19 +02007280 if (_PyObject_LookupAttr(obj, state->args, &tmp) < 0) {
Serhiy Storchakaf320be72018-01-25 10:49:40 +02007281 return 1;
7282 }
7283 if (tmp == NULL) {
7284 PyErr_SetString(PyExc_TypeError, "required field \"args\" missing from Lambda");
7285 return 1;
7286 }
7287 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007288 int res;
Victor Stinnerf8599272020-07-03 16:57:19 +02007289 res = obj2ast_arguments(state, tmp, &args, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007290 if (res != 0) goto failed;
Victor Stinner1acc1292013-07-27 00:03:47 +02007291 Py_CLEAR(tmp);
Serhiy Storchakaf320be72018-01-25 10:49:40 +02007292 }
Victor Stinnerf8599272020-07-03 16:57:19 +02007293 if (_PyObject_LookupAttr(obj, state->body, &tmp) < 0) {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007294 return 1;
7295 }
Serhiy Storchakaf320be72018-01-25 10:49:40 +02007296 if (tmp == NULL) {
7297 PyErr_SetString(PyExc_TypeError, "required field \"body\" missing from Lambda");
7298 return 1;
7299 }
7300 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007301 int res;
Victor Stinnerf8599272020-07-03 16:57:19 +02007302 res = obj2ast_expr(state, tmp, &body, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007303 if (res != 0) goto failed;
Victor Stinner1acc1292013-07-27 00:03:47 +02007304 Py_CLEAR(tmp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007305 }
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00007306 *out = Lambda(args, body, lineno, col_offset, end_lineno,
7307 end_col_offset, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007308 if (*out == NULL) goto failed;
7309 return 0;
7310 }
Victor Stinnerf8599272020-07-03 16:57:19 +02007311 tp = state->IfExp_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07007312 isinstance = PyObject_IsInstance(obj, tp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007313 if (isinstance == -1) {
7314 return 1;
7315 }
7316 if (isinstance) {
7317 expr_ty test;
7318 expr_ty body;
7319 expr_ty orelse;
7320
Victor Stinnerf8599272020-07-03 16:57:19 +02007321 if (_PyObject_LookupAttr(obj, state->test, &tmp) < 0) {
Serhiy Storchakaf320be72018-01-25 10:49:40 +02007322 return 1;
7323 }
7324 if (tmp == NULL) {
7325 PyErr_SetString(PyExc_TypeError, "required field \"test\" missing from IfExp");
7326 return 1;
7327 }
7328 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007329 int res;
Victor Stinnerf8599272020-07-03 16:57:19 +02007330 res = obj2ast_expr(state, tmp, &test, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007331 if (res != 0) goto failed;
Victor Stinner1acc1292013-07-27 00:03:47 +02007332 Py_CLEAR(tmp);
Serhiy Storchakaf320be72018-01-25 10:49:40 +02007333 }
Victor Stinnerf8599272020-07-03 16:57:19 +02007334 if (_PyObject_LookupAttr(obj, state->body, &tmp) < 0) {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007335 return 1;
7336 }
Serhiy Storchakaf320be72018-01-25 10:49:40 +02007337 if (tmp == NULL) {
7338 PyErr_SetString(PyExc_TypeError, "required field \"body\" missing from IfExp");
7339 return 1;
7340 }
7341 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007342 int res;
Victor Stinnerf8599272020-07-03 16:57:19 +02007343 res = obj2ast_expr(state, tmp, &body, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007344 if (res != 0) goto failed;
Victor Stinner1acc1292013-07-27 00:03:47 +02007345 Py_CLEAR(tmp);
Serhiy Storchakaf320be72018-01-25 10:49:40 +02007346 }
Victor Stinnerf8599272020-07-03 16:57:19 +02007347 if (_PyObject_LookupAttr(obj, state->orelse, &tmp) < 0) {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007348 return 1;
7349 }
Serhiy Storchakaf320be72018-01-25 10:49:40 +02007350 if (tmp == NULL) {
7351 PyErr_SetString(PyExc_TypeError, "required field \"orelse\" missing from IfExp");
7352 return 1;
7353 }
7354 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007355 int res;
Victor Stinnerf8599272020-07-03 16:57:19 +02007356 res = obj2ast_expr(state, tmp, &orelse, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007357 if (res != 0) goto failed;
Victor Stinner1acc1292013-07-27 00:03:47 +02007358 Py_CLEAR(tmp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007359 }
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00007360 *out = IfExp(test, body, orelse, lineno, col_offset, end_lineno,
7361 end_col_offset, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007362 if (*out == NULL) goto failed;
7363 return 0;
7364 }
Victor Stinnerf8599272020-07-03 16:57:19 +02007365 tp = state->Dict_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07007366 isinstance = PyObject_IsInstance(obj, tp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007367 if (isinstance == -1) {
7368 return 1;
7369 }
7370 if (isinstance) {
7371 asdl_seq* keys;
7372 asdl_seq* values;
7373
Victor Stinnerf8599272020-07-03 16:57:19 +02007374 if (_PyObject_LookupAttr(obj, state->keys, &tmp) < 0) {
Serhiy Storchakaf320be72018-01-25 10:49:40 +02007375 return 1;
7376 }
7377 if (tmp == NULL) {
7378 PyErr_SetString(PyExc_TypeError, "required field \"keys\" missing from Dict");
7379 return 1;
7380 }
7381 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007382 int res;
7383 Py_ssize_t len;
7384 Py_ssize_t i;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007385 if (!PyList_Check(tmp)) {
Dino Viehlandac46eb42019-09-11 10:16:34 -07007386 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 +02007387 goto failed;
7388 }
7389 len = PyList_GET_SIZE(tmp);
Antoine Pitroud01d396e2013-10-12 22:52:43 +02007390 keys = _Py_asdl_seq_new(len, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007391 if (keys == NULL) goto failed;
7392 for (i = 0; i < len; i++) {
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07007393 expr_ty val;
Serhiy Storchaka43c97312019-09-10 13:02:30 +03007394 PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
7395 Py_INCREF(tmp2);
Victor Stinnerf8599272020-07-03 16:57:19 +02007396 res = obj2ast_expr(state, tmp2, &val, arena);
Serhiy Storchaka43c97312019-09-10 13:02:30 +03007397 Py_DECREF(tmp2);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007398 if (res != 0) goto failed;
Serhiy Storchakacf380602016-10-07 21:51:28 +03007399 if (len != PyList_GET_SIZE(tmp)) {
7400 PyErr_SetString(PyExc_RuntimeError, "Dict field \"keys\" changed size during iteration");
7401 goto failed;
7402 }
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07007403 asdl_seq_SET(keys, i, val);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007404 }
Victor Stinner1acc1292013-07-27 00:03:47 +02007405 Py_CLEAR(tmp);
Serhiy Storchakaf320be72018-01-25 10:49:40 +02007406 }
Victor Stinnerf8599272020-07-03 16:57:19 +02007407 if (_PyObject_LookupAttr(obj, state->values, &tmp) < 0) {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007408 return 1;
7409 }
Serhiy Storchakaf320be72018-01-25 10:49:40 +02007410 if (tmp == NULL) {
7411 PyErr_SetString(PyExc_TypeError, "required field \"values\" missing from Dict");
7412 return 1;
7413 }
7414 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007415 int res;
7416 Py_ssize_t len;
7417 Py_ssize_t i;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007418 if (!PyList_Check(tmp)) {
Dino Viehlandac46eb42019-09-11 10:16:34 -07007419 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 +02007420 goto failed;
7421 }
7422 len = PyList_GET_SIZE(tmp);
Antoine Pitroud01d396e2013-10-12 22:52:43 +02007423 values = _Py_asdl_seq_new(len, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007424 if (values == NULL) goto failed;
7425 for (i = 0; i < len; i++) {
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07007426 expr_ty val;
Serhiy Storchaka43c97312019-09-10 13:02:30 +03007427 PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
7428 Py_INCREF(tmp2);
Victor Stinnerf8599272020-07-03 16:57:19 +02007429 res = obj2ast_expr(state, tmp2, &val, arena);
Serhiy Storchaka43c97312019-09-10 13:02:30 +03007430 Py_DECREF(tmp2);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007431 if (res != 0) goto failed;
Serhiy Storchakacf380602016-10-07 21:51:28 +03007432 if (len != PyList_GET_SIZE(tmp)) {
7433 PyErr_SetString(PyExc_RuntimeError, "Dict field \"values\" changed size during iteration");
7434 goto failed;
7435 }
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07007436 asdl_seq_SET(values, i, val);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007437 }
Victor Stinner1acc1292013-07-27 00:03:47 +02007438 Py_CLEAR(tmp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007439 }
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00007440 *out = Dict(keys, values, lineno, col_offset, end_lineno,
7441 end_col_offset, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007442 if (*out == NULL) goto failed;
7443 return 0;
7444 }
Victor Stinnerf8599272020-07-03 16:57:19 +02007445 tp = state->Set_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07007446 isinstance = PyObject_IsInstance(obj, tp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007447 if (isinstance == -1) {
7448 return 1;
7449 }
7450 if (isinstance) {
7451 asdl_seq* elts;
7452
Victor Stinnerf8599272020-07-03 16:57:19 +02007453 if (_PyObject_LookupAttr(obj, state->elts, &tmp) < 0) {
Serhiy Storchakaf320be72018-01-25 10:49:40 +02007454 return 1;
7455 }
7456 if (tmp == NULL) {
7457 PyErr_SetString(PyExc_TypeError, "required field \"elts\" missing from Set");
7458 return 1;
7459 }
7460 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007461 int res;
7462 Py_ssize_t len;
7463 Py_ssize_t i;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007464 if (!PyList_Check(tmp)) {
Dino Viehlandac46eb42019-09-11 10:16:34 -07007465 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 +02007466 goto failed;
7467 }
7468 len = PyList_GET_SIZE(tmp);
Antoine Pitroud01d396e2013-10-12 22:52:43 +02007469 elts = _Py_asdl_seq_new(len, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007470 if (elts == NULL) goto failed;
7471 for (i = 0; i < len; i++) {
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07007472 expr_ty val;
Serhiy Storchaka43c97312019-09-10 13:02:30 +03007473 PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
7474 Py_INCREF(tmp2);
Victor Stinnerf8599272020-07-03 16:57:19 +02007475 res = obj2ast_expr(state, tmp2, &val, arena);
Serhiy Storchaka43c97312019-09-10 13:02:30 +03007476 Py_DECREF(tmp2);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007477 if (res != 0) goto failed;
Serhiy Storchakacf380602016-10-07 21:51:28 +03007478 if (len != PyList_GET_SIZE(tmp)) {
7479 PyErr_SetString(PyExc_RuntimeError, "Set field \"elts\" changed size during iteration");
7480 goto failed;
7481 }
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07007482 asdl_seq_SET(elts, i, val);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007483 }
Victor Stinner1acc1292013-07-27 00:03:47 +02007484 Py_CLEAR(tmp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007485 }
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00007486 *out = Set(elts, lineno, col_offset, end_lineno, end_col_offset, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007487 if (*out == NULL) goto failed;
7488 return 0;
7489 }
Victor Stinnerf8599272020-07-03 16:57:19 +02007490 tp = state->ListComp_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) {
7496 expr_ty elt;
7497 asdl_seq* generators;
7498
Victor Stinnerf8599272020-07-03 16:57:19 +02007499 if (_PyObject_LookupAttr(obj, state->elt, &tmp) < 0) {
Serhiy Storchakaf320be72018-01-25 10:49:40 +02007500 return 1;
7501 }
7502 if (tmp == NULL) {
7503 PyErr_SetString(PyExc_TypeError, "required field \"elt\" missing from ListComp");
7504 return 1;
7505 }
7506 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007507 int res;
Victor Stinnerf8599272020-07-03 16:57:19 +02007508 res = obj2ast_expr(state, tmp, &elt, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007509 if (res != 0) goto failed;
Victor Stinner1acc1292013-07-27 00:03:47 +02007510 Py_CLEAR(tmp);
Serhiy Storchakaf320be72018-01-25 10:49:40 +02007511 }
Victor Stinnerf8599272020-07-03 16:57:19 +02007512 if (_PyObject_LookupAttr(obj, state->generators, &tmp) < 0) {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007513 return 1;
7514 }
Serhiy Storchakaf320be72018-01-25 10:49:40 +02007515 if (tmp == NULL) {
7516 PyErr_SetString(PyExc_TypeError, "required field \"generators\" missing from ListComp");
7517 return 1;
7518 }
7519 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007520 int res;
7521 Py_ssize_t len;
7522 Py_ssize_t i;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007523 if (!PyList_Check(tmp)) {
Dino Viehlandac46eb42019-09-11 10:16:34 -07007524 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 +02007525 goto failed;
7526 }
7527 len = PyList_GET_SIZE(tmp);
Antoine Pitroud01d396e2013-10-12 22:52:43 +02007528 generators = _Py_asdl_seq_new(len, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007529 if (generators == NULL) goto failed;
7530 for (i = 0; i < len; i++) {
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07007531 comprehension_ty val;
Serhiy Storchaka43c97312019-09-10 13:02:30 +03007532 PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
7533 Py_INCREF(tmp2);
Victor Stinnerf8599272020-07-03 16:57:19 +02007534 res = obj2ast_comprehension(state, tmp2, &val, arena);
Serhiy Storchaka43c97312019-09-10 13:02:30 +03007535 Py_DECREF(tmp2);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007536 if (res != 0) goto failed;
Serhiy Storchakacf380602016-10-07 21:51:28 +03007537 if (len != PyList_GET_SIZE(tmp)) {
7538 PyErr_SetString(PyExc_RuntimeError, "ListComp field \"generators\" changed size during iteration");
7539 goto failed;
7540 }
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07007541 asdl_seq_SET(generators, i, val);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007542 }
Victor Stinner1acc1292013-07-27 00:03:47 +02007543 Py_CLEAR(tmp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007544 }
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00007545 *out = ListComp(elt, generators, lineno, col_offset, end_lineno,
7546 end_col_offset, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007547 if (*out == NULL) goto failed;
7548 return 0;
7549 }
Victor Stinnerf8599272020-07-03 16:57:19 +02007550 tp = state->SetComp_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07007551 isinstance = PyObject_IsInstance(obj, tp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007552 if (isinstance == -1) {
7553 return 1;
7554 }
7555 if (isinstance) {
7556 expr_ty elt;
7557 asdl_seq* generators;
7558
Victor Stinnerf8599272020-07-03 16:57:19 +02007559 if (_PyObject_LookupAttr(obj, state->elt, &tmp) < 0) {
Serhiy Storchakaf320be72018-01-25 10:49:40 +02007560 return 1;
7561 }
7562 if (tmp == NULL) {
7563 PyErr_SetString(PyExc_TypeError, "required field \"elt\" missing from SetComp");
7564 return 1;
7565 }
7566 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007567 int res;
Victor Stinnerf8599272020-07-03 16:57:19 +02007568 res = obj2ast_expr(state, tmp, &elt, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007569 if (res != 0) goto failed;
Victor Stinner1acc1292013-07-27 00:03:47 +02007570 Py_CLEAR(tmp);
Serhiy Storchakaf320be72018-01-25 10:49:40 +02007571 }
Victor Stinnerf8599272020-07-03 16:57:19 +02007572 if (_PyObject_LookupAttr(obj, state->generators, &tmp) < 0) {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007573 return 1;
7574 }
Serhiy Storchakaf320be72018-01-25 10:49:40 +02007575 if (tmp == NULL) {
7576 PyErr_SetString(PyExc_TypeError, "required field \"generators\" missing from SetComp");
7577 return 1;
7578 }
7579 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007580 int res;
7581 Py_ssize_t len;
7582 Py_ssize_t i;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007583 if (!PyList_Check(tmp)) {
Dino Viehlandac46eb42019-09-11 10:16:34 -07007584 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 +02007585 goto failed;
7586 }
7587 len = PyList_GET_SIZE(tmp);
Antoine Pitroud01d396e2013-10-12 22:52:43 +02007588 generators = _Py_asdl_seq_new(len, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007589 if (generators == NULL) goto failed;
7590 for (i = 0; i < len; i++) {
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07007591 comprehension_ty val;
Serhiy Storchaka43c97312019-09-10 13:02:30 +03007592 PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
7593 Py_INCREF(tmp2);
Victor Stinnerf8599272020-07-03 16:57:19 +02007594 res = obj2ast_comprehension(state, tmp2, &val, arena);
Serhiy Storchaka43c97312019-09-10 13:02:30 +03007595 Py_DECREF(tmp2);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007596 if (res != 0) goto failed;
Serhiy Storchakacf380602016-10-07 21:51:28 +03007597 if (len != PyList_GET_SIZE(tmp)) {
7598 PyErr_SetString(PyExc_RuntimeError, "SetComp field \"generators\" changed size during iteration");
7599 goto failed;
7600 }
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07007601 asdl_seq_SET(generators, i, val);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007602 }
Victor Stinner1acc1292013-07-27 00:03:47 +02007603 Py_CLEAR(tmp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007604 }
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00007605 *out = SetComp(elt, generators, lineno, col_offset, end_lineno,
7606 end_col_offset, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007607 if (*out == NULL) goto failed;
7608 return 0;
7609 }
Victor Stinnerf8599272020-07-03 16:57:19 +02007610 tp = state->DictComp_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07007611 isinstance = PyObject_IsInstance(obj, tp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007612 if (isinstance == -1) {
7613 return 1;
7614 }
7615 if (isinstance) {
7616 expr_ty key;
7617 expr_ty value;
7618 asdl_seq* generators;
7619
Victor Stinnerf8599272020-07-03 16:57:19 +02007620 if (_PyObject_LookupAttr(obj, state->key, &tmp) < 0) {
Serhiy Storchakaf320be72018-01-25 10:49:40 +02007621 return 1;
7622 }
7623 if (tmp == NULL) {
7624 PyErr_SetString(PyExc_TypeError, "required field \"key\" missing from DictComp");
7625 return 1;
7626 }
7627 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007628 int res;
Victor Stinnerf8599272020-07-03 16:57:19 +02007629 res = obj2ast_expr(state, tmp, &key, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007630 if (res != 0) goto failed;
Victor Stinner1acc1292013-07-27 00:03:47 +02007631 Py_CLEAR(tmp);
Serhiy Storchakaf320be72018-01-25 10:49:40 +02007632 }
Victor Stinnerf8599272020-07-03 16:57:19 +02007633 if (_PyObject_LookupAttr(obj, state->value, &tmp) < 0) {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007634 return 1;
7635 }
Serhiy Storchakaf320be72018-01-25 10:49:40 +02007636 if (tmp == NULL) {
7637 PyErr_SetString(PyExc_TypeError, "required field \"value\" missing from DictComp");
7638 return 1;
7639 }
7640 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007641 int res;
Victor Stinnerf8599272020-07-03 16:57:19 +02007642 res = obj2ast_expr(state, tmp, &value, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007643 if (res != 0) goto failed;
Victor Stinner1acc1292013-07-27 00:03:47 +02007644 Py_CLEAR(tmp);
Serhiy Storchakaf320be72018-01-25 10:49:40 +02007645 }
Victor Stinnerf8599272020-07-03 16:57:19 +02007646 if (_PyObject_LookupAttr(obj, state->generators, &tmp) < 0) {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007647 return 1;
7648 }
Serhiy Storchakaf320be72018-01-25 10:49:40 +02007649 if (tmp == NULL) {
7650 PyErr_SetString(PyExc_TypeError, "required field \"generators\" missing from DictComp");
7651 return 1;
7652 }
7653 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007654 int res;
7655 Py_ssize_t len;
7656 Py_ssize_t i;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007657 if (!PyList_Check(tmp)) {
Dino Viehlandac46eb42019-09-11 10:16:34 -07007658 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 +02007659 goto failed;
7660 }
7661 len = PyList_GET_SIZE(tmp);
Antoine Pitroud01d396e2013-10-12 22:52:43 +02007662 generators = _Py_asdl_seq_new(len, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007663 if (generators == NULL) goto failed;
7664 for (i = 0; i < len; i++) {
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07007665 comprehension_ty val;
Serhiy Storchaka43c97312019-09-10 13:02:30 +03007666 PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
7667 Py_INCREF(tmp2);
Victor Stinnerf8599272020-07-03 16:57:19 +02007668 res = obj2ast_comprehension(state, tmp2, &val, arena);
Serhiy Storchaka43c97312019-09-10 13:02:30 +03007669 Py_DECREF(tmp2);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007670 if (res != 0) goto failed;
Serhiy Storchakacf380602016-10-07 21:51:28 +03007671 if (len != PyList_GET_SIZE(tmp)) {
7672 PyErr_SetString(PyExc_RuntimeError, "DictComp field \"generators\" changed size during iteration");
7673 goto failed;
7674 }
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07007675 asdl_seq_SET(generators, i, val);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007676 }
Victor Stinner1acc1292013-07-27 00:03:47 +02007677 Py_CLEAR(tmp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007678 }
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00007679 *out = DictComp(key, value, generators, lineno, col_offset, end_lineno,
7680 end_col_offset, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007681 if (*out == NULL) goto failed;
7682 return 0;
7683 }
Victor Stinnerf8599272020-07-03 16:57:19 +02007684 tp = state->GeneratorExp_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07007685 isinstance = PyObject_IsInstance(obj, tp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007686 if (isinstance == -1) {
7687 return 1;
7688 }
7689 if (isinstance) {
7690 expr_ty elt;
7691 asdl_seq* generators;
7692
Victor Stinnerf8599272020-07-03 16:57:19 +02007693 if (_PyObject_LookupAttr(obj, state->elt, &tmp) < 0) {
Serhiy Storchakaf320be72018-01-25 10:49:40 +02007694 return 1;
7695 }
7696 if (tmp == NULL) {
7697 PyErr_SetString(PyExc_TypeError, "required field \"elt\" missing from GeneratorExp");
7698 return 1;
7699 }
7700 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007701 int res;
Victor Stinnerf8599272020-07-03 16:57:19 +02007702 res = obj2ast_expr(state, tmp, &elt, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007703 if (res != 0) goto failed;
Victor Stinner1acc1292013-07-27 00:03:47 +02007704 Py_CLEAR(tmp);
Serhiy Storchakaf320be72018-01-25 10:49:40 +02007705 }
Victor Stinnerf8599272020-07-03 16:57:19 +02007706 if (_PyObject_LookupAttr(obj, state->generators, &tmp) < 0) {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007707 return 1;
7708 }
Serhiy Storchakaf320be72018-01-25 10:49:40 +02007709 if (tmp == NULL) {
7710 PyErr_SetString(PyExc_TypeError, "required field \"generators\" missing from GeneratorExp");
7711 return 1;
7712 }
7713 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007714 int res;
7715 Py_ssize_t len;
7716 Py_ssize_t i;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007717 if (!PyList_Check(tmp)) {
Dino Viehlandac46eb42019-09-11 10:16:34 -07007718 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 +02007719 goto failed;
7720 }
7721 len = PyList_GET_SIZE(tmp);
Antoine Pitroud01d396e2013-10-12 22:52:43 +02007722 generators = _Py_asdl_seq_new(len, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007723 if (generators == NULL) goto failed;
7724 for (i = 0; i < len; i++) {
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07007725 comprehension_ty val;
Serhiy Storchaka43c97312019-09-10 13:02:30 +03007726 PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
7727 Py_INCREF(tmp2);
Victor Stinnerf8599272020-07-03 16:57:19 +02007728 res = obj2ast_comprehension(state, tmp2, &val, arena);
Serhiy Storchaka43c97312019-09-10 13:02:30 +03007729 Py_DECREF(tmp2);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007730 if (res != 0) goto failed;
Serhiy Storchakacf380602016-10-07 21:51:28 +03007731 if (len != PyList_GET_SIZE(tmp)) {
7732 PyErr_SetString(PyExc_RuntimeError, "GeneratorExp field \"generators\" changed size during iteration");
7733 goto failed;
7734 }
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07007735 asdl_seq_SET(generators, i, val);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007736 }
Victor Stinner1acc1292013-07-27 00:03:47 +02007737 Py_CLEAR(tmp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007738 }
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00007739 *out = GeneratorExp(elt, generators, lineno, col_offset, end_lineno,
7740 end_col_offset, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007741 if (*out == NULL) goto failed;
7742 return 0;
7743 }
Victor Stinnerf8599272020-07-03 16:57:19 +02007744 tp = state->Await_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07007745 isinstance = PyObject_IsInstance(obj, tp);
Yury Selivanov75445082015-05-11 22:57:16 -04007746 if (isinstance == -1) {
7747 return 1;
7748 }
7749 if (isinstance) {
7750 expr_ty value;
7751
Victor Stinnerf8599272020-07-03 16:57:19 +02007752 if (_PyObject_LookupAttr(obj, state->value, &tmp) < 0) {
Serhiy Storchakaf320be72018-01-25 10:49:40 +02007753 return 1;
7754 }
7755 if (tmp == NULL) {
7756 PyErr_SetString(PyExc_TypeError, "required field \"value\" missing from Await");
7757 return 1;
7758 }
7759 else {
Yury Selivanov75445082015-05-11 22:57:16 -04007760 int res;
Victor Stinnerf8599272020-07-03 16:57:19 +02007761 res = obj2ast_expr(state, tmp, &value, arena);
Yury Selivanov75445082015-05-11 22:57:16 -04007762 if (res != 0) goto failed;
7763 Py_CLEAR(tmp);
Yury Selivanov75445082015-05-11 22:57:16 -04007764 }
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00007765 *out = Await(value, lineno, col_offset, end_lineno, end_col_offset,
7766 arena);
Yury Selivanov75445082015-05-11 22:57:16 -04007767 if (*out == NULL) goto failed;
7768 return 0;
7769 }
Victor Stinnerf8599272020-07-03 16:57:19 +02007770 tp = state->Yield_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07007771 isinstance = PyObject_IsInstance(obj, tp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007772 if (isinstance == -1) {
7773 return 1;
7774 }
7775 if (isinstance) {
7776 expr_ty value;
7777
Victor Stinnerf8599272020-07-03 16:57:19 +02007778 if (_PyObject_LookupAttr(obj, state->value, &tmp) < 0) {
Serhiy Storchakaf320be72018-01-25 10:49:40 +02007779 return 1;
7780 }
7781 if (tmp == NULL || tmp == Py_None) {
7782 Py_CLEAR(tmp);
7783 value = NULL;
7784 }
7785 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007786 int res;
Victor Stinnerf8599272020-07-03 16:57:19 +02007787 res = obj2ast_expr(state, tmp, &value, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007788 if (res != 0) goto failed;
Victor Stinner1acc1292013-07-27 00:03:47 +02007789 Py_CLEAR(tmp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007790 }
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00007791 *out = Yield(value, lineno, col_offset, end_lineno, end_col_offset,
7792 arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007793 if (*out == NULL) goto failed;
7794 return 0;
7795 }
Victor Stinnerf8599272020-07-03 16:57:19 +02007796 tp = state->YieldFrom_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07007797 isinstance = PyObject_IsInstance(obj, tp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007798 if (isinstance == -1) {
7799 return 1;
7800 }
7801 if (isinstance) {
7802 expr_ty value;
7803
Victor Stinnerf8599272020-07-03 16:57:19 +02007804 if (_PyObject_LookupAttr(obj, state->value, &tmp) < 0) {
Serhiy Storchakaf320be72018-01-25 10:49:40 +02007805 return 1;
7806 }
7807 if (tmp == NULL) {
7808 PyErr_SetString(PyExc_TypeError, "required field \"value\" missing from YieldFrom");
7809 return 1;
7810 }
7811 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007812 int res;
Victor Stinnerf8599272020-07-03 16:57:19 +02007813 res = obj2ast_expr(state, tmp, &value, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007814 if (res != 0) goto failed;
Victor Stinner1acc1292013-07-27 00:03:47 +02007815 Py_CLEAR(tmp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007816 }
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00007817 *out = YieldFrom(value, lineno, col_offset, end_lineno, end_col_offset,
7818 arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007819 if (*out == NULL) goto failed;
7820 return 0;
7821 }
Victor Stinnerf8599272020-07-03 16:57:19 +02007822 tp = state->Compare_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07007823 isinstance = PyObject_IsInstance(obj, tp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007824 if (isinstance == -1) {
7825 return 1;
7826 }
7827 if (isinstance) {
7828 expr_ty left;
7829 asdl_int_seq* ops;
7830 asdl_seq* comparators;
7831
Victor Stinnerf8599272020-07-03 16:57:19 +02007832 if (_PyObject_LookupAttr(obj, state->left, &tmp) < 0) {
Serhiy Storchakaf320be72018-01-25 10:49:40 +02007833 return 1;
7834 }
7835 if (tmp == NULL) {
7836 PyErr_SetString(PyExc_TypeError, "required field \"left\" missing from Compare");
7837 return 1;
7838 }
7839 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007840 int res;
Victor Stinnerf8599272020-07-03 16:57:19 +02007841 res = obj2ast_expr(state, tmp, &left, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007842 if (res != 0) goto failed;
Victor Stinner1acc1292013-07-27 00:03:47 +02007843 Py_CLEAR(tmp);
Serhiy Storchakaf320be72018-01-25 10:49:40 +02007844 }
Victor Stinnerf8599272020-07-03 16:57:19 +02007845 if (_PyObject_LookupAttr(obj, state->ops, &tmp) < 0) {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007846 return 1;
7847 }
Serhiy Storchakaf320be72018-01-25 10:49:40 +02007848 if (tmp == NULL) {
7849 PyErr_SetString(PyExc_TypeError, "required field \"ops\" missing from Compare");
7850 return 1;
7851 }
7852 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007853 int res;
7854 Py_ssize_t len;
7855 Py_ssize_t i;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007856 if (!PyList_Check(tmp)) {
Dino Viehlandac46eb42019-09-11 10:16:34 -07007857 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 +02007858 goto failed;
7859 }
7860 len = PyList_GET_SIZE(tmp);
Antoine Pitroud01d396e2013-10-12 22:52:43 +02007861 ops = _Py_asdl_int_seq_new(len, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007862 if (ops == NULL) goto failed;
7863 for (i = 0; i < len; i++) {
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07007864 cmpop_ty val;
Serhiy Storchaka43c97312019-09-10 13:02:30 +03007865 PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
7866 Py_INCREF(tmp2);
Victor Stinnerf8599272020-07-03 16:57:19 +02007867 res = obj2ast_cmpop(state, tmp2, &val, arena);
Serhiy Storchaka43c97312019-09-10 13:02:30 +03007868 Py_DECREF(tmp2);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007869 if (res != 0) goto failed;
Serhiy Storchakacf380602016-10-07 21:51:28 +03007870 if (len != PyList_GET_SIZE(tmp)) {
7871 PyErr_SetString(PyExc_RuntimeError, "Compare field \"ops\" changed size during iteration");
7872 goto failed;
7873 }
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07007874 asdl_seq_SET(ops, i, val);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007875 }
Victor Stinner1acc1292013-07-27 00:03:47 +02007876 Py_CLEAR(tmp);
Serhiy Storchakaf320be72018-01-25 10:49:40 +02007877 }
Victor Stinnerf8599272020-07-03 16:57:19 +02007878 if (_PyObject_LookupAttr(obj, state->comparators, &tmp) < 0) {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007879 return 1;
7880 }
Serhiy Storchakaf320be72018-01-25 10:49:40 +02007881 if (tmp == NULL) {
7882 PyErr_SetString(PyExc_TypeError, "required field \"comparators\" missing from Compare");
7883 return 1;
7884 }
7885 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007886 int res;
7887 Py_ssize_t len;
7888 Py_ssize_t i;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007889 if (!PyList_Check(tmp)) {
Dino Viehlandac46eb42019-09-11 10:16:34 -07007890 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 +02007891 goto failed;
7892 }
7893 len = PyList_GET_SIZE(tmp);
Antoine Pitroud01d396e2013-10-12 22:52:43 +02007894 comparators = _Py_asdl_seq_new(len, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007895 if (comparators == NULL) goto failed;
7896 for (i = 0; i < len; i++) {
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07007897 expr_ty val;
Serhiy Storchaka43c97312019-09-10 13:02:30 +03007898 PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
7899 Py_INCREF(tmp2);
Victor Stinnerf8599272020-07-03 16:57:19 +02007900 res = obj2ast_expr(state, tmp2, &val, arena);
Serhiy Storchaka43c97312019-09-10 13:02:30 +03007901 Py_DECREF(tmp2);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007902 if (res != 0) goto failed;
Serhiy Storchakacf380602016-10-07 21:51:28 +03007903 if (len != PyList_GET_SIZE(tmp)) {
7904 PyErr_SetString(PyExc_RuntimeError, "Compare field \"comparators\" changed size during iteration");
7905 goto failed;
7906 }
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07007907 asdl_seq_SET(comparators, i, val);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007908 }
Victor Stinner1acc1292013-07-27 00:03:47 +02007909 Py_CLEAR(tmp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007910 }
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00007911 *out = Compare(left, ops, comparators, lineno, col_offset, end_lineno,
7912 end_col_offset, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007913 if (*out == NULL) goto failed;
7914 return 0;
7915 }
Victor Stinnerf8599272020-07-03 16:57:19 +02007916 tp = state->Call_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07007917 isinstance = PyObject_IsInstance(obj, tp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007918 if (isinstance == -1) {
7919 return 1;
7920 }
7921 if (isinstance) {
7922 expr_ty func;
7923 asdl_seq* args;
7924 asdl_seq* keywords;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007925
Victor Stinnerf8599272020-07-03 16:57:19 +02007926 if (_PyObject_LookupAttr(obj, state->func, &tmp) < 0) {
Serhiy Storchakaf320be72018-01-25 10:49:40 +02007927 return 1;
7928 }
7929 if (tmp == NULL) {
7930 PyErr_SetString(PyExc_TypeError, "required field \"func\" missing from Call");
7931 return 1;
7932 }
7933 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007934 int res;
Victor Stinnerf8599272020-07-03 16:57:19 +02007935 res = obj2ast_expr(state, tmp, &func, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007936 if (res != 0) goto failed;
Victor Stinner1acc1292013-07-27 00:03:47 +02007937 Py_CLEAR(tmp);
Serhiy Storchakaf320be72018-01-25 10:49:40 +02007938 }
Victor Stinnerf8599272020-07-03 16:57:19 +02007939 if (_PyObject_LookupAttr(obj, state->args, &tmp) < 0) {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007940 return 1;
7941 }
Serhiy Storchakaf320be72018-01-25 10:49:40 +02007942 if (tmp == NULL) {
7943 PyErr_SetString(PyExc_TypeError, "required field \"args\" missing from Call");
7944 return 1;
7945 }
7946 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007947 int res;
7948 Py_ssize_t len;
7949 Py_ssize_t i;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007950 if (!PyList_Check(tmp)) {
Dino Viehlandac46eb42019-09-11 10:16:34 -07007951 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 +02007952 goto failed;
7953 }
7954 len = PyList_GET_SIZE(tmp);
Antoine Pitroud01d396e2013-10-12 22:52:43 +02007955 args = _Py_asdl_seq_new(len, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007956 if (args == NULL) goto failed;
7957 for (i = 0; i < len; i++) {
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07007958 expr_ty val;
Serhiy Storchaka43c97312019-09-10 13:02:30 +03007959 PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
7960 Py_INCREF(tmp2);
Victor Stinnerf8599272020-07-03 16:57:19 +02007961 res = obj2ast_expr(state, tmp2, &val, arena);
Serhiy Storchaka43c97312019-09-10 13:02:30 +03007962 Py_DECREF(tmp2);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007963 if (res != 0) goto failed;
Serhiy Storchakacf380602016-10-07 21:51:28 +03007964 if (len != PyList_GET_SIZE(tmp)) {
7965 PyErr_SetString(PyExc_RuntimeError, "Call field \"args\" changed size during iteration");
7966 goto failed;
7967 }
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07007968 asdl_seq_SET(args, i, val);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007969 }
Victor Stinner1acc1292013-07-27 00:03:47 +02007970 Py_CLEAR(tmp);
Serhiy Storchakaf320be72018-01-25 10:49:40 +02007971 }
Victor Stinnerf8599272020-07-03 16:57:19 +02007972 if (_PyObject_LookupAttr(obj, state->keywords, &tmp) < 0) {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007973 return 1;
7974 }
Serhiy Storchakaf320be72018-01-25 10:49:40 +02007975 if (tmp == NULL) {
7976 PyErr_SetString(PyExc_TypeError, "required field \"keywords\" missing from Call");
7977 return 1;
7978 }
7979 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007980 int res;
7981 Py_ssize_t len;
7982 Py_ssize_t i;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007983 if (!PyList_Check(tmp)) {
Dino Viehlandac46eb42019-09-11 10:16:34 -07007984 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 +02007985 goto failed;
7986 }
7987 len = PyList_GET_SIZE(tmp);
Antoine Pitroud01d396e2013-10-12 22:52:43 +02007988 keywords = _Py_asdl_seq_new(len, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007989 if (keywords == NULL) goto failed;
7990 for (i = 0; i < len; i++) {
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07007991 keyword_ty val;
Serhiy Storchaka43c97312019-09-10 13:02:30 +03007992 PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
7993 Py_INCREF(tmp2);
Victor Stinnerf8599272020-07-03 16:57:19 +02007994 res = obj2ast_keyword(state, tmp2, &val, arena);
Serhiy Storchaka43c97312019-09-10 13:02:30 +03007995 Py_DECREF(tmp2);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007996 if (res != 0) goto failed;
Serhiy Storchakacf380602016-10-07 21:51:28 +03007997 if (len != PyList_GET_SIZE(tmp)) {
7998 PyErr_SetString(PyExc_RuntimeError, "Call field \"keywords\" changed size during iteration");
7999 goto failed;
8000 }
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07008001 asdl_seq_SET(keywords, i, val);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008002 }
Victor Stinner1acc1292013-07-27 00:03:47 +02008003 Py_CLEAR(tmp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008004 }
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00008005 *out = Call(func, args, keywords, lineno, col_offset, end_lineno,
8006 end_col_offset, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008007 if (*out == NULL) goto failed;
8008 return 0;
8009 }
Victor Stinnerf8599272020-07-03 16:57:19 +02008010 tp = state->FormattedValue_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07008011 isinstance = PyObject_IsInstance(obj, tp);
Eric V. Smith235a6f02015-09-19 14:51:32 -04008012 if (isinstance == -1) {
8013 return 1;
8014 }
8015 if (isinstance) {
8016 expr_ty value;
8017 int conversion;
8018 expr_ty format_spec;
8019
Victor Stinnerf8599272020-07-03 16:57:19 +02008020 if (_PyObject_LookupAttr(obj, state->value, &tmp) < 0) {
Serhiy Storchakaf320be72018-01-25 10:49:40 +02008021 return 1;
8022 }
8023 if (tmp == NULL) {
8024 PyErr_SetString(PyExc_TypeError, "required field \"value\" missing from FormattedValue");
8025 return 1;
8026 }
8027 else {
Eric V. Smith235a6f02015-09-19 14:51:32 -04008028 int res;
Victor Stinnerf8599272020-07-03 16:57:19 +02008029 res = obj2ast_expr(state, tmp, &value, arena);
Eric V. Smith235a6f02015-09-19 14:51:32 -04008030 if (res != 0) goto failed;
8031 Py_CLEAR(tmp);
Serhiy Storchakaf320be72018-01-25 10:49:40 +02008032 }
Victor Stinnerf8599272020-07-03 16:57:19 +02008033 if (_PyObject_LookupAttr(obj, state->conversion, &tmp) < 0) {
Eric V. Smith235a6f02015-09-19 14:51:32 -04008034 return 1;
8035 }
Serhiy Storchakaf320be72018-01-25 10:49:40 +02008036 if (tmp == NULL || tmp == Py_None) {
8037 Py_CLEAR(tmp);
8038 conversion = 0;
8039 }
8040 else {
Eric V. Smith235a6f02015-09-19 14:51:32 -04008041 int res;
Victor Stinnerf8599272020-07-03 16:57:19 +02008042 res = obj2ast_int(state, tmp, &conversion, arena);
Eric V. Smith235a6f02015-09-19 14:51:32 -04008043 if (res != 0) goto failed;
8044 Py_CLEAR(tmp);
Eric V. Smith235a6f02015-09-19 14:51:32 -04008045 }
Victor Stinnerf8599272020-07-03 16:57:19 +02008046 if (_PyObject_LookupAttr(obj, state->format_spec, &tmp) < 0) {
Serhiy Storchakaf320be72018-01-25 10:49:40 +02008047 return 1;
8048 }
8049 if (tmp == NULL || tmp == Py_None) {
8050 Py_CLEAR(tmp);
8051 format_spec = NULL;
8052 }
8053 else {
Eric V. Smith235a6f02015-09-19 14:51:32 -04008054 int res;
Victor Stinnerf8599272020-07-03 16:57:19 +02008055 res = obj2ast_expr(state, tmp, &format_spec, arena);
Eric V. Smith235a6f02015-09-19 14:51:32 -04008056 if (res != 0) goto failed;
8057 Py_CLEAR(tmp);
Eric V. Smith235a6f02015-09-19 14:51:32 -04008058 }
Eric V. Smith6f6ff8a2019-05-27 15:31:52 -04008059 *out = FormattedValue(value, conversion, format_spec, lineno,
8060 col_offset, end_lineno, end_col_offset, arena);
Eric V. Smith235a6f02015-09-19 14:51:32 -04008061 if (*out == NULL) goto failed;
8062 return 0;
8063 }
Victor Stinnerf8599272020-07-03 16:57:19 +02008064 tp = state->JoinedStr_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07008065 isinstance = PyObject_IsInstance(obj, tp);
Eric V. Smith235a6f02015-09-19 14:51:32 -04008066 if (isinstance == -1) {
8067 return 1;
8068 }
8069 if (isinstance) {
8070 asdl_seq* values;
8071
Victor Stinnerf8599272020-07-03 16:57:19 +02008072 if (_PyObject_LookupAttr(obj, state->values, &tmp) < 0) {
Serhiy Storchakaf320be72018-01-25 10:49:40 +02008073 return 1;
8074 }
8075 if (tmp == NULL) {
8076 PyErr_SetString(PyExc_TypeError, "required field \"values\" missing from JoinedStr");
8077 return 1;
8078 }
8079 else {
Eric V. Smith235a6f02015-09-19 14:51:32 -04008080 int res;
8081 Py_ssize_t len;
8082 Py_ssize_t i;
Eric V. Smith235a6f02015-09-19 14:51:32 -04008083 if (!PyList_Check(tmp)) {
Dino Viehlandac46eb42019-09-11 10:16:34 -07008084 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 -04008085 goto failed;
8086 }
8087 len = PyList_GET_SIZE(tmp);
8088 values = _Py_asdl_seq_new(len, arena);
8089 if (values == NULL) goto failed;
8090 for (i = 0; i < len; i++) {
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07008091 expr_ty val;
Serhiy Storchaka43c97312019-09-10 13:02:30 +03008092 PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
8093 Py_INCREF(tmp2);
Victor Stinnerf8599272020-07-03 16:57:19 +02008094 res = obj2ast_expr(state, tmp2, &val, arena);
Serhiy Storchaka43c97312019-09-10 13:02:30 +03008095 Py_DECREF(tmp2);
Eric V. Smith235a6f02015-09-19 14:51:32 -04008096 if (res != 0) goto failed;
Serhiy Storchaka5e808552016-10-07 21:55:49 +03008097 if (len != PyList_GET_SIZE(tmp)) {
8098 PyErr_SetString(PyExc_RuntimeError, "JoinedStr field \"values\" changed size during iteration");
8099 goto failed;
8100 }
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07008101 asdl_seq_SET(values, i, val);
Eric V. Smith235a6f02015-09-19 14:51:32 -04008102 }
8103 Py_CLEAR(tmp);
Eric V. Smith235a6f02015-09-19 14:51:32 -04008104 }
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00008105 *out = JoinedStr(values, lineno, col_offset, end_lineno,
8106 end_col_offset, arena);
Eric V. Smith235a6f02015-09-19 14:51:32 -04008107 if (*out == NULL) goto failed;
8108 return 0;
8109 }
Victor Stinnerf8599272020-07-03 16:57:19 +02008110 tp = state->Constant_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07008111 isinstance = PyObject_IsInstance(obj, tp);
Victor Stinnerf2c1aa12016-01-26 00:40:57 +01008112 if (isinstance == -1) {
8113 return 1;
8114 }
8115 if (isinstance) {
8116 constant value;
Guido van Rossum10f8ce62019-03-13 13:00:46 -07008117 string kind;
Victor Stinnerf2c1aa12016-01-26 00:40:57 +01008118
Victor Stinnerf8599272020-07-03 16:57:19 +02008119 if (_PyObject_LookupAttr(obj, state->value, &tmp) < 0) {
Serhiy Storchakaf320be72018-01-25 10:49:40 +02008120 return 1;
8121 }
8122 if (tmp == NULL) {
8123 PyErr_SetString(PyExc_TypeError, "required field \"value\" missing from Constant");
8124 return 1;
8125 }
8126 else {
Victor Stinnerf2c1aa12016-01-26 00:40:57 +01008127 int res;
Victor Stinnerf8599272020-07-03 16:57:19 +02008128 res = obj2ast_constant(state, tmp, &value, arena);
Victor Stinnerf2c1aa12016-01-26 00:40:57 +01008129 if (res != 0) goto failed;
8130 Py_CLEAR(tmp);
Victor Stinnerf2c1aa12016-01-26 00:40:57 +01008131 }
Victor Stinnerf8599272020-07-03 16:57:19 +02008132 if (_PyObject_LookupAttr(obj, state->kind, &tmp) < 0) {
Guido van Rossum10f8ce62019-03-13 13:00:46 -07008133 return 1;
8134 }
8135 if (tmp == NULL || tmp == Py_None) {
8136 Py_CLEAR(tmp);
8137 kind = NULL;
8138 }
8139 else {
8140 int res;
Victor Stinnerf8599272020-07-03 16:57:19 +02008141 res = obj2ast_string(state, tmp, &kind, arena);
Guido van Rossum10f8ce62019-03-13 13:00:46 -07008142 if (res != 0) goto failed;
8143 Py_CLEAR(tmp);
8144 }
8145 *out = Constant(value, kind, lineno, col_offset, end_lineno,
8146 end_col_offset, arena);
Victor Stinnerf2c1aa12016-01-26 00:40:57 +01008147 if (*out == NULL) goto failed;
8148 return 0;
8149 }
Victor Stinnerf8599272020-07-03 16:57:19 +02008150 tp = state->Attribute_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07008151 isinstance = PyObject_IsInstance(obj, tp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008152 if (isinstance == -1) {
8153 return 1;
8154 }
8155 if (isinstance) {
8156 expr_ty value;
8157 identifier attr;
8158 expr_context_ty ctx;
8159
Victor Stinnerf8599272020-07-03 16:57:19 +02008160 if (_PyObject_LookupAttr(obj, state->value, &tmp) < 0) {
Serhiy Storchakaf320be72018-01-25 10:49:40 +02008161 return 1;
8162 }
8163 if (tmp == NULL) {
8164 PyErr_SetString(PyExc_TypeError, "required field \"value\" missing from Attribute");
8165 return 1;
8166 }
8167 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008168 int res;
Victor Stinnerf8599272020-07-03 16:57:19 +02008169 res = obj2ast_expr(state, tmp, &value, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008170 if (res != 0) goto failed;
Victor Stinner1acc1292013-07-27 00:03:47 +02008171 Py_CLEAR(tmp);
Serhiy Storchakaf320be72018-01-25 10:49:40 +02008172 }
Victor Stinnerf8599272020-07-03 16:57:19 +02008173 if (_PyObject_LookupAttr(obj, state->attr, &tmp) < 0) {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008174 return 1;
8175 }
Serhiy Storchakaf320be72018-01-25 10:49:40 +02008176 if (tmp == NULL) {
8177 PyErr_SetString(PyExc_TypeError, "required field \"attr\" missing from Attribute");
8178 return 1;
8179 }
8180 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008181 int res;
Victor Stinnerf8599272020-07-03 16:57:19 +02008182 res = obj2ast_identifier(state, tmp, &attr, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008183 if (res != 0) goto failed;
Victor Stinner1acc1292013-07-27 00:03:47 +02008184 Py_CLEAR(tmp);
Serhiy Storchakaf320be72018-01-25 10:49:40 +02008185 }
Victor Stinnerf8599272020-07-03 16:57:19 +02008186 if (_PyObject_LookupAttr(obj, state->ctx, &tmp) < 0) {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008187 return 1;
8188 }
Serhiy Storchakaf320be72018-01-25 10:49:40 +02008189 if (tmp == NULL) {
8190 PyErr_SetString(PyExc_TypeError, "required field \"ctx\" missing from Attribute");
8191 return 1;
8192 }
8193 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008194 int res;
Victor Stinnerf8599272020-07-03 16:57:19 +02008195 res = obj2ast_expr_context(state, tmp, &ctx, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008196 if (res != 0) goto failed;
Victor Stinner1acc1292013-07-27 00:03:47 +02008197 Py_CLEAR(tmp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008198 }
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00008199 *out = Attribute(value, attr, ctx, lineno, col_offset, end_lineno,
8200 end_col_offset, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008201 if (*out == NULL) goto failed;
8202 return 0;
8203 }
Victor Stinnerf8599272020-07-03 16:57:19 +02008204 tp = state->Subscript_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07008205 isinstance = PyObject_IsInstance(obj, tp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008206 if (isinstance == -1) {
8207 return 1;
8208 }
8209 if (isinstance) {
8210 expr_ty value;
Serhiy Storchaka13d52c22020-03-10 18:52:34 +02008211 expr_ty slice;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008212 expr_context_ty ctx;
8213
Victor Stinnerf8599272020-07-03 16:57:19 +02008214 if (_PyObject_LookupAttr(obj, state->value, &tmp) < 0) {
Serhiy Storchakaf320be72018-01-25 10:49:40 +02008215 return 1;
8216 }
8217 if (tmp == NULL) {
8218 PyErr_SetString(PyExc_TypeError, "required field \"value\" missing from Subscript");
8219 return 1;
8220 }
8221 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008222 int res;
Victor Stinnerf8599272020-07-03 16:57:19 +02008223 res = obj2ast_expr(state, tmp, &value, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008224 if (res != 0) goto failed;
Victor Stinner1acc1292013-07-27 00:03:47 +02008225 Py_CLEAR(tmp);
Serhiy Storchakaf320be72018-01-25 10:49:40 +02008226 }
Victor Stinnerf8599272020-07-03 16:57:19 +02008227 if (_PyObject_LookupAttr(obj, state->slice, &tmp) < 0) {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008228 return 1;
8229 }
Serhiy Storchakaf320be72018-01-25 10:49:40 +02008230 if (tmp == NULL) {
8231 PyErr_SetString(PyExc_TypeError, "required field \"slice\" missing from Subscript");
8232 return 1;
8233 }
8234 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008235 int res;
Victor Stinnerf8599272020-07-03 16:57:19 +02008236 res = obj2ast_expr(state, tmp, &slice, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008237 if (res != 0) goto failed;
Victor Stinner1acc1292013-07-27 00:03:47 +02008238 Py_CLEAR(tmp);
Serhiy Storchakaf320be72018-01-25 10:49:40 +02008239 }
Victor Stinnerf8599272020-07-03 16:57:19 +02008240 if (_PyObject_LookupAttr(obj, state->ctx, &tmp) < 0) {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008241 return 1;
8242 }
Serhiy Storchakaf320be72018-01-25 10:49:40 +02008243 if (tmp == NULL) {
8244 PyErr_SetString(PyExc_TypeError, "required field \"ctx\" missing from Subscript");
8245 return 1;
8246 }
8247 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008248 int res;
Victor Stinnerf8599272020-07-03 16:57:19 +02008249 res = obj2ast_expr_context(state, tmp, &ctx, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008250 if (res != 0) goto failed;
Victor Stinner1acc1292013-07-27 00:03:47 +02008251 Py_CLEAR(tmp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008252 }
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00008253 *out = Subscript(value, slice, ctx, lineno, col_offset, end_lineno,
8254 end_col_offset, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008255 if (*out == NULL) goto failed;
8256 return 0;
8257 }
Victor Stinnerf8599272020-07-03 16:57:19 +02008258 tp = state->Starred_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07008259 isinstance = PyObject_IsInstance(obj, tp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008260 if (isinstance == -1) {
8261 return 1;
8262 }
8263 if (isinstance) {
8264 expr_ty value;
8265 expr_context_ty ctx;
8266
Victor Stinnerf8599272020-07-03 16:57:19 +02008267 if (_PyObject_LookupAttr(obj, state->value, &tmp) < 0) {
Serhiy Storchakaf320be72018-01-25 10:49:40 +02008268 return 1;
8269 }
8270 if (tmp == NULL) {
8271 PyErr_SetString(PyExc_TypeError, "required field \"value\" missing from Starred");
8272 return 1;
8273 }
8274 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008275 int res;
Victor Stinnerf8599272020-07-03 16:57:19 +02008276 res = obj2ast_expr(state, tmp, &value, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008277 if (res != 0) goto failed;
Victor Stinner1acc1292013-07-27 00:03:47 +02008278 Py_CLEAR(tmp);
Serhiy Storchakaf320be72018-01-25 10:49:40 +02008279 }
Victor Stinnerf8599272020-07-03 16:57:19 +02008280 if (_PyObject_LookupAttr(obj, state->ctx, &tmp) < 0) {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008281 return 1;
8282 }
Serhiy Storchakaf320be72018-01-25 10:49:40 +02008283 if (tmp == NULL) {
8284 PyErr_SetString(PyExc_TypeError, "required field \"ctx\" missing from Starred");
8285 return 1;
8286 }
8287 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008288 int res;
Victor Stinnerf8599272020-07-03 16:57:19 +02008289 res = obj2ast_expr_context(state, tmp, &ctx, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008290 if (res != 0) goto failed;
Victor Stinner1acc1292013-07-27 00:03:47 +02008291 Py_CLEAR(tmp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008292 }
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00008293 *out = Starred(value, ctx, lineno, col_offset, end_lineno,
8294 end_col_offset, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008295 if (*out == NULL) goto failed;
8296 return 0;
8297 }
Victor Stinnerf8599272020-07-03 16:57:19 +02008298 tp = state->Name_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07008299 isinstance = PyObject_IsInstance(obj, tp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008300 if (isinstance == -1) {
8301 return 1;
8302 }
8303 if (isinstance) {
8304 identifier id;
8305 expr_context_ty ctx;
8306
Victor Stinnerf8599272020-07-03 16:57:19 +02008307 if (_PyObject_LookupAttr(obj, state->id, &tmp) < 0) {
Serhiy Storchakaf320be72018-01-25 10:49:40 +02008308 return 1;
8309 }
8310 if (tmp == NULL) {
8311 PyErr_SetString(PyExc_TypeError, "required field \"id\" missing from Name");
8312 return 1;
8313 }
8314 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008315 int res;
Victor Stinnerf8599272020-07-03 16:57:19 +02008316 res = obj2ast_identifier(state, tmp, &id, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008317 if (res != 0) goto failed;
Victor Stinner1acc1292013-07-27 00:03:47 +02008318 Py_CLEAR(tmp);
Serhiy Storchakaf320be72018-01-25 10:49:40 +02008319 }
Victor Stinnerf8599272020-07-03 16:57:19 +02008320 if (_PyObject_LookupAttr(obj, state->ctx, &tmp) < 0) {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008321 return 1;
8322 }
Serhiy Storchakaf320be72018-01-25 10:49:40 +02008323 if (tmp == NULL) {
8324 PyErr_SetString(PyExc_TypeError, "required field \"ctx\" missing from Name");
8325 return 1;
8326 }
8327 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008328 int res;
Victor Stinnerf8599272020-07-03 16:57:19 +02008329 res = obj2ast_expr_context(state, tmp, &ctx, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008330 if (res != 0) goto failed;
Victor Stinner1acc1292013-07-27 00:03:47 +02008331 Py_CLEAR(tmp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008332 }
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00008333 *out = Name(id, ctx, lineno, col_offset, end_lineno, end_col_offset,
8334 arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008335 if (*out == NULL) goto failed;
8336 return 0;
8337 }
Victor Stinnerf8599272020-07-03 16:57:19 +02008338 tp = state->List_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07008339 isinstance = PyObject_IsInstance(obj, tp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008340 if (isinstance == -1) {
8341 return 1;
8342 }
8343 if (isinstance) {
8344 asdl_seq* elts;
8345 expr_context_ty ctx;
8346
Victor Stinnerf8599272020-07-03 16:57:19 +02008347 if (_PyObject_LookupAttr(obj, state->elts, &tmp) < 0) {
Serhiy Storchakaf320be72018-01-25 10:49:40 +02008348 return 1;
8349 }
8350 if (tmp == NULL) {
8351 PyErr_SetString(PyExc_TypeError, "required field \"elts\" missing from List");
8352 return 1;
8353 }
8354 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008355 int res;
8356 Py_ssize_t len;
8357 Py_ssize_t i;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008358 if (!PyList_Check(tmp)) {
Dino Viehlandac46eb42019-09-11 10:16:34 -07008359 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 +02008360 goto failed;
8361 }
8362 len = PyList_GET_SIZE(tmp);
Antoine Pitroud01d396e2013-10-12 22:52:43 +02008363 elts = _Py_asdl_seq_new(len, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008364 if (elts == NULL) goto failed;
8365 for (i = 0; i < len; i++) {
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07008366 expr_ty val;
Serhiy Storchaka43c97312019-09-10 13:02:30 +03008367 PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
8368 Py_INCREF(tmp2);
Victor Stinnerf8599272020-07-03 16:57:19 +02008369 res = obj2ast_expr(state, tmp2, &val, arena);
Serhiy Storchaka43c97312019-09-10 13:02:30 +03008370 Py_DECREF(tmp2);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008371 if (res != 0) goto failed;
Serhiy Storchakacf380602016-10-07 21:51:28 +03008372 if (len != PyList_GET_SIZE(tmp)) {
8373 PyErr_SetString(PyExc_RuntimeError, "List field \"elts\" changed size during iteration");
8374 goto failed;
8375 }
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07008376 asdl_seq_SET(elts, i, val);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008377 }
Victor Stinner1acc1292013-07-27 00:03:47 +02008378 Py_CLEAR(tmp);
Serhiy Storchakaf320be72018-01-25 10:49:40 +02008379 }
Victor Stinnerf8599272020-07-03 16:57:19 +02008380 if (_PyObject_LookupAttr(obj, state->ctx, &tmp) < 0) {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008381 return 1;
8382 }
Serhiy Storchakaf320be72018-01-25 10:49:40 +02008383 if (tmp == NULL) {
8384 PyErr_SetString(PyExc_TypeError, "required field \"ctx\" missing from List");
8385 return 1;
8386 }
8387 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008388 int res;
Victor Stinnerf8599272020-07-03 16:57:19 +02008389 res = obj2ast_expr_context(state, tmp, &ctx, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008390 if (res != 0) goto failed;
Victor Stinner1acc1292013-07-27 00:03:47 +02008391 Py_CLEAR(tmp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008392 }
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00008393 *out = List(elts, ctx, lineno, col_offset, end_lineno, end_col_offset,
8394 arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008395 if (*out == NULL) goto failed;
8396 return 0;
8397 }
Victor Stinnerf8599272020-07-03 16:57:19 +02008398 tp = state->Tuple_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07008399 isinstance = PyObject_IsInstance(obj, tp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008400 if (isinstance == -1) {
8401 return 1;
8402 }
8403 if (isinstance) {
8404 asdl_seq* elts;
8405 expr_context_ty ctx;
8406
Victor Stinnerf8599272020-07-03 16:57:19 +02008407 if (_PyObject_LookupAttr(obj, state->elts, &tmp) < 0) {
Serhiy Storchakaf320be72018-01-25 10:49:40 +02008408 return 1;
8409 }
8410 if (tmp == NULL) {
8411 PyErr_SetString(PyExc_TypeError, "required field \"elts\" missing from Tuple");
8412 return 1;
8413 }
8414 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008415 int res;
8416 Py_ssize_t len;
8417 Py_ssize_t i;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008418 if (!PyList_Check(tmp)) {
Dino Viehlandac46eb42019-09-11 10:16:34 -07008419 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 +02008420 goto failed;
8421 }
8422 len = PyList_GET_SIZE(tmp);
Antoine Pitroud01d396e2013-10-12 22:52:43 +02008423 elts = _Py_asdl_seq_new(len, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008424 if (elts == NULL) goto failed;
8425 for (i = 0; i < len; i++) {
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07008426 expr_ty val;
Serhiy Storchaka43c97312019-09-10 13:02:30 +03008427 PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
8428 Py_INCREF(tmp2);
Victor Stinnerf8599272020-07-03 16:57:19 +02008429 res = obj2ast_expr(state, tmp2, &val, arena);
Serhiy Storchaka43c97312019-09-10 13:02:30 +03008430 Py_DECREF(tmp2);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008431 if (res != 0) goto failed;
Serhiy Storchakacf380602016-10-07 21:51:28 +03008432 if (len != PyList_GET_SIZE(tmp)) {
8433 PyErr_SetString(PyExc_RuntimeError, "Tuple field \"elts\" changed size during iteration");
8434 goto failed;
8435 }
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07008436 asdl_seq_SET(elts, i, val);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008437 }
Victor Stinner1acc1292013-07-27 00:03:47 +02008438 Py_CLEAR(tmp);
Serhiy Storchakaf320be72018-01-25 10:49:40 +02008439 }
Victor Stinnerf8599272020-07-03 16:57:19 +02008440 if (_PyObject_LookupAttr(obj, state->ctx, &tmp) < 0) {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008441 return 1;
8442 }
Serhiy Storchakaf320be72018-01-25 10:49:40 +02008443 if (tmp == NULL) {
8444 PyErr_SetString(PyExc_TypeError, "required field \"ctx\" missing from Tuple");
8445 return 1;
8446 }
8447 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008448 int res;
Victor Stinnerf8599272020-07-03 16:57:19 +02008449 res = obj2ast_expr_context(state, tmp, &ctx, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008450 if (res != 0) goto failed;
Victor Stinner1acc1292013-07-27 00:03:47 +02008451 Py_CLEAR(tmp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008452 }
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00008453 *out = Tuple(elts, ctx, lineno, col_offset, end_lineno, end_col_offset,
8454 arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008455 if (*out == NULL) goto failed;
8456 return 0;
8457 }
Victor Stinnerf8599272020-07-03 16:57:19 +02008458 tp = state->Slice_type;
Serhiy Storchaka13d52c22020-03-10 18:52:34 +02008459 isinstance = PyObject_IsInstance(obj, tp);
8460 if (isinstance == -1) {
8461 return 1;
8462 }
8463 if (isinstance) {
8464 expr_ty lower;
8465 expr_ty upper;
8466 expr_ty step;
8467
Victor Stinnerf8599272020-07-03 16:57:19 +02008468 if (_PyObject_LookupAttr(obj, state->lower, &tmp) < 0) {
Serhiy Storchaka13d52c22020-03-10 18:52:34 +02008469 return 1;
8470 }
8471 if (tmp == NULL || tmp == Py_None) {
8472 Py_CLEAR(tmp);
8473 lower = NULL;
8474 }
8475 else {
8476 int res;
Victor Stinnerf8599272020-07-03 16:57:19 +02008477 res = obj2ast_expr(state, tmp, &lower, arena);
Serhiy Storchaka13d52c22020-03-10 18:52:34 +02008478 if (res != 0) goto failed;
8479 Py_CLEAR(tmp);
8480 }
Victor Stinnerf8599272020-07-03 16:57:19 +02008481 if (_PyObject_LookupAttr(obj, state->upper, &tmp) < 0) {
Serhiy Storchaka13d52c22020-03-10 18:52:34 +02008482 return 1;
8483 }
8484 if (tmp == NULL || tmp == Py_None) {
8485 Py_CLEAR(tmp);
8486 upper = NULL;
8487 }
8488 else {
8489 int res;
Victor Stinnerf8599272020-07-03 16:57:19 +02008490 res = obj2ast_expr(state, tmp, &upper, arena);
Serhiy Storchaka13d52c22020-03-10 18:52:34 +02008491 if (res != 0) goto failed;
8492 Py_CLEAR(tmp);
8493 }
Victor Stinnerf8599272020-07-03 16:57:19 +02008494 if (_PyObject_LookupAttr(obj, state->step, &tmp) < 0) {
Serhiy Storchaka13d52c22020-03-10 18:52:34 +02008495 return 1;
8496 }
8497 if (tmp == NULL || tmp == Py_None) {
8498 Py_CLEAR(tmp);
8499 step = NULL;
8500 }
8501 else {
8502 int res;
Victor Stinnerf8599272020-07-03 16:57:19 +02008503 res = obj2ast_expr(state, tmp, &step, arena);
Serhiy Storchaka13d52c22020-03-10 18:52:34 +02008504 if (res != 0) goto failed;
8505 Py_CLEAR(tmp);
8506 }
8507 *out = Slice(lower, upper, step, lineno, col_offset, end_lineno,
8508 end_col_offset, arena);
8509 if (*out == NULL) goto failed;
8510 return 0;
8511 }
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008512
8513 PyErr_Format(PyExc_TypeError, "expected some sort of expr, but got %R", obj);
8514 failed:
8515 Py_XDECREF(tmp);
8516 return 1;
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00008517}
8518
8519int
Victor Stinnerf8599272020-07-03 16:57:19 +02008520obj2ast_expr_context(astmodulestate *state, PyObject* obj, expr_context_ty*
8521 out, PyArena* arena)
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00008522{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008523 int isinstance;
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00008524
Victor Stinnerf8599272020-07-03 16:57:19 +02008525 isinstance = PyObject_IsInstance(obj, state->Load_type);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008526 if (isinstance == -1) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00008527 return 1;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008528 }
8529 if (isinstance) {
8530 *out = Load;
8531 return 0;
8532 }
Victor Stinnerf8599272020-07-03 16:57:19 +02008533 isinstance = PyObject_IsInstance(obj, state->Store_type);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008534 if (isinstance == -1) {
8535 return 1;
8536 }
8537 if (isinstance) {
8538 *out = Store;
8539 return 0;
8540 }
Victor Stinnerf8599272020-07-03 16:57:19 +02008541 isinstance = PyObject_IsInstance(obj, state->Del_type);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008542 if (isinstance == -1) {
8543 return 1;
8544 }
8545 if (isinstance) {
8546 *out = Del;
8547 return 0;
8548 }
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008549
8550 PyErr_Format(PyExc_TypeError, "expected some sort of expr_context, but got %R", obj);
8551 return 1;
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00008552}
8553
8554int
Victor Stinnerf8599272020-07-03 16:57:19 +02008555obj2ast_boolop(astmodulestate *state, PyObject* obj, boolop_ty* out, PyArena*
8556 arena)
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00008557{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008558 int isinstance;
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00008559
Victor Stinnerf8599272020-07-03 16:57:19 +02008560 isinstance = PyObject_IsInstance(obj, state->And_type);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008561 if (isinstance == -1) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00008562 return 1;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008563 }
8564 if (isinstance) {
8565 *out = And;
8566 return 0;
8567 }
Victor Stinnerf8599272020-07-03 16:57:19 +02008568 isinstance = PyObject_IsInstance(obj, state->Or_type);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008569 if (isinstance == -1) {
8570 return 1;
8571 }
8572 if (isinstance) {
8573 *out = Or;
8574 return 0;
8575 }
8576
8577 PyErr_Format(PyExc_TypeError, "expected some sort of boolop, but got %R", obj);
8578 return 1;
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00008579}
8580
8581int
Victor Stinnerf8599272020-07-03 16:57:19 +02008582obj2ast_operator(astmodulestate *state, PyObject* obj, operator_ty* out,
8583 PyArena* arena)
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00008584{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008585 int isinstance;
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00008586
Victor Stinnerf8599272020-07-03 16:57:19 +02008587 isinstance = PyObject_IsInstance(obj, state->Add_type);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008588 if (isinstance == -1) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00008589 return 1;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008590 }
8591 if (isinstance) {
8592 *out = Add;
8593 return 0;
8594 }
Victor Stinnerf8599272020-07-03 16:57:19 +02008595 isinstance = PyObject_IsInstance(obj, state->Sub_type);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008596 if (isinstance == -1) {
8597 return 1;
8598 }
8599 if (isinstance) {
8600 *out = Sub;
8601 return 0;
8602 }
Victor Stinnerf8599272020-07-03 16:57:19 +02008603 isinstance = PyObject_IsInstance(obj, state->Mult_type);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008604 if (isinstance == -1) {
8605 return 1;
8606 }
8607 if (isinstance) {
8608 *out = Mult;
8609 return 0;
8610 }
Victor Stinnerf8599272020-07-03 16:57:19 +02008611 isinstance = PyObject_IsInstance(obj, state->MatMult_type);
Benjamin Petersond51374e2014-04-09 23:55:56 -04008612 if (isinstance == -1) {
8613 return 1;
8614 }
8615 if (isinstance) {
8616 *out = MatMult;
8617 return 0;
8618 }
Victor Stinnerf8599272020-07-03 16:57:19 +02008619 isinstance = PyObject_IsInstance(obj, state->Div_type);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008620 if (isinstance == -1) {
8621 return 1;
8622 }
8623 if (isinstance) {
8624 *out = Div;
8625 return 0;
8626 }
Victor Stinnerf8599272020-07-03 16:57:19 +02008627 isinstance = PyObject_IsInstance(obj, state->Mod_type);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008628 if (isinstance == -1) {
8629 return 1;
8630 }
8631 if (isinstance) {
8632 *out = Mod;
8633 return 0;
8634 }
Victor Stinnerf8599272020-07-03 16:57:19 +02008635 isinstance = PyObject_IsInstance(obj, state->Pow_type);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008636 if (isinstance == -1) {
8637 return 1;
8638 }
8639 if (isinstance) {
8640 *out = Pow;
8641 return 0;
8642 }
Victor Stinnerf8599272020-07-03 16:57:19 +02008643 isinstance = PyObject_IsInstance(obj, state->LShift_type);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008644 if (isinstance == -1) {
8645 return 1;
8646 }
8647 if (isinstance) {
8648 *out = LShift;
8649 return 0;
8650 }
Victor Stinnerf8599272020-07-03 16:57:19 +02008651 isinstance = PyObject_IsInstance(obj, state->RShift_type);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008652 if (isinstance == -1) {
8653 return 1;
8654 }
8655 if (isinstance) {
8656 *out = RShift;
8657 return 0;
8658 }
Victor Stinnerf8599272020-07-03 16:57:19 +02008659 isinstance = PyObject_IsInstance(obj, state->BitOr_type);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008660 if (isinstance == -1) {
8661 return 1;
8662 }
8663 if (isinstance) {
8664 *out = BitOr;
8665 return 0;
8666 }
Victor Stinnerf8599272020-07-03 16:57:19 +02008667 isinstance = PyObject_IsInstance(obj, state->BitXor_type);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008668 if (isinstance == -1) {
8669 return 1;
8670 }
8671 if (isinstance) {
8672 *out = BitXor;
8673 return 0;
8674 }
Victor Stinnerf8599272020-07-03 16:57:19 +02008675 isinstance = PyObject_IsInstance(obj, state->BitAnd_type);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008676 if (isinstance == -1) {
8677 return 1;
8678 }
8679 if (isinstance) {
8680 *out = BitAnd;
8681 return 0;
8682 }
Victor Stinnerf8599272020-07-03 16:57:19 +02008683 isinstance = PyObject_IsInstance(obj, state->FloorDiv_type);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008684 if (isinstance == -1) {
8685 return 1;
8686 }
8687 if (isinstance) {
8688 *out = FloorDiv;
8689 return 0;
8690 }
8691
8692 PyErr_Format(PyExc_TypeError, "expected some sort of operator, but got %R", obj);
8693 return 1;
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00008694}
8695
8696int
Victor Stinnerf8599272020-07-03 16:57:19 +02008697obj2ast_unaryop(astmodulestate *state, PyObject* obj, unaryop_ty* out, PyArena*
8698 arena)
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00008699{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008700 int isinstance;
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00008701
Victor Stinnerf8599272020-07-03 16:57:19 +02008702 isinstance = PyObject_IsInstance(obj, state->Invert_type);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008703 if (isinstance == -1) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00008704 return 1;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008705 }
8706 if (isinstance) {
8707 *out = Invert;
8708 return 0;
8709 }
Victor Stinnerf8599272020-07-03 16:57:19 +02008710 isinstance = PyObject_IsInstance(obj, state->Not_type);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008711 if (isinstance == -1) {
8712 return 1;
8713 }
8714 if (isinstance) {
8715 *out = Not;
8716 return 0;
8717 }
Victor Stinnerf8599272020-07-03 16:57:19 +02008718 isinstance = PyObject_IsInstance(obj, state->UAdd_type);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008719 if (isinstance == -1) {
8720 return 1;
8721 }
8722 if (isinstance) {
8723 *out = UAdd;
8724 return 0;
8725 }
Victor Stinnerf8599272020-07-03 16:57:19 +02008726 isinstance = PyObject_IsInstance(obj, state->USub_type);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008727 if (isinstance == -1) {
8728 return 1;
8729 }
8730 if (isinstance) {
8731 *out = USub;
8732 return 0;
8733 }
8734
8735 PyErr_Format(PyExc_TypeError, "expected some sort of unaryop, but got %R", obj);
8736 return 1;
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00008737}
8738
8739int
Victor Stinnerf8599272020-07-03 16:57:19 +02008740obj2ast_cmpop(astmodulestate *state, PyObject* obj, cmpop_ty* out, PyArena*
8741 arena)
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00008742{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008743 int isinstance;
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00008744
Victor Stinnerf8599272020-07-03 16:57:19 +02008745 isinstance = PyObject_IsInstance(obj, state->Eq_type);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008746 if (isinstance == -1) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00008747 return 1;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008748 }
8749 if (isinstance) {
8750 *out = Eq;
8751 return 0;
8752 }
Victor Stinnerf8599272020-07-03 16:57:19 +02008753 isinstance = PyObject_IsInstance(obj, state->NotEq_type);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008754 if (isinstance == -1) {
8755 return 1;
8756 }
8757 if (isinstance) {
8758 *out = NotEq;
8759 return 0;
8760 }
Victor Stinnerf8599272020-07-03 16:57:19 +02008761 isinstance = PyObject_IsInstance(obj, state->Lt_type);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008762 if (isinstance == -1) {
8763 return 1;
8764 }
8765 if (isinstance) {
8766 *out = Lt;
8767 return 0;
8768 }
Victor Stinnerf8599272020-07-03 16:57:19 +02008769 isinstance = PyObject_IsInstance(obj, state->LtE_type);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008770 if (isinstance == -1) {
8771 return 1;
8772 }
8773 if (isinstance) {
8774 *out = LtE;
8775 return 0;
8776 }
Victor Stinnerf8599272020-07-03 16:57:19 +02008777 isinstance = PyObject_IsInstance(obj, state->Gt_type);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008778 if (isinstance == -1) {
8779 return 1;
8780 }
8781 if (isinstance) {
8782 *out = Gt;
8783 return 0;
8784 }
Victor Stinnerf8599272020-07-03 16:57:19 +02008785 isinstance = PyObject_IsInstance(obj, state->GtE_type);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008786 if (isinstance == -1) {
8787 return 1;
8788 }
8789 if (isinstance) {
8790 *out = GtE;
8791 return 0;
8792 }
Victor Stinnerf8599272020-07-03 16:57:19 +02008793 isinstance = PyObject_IsInstance(obj, state->Is_type);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008794 if (isinstance == -1) {
8795 return 1;
8796 }
8797 if (isinstance) {
8798 *out = Is;
8799 return 0;
8800 }
Victor Stinnerf8599272020-07-03 16:57:19 +02008801 isinstance = PyObject_IsInstance(obj, state->IsNot_type);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008802 if (isinstance == -1) {
8803 return 1;
8804 }
8805 if (isinstance) {
8806 *out = IsNot;
8807 return 0;
8808 }
Victor Stinnerf8599272020-07-03 16:57:19 +02008809 isinstance = PyObject_IsInstance(obj, state->In_type);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008810 if (isinstance == -1) {
8811 return 1;
8812 }
8813 if (isinstance) {
8814 *out = In;
8815 return 0;
8816 }
Victor Stinnerf8599272020-07-03 16:57:19 +02008817 isinstance = PyObject_IsInstance(obj, state->NotIn_type);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008818 if (isinstance == -1) {
8819 return 1;
8820 }
8821 if (isinstance) {
8822 *out = NotIn;
8823 return 0;
8824 }
8825
8826 PyErr_Format(PyExc_TypeError, "expected some sort of cmpop, but got %R", obj);
8827 return 1;
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00008828}
8829
8830int
Victor Stinnerf8599272020-07-03 16:57:19 +02008831obj2ast_comprehension(astmodulestate *state, PyObject* obj, comprehension_ty*
8832 out, PyArena* arena)
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00008833{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008834 PyObject* tmp = NULL;
8835 expr_ty target;
8836 expr_ty iter;
8837 asdl_seq* ifs;
Yury Selivanov52c4e7c2016-09-09 10:36:01 -07008838 int is_async;
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00008839
Victor Stinnerf8599272020-07-03 16:57:19 +02008840 if (_PyObject_LookupAttr(obj, state->target, &tmp) < 0) {
Serhiy Storchakaf320be72018-01-25 10:49:40 +02008841 return 1;
8842 }
8843 if (tmp == NULL) {
8844 PyErr_SetString(PyExc_TypeError, "required field \"target\" missing from comprehension");
8845 return 1;
8846 }
8847 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008848 int res;
Victor Stinnerf8599272020-07-03 16:57:19 +02008849 res = obj2ast_expr(state, tmp, &target, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008850 if (res != 0) goto failed;
Victor Stinner1acc1292013-07-27 00:03:47 +02008851 Py_CLEAR(tmp);
Serhiy Storchakaf320be72018-01-25 10:49:40 +02008852 }
Victor Stinnerf8599272020-07-03 16:57:19 +02008853 if (_PyObject_LookupAttr(obj, state->iter, &tmp) < 0) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00008854 return 1;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008855 }
Serhiy Storchakaf320be72018-01-25 10:49:40 +02008856 if (tmp == NULL) {
8857 PyErr_SetString(PyExc_TypeError, "required field \"iter\" missing from comprehension");
8858 return 1;
8859 }
8860 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008861 int res;
Victor Stinnerf8599272020-07-03 16:57:19 +02008862 res = obj2ast_expr(state, tmp, &iter, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008863 if (res != 0) goto failed;
Victor Stinner1acc1292013-07-27 00:03:47 +02008864 Py_CLEAR(tmp);
Serhiy Storchakaf320be72018-01-25 10:49:40 +02008865 }
Victor Stinnerf8599272020-07-03 16:57:19 +02008866 if (_PyObject_LookupAttr(obj, state->ifs, &tmp) < 0) {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008867 return 1;
8868 }
Serhiy Storchakaf320be72018-01-25 10:49:40 +02008869 if (tmp == NULL) {
8870 PyErr_SetString(PyExc_TypeError, "required field \"ifs\" missing from comprehension");
8871 return 1;
8872 }
8873 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008874 int res;
8875 Py_ssize_t len;
8876 Py_ssize_t i;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008877 if (!PyList_Check(tmp)) {
Dino Viehlandac46eb42019-09-11 10:16:34 -07008878 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 +02008879 goto failed;
8880 }
8881 len = PyList_GET_SIZE(tmp);
Antoine Pitroud01d396e2013-10-12 22:52:43 +02008882 ifs = _Py_asdl_seq_new(len, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008883 if (ifs == NULL) goto failed;
8884 for (i = 0; i < len; i++) {
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07008885 expr_ty val;
Serhiy Storchaka43c97312019-09-10 13:02:30 +03008886 PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
8887 Py_INCREF(tmp2);
Victor Stinnerf8599272020-07-03 16:57:19 +02008888 res = obj2ast_expr(state, tmp2, &val, arena);
Serhiy Storchaka43c97312019-09-10 13:02:30 +03008889 Py_DECREF(tmp2);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008890 if (res != 0) goto failed;
Serhiy Storchakacf380602016-10-07 21:51:28 +03008891 if (len != PyList_GET_SIZE(tmp)) {
8892 PyErr_SetString(PyExc_RuntimeError, "comprehension field \"ifs\" changed size during iteration");
8893 goto failed;
8894 }
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07008895 asdl_seq_SET(ifs, i, val);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008896 }
Victor Stinner1acc1292013-07-27 00:03:47 +02008897 Py_CLEAR(tmp);
Serhiy Storchakaf320be72018-01-25 10:49:40 +02008898 }
Victor Stinnerf8599272020-07-03 16:57:19 +02008899 if (_PyObject_LookupAttr(obj, state->is_async, &tmp) < 0) {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008900 return 1;
8901 }
Serhiy Storchakaf320be72018-01-25 10:49:40 +02008902 if (tmp == NULL) {
8903 PyErr_SetString(PyExc_TypeError, "required field \"is_async\" missing from comprehension");
8904 return 1;
8905 }
8906 else {
Yury Selivanov52c4e7c2016-09-09 10:36:01 -07008907 int res;
Victor Stinnerf8599272020-07-03 16:57:19 +02008908 res = obj2ast_int(state, tmp, &is_async, arena);
Yury Selivanov52c4e7c2016-09-09 10:36:01 -07008909 if (res != 0) goto failed;
8910 Py_CLEAR(tmp);
Yury Selivanov52c4e7c2016-09-09 10:36:01 -07008911 }
8912 *out = comprehension(target, iter, ifs, is_async, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008913 return 0;
8914failed:
8915 Py_XDECREF(tmp);
8916 return 1;
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00008917}
8918
8919int
Victor Stinnerf8599272020-07-03 16:57:19 +02008920obj2ast_excepthandler(astmodulestate *state, PyObject* obj, excepthandler_ty*
8921 out, PyArena* arena)
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00008922{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008923 int isinstance;
Neal Norwitzad74aa82008-03-31 05:14:30 +00008924
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008925 PyObject *tmp = NULL;
Dino Viehlandac46eb42019-09-11 10:16:34 -07008926 PyObject *tp;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008927 int lineno;
8928 int col_offset;
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00008929 int end_lineno;
8930 int end_col_offset;
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00008931
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008932 if (obj == Py_None) {
8933 *out = NULL;
8934 return 0;
8935 }
Victor Stinnerf8599272020-07-03 16:57:19 +02008936 if (_PyObject_LookupAttr(obj, state->lineno, &tmp) < 0) {
Serhiy Storchakaf320be72018-01-25 10:49:40 +02008937 return 1;
8938 }
8939 if (tmp == NULL) {
8940 PyErr_SetString(PyExc_TypeError, "required field \"lineno\" missing from excepthandler");
8941 return 1;
8942 }
8943 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008944 int res;
Victor Stinnerf8599272020-07-03 16:57:19 +02008945 res = obj2ast_int(state, tmp, &lineno, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008946 if (res != 0) goto failed;
Victor Stinner1acc1292013-07-27 00:03:47 +02008947 Py_CLEAR(tmp);
Serhiy Storchakaf320be72018-01-25 10:49:40 +02008948 }
Victor Stinnerf8599272020-07-03 16:57:19 +02008949 if (_PyObject_LookupAttr(obj, state->col_offset, &tmp) < 0) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00008950 return 1;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008951 }
Serhiy Storchakaf320be72018-01-25 10:49:40 +02008952 if (tmp == NULL) {
8953 PyErr_SetString(PyExc_TypeError, "required field \"col_offset\" missing from excepthandler");
8954 return 1;
8955 }
8956 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008957 int res;
Victor Stinnerf8599272020-07-03 16:57:19 +02008958 res = obj2ast_int(state, tmp, &col_offset, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008959 if (res != 0) goto failed;
Victor Stinner1acc1292013-07-27 00:03:47 +02008960 Py_CLEAR(tmp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008961 }
Victor Stinnerf8599272020-07-03 16:57:19 +02008962 if (_PyObject_LookupAttr(obj, state->end_lineno, &tmp) < 0) {
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00008963 return 1;
8964 }
8965 if (tmp == NULL || tmp == Py_None) {
8966 Py_CLEAR(tmp);
8967 end_lineno = 0;
8968 }
8969 else {
8970 int res;
Victor Stinnerf8599272020-07-03 16:57:19 +02008971 res = obj2ast_int(state, tmp, &end_lineno, arena);
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00008972 if (res != 0) goto failed;
8973 Py_CLEAR(tmp);
8974 }
Victor Stinnerf8599272020-07-03 16:57:19 +02008975 if (_PyObject_LookupAttr(obj, state->end_col_offset, &tmp) < 0) {
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00008976 return 1;
8977 }
8978 if (tmp == NULL || tmp == Py_None) {
8979 Py_CLEAR(tmp);
8980 end_col_offset = 0;
8981 }
8982 else {
8983 int res;
Victor Stinnerf8599272020-07-03 16:57:19 +02008984 res = obj2ast_int(state, tmp, &end_col_offset, arena);
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00008985 if (res != 0) goto failed;
8986 Py_CLEAR(tmp);
8987 }
Victor Stinnerf8599272020-07-03 16:57:19 +02008988 tp = state->ExceptHandler_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07008989 isinstance = PyObject_IsInstance(obj, tp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008990 if (isinstance == -1) {
8991 return 1;
8992 }
8993 if (isinstance) {
8994 expr_ty type;
8995 identifier name;
8996 asdl_seq* body;
8997
Victor Stinnerf8599272020-07-03 16:57:19 +02008998 if (_PyObject_LookupAttr(obj, state->type, &tmp) < 0) {
Serhiy Storchakaf320be72018-01-25 10:49:40 +02008999 return 1;
9000 }
9001 if (tmp == NULL || tmp == Py_None) {
9002 Py_CLEAR(tmp);
9003 type = NULL;
9004 }
9005 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009006 int res;
Victor Stinnerf8599272020-07-03 16:57:19 +02009007 res = obj2ast_expr(state, tmp, &type, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009008 if (res != 0) goto failed;
Victor Stinner1acc1292013-07-27 00:03:47 +02009009 Py_CLEAR(tmp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009010 }
Victor Stinnerf8599272020-07-03 16:57:19 +02009011 if (_PyObject_LookupAttr(obj, state->name, &tmp) < 0) {
Serhiy Storchakaf320be72018-01-25 10:49:40 +02009012 return 1;
9013 }
9014 if (tmp == NULL || tmp == Py_None) {
9015 Py_CLEAR(tmp);
9016 name = NULL;
9017 }
9018 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009019 int res;
Victor Stinnerf8599272020-07-03 16:57:19 +02009020 res = obj2ast_identifier(state, tmp, &name, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009021 if (res != 0) goto failed;
Victor Stinner1acc1292013-07-27 00:03:47 +02009022 Py_CLEAR(tmp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009023 }
Victor Stinnerf8599272020-07-03 16:57:19 +02009024 if (_PyObject_LookupAttr(obj, state->body, &tmp) < 0) {
Serhiy Storchakaf320be72018-01-25 10:49:40 +02009025 return 1;
9026 }
9027 if (tmp == NULL) {
9028 PyErr_SetString(PyExc_TypeError, "required field \"body\" missing from ExceptHandler");
9029 return 1;
9030 }
9031 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009032 int res;
9033 Py_ssize_t len;
9034 Py_ssize_t i;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009035 if (!PyList_Check(tmp)) {
Dino Viehlandac46eb42019-09-11 10:16:34 -07009036 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 +02009037 goto failed;
9038 }
9039 len = PyList_GET_SIZE(tmp);
Antoine Pitroud01d396e2013-10-12 22:52:43 +02009040 body = _Py_asdl_seq_new(len, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009041 if (body == NULL) goto failed;
9042 for (i = 0; i < len; i++) {
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07009043 stmt_ty val;
Serhiy Storchaka43c97312019-09-10 13:02:30 +03009044 PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
9045 Py_INCREF(tmp2);
Victor Stinnerf8599272020-07-03 16:57:19 +02009046 res = obj2ast_stmt(state, tmp2, &val, arena);
Serhiy Storchaka43c97312019-09-10 13:02:30 +03009047 Py_DECREF(tmp2);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009048 if (res != 0) goto failed;
Serhiy Storchakacf380602016-10-07 21:51:28 +03009049 if (len != PyList_GET_SIZE(tmp)) {
9050 PyErr_SetString(PyExc_RuntimeError, "ExceptHandler field \"body\" changed size during iteration");
9051 goto failed;
9052 }
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07009053 asdl_seq_SET(body, i, val);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009054 }
Victor Stinner1acc1292013-07-27 00:03:47 +02009055 Py_CLEAR(tmp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009056 }
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00009057 *out = ExceptHandler(type, name, body, lineno, col_offset, end_lineno,
9058 end_col_offset, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009059 if (*out == NULL) goto failed;
9060 return 0;
9061 }
9062
9063 PyErr_Format(PyExc_TypeError, "expected some sort of excepthandler, but got %R", obj);
9064 failed:
9065 Py_XDECREF(tmp);
9066 return 1;
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00009067}
9068
9069int
Victor Stinnerf8599272020-07-03 16:57:19 +02009070obj2ast_arguments(astmodulestate *state, PyObject* obj, arguments_ty* out,
9071 PyArena* arena)
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00009072{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009073 PyObject* tmp = NULL;
Pablo Galindo8c77b8c2019-04-29 13:36:57 +01009074 asdl_seq* posonlyargs;
Miss Islington (bot)cf9a63c2019-07-14 16:49:52 -07009075 asdl_seq* args;
Victor Stinneree4b59c2013-07-27 00:01:35 +02009076 arg_ty vararg;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009077 asdl_seq* kwonlyargs;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009078 asdl_seq* kw_defaults;
Victor Stinneree4b59c2013-07-27 00:01:35 +02009079 arg_ty kwarg;
9080 asdl_seq* defaults;
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00009081
Victor Stinnerf8599272020-07-03 16:57:19 +02009082 if (_PyObject_LookupAttr(obj, state->posonlyargs, &tmp) < 0) {
Pablo Galindo8c77b8c2019-04-29 13:36:57 +01009083 return 1;
9084 }
9085 if (tmp == NULL) {
9086 PyErr_SetString(PyExc_TypeError, "required field \"posonlyargs\" missing from arguments");
9087 return 1;
9088 }
9089 else {
9090 int res;
9091 Py_ssize_t len;
9092 Py_ssize_t i;
9093 if (!PyList_Check(tmp)) {
Dino Viehlandac46eb42019-09-11 10:16:34 -07009094 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 +01009095 goto failed;
9096 }
9097 len = PyList_GET_SIZE(tmp);
9098 posonlyargs = _Py_asdl_seq_new(len, arena);
9099 if (posonlyargs == NULL) goto failed;
9100 for (i = 0; i < len; i++) {
9101 arg_ty val;
Serhiy Storchaka43c97312019-09-10 13:02:30 +03009102 PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
9103 Py_INCREF(tmp2);
Victor Stinnerf8599272020-07-03 16:57:19 +02009104 res = obj2ast_arg(state, tmp2, &val, arena);
Serhiy Storchaka43c97312019-09-10 13:02:30 +03009105 Py_DECREF(tmp2);
Pablo Galindo8c77b8c2019-04-29 13:36:57 +01009106 if (res != 0) goto failed;
9107 if (len != PyList_GET_SIZE(tmp)) {
9108 PyErr_SetString(PyExc_RuntimeError, "arguments field \"posonlyargs\" changed size during iteration");
9109 goto failed;
9110 }
9111 asdl_seq_SET(posonlyargs, i, val);
9112 }
9113 Py_CLEAR(tmp);
9114 }
Victor Stinnerf8599272020-07-03 16:57:19 +02009115 if (_PyObject_LookupAttr(obj, state->args, &tmp) < 0) {
Miss Islington (bot)cf9a63c2019-07-14 16:49:52 -07009116 return 1;
9117 }
9118 if (tmp == NULL) {
9119 PyErr_SetString(PyExc_TypeError, "required field \"args\" missing from arguments");
9120 return 1;
9121 }
9122 else {
9123 int res;
9124 Py_ssize_t len;
9125 Py_ssize_t i;
9126 if (!PyList_Check(tmp)) {
Dino Viehlandac46eb42019-09-11 10:16:34 -07009127 PyErr_Format(PyExc_TypeError, "arguments field \"args\" must be a list, not a %.200s", _PyType_Name(Py_TYPE(tmp)));
Miss Islington (bot)cf9a63c2019-07-14 16:49:52 -07009128 goto failed;
9129 }
9130 len = PyList_GET_SIZE(tmp);
9131 args = _Py_asdl_seq_new(len, arena);
9132 if (args == NULL) goto failed;
9133 for (i = 0; i < len; i++) {
9134 arg_ty val;
Serhiy Storchaka43c97312019-09-10 13:02:30 +03009135 PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
9136 Py_INCREF(tmp2);
Victor Stinnerf8599272020-07-03 16:57:19 +02009137 res = obj2ast_arg(state, tmp2, &val, arena);
Serhiy Storchaka43c97312019-09-10 13:02:30 +03009138 Py_DECREF(tmp2);
Miss Islington (bot)cf9a63c2019-07-14 16:49:52 -07009139 if (res != 0) goto failed;
9140 if (len != PyList_GET_SIZE(tmp)) {
9141 PyErr_SetString(PyExc_RuntimeError, "arguments field \"args\" changed size during iteration");
9142 goto failed;
9143 }
9144 asdl_seq_SET(args, i, val);
9145 }
9146 Py_CLEAR(tmp);
9147 }
Victor Stinnerf8599272020-07-03 16:57:19 +02009148 if (_PyObject_LookupAttr(obj, state->vararg, &tmp) < 0) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00009149 return 1;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009150 }
Serhiy Storchakaf320be72018-01-25 10:49:40 +02009151 if (tmp == NULL || tmp == Py_None) {
9152 Py_CLEAR(tmp);
9153 vararg = NULL;
9154 }
9155 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009156 int res;
Victor Stinnerf8599272020-07-03 16:57:19 +02009157 res = obj2ast_arg(state, tmp, &vararg, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009158 if (res != 0) goto failed;
Victor Stinner1acc1292013-07-27 00:03:47 +02009159 Py_CLEAR(tmp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009160 }
Victor Stinnerf8599272020-07-03 16:57:19 +02009161 if (_PyObject_LookupAttr(obj, state->kwonlyargs, &tmp) < 0) {
Serhiy Storchakaf320be72018-01-25 10:49:40 +02009162 return 1;
9163 }
9164 if (tmp == NULL) {
9165 PyErr_SetString(PyExc_TypeError, "required field \"kwonlyargs\" missing from arguments");
9166 return 1;
9167 }
9168 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009169 int res;
9170 Py_ssize_t len;
9171 Py_ssize_t i;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009172 if (!PyList_Check(tmp)) {
Dino Viehlandac46eb42019-09-11 10:16:34 -07009173 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 +02009174 goto failed;
9175 }
9176 len = PyList_GET_SIZE(tmp);
Antoine Pitroud01d396e2013-10-12 22:52:43 +02009177 kwonlyargs = _Py_asdl_seq_new(len, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009178 if (kwonlyargs == NULL) goto failed;
9179 for (i = 0; i < len; i++) {
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07009180 arg_ty val;
Serhiy Storchaka43c97312019-09-10 13:02:30 +03009181 PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
9182 Py_INCREF(tmp2);
Victor Stinnerf8599272020-07-03 16:57:19 +02009183 res = obj2ast_arg(state, tmp2, &val, arena);
Serhiy Storchaka43c97312019-09-10 13:02:30 +03009184 Py_DECREF(tmp2);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009185 if (res != 0) goto failed;
Serhiy Storchakacf380602016-10-07 21:51:28 +03009186 if (len != PyList_GET_SIZE(tmp)) {
9187 PyErr_SetString(PyExc_RuntimeError, "arguments field \"kwonlyargs\" changed size during iteration");
9188 goto failed;
9189 }
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07009190 asdl_seq_SET(kwonlyargs, i, val);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009191 }
Victor Stinner1acc1292013-07-27 00:03:47 +02009192 Py_CLEAR(tmp);
Serhiy Storchakaf320be72018-01-25 10:49:40 +02009193 }
Victor Stinnerf8599272020-07-03 16:57:19 +02009194 if (_PyObject_LookupAttr(obj, state->kw_defaults, &tmp) < 0) {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009195 return 1;
9196 }
Serhiy Storchakaf320be72018-01-25 10:49:40 +02009197 if (tmp == NULL) {
9198 PyErr_SetString(PyExc_TypeError, "required field \"kw_defaults\" missing from arguments");
9199 return 1;
9200 }
9201 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009202 int res;
9203 Py_ssize_t len;
9204 Py_ssize_t i;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009205 if (!PyList_Check(tmp)) {
Dino Viehlandac46eb42019-09-11 10:16:34 -07009206 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 +02009207 goto failed;
9208 }
9209 len = PyList_GET_SIZE(tmp);
Antoine Pitroud01d396e2013-10-12 22:52:43 +02009210 kw_defaults = _Py_asdl_seq_new(len, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009211 if (kw_defaults == NULL) goto failed;
9212 for (i = 0; i < len; i++) {
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07009213 expr_ty val;
Serhiy Storchaka43c97312019-09-10 13:02:30 +03009214 PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
9215 Py_INCREF(tmp2);
Victor Stinnerf8599272020-07-03 16:57:19 +02009216 res = obj2ast_expr(state, tmp2, &val, arena);
Serhiy Storchaka43c97312019-09-10 13:02:30 +03009217 Py_DECREF(tmp2);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009218 if (res != 0) goto failed;
Serhiy Storchakacf380602016-10-07 21:51:28 +03009219 if (len != PyList_GET_SIZE(tmp)) {
9220 PyErr_SetString(PyExc_RuntimeError, "arguments field \"kw_defaults\" changed size during iteration");
9221 goto failed;
9222 }
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07009223 asdl_seq_SET(kw_defaults, i, val);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009224 }
Victor Stinner1acc1292013-07-27 00:03:47 +02009225 Py_CLEAR(tmp);
Serhiy Storchakaf320be72018-01-25 10:49:40 +02009226 }
Victor Stinnerf8599272020-07-03 16:57:19 +02009227 if (_PyObject_LookupAttr(obj, state->kwarg, &tmp) < 0) {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009228 return 1;
9229 }
Serhiy Storchakaf320be72018-01-25 10:49:40 +02009230 if (tmp == NULL || tmp == Py_None) {
9231 Py_CLEAR(tmp);
9232 kwarg = NULL;
9233 }
9234 else {
Victor Stinneree4b59c2013-07-27 00:01:35 +02009235 int res;
Victor Stinnerf8599272020-07-03 16:57:19 +02009236 res = obj2ast_arg(state, tmp, &kwarg, arena);
Victor Stinneree4b59c2013-07-27 00:01:35 +02009237 if (res != 0) goto failed;
Victor Stinnerb3189902013-07-27 00:04:42 +02009238 Py_CLEAR(tmp);
Victor Stinneree4b59c2013-07-27 00:01:35 +02009239 }
Victor Stinnerf8599272020-07-03 16:57:19 +02009240 if (_PyObject_LookupAttr(obj, state->defaults, &tmp) < 0) {
Serhiy Storchakaf320be72018-01-25 10:49:40 +02009241 return 1;
9242 }
9243 if (tmp == NULL) {
9244 PyErr_SetString(PyExc_TypeError, "required field \"defaults\" missing from arguments");
9245 return 1;
9246 }
9247 else {
Victor Stinneree4b59c2013-07-27 00:01:35 +02009248 int res;
9249 Py_ssize_t len;
9250 Py_ssize_t i;
Victor Stinneree4b59c2013-07-27 00:01:35 +02009251 if (!PyList_Check(tmp)) {
Dino Viehlandac46eb42019-09-11 10:16:34 -07009252 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 +02009253 goto failed;
9254 }
9255 len = PyList_GET_SIZE(tmp);
Antoine Pitroud01d396e2013-10-12 22:52:43 +02009256 defaults = _Py_asdl_seq_new(len, arena);
Victor Stinneree4b59c2013-07-27 00:01:35 +02009257 if (defaults == NULL) goto failed;
9258 for (i = 0; i < len; i++) {
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07009259 expr_ty val;
Serhiy Storchaka43c97312019-09-10 13:02:30 +03009260 PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
9261 Py_INCREF(tmp2);
Victor Stinnerf8599272020-07-03 16:57:19 +02009262 res = obj2ast_expr(state, tmp2, &val, arena);
Serhiy Storchaka43c97312019-09-10 13:02:30 +03009263 Py_DECREF(tmp2);
Victor Stinneree4b59c2013-07-27 00:01:35 +02009264 if (res != 0) goto failed;
Serhiy Storchakacf380602016-10-07 21:51:28 +03009265 if (len != PyList_GET_SIZE(tmp)) {
9266 PyErr_SetString(PyExc_RuntimeError, "arguments field \"defaults\" changed size during iteration");
9267 goto failed;
9268 }
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07009269 asdl_seq_SET(defaults, i, val);
Victor Stinneree4b59c2013-07-27 00:01:35 +02009270 }
Victor Stinnerb3189902013-07-27 00:04:42 +02009271 Py_CLEAR(tmp);
Victor Stinneree4b59c2013-07-27 00:01:35 +02009272 }
Miss Islington (bot)cf9a63c2019-07-14 16:49:52 -07009273 *out = arguments(posonlyargs, args, vararg, kwonlyargs, kw_defaults, kwarg,
Pablo Galindo8c77b8c2019-04-29 13:36:57 +01009274 defaults, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009275 return 0;
9276failed:
9277 Py_XDECREF(tmp);
9278 return 1;
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00009279}
9280
9281int
Victor Stinnerf8599272020-07-03 16:57:19 +02009282obj2ast_arg(astmodulestate *state, PyObject* obj, arg_ty* out, PyArena* arena)
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00009283{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009284 PyObject* tmp = NULL;
9285 identifier arg;
9286 expr_ty annotation;
Guido van Rossumdcfcd142019-01-31 03:40:27 -08009287 string type_comment;
Victor Stinnerc106c682015-11-06 17:01:48 +01009288 int lineno;
9289 int col_offset;
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00009290 int end_lineno;
9291 int end_col_offset;
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00009292
Victor Stinnerf8599272020-07-03 16:57:19 +02009293 if (_PyObject_LookupAttr(obj, state->arg, &tmp) < 0) {
Serhiy Storchakaf320be72018-01-25 10:49:40 +02009294 return 1;
9295 }
9296 if (tmp == NULL) {
9297 PyErr_SetString(PyExc_TypeError, "required field \"arg\" missing from arg");
9298 return 1;
9299 }
9300 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009301 int res;
Victor Stinnerf8599272020-07-03 16:57:19 +02009302 res = obj2ast_identifier(state, tmp, &arg, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009303 if (res != 0) goto failed;
Victor Stinner1acc1292013-07-27 00:03:47 +02009304 Py_CLEAR(tmp);
Serhiy Storchakaf320be72018-01-25 10:49:40 +02009305 }
Victor Stinnerf8599272020-07-03 16:57:19 +02009306 if (_PyObject_LookupAttr(obj, state->annotation, &tmp) < 0) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00009307 return 1;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009308 }
Serhiy Storchakaf320be72018-01-25 10:49:40 +02009309 if (tmp == NULL || tmp == Py_None) {
9310 Py_CLEAR(tmp);
9311 annotation = NULL;
9312 }
9313 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009314 int res;
Victor Stinnerf8599272020-07-03 16:57:19 +02009315 res = obj2ast_expr(state, tmp, &annotation, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009316 if (res != 0) goto failed;
Victor Stinner1acc1292013-07-27 00:03:47 +02009317 Py_CLEAR(tmp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009318 }
Victor Stinnerf8599272020-07-03 16:57:19 +02009319 if (_PyObject_LookupAttr(obj, state->type_comment, &tmp) < 0) {
Guido van Rossumdcfcd142019-01-31 03:40:27 -08009320 return 1;
9321 }
9322 if (tmp == NULL || tmp == Py_None) {
9323 Py_CLEAR(tmp);
9324 type_comment = NULL;
9325 }
9326 else {
9327 int res;
Victor Stinnerf8599272020-07-03 16:57:19 +02009328 res = obj2ast_string(state, tmp, &type_comment, arena);
Guido van Rossumdcfcd142019-01-31 03:40:27 -08009329 if (res != 0) goto failed;
9330 Py_CLEAR(tmp);
9331 }
Victor Stinnerf8599272020-07-03 16:57:19 +02009332 if (_PyObject_LookupAttr(obj, state->lineno, &tmp) < 0) {
Serhiy Storchakaf320be72018-01-25 10:49:40 +02009333 return 1;
9334 }
9335 if (tmp == NULL) {
9336 PyErr_SetString(PyExc_TypeError, "required field \"lineno\" missing from arg");
9337 return 1;
9338 }
9339 else {
Victor Stinnerc106c682015-11-06 17:01:48 +01009340 int res;
Victor Stinnerf8599272020-07-03 16:57:19 +02009341 res = obj2ast_int(state, tmp, &lineno, arena);
Victor Stinnerc106c682015-11-06 17:01:48 +01009342 if (res != 0) goto failed;
9343 Py_CLEAR(tmp);
Serhiy Storchakaf320be72018-01-25 10:49:40 +02009344 }
Victor Stinnerf8599272020-07-03 16:57:19 +02009345 if (_PyObject_LookupAttr(obj, state->col_offset, &tmp) < 0) {
Victor Stinnerc106c682015-11-06 17:01:48 +01009346 return 1;
9347 }
Serhiy Storchakaf320be72018-01-25 10:49:40 +02009348 if (tmp == NULL) {
9349 PyErr_SetString(PyExc_TypeError, "required field \"col_offset\" missing from arg");
9350 return 1;
9351 }
9352 else {
Victor Stinnerc106c682015-11-06 17:01:48 +01009353 int res;
Victor Stinnerf8599272020-07-03 16:57:19 +02009354 res = obj2ast_int(state, tmp, &col_offset, arena);
Victor Stinnerc106c682015-11-06 17:01:48 +01009355 if (res != 0) goto failed;
9356 Py_CLEAR(tmp);
Victor Stinnerc106c682015-11-06 17:01:48 +01009357 }
Victor Stinnerf8599272020-07-03 16:57:19 +02009358 if (_PyObject_LookupAttr(obj, state->end_lineno, &tmp) < 0) {
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00009359 return 1;
9360 }
9361 if (tmp == NULL || tmp == Py_None) {
9362 Py_CLEAR(tmp);
9363 end_lineno = 0;
9364 }
9365 else {
9366 int res;
Victor Stinnerf8599272020-07-03 16:57:19 +02009367 res = obj2ast_int(state, tmp, &end_lineno, arena);
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00009368 if (res != 0) goto failed;
9369 Py_CLEAR(tmp);
9370 }
Victor Stinnerf8599272020-07-03 16:57:19 +02009371 if (_PyObject_LookupAttr(obj, state->end_col_offset, &tmp) < 0) {
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00009372 return 1;
9373 }
9374 if (tmp == NULL || tmp == Py_None) {
9375 Py_CLEAR(tmp);
9376 end_col_offset = 0;
9377 }
9378 else {
9379 int res;
Victor Stinnerf8599272020-07-03 16:57:19 +02009380 res = obj2ast_int(state, tmp, &end_col_offset, arena);
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00009381 if (res != 0) goto failed;
9382 Py_CLEAR(tmp);
9383 }
Guido van Rossumdcfcd142019-01-31 03:40:27 -08009384 *out = arg(arg, annotation, type_comment, lineno, col_offset, end_lineno,
9385 end_col_offset, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009386 return 0;
9387failed:
9388 Py_XDECREF(tmp);
9389 return 1;
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00009390}
9391
9392int
Victor Stinnerf8599272020-07-03 16:57:19 +02009393obj2ast_keyword(astmodulestate *state, PyObject* obj, keyword_ty* out, PyArena*
9394 arena)
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00009395{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009396 PyObject* tmp = NULL;
9397 identifier arg;
9398 expr_ty value;
Pablo Galindo168660b2020-04-02 00:47:39 +01009399 int lineno;
9400 int col_offset;
9401 int end_lineno;
9402 int end_col_offset;
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00009403
Victor Stinnerf8599272020-07-03 16:57:19 +02009404 if (_PyObject_LookupAttr(obj, state->arg, &tmp) < 0) {
Serhiy Storchakaf320be72018-01-25 10:49:40 +02009405 return 1;
9406 }
9407 if (tmp == NULL || tmp == Py_None) {
9408 Py_CLEAR(tmp);
9409 arg = NULL;
9410 }
9411 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009412 int res;
Victor Stinnerf8599272020-07-03 16:57:19 +02009413 res = obj2ast_identifier(state, tmp, &arg, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009414 if (res != 0) goto failed;
Victor Stinner1acc1292013-07-27 00:03:47 +02009415 Py_CLEAR(tmp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009416 }
Victor Stinnerf8599272020-07-03 16:57:19 +02009417 if (_PyObject_LookupAttr(obj, state->value, &tmp) < 0) {
Serhiy Storchakaf320be72018-01-25 10:49:40 +02009418 return 1;
9419 }
9420 if (tmp == NULL) {
9421 PyErr_SetString(PyExc_TypeError, "required field \"value\" missing from keyword");
9422 return 1;
9423 }
9424 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009425 int res;
Victor Stinnerf8599272020-07-03 16:57:19 +02009426 res = obj2ast_expr(state, tmp, &value, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009427 if (res != 0) goto failed;
Victor Stinner1acc1292013-07-27 00:03:47 +02009428 Py_CLEAR(tmp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009429 }
Victor Stinnerf8599272020-07-03 16:57:19 +02009430 if (_PyObject_LookupAttr(obj, state->lineno, &tmp) < 0) {
Pablo Galindo168660b2020-04-02 00:47:39 +01009431 return 1;
9432 }
9433 if (tmp == NULL) {
9434 PyErr_SetString(PyExc_TypeError, "required field \"lineno\" missing from keyword");
9435 return 1;
9436 }
9437 else {
9438 int res;
Victor Stinnerf8599272020-07-03 16:57:19 +02009439 res = obj2ast_int(state, tmp, &lineno, arena);
Pablo Galindo168660b2020-04-02 00:47:39 +01009440 if (res != 0) goto failed;
9441 Py_CLEAR(tmp);
9442 }
Victor Stinnerf8599272020-07-03 16:57:19 +02009443 if (_PyObject_LookupAttr(obj, state->col_offset, &tmp) < 0) {
Pablo Galindo168660b2020-04-02 00:47:39 +01009444 return 1;
9445 }
9446 if (tmp == NULL) {
9447 PyErr_SetString(PyExc_TypeError, "required field \"col_offset\" missing from keyword");
9448 return 1;
9449 }
9450 else {
9451 int res;
Victor Stinnerf8599272020-07-03 16:57:19 +02009452 res = obj2ast_int(state, tmp, &col_offset, arena);
Pablo Galindo168660b2020-04-02 00:47:39 +01009453 if (res != 0) goto failed;
9454 Py_CLEAR(tmp);
9455 }
Victor Stinnerf8599272020-07-03 16:57:19 +02009456 if (_PyObject_LookupAttr(obj, state->end_lineno, &tmp) < 0) {
Pablo Galindo168660b2020-04-02 00:47:39 +01009457 return 1;
9458 }
9459 if (tmp == NULL || tmp == Py_None) {
9460 Py_CLEAR(tmp);
9461 end_lineno = 0;
9462 }
9463 else {
9464 int res;
Victor Stinnerf8599272020-07-03 16:57:19 +02009465 res = obj2ast_int(state, tmp, &end_lineno, arena);
Pablo Galindo168660b2020-04-02 00:47:39 +01009466 if (res != 0) goto failed;
9467 Py_CLEAR(tmp);
9468 }
Victor Stinnerf8599272020-07-03 16:57:19 +02009469 if (_PyObject_LookupAttr(obj, state->end_col_offset, &tmp) < 0) {
Pablo Galindo168660b2020-04-02 00:47:39 +01009470 return 1;
9471 }
9472 if (tmp == NULL || tmp == Py_None) {
9473 Py_CLEAR(tmp);
9474 end_col_offset = 0;
9475 }
9476 else {
9477 int res;
Victor Stinnerf8599272020-07-03 16:57:19 +02009478 res = obj2ast_int(state, tmp, &end_col_offset, arena);
Pablo Galindo168660b2020-04-02 00:47:39 +01009479 if (res != 0) goto failed;
9480 Py_CLEAR(tmp);
9481 }
9482 *out = keyword(arg, value, lineno, col_offset, end_lineno, end_col_offset,
9483 arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009484 return 0;
9485failed:
9486 Py_XDECREF(tmp);
9487 return 1;
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00009488}
9489
9490int
Victor Stinnerf8599272020-07-03 16:57:19 +02009491obj2ast_alias(astmodulestate *state, PyObject* obj, alias_ty* out, PyArena*
9492 arena)
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00009493{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009494 PyObject* tmp = NULL;
9495 identifier name;
9496 identifier asname;
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00009497
Victor Stinnerf8599272020-07-03 16:57:19 +02009498 if (_PyObject_LookupAttr(obj, state->name, &tmp) < 0) {
Serhiy Storchakaf320be72018-01-25 10:49:40 +02009499 return 1;
9500 }
9501 if (tmp == NULL) {
9502 PyErr_SetString(PyExc_TypeError, "required field \"name\" missing from alias");
9503 return 1;
9504 }
9505 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009506 int res;
Victor Stinnerf8599272020-07-03 16:57:19 +02009507 res = obj2ast_identifier(state, tmp, &name, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009508 if (res != 0) goto failed;
Victor Stinner1acc1292013-07-27 00:03:47 +02009509 Py_CLEAR(tmp);
Serhiy Storchakaf320be72018-01-25 10:49:40 +02009510 }
Victor Stinnerf8599272020-07-03 16:57:19 +02009511 if (_PyObject_LookupAttr(obj, state->asname, &tmp) < 0) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00009512 return 1;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009513 }
Serhiy Storchakaf320be72018-01-25 10:49:40 +02009514 if (tmp == NULL || tmp == Py_None) {
9515 Py_CLEAR(tmp);
9516 asname = NULL;
9517 }
9518 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009519 int res;
Victor Stinnerf8599272020-07-03 16:57:19 +02009520 res = obj2ast_identifier(state, tmp, &asname, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009521 if (res != 0) goto failed;
Victor Stinner1acc1292013-07-27 00:03:47 +02009522 Py_CLEAR(tmp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009523 }
9524 *out = alias(name, asname, arena);
9525 return 0;
9526failed:
9527 Py_XDECREF(tmp);
9528 return 1;
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00009529}
9530
Benjamin Petersonbf1bbc12011-05-27 13:58:08 -05009531int
Victor Stinnerf8599272020-07-03 16:57:19 +02009532obj2ast_withitem(astmodulestate *state, PyObject* obj, withitem_ty* out,
9533 PyArena* arena)
Benjamin Petersonbf1bbc12011-05-27 13:58:08 -05009534{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009535 PyObject* tmp = NULL;
9536 expr_ty context_expr;
9537 expr_ty optional_vars;
Benjamin Petersonbf1bbc12011-05-27 13:58:08 -05009538
Victor Stinnerf8599272020-07-03 16:57:19 +02009539 if (_PyObject_LookupAttr(obj, state->context_expr, &tmp) < 0) {
Serhiy Storchakaf320be72018-01-25 10:49:40 +02009540 return 1;
9541 }
9542 if (tmp == NULL) {
9543 PyErr_SetString(PyExc_TypeError, "required field \"context_expr\" missing from withitem");
9544 return 1;
9545 }
9546 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009547 int res;
Victor Stinnerf8599272020-07-03 16:57:19 +02009548 res = obj2ast_expr(state, tmp, &context_expr, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009549 if (res != 0) goto failed;
Victor Stinner1acc1292013-07-27 00:03:47 +02009550 Py_CLEAR(tmp);
Serhiy Storchakaf320be72018-01-25 10:49:40 +02009551 }
Victor Stinnerf8599272020-07-03 16:57:19 +02009552 if (_PyObject_LookupAttr(obj, state->optional_vars, &tmp) < 0) {
Benjamin Petersonbf1bbc12011-05-27 13:58:08 -05009553 return 1;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009554 }
Serhiy Storchakaf320be72018-01-25 10:49:40 +02009555 if (tmp == NULL || tmp == Py_None) {
9556 Py_CLEAR(tmp);
9557 optional_vars = NULL;
9558 }
9559 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009560 int res;
Victor Stinnerf8599272020-07-03 16:57:19 +02009561 res = obj2ast_expr(state, tmp, &optional_vars, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009562 if (res != 0) goto failed;
Victor Stinner1acc1292013-07-27 00:03:47 +02009563 Py_CLEAR(tmp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009564 }
9565 *out = withitem(context_expr, optional_vars, arena);
9566 return 0;
9567failed:
9568 Py_XDECREF(tmp);
9569 return 1;
Benjamin Petersonbf1bbc12011-05-27 13:58:08 -05009570}
9571
Guido van Rossumdcfcd142019-01-31 03:40:27 -08009572int
Victor Stinnerf8599272020-07-03 16:57:19 +02009573obj2ast_type_ignore(astmodulestate *state, PyObject* obj, type_ignore_ty* out,
9574 PyArena* arena)
Guido van Rossumdcfcd142019-01-31 03:40:27 -08009575{
9576 int isinstance;
9577
9578 PyObject *tmp = NULL;
Dino Viehlandac46eb42019-09-11 10:16:34 -07009579 PyObject *tp;
Guido van Rossumdcfcd142019-01-31 03:40:27 -08009580
9581 if (obj == Py_None) {
9582 *out = NULL;
9583 return 0;
9584 }
Victor Stinnerf8599272020-07-03 16:57:19 +02009585 tp = state->TypeIgnore_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07009586 isinstance = PyObject_IsInstance(obj, tp);
Guido van Rossumdcfcd142019-01-31 03:40:27 -08009587 if (isinstance == -1) {
9588 return 1;
9589 }
9590 if (isinstance) {
9591 int lineno;
Michael J. Sullivan933e1502019-05-22 07:54:20 -07009592 string tag;
Guido van Rossumdcfcd142019-01-31 03:40:27 -08009593
Victor Stinnerf8599272020-07-03 16:57:19 +02009594 if (_PyObject_LookupAttr(obj, state->lineno, &tmp) < 0) {
Guido van Rossumdcfcd142019-01-31 03:40:27 -08009595 return 1;
9596 }
9597 if (tmp == NULL) {
9598 PyErr_SetString(PyExc_TypeError, "required field \"lineno\" missing from TypeIgnore");
9599 return 1;
9600 }
9601 else {
9602 int res;
Victor Stinnerf8599272020-07-03 16:57:19 +02009603 res = obj2ast_int(state, tmp, &lineno, arena);
Guido van Rossumdcfcd142019-01-31 03:40:27 -08009604 if (res != 0) goto failed;
9605 Py_CLEAR(tmp);
9606 }
Victor Stinnerf8599272020-07-03 16:57:19 +02009607 if (_PyObject_LookupAttr(obj, state->tag, &tmp) < 0) {
Michael J. Sullivan933e1502019-05-22 07:54:20 -07009608 return 1;
9609 }
9610 if (tmp == NULL) {
9611 PyErr_SetString(PyExc_TypeError, "required field \"tag\" missing from TypeIgnore");
9612 return 1;
9613 }
9614 else {
9615 int res;
Victor Stinnerf8599272020-07-03 16:57:19 +02009616 res = obj2ast_string(state, tmp, &tag, arena);
Michael J. Sullivan933e1502019-05-22 07:54:20 -07009617 if (res != 0) goto failed;
9618 Py_CLEAR(tmp);
9619 }
9620 *out = TypeIgnore(lineno, tag, arena);
Guido van Rossumdcfcd142019-01-31 03:40:27 -08009621 if (*out == NULL) goto failed;
9622 return 0;
9623 }
9624
9625 PyErr_Format(PyExc_TypeError, "expected some sort of type_ignore, but got %R", obj);
9626 failed:
9627 Py_XDECREF(tmp);
9628 return 1;
9629}
9630
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00009631
Victor Stinnerd2bea262020-08-10 15:55:54 +02009632static int
9633astmodule_exec(PyObject *m)
Martin v. Löwis577b5b92006-02-27 15:23:19 +00009634{
Victor Stinnerf8599272020-07-03 16:57:19 +02009635 astmodulestate *state = get_ast_state(m);
9636
Victor Stinnerd2bea262020-08-10 15:55:54 +02009637 if (!init_types(state)) {
9638 return -1;
Brandt Bucherd2f96672020-02-06 06:45:46 -08009639 }
Victor Stinnerf8599272020-07-03 16:57:19 +02009640 if (PyModule_AddObject(m, "AST", state->AST_type) < 0) {
Victor Stinnerd2bea262020-08-10 15:55:54 +02009641 return -1;
Victor Stinnerf8599272020-07-03 16:57:19 +02009642 }
9643 Py_INCREF(state->AST_type);
Brandt Bucherd2f96672020-02-06 06:45:46 -08009644 if (PyModule_AddIntMacro(m, PyCF_ALLOW_TOP_LEVEL_AWAIT) < 0) {
Victor Stinnerd2bea262020-08-10 15:55:54 +02009645 return -1;
Brandt Bucherd2f96672020-02-06 06:45:46 -08009646 }
9647 if (PyModule_AddIntMacro(m, PyCF_ONLY_AST) < 0) {
Victor Stinnerd2bea262020-08-10 15:55:54 +02009648 return -1;
Brandt Bucherd2f96672020-02-06 06:45:46 -08009649 }
9650 if (PyModule_AddIntMacro(m, PyCF_TYPE_COMMENTS) < 0) {
Victor Stinnerd2bea262020-08-10 15:55:54 +02009651 return -1;
Brandt Bucherd2f96672020-02-06 06:45:46 -08009652 }
Victor Stinnerf8599272020-07-03 16:57:19 +02009653 if (PyModule_AddObject(m, "mod", state->mod_type) < 0) {
Victor Stinnerd2bea262020-08-10 15:55:54 +02009654 return -1;
Brandt Bucherd2f96672020-02-06 06:45:46 -08009655 }
Victor Stinnerf8599272020-07-03 16:57:19 +02009656 Py_INCREF(state->mod_type);
9657 if (PyModule_AddObject(m, "Module", state->Module_type) < 0) {
Victor Stinnerd2bea262020-08-10 15:55:54 +02009658 return -1;
Brandt Bucherd2f96672020-02-06 06:45:46 -08009659 }
Victor Stinnerf8599272020-07-03 16:57:19 +02009660 Py_INCREF(state->Module_type);
9661 if (PyModule_AddObject(m, "Interactive", state->Interactive_type) < 0) {
Victor Stinnerd2bea262020-08-10 15:55:54 +02009662 return -1;
Brandt Bucherd2f96672020-02-06 06:45:46 -08009663 }
Victor Stinnerf8599272020-07-03 16:57:19 +02009664 Py_INCREF(state->Interactive_type);
9665 if (PyModule_AddObject(m, "Expression", state->Expression_type) < 0) {
Victor Stinnerd2bea262020-08-10 15:55:54 +02009666 return -1;
Brandt Bucherd2f96672020-02-06 06:45:46 -08009667 }
Victor Stinnerf8599272020-07-03 16:57:19 +02009668 Py_INCREF(state->Expression_type);
9669 if (PyModule_AddObject(m, "FunctionType", state->FunctionType_type) < 0) {
Victor Stinnerd2bea262020-08-10 15:55:54 +02009670 return -1;
Brandt Bucherd2f96672020-02-06 06:45:46 -08009671 }
Victor Stinnerf8599272020-07-03 16:57:19 +02009672 Py_INCREF(state->FunctionType_type);
9673 if (PyModule_AddObject(m, "stmt", state->stmt_type) < 0) {
Victor Stinnerd2bea262020-08-10 15:55:54 +02009674 return -1;
Brandt Bucherd2f96672020-02-06 06:45:46 -08009675 }
Victor Stinnerf8599272020-07-03 16:57:19 +02009676 Py_INCREF(state->stmt_type);
9677 if (PyModule_AddObject(m, "FunctionDef", state->FunctionDef_type) < 0) {
Victor Stinnerd2bea262020-08-10 15:55:54 +02009678 return -1;
Brandt Bucherd2f96672020-02-06 06:45:46 -08009679 }
Victor Stinnerf8599272020-07-03 16:57:19 +02009680 Py_INCREF(state->FunctionDef_type);
9681 if (PyModule_AddObject(m, "AsyncFunctionDef", state->AsyncFunctionDef_type)
Brandt Bucherd2f96672020-02-06 06:45:46 -08009682 < 0) {
Victor Stinnerd2bea262020-08-10 15:55:54 +02009683 return -1;
Brandt Bucherd2f96672020-02-06 06:45:46 -08009684 }
Victor Stinnerf8599272020-07-03 16:57:19 +02009685 Py_INCREF(state->AsyncFunctionDef_type);
9686 if (PyModule_AddObject(m, "ClassDef", state->ClassDef_type) < 0) {
Victor Stinnerd2bea262020-08-10 15:55:54 +02009687 return -1;
Victor Stinnerf8599272020-07-03 16:57:19 +02009688 }
9689 Py_INCREF(state->ClassDef_type);
9690 if (PyModule_AddObject(m, "Return", state->Return_type) < 0) {
Victor Stinnerd2bea262020-08-10 15:55:54 +02009691 return -1;
Victor Stinnerf8599272020-07-03 16:57:19 +02009692 }
9693 Py_INCREF(state->Return_type);
9694 if (PyModule_AddObject(m, "Delete", state->Delete_type) < 0) {
Victor Stinnerd2bea262020-08-10 15:55:54 +02009695 return -1;
Victor Stinnerf8599272020-07-03 16:57:19 +02009696 }
9697 Py_INCREF(state->Delete_type);
9698 if (PyModule_AddObject(m, "Assign", state->Assign_type) < 0) {
Victor Stinnerd2bea262020-08-10 15:55:54 +02009699 return -1;
Victor Stinnerf8599272020-07-03 16:57:19 +02009700 }
9701 Py_INCREF(state->Assign_type);
9702 if (PyModule_AddObject(m, "AugAssign", state->AugAssign_type) < 0) {
Victor Stinnerd2bea262020-08-10 15:55:54 +02009703 return -1;
Victor Stinnerf8599272020-07-03 16:57:19 +02009704 }
9705 Py_INCREF(state->AugAssign_type);
9706 if (PyModule_AddObject(m, "AnnAssign", state->AnnAssign_type) < 0) {
Victor Stinnerd2bea262020-08-10 15:55:54 +02009707 return -1;
Victor Stinnerf8599272020-07-03 16:57:19 +02009708 }
9709 Py_INCREF(state->AnnAssign_type);
9710 if (PyModule_AddObject(m, "For", state->For_type) < 0) {
Victor Stinnerd2bea262020-08-10 15:55:54 +02009711 return -1;
Victor Stinnerf8599272020-07-03 16:57:19 +02009712 }
9713 Py_INCREF(state->For_type);
9714 if (PyModule_AddObject(m, "AsyncFor", state->AsyncFor_type) < 0) {
Victor Stinnerd2bea262020-08-10 15:55:54 +02009715 return -1;
Victor Stinnerf8599272020-07-03 16:57:19 +02009716 }
9717 Py_INCREF(state->AsyncFor_type);
9718 if (PyModule_AddObject(m, "While", state->While_type) < 0) {
Victor Stinnerd2bea262020-08-10 15:55:54 +02009719 return -1;
Victor Stinnerf8599272020-07-03 16:57:19 +02009720 }
9721 Py_INCREF(state->While_type);
9722 if (PyModule_AddObject(m, "If", state->If_type) < 0) {
Victor Stinnerd2bea262020-08-10 15:55:54 +02009723 return -1;
Victor Stinnerf8599272020-07-03 16:57:19 +02009724 }
9725 Py_INCREF(state->If_type);
9726 if (PyModule_AddObject(m, "With", state->With_type) < 0) {
Victor Stinnerd2bea262020-08-10 15:55:54 +02009727 return -1;
Victor Stinnerf8599272020-07-03 16:57:19 +02009728 }
9729 Py_INCREF(state->With_type);
9730 if (PyModule_AddObject(m, "AsyncWith", state->AsyncWith_type) < 0) {
Victor Stinnerd2bea262020-08-10 15:55:54 +02009731 return -1;
Victor Stinnerf8599272020-07-03 16:57:19 +02009732 }
9733 Py_INCREF(state->AsyncWith_type);
9734 if (PyModule_AddObject(m, "Raise", state->Raise_type) < 0) {
Victor Stinnerd2bea262020-08-10 15:55:54 +02009735 return -1;
Victor Stinnerf8599272020-07-03 16:57:19 +02009736 }
9737 Py_INCREF(state->Raise_type);
9738 if (PyModule_AddObject(m, "Try", state->Try_type) < 0) {
Victor Stinnerd2bea262020-08-10 15:55:54 +02009739 return -1;
Victor Stinnerf8599272020-07-03 16:57:19 +02009740 }
9741 Py_INCREF(state->Try_type);
9742 if (PyModule_AddObject(m, "Assert", state->Assert_type) < 0) {
Victor Stinnerd2bea262020-08-10 15:55:54 +02009743 return -1;
Victor Stinnerf8599272020-07-03 16:57:19 +02009744 }
9745 Py_INCREF(state->Assert_type);
9746 if (PyModule_AddObject(m, "Import", state->Import_type) < 0) {
Victor Stinnerd2bea262020-08-10 15:55:54 +02009747 return -1;
Victor Stinnerf8599272020-07-03 16:57:19 +02009748 }
9749 Py_INCREF(state->Import_type);
9750 if (PyModule_AddObject(m, "ImportFrom", state->ImportFrom_type) < 0) {
Victor Stinnerd2bea262020-08-10 15:55:54 +02009751 return -1;
Victor Stinnerf8599272020-07-03 16:57:19 +02009752 }
9753 Py_INCREF(state->ImportFrom_type);
9754 if (PyModule_AddObject(m, "Global", state->Global_type) < 0) {
Victor Stinnerd2bea262020-08-10 15:55:54 +02009755 return -1;
Victor Stinnerf8599272020-07-03 16:57:19 +02009756 }
9757 Py_INCREF(state->Global_type);
9758 if (PyModule_AddObject(m, "Nonlocal", state->Nonlocal_type) < 0) {
Victor Stinnerd2bea262020-08-10 15:55:54 +02009759 return -1;
Victor Stinnerf8599272020-07-03 16:57:19 +02009760 }
9761 Py_INCREF(state->Nonlocal_type);
9762 if (PyModule_AddObject(m, "Expr", state->Expr_type) < 0) {
Victor Stinnerd2bea262020-08-10 15:55:54 +02009763 return -1;
Victor Stinnerf8599272020-07-03 16:57:19 +02009764 }
9765 Py_INCREF(state->Expr_type);
9766 if (PyModule_AddObject(m, "Pass", state->Pass_type) < 0) {
Victor Stinnerd2bea262020-08-10 15:55:54 +02009767 return -1;
Victor Stinnerf8599272020-07-03 16:57:19 +02009768 }
9769 Py_INCREF(state->Pass_type);
9770 if (PyModule_AddObject(m, "Break", state->Break_type) < 0) {
Victor Stinnerd2bea262020-08-10 15:55:54 +02009771 return -1;
Victor Stinnerf8599272020-07-03 16:57:19 +02009772 }
9773 Py_INCREF(state->Break_type);
9774 if (PyModule_AddObject(m, "Continue", state->Continue_type) < 0) {
Victor Stinnerd2bea262020-08-10 15:55:54 +02009775 return -1;
Victor Stinnerf8599272020-07-03 16:57:19 +02009776 }
9777 Py_INCREF(state->Continue_type);
9778 if (PyModule_AddObject(m, "expr", state->expr_type) < 0) {
Victor Stinnerd2bea262020-08-10 15:55:54 +02009779 return -1;
Victor Stinnerf8599272020-07-03 16:57:19 +02009780 }
9781 Py_INCREF(state->expr_type);
9782 if (PyModule_AddObject(m, "BoolOp", state->BoolOp_type) < 0) {
Victor Stinnerd2bea262020-08-10 15:55:54 +02009783 return -1;
Victor Stinnerf8599272020-07-03 16:57:19 +02009784 }
9785 Py_INCREF(state->BoolOp_type);
9786 if (PyModule_AddObject(m, "NamedExpr", state->NamedExpr_type) < 0) {
Victor Stinnerd2bea262020-08-10 15:55:54 +02009787 return -1;
Victor Stinnerf8599272020-07-03 16:57:19 +02009788 }
9789 Py_INCREF(state->NamedExpr_type);
9790 if (PyModule_AddObject(m, "BinOp", state->BinOp_type) < 0) {
Victor Stinnerd2bea262020-08-10 15:55:54 +02009791 return -1;
Victor Stinnerf8599272020-07-03 16:57:19 +02009792 }
9793 Py_INCREF(state->BinOp_type);
9794 if (PyModule_AddObject(m, "UnaryOp", state->UnaryOp_type) < 0) {
Victor Stinnerd2bea262020-08-10 15:55:54 +02009795 return -1;
Victor Stinnerf8599272020-07-03 16:57:19 +02009796 }
9797 Py_INCREF(state->UnaryOp_type);
9798 if (PyModule_AddObject(m, "Lambda", state->Lambda_type) < 0) {
Victor Stinnerd2bea262020-08-10 15:55:54 +02009799 return -1;
Victor Stinnerf8599272020-07-03 16:57:19 +02009800 }
9801 Py_INCREF(state->Lambda_type);
9802 if (PyModule_AddObject(m, "IfExp", state->IfExp_type) < 0) {
Victor Stinnerd2bea262020-08-10 15:55:54 +02009803 return -1;
Victor Stinnerf8599272020-07-03 16:57:19 +02009804 }
9805 Py_INCREF(state->IfExp_type);
9806 if (PyModule_AddObject(m, "Dict", state->Dict_type) < 0) {
Victor Stinnerd2bea262020-08-10 15:55:54 +02009807 return -1;
Victor Stinnerf8599272020-07-03 16:57:19 +02009808 }
9809 Py_INCREF(state->Dict_type);
9810 if (PyModule_AddObject(m, "Set", state->Set_type) < 0) {
Victor Stinnerd2bea262020-08-10 15:55:54 +02009811 return -1;
Victor Stinnerf8599272020-07-03 16:57:19 +02009812 }
9813 Py_INCREF(state->Set_type);
9814 if (PyModule_AddObject(m, "ListComp", state->ListComp_type) < 0) {
Victor Stinnerd2bea262020-08-10 15:55:54 +02009815 return -1;
Victor Stinnerf8599272020-07-03 16:57:19 +02009816 }
9817 Py_INCREF(state->ListComp_type);
9818 if (PyModule_AddObject(m, "SetComp", state->SetComp_type) < 0) {
Victor Stinnerd2bea262020-08-10 15:55:54 +02009819 return -1;
Victor Stinnerf8599272020-07-03 16:57:19 +02009820 }
9821 Py_INCREF(state->SetComp_type);
9822 if (PyModule_AddObject(m, "DictComp", state->DictComp_type) < 0) {
Victor Stinnerd2bea262020-08-10 15:55:54 +02009823 return -1;
Victor Stinnerf8599272020-07-03 16:57:19 +02009824 }
9825 Py_INCREF(state->DictComp_type);
9826 if (PyModule_AddObject(m, "GeneratorExp", state->GeneratorExp_type) < 0) {
Victor Stinnerd2bea262020-08-10 15:55:54 +02009827 return -1;
Victor Stinnerf8599272020-07-03 16:57:19 +02009828 }
9829 Py_INCREF(state->GeneratorExp_type);
9830 if (PyModule_AddObject(m, "Await", state->Await_type) < 0) {
Victor Stinnerd2bea262020-08-10 15:55:54 +02009831 return -1;
Victor Stinnerf8599272020-07-03 16:57:19 +02009832 }
9833 Py_INCREF(state->Await_type);
9834 if (PyModule_AddObject(m, "Yield", state->Yield_type) < 0) {
Victor Stinnerd2bea262020-08-10 15:55:54 +02009835 return -1;
Victor Stinnerf8599272020-07-03 16:57:19 +02009836 }
9837 Py_INCREF(state->Yield_type);
9838 if (PyModule_AddObject(m, "YieldFrom", state->YieldFrom_type) < 0) {
Victor Stinnerd2bea262020-08-10 15:55:54 +02009839 return -1;
Victor Stinnerf8599272020-07-03 16:57:19 +02009840 }
9841 Py_INCREF(state->YieldFrom_type);
9842 if (PyModule_AddObject(m, "Compare", state->Compare_type) < 0) {
Victor Stinnerd2bea262020-08-10 15:55:54 +02009843 return -1;
Victor Stinnerf8599272020-07-03 16:57:19 +02009844 }
9845 Py_INCREF(state->Compare_type);
9846 if (PyModule_AddObject(m, "Call", state->Call_type) < 0) {
Victor Stinnerd2bea262020-08-10 15:55:54 +02009847 return -1;
Victor Stinnerf8599272020-07-03 16:57:19 +02009848 }
9849 Py_INCREF(state->Call_type);
9850 if (PyModule_AddObject(m, "FormattedValue", state->FormattedValue_type) <
Brandt Bucherd2f96672020-02-06 06:45:46 -08009851 0) {
Victor Stinnerd2bea262020-08-10 15:55:54 +02009852 return -1;
Brandt Bucherd2f96672020-02-06 06:45:46 -08009853 }
Victor Stinnerf8599272020-07-03 16:57:19 +02009854 Py_INCREF(state->FormattedValue_type);
9855 if (PyModule_AddObject(m, "JoinedStr", state->JoinedStr_type) < 0) {
Victor Stinnerd2bea262020-08-10 15:55:54 +02009856 return -1;
Brandt Bucherd2f96672020-02-06 06:45:46 -08009857 }
Victor Stinnerf8599272020-07-03 16:57:19 +02009858 Py_INCREF(state->JoinedStr_type);
9859 if (PyModule_AddObject(m, "Constant", state->Constant_type) < 0) {
Victor Stinnerd2bea262020-08-10 15:55:54 +02009860 return -1;
Brandt Bucherd2f96672020-02-06 06:45:46 -08009861 }
Victor Stinnerf8599272020-07-03 16:57:19 +02009862 Py_INCREF(state->Constant_type);
9863 if (PyModule_AddObject(m, "Attribute", state->Attribute_type) < 0) {
Victor Stinnerd2bea262020-08-10 15:55:54 +02009864 return -1;
Brandt Bucherd2f96672020-02-06 06:45:46 -08009865 }
Victor Stinnerf8599272020-07-03 16:57:19 +02009866 Py_INCREF(state->Attribute_type);
9867 if (PyModule_AddObject(m, "Subscript", state->Subscript_type) < 0) {
Victor Stinnerd2bea262020-08-10 15:55:54 +02009868 return -1;
Brandt Bucherd2f96672020-02-06 06:45:46 -08009869 }
Victor Stinnerf8599272020-07-03 16:57:19 +02009870 Py_INCREF(state->Subscript_type);
9871 if (PyModule_AddObject(m, "Starred", state->Starred_type) < 0) {
Victor Stinnerd2bea262020-08-10 15:55:54 +02009872 return -1;
Brandt Bucherd2f96672020-02-06 06:45:46 -08009873 }
Victor Stinnerf8599272020-07-03 16:57:19 +02009874 Py_INCREF(state->Starred_type);
9875 if (PyModule_AddObject(m, "Name", state->Name_type) < 0) {
Victor Stinnerd2bea262020-08-10 15:55:54 +02009876 return -1;
Brandt Bucherd2f96672020-02-06 06:45:46 -08009877 }
Victor Stinnerf8599272020-07-03 16:57:19 +02009878 Py_INCREF(state->Name_type);
9879 if (PyModule_AddObject(m, "List", state->List_type) < 0) {
Victor Stinnerd2bea262020-08-10 15:55:54 +02009880 return -1;
Brandt Bucherd2f96672020-02-06 06:45:46 -08009881 }
Victor Stinnerf8599272020-07-03 16:57:19 +02009882 Py_INCREF(state->List_type);
9883 if (PyModule_AddObject(m, "Tuple", state->Tuple_type) < 0) {
Victor Stinnerd2bea262020-08-10 15:55:54 +02009884 return -1;
Brandt Bucherd2f96672020-02-06 06:45:46 -08009885 }
Victor Stinnerf8599272020-07-03 16:57:19 +02009886 Py_INCREF(state->Tuple_type);
9887 if (PyModule_AddObject(m, "Slice", state->Slice_type) < 0) {
Victor Stinnerd2bea262020-08-10 15:55:54 +02009888 return -1;
Brandt Bucherd2f96672020-02-06 06:45:46 -08009889 }
Victor Stinnerf8599272020-07-03 16:57:19 +02009890 Py_INCREF(state->Slice_type);
9891 if (PyModule_AddObject(m, "expr_context", state->expr_context_type) < 0) {
Victor Stinnerd2bea262020-08-10 15:55:54 +02009892 return -1;
Brandt Bucherd2f96672020-02-06 06:45:46 -08009893 }
Victor Stinnerf8599272020-07-03 16:57:19 +02009894 Py_INCREF(state->expr_context_type);
9895 if (PyModule_AddObject(m, "Load", state->Load_type) < 0) {
Victor Stinnerd2bea262020-08-10 15:55:54 +02009896 return -1;
Brandt Bucherd2f96672020-02-06 06:45:46 -08009897 }
Victor Stinnerf8599272020-07-03 16:57:19 +02009898 Py_INCREF(state->Load_type);
9899 if (PyModule_AddObject(m, "Store", state->Store_type) < 0) {
Victor Stinnerd2bea262020-08-10 15:55:54 +02009900 return -1;
Brandt Bucherd2f96672020-02-06 06:45:46 -08009901 }
Victor Stinnerf8599272020-07-03 16:57:19 +02009902 Py_INCREF(state->Store_type);
9903 if (PyModule_AddObject(m, "Del", state->Del_type) < 0) {
Victor Stinnerd2bea262020-08-10 15:55:54 +02009904 return -1;
Brandt Bucherd2f96672020-02-06 06:45:46 -08009905 }
Victor Stinnerf8599272020-07-03 16:57:19 +02009906 Py_INCREF(state->Del_type);
9907 if (PyModule_AddObject(m, "boolop", state->boolop_type) < 0) {
Victor Stinnerd2bea262020-08-10 15:55:54 +02009908 return -1;
Brandt Bucherd2f96672020-02-06 06:45:46 -08009909 }
Victor Stinnerf8599272020-07-03 16:57:19 +02009910 Py_INCREF(state->boolop_type);
9911 if (PyModule_AddObject(m, "And", state->And_type) < 0) {
Victor Stinnerd2bea262020-08-10 15:55:54 +02009912 return -1;
Brandt Bucherd2f96672020-02-06 06:45:46 -08009913 }
Victor Stinnerf8599272020-07-03 16:57:19 +02009914 Py_INCREF(state->And_type);
9915 if (PyModule_AddObject(m, "Or", state->Or_type) < 0) {
Victor Stinnerd2bea262020-08-10 15:55:54 +02009916 return -1;
Brandt Bucherd2f96672020-02-06 06:45:46 -08009917 }
Victor Stinnerf8599272020-07-03 16:57:19 +02009918 Py_INCREF(state->Or_type);
9919 if (PyModule_AddObject(m, "operator", state->operator_type) < 0) {
Victor Stinnerd2bea262020-08-10 15:55:54 +02009920 return -1;
Brandt Bucherd2f96672020-02-06 06:45:46 -08009921 }
Victor Stinnerf8599272020-07-03 16:57:19 +02009922 Py_INCREF(state->operator_type);
9923 if (PyModule_AddObject(m, "Add", state->Add_type) < 0) {
Victor Stinnerd2bea262020-08-10 15:55:54 +02009924 return -1;
Brandt Bucherd2f96672020-02-06 06:45:46 -08009925 }
Victor Stinnerf8599272020-07-03 16:57:19 +02009926 Py_INCREF(state->Add_type);
9927 if (PyModule_AddObject(m, "Sub", state->Sub_type) < 0) {
Victor Stinnerd2bea262020-08-10 15:55:54 +02009928 return -1;
Brandt Bucherd2f96672020-02-06 06:45:46 -08009929 }
Victor Stinnerf8599272020-07-03 16:57:19 +02009930 Py_INCREF(state->Sub_type);
9931 if (PyModule_AddObject(m, "Mult", state->Mult_type) < 0) {
Victor Stinnerd2bea262020-08-10 15:55:54 +02009932 return -1;
Brandt Bucherd2f96672020-02-06 06:45:46 -08009933 }
Victor Stinnerf8599272020-07-03 16:57:19 +02009934 Py_INCREF(state->Mult_type);
9935 if (PyModule_AddObject(m, "MatMult", state->MatMult_type) < 0) {
Victor Stinnerd2bea262020-08-10 15:55:54 +02009936 return -1;
Brandt Bucherd2f96672020-02-06 06:45:46 -08009937 }
Victor Stinnerf8599272020-07-03 16:57:19 +02009938 Py_INCREF(state->MatMult_type);
9939 if (PyModule_AddObject(m, "Div", state->Div_type) < 0) {
Victor Stinnerd2bea262020-08-10 15:55:54 +02009940 return -1;
Brandt Bucherd2f96672020-02-06 06:45:46 -08009941 }
Victor Stinnerf8599272020-07-03 16:57:19 +02009942 Py_INCREF(state->Div_type);
9943 if (PyModule_AddObject(m, "Mod", state->Mod_type) < 0) {
Victor Stinnerd2bea262020-08-10 15:55:54 +02009944 return -1;
Brandt Bucherd2f96672020-02-06 06:45:46 -08009945 }
Victor Stinnerf8599272020-07-03 16:57:19 +02009946 Py_INCREF(state->Mod_type);
9947 if (PyModule_AddObject(m, "Pow", state->Pow_type) < 0) {
Victor Stinnerd2bea262020-08-10 15:55:54 +02009948 return -1;
Brandt Bucherd2f96672020-02-06 06:45:46 -08009949 }
Victor Stinnerf8599272020-07-03 16:57:19 +02009950 Py_INCREF(state->Pow_type);
9951 if (PyModule_AddObject(m, "LShift", state->LShift_type) < 0) {
Victor Stinnerd2bea262020-08-10 15:55:54 +02009952 return -1;
Brandt Bucherd2f96672020-02-06 06:45:46 -08009953 }
Victor Stinnerf8599272020-07-03 16:57:19 +02009954 Py_INCREF(state->LShift_type);
9955 if (PyModule_AddObject(m, "RShift", state->RShift_type) < 0) {
Victor Stinnerd2bea262020-08-10 15:55:54 +02009956 return -1;
Brandt Bucherd2f96672020-02-06 06:45:46 -08009957 }
Victor Stinnerf8599272020-07-03 16:57:19 +02009958 Py_INCREF(state->RShift_type);
9959 if (PyModule_AddObject(m, "BitOr", state->BitOr_type) < 0) {
Victor Stinnerd2bea262020-08-10 15:55:54 +02009960 return -1;
Brandt Bucherd2f96672020-02-06 06:45:46 -08009961 }
Victor Stinnerf8599272020-07-03 16:57:19 +02009962 Py_INCREF(state->BitOr_type);
9963 if (PyModule_AddObject(m, "BitXor", state->BitXor_type) < 0) {
Victor Stinnerd2bea262020-08-10 15:55:54 +02009964 return -1;
Brandt Bucherd2f96672020-02-06 06:45:46 -08009965 }
Victor Stinnerf8599272020-07-03 16:57:19 +02009966 Py_INCREF(state->BitXor_type);
9967 if (PyModule_AddObject(m, "BitAnd", state->BitAnd_type) < 0) {
Victor Stinnerd2bea262020-08-10 15:55:54 +02009968 return -1;
Brandt Bucherd2f96672020-02-06 06:45:46 -08009969 }
Victor Stinnerf8599272020-07-03 16:57:19 +02009970 Py_INCREF(state->BitAnd_type);
9971 if (PyModule_AddObject(m, "FloorDiv", state->FloorDiv_type) < 0) {
Victor Stinnerd2bea262020-08-10 15:55:54 +02009972 return -1;
Brandt Bucherd2f96672020-02-06 06:45:46 -08009973 }
Victor Stinnerf8599272020-07-03 16:57:19 +02009974 Py_INCREF(state->FloorDiv_type);
9975 if (PyModule_AddObject(m, "unaryop", state->unaryop_type) < 0) {
Victor Stinnerd2bea262020-08-10 15:55:54 +02009976 return -1;
Brandt Bucherd2f96672020-02-06 06:45:46 -08009977 }
Victor Stinnerf8599272020-07-03 16:57:19 +02009978 Py_INCREF(state->unaryop_type);
9979 if (PyModule_AddObject(m, "Invert", state->Invert_type) < 0) {
Victor Stinnerd2bea262020-08-10 15:55:54 +02009980 return -1;
Brandt Bucherd2f96672020-02-06 06:45:46 -08009981 }
Victor Stinnerf8599272020-07-03 16:57:19 +02009982 Py_INCREF(state->Invert_type);
9983 if (PyModule_AddObject(m, "Not", state->Not_type) < 0) {
Victor Stinnerd2bea262020-08-10 15:55:54 +02009984 return -1;
Brandt Bucherd2f96672020-02-06 06:45:46 -08009985 }
Victor Stinnerf8599272020-07-03 16:57:19 +02009986 Py_INCREF(state->Not_type);
9987 if (PyModule_AddObject(m, "UAdd", state->UAdd_type) < 0) {
Victor Stinnerd2bea262020-08-10 15:55:54 +02009988 return -1;
Brandt Bucherd2f96672020-02-06 06:45:46 -08009989 }
Victor Stinnerf8599272020-07-03 16:57:19 +02009990 Py_INCREF(state->UAdd_type);
9991 if (PyModule_AddObject(m, "USub", state->USub_type) < 0) {
Victor Stinnerd2bea262020-08-10 15:55:54 +02009992 return -1;
Brandt Bucherd2f96672020-02-06 06:45:46 -08009993 }
Victor Stinnerf8599272020-07-03 16:57:19 +02009994 Py_INCREF(state->USub_type);
9995 if (PyModule_AddObject(m, "cmpop", state->cmpop_type) < 0) {
Victor Stinnerd2bea262020-08-10 15:55:54 +02009996 return -1;
Brandt Bucherd2f96672020-02-06 06:45:46 -08009997 }
Victor Stinnerf8599272020-07-03 16:57:19 +02009998 Py_INCREF(state->cmpop_type);
9999 if (PyModule_AddObject(m, "Eq", state->Eq_type) < 0) {
Victor Stinnerd2bea262020-08-10 15:55:54 +020010000 return -1;
Brandt Bucherd2f96672020-02-06 06:45:46 -080010001 }
Victor Stinnerf8599272020-07-03 16:57:19 +020010002 Py_INCREF(state->Eq_type);
10003 if (PyModule_AddObject(m, "NotEq", state->NotEq_type) < 0) {
Victor Stinnerd2bea262020-08-10 15:55:54 +020010004 return -1;
Brandt Bucherd2f96672020-02-06 06:45:46 -080010005 }
Victor Stinnerf8599272020-07-03 16:57:19 +020010006 Py_INCREF(state->NotEq_type);
10007 if (PyModule_AddObject(m, "Lt", state->Lt_type) < 0) {
Victor Stinnerd2bea262020-08-10 15:55:54 +020010008 return -1;
Brandt Bucherd2f96672020-02-06 06:45:46 -080010009 }
Victor Stinnerf8599272020-07-03 16:57:19 +020010010 Py_INCREF(state->Lt_type);
10011 if (PyModule_AddObject(m, "LtE", state->LtE_type) < 0) {
Victor Stinnerd2bea262020-08-10 15:55:54 +020010012 return -1;
Brandt Bucherd2f96672020-02-06 06:45:46 -080010013 }
Victor Stinnerf8599272020-07-03 16:57:19 +020010014 Py_INCREF(state->LtE_type);
10015 if (PyModule_AddObject(m, "Gt", state->Gt_type) < 0) {
Victor Stinnerd2bea262020-08-10 15:55:54 +020010016 return -1;
Brandt Bucherd2f96672020-02-06 06:45:46 -080010017 }
Victor Stinnerf8599272020-07-03 16:57:19 +020010018 Py_INCREF(state->Gt_type);
10019 if (PyModule_AddObject(m, "GtE", state->GtE_type) < 0) {
Victor Stinnerd2bea262020-08-10 15:55:54 +020010020 return -1;
Brandt Bucherd2f96672020-02-06 06:45:46 -080010021 }
Victor Stinnerf8599272020-07-03 16:57:19 +020010022 Py_INCREF(state->GtE_type);
10023 if (PyModule_AddObject(m, "Is", state->Is_type) < 0) {
Victor Stinnerd2bea262020-08-10 15:55:54 +020010024 return -1;
Brandt Bucherd2f96672020-02-06 06:45:46 -080010025 }
Victor Stinnerf8599272020-07-03 16:57:19 +020010026 Py_INCREF(state->Is_type);
10027 if (PyModule_AddObject(m, "IsNot", state->IsNot_type) < 0) {
Victor Stinnerd2bea262020-08-10 15:55:54 +020010028 return -1;
Brandt Bucherd2f96672020-02-06 06:45:46 -080010029 }
Victor Stinnerf8599272020-07-03 16:57:19 +020010030 Py_INCREF(state->IsNot_type);
10031 if (PyModule_AddObject(m, "In", state->In_type) < 0) {
Victor Stinnerd2bea262020-08-10 15:55:54 +020010032 return -1;
Brandt Bucherd2f96672020-02-06 06:45:46 -080010033 }
Victor Stinnerf8599272020-07-03 16:57:19 +020010034 Py_INCREF(state->In_type);
10035 if (PyModule_AddObject(m, "NotIn", state->NotIn_type) < 0) {
Victor Stinnerd2bea262020-08-10 15:55:54 +020010036 return -1;
Brandt Bucherd2f96672020-02-06 06:45:46 -080010037 }
Victor Stinnerf8599272020-07-03 16:57:19 +020010038 Py_INCREF(state->NotIn_type);
10039 if (PyModule_AddObject(m, "comprehension", state->comprehension_type) < 0) {
Victor Stinnerd2bea262020-08-10 15:55:54 +020010040 return -1;
Brandt Bucherd2f96672020-02-06 06:45:46 -080010041 }
Victor Stinnerf8599272020-07-03 16:57:19 +020010042 Py_INCREF(state->comprehension_type);
10043 if (PyModule_AddObject(m, "excepthandler", state->excepthandler_type) < 0) {
Victor Stinnerd2bea262020-08-10 15:55:54 +020010044 return -1;
Brandt Bucherd2f96672020-02-06 06:45:46 -080010045 }
Victor Stinnerf8599272020-07-03 16:57:19 +020010046 Py_INCREF(state->excepthandler_type);
10047 if (PyModule_AddObject(m, "ExceptHandler", state->ExceptHandler_type) < 0) {
Victor Stinnerd2bea262020-08-10 15:55:54 +020010048 return -1;
Brandt Bucherd2f96672020-02-06 06:45:46 -080010049 }
Victor Stinnerf8599272020-07-03 16:57:19 +020010050 Py_INCREF(state->ExceptHandler_type);
10051 if (PyModule_AddObject(m, "arguments", state->arguments_type) < 0) {
Victor Stinnerd2bea262020-08-10 15:55:54 +020010052 return -1;
Brandt Bucherd2f96672020-02-06 06:45:46 -080010053 }
Victor Stinnerf8599272020-07-03 16:57:19 +020010054 Py_INCREF(state->arguments_type);
10055 if (PyModule_AddObject(m, "arg", state->arg_type) < 0) {
Victor Stinnerd2bea262020-08-10 15:55:54 +020010056 return -1;
Brandt Bucherd2f96672020-02-06 06:45:46 -080010057 }
Victor Stinnerf8599272020-07-03 16:57:19 +020010058 Py_INCREF(state->arg_type);
10059 if (PyModule_AddObject(m, "keyword", state->keyword_type) < 0) {
Victor Stinnerd2bea262020-08-10 15:55:54 +020010060 return -1;
Brandt Bucherd2f96672020-02-06 06:45:46 -080010061 }
Victor Stinnerf8599272020-07-03 16:57:19 +020010062 Py_INCREF(state->keyword_type);
10063 if (PyModule_AddObject(m, "alias", state->alias_type) < 0) {
Victor Stinnerd2bea262020-08-10 15:55:54 +020010064 return -1;
Brandt Bucherd2f96672020-02-06 06:45:46 -080010065 }
Victor Stinnerf8599272020-07-03 16:57:19 +020010066 Py_INCREF(state->alias_type);
10067 if (PyModule_AddObject(m, "withitem", state->withitem_type) < 0) {
Victor Stinnerd2bea262020-08-10 15:55:54 +020010068 return -1;
Brandt Bucherd2f96672020-02-06 06:45:46 -080010069 }
Victor Stinnerf8599272020-07-03 16:57:19 +020010070 Py_INCREF(state->withitem_type);
10071 if (PyModule_AddObject(m, "type_ignore", state->type_ignore_type) < 0) {
Victor Stinnerd2bea262020-08-10 15:55:54 +020010072 return -1;
Brandt Bucherd2f96672020-02-06 06:45:46 -080010073 }
Victor Stinnerf8599272020-07-03 16:57:19 +020010074 Py_INCREF(state->type_ignore_type);
10075 if (PyModule_AddObject(m, "TypeIgnore", state->TypeIgnore_type) < 0) {
Victor Stinnerd2bea262020-08-10 15:55:54 +020010076 return -1;
Brandt Bucherd2f96672020-02-06 06:45:46 -080010077 }
Victor Stinnerf8599272020-07-03 16:57:19 +020010078 Py_INCREF(state->TypeIgnore_type);
Victor Stinnerd2bea262020-08-10 15:55:54 +020010079 return 0;
10080}
Victor Stinnerf8599272020-07-03 16:57:19 +020010081
Victor Stinnerd2bea262020-08-10 15:55:54 +020010082static PyModuleDef_Slot astmodule_slots[] = {
10083 {Py_mod_exec, astmodule_exec},
10084 {0, NULL}
Jeremy Hylton3e0055f2005-10-20 19:59:25 +000010085};
Victor Stinnerd2bea262020-08-10 15:55:54 +020010086
10087static struct PyModuleDef _astmodule = {
10088 PyModuleDef_HEAD_INIT,
10089 .m_name = "_ast",
Pablo Galindo55e08362020-09-15 19:32:56 +010010090 // The _ast module uses a global state (global_ast_state).
10091 .m_size = 0,
Victor Stinnerd2bea262020-08-10 15:55:54 +020010092 .m_slots = astmodule_slots,
Victor Stinnerd2bea262020-08-10 15:55:54 +020010093};
10094
Martin v. Löwis577b5b92006-02-27 15:23:19 +000010095PyMODINIT_FUNC
10096PyInit__ast(void)
10097{
Victor Stinnerd2bea262020-08-10 15:55:54 +020010098 return PyModuleDef_Init(&_astmodule);
Martin v. Löwis577b5b92006-02-27 15:23:19 +000010099}
10100
Jeremy Hylton3e0055f2005-10-20 19:59:25 +000010101
Martin v. Löwisbd260da2006-02-26 19:42:26 +000010102PyObject* PyAST_mod2obj(mod_ty t)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +000010103{
Victor Stinnerd2bea262020-08-10 15:55:54 +020010104 astmodulestate *state = get_global_ast_state();
10105 if (state == NULL) {
Victor Stinnerbdf630c2013-07-17 00:17:15 +020010106 return NULL;
Victor Stinnerf8599272020-07-03 16:57:19 +020010107 }
Victor Stinnerf8599272020-07-03 16:57:19 +020010108 return ast2obj_mod(state, t);
Jeremy Hylton3e0055f2005-10-20 19:59:25 +000010109}
Martin v. Löwis5b222132007-06-10 09:51:05 +000010110
Neal Norwitzdb4115f2008-03-31 04:20:05 +000010111/* mode is 0 for "exec", 1 for "eval" and 2 for "single" input */
10112mod_ty PyAST_obj2mod(PyObject* ast, PyArena* arena, int mode)
Martin v. Löwis618dc5e2008-03-30 20:03:44 +000010113{
Serhiy Storchaka43c97312019-09-10 13:02:30 +030010114 const char * const req_name[] = {"Module", "Expression", "Interactive"};
Benjamin Peterson0496c9e2009-12-13 01:24:58 +000010115 int isinstance;
Benjamin Peterson42ec0312014-02-10 22:41:40 -050010116
Steve Dowerb82e17e2019-05-23 08:45:22 -070010117 if (PySys_Audit("compile", "OO", ast, Py_None) < 0) {
10118 return NULL;
10119 }
10120
Victor Stinnerf8599272020-07-03 16:57:19 +020010121 astmodulestate *state = get_global_ast_state();
10122 PyObject *req_type[3];
10123 req_type[0] = state->Module_type;
10124 req_type[1] = state->Expression_type;
10125 req_type[2] = state->Interactive_type;
Benjamin Peterson42ec0312014-02-10 22:41:40 -050010126
Guido van Rossum3a32e3b2019-02-01 11:37:34 -080010127 assert(0 <= mode && mode <= 2);
Neal Norwitzdb4115f2008-03-31 04:20:05 +000010128
Benjamin Peterson0496c9e2009-12-13 01:24:58 +000010129 isinstance = PyObject_IsInstance(ast, req_type[mode]);
10130 if (isinstance == -1)
10131 return NULL;
10132 if (!isinstance) {
Neal Norwitzdb4115f2008-03-31 04:20:05 +000010133 PyErr_Format(PyExc_TypeError, "expected %s node, got %.400s",
Dino Viehlandac46eb42019-09-11 10:16:34 -070010134 req_name[mode], _PyType_Name(Py_TYPE(ast)));
Martin v. Löwis618dc5e2008-03-30 20:03:44 +000010135 return NULL;
10136 }
Miss Islington (bot)6b6935e2019-10-10 01:00:19 -070010137
10138 mod_ty res = NULL;
Victor Stinnerf8599272020-07-03 16:57:19 +020010139 if (obj2ast_mod(state, ast, &res, arena) != 0)
Martin v. Löwis618dc5e2008-03-30 20:03:44 +000010140 return NULL;
10141 else
10142 return res;
10143}
10144
10145int PyAST_Check(PyObject* obj)
10146{
Victor Stinnerd2bea262020-08-10 15:55:54 +020010147 astmodulestate *state = get_global_ast_state();
10148 if (state == NULL) {
Victor Stinnerbdf630c2013-07-17 00:17:15 +020010149 return -1;
Victor Stinnerf8599272020-07-03 16:57:19 +020010150 }
Victor Stinnerf8599272020-07-03 16:57:19 +020010151 return PyObject_IsInstance(obj, state->AST_type);
Martin v. Löwis618dc5e2008-03-30 20:03:44 +000010152}
10153
Martin v. Löwis5b222132007-06-10 09:51:05 +000010154