blob: 63c214dba172b6362438389cd16e9af00de21509 [file] [log] [blame]
Victor Stinner5cf47822020-11-02 22:03:28 +01001// File automatically generated by Parser/asdl_c.py.
2
Thomas Wouterscf297e42007-02-23 15:07:44 +00003
Benjamin Peterson7e0dbfb2012-03-12 09:46:44 -07004#include <stddef.h>
5
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00006#include "Python.h"
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00007
Victor Stinnere0bf70d2021-03-18 02:46:06 +01008
9#include "pycore_ast_state.h" // struct ast_state
10#include "pycore_interp.h" // _PyInterpreterState.ast
11#include "pycore_pystate.h" // _PyInterpreterState_GET()
Dino Viehlandac46eb42019-09-11 10:16:34 -070012
Victor Stinnere5fbe0c2020-09-15 18:03:34 +020013// Forward declaration
Victor Stinner5cf47822020-11-02 22:03:28 +010014static int init_types(struct ast_state *state);
Victor Stinnere5fbe0c2020-09-15 18:03:34 +020015
Victor Stinner5cf47822020-11-02 22:03:28 +010016static struct ast_state*
17get_ast_state(void)
Victor Stinnerb1cc6ba2020-07-03 20:01:46 +020018{
Victor Stinner5cf47822020-11-02 22:03:28 +010019 PyInterpreterState *interp = _PyInterpreterState_GET();
20 struct ast_state *state = &interp->ast;
Victor Stinnere5fbe0c2020-09-15 18:03:34 +020021 if (!init_types(state)) {
Victor Stinnerb1cc6ba2020-07-03 20:01:46 +020022 return NULL;
23 }
Victor Stinnerb1cc6ba2020-07-03 20:01:46 +020024 return state;
Victor Stinner74419f02020-07-03 11:35:37 +020025}
Victor Stinner5cf47822020-11-02 22:03:28 +010026
Victor Stinner94faa072021-03-23 20:47:40 +010027// Include pycore_ast.h after pycore_interp.h to avoid conflicts
Victor Stinner5cf47822020-11-02 22:03:28 +010028// with the Yield macro redefined by <winbase.h>
Victor Stinner94faa072021-03-23 20:47:40 +010029#include "pycore_ast.h"
Victor Stinner5cf47822020-11-02 22:03:28 +010030#include "structmember.h"
Victor Stinnere5fbe0c2020-09-15 18:03:34 +020031
Victor Stinnerfd957c12020-11-03 18:07:15 +010032void _PyAST_Fini(PyInterpreterState *interp)
Victor Stinnere5fbe0c2020-09-15 18:03:34 +020033{
Victor Stinnerfd957c12020-11-03 18:07:15 +010034 struct ast_state *state = &interp->ast;
Victor Stinner5cf47822020-11-02 22:03:28 +010035
Victor Stinner74419f02020-07-03 11:35:37 +020036 Py_CLEAR(state->AST_type);
37 Py_CLEAR(state->Add_singleton);
38 Py_CLEAR(state->Add_type);
39 Py_CLEAR(state->And_singleton);
40 Py_CLEAR(state->And_type);
41 Py_CLEAR(state->AnnAssign_type);
42 Py_CLEAR(state->Assert_type);
43 Py_CLEAR(state->Assign_type);
44 Py_CLEAR(state->AsyncFor_type);
45 Py_CLEAR(state->AsyncFunctionDef_type);
46 Py_CLEAR(state->AsyncWith_type);
47 Py_CLEAR(state->Attribute_type);
48 Py_CLEAR(state->AugAssign_type);
49 Py_CLEAR(state->Await_type);
50 Py_CLEAR(state->BinOp_type);
51 Py_CLEAR(state->BitAnd_singleton);
52 Py_CLEAR(state->BitAnd_type);
53 Py_CLEAR(state->BitOr_singleton);
54 Py_CLEAR(state->BitOr_type);
55 Py_CLEAR(state->BitXor_singleton);
56 Py_CLEAR(state->BitXor_type);
57 Py_CLEAR(state->BoolOp_type);
58 Py_CLEAR(state->Break_type);
59 Py_CLEAR(state->Call_type);
60 Py_CLEAR(state->ClassDef_type);
61 Py_CLEAR(state->Compare_type);
62 Py_CLEAR(state->Constant_type);
63 Py_CLEAR(state->Continue_type);
64 Py_CLEAR(state->Del_singleton);
65 Py_CLEAR(state->Del_type);
66 Py_CLEAR(state->Delete_type);
67 Py_CLEAR(state->DictComp_type);
68 Py_CLEAR(state->Dict_type);
69 Py_CLEAR(state->Div_singleton);
70 Py_CLEAR(state->Div_type);
71 Py_CLEAR(state->Eq_singleton);
72 Py_CLEAR(state->Eq_type);
73 Py_CLEAR(state->ExceptHandler_type);
74 Py_CLEAR(state->Expr_type);
75 Py_CLEAR(state->Expression_type);
76 Py_CLEAR(state->FloorDiv_singleton);
77 Py_CLEAR(state->FloorDiv_type);
78 Py_CLEAR(state->For_type);
79 Py_CLEAR(state->FormattedValue_type);
80 Py_CLEAR(state->FunctionDef_type);
81 Py_CLEAR(state->FunctionType_type);
82 Py_CLEAR(state->GeneratorExp_type);
83 Py_CLEAR(state->Global_type);
84 Py_CLEAR(state->GtE_singleton);
85 Py_CLEAR(state->GtE_type);
86 Py_CLEAR(state->Gt_singleton);
87 Py_CLEAR(state->Gt_type);
88 Py_CLEAR(state->IfExp_type);
89 Py_CLEAR(state->If_type);
90 Py_CLEAR(state->ImportFrom_type);
91 Py_CLEAR(state->Import_type);
92 Py_CLEAR(state->In_singleton);
93 Py_CLEAR(state->In_type);
94 Py_CLEAR(state->Interactive_type);
95 Py_CLEAR(state->Invert_singleton);
96 Py_CLEAR(state->Invert_type);
97 Py_CLEAR(state->IsNot_singleton);
98 Py_CLEAR(state->IsNot_type);
99 Py_CLEAR(state->Is_singleton);
100 Py_CLEAR(state->Is_type);
101 Py_CLEAR(state->JoinedStr_type);
102 Py_CLEAR(state->LShift_singleton);
103 Py_CLEAR(state->LShift_type);
104 Py_CLEAR(state->Lambda_type);
105 Py_CLEAR(state->ListComp_type);
106 Py_CLEAR(state->List_type);
107 Py_CLEAR(state->Load_singleton);
108 Py_CLEAR(state->Load_type);
109 Py_CLEAR(state->LtE_singleton);
110 Py_CLEAR(state->LtE_type);
111 Py_CLEAR(state->Lt_singleton);
112 Py_CLEAR(state->Lt_type);
113 Py_CLEAR(state->MatMult_singleton);
114 Py_CLEAR(state->MatMult_type);
Brandt Bucher145bf262021-02-26 14:51:55 -0800115 Py_CLEAR(state->MatchAs_type);
116 Py_CLEAR(state->MatchOr_type);
117 Py_CLEAR(state->Match_type);
Victor Stinner74419f02020-07-03 11:35:37 +0200118 Py_CLEAR(state->Mod_singleton);
119 Py_CLEAR(state->Mod_type);
120 Py_CLEAR(state->Module_type);
121 Py_CLEAR(state->Mult_singleton);
122 Py_CLEAR(state->Mult_type);
123 Py_CLEAR(state->Name_type);
124 Py_CLEAR(state->NamedExpr_type);
125 Py_CLEAR(state->Nonlocal_type);
126 Py_CLEAR(state->NotEq_singleton);
127 Py_CLEAR(state->NotEq_type);
128 Py_CLEAR(state->NotIn_singleton);
129 Py_CLEAR(state->NotIn_type);
130 Py_CLEAR(state->Not_singleton);
131 Py_CLEAR(state->Not_type);
132 Py_CLEAR(state->Or_singleton);
133 Py_CLEAR(state->Or_type);
134 Py_CLEAR(state->Pass_type);
135 Py_CLEAR(state->Pow_singleton);
136 Py_CLEAR(state->Pow_type);
137 Py_CLEAR(state->RShift_singleton);
138 Py_CLEAR(state->RShift_type);
139 Py_CLEAR(state->Raise_type);
140 Py_CLEAR(state->Return_type);
141 Py_CLEAR(state->SetComp_type);
142 Py_CLEAR(state->Set_type);
143 Py_CLEAR(state->Slice_type);
144 Py_CLEAR(state->Starred_type);
145 Py_CLEAR(state->Store_singleton);
146 Py_CLEAR(state->Store_type);
147 Py_CLEAR(state->Sub_singleton);
148 Py_CLEAR(state->Sub_type);
149 Py_CLEAR(state->Subscript_type);
150 Py_CLEAR(state->Try_type);
151 Py_CLEAR(state->Tuple_type);
152 Py_CLEAR(state->TypeIgnore_type);
153 Py_CLEAR(state->UAdd_singleton);
154 Py_CLEAR(state->UAdd_type);
155 Py_CLEAR(state->USub_singleton);
156 Py_CLEAR(state->USub_type);
157 Py_CLEAR(state->UnaryOp_type);
158 Py_CLEAR(state->While_type);
159 Py_CLEAR(state->With_type);
160 Py_CLEAR(state->YieldFrom_type);
161 Py_CLEAR(state->Yield_type);
162 Py_CLEAR(state->__dict__);
163 Py_CLEAR(state->__doc__);
Brandt Bucher145bf262021-02-26 14:51:55 -0800164 Py_CLEAR(state->__match_args__);
Victor Stinner74419f02020-07-03 11:35:37 +0200165 Py_CLEAR(state->__module__);
166 Py_CLEAR(state->_attributes);
167 Py_CLEAR(state->_fields);
168 Py_CLEAR(state->alias_type);
169 Py_CLEAR(state->annotation);
170 Py_CLEAR(state->arg);
171 Py_CLEAR(state->arg_type);
172 Py_CLEAR(state->args);
173 Py_CLEAR(state->argtypes);
174 Py_CLEAR(state->arguments_type);
175 Py_CLEAR(state->asname);
176 Py_CLEAR(state->ast);
177 Py_CLEAR(state->attr);
178 Py_CLEAR(state->bases);
179 Py_CLEAR(state->body);
180 Py_CLEAR(state->boolop_type);
Brandt Bucher145bf262021-02-26 14:51:55 -0800181 Py_CLEAR(state->cases);
Victor Stinner74419f02020-07-03 11:35:37 +0200182 Py_CLEAR(state->cause);
183 Py_CLEAR(state->cmpop_type);
184 Py_CLEAR(state->col_offset);
185 Py_CLEAR(state->comparators);
186 Py_CLEAR(state->comprehension_type);
187 Py_CLEAR(state->context_expr);
188 Py_CLEAR(state->conversion);
189 Py_CLEAR(state->ctx);
190 Py_CLEAR(state->decorator_list);
191 Py_CLEAR(state->defaults);
192 Py_CLEAR(state->elt);
193 Py_CLEAR(state->elts);
194 Py_CLEAR(state->end_col_offset);
195 Py_CLEAR(state->end_lineno);
196 Py_CLEAR(state->exc);
197 Py_CLEAR(state->excepthandler_type);
198 Py_CLEAR(state->expr_context_type);
199 Py_CLEAR(state->expr_type);
200 Py_CLEAR(state->finalbody);
201 Py_CLEAR(state->format_spec);
202 Py_CLEAR(state->func);
203 Py_CLEAR(state->generators);
Brandt Bucher145bf262021-02-26 14:51:55 -0800204 Py_CLEAR(state->guard);
Victor Stinner74419f02020-07-03 11:35:37 +0200205 Py_CLEAR(state->handlers);
206 Py_CLEAR(state->id);
207 Py_CLEAR(state->ifs);
208 Py_CLEAR(state->is_async);
209 Py_CLEAR(state->items);
210 Py_CLEAR(state->iter);
211 Py_CLEAR(state->key);
212 Py_CLEAR(state->keys);
213 Py_CLEAR(state->keyword_type);
214 Py_CLEAR(state->keywords);
215 Py_CLEAR(state->kind);
216 Py_CLEAR(state->kw_defaults);
217 Py_CLEAR(state->kwarg);
218 Py_CLEAR(state->kwonlyargs);
219 Py_CLEAR(state->left);
220 Py_CLEAR(state->level);
221 Py_CLEAR(state->lineno);
222 Py_CLEAR(state->lower);
Brandt Bucher145bf262021-02-26 14:51:55 -0800223 Py_CLEAR(state->match_case_type);
Victor Stinner74419f02020-07-03 11:35:37 +0200224 Py_CLEAR(state->mod_type);
225 Py_CLEAR(state->module);
226 Py_CLEAR(state->msg);
227 Py_CLEAR(state->name);
228 Py_CLEAR(state->names);
229 Py_CLEAR(state->op);
230 Py_CLEAR(state->operand);
231 Py_CLEAR(state->operator_type);
232 Py_CLEAR(state->ops);
233 Py_CLEAR(state->optional_vars);
234 Py_CLEAR(state->orelse);
Brandt Bucher145bf262021-02-26 14:51:55 -0800235 Py_CLEAR(state->pattern);
236 Py_CLEAR(state->patterns);
Victor Stinner74419f02020-07-03 11:35:37 +0200237 Py_CLEAR(state->posonlyargs);
238 Py_CLEAR(state->returns);
239 Py_CLEAR(state->right);
240 Py_CLEAR(state->simple);
241 Py_CLEAR(state->slice);
242 Py_CLEAR(state->step);
243 Py_CLEAR(state->stmt_type);
Brandt Bucher145bf262021-02-26 14:51:55 -0800244 Py_CLEAR(state->subject);
Victor Stinner74419f02020-07-03 11:35:37 +0200245 Py_CLEAR(state->tag);
246 Py_CLEAR(state->target);
247 Py_CLEAR(state->targets);
248 Py_CLEAR(state->test);
249 Py_CLEAR(state->type);
250 Py_CLEAR(state->type_comment);
251 Py_CLEAR(state->type_ignore_type);
252 Py_CLEAR(state->type_ignores);
253 Py_CLEAR(state->unaryop_type);
254 Py_CLEAR(state->upper);
255 Py_CLEAR(state->value);
256 Py_CLEAR(state->values);
257 Py_CLEAR(state->vararg);
258 Py_CLEAR(state->withitem_type);
Dino Viehlandac46eb42019-09-11 10:16:34 -0700259
Victor Stinnere0bf70d2021-03-18 02:46:06 +0100260#if !defined(NDEBUG)
Victor Stinnerfd957c12020-11-03 18:07:15 +0100261 state->initialized = -1;
262#else
Victor Stinnere5fbe0c2020-09-15 18:03:34 +0200263 state->initialized = 0;
Victor Stinnerfd957c12020-11-03 18:07:15 +0100264#endif
Dino Viehlandac46eb42019-09-11 10:16:34 -0700265}
266
Victor Stinner5cf47822020-11-02 22:03:28 +0100267static int init_identifiers(struct ast_state *state)
Dino Viehlandac46eb42019-09-11 10:16:34 -0700268{
Dino Viehlandac46eb42019-09-11 10:16:34 -0700269 if ((state->__dict__ = PyUnicode_InternFromString("__dict__")) == NULL) return 0;
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +0300270 if ((state->__doc__ = PyUnicode_InternFromString("__doc__")) == NULL) return 0;
Brandt Bucher145bf262021-02-26 14:51:55 -0800271 if ((state->__match_args__ = PyUnicode_InternFromString("__match_args__")) == NULL) return 0;
Dino Viehlandac46eb42019-09-11 10:16:34 -0700272 if ((state->__module__ = PyUnicode_InternFromString("__module__")) == NULL) return 0;
Dino Viehlandac46eb42019-09-11 10:16:34 -0700273 if ((state->_attributes = PyUnicode_InternFromString("_attributes")) == NULL) return 0;
274 if ((state->_fields = PyUnicode_InternFromString("_fields")) == NULL) return 0;
275 if ((state->annotation = PyUnicode_InternFromString("annotation")) == NULL) return 0;
276 if ((state->arg = PyUnicode_InternFromString("arg")) == NULL) return 0;
277 if ((state->args = PyUnicode_InternFromString("args")) == NULL) return 0;
278 if ((state->argtypes = PyUnicode_InternFromString("argtypes")) == NULL) return 0;
279 if ((state->asname = PyUnicode_InternFromString("asname")) == NULL) return 0;
Serhiy Storchakabace59d2020-03-22 20:33:34 +0200280 if ((state->ast = PyUnicode_InternFromString("ast")) == NULL) return 0;
Dino Viehlandac46eb42019-09-11 10:16:34 -0700281 if ((state->attr = PyUnicode_InternFromString("attr")) == NULL) return 0;
282 if ((state->bases = PyUnicode_InternFromString("bases")) == NULL) return 0;
283 if ((state->body = PyUnicode_InternFromString("body")) == NULL) return 0;
Brandt Bucher145bf262021-02-26 14:51:55 -0800284 if ((state->cases = PyUnicode_InternFromString("cases")) == NULL) return 0;
Dino Viehlandac46eb42019-09-11 10:16:34 -0700285 if ((state->cause = PyUnicode_InternFromString("cause")) == NULL) return 0;
286 if ((state->col_offset = PyUnicode_InternFromString("col_offset")) == NULL) return 0;
287 if ((state->comparators = PyUnicode_InternFromString("comparators")) == NULL) return 0;
288 if ((state->context_expr = PyUnicode_InternFromString("context_expr")) == NULL) return 0;
289 if ((state->conversion = PyUnicode_InternFromString("conversion")) == NULL) return 0;
290 if ((state->ctx = PyUnicode_InternFromString("ctx")) == NULL) return 0;
291 if ((state->decorator_list = PyUnicode_InternFromString("decorator_list")) == NULL) return 0;
292 if ((state->defaults = PyUnicode_InternFromString("defaults")) == NULL) return 0;
Dino Viehlandac46eb42019-09-11 10:16:34 -0700293 if ((state->elt = PyUnicode_InternFromString("elt")) == NULL) return 0;
294 if ((state->elts = PyUnicode_InternFromString("elts")) == NULL) return 0;
295 if ((state->end_col_offset = PyUnicode_InternFromString("end_col_offset")) == NULL) return 0;
296 if ((state->end_lineno = PyUnicode_InternFromString("end_lineno")) == NULL) return 0;
297 if ((state->exc = PyUnicode_InternFromString("exc")) == NULL) return 0;
298 if ((state->finalbody = PyUnicode_InternFromString("finalbody")) == NULL) return 0;
299 if ((state->format_spec = PyUnicode_InternFromString("format_spec")) == NULL) return 0;
300 if ((state->func = PyUnicode_InternFromString("func")) == NULL) return 0;
301 if ((state->generators = PyUnicode_InternFromString("generators")) == NULL) return 0;
Brandt Bucher145bf262021-02-26 14:51:55 -0800302 if ((state->guard = PyUnicode_InternFromString("guard")) == NULL) return 0;
Dino Viehlandac46eb42019-09-11 10:16:34 -0700303 if ((state->handlers = PyUnicode_InternFromString("handlers")) == NULL) return 0;
304 if ((state->id = PyUnicode_InternFromString("id")) == NULL) return 0;
305 if ((state->ifs = PyUnicode_InternFromString("ifs")) == NULL) return 0;
306 if ((state->is_async = PyUnicode_InternFromString("is_async")) == NULL) return 0;
307 if ((state->items = PyUnicode_InternFromString("items")) == NULL) return 0;
308 if ((state->iter = PyUnicode_InternFromString("iter")) == NULL) return 0;
309 if ((state->key = PyUnicode_InternFromString("key")) == NULL) return 0;
310 if ((state->keys = PyUnicode_InternFromString("keys")) == NULL) return 0;
311 if ((state->keywords = PyUnicode_InternFromString("keywords")) == NULL) return 0;
312 if ((state->kind = PyUnicode_InternFromString("kind")) == NULL) return 0;
313 if ((state->kw_defaults = PyUnicode_InternFromString("kw_defaults")) == NULL) return 0;
314 if ((state->kwarg = PyUnicode_InternFromString("kwarg")) == NULL) return 0;
315 if ((state->kwonlyargs = PyUnicode_InternFromString("kwonlyargs")) == NULL) return 0;
316 if ((state->left = PyUnicode_InternFromString("left")) == NULL) return 0;
317 if ((state->level = PyUnicode_InternFromString("level")) == NULL) return 0;
318 if ((state->lineno = PyUnicode_InternFromString("lineno")) == NULL) return 0;
319 if ((state->lower = PyUnicode_InternFromString("lower")) == NULL) return 0;
320 if ((state->module = PyUnicode_InternFromString("module")) == NULL) return 0;
321 if ((state->msg = PyUnicode_InternFromString("msg")) == NULL) return 0;
322 if ((state->name = PyUnicode_InternFromString("name")) == NULL) return 0;
323 if ((state->names = PyUnicode_InternFromString("names")) == NULL) return 0;
324 if ((state->op = PyUnicode_InternFromString("op")) == NULL) return 0;
325 if ((state->operand = PyUnicode_InternFromString("operand")) == NULL) return 0;
326 if ((state->ops = PyUnicode_InternFromString("ops")) == NULL) return 0;
327 if ((state->optional_vars = PyUnicode_InternFromString("optional_vars")) == NULL) return 0;
328 if ((state->orelse = PyUnicode_InternFromString("orelse")) == NULL) return 0;
Brandt Bucher145bf262021-02-26 14:51:55 -0800329 if ((state->pattern = PyUnicode_InternFromString("pattern")) == NULL) return 0;
330 if ((state->patterns = PyUnicode_InternFromString("patterns")) == NULL) return 0;
Dino Viehlandac46eb42019-09-11 10:16:34 -0700331 if ((state->posonlyargs = PyUnicode_InternFromString("posonlyargs")) == NULL) return 0;
332 if ((state->returns = PyUnicode_InternFromString("returns")) == NULL) return 0;
333 if ((state->right = PyUnicode_InternFromString("right")) == NULL) return 0;
334 if ((state->simple = PyUnicode_InternFromString("simple")) == NULL) return 0;
335 if ((state->slice = PyUnicode_InternFromString("slice")) == NULL) return 0;
336 if ((state->step = PyUnicode_InternFromString("step")) == NULL) return 0;
Brandt Bucher145bf262021-02-26 14:51:55 -0800337 if ((state->subject = PyUnicode_InternFromString("subject")) == NULL) return 0;
Dino Viehlandac46eb42019-09-11 10:16:34 -0700338 if ((state->tag = PyUnicode_InternFromString("tag")) == NULL) return 0;
339 if ((state->target = PyUnicode_InternFromString("target")) == NULL) return 0;
340 if ((state->targets = PyUnicode_InternFromString("targets")) == NULL) return 0;
341 if ((state->test = PyUnicode_InternFromString("test")) == NULL) return 0;
342 if ((state->type = PyUnicode_InternFromString("type")) == NULL) return 0;
343 if ((state->type_comment = PyUnicode_InternFromString("type_comment")) == NULL) return 0;
344 if ((state->type_ignores = PyUnicode_InternFromString("type_ignores")) == NULL) return 0;
345 if ((state->upper = PyUnicode_InternFromString("upper")) == NULL) return 0;
346 if ((state->value = PyUnicode_InternFromString("value")) == NULL) return 0;
347 if ((state->values = PyUnicode_InternFromString("values")) == NULL) return 0;
348 if ((state->vararg = PyUnicode_InternFromString("vararg")) == NULL) return 0;
349 return 1;
350};
351
Pablo Galindoa5634c42020-09-16 19:42:00 +0100352GENERATE_ASDL_SEQ_CONSTRUCTOR(mod, mod_ty)
353GENERATE_ASDL_SEQ_CONSTRUCTOR(stmt, stmt_ty)
354GENERATE_ASDL_SEQ_CONSTRUCTOR(expr, expr_ty)
355GENERATE_ASDL_SEQ_CONSTRUCTOR(comprehension, comprehension_ty)
356GENERATE_ASDL_SEQ_CONSTRUCTOR(excepthandler, excepthandler_ty)
357GENERATE_ASDL_SEQ_CONSTRUCTOR(arguments, arguments_ty)
358GENERATE_ASDL_SEQ_CONSTRUCTOR(arg, arg_ty)
359GENERATE_ASDL_SEQ_CONSTRUCTOR(keyword, keyword_ty)
360GENERATE_ASDL_SEQ_CONSTRUCTOR(alias, alias_ty)
361GENERATE_ASDL_SEQ_CONSTRUCTOR(withitem, withitem_ty)
Brandt Bucher145bf262021-02-26 14:51:55 -0800362GENERATE_ASDL_SEQ_CONSTRUCTOR(match_case, match_case_ty)
Pablo Galindoa5634c42020-09-16 19:42:00 +0100363GENERATE_ASDL_SEQ_CONSTRUCTOR(type_ignore, type_ignore_ty)
364
Victor Stinner5cf47822020-11-02 22:03:28 +0100365static PyObject* ast2obj_mod(struct ast_state *state, void*);
Serhiy Storchaka43c97312019-09-10 13:02:30 +0300366static const char * const Module_fields[]={
Victor Stinnerce72e1c2013-07-27 00:00:36 +0200367 "body",
Guido van Rossumdcfcd142019-01-31 03:40:27 -0800368 "type_ignores",
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000369};
Serhiy Storchaka43c97312019-09-10 13:02:30 +0300370static const char * const Interactive_fields[]={
Victor Stinnerce72e1c2013-07-27 00:00:36 +0200371 "body",
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000372};
Serhiy Storchaka43c97312019-09-10 13:02:30 +0300373static const char * const Expression_fields[]={
Victor Stinnerce72e1c2013-07-27 00:00:36 +0200374 "body",
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000375};
Serhiy Storchaka43c97312019-09-10 13:02:30 +0300376static const char * const FunctionType_fields[]={
Guido van Rossumdcfcd142019-01-31 03:40:27 -0800377 "argtypes",
378 "returns",
379};
Serhiy Storchaka43c97312019-09-10 13:02:30 +0300380static const char * const stmt_attributes[] = {
Victor Stinnerce72e1c2013-07-27 00:00:36 +0200381 "lineno",
382 "col_offset",
Ivan Levkivskyi9932a222019-01-22 11:18:22 +0000383 "end_lineno",
384 "end_col_offset",
Martin v. Löwis577b5b92006-02-27 15:23:19 +0000385};
Victor Stinner5cf47822020-11-02 22:03:28 +0100386static PyObject* ast2obj_stmt(struct ast_state *state, void*);
Serhiy Storchaka43c97312019-09-10 13:02:30 +0300387static const char * const FunctionDef_fields[]={
Victor Stinnerce72e1c2013-07-27 00:00:36 +0200388 "name",
389 "args",
390 "body",
391 "decorator_list",
392 "returns",
Guido van Rossumdcfcd142019-01-31 03:40:27 -0800393 "type_comment",
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000394};
Serhiy Storchaka43c97312019-09-10 13:02:30 +0300395static const char * const AsyncFunctionDef_fields[]={
Yury Selivanov75445082015-05-11 22:57:16 -0400396 "name",
397 "args",
398 "body",
399 "decorator_list",
400 "returns",
Guido van Rossumdcfcd142019-01-31 03:40:27 -0800401 "type_comment",
Yury Selivanov75445082015-05-11 22:57:16 -0400402};
Serhiy Storchaka43c97312019-09-10 13:02:30 +0300403static const char * const ClassDef_fields[]={
Victor Stinnerce72e1c2013-07-27 00:00:36 +0200404 "name",
405 "bases",
406 "keywords",
Victor Stinnerce72e1c2013-07-27 00:00:36 +0200407 "body",
408 "decorator_list",
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000409};
Serhiy Storchaka43c97312019-09-10 13:02:30 +0300410static const char * const Return_fields[]={
Victor Stinnerce72e1c2013-07-27 00:00:36 +0200411 "value",
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000412};
Serhiy Storchaka43c97312019-09-10 13:02:30 +0300413static const char * const Delete_fields[]={
Victor Stinnerce72e1c2013-07-27 00:00:36 +0200414 "targets",
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000415};
Serhiy Storchaka43c97312019-09-10 13:02:30 +0300416static const char * const Assign_fields[]={
Victor Stinnerce72e1c2013-07-27 00:00:36 +0200417 "targets",
418 "value",
Guido van Rossumdcfcd142019-01-31 03:40:27 -0800419 "type_comment",
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000420};
Serhiy Storchaka43c97312019-09-10 13:02:30 +0300421static const char * const AugAssign_fields[]={
Victor Stinnerce72e1c2013-07-27 00:00:36 +0200422 "target",
423 "op",
424 "value",
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000425};
Serhiy Storchaka43c97312019-09-10 13:02:30 +0300426static const char * const AnnAssign_fields[]={
Yury Selivanovf8cb8a12016-09-08 20:50:03 -0700427 "target",
428 "annotation",
429 "value",
430 "simple",
431};
Serhiy Storchaka43c97312019-09-10 13:02:30 +0300432static const char * const For_fields[]={
Victor Stinnerce72e1c2013-07-27 00:00:36 +0200433 "target",
434 "iter",
435 "body",
436 "orelse",
Guido van Rossumdcfcd142019-01-31 03:40:27 -0800437 "type_comment",
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000438};
Serhiy Storchaka43c97312019-09-10 13:02:30 +0300439static const char * const AsyncFor_fields[]={
Yury Selivanov75445082015-05-11 22:57:16 -0400440 "target",
441 "iter",
442 "body",
443 "orelse",
Guido van Rossumdcfcd142019-01-31 03:40:27 -0800444 "type_comment",
Yury Selivanov75445082015-05-11 22:57:16 -0400445};
Serhiy Storchaka43c97312019-09-10 13:02:30 +0300446static const char * const While_fields[]={
Victor Stinnerce72e1c2013-07-27 00:00:36 +0200447 "test",
448 "body",
449 "orelse",
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000450};
Serhiy Storchaka43c97312019-09-10 13:02:30 +0300451static const char * const If_fields[]={
Victor Stinnerce72e1c2013-07-27 00:00:36 +0200452 "test",
453 "body",
454 "orelse",
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000455};
Serhiy Storchaka43c97312019-09-10 13:02:30 +0300456static const char * const With_fields[]={
Victor Stinnerce72e1c2013-07-27 00:00:36 +0200457 "items",
458 "body",
Guido van Rossumdcfcd142019-01-31 03:40:27 -0800459 "type_comment",
Guido van Rossumc2e20742006-02-27 22:32:47 +0000460};
Serhiy Storchaka43c97312019-09-10 13:02:30 +0300461static const char * const AsyncWith_fields[]={
Yury Selivanov75445082015-05-11 22:57:16 -0400462 "items",
463 "body",
Guido van Rossumdcfcd142019-01-31 03:40:27 -0800464 "type_comment",
Yury Selivanov75445082015-05-11 22:57:16 -0400465};
Brandt Bucher145bf262021-02-26 14:51:55 -0800466static const char * const Match_fields[]={
467 "subject",
468 "cases",
469};
Serhiy Storchaka43c97312019-09-10 13:02:30 +0300470static const char * const Raise_fields[]={
Victor Stinnerce72e1c2013-07-27 00:00:36 +0200471 "exc",
472 "cause",
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000473};
Serhiy Storchaka43c97312019-09-10 13:02:30 +0300474static const char * const Try_fields[]={
Victor Stinnerce72e1c2013-07-27 00:00:36 +0200475 "body",
476 "handlers",
477 "orelse",
478 "finalbody",
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000479};
Serhiy Storchaka43c97312019-09-10 13:02:30 +0300480static const char * const Assert_fields[]={
Victor Stinnerce72e1c2013-07-27 00:00:36 +0200481 "test",
482 "msg",
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000483};
Serhiy Storchaka43c97312019-09-10 13:02:30 +0300484static const char * const Import_fields[]={
Victor Stinnerce72e1c2013-07-27 00:00:36 +0200485 "names",
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000486};
Serhiy Storchaka43c97312019-09-10 13:02:30 +0300487static const char * const ImportFrom_fields[]={
Victor Stinnerce72e1c2013-07-27 00:00:36 +0200488 "module",
489 "names",
490 "level",
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000491};
Serhiy Storchaka43c97312019-09-10 13:02:30 +0300492static const char * const Global_fields[]={
Victor Stinnerce72e1c2013-07-27 00:00:36 +0200493 "names",
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000494};
Serhiy Storchaka43c97312019-09-10 13:02:30 +0300495static const char * const Nonlocal_fields[]={
Victor Stinnerce72e1c2013-07-27 00:00:36 +0200496 "names",
Jeremy Hylton81e95022007-02-27 06:50:52 +0000497};
Serhiy Storchaka43c97312019-09-10 13:02:30 +0300498static const char * const Expr_fields[]={
Victor Stinnerce72e1c2013-07-27 00:00:36 +0200499 "value",
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000500};
Serhiy Storchaka43c97312019-09-10 13:02:30 +0300501static const char * const expr_attributes[] = {
Victor Stinnerce72e1c2013-07-27 00:00:36 +0200502 "lineno",
503 "col_offset",
Ivan Levkivskyi9932a222019-01-22 11:18:22 +0000504 "end_lineno",
505 "end_col_offset",
Martin v. Löwis577b5b92006-02-27 15:23:19 +0000506};
Victor Stinner5cf47822020-11-02 22:03:28 +0100507static PyObject* ast2obj_expr(struct ast_state *state, void*);
Serhiy Storchaka43c97312019-09-10 13:02:30 +0300508static const char * const BoolOp_fields[]={
Victor Stinnerce72e1c2013-07-27 00:00:36 +0200509 "op",
510 "values",
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000511};
Serhiy Storchaka43c97312019-09-10 13:02:30 +0300512static const char * const NamedExpr_fields[]={
Emily Morehouse8f59ee02019-01-24 16:49:56 -0700513 "target",
514 "value",
515};
Serhiy Storchaka43c97312019-09-10 13:02:30 +0300516static const char * const BinOp_fields[]={
Victor Stinnerce72e1c2013-07-27 00:00:36 +0200517 "left",
518 "op",
519 "right",
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000520};
Serhiy Storchaka43c97312019-09-10 13:02:30 +0300521static const char * const UnaryOp_fields[]={
Victor Stinnerce72e1c2013-07-27 00:00:36 +0200522 "op",
523 "operand",
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000524};
Serhiy Storchaka43c97312019-09-10 13:02:30 +0300525static const char * const Lambda_fields[]={
Victor Stinnerce72e1c2013-07-27 00:00:36 +0200526 "args",
527 "body",
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000528};
Serhiy Storchaka43c97312019-09-10 13:02:30 +0300529static const char * const IfExp_fields[]={
Victor Stinnerce72e1c2013-07-27 00:00:36 +0200530 "test",
531 "body",
532 "orelse",
Thomas Woutersdca3b9c2006-02-27 00:24:13 +0000533};
Serhiy Storchaka43c97312019-09-10 13:02:30 +0300534static const char * const Dict_fields[]={
Victor Stinnerce72e1c2013-07-27 00:00:36 +0200535 "keys",
536 "values",
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000537};
Serhiy Storchaka43c97312019-09-10 13:02:30 +0300538static const char * const Set_fields[]={
Victor Stinnerce72e1c2013-07-27 00:00:36 +0200539 "elts",
Guido van Rossum86e58e22006-08-28 15:27:34 +0000540};
Serhiy Storchaka43c97312019-09-10 13:02:30 +0300541static const char * const ListComp_fields[]={
Victor Stinnerce72e1c2013-07-27 00:00:36 +0200542 "elt",
543 "generators",
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000544};
Serhiy Storchaka43c97312019-09-10 13:02:30 +0300545static const char * const SetComp_fields[]={
Victor Stinnerce72e1c2013-07-27 00:00:36 +0200546 "elt",
547 "generators",
Nick Coghlan650f0d02007-04-15 12:05:43 +0000548};
Serhiy Storchaka43c97312019-09-10 13:02:30 +0300549static const char * const DictComp_fields[]={
Victor Stinnerce72e1c2013-07-27 00:00:36 +0200550 "key",
551 "value",
552 "generators",
Guido van Rossum992d4a32007-07-11 13:09:30 +0000553};
Serhiy Storchaka43c97312019-09-10 13:02:30 +0300554static const char * const GeneratorExp_fields[]={
Victor Stinnerce72e1c2013-07-27 00:00:36 +0200555 "elt",
556 "generators",
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000557};
Serhiy Storchaka43c97312019-09-10 13:02:30 +0300558static const char * const Await_fields[]={
Yury Selivanov75445082015-05-11 22:57:16 -0400559 "value",
560};
Serhiy Storchaka43c97312019-09-10 13:02:30 +0300561static const char * const Yield_fields[]={
Victor Stinnerce72e1c2013-07-27 00:00:36 +0200562 "value",
Benjamin Peterson527c6222012-01-14 08:58:23 -0500563};
Serhiy Storchaka43c97312019-09-10 13:02:30 +0300564static const char * const YieldFrom_fields[]={
Victor Stinnerce72e1c2013-07-27 00:00:36 +0200565 "value",
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000566};
Serhiy Storchaka43c97312019-09-10 13:02:30 +0300567static const char * const Compare_fields[]={
Victor Stinnerce72e1c2013-07-27 00:00:36 +0200568 "left",
569 "ops",
570 "comparators",
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000571};
Serhiy Storchaka43c97312019-09-10 13:02:30 +0300572static const char * const Call_fields[]={
Victor Stinnerce72e1c2013-07-27 00:00:36 +0200573 "func",
574 "args",
575 "keywords",
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000576};
Serhiy Storchaka43c97312019-09-10 13:02:30 +0300577static const char * const FormattedValue_fields[]={
Eric V. Smith235a6f02015-09-19 14:51:32 -0400578 "value",
579 "conversion",
580 "format_spec",
581};
Serhiy Storchaka43c97312019-09-10 13:02:30 +0300582static const char * const JoinedStr_fields[]={
Eric V. Smith235a6f02015-09-19 14:51:32 -0400583 "values",
584};
Serhiy Storchaka43c97312019-09-10 13:02:30 +0300585static const char * const Constant_fields[]={
Victor Stinnerf2c1aa12016-01-26 00:40:57 +0100586 "value",
Guido van Rossum10f8ce62019-03-13 13:00:46 -0700587 "kind",
Victor Stinnerf2c1aa12016-01-26 00:40:57 +0100588};
Serhiy Storchaka43c97312019-09-10 13:02:30 +0300589static const char * const Attribute_fields[]={
Victor Stinnerce72e1c2013-07-27 00:00:36 +0200590 "value",
591 "attr",
592 "ctx",
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000593};
Serhiy Storchaka43c97312019-09-10 13:02:30 +0300594static const char * const Subscript_fields[]={
Victor Stinnerce72e1c2013-07-27 00:00:36 +0200595 "value",
596 "slice",
597 "ctx",
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000598};
Serhiy Storchaka43c97312019-09-10 13:02:30 +0300599static const char * const Starred_fields[]={
Victor Stinnerce72e1c2013-07-27 00:00:36 +0200600 "value",
601 "ctx",
Guido van Rossum0368b722007-05-11 16:50:42 +0000602};
Serhiy Storchaka43c97312019-09-10 13:02:30 +0300603static const char * const Name_fields[]={
Victor Stinnerce72e1c2013-07-27 00:00:36 +0200604 "id",
605 "ctx",
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000606};
Serhiy Storchaka43c97312019-09-10 13:02:30 +0300607static const char * const List_fields[]={
Victor Stinnerce72e1c2013-07-27 00:00:36 +0200608 "elts",
609 "ctx",
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000610};
Serhiy Storchaka43c97312019-09-10 13:02:30 +0300611static const char * const Tuple_fields[]={
Victor Stinnerce72e1c2013-07-27 00:00:36 +0200612 "elts",
613 "ctx",
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000614};
Serhiy Storchaka43c97312019-09-10 13:02:30 +0300615static const char * const Slice_fields[]={
Victor Stinnerce72e1c2013-07-27 00:00:36 +0200616 "lower",
617 "upper",
618 "step",
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000619};
Brandt Bucher145bf262021-02-26 14:51:55 -0800620static const char * const MatchAs_fields[]={
621 "pattern",
622 "name",
623};
624static const char * const MatchOr_fields[]={
625 "patterns",
626};
Victor Stinner5cf47822020-11-02 22:03:28 +0100627static PyObject* ast2obj_expr_context(struct ast_state *state, expr_context_ty);
628static PyObject* ast2obj_boolop(struct ast_state *state, boolop_ty);
629static PyObject* ast2obj_operator(struct ast_state *state, operator_ty);
630static PyObject* ast2obj_unaryop(struct ast_state *state, unaryop_ty);
631static PyObject* ast2obj_cmpop(struct ast_state *state, cmpop_ty);
632static PyObject* ast2obj_comprehension(struct ast_state *state, void*);
Serhiy Storchaka43c97312019-09-10 13:02:30 +0300633static const char * const comprehension_fields[]={
Victor Stinnerce72e1c2013-07-27 00:00:36 +0200634 "target",
635 "iter",
636 "ifs",
Yury Selivanov52c4e7c2016-09-09 10:36:01 -0700637 "is_async",
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000638};
Serhiy Storchaka43c97312019-09-10 13:02:30 +0300639static const char * const excepthandler_attributes[] = {
Victor Stinnerce72e1c2013-07-27 00:00:36 +0200640 "lineno",
641 "col_offset",
Ivan Levkivskyi9932a222019-01-22 11:18:22 +0000642 "end_lineno",
643 "end_col_offset",
Neal Norwitzad74aa82008-03-31 05:14:30 +0000644};
Victor Stinner5cf47822020-11-02 22:03:28 +0100645static PyObject* ast2obj_excepthandler(struct ast_state *state, void*);
Serhiy Storchaka43c97312019-09-10 13:02:30 +0300646static const char * const ExceptHandler_fields[]={
Victor Stinnerce72e1c2013-07-27 00:00:36 +0200647 "type",
648 "name",
649 "body",
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000650};
Victor Stinner5cf47822020-11-02 22:03:28 +0100651static PyObject* ast2obj_arguments(struct ast_state *state, void*);
Serhiy Storchaka43c97312019-09-10 13:02:30 +0300652static const char * const arguments_fields[]={
Pablo Galindo8c77b8c2019-04-29 13:36:57 +0100653 "posonlyargs",
Pablo Galindocd6e83b2019-07-15 01:32:18 +0200654 "args",
Victor Stinnerce72e1c2013-07-27 00:00:36 +0200655 "vararg",
Victor Stinnerce72e1c2013-07-27 00:00:36 +0200656 "kwonlyargs",
Victor Stinnerce72e1c2013-07-27 00:00:36 +0200657 "kw_defaults",
Victor Stinneree4b59c2013-07-27 00:01:35 +0200658 "kwarg",
659 "defaults",
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000660};
Victor Stinner5cf47822020-11-02 22:03:28 +0100661static PyObject* ast2obj_arg(struct ast_state *state, void*);
Serhiy Storchaka43c97312019-09-10 13:02:30 +0300662static const char * const arg_attributes[] = {
Victor Stinneree4b59c2013-07-27 00:01:35 +0200663 "lineno",
664 "col_offset",
Ivan Levkivskyi9932a222019-01-22 11:18:22 +0000665 "end_lineno",
666 "end_col_offset",
Benjamin Petersoncda75be2013-03-18 10:48:58 -0700667};
Serhiy Storchaka43c97312019-09-10 13:02:30 +0300668static const char * const arg_fields[]={
Victor Stinnerce72e1c2013-07-27 00:00:36 +0200669 "arg",
670 "annotation",
Guido van Rossumdcfcd142019-01-31 03:40:27 -0800671 "type_comment",
Neal Norwitzc1505362006-12-28 06:47:50 +0000672};
Victor Stinner5cf47822020-11-02 22:03:28 +0100673static PyObject* ast2obj_keyword(struct ast_state *state, void*);
Pablo Galindo168660b2020-04-02 00:47:39 +0100674static const char * const keyword_attributes[] = {
675 "lineno",
676 "col_offset",
677 "end_lineno",
678 "end_col_offset",
679};
Serhiy Storchaka43c97312019-09-10 13:02:30 +0300680static const char * const keyword_fields[]={
Victor Stinnerce72e1c2013-07-27 00:00:36 +0200681 "arg",
682 "value",
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000683};
Victor Stinner5cf47822020-11-02 22:03:28 +0100684static PyObject* ast2obj_alias(struct ast_state *state, void*);
Serhiy Storchaka43c97312019-09-10 13:02:30 +0300685static const char * const alias_fields[]={
Victor Stinnerce72e1c2013-07-27 00:00:36 +0200686 "name",
687 "asname",
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000688};
Victor Stinner5cf47822020-11-02 22:03:28 +0100689static PyObject* ast2obj_withitem(struct ast_state *state, void*);
Serhiy Storchaka43c97312019-09-10 13:02:30 +0300690static const char * const withitem_fields[]={
Victor Stinnerce72e1c2013-07-27 00:00:36 +0200691 "context_expr",
692 "optional_vars",
Benjamin Petersonbf1bbc12011-05-27 13:58:08 -0500693};
Brandt Bucher145bf262021-02-26 14:51:55 -0800694static PyObject* ast2obj_match_case(struct ast_state *state, void*);
695static const char * const match_case_fields[]={
696 "pattern",
697 "guard",
698 "body",
699};
Victor Stinner5cf47822020-11-02 22:03:28 +0100700static PyObject* ast2obj_type_ignore(struct ast_state *state, void*);
Serhiy Storchaka43c97312019-09-10 13:02:30 +0300701static const char * const TypeIgnore_fields[]={
Guido van Rossumdcfcd142019-01-31 03:40:27 -0800702 "lineno",
Michael J. Sullivan933e1502019-05-22 07:54:20 -0700703 "tag",
Guido van Rossumdcfcd142019-01-31 03:40:27 -0800704};
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000705
706
INADA Naokifc489082017-01-25 22:33:43 +0900707
Benjamin Peterson7e0dbfb2012-03-12 09:46:44 -0700708typedef struct {
Victor Stinner45e50de2012-03-13 01:17:31 +0100709 PyObject_HEAD
Benjamin Peterson7e0dbfb2012-03-12 09:46:44 -0700710 PyObject *dict;
711} AST_object;
712
Benjamin Peterson1767e022012-03-14 21:50:29 -0500713static void
714ast_dealloc(AST_object *self)
715{
INADA Naokia6296d32017-08-24 14:55:17 +0900716 /* bpo-31095: UnTrack is needed before calling any callbacks */
Eddie Elizondo0247e802019-09-14 09:38:17 -0400717 PyTypeObject *tp = Py_TYPE(self);
INADA Naokia6296d32017-08-24 14:55:17 +0900718 PyObject_GC_UnTrack(self);
Benjamin Peterson1767e022012-03-14 21:50:29 -0500719 Py_CLEAR(self->dict);
Eddie Elizondo0247e802019-09-14 09:38:17 -0400720 freefunc free_func = PyType_GetSlot(tp, Py_tp_free);
721 assert(free_func != NULL);
722 free_func(self);
723 Py_DECREF(tp);
Benjamin Peterson1767e022012-03-14 21:50:29 -0500724}
725
Neal Norwitz207c9f32008-03-31 04:42:11 +0000726static int
Benjamin Peterson81071762012-07-08 11:03:46 -0700727ast_traverse(AST_object *self, visitproc visit, void *arg)
728{
Pablo Galindo1cf15af2020-05-27 10:03:38 +0100729 Py_VISIT(Py_TYPE(self));
Benjamin Peterson81071762012-07-08 11:03:46 -0700730 Py_VISIT(self->dict);
731 return 0;
732}
733
Serhiy Storchakaa5c42282018-05-31 07:34:34 +0300734static int
Benjamin Peterson81071762012-07-08 11:03:46 -0700735ast_clear(AST_object *self)
736{
737 Py_CLEAR(self->dict);
Serhiy Storchakaa5c42282018-05-31 07:34:34 +0300738 return 0;
Benjamin Peterson81071762012-07-08 11:03:46 -0700739}
740
741static int
Neal Norwitz207c9f32008-03-31 04:42:11 +0000742ast_type_init(PyObject *self, PyObject *args, PyObject *kw)
743{
Victor Stinner5cf47822020-11-02 22:03:28 +0100744 struct ast_state *state = get_ast_state();
Victor Stinner1f764532020-07-04 23:18:15 +0200745 if (state == NULL) {
746 return -1;
747 }
748
Neal Norwitz207c9f32008-03-31 04:42:11 +0000749 Py_ssize_t i, numfields = 0;
750 int res = -1;
751 PyObject *key, *value, *fields;
Victor Stinner74419f02020-07-03 11:35:37 +0200752 if (_PyObject_LookupAttr((PyObject*)Py_TYPE(self), state->_fields, &fields) < 0) {
Serhiy Storchakaf320be72018-01-25 10:49:40 +0200753 goto cleanup;
754 }
Neal Norwitz207c9f32008-03-31 04:42:11 +0000755 if (fields) {
756 numfields = PySequence_Size(fields);
Rémi Lapeyrec73914a2020-05-24 23:12:57 +0200757 if (numfields == -1) {
Neal Norwitz207c9f32008-03-31 04:42:11 +0000758 goto cleanup;
Rémi Lapeyrec73914a2020-05-24 23:12:57 +0200759 }
Neal Norwitz207c9f32008-03-31 04:42:11 +0000760 }
INADA Naoki4c78c522017-02-24 02:48:17 +0900761
Neal Norwitz207c9f32008-03-31 04:42:11 +0000762 res = 0; /* if no error occurs, this stays 0 to the end */
INADA Naoki4c78c522017-02-24 02:48:17 +0900763 if (numfields < PyTuple_GET_SIZE(args)) {
764 PyErr_Format(PyExc_TypeError, "%.400s constructor takes at most "
765 "%zd positional argument%s",
Dino Viehlandac46eb42019-09-11 10:16:34 -0700766 _PyType_Name(Py_TYPE(self)),
INADA Naoki4c78c522017-02-24 02:48:17 +0900767 numfields, numfields == 1 ? "" : "s");
768 res = -1;
769 goto cleanup;
770 }
771 for (i = 0; i < PyTuple_GET_SIZE(args); i++) {
772 /* cannot be reached when fields is NULL */
773 PyObject *name = PySequence_GetItem(fields, i);
774 if (!name) {
Neal Norwitz207c9f32008-03-31 04:42:11 +0000775 res = -1;
776 goto cleanup;
777 }
INADA Naoki4c78c522017-02-24 02:48:17 +0900778 res = PyObject_SetAttr(self, name, PyTuple_GET_ITEM(args, i));
779 Py_DECREF(name);
Rémi Lapeyrec73914a2020-05-24 23:12:57 +0200780 if (res < 0) {
INADA Naoki4c78c522017-02-24 02:48:17 +0900781 goto cleanup;
Rémi Lapeyrec73914a2020-05-24 23:12:57 +0200782 }
Neal Norwitz207c9f32008-03-31 04:42:11 +0000783 }
784 if (kw) {
785 i = 0; /* needed by PyDict_Next */
786 while (PyDict_Next(kw, &i, &key, &value)) {
Rémi Lapeyrec73914a2020-05-24 23:12:57 +0200787 int contains = PySequence_Contains(fields, key);
788 if (contains == -1) {
789 res = -1;
Neal Norwitz207c9f32008-03-31 04:42:11 +0000790 goto cleanup;
Rémi Lapeyrec73914a2020-05-24 23:12:57 +0200791 } else if (contains == 1) {
792 Py_ssize_t p = PySequence_Index(fields, key);
793 if (p == -1) {
794 res = -1;
795 goto cleanup;
796 }
797 if (p < PyTuple_GET_SIZE(args)) {
798 PyErr_Format(PyExc_TypeError,
799 "%.400s got multiple values for argument '%U'",
800 Py_TYPE(self)->tp_name, key);
801 res = -1;
802 goto cleanup;
803 }
804 }
805 res = PyObject_SetAttr(self, key, value);
806 if (res < 0) {
807 goto cleanup;
808 }
Neal Norwitz207c9f32008-03-31 04:42:11 +0000809 }
810 }
811 cleanup:
812 Py_XDECREF(fields);
813 return res;
814}
815
Neal Norwitzee9b10a2008-03-31 05:29:39 +0000816/* Pickling support */
817static PyObject *
818ast_type_reduce(PyObject *self, PyObject *unused)
819{
Victor Stinner5cf47822020-11-02 22:03:28 +0100820 struct ast_state *state = get_ast_state();
Victor Stinnerb1cc6ba2020-07-03 20:01:46 +0200821 if (state == NULL) {
822 return NULL;
823 }
824
Serhiy Storchakaf320be72018-01-25 10:49:40 +0200825 PyObject *dict;
Victor Stinner74419f02020-07-03 11:35:37 +0200826 if (_PyObject_LookupAttr(self, state->__dict__, &dict) < 0) {
Serhiy Storchakaf320be72018-01-25 10:49:40 +0200827 return NULL;
Neal Norwitzee9b10a2008-03-31 05:29:39 +0000828 }
829 if (dict) {
Serhiy Storchakaf320be72018-01-25 10:49:40 +0200830 return Py_BuildValue("O()N", Py_TYPE(self), dict);
Neal Norwitzee9b10a2008-03-31 05:29:39 +0000831 }
832 return Py_BuildValue("O()", Py_TYPE(self));
833}
834
Eddie Elizondo3368f3c2019-09-19 09:29:05 -0700835static PyMemberDef ast_type_members[] = {
836 {"__dictoffset__", T_PYSSIZET, offsetof(AST_object, dict), READONLY},
837 {NULL} /* Sentinel */
838};
839
Neal Norwitzee9b10a2008-03-31 05:29:39 +0000840static PyMethodDef ast_type_methods[] = {
841 {"__reduce__", ast_type_reduce, METH_NOARGS, NULL},
842 {NULL}
843};
844
Benjamin Peterson7e0dbfb2012-03-12 09:46:44 -0700845static PyGetSetDef ast_type_getsets[] = {
846 {"__dict__", PyObject_GenericGetDict, PyObject_GenericSetDict},
847 {NULL}
848};
849
Dino Viehlandac46eb42019-09-11 10:16:34 -0700850static PyType_Slot AST_type_slots[] = {
851 {Py_tp_dealloc, ast_dealloc},
852 {Py_tp_getattro, PyObject_GenericGetAttr},
853 {Py_tp_setattro, PyObject_GenericSetAttr},
854 {Py_tp_traverse, ast_traverse},
855 {Py_tp_clear, ast_clear},
Eddie Elizondo3368f3c2019-09-19 09:29:05 -0700856 {Py_tp_members, ast_type_members},
Dino Viehlandac46eb42019-09-11 10:16:34 -0700857 {Py_tp_methods, ast_type_methods},
858 {Py_tp_getset, ast_type_getsets},
859 {Py_tp_init, ast_type_init},
860 {Py_tp_alloc, PyType_GenericAlloc},
861 {Py_tp_new, PyType_GenericNew},
Dino Viehlandac46eb42019-09-11 10:16:34 -0700862 {Py_tp_free, PyObject_GC_Del},
863 {0, 0},
864};
865
866static PyType_Spec AST_type_spec = {
Serhiy Storchakabace59d2020-03-22 20:33:34 +0200867 "ast.AST",
Benjamin Peterson7e0dbfb2012-03-12 09:46:44 -0700868 sizeof(AST_object),
Neal Norwitz207c9f32008-03-31 04:42:11 +0000869 0,
Dino Viehlandac46eb42019-09-11 10:16:34 -0700870 Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE | Py_TPFLAGS_HAVE_GC,
871 AST_type_slots
Neal Norwitz207c9f32008-03-31 04:42:11 +0000872};
873
Dino Viehlandac46eb42019-09-11 10:16:34 -0700874static PyObject *
Victor Stinner5cf47822020-11-02 22:03:28 +0100875make_type(struct ast_state *state, const char *type, PyObject* base,
Victor Stinner74419f02020-07-03 11:35:37 +0200876 const char* const* fields, int num_fields, const char *doc)
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000877{
878 PyObject *fnames, *result;
879 int i;
Neal Norwitzee9b10a2008-03-31 05:29:39 +0000880 fnames = PyTuple_New(num_fields);
881 if (!fnames) return NULL;
882 for (i = 0; i < num_fields; i++) {
Serhiy Storchaka43c97312019-09-10 13:02:30 +0300883 PyObject *field = PyUnicode_InternFromString(fields[i]);
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000884 if (!field) {
885 Py_DECREF(fnames);
886 return NULL;
887 }
888 PyTuple_SET_ITEM(fnames, i, field);
889 }
Brandt Bucher145bf262021-02-26 14:51:55 -0800890 result = PyObject_CallFunction((PyObject*)&PyType_Type, "s(O){OOOOOOOs}",
INADA Naokifc489082017-01-25 22:33:43 +0900891 type, base,
Victor Stinner74419f02020-07-03 11:35:37 +0200892 state->_fields, fnames,
Brandt Bucher145bf262021-02-26 14:51:55 -0800893 state->__match_args__, fnames,
Victor Stinner74419f02020-07-03 11:35:37 +0200894 state->__module__,
895 state->ast,
896 state->__doc__, doc);
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000897 Py_DECREF(fnames);
Dino Viehlandac46eb42019-09-11 10:16:34 -0700898 return result;
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000899}
900
Serhiy Storchaka43c97312019-09-10 13:02:30 +0300901static int
Victor Stinner5cf47822020-11-02 22:03:28 +0100902add_attributes(struct ast_state *state, PyObject *type, const char * const *attrs, int num_fields)
Martin v. Löwis577b5b92006-02-27 15:23:19 +0000903{
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000904 int i, result;
Neal Norwitz207c9f32008-03-31 04:42:11 +0000905 PyObject *s, *l = PyTuple_New(num_fields);
Benjamin Peterson3e5cd1d2010-06-27 21:45:24 +0000906 if (!l)
907 return 0;
908 for (i = 0; i < num_fields; i++) {
Serhiy Storchaka43c97312019-09-10 13:02:30 +0300909 s = PyUnicode_InternFromString(attrs[i]);
Martin v. Löwis577b5b92006-02-27 15:23:19 +0000910 if (!s) {
911 Py_DECREF(l);
912 return 0;
913 }
Neal Norwitz207c9f32008-03-31 04:42:11 +0000914 PyTuple_SET_ITEM(l, i, s);
Martin v. Löwis577b5b92006-02-27 15:23:19 +0000915 }
Victor Stinner74419f02020-07-03 11:35:37 +0200916 result = PyObject_SetAttr(type, state->_attributes, l) >= 0;
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000917 Py_DECREF(l);
918 return result;
Martin v. Löwis577b5b92006-02-27 15:23:19 +0000919}
920
Martin v. Löwis618dc5e2008-03-30 20:03:44 +0000921/* Conversion AST -> Python */
922
Victor Stinner5cf47822020-11-02 22:03:28 +0100923static PyObject* ast2obj_list(struct ast_state *state, asdl_seq *seq, PyObject* (*func)(struct ast_state *state, void*))
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000924{
Benjamin Peterson77fa9372012-05-15 10:10:27 -0700925 Py_ssize_t i, n = asdl_seq_LEN(seq);
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000926 PyObject *result = PyList_New(n);
927 PyObject *value;
928 if (!result)
929 return NULL;
930 for (i = 0; i < n; i++) {
Pablo Galindoa5634c42020-09-16 19:42:00 +0100931 value = func(state, asdl_seq_GET_UNTYPED(seq, i));
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000932 if (!value) {
933 Py_DECREF(result);
934 return NULL;
935 }
936 PyList_SET_ITEM(result, i, value);
937 }
938 return result;
939}
940
Victor Stinner5cf47822020-11-02 22:03:28 +0100941static PyObject* ast2obj_object(struct ast_state *Py_UNUSED(state), void *o)
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000942{
943 if (!o)
944 o = Py_None;
945 Py_INCREF((PyObject*)o);
946 return (PyObject*)o;
947}
Victor Stinnerf2c1aa12016-01-26 00:40:57 +0100948#define ast2obj_constant ast2obj_object
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000949#define ast2obj_identifier ast2obj_object
950#define ast2obj_string ast2obj_object
Martin v. Löwisbd260da2006-02-26 19:42:26 +0000951
Victor Stinner5cf47822020-11-02 22:03:28 +0100952static PyObject* ast2obj_int(struct ast_state *Py_UNUSED(state), long b)
Martin v. Löwis577b5b92006-02-27 15:23:19 +0000953{
Christian Heimes217cfd12007-12-02 14:31:20 +0000954 return PyLong_FromLong(b);
Martin v. Löwis577b5b92006-02-27 15:23:19 +0000955}
956
Martin v. Löwis618dc5e2008-03-30 20:03:44 +0000957/* Conversion Python -> AST */
958
Victor Stinner5cf47822020-11-02 22:03:28 +0100959static int obj2ast_object(struct ast_state *Py_UNUSED(state), PyObject* obj, PyObject** out, PyArena* arena)
Martin v. Löwis618dc5e2008-03-30 20:03:44 +0000960{
961 if (obj == Py_None)
962 obj = NULL;
Christian Heimes70c94e72013-07-27 00:33:13 +0200963 if (obj) {
964 if (PyArena_AddPyObject(arena, obj) < 0) {
965 *out = NULL;
966 return -1;
967 }
968 Py_INCREF(obj);
969 }
Martin v. Löwis618dc5e2008-03-30 20:03:44 +0000970 *out = obj;
971 return 0;
972}
973
Victor Stinner5cf47822020-11-02 22:03:28 +0100974static int obj2ast_constant(struct ast_state *Py_UNUSED(state), PyObject* obj, PyObject** out, PyArena* arena)
Victor Stinnerf2c1aa12016-01-26 00:40:57 +0100975{
Serhiy Storchaka3f228112018-09-27 17:42:37 +0300976 if (PyArena_AddPyObject(arena, obj) < 0) {
977 *out = NULL;
978 return -1;
Victor Stinnerf2c1aa12016-01-26 00:40:57 +0100979 }
Serhiy Storchaka3f228112018-09-27 17:42:37 +0300980 Py_INCREF(obj);
Victor Stinnerf2c1aa12016-01-26 00:40:57 +0100981 *out = obj;
982 return 0;
983}
984
Victor Stinner5cf47822020-11-02 22:03:28 +0100985static int obj2ast_identifier(struct ast_state *state, PyObject* obj, PyObject** out, PyArena* arena)
Benjamin Peterson2193d2b2011-07-22 10:50:23 -0500986{
Benjamin Peterson180e6352011-07-22 11:09:07 -0500987 if (!PyUnicode_CheckExact(obj) && obj != Py_None) {
988 PyErr_SetString(PyExc_TypeError, "AST identifier must be of type str");
Benjamin Peterson2193d2b2011-07-22 10:50:23 -0500989 return 1;
990 }
Victor Stinner74419f02020-07-03 11:35:37 +0200991 return obj2ast_object(state, obj, out, arena);
Benjamin Peterson2193d2b2011-07-22 10:50:23 -0500992}
993
Victor Stinner5cf47822020-11-02 22:03:28 +0100994static int obj2ast_string(struct ast_state *state, PyObject* obj, PyObject** out, PyArena* arena)
Guido van Rossumdcfcd142019-01-31 03:40:27 -0800995{
996 if (!PyUnicode_CheckExact(obj) && !PyBytes_CheckExact(obj)) {
997 PyErr_SetString(PyExc_TypeError, "AST string must be of type str");
998 return 1;
999 }
Victor Stinner74419f02020-07-03 11:35:37 +02001000 return obj2ast_object(state, obj, out, arena);
Guido van Rossumdcfcd142019-01-31 03:40:27 -08001001}
1002
Victor Stinner5cf47822020-11-02 22:03:28 +01001003static int obj2ast_int(struct ast_state* Py_UNUSED(state), PyObject* obj, int* out, PyArena* arena)
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00001004{
1005 int i;
1006 if (!PyLong_Check(obj)) {
Amaury Forgeot d'Arc5e8f8102011-11-22 21:52:30 +01001007 PyErr_Format(PyExc_ValueError, "invalid integer value: %R", obj);
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00001008 return 1;
1009 }
1010
Serhiy Storchaka56f6e762015-09-06 21:25:30 +03001011 i = _PyLong_AsInt(obj);
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00001012 if (i == -1 && PyErr_Occurred())
1013 return 1;
1014 *out = i;
1015 return 0;
1016}
1017
Victor Stinner5cf47822020-11-02 22:03:28 +01001018static int add_ast_fields(struct ast_state *state)
Benjamin Petersonce825f12008-10-24 23:11:02 +00001019{
Dino Viehlandac46eb42019-09-11 10:16:34 -07001020 PyObject *empty_tuple;
Benjamin Petersonce825f12008-10-24 23:11:02 +00001021 empty_tuple = PyTuple_New(0);
1022 if (!empty_tuple ||
Victor Stinner74419f02020-07-03 11:35:37 +02001023 PyObject_SetAttrString(state->AST_type, "_fields", empty_tuple) < 0 ||
Brandt Bucher145bf262021-02-26 14:51:55 -08001024 PyObject_SetAttrString(state->AST_type, "__match_args__", empty_tuple) < 0 ||
Victor Stinner74419f02020-07-03 11:35:37 +02001025 PyObject_SetAttrString(state->AST_type, "_attributes", empty_tuple) < 0) {
Benjamin Petersonce825f12008-10-24 23:11:02 +00001026 Py_XDECREF(empty_tuple);
1027 return -1;
1028 }
1029 Py_DECREF(empty_tuple);
1030 return 0;
1031}
1032
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00001033
Victor Stinnerfd957c12020-11-03 18:07:15 +01001034
1035static int
1036init_types(struct ast_state *state)
Martin v. Löwisbd260da2006-02-26 19:42:26 +00001037{
Victor Stinnerfd957c12020-11-03 18:07:15 +01001038 // init_types() must not be called after _PyAST_Fini()
1039 // has been called
1040 assert(state->initialized >= 0);
1041
1042 if (state->initialized) {
1043 return 1;
1044 }
1045 if (init_identifiers(state) < 0) {
1046 return 0;
1047 }
Dino Viehlandac46eb42019-09-11 10:16:34 -07001048 state->AST_type = PyType_FromSpec(&AST_type_spec);
Victor Stinnerfd957c12020-11-03 18:07:15 +01001049 if (!state->AST_type) {
1050 return 0;
1051 }
1052 if (add_ast_fields(state) < 0) {
1053 return 0;
1054 }
Victor Stinner74419f02020-07-03 11:35:37 +02001055 state->mod_type = make_type(state, "mod", state->AST_type, NULL, 0,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001056 "mod = Module(stmt* body, type_ignore* type_ignores)\n"
1057 " | Interactive(stmt* body)\n"
1058 " | Expression(expr body)\n"
1059 " | FunctionType(expr* argtypes, expr returns)");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001060 if (!state->mod_type) return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001061 if (!add_attributes(state, state->mod_type, NULL, 0)) return 0;
1062 state->Module_type = make_type(state, "Module", state->mod_type,
1063 Module_fields, 2,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001064 "Module(stmt* body, type_ignore* type_ignores)");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001065 if (!state->Module_type) return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001066 state->Interactive_type = make_type(state, "Interactive", state->mod_type,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001067 Interactive_fields, 1,
1068 "Interactive(stmt* body)");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001069 if (!state->Interactive_type) return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001070 state->Expression_type = make_type(state, "Expression", state->mod_type,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001071 Expression_fields, 1,
1072 "Expression(expr body)");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001073 if (!state->Expression_type) return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001074 state->FunctionType_type = make_type(state, "FunctionType",
1075 state->mod_type, FunctionType_fields,
1076 2,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001077 "FunctionType(expr* argtypes, expr returns)");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001078 if (!state->FunctionType_type) return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001079 state->stmt_type = make_type(state, "stmt", state->AST_type, NULL, 0,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001080 "stmt = FunctionDef(identifier name, arguments args, stmt* body, expr* decorator_list, expr? returns, string? type_comment)\n"
1081 " | AsyncFunctionDef(identifier name, arguments args, stmt* body, expr* decorator_list, expr? returns, string? type_comment)\n"
1082 " | ClassDef(identifier name, expr* bases, keyword* keywords, stmt* body, expr* decorator_list)\n"
1083 " | Return(expr? value)\n"
1084 " | Delete(expr* targets)\n"
1085 " | Assign(expr* targets, expr value, string? type_comment)\n"
1086 " | AugAssign(expr target, operator op, expr value)\n"
1087 " | AnnAssign(expr target, expr annotation, expr? value, int simple)\n"
1088 " | For(expr target, expr iter, stmt* body, stmt* orelse, string? type_comment)\n"
1089 " | AsyncFor(expr target, expr iter, stmt* body, stmt* orelse, string? type_comment)\n"
1090 " | While(expr test, stmt* body, stmt* orelse)\n"
1091 " | If(expr test, stmt* body, stmt* orelse)\n"
1092 " | With(withitem* items, stmt* body, string? type_comment)\n"
1093 " | AsyncWith(withitem* items, stmt* body, string? type_comment)\n"
Brandt Bucher145bf262021-02-26 14:51:55 -08001094 " | Match(expr subject, match_case* cases)\n"
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001095 " | Raise(expr? exc, expr? cause)\n"
1096 " | Try(stmt* body, excepthandler* handlers, stmt* orelse, stmt* finalbody)\n"
1097 " | Assert(expr test, expr? msg)\n"
1098 " | Import(alias* names)\n"
1099 " | ImportFrom(identifier? module, alias* names, int? level)\n"
1100 " | Global(identifier* names)\n"
1101 " | Nonlocal(identifier* names)\n"
1102 " | Expr(expr value)\n"
1103 " | Pass\n"
1104 " | Break\n"
1105 " | Continue");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001106 if (!state->stmt_type) return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001107 if (!add_attributes(state, state->stmt_type, stmt_attributes, 4)) return 0;
Serhiy Storchakab7e95252020-03-10 00:07:47 +02001108 if (PyObject_SetAttr(state->stmt_type, state->end_lineno, Py_None) == -1)
1109 return 0;
1110 if (PyObject_SetAttr(state->stmt_type, state->end_col_offset, Py_None) ==
1111 -1)
1112 return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001113 state->FunctionDef_type = make_type(state, "FunctionDef", state->stmt_type,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001114 FunctionDef_fields, 6,
1115 "FunctionDef(identifier name, arguments args, stmt* body, expr* decorator_list, expr? returns, string? type_comment)");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001116 if (!state->FunctionDef_type) return 0;
Serhiy Storchakab7e95252020-03-10 00:07:47 +02001117 if (PyObject_SetAttr(state->FunctionDef_type, state->returns, Py_None) ==
1118 -1)
1119 return 0;
1120 if (PyObject_SetAttr(state->FunctionDef_type, state->type_comment, Py_None)
1121 == -1)
1122 return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001123 state->AsyncFunctionDef_type = make_type(state, "AsyncFunctionDef",
Dino Viehlandac46eb42019-09-11 10:16:34 -07001124 state->stmt_type,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001125 AsyncFunctionDef_fields, 6,
1126 "AsyncFunctionDef(identifier name, arguments args, stmt* body, expr* decorator_list, expr? returns, string? type_comment)");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001127 if (!state->AsyncFunctionDef_type) return 0;
Serhiy Storchakab7e95252020-03-10 00:07:47 +02001128 if (PyObject_SetAttr(state->AsyncFunctionDef_type, state->returns, Py_None)
1129 == -1)
1130 return 0;
1131 if (PyObject_SetAttr(state->AsyncFunctionDef_type, state->type_comment,
1132 Py_None) == -1)
1133 return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001134 state->ClassDef_type = make_type(state, "ClassDef", state->stmt_type,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001135 ClassDef_fields, 5,
1136 "ClassDef(identifier name, expr* bases, keyword* keywords, stmt* body, expr* decorator_list)");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001137 if (!state->ClassDef_type) return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001138 state->Return_type = make_type(state, "Return", state->stmt_type,
1139 Return_fields, 1,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001140 "Return(expr? value)");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001141 if (!state->Return_type) return 0;
Serhiy Storchakab7e95252020-03-10 00:07:47 +02001142 if (PyObject_SetAttr(state->Return_type, state->value, Py_None) == -1)
1143 return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001144 state->Delete_type = make_type(state, "Delete", state->stmt_type,
1145 Delete_fields, 1,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001146 "Delete(expr* targets)");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001147 if (!state->Delete_type) return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001148 state->Assign_type = make_type(state, "Assign", state->stmt_type,
1149 Assign_fields, 3,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001150 "Assign(expr* targets, expr value, string? type_comment)");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001151 if (!state->Assign_type) return 0;
Serhiy Storchakab7e95252020-03-10 00:07:47 +02001152 if (PyObject_SetAttr(state->Assign_type, state->type_comment, Py_None) ==
1153 -1)
1154 return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001155 state->AugAssign_type = make_type(state, "AugAssign", state->stmt_type,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001156 AugAssign_fields, 3,
1157 "AugAssign(expr target, operator op, expr value)");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001158 if (!state->AugAssign_type) return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001159 state->AnnAssign_type = make_type(state, "AnnAssign", state->stmt_type,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001160 AnnAssign_fields, 4,
1161 "AnnAssign(expr target, expr annotation, expr? value, int simple)");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001162 if (!state->AnnAssign_type) return 0;
Serhiy Storchakab7e95252020-03-10 00:07:47 +02001163 if (PyObject_SetAttr(state->AnnAssign_type, state->value, Py_None) == -1)
1164 return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001165 state->For_type = make_type(state, "For", state->stmt_type, For_fields, 5,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001166 "For(expr target, expr iter, stmt* body, stmt* orelse, string? type_comment)");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001167 if (!state->For_type) return 0;
Serhiy Storchakab7e95252020-03-10 00:07:47 +02001168 if (PyObject_SetAttr(state->For_type, state->type_comment, Py_None) == -1)
1169 return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001170 state->AsyncFor_type = make_type(state, "AsyncFor", state->stmt_type,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001171 AsyncFor_fields, 5,
1172 "AsyncFor(expr target, expr iter, stmt* body, stmt* orelse, string? type_comment)");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001173 if (!state->AsyncFor_type) return 0;
Serhiy Storchakab7e95252020-03-10 00:07:47 +02001174 if (PyObject_SetAttr(state->AsyncFor_type, state->type_comment, Py_None) ==
1175 -1)
1176 return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001177 state->While_type = make_type(state, "While", state->stmt_type,
1178 While_fields, 3,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001179 "While(expr test, stmt* body, stmt* orelse)");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001180 if (!state->While_type) return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001181 state->If_type = make_type(state, "If", state->stmt_type, If_fields, 3,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001182 "If(expr test, stmt* body, stmt* orelse)");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001183 if (!state->If_type) return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001184 state->With_type = make_type(state, "With", state->stmt_type, With_fields,
1185 3,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001186 "With(withitem* items, stmt* body, string? type_comment)");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001187 if (!state->With_type) return 0;
Serhiy Storchakab7e95252020-03-10 00:07:47 +02001188 if (PyObject_SetAttr(state->With_type, state->type_comment, Py_None) == -1)
1189 return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001190 state->AsyncWith_type = make_type(state, "AsyncWith", state->stmt_type,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001191 AsyncWith_fields, 3,
1192 "AsyncWith(withitem* items, stmt* body, string? type_comment)");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001193 if (!state->AsyncWith_type) return 0;
Serhiy Storchakab7e95252020-03-10 00:07:47 +02001194 if (PyObject_SetAttr(state->AsyncWith_type, state->type_comment, Py_None)
1195 == -1)
1196 return 0;
Brandt Bucher145bf262021-02-26 14:51:55 -08001197 state->Match_type = make_type(state, "Match", state->stmt_type,
1198 Match_fields, 2,
1199 "Match(expr subject, match_case* cases)");
1200 if (!state->Match_type) return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001201 state->Raise_type = make_type(state, "Raise", state->stmt_type,
1202 Raise_fields, 2,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001203 "Raise(expr? exc, expr? cause)");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001204 if (!state->Raise_type) return 0;
Serhiy Storchakab7e95252020-03-10 00:07:47 +02001205 if (PyObject_SetAttr(state->Raise_type, state->exc, Py_None) == -1)
1206 return 0;
1207 if (PyObject_SetAttr(state->Raise_type, state->cause, Py_None) == -1)
1208 return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001209 state->Try_type = make_type(state, "Try", state->stmt_type, Try_fields, 4,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001210 "Try(stmt* body, excepthandler* handlers, stmt* orelse, stmt* finalbody)");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001211 if (!state->Try_type) return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001212 state->Assert_type = make_type(state, "Assert", state->stmt_type,
1213 Assert_fields, 2,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001214 "Assert(expr test, expr? msg)");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001215 if (!state->Assert_type) return 0;
Serhiy Storchakab7e95252020-03-10 00:07:47 +02001216 if (PyObject_SetAttr(state->Assert_type, state->msg, Py_None) == -1)
1217 return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001218 state->Import_type = make_type(state, "Import", state->stmt_type,
1219 Import_fields, 1,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001220 "Import(alias* names)");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001221 if (!state->Import_type) return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001222 state->ImportFrom_type = make_type(state, "ImportFrom", state->stmt_type,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001223 ImportFrom_fields, 3,
1224 "ImportFrom(identifier? module, alias* names, int? level)");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001225 if (!state->ImportFrom_type) return 0;
Serhiy Storchakab7e95252020-03-10 00:07:47 +02001226 if (PyObject_SetAttr(state->ImportFrom_type, state->module, Py_None) == -1)
1227 return 0;
1228 if (PyObject_SetAttr(state->ImportFrom_type, state->level, Py_None) == -1)
1229 return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001230 state->Global_type = make_type(state, "Global", state->stmt_type,
1231 Global_fields, 1,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001232 "Global(identifier* names)");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001233 if (!state->Global_type) return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001234 state->Nonlocal_type = make_type(state, "Nonlocal", state->stmt_type,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001235 Nonlocal_fields, 1,
1236 "Nonlocal(identifier* names)");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001237 if (!state->Nonlocal_type) return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001238 state->Expr_type = make_type(state, "Expr", state->stmt_type, Expr_fields,
1239 1,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001240 "Expr(expr value)");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001241 if (!state->Expr_type) return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001242 state->Pass_type = make_type(state, "Pass", state->stmt_type, NULL, 0,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001243 "Pass");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001244 if (!state->Pass_type) return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001245 state->Break_type = make_type(state, "Break", state->stmt_type, NULL, 0,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001246 "Break");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001247 if (!state->Break_type) return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001248 state->Continue_type = make_type(state, "Continue", state->stmt_type, NULL,
1249 0,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001250 "Continue");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001251 if (!state->Continue_type) return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001252 state->expr_type = make_type(state, "expr", state->AST_type, NULL, 0,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001253 "expr = BoolOp(boolop op, expr* values)\n"
1254 " | NamedExpr(expr target, expr value)\n"
1255 " | BinOp(expr left, operator op, expr right)\n"
1256 " | UnaryOp(unaryop op, expr operand)\n"
1257 " | Lambda(arguments args, expr body)\n"
1258 " | IfExp(expr test, expr body, expr orelse)\n"
1259 " | Dict(expr* keys, expr* values)\n"
1260 " | Set(expr* elts)\n"
1261 " | ListComp(expr elt, comprehension* generators)\n"
1262 " | SetComp(expr elt, comprehension* generators)\n"
1263 " | DictComp(expr key, expr value, comprehension* generators)\n"
1264 " | GeneratorExp(expr elt, comprehension* generators)\n"
1265 " | Await(expr value)\n"
1266 " | Yield(expr? value)\n"
1267 " | YieldFrom(expr value)\n"
1268 " | Compare(expr left, cmpop* ops, expr* comparators)\n"
1269 " | Call(expr func, expr* args, keyword* keywords)\n"
1270 " | FormattedValue(expr value, int? conversion, expr? format_spec)\n"
1271 " | JoinedStr(expr* values)\n"
1272 " | Constant(constant value, string? kind)\n"
1273 " | Attribute(expr value, identifier attr, expr_context ctx)\n"
1274 " | Subscript(expr value, expr slice, expr_context ctx)\n"
1275 " | Starred(expr value, expr_context ctx)\n"
1276 " | Name(identifier id, expr_context ctx)\n"
1277 " | List(expr* elts, expr_context ctx)\n"
1278 " | Tuple(expr* elts, expr_context ctx)\n"
Brandt Bucher145bf262021-02-26 14:51:55 -08001279 " | Slice(expr? lower, expr? upper, expr? step)\n"
1280 " | MatchAs(expr pattern, identifier name)\n"
1281 " | MatchOr(expr* patterns)");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001282 if (!state->expr_type) return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001283 if (!add_attributes(state, state->expr_type, expr_attributes, 4)) return 0;
Serhiy Storchakab7e95252020-03-10 00:07:47 +02001284 if (PyObject_SetAttr(state->expr_type, state->end_lineno, Py_None) == -1)
1285 return 0;
1286 if (PyObject_SetAttr(state->expr_type, state->end_col_offset, Py_None) ==
1287 -1)
1288 return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001289 state->BoolOp_type = make_type(state, "BoolOp", state->expr_type,
1290 BoolOp_fields, 2,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001291 "BoolOp(boolop op, expr* values)");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001292 if (!state->BoolOp_type) return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001293 state->NamedExpr_type = make_type(state, "NamedExpr", state->expr_type,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001294 NamedExpr_fields, 2,
1295 "NamedExpr(expr target, expr value)");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001296 if (!state->NamedExpr_type) return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001297 state->BinOp_type = make_type(state, "BinOp", state->expr_type,
1298 BinOp_fields, 3,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001299 "BinOp(expr left, operator op, expr right)");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001300 if (!state->BinOp_type) return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001301 state->UnaryOp_type = make_type(state, "UnaryOp", state->expr_type,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001302 UnaryOp_fields, 2,
1303 "UnaryOp(unaryop op, expr operand)");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001304 if (!state->UnaryOp_type) return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001305 state->Lambda_type = make_type(state, "Lambda", state->expr_type,
1306 Lambda_fields, 2,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001307 "Lambda(arguments args, expr body)");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001308 if (!state->Lambda_type) return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001309 state->IfExp_type = make_type(state, "IfExp", state->expr_type,
1310 IfExp_fields, 3,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001311 "IfExp(expr test, expr body, expr orelse)");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001312 if (!state->IfExp_type) return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001313 state->Dict_type = make_type(state, "Dict", state->expr_type, Dict_fields,
1314 2,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001315 "Dict(expr* keys, expr* values)");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001316 if (!state->Dict_type) return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001317 state->Set_type = make_type(state, "Set", state->expr_type, Set_fields, 1,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001318 "Set(expr* elts)");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001319 if (!state->Set_type) return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001320 state->ListComp_type = make_type(state, "ListComp", state->expr_type,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001321 ListComp_fields, 2,
1322 "ListComp(expr elt, comprehension* generators)");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001323 if (!state->ListComp_type) return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001324 state->SetComp_type = make_type(state, "SetComp", state->expr_type,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001325 SetComp_fields, 2,
1326 "SetComp(expr elt, comprehension* generators)");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001327 if (!state->SetComp_type) return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001328 state->DictComp_type = make_type(state, "DictComp", state->expr_type,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001329 DictComp_fields, 3,
1330 "DictComp(expr key, expr value, comprehension* generators)");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001331 if (!state->DictComp_type) return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001332 state->GeneratorExp_type = make_type(state, "GeneratorExp",
1333 state->expr_type, GeneratorExp_fields,
1334 2,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001335 "GeneratorExp(expr elt, comprehension* generators)");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001336 if (!state->GeneratorExp_type) return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001337 state->Await_type = make_type(state, "Await", state->expr_type,
1338 Await_fields, 1,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001339 "Await(expr value)");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001340 if (!state->Await_type) return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001341 state->Yield_type = make_type(state, "Yield", state->expr_type,
1342 Yield_fields, 1,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001343 "Yield(expr? value)");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001344 if (!state->Yield_type) return 0;
Serhiy Storchakab7e95252020-03-10 00:07:47 +02001345 if (PyObject_SetAttr(state->Yield_type, state->value, Py_None) == -1)
1346 return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001347 state->YieldFrom_type = make_type(state, "YieldFrom", state->expr_type,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001348 YieldFrom_fields, 1,
1349 "YieldFrom(expr value)");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001350 if (!state->YieldFrom_type) return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001351 state->Compare_type = make_type(state, "Compare", state->expr_type,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001352 Compare_fields, 3,
1353 "Compare(expr left, cmpop* ops, expr* comparators)");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001354 if (!state->Compare_type) return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001355 state->Call_type = make_type(state, "Call", state->expr_type, Call_fields,
1356 3,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001357 "Call(expr func, expr* args, keyword* keywords)");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001358 if (!state->Call_type) return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001359 state->FormattedValue_type = make_type(state, "FormattedValue",
1360 state->expr_type,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001361 FormattedValue_fields, 3,
1362 "FormattedValue(expr value, int? conversion, expr? format_spec)");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001363 if (!state->FormattedValue_type) return 0;
Serhiy Storchakab7e95252020-03-10 00:07:47 +02001364 if (PyObject_SetAttr(state->FormattedValue_type, state->conversion,
1365 Py_None) == -1)
1366 return 0;
1367 if (PyObject_SetAttr(state->FormattedValue_type, state->format_spec,
1368 Py_None) == -1)
1369 return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001370 state->JoinedStr_type = make_type(state, "JoinedStr", state->expr_type,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001371 JoinedStr_fields, 1,
1372 "JoinedStr(expr* values)");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001373 if (!state->JoinedStr_type) return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001374 state->Constant_type = make_type(state, "Constant", state->expr_type,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001375 Constant_fields, 2,
1376 "Constant(constant value, string? kind)");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001377 if (!state->Constant_type) return 0;
Serhiy Storchakab7e95252020-03-10 00:07:47 +02001378 if (PyObject_SetAttr(state->Constant_type, state->kind, Py_None) == -1)
1379 return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001380 state->Attribute_type = make_type(state, "Attribute", state->expr_type,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001381 Attribute_fields, 3,
1382 "Attribute(expr value, identifier attr, expr_context ctx)");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001383 if (!state->Attribute_type) return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001384 state->Subscript_type = make_type(state, "Subscript", state->expr_type,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001385 Subscript_fields, 3,
1386 "Subscript(expr value, expr slice, expr_context ctx)");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001387 if (!state->Subscript_type) return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001388 state->Starred_type = make_type(state, "Starred", state->expr_type,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001389 Starred_fields, 2,
1390 "Starred(expr value, expr_context ctx)");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001391 if (!state->Starred_type) return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001392 state->Name_type = make_type(state, "Name", state->expr_type, Name_fields,
1393 2,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001394 "Name(identifier id, expr_context ctx)");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001395 if (!state->Name_type) return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001396 state->List_type = make_type(state, "List", state->expr_type, List_fields,
1397 2,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001398 "List(expr* elts, expr_context ctx)");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001399 if (!state->List_type) return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001400 state->Tuple_type = make_type(state, "Tuple", state->expr_type,
1401 Tuple_fields, 2,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001402 "Tuple(expr* elts, expr_context ctx)");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001403 if (!state->Tuple_type) return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001404 state->Slice_type = make_type(state, "Slice", state->expr_type,
1405 Slice_fields, 3,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001406 "Slice(expr? lower, expr? upper, expr? step)");
Serhiy Storchaka13d52c22020-03-10 18:52:34 +02001407 if (!state->Slice_type) return 0;
1408 if (PyObject_SetAttr(state->Slice_type, state->lower, Py_None) == -1)
1409 return 0;
1410 if (PyObject_SetAttr(state->Slice_type, state->upper, Py_None) == -1)
1411 return 0;
1412 if (PyObject_SetAttr(state->Slice_type, state->step, Py_None) == -1)
1413 return 0;
Brandt Bucher145bf262021-02-26 14:51:55 -08001414 state->MatchAs_type = make_type(state, "MatchAs", state->expr_type,
1415 MatchAs_fields, 2,
1416 "MatchAs(expr pattern, identifier name)");
1417 if (!state->MatchAs_type) return 0;
1418 state->MatchOr_type = make_type(state, "MatchOr", state->expr_type,
1419 MatchOr_fields, 1,
1420 "MatchOr(expr* patterns)");
1421 if (!state->MatchOr_type) return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001422 state->expr_context_type = make_type(state, "expr_context",
1423 state->AST_type, NULL, 0,
Serhiy Storchaka6b975982020-03-17 23:41:08 +02001424 "expr_context = Load | Store | Del");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001425 if (!state->expr_context_type) return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001426 if (!add_attributes(state, state->expr_context_type, NULL, 0)) return 0;
1427 state->Load_type = make_type(state, "Load", state->expr_context_type, NULL,
1428 0,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001429 "Load");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001430 if (!state->Load_type) return 0;
1431 state->Load_singleton = PyType_GenericNew((PyTypeObject *)state->Load_type,
1432 NULL, NULL);
1433 if (!state->Load_singleton) return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001434 state->Store_type = make_type(state, "Store", state->expr_context_type,
1435 NULL, 0,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001436 "Store");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001437 if (!state->Store_type) return 0;
1438 state->Store_singleton = PyType_GenericNew((PyTypeObject
1439 *)state->Store_type, NULL, NULL);
1440 if (!state->Store_singleton) return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001441 state->Del_type = make_type(state, "Del", state->expr_context_type, NULL, 0,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001442 "Del");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001443 if (!state->Del_type) return 0;
1444 state->Del_singleton = PyType_GenericNew((PyTypeObject *)state->Del_type,
1445 NULL, NULL);
1446 if (!state->Del_singleton) return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001447 state->boolop_type = make_type(state, "boolop", state->AST_type, NULL, 0,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001448 "boolop = And | Or");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001449 if (!state->boolop_type) return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001450 if (!add_attributes(state, state->boolop_type, NULL, 0)) return 0;
1451 state->And_type = make_type(state, "And", state->boolop_type, NULL, 0,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001452 "And");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001453 if (!state->And_type) return 0;
1454 state->And_singleton = PyType_GenericNew((PyTypeObject *)state->And_type,
1455 NULL, NULL);
1456 if (!state->And_singleton) return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001457 state->Or_type = make_type(state, "Or", state->boolop_type, NULL, 0,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001458 "Or");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001459 if (!state->Or_type) return 0;
1460 state->Or_singleton = PyType_GenericNew((PyTypeObject *)state->Or_type,
1461 NULL, NULL);
1462 if (!state->Or_singleton) return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001463 state->operator_type = make_type(state, "operator", state->AST_type, NULL,
1464 0,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001465 "operator = Add | Sub | Mult | MatMult | Div | Mod | Pow | LShift | RShift | BitOr | BitXor | BitAnd | FloorDiv");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001466 if (!state->operator_type) return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001467 if (!add_attributes(state, state->operator_type, NULL, 0)) return 0;
1468 state->Add_type = make_type(state, "Add", state->operator_type, NULL, 0,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001469 "Add");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001470 if (!state->Add_type) return 0;
1471 state->Add_singleton = PyType_GenericNew((PyTypeObject *)state->Add_type,
1472 NULL, NULL);
1473 if (!state->Add_singleton) return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001474 state->Sub_type = make_type(state, "Sub", state->operator_type, NULL, 0,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001475 "Sub");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001476 if (!state->Sub_type) return 0;
1477 state->Sub_singleton = PyType_GenericNew((PyTypeObject *)state->Sub_type,
1478 NULL, NULL);
1479 if (!state->Sub_singleton) return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001480 state->Mult_type = make_type(state, "Mult", state->operator_type, NULL, 0,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001481 "Mult");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001482 if (!state->Mult_type) return 0;
1483 state->Mult_singleton = PyType_GenericNew((PyTypeObject *)state->Mult_type,
1484 NULL, NULL);
1485 if (!state->Mult_singleton) return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001486 state->MatMult_type = make_type(state, "MatMult", state->operator_type,
1487 NULL, 0,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001488 "MatMult");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001489 if (!state->MatMult_type) return 0;
1490 state->MatMult_singleton = PyType_GenericNew((PyTypeObject
1491 *)state->MatMult_type, NULL,
1492 NULL);
1493 if (!state->MatMult_singleton) return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001494 state->Div_type = make_type(state, "Div", state->operator_type, NULL, 0,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001495 "Div");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001496 if (!state->Div_type) return 0;
1497 state->Div_singleton = PyType_GenericNew((PyTypeObject *)state->Div_type,
1498 NULL, NULL);
1499 if (!state->Div_singleton) return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001500 state->Mod_type = make_type(state, "Mod", state->operator_type, NULL, 0,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001501 "Mod");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001502 if (!state->Mod_type) return 0;
1503 state->Mod_singleton = PyType_GenericNew((PyTypeObject *)state->Mod_type,
1504 NULL, NULL);
1505 if (!state->Mod_singleton) return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001506 state->Pow_type = make_type(state, "Pow", state->operator_type, NULL, 0,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001507 "Pow");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001508 if (!state->Pow_type) return 0;
1509 state->Pow_singleton = PyType_GenericNew((PyTypeObject *)state->Pow_type,
1510 NULL, NULL);
1511 if (!state->Pow_singleton) return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001512 state->LShift_type = make_type(state, "LShift", state->operator_type, NULL,
1513 0,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001514 "LShift");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001515 if (!state->LShift_type) return 0;
1516 state->LShift_singleton = PyType_GenericNew((PyTypeObject
1517 *)state->LShift_type, NULL,
1518 NULL);
1519 if (!state->LShift_singleton) return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001520 state->RShift_type = make_type(state, "RShift", state->operator_type, NULL,
1521 0,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001522 "RShift");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001523 if (!state->RShift_type) return 0;
1524 state->RShift_singleton = PyType_GenericNew((PyTypeObject
1525 *)state->RShift_type, NULL,
1526 NULL);
1527 if (!state->RShift_singleton) return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001528 state->BitOr_type = make_type(state, "BitOr", state->operator_type, NULL, 0,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001529 "BitOr");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001530 if (!state->BitOr_type) return 0;
1531 state->BitOr_singleton = PyType_GenericNew((PyTypeObject
1532 *)state->BitOr_type, NULL, NULL);
1533 if (!state->BitOr_singleton) return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001534 state->BitXor_type = make_type(state, "BitXor", state->operator_type, NULL,
1535 0,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001536 "BitXor");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001537 if (!state->BitXor_type) return 0;
1538 state->BitXor_singleton = PyType_GenericNew((PyTypeObject
1539 *)state->BitXor_type, NULL,
1540 NULL);
1541 if (!state->BitXor_singleton) return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001542 state->BitAnd_type = make_type(state, "BitAnd", state->operator_type, NULL,
1543 0,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001544 "BitAnd");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001545 if (!state->BitAnd_type) return 0;
1546 state->BitAnd_singleton = PyType_GenericNew((PyTypeObject
1547 *)state->BitAnd_type, NULL,
1548 NULL);
1549 if (!state->BitAnd_singleton) return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001550 state->FloorDiv_type = make_type(state, "FloorDiv", state->operator_type,
1551 NULL, 0,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001552 "FloorDiv");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001553 if (!state->FloorDiv_type) return 0;
1554 state->FloorDiv_singleton = PyType_GenericNew((PyTypeObject
1555 *)state->FloorDiv_type, NULL,
1556 NULL);
1557 if (!state->FloorDiv_singleton) return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001558 state->unaryop_type = make_type(state, "unaryop", state->AST_type, NULL, 0,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001559 "unaryop = Invert | Not | UAdd | USub");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001560 if (!state->unaryop_type) return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001561 if (!add_attributes(state, state->unaryop_type, NULL, 0)) return 0;
1562 state->Invert_type = make_type(state, "Invert", state->unaryop_type, NULL,
1563 0,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001564 "Invert");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001565 if (!state->Invert_type) return 0;
1566 state->Invert_singleton = PyType_GenericNew((PyTypeObject
1567 *)state->Invert_type, NULL,
1568 NULL);
1569 if (!state->Invert_singleton) return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001570 state->Not_type = make_type(state, "Not", state->unaryop_type, NULL, 0,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001571 "Not");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001572 if (!state->Not_type) return 0;
1573 state->Not_singleton = PyType_GenericNew((PyTypeObject *)state->Not_type,
1574 NULL, NULL);
1575 if (!state->Not_singleton) return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001576 state->UAdd_type = make_type(state, "UAdd", state->unaryop_type, NULL, 0,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001577 "UAdd");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001578 if (!state->UAdd_type) return 0;
1579 state->UAdd_singleton = PyType_GenericNew((PyTypeObject *)state->UAdd_type,
1580 NULL, NULL);
1581 if (!state->UAdd_singleton) return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001582 state->USub_type = make_type(state, "USub", state->unaryop_type, NULL, 0,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001583 "USub");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001584 if (!state->USub_type) return 0;
1585 state->USub_singleton = PyType_GenericNew((PyTypeObject *)state->USub_type,
1586 NULL, NULL);
1587 if (!state->USub_singleton) return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001588 state->cmpop_type = make_type(state, "cmpop", state->AST_type, NULL, 0,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001589 "cmpop = Eq | NotEq | Lt | LtE | Gt | GtE | Is | IsNot | In | NotIn");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001590 if (!state->cmpop_type) return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001591 if (!add_attributes(state, state->cmpop_type, NULL, 0)) return 0;
1592 state->Eq_type = make_type(state, "Eq", state->cmpop_type, NULL, 0,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001593 "Eq");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001594 if (!state->Eq_type) return 0;
1595 state->Eq_singleton = PyType_GenericNew((PyTypeObject *)state->Eq_type,
1596 NULL, NULL);
1597 if (!state->Eq_singleton) return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001598 state->NotEq_type = make_type(state, "NotEq", state->cmpop_type, NULL, 0,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001599 "NotEq");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001600 if (!state->NotEq_type) return 0;
1601 state->NotEq_singleton = PyType_GenericNew((PyTypeObject
1602 *)state->NotEq_type, NULL, NULL);
1603 if (!state->NotEq_singleton) return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001604 state->Lt_type = make_type(state, "Lt", state->cmpop_type, NULL, 0,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001605 "Lt");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001606 if (!state->Lt_type) return 0;
1607 state->Lt_singleton = PyType_GenericNew((PyTypeObject *)state->Lt_type,
1608 NULL, NULL);
1609 if (!state->Lt_singleton) return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001610 state->LtE_type = make_type(state, "LtE", state->cmpop_type, NULL, 0,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001611 "LtE");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001612 if (!state->LtE_type) return 0;
1613 state->LtE_singleton = PyType_GenericNew((PyTypeObject *)state->LtE_type,
1614 NULL, NULL);
1615 if (!state->LtE_singleton) return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001616 state->Gt_type = make_type(state, "Gt", state->cmpop_type, NULL, 0,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001617 "Gt");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001618 if (!state->Gt_type) return 0;
1619 state->Gt_singleton = PyType_GenericNew((PyTypeObject *)state->Gt_type,
1620 NULL, NULL);
1621 if (!state->Gt_singleton) return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001622 state->GtE_type = make_type(state, "GtE", state->cmpop_type, NULL, 0,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001623 "GtE");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001624 if (!state->GtE_type) return 0;
1625 state->GtE_singleton = PyType_GenericNew((PyTypeObject *)state->GtE_type,
1626 NULL, NULL);
1627 if (!state->GtE_singleton) return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001628 state->Is_type = make_type(state, "Is", state->cmpop_type, NULL, 0,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001629 "Is");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001630 if (!state->Is_type) return 0;
1631 state->Is_singleton = PyType_GenericNew((PyTypeObject *)state->Is_type,
1632 NULL, NULL);
1633 if (!state->Is_singleton) return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001634 state->IsNot_type = make_type(state, "IsNot", state->cmpop_type, NULL, 0,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001635 "IsNot");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001636 if (!state->IsNot_type) return 0;
1637 state->IsNot_singleton = PyType_GenericNew((PyTypeObject
1638 *)state->IsNot_type, NULL, NULL);
1639 if (!state->IsNot_singleton) return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001640 state->In_type = make_type(state, "In", state->cmpop_type, NULL, 0,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001641 "In");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001642 if (!state->In_type) return 0;
1643 state->In_singleton = PyType_GenericNew((PyTypeObject *)state->In_type,
1644 NULL, NULL);
1645 if (!state->In_singleton) return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001646 state->NotIn_type = make_type(state, "NotIn", state->cmpop_type, NULL, 0,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001647 "NotIn");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001648 if (!state->NotIn_type) return 0;
1649 state->NotIn_singleton = PyType_GenericNew((PyTypeObject
1650 *)state->NotIn_type, NULL, NULL);
1651 if (!state->NotIn_singleton) return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001652 state->comprehension_type = make_type(state, "comprehension",
1653 state->AST_type,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001654 comprehension_fields, 4,
1655 "comprehension(expr target, expr iter, expr* ifs, int is_async)");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001656 if (!state->comprehension_type) return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001657 if (!add_attributes(state, state->comprehension_type, NULL, 0)) return 0;
1658 state->excepthandler_type = make_type(state, "excepthandler",
1659 state->AST_type, NULL, 0,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001660 "excepthandler = ExceptHandler(expr? type, identifier? name, stmt* body)");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001661 if (!state->excepthandler_type) return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001662 if (!add_attributes(state, state->excepthandler_type,
1663 excepthandler_attributes, 4)) return 0;
Serhiy Storchakab7e95252020-03-10 00:07:47 +02001664 if (PyObject_SetAttr(state->excepthandler_type, state->end_lineno, Py_None)
1665 == -1)
1666 return 0;
1667 if (PyObject_SetAttr(state->excepthandler_type, state->end_col_offset,
1668 Py_None) == -1)
1669 return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001670 state->ExceptHandler_type = make_type(state, "ExceptHandler",
Dino Viehlandac46eb42019-09-11 10:16:34 -07001671 state->excepthandler_type,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001672 ExceptHandler_fields, 3,
1673 "ExceptHandler(expr? type, identifier? name, stmt* body)");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001674 if (!state->ExceptHandler_type) return 0;
Serhiy Storchakab7e95252020-03-10 00:07:47 +02001675 if (PyObject_SetAttr(state->ExceptHandler_type, state->type, Py_None) == -1)
1676 return 0;
1677 if (PyObject_SetAttr(state->ExceptHandler_type, state->name, Py_None) == -1)
1678 return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001679 state->arguments_type = make_type(state, "arguments", state->AST_type,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001680 arguments_fields, 7,
1681 "arguments(arg* posonlyargs, arg* args, arg? vararg, arg* kwonlyargs, expr* kw_defaults, arg? kwarg, expr* defaults)");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001682 if (!state->arguments_type) return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001683 if (!add_attributes(state, state->arguments_type, NULL, 0)) return 0;
Serhiy Storchakab7e95252020-03-10 00:07:47 +02001684 if (PyObject_SetAttr(state->arguments_type, state->vararg, Py_None) == -1)
1685 return 0;
1686 if (PyObject_SetAttr(state->arguments_type, state->kwarg, Py_None) == -1)
1687 return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001688 state->arg_type = make_type(state, "arg", state->AST_type, arg_fields, 3,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001689 "arg(identifier arg, expr? annotation, string? type_comment)");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001690 if (!state->arg_type) return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001691 if (!add_attributes(state, state->arg_type, arg_attributes, 4)) return 0;
Serhiy Storchakab7e95252020-03-10 00:07:47 +02001692 if (PyObject_SetAttr(state->arg_type, state->annotation, Py_None) == -1)
1693 return 0;
1694 if (PyObject_SetAttr(state->arg_type, state->type_comment, Py_None) == -1)
1695 return 0;
1696 if (PyObject_SetAttr(state->arg_type, state->end_lineno, Py_None) == -1)
1697 return 0;
1698 if (PyObject_SetAttr(state->arg_type, state->end_col_offset, Py_None) == -1)
1699 return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001700 state->keyword_type = make_type(state, "keyword", state->AST_type,
1701 keyword_fields, 2,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001702 "keyword(identifier? arg, expr value)");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001703 if (!state->keyword_type) return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001704 if (!add_attributes(state, state->keyword_type, keyword_attributes, 4))
1705 return 0;
Serhiy Storchakab7e95252020-03-10 00:07:47 +02001706 if (PyObject_SetAttr(state->keyword_type, state->arg, Py_None) == -1)
1707 return 0;
Pablo Galindo168660b2020-04-02 00:47:39 +01001708 if (PyObject_SetAttr(state->keyword_type, state->end_lineno, Py_None) == -1)
1709 return 0;
1710 if (PyObject_SetAttr(state->keyword_type, state->end_col_offset, Py_None)
1711 == -1)
1712 return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001713 state->alias_type = make_type(state, "alias", state->AST_type,
1714 alias_fields, 2,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001715 "alias(identifier name, identifier? asname)");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001716 if (!state->alias_type) return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001717 if (!add_attributes(state, state->alias_type, NULL, 0)) return 0;
Serhiy Storchakab7e95252020-03-10 00:07:47 +02001718 if (PyObject_SetAttr(state->alias_type, state->asname, Py_None) == -1)
1719 return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001720 state->withitem_type = make_type(state, "withitem", state->AST_type,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001721 withitem_fields, 2,
1722 "withitem(expr context_expr, expr? optional_vars)");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001723 if (!state->withitem_type) return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001724 if (!add_attributes(state, state->withitem_type, NULL, 0)) return 0;
Serhiy Storchakab7e95252020-03-10 00:07:47 +02001725 if (PyObject_SetAttr(state->withitem_type, state->optional_vars, Py_None)
1726 == -1)
1727 return 0;
Brandt Bucher145bf262021-02-26 14:51:55 -08001728 state->match_case_type = make_type(state, "match_case", state->AST_type,
1729 match_case_fields, 3,
1730 "match_case(expr pattern, expr? guard, stmt* body)");
1731 if (!state->match_case_type) return 0;
1732 if (!add_attributes(state, state->match_case_type, NULL, 0)) return 0;
1733 if (PyObject_SetAttr(state->match_case_type, state->guard, Py_None) == -1)
1734 return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001735 state->type_ignore_type = make_type(state, "type_ignore", state->AST_type,
1736 NULL, 0,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001737 "type_ignore = TypeIgnore(int lineno, string tag)");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001738 if (!state->type_ignore_type) return 0;
Victor Stinner74419f02020-07-03 11:35:37 +02001739 if (!add_attributes(state, state->type_ignore_type, NULL, 0)) return 0;
1740 state->TypeIgnore_type = make_type(state, "TypeIgnore",
1741 state->type_ignore_type,
Batuhan Taşkaya4ab362c2020-03-16 11:12:53 +03001742 TypeIgnore_fields, 2,
1743 "TypeIgnore(int lineno, string tag)");
Dino Viehlandac46eb42019-09-11 10:16:34 -07001744 if (!state->TypeIgnore_type) return 0;
Victor Stinnerfd957c12020-11-03 18:07:15 +01001745
Dino Viehlandac46eb42019-09-11 10:16:34 -07001746 state->initialized = 1;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02001747 return 1;
Martin v. Löwisbd260da2006-02-26 19:42:26 +00001748}
Neal Norwitz7b5a6042005-11-13 19:14:20 +00001749
Victor Stinner5cf47822020-11-02 22:03:28 +01001750static int obj2ast_mod(struct ast_state *state, PyObject* obj, mod_ty* out,
Victor Stinner74419f02020-07-03 11:35:37 +02001751 PyArena* arena);
Victor Stinner5cf47822020-11-02 22:03:28 +01001752static int obj2ast_stmt(struct ast_state *state, PyObject* obj, stmt_ty* out,
Victor Stinner74419f02020-07-03 11:35:37 +02001753 PyArena* arena);
Victor Stinner5cf47822020-11-02 22:03:28 +01001754static int obj2ast_expr(struct ast_state *state, PyObject* obj, expr_ty* out,
Victor Stinner74419f02020-07-03 11:35:37 +02001755 PyArena* arena);
Victor Stinner5cf47822020-11-02 22:03:28 +01001756static int obj2ast_expr_context(struct ast_state *state, PyObject* obj,
Victor Stinner74419f02020-07-03 11:35:37 +02001757 expr_context_ty* out, PyArena* arena);
Victor Stinner5cf47822020-11-02 22:03:28 +01001758static int obj2ast_boolop(struct ast_state *state, PyObject* obj, boolop_ty*
1759 out, PyArena* arena);
1760static int obj2ast_operator(struct ast_state *state, PyObject* obj,
1761 operator_ty* out, PyArena* arena);
1762static int obj2ast_unaryop(struct ast_state *state, PyObject* obj, unaryop_ty*
Victor Stinner74419f02020-07-03 11:35:37 +02001763 out, PyArena* arena);
Victor Stinner5cf47822020-11-02 22:03:28 +01001764static int obj2ast_cmpop(struct ast_state *state, PyObject* obj, cmpop_ty* out,
Victor Stinner74419f02020-07-03 11:35:37 +02001765 PyArena* arena);
Victor Stinner5cf47822020-11-02 22:03:28 +01001766static int obj2ast_comprehension(struct ast_state *state, PyObject* obj,
Victor Stinner74419f02020-07-03 11:35:37 +02001767 comprehension_ty* out, PyArena* arena);
Victor Stinner5cf47822020-11-02 22:03:28 +01001768static int obj2ast_excepthandler(struct ast_state *state, PyObject* obj,
Victor Stinner74419f02020-07-03 11:35:37 +02001769 excepthandler_ty* out, PyArena* arena);
Victor Stinner5cf47822020-11-02 22:03:28 +01001770static int obj2ast_arguments(struct ast_state *state, PyObject* obj,
Victor Stinner74419f02020-07-03 11:35:37 +02001771 arguments_ty* out, PyArena* arena);
Victor Stinner5cf47822020-11-02 22:03:28 +01001772static int obj2ast_arg(struct ast_state *state, PyObject* obj, arg_ty* out,
Victor Stinner74419f02020-07-03 11:35:37 +02001773 PyArena* arena);
Victor Stinner5cf47822020-11-02 22:03:28 +01001774static int obj2ast_keyword(struct ast_state *state, PyObject* obj, keyword_ty*
Victor Stinner74419f02020-07-03 11:35:37 +02001775 out, PyArena* arena);
Victor Stinner5cf47822020-11-02 22:03:28 +01001776static int obj2ast_alias(struct ast_state *state, PyObject* obj, alias_ty* out,
Victor Stinner74419f02020-07-03 11:35:37 +02001777 PyArena* arena);
Victor Stinner5cf47822020-11-02 22:03:28 +01001778static int obj2ast_withitem(struct ast_state *state, PyObject* obj,
1779 withitem_ty* out, PyArena* arena);
Brandt Bucher145bf262021-02-26 14:51:55 -08001780static int obj2ast_match_case(struct ast_state *state, PyObject* obj,
1781 match_case_ty* out, PyArena* arena);
Victor Stinner5cf47822020-11-02 22:03:28 +01001782static int obj2ast_type_ignore(struct ast_state *state, PyObject* obj,
Victor Stinner74419f02020-07-03 11:35:37 +02001783 type_ignore_ty* out, PyArena* arena);
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00001784
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001785mod_ty
Pablo Galindoa5634c42020-09-16 19:42:00 +01001786Module(asdl_stmt_seq * body, asdl_type_ignore_seq * type_ignores, PyArena
1787 *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001788{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02001789 mod_ty p;
1790 p = (mod_ty)PyArena_Malloc(arena, sizeof(*p));
1791 if (!p)
1792 return NULL;
1793 p->kind = Module_kind;
1794 p->v.Module.body = body;
Guido van Rossumdcfcd142019-01-31 03:40:27 -08001795 p->v.Module.type_ignores = type_ignores;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02001796 return p;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001797}
1798
1799mod_ty
Pablo Galindoa5634c42020-09-16 19:42:00 +01001800Interactive(asdl_stmt_seq * body, PyArena *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001801{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02001802 mod_ty p;
1803 p = (mod_ty)PyArena_Malloc(arena, sizeof(*p));
1804 if (!p)
1805 return NULL;
1806 p->kind = Interactive_kind;
1807 p->v.Interactive.body = body;
1808 return p;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001809}
1810
1811mod_ty
Neal Norwitzadb69fc2005-12-17 20:54:49 +00001812Expression(expr_ty body, PyArena *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001813{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02001814 mod_ty p;
1815 if (!body) {
1816 PyErr_SetString(PyExc_ValueError,
Batuhan Taskaya091951a2020-05-06 17:29:32 +03001817 "field 'body' is required for Expression");
Victor Stinnerce72e1c2013-07-27 00:00:36 +02001818 return NULL;
1819 }
1820 p = (mod_ty)PyArena_Malloc(arena, sizeof(*p));
1821 if (!p)
1822 return NULL;
1823 p->kind = Expression_kind;
1824 p->v.Expression.body = body;
1825 return p;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001826}
1827
1828mod_ty
Pablo Galindoa5634c42020-09-16 19:42:00 +01001829FunctionType(asdl_expr_seq * argtypes, expr_ty returns, PyArena *arena)
Guido van Rossumdcfcd142019-01-31 03:40:27 -08001830{
1831 mod_ty p;
1832 if (!returns) {
1833 PyErr_SetString(PyExc_ValueError,
Batuhan Taskaya091951a2020-05-06 17:29:32 +03001834 "field 'returns' is required for FunctionType");
Guido van Rossumdcfcd142019-01-31 03:40:27 -08001835 return NULL;
1836 }
1837 p = (mod_ty)PyArena_Malloc(arena, sizeof(*p));
1838 if (!p)
1839 return NULL;
1840 p->kind = FunctionType_kind;
1841 p->v.FunctionType.argtypes = argtypes;
1842 p->v.FunctionType.returns = returns;
1843 return p;
1844}
1845
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001846stmt_ty
Pablo Galindoa5634c42020-09-16 19:42:00 +01001847FunctionDef(identifier name, arguments_ty args, asdl_stmt_seq * body,
1848 asdl_expr_seq * decorator_list, expr_ty returns, string
1849 type_comment, int lineno, int col_offset, int end_lineno, int
1850 end_col_offset, PyArena *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001851{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02001852 stmt_ty p;
1853 if (!name) {
1854 PyErr_SetString(PyExc_ValueError,
Batuhan Taskaya091951a2020-05-06 17:29:32 +03001855 "field 'name' is required for FunctionDef");
Victor Stinnerce72e1c2013-07-27 00:00:36 +02001856 return NULL;
1857 }
1858 if (!args) {
1859 PyErr_SetString(PyExc_ValueError,
Batuhan Taskaya091951a2020-05-06 17:29:32 +03001860 "field 'args' is required for FunctionDef");
Victor Stinnerce72e1c2013-07-27 00:00:36 +02001861 return NULL;
1862 }
1863 p = (stmt_ty)PyArena_Malloc(arena, sizeof(*p));
1864 if (!p)
1865 return NULL;
1866 p->kind = FunctionDef_kind;
1867 p->v.FunctionDef.name = name;
1868 p->v.FunctionDef.args = args;
1869 p->v.FunctionDef.body = body;
1870 p->v.FunctionDef.decorator_list = decorator_list;
1871 p->v.FunctionDef.returns = returns;
Guido van Rossumdcfcd142019-01-31 03:40:27 -08001872 p->v.FunctionDef.type_comment = type_comment;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02001873 p->lineno = lineno;
1874 p->col_offset = col_offset;
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00001875 p->end_lineno = end_lineno;
1876 p->end_col_offset = end_col_offset;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02001877 return p;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001878}
1879
1880stmt_ty
Pablo Galindoa5634c42020-09-16 19:42:00 +01001881AsyncFunctionDef(identifier name, arguments_ty args, asdl_stmt_seq * body,
1882 asdl_expr_seq * decorator_list, expr_ty returns, string
1883 type_comment, int lineno, int col_offset, int end_lineno, int
1884 end_col_offset, PyArena *arena)
Yury Selivanov75445082015-05-11 22:57:16 -04001885{
1886 stmt_ty p;
1887 if (!name) {
1888 PyErr_SetString(PyExc_ValueError,
Batuhan Taskaya091951a2020-05-06 17:29:32 +03001889 "field 'name' is required for AsyncFunctionDef");
Yury Selivanov75445082015-05-11 22:57:16 -04001890 return NULL;
1891 }
1892 if (!args) {
1893 PyErr_SetString(PyExc_ValueError,
Batuhan Taskaya091951a2020-05-06 17:29:32 +03001894 "field 'args' is required for AsyncFunctionDef");
Yury Selivanov75445082015-05-11 22:57:16 -04001895 return NULL;
1896 }
1897 p = (stmt_ty)PyArena_Malloc(arena, sizeof(*p));
1898 if (!p)
1899 return NULL;
1900 p->kind = AsyncFunctionDef_kind;
1901 p->v.AsyncFunctionDef.name = name;
1902 p->v.AsyncFunctionDef.args = args;
1903 p->v.AsyncFunctionDef.body = body;
1904 p->v.AsyncFunctionDef.decorator_list = decorator_list;
1905 p->v.AsyncFunctionDef.returns = returns;
Guido van Rossumdcfcd142019-01-31 03:40:27 -08001906 p->v.AsyncFunctionDef.type_comment = type_comment;
Yury Selivanov75445082015-05-11 22:57:16 -04001907 p->lineno = lineno;
1908 p->col_offset = col_offset;
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00001909 p->end_lineno = end_lineno;
1910 p->end_col_offset = end_col_offset;
Yury Selivanov75445082015-05-11 22:57:16 -04001911 return p;
1912}
1913
1914stmt_ty
Pablo Galindoa5634c42020-09-16 19:42:00 +01001915ClassDef(identifier name, asdl_expr_seq * bases, asdl_keyword_seq * keywords,
1916 asdl_stmt_seq * body, asdl_expr_seq * decorator_list, int lineno, int
1917 col_offset, int end_lineno, int end_col_offset, PyArena *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001918{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02001919 stmt_ty p;
1920 if (!name) {
1921 PyErr_SetString(PyExc_ValueError,
Batuhan Taskaya091951a2020-05-06 17:29:32 +03001922 "field 'name' is required for ClassDef");
Victor Stinnerce72e1c2013-07-27 00:00:36 +02001923 return NULL;
1924 }
1925 p = (stmt_ty)PyArena_Malloc(arena, sizeof(*p));
1926 if (!p)
1927 return NULL;
1928 p->kind = ClassDef_kind;
1929 p->v.ClassDef.name = name;
1930 p->v.ClassDef.bases = bases;
1931 p->v.ClassDef.keywords = keywords;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02001932 p->v.ClassDef.body = body;
1933 p->v.ClassDef.decorator_list = decorator_list;
1934 p->lineno = lineno;
1935 p->col_offset = col_offset;
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00001936 p->end_lineno = end_lineno;
1937 p->end_col_offset = end_col_offset;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02001938 return p;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001939}
1940
1941stmt_ty
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00001942Return(expr_ty value, int lineno, int col_offset, int end_lineno, int
1943 end_col_offset, PyArena *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001944{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02001945 stmt_ty p;
1946 p = (stmt_ty)PyArena_Malloc(arena, sizeof(*p));
1947 if (!p)
1948 return NULL;
1949 p->kind = Return_kind;
1950 p->v.Return.value = value;
1951 p->lineno = lineno;
1952 p->col_offset = col_offset;
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00001953 p->end_lineno = end_lineno;
1954 p->end_col_offset = end_col_offset;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02001955 return p;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001956}
1957
1958stmt_ty
Pablo Galindoa5634c42020-09-16 19:42:00 +01001959Delete(asdl_expr_seq * targets, int lineno, int col_offset, int end_lineno, int
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00001960 end_col_offset, PyArena *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001961{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02001962 stmt_ty p;
1963 p = (stmt_ty)PyArena_Malloc(arena, sizeof(*p));
1964 if (!p)
1965 return NULL;
1966 p->kind = Delete_kind;
1967 p->v.Delete.targets = targets;
1968 p->lineno = lineno;
1969 p->col_offset = col_offset;
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00001970 p->end_lineno = end_lineno;
1971 p->end_col_offset = end_col_offset;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02001972 return p;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001973}
1974
1975stmt_ty
Pablo Galindoa5634c42020-09-16 19:42:00 +01001976Assign(asdl_expr_seq * targets, expr_ty value, 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 (!value) {
1981 PyErr_SetString(PyExc_ValueError,
Batuhan Taskaya091951a2020-05-06 17:29:32 +03001982 "field 'value' is required for Assign");
Victor Stinnerce72e1c2013-07-27 00:00:36 +02001983 return NULL;
1984 }
1985 p = (stmt_ty)PyArena_Malloc(arena, sizeof(*p));
1986 if (!p)
1987 return NULL;
1988 p->kind = Assign_kind;
1989 p->v.Assign.targets = targets;
1990 p->v.Assign.value = value;
Guido van Rossumdcfcd142019-01-31 03:40:27 -08001991 p->v.Assign.type_comment = type_comment;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02001992 p->lineno = lineno;
1993 p->col_offset = col_offset;
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00001994 p->end_lineno = end_lineno;
1995 p->end_col_offset = end_col_offset;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02001996 return p;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001997}
1998
1999stmt_ty
Martin v. Löwis49c5da12006-03-01 22:49:05 +00002000AugAssign(expr_ty target, operator_ty op, expr_ty value, int lineno, int
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00002001 col_offset, int end_lineno, int end_col_offset, PyArena *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002002{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002003 stmt_ty p;
2004 if (!target) {
2005 PyErr_SetString(PyExc_ValueError,
Batuhan Taskaya091951a2020-05-06 17:29:32 +03002006 "field 'target' is required for AugAssign");
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002007 return NULL;
2008 }
2009 if (!op) {
2010 PyErr_SetString(PyExc_ValueError,
Batuhan Taskaya091951a2020-05-06 17:29:32 +03002011 "field 'op' is required for AugAssign");
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002012 return NULL;
2013 }
2014 if (!value) {
2015 PyErr_SetString(PyExc_ValueError,
Batuhan Taskaya091951a2020-05-06 17:29:32 +03002016 "field 'value' is required for AugAssign");
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002017 return NULL;
2018 }
2019 p = (stmt_ty)PyArena_Malloc(arena, sizeof(*p));
2020 if (!p)
2021 return NULL;
2022 p->kind = AugAssign_kind;
2023 p->v.AugAssign.target = target;
2024 p->v.AugAssign.op = op;
2025 p->v.AugAssign.value = value;
2026 p->lineno = lineno;
2027 p->col_offset = col_offset;
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00002028 p->end_lineno = end_lineno;
2029 p->end_col_offset = end_col_offset;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002030 return p;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002031}
2032
2033stmt_ty
Yury Selivanovf8cb8a12016-09-08 20:50:03 -07002034AnnAssign(expr_ty target, expr_ty annotation, expr_ty value, int simple, int
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00002035 lineno, int col_offset, int end_lineno, int end_col_offset, PyArena
2036 *arena)
Yury Selivanovf8cb8a12016-09-08 20:50:03 -07002037{
2038 stmt_ty p;
2039 if (!target) {
2040 PyErr_SetString(PyExc_ValueError,
Batuhan Taskaya091951a2020-05-06 17:29:32 +03002041 "field 'target' is required for AnnAssign");
Yury Selivanovf8cb8a12016-09-08 20:50:03 -07002042 return NULL;
2043 }
2044 if (!annotation) {
2045 PyErr_SetString(PyExc_ValueError,
Batuhan Taskaya091951a2020-05-06 17:29:32 +03002046 "field 'annotation' is required for AnnAssign");
Yury Selivanovf8cb8a12016-09-08 20:50:03 -07002047 return NULL;
2048 }
2049 p = (stmt_ty)PyArena_Malloc(arena, sizeof(*p));
2050 if (!p)
2051 return NULL;
2052 p->kind = AnnAssign_kind;
2053 p->v.AnnAssign.target = target;
2054 p->v.AnnAssign.annotation = annotation;
2055 p->v.AnnAssign.value = value;
2056 p->v.AnnAssign.simple = simple;
2057 p->lineno = lineno;
2058 p->col_offset = col_offset;
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00002059 p->end_lineno = end_lineno;
2060 p->end_col_offset = end_col_offset;
Yury Selivanovf8cb8a12016-09-08 20:50:03 -07002061 return p;
2062}
2063
2064stmt_ty
Pablo Galindoa5634c42020-09-16 19:42:00 +01002065For(expr_ty target, expr_ty iter, asdl_stmt_seq * body, asdl_stmt_seq * orelse,
2066 string type_comment, int lineno, int col_offset, int end_lineno, int
Guido van Rossumdcfcd142019-01-31 03:40:27 -08002067 end_col_offset, PyArena *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002068{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002069 stmt_ty p;
2070 if (!target) {
2071 PyErr_SetString(PyExc_ValueError,
Batuhan Taskaya091951a2020-05-06 17:29:32 +03002072 "field 'target' is required for For");
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002073 return NULL;
2074 }
2075 if (!iter) {
2076 PyErr_SetString(PyExc_ValueError,
Batuhan Taskaya091951a2020-05-06 17:29:32 +03002077 "field 'iter' is required for For");
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002078 return NULL;
2079 }
2080 p = (stmt_ty)PyArena_Malloc(arena, sizeof(*p));
2081 if (!p)
2082 return NULL;
2083 p->kind = For_kind;
2084 p->v.For.target = target;
2085 p->v.For.iter = iter;
2086 p->v.For.body = body;
2087 p->v.For.orelse = orelse;
Guido van Rossumdcfcd142019-01-31 03:40:27 -08002088 p->v.For.type_comment = type_comment;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002089 p->lineno = lineno;
2090 p->col_offset = col_offset;
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00002091 p->end_lineno = end_lineno;
2092 p->end_col_offset = end_col_offset;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002093 return p;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002094}
2095
2096stmt_ty
Pablo Galindoa5634c42020-09-16 19:42:00 +01002097AsyncFor(expr_ty target, expr_ty iter, asdl_stmt_seq * body, asdl_stmt_seq *
2098 orelse, string type_comment, int lineno, int col_offset, int
2099 end_lineno, int end_col_offset, PyArena *arena)
Yury Selivanov75445082015-05-11 22:57:16 -04002100{
2101 stmt_ty p;
2102 if (!target) {
2103 PyErr_SetString(PyExc_ValueError,
Batuhan Taskaya091951a2020-05-06 17:29:32 +03002104 "field 'target' is required for AsyncFor");
Yury Selivanov75445082015-05-11 22:57:16 -04002105 return NULL;
2106 }
2107 if (!iter) {
2108 PyErr_SetString(PyExc_ValueError,
Batuhan Taskaya091951a2020-05-06 17:29:32 +03002109 "field 'iter' is required for AsyncFor");
Yury Selivanov75445082015-05-11 22:57:16 -04002110 return NULL;
2111 }
2112 p = (stmt_ty)PyArena_Malloc(arena, sizeof(*p));
2113 if (!p)
2114 return NULL;
2115 p->kind = AsyncFor_kind;
2116 p->v.AsyncFor.target = target;
2117 p->v.AsyncFor.iter = iter;
2118 p->v.AsyncFor.body = body;
2119 p->v.AsyncFor.orelse = orelse;
Guido van Rossumdcfcd142019-01-31 03:40:27 -08002120 p->v.AsyncFor.type_comment = type_comment;
Yury Selivanov75445082015-05-11 22:57:16 -04002121 p->lineno = lineno;
2122 p->col_offset = col_offset;
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00002123 p->end_lineno = end_lineno;
2124 p->end_col_offset = end_col_offset;
Yury Selivanov75445082015-05-11 22:57:16 -04002125 return p;
2126}
2127
2128stmt_ty
Pablo Galindoa5634c42020-09-16 19:42:00 +01002129While(expr_ty test, asdl_stmt_seq * body, asdl_stmt_seq * orelse, int lineno,
2130 int col_offset, int end_lineno, int end_col_offset, PyArena *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002131{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002132 stmt_ty p;
2133 if (!test) {
2134 PyErr_SetString(PyExc_ValueError,
Batuhan Taskaya091951a2020-05-06 17:29:32 +03002135 "field 'test' is required for While");
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002136 return NULL;
2137 }
2138 p = (stmt_ty)PyArena_Malloc(arena, sizeof(*p));
2139 if (!p)
2140 return NULL;
2141 p->kind = While_kind;
2142 p->v.While.test = test;
2143 p->v.While.body = body;
2144 p->v.While.orelse = orelse;
2145 p->lineno = lineno;
2146 p->col_offset = col_offset;
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00002147 p->end_lineno = end_lineno;
2148 p->end_col_offset = end_col_offset;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002149 return p;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002150}
2151
2152stmt_ty
Pablo Galindoa5634c42020-09-16 19:42:00 +01002153If(expr_ty test, asdl_stmt_seq * body, asdl_stmt_seq * orelse, int lineno, int
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00002154 col_offset, int end_lineno, int end_col_offset, PyArena *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002155{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002156 stmt_ty p;
2157 if (!test) {
2158 PyErr_SetString(PyExc_ValueError,
Batuhan Taskaya091951a2020-05-06 17:29:32 +03002159 "field 'test' is required for If");
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002160 return NULL;
2161 }
2162 p = (stmt_ty)PyArena_Malloc(arena, sizeof(*p));
2163 if (!p)
2164 return NULL;
2165 p->kind = If_kind;
2166 p->v.If.test = test;
2167 p->v.If.body = body;
2168 p->v.If.orelse = orelse;
2169 p->lineno = lineno;
2170 p->col_offset = col_offset;
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00002171 p->end_lineno = end_lineno;
2172 p->end_col_offset = end_col_offset;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002173 return p;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002174}
2175
2176stmt_ty
Pablo Galindoa5634c42020-09-16 19:42:00 +01002177With(asdl_withitem_seq * items, asdl_stmt_seq * body, string type_comment, int
2178 lineno, int col_offset, int end_lineno, int end_col_offset, PyArena *arena)
Guido van Rossumc2e20742006-02-27 22:32:47 +00002179{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002180 stmt_ty p;
2181 p = (stmt_ty)PyArena_Malloc(arena, sizeof(*p));
2182 if (!p)
2183 return NULL;
2184 p->kind = With_kind;
2185 p->v.With.items = items;
2186 p->v.With.body = body;
Guido van Rossumdcfcd142019-01-31 03:40:27 -08002187 p->v.With.type_comment = type_comment;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002188 p->lineno = lineno;
2189 p->col_offset = col_offset;
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00002190 p->end_lineno = end_lineno;
2191 p->end_col_offset = end_col_offset;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002192 return p;
Guido van Rossumc2e20742006-02-27 22:32:47 +00002193}
2194
2195stmt_ty
Pablo Galindoa5634c42020-09-16 19:42:00 +01002196AsyncWith(asdl_withitem_seq * items, asdl_stmt_seq * body, string type_comment,
2197 int lineno, int col_offset, int end_lineno, int end_col_offset,
2198 PyArena *arena)
Yury Selivanov75445082015-05-11 22:57:16 -04002199{
2200 stmt_ty p;
2201 p = (stmt_ty)PyArena_Malloc(arena, sizeof(*p));
2202 if (!p)
2203 return NULL;
2204 p->kind = AsyncWith_kind;
2205 p->v.AsyncWith.items = items;
2206 p->v.AsyncWith.body = body;
Guido van Rossumdcfcd142019-01-31 03:40:27 -08002207 p->v.AsyncWith.type_comment = type_comment;
Yury Selivanov75445082015-05-11 22:57:16 -04002208 p->lineno = lineno;
2209 p->col_offset = col_offset;
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00002210 p->end_lineno = end_lineno;
2211 p->end_col_offset = end_col_offset;
Yury Selivanov75445082015-05-11 22:57:16 -04002212 return p;
2213}
2214
2215stmt_ty
Brandt Bucher145bf262021-02-26 14:51:55 -08002216Match(expr_ty subject, asdl_match_case_seq * cases, int lineno, int col_offset,
2217 int end_lineno, int end_col_offset, PyArena *arena)
2218{
2219 stmt_ty p;
2220 if (!subject) {
2221 PyErr_SetString(PyExc_ValueError,
2222 "field 'subject' is required for Match");
2223 return NULL;
2224 }
2225 p = (stmt_ty)PyArena_Malloc(arena, sizeof(*p));
2226 if (!p)
2227 return NULL;
2228 p->kind = Match_kind;
2229 p->v.Match.subject = subject;
2230 p->v.Match.cases = cases;
2231 p->lineno = lineno;
2232 p->col_offset = col_offset;
2233 p->end_lineno = end_lineno;
2234 p->end_col_offset = end_col_offset;
2235 return p;
2236}
2237
2238stmt_ty
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00002239Raise(expr_ty exc, expr_ty cause, int lineno, int col_offset, int end_lineno,
2240 int end_col_offset, PyArena *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002241{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002242 stmt_ty p;
2243 p = (stmt_ty)PyArena_Malloc(arena, sizeof(*p));
2244 if (!p)
2245 return NULL;
2246 p->kind = Raise_kind;
2247 p->v.Raise.exc = exc;
2248 p->v.Raise.cause = cause;
2249 p->lineno = lineno;
2250 p->col_offset = col_offset;
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00002251 p->end_lineno = end_lineno;
2252 p->end_col_offset = end_col_offset;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002253 return p;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002254}
2255
2256stmt_ty
Pablo Galindoa5634c42020-09-16 19:42:00 +01002257Try(asdl_stmt_seq * body, asdl_excepthandler_seq * handlers, asdl_stmt_seq *
2258 orelse, asdl_stmt_seq * finalbody, int lineno, int col_offset, int
2259 end_lineno, int end_col_offset, PyArena *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002260{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002261 stmt_ty p;
2262 p = (stmt_ty)PyArena_Malloc(arena, sizeof(*p));
2263 if (!p)
2264 return NULL;
2265 p->kind = Try_kind;
2266 p->v.Try.body = body;
2267 p->v.Try.handlers = handlers;
2268 p->v.Try.orelse = orelse;
2269 p->v.Try.finalbody = finalbody;
2270 p->lineno = lineno;
2271 p->col_offset = col_offset;
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00002272 p->end_lineno = end_lineno;
2273 p->end_col_offset = end_col_offset;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002274 return p;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002275}
2276
2277stmt_ty
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00002278Assert(expr_ty test, expr_ty msg, int lineno, int col_offset, int end_lineno,
2279 int end_col_offset, PyArena *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002280{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002281 stmt_ty p;
2282 if (!test) {
2283 PyErr_SetString(PyExc_ValueError,
Batuhan Taskaya091951a2020-05-06 17:29:32 +03002284 "field 'test' is required for Assert");
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002285 return NULL;
2286 }
2287 p = (stmt_ty)PyArena_Malloc(arena, sizeof(*p));
2288 if (!p)
2289 return NULL;
2290 p->kind = Assert_kind;
2291 p->v.Assert.test = test;
2292 p->v.Assert.msg = msg;
2293 p->lineno = lineno;
2294 p->col_offset = col_offset;
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00002295 p->end_lineno = end_lineno;
2296 p->end_col_offset = end_col_offset;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002297 return p;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002298}
2299
2300stmt_ty
Pablo Galindoa5634c42020-09-16 19:42:00 +01002301Import(asdl_alias_seq * names, int lineno, int col_offset, int end_lineno, int
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00002302 end_col_offset, PyArena *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002303{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002304 stmt_ty p;
2305 p = (stmt_ty)PyArena_Malloc(arena, sizeof(*p));
2306 if (!p)
2307 return NULL;
2308 p->kind = Import_kind;
2309 p->v.Import.names = names;
2310 p->lineno = lineno;
2311 p->col_offset = col_offset;
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00002312 p->end_lineno = end_lineno;
2313 p->end_col_offset = end_col_offset;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002314 return p;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002315}
2316
2317stmt_ty
Pablo Galindoa5634c42020-09-16 19:42:00 +01002318ImportFrom(identifier module, asdl_alias_seq * names, int level, int lineno,
2319 int col_offset, int end_lineno, int end_col_offset, PyArena *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002320{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002321 stmt_ty p;
2322 p = (stmt_ty)PyArena_Malloc(arena, sizeof(*p));
2323 if (!p)
2324 return NULL;
2325 p->kind = ImportFrom_kind;
2326 p->v.ImportFrom.module = module;
2327 p->v.ImportFrom.names = names;
2328 p->v.ImportFrom.level = level;
2329 p->lineno = lineno;
2330 p->col_offset = col_offset;
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00002331 p->end_lineno = end_lineno;
2332 p->end_col_offset = end_col_offset;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002333 return p;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002334}
2335
2336stmt_ty
Pablo Galindoa5634c42020-09-16 19:42:00 +01002337Global(asdl_identifier_seq * names, int lineno, int col_offset, int end_lineno,
2338 int end_col_offset, PyArena *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002339{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002340 stmt_ty p;
2341 p = (stmt_ty)PyArena_Malloc(arena, sizeof(*p));
2342 if (!p)
2343 return NULL;
2344 p->kind = Global_kind;
2345 p->v.Global.names = names;
2346 p->lineno = lineno;
2347 p->col_offset = col_offset;
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00002348 p->end_lineno = end_lineno;
2349 p->end_col_offset = end_col_offset;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002350 return p;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002351}
2352
2353stmt_ty
Pablo Galindoa5634c42020-09-16 19:42:00 +01002354Nonlocal(asdl_identifier_seq * names, int lineno, int col_offset, int
2355 end_lineno, int end_col_offset, PyArena *arena)
Jeremy Hylton81e95022007-02-27 06:50:52 +00002356{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002357 stmt_ty p;
2358 p = (stmt_ty)PyArena_Malloc(arena, sizeof(*p));
2359 if (!p)
2360 return NULL;
2361 p->kind = Nonlocal_kind;
2362 p->v.Nonlocal.names = names;
2363 p->lineno = lineno;
2364 p->col_offset = col_offset;
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00002365 p->end_lineno = end_lineno;
2366 p->end_col_offset = end_col_offset;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002367 return p;
Jeremy Hylton81e95022007-02-27 06:50:52 +00002368}
2369
2370stmt_ty
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00002371Expr(expr_ty value, int lineno, int col_offset, int end_lineno, int
2372 end_col_offset, PyArena *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002373{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002374 stmt_ty p;
2375 if (!value) {
2376 PyErr_SetString(PyExc_ValueError,
Batuhan Taskaya091951a2020-05-06 17:29:32 +03002377 "field 'value' is required for Expr");
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002378 return NULL;
2379 }
2380 p = (stmt_ty)PyArena_Malloc(arena, sizeof(*p));
2381 if (!p)
2382 return NULL;
2383 p->kind = Expr_kind;
2384 p->v.Expr.value = value;
2385 p->lineno = lineno;
2386 p->col_offset = col_offset;
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00002387 p->end_lineno = end_lineno;
2388 p->end_col_offset = end_col_offset;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002389 return p;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002390}
2391
2392stmt_ty
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00002393Pass(int lineno, int col_offset, int end_lineno, int end_col_offset, PyArena
2394 *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002395{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002396 stmt_ty p;
2397 p = (stmt_ty)PyArena_Malloc(arena, sizeof(*p));
2398 if (!p)
2399 return NULL;
2400 p->kind = Pass_kind;
2401 p->lineno = lineno;
2402 p->col_offset = col_offset;
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00002403 p->end_lineno = end_lineno;
2404 p->end_col_offset = end_col_offset;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002405 return p;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002406}
2407
2408stmt_ty
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00002409Break(int lineno, int col_offset, int end_lineno, int end_col_offset, PyArena
2410 *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002411{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002412 stmt_ty p;
2413 p = (stmt_ty)PyArena_Malloc(arena, sizeof(*p));
2414 if (!p)
2415 return NULL;
2416 p->kind = Break_kind;
2417 p->lineno = lineno;
2418 p->col_offset = col_offset;
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00002419 p->end_lineno = end_lineno;
2420 p->end_col_offset = end_col_offset;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002421 return p;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002422}
2423
2424stmt_ty
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00002425Continue(int lineno, int col_offset, int end_lineno, int end_col_offset,
2426 PyArena *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002427{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002428 stmt_ty p;
2429 p = (stmt_ty)PyArena_Malloc(arena, sizeof(*p));
2430 if (!p)
2431 return NULL;
2432 p->kind = Continue_kind;
2433 p->lineno = lineno;
2434 p->col_offset = col_offset;
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00002435 p->end_lineno = end_lineno;
2436 p->end_col_offset = end_col_offset;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002437 return p;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002438}
2439
2440expr_ty
Pablo Galindoa5634c42020-09-16 19:42:00 +01002441BoolOp(boolop_ty op, asdl_expr_seq * values, int lineno, int col_offset, int
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00002442 end_lineno, int end_col_offset, PyArena *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002443{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002444 expr_ty p;
2445 if (!op) {
2446 PyErr_SetString(PyExc_ValueError,
Batuhan Taskaya091951a2020-05-06 17:29:32 +03002447 "field 'op' is required for BoolOp");
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002448 return NULL;
2449 }
2450 p = (expr_ty)PyArena_Malloc(arena, sizeof(*p));
2451 if (!p)
2452 return NULL;
2453 p->kind = BoolOp_kind;
2454 p->v.BoolOp.op = op;
2455 p->v.BoolOp.values = values;
2456 p->lineno = lineno;
2457 p->col_offset = col_offset;
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00002458 p->end_lineno = end_lineno;
2459 p->end_col_offset = end_col_offset;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002460 return p;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002461}
2462
2463expr_ty
Emily Morehouse8f59ee02019-01-24 16:49:56 -07002464NamedExpr(expr_ty target, expr_ty value, int lineno, int col_offset, int
2465 end_lineno, int end_col_offset, PyArena *arena)
2466{
2467 expr_ty p;
2468 if (!target) {
2469 PyErr_SetString(PyExc_ValueError,
Batuhan Taskaya091951a2020-05-06 17:29:32 +03002470 "field 'target' is required for NamedExpr");
Emily Morehouse8f59ee02019-01-24 16:49:56 -07002471 return NULL;
2472 }
2473 if (!value) {
2474 PyErr_SetString(PyExc_ValueError,
Batuhan Taskaya091951a2020-05-06 17:29:32 +03002475 "field 'value' is required for NamedExpr");
Emily Morehouse8f59ee02019-01-24 16:49:56 -07002476 return NULL;
2477 }
2478 p = (expr_ty)PyArena_Malloc(arena, sizeof(*p));
2479 if (!p)
2480 return NULL;
2481 p->kind = NamedExpr_kind;
2482 p->v.NamedExpr.target = target;
2483 p->v.NamedExpr.value = value;
2484 p->lineno = lineno;
2485 p->col_offset = col_offset;
2486 p->end_lineno = end_lineno;
2487 p->end_col_offset = end_col_offset;
2488 return p;
2489}
2490
2491expr_ty
Martin v. Löwis49c5da12006-03-01 22:49:05 +00002492BinOp(expr_ty left, operator_ty op, expr_ty right, int lineno, int col_offset,
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00002493 int end_lineno, int end_col_offset, PyArena *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002494{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002495 expr_ty p;
2496 if (!left) {
2497 PyErr_SetString(PyExc_ValueError,
Batuhan Taskaya091951a2020-05-06 17:29:32 +03002498 "field 'left' is required for BinOp");
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002499 return NULL;
2500 }
2501 if (!op) {
2502 PyErr_SetString(PyExc_ValueError,
Batuhan Taskaya091951a2020-05-06 17:29:32 +03002503 "field 'op' is required for BinOp");
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002504 return NULL;
2505 }
2506 if (!right) {
2507 PyErr_SetString(PyExc_ValueError,
Batuhan Taskaya091951a2020-05-06 17:29:32 +03002508 "field 'right' is required for BinOp");
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002509 return NULL;
2510 }
2511 p = (expr_ty)PyArena_Malloc(arena, sizeof(*p));
2512 if (!p)
2513 return NULL;
2514 p->kind = BinOp_kind;
2515 p->v.BinOp.left = left;
2516 p->v.BinOp.op = op;
2517 p->v.BinOp.right = right;
2518 p->lineno = lineno;
2519 p->col_offset = col_offset;
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00002520 p->end_lineno = end_lineno;
2521 p->end_col_offset = end_col_offset;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002522 return p;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002523}
2524
2525expr_ty
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00002526UnaryOp(unaryop_ty op, expr_ty operand, int lineno, int col_offset, int
2527 end_lineno, int end_col_offset, PyArena *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002528{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002529 expr_ty p;
2530 if (!op) {
2531 PyErr_SetString(PyExc_ValueError,
Batuhan Taskaya091951a2020-05-06 17:29:32 +03002532 "field 'op' is required for UnaryOp");
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002533 return NULL;
2534 }
2535 if (!operand) {
2536 PyErr_SetString(PyExc_ValueError,
Batuhan Taskaya091951a2020-05-06 17:29:32 +03002537 "field 'operand' is required for UnaryOp");
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002538 return NULL;
2539 }
2540 p = (expr_ty)PyArena_Malloc(arena, sizeof(*p));
2541 if (!p)
2542 return NULL;
2543 p->kind = UnaryOp_kind;
2544 p->v.UnaryOp.op = op;
2545 p->v.UnaryOp.operand = operand;
2546 p->lineno = lineno;
2547 p->col_offset = col_offset;
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00002548 p->end_lineno = end_lineno;
2549 p->end_col_offset = end_col_offset;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002550 return p;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002551}
2552
2553expr_ty
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00002554Lambda(arguments_ty args, expr_ty body, int lineno, int col_offset, int
2555 end_lineno, int end_col_offset, PyArena *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002556{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002557 expr_ty p;
2558 if (!args) {
2559 PyErr_SetString(PyExc_ValueError,
Batuhan Taskaya091951a2020-05-06 17:29:32 +03002560 "field 'args' is required for Lambda");
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002561 return NULL;
2562 }
2563 if (!body) {
2564 PyErr_SetString(PyExc_ValueError,
Batuhan Taskaya091951a2020-05-06 17:29:32 +03002565 "field 'body' is required for Lambda");
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002566 return NULL;
2567 }
2568 p = (expr_ty)PyArena_Malloc(arena, sizeof(*p));
2569 if (!p)
2570 return NULL;
2571 p->kind = Lambda_kind;
2572 p->v.Lambda.args = args;
2573 p->v.Lambda.body = body;
2574 p->lineno = lineno;
2575 p->col_offset = col_offset;
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00002576 p->end_lineno = end_lineno;
2577 p->end_col_offset = end_col_offset;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002578 return p;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002579}
2580
2581expr_ty
Martin v. Löwis49c5da12006-03-01 22:49:05 +00002582IfExp(expr_ty test, expr_ty body, expr_ty orelse, int lineno, int col_offset,
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00002583 int end_lineno, int end_col_offset, PyArena *arena)
Thomas Woutersdca3b9c2006-02-27 00:24:13 +00002584{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002585 expr_ty p;
2586 if (!test) {
2587 PyErr_SetString(PyExc_ValueError,
Batuhan Taskaya091951a2020-05-06 17:29:32 +03002588 "field 'test' is required for IfExp");
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002589 return NULL;
2590 }
2591 if (!body) {
2592 PyErr_SetString(PyExc_ValueError,
Batuhan Taskaya091951a2020-05-06 17:29:32 +03002593 "field 'body' is required for IfExp");
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002594 return NULL;
2595 }
2596 if (!orelse) {
2597 PyErr_SetString(PyExc_ValueError,
Batuhan Taskaya091951a2020-05-06 17:29:32 +03002598 "field 'orelse' is required for IfExp");
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002599 return NULL;
2600 }
2601 p = (expr_ty)PyArena_Malloc(arena, sizeof(*p));
2602 if (!p)
2603 return NULL;
2604 p->kind = IfExp_kind;
2605 p->v.IfExp.test = test;
2606 p->v.IfExp.body = body;
2607 p->v.IfExp.orelse = orelse;
2608 p->lineno = lineno;
2609 p->col_offset = col_offset;
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00002610 p->end_lineno = end_lineno;
2611 p->end_col_offset = end_col_offset;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002612 return p;
Thomas Woutersdca3b9c2006-02-27 00:24:13 +00002613}
2614
2615expr_ty
Pablo Galindoa5634c42020-09-16 19:42:00 +01002616Dict(asdl_expr_seq * keys, asdl_expr_seq * values, int lineno, int col_offset,
2617 int end_lineno, int end_col_offset, PyArena *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002618{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002619 expr_ty p;
2620 p = (expr_ty)PyArena_Malloc(arena, sizeof(*p));
2621 if (!p)
2622 return NULL;
2623 p->kind = Dict_kind;
2624 p->v.Dict.keys = keys;
2625 p->v.Dict.values = values;
2626 p->lineno = lineno;
2627 p->col_offset = col_offset;
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00002628 p->end_lineno = end_lineno;
2629 p->end_col_offset = end_col_offset;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002630 return p;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002631}
2632
2633expr_ty
Pablo Galindoa5634c42020-09-16 19:42:00 +01002634Set(asdl_expr_seq * elts, int lineno, int col_offset, int end_lineno, int
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00002635 end_col_offset, PyArena *arena)
Guido van Rossum86e58e22006-08-28 15:27:34 +00002636{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002637 expr_ty p;
2638 p = (expr_ty)PyArena_Malloc(arena, sizeof(*p));
2639 if (!p)
2640 return NULL;
2641 p->kind = Set_kind;
2642 p->v.Set.elts = elts;
2643 p->lineno = lineno;
2644 p->col_offset = col_offset;
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00002645 p->end_lineno = end_lineno;
2646 p->end_col_offset = end_col_offset;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002647 return p;
Guido van Rossum86e58e22006-08-28 15:27:34 +00002648}
2649
2650expr_ty
Pablo Galindoa5634c42020-09-16 19:42:00 +01002651ListComp(expr_ty elt, asdl_comprehension_seq * generators, int lineno, int
2652 col_offset, int end_lineno, int end_col_offset, PyArena *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002653{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002654 expr_ty p;
2655 if (!elt) {
2656 PyErr_SetString(PyExc_ValueError,
Batuhan Taskaya091951a2020-05-06 17:29:32 +03002657 "field 'elt' is required for ListComp");
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002658 return NULL;
2659 }
2660 p = (expr_ty)PyArena_Malloc(arena, sizeof(*p));
2661 if (!p)
2662 return NULL;
2663 p->kind = ListComp_kind;
2664 p->v.ListComp.elt = elt;
2665 p->v.ListComp.generators = generators;
2666 p->lineno = lineno;
2667 p->col_offset = col_offset;
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00002668 p->end_lineno = end_lineno;
2669 p->end_col_offset = end_col_offset;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002670 return p;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002671}
2672
2673expr_ty
Pablo Galindoa5634c42020-09-16 19:42:00 +01002674SetComp(expr_ty elt, asdl_comprehension_seq * generators, int lineno, int
2675 col_offset, int end_lineno, int end_col_offset, PyArena *arena)
Nick Coghlan650f0d02007-04-15 12:05:43 +00002676{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002677 expr_ty p;
2678 if (!elt) {
2679 PyErr_SetString(PyExc_ValueError,
Batuhan Taskaya091951a2020-05-06 17:29:32 +03002680 "field 'elt' is required for SetComp");
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002681 return NULL;
2682 }
2683 p = (expr_ty)PyArena_Malloc(arena, sizeof(*p));
2684 if (!p)
2685 return NULL;
2686 p->kind = SetComp_kind;
2687 p->v.SetComp.elt = elt;
2688 p->v.SetComp.generators = generators;
2689 p->lineno = lineno;
2690 p->col_offset = col_offset;
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00002691 p->end_lineno = end_lineno;
2692 p->end_col_offset = end_col_offset;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002693 return p;
Nick Coghlan650f0d02007-04-15 12:05:43 +00002694}
2695
2696expr_ty
Pablo Galindoa5634c42020-09-16 19:42:00 +01002697DictComp(expr_ty key, expr_ty value, asdl_comprehension_seq * generators, int
2698 lineno, int col_offset, int end_lineno, int end_col_offset, PyArena
2699 *arena)
Guido van Rossum992d4a32007-07-11 13:09:30 +00002700{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002701 expr_ty p;
2702 if (!key) {
2703 PyErr_SetString(PyExc_ValueError,
Batuhan Taskaya091951a2020-05-06 17:29:32 +03002704 "field 'key' is required for DictComp");
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002705 return NULL;
2706 }
2707 if (!value) {
2708 PyErr_SetString(PyExc_ValueError,
Batuhan Taskaya091951a2020-05-06 17:29:32 +03002709 "field 'value' is required for DictComp");
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002710 return NULL;
2711 }
2712 p = (expr_ty)PyArena_Malloc(arena, sizeof(*p));
2713 if (!p)
2714 return NULL;
2715 p->kind = DictComp_kind;
2716 p->v.DictComp.key = key;
2717 p->v.DictComp.value = value;
2718 p->v.DictComp.generators = generators;
2719 p->lineno = lineno;
2720 p->col_offset = col_offset;
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00002721 p->end_lineno = end_lineno;
2722 p->end_col_offset = end_col_offset;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002723 return p;
Guido van Rossum992d4a32007-07-11 13:09:30 +00002724}
2725
2726expr_ty
Pablo Galindoa5634c42020-09-16 19:42:00 +01002727GeneratorExp(expr_ty elt, asdl_comprehension_seq * generators, int lineno, int
2728 col_offset, int end_lineno, int end_col_offset, PyArena *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002729{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002730 expr_ty p;
2731 if (!elt) {
2732 PyErr_SetString(PyExc_ValueError,
Batuhan Taskaya091951a2020-05-06 17:29:32 +03002733 "field 'elt' is required for GeneratorExp");
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002734 return NULL;
2735 }
2736 p = (expr_ty)PyArena_Malloc(arena, sizeof(*p));
2737 if (!p)
2738 return NULL;
2739 p->kind = GeneratorExp_kind;
2740 p->v.GeneratorExp.elt = elt;
2741 p->v.GeneratorExp.generators = generators;
2742 p->lineno = lineno;
2743 p->col_offset = col_offset;
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00002744 p->end_lineno = end_lineno;
2745 p->end_col_offset = end_col_offset;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002746 return p;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002747}
2748
2749expr_ty
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00002750Await(expr_ty value, int lineno, int col_offset, int end_lineno, int
2751 end_col_offset, PyArena *arena)
Yury Selivanov75445082015-05-11 22:57:16 -04002752{
2753 expr_ty p;
2754 if (!value) {
2755 PyErr_SetString(PyExc_ValueError,
Batuhan Taskaya091951a2020-05-06 17:29:32 +03002756 "field 'value' is required for Await");
Yury Selivanov75445082015-05-11 22:57:16 -04002757 return NULL;
2758 }
2759 p = (expr_ty)PyArena_Malloc(arena, sizeof(*p));
2760 if (!p)
2761 return NULL;
2762 p->kind = Await_kind;
2763 p->v.Await.value = value;
2764 p->lineno = lineno;
2765 p->col_offset = col_offset;
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00002766 p->end_lineno = end_lineno;
2767 p->end_col_offset = end_col_offset;
Yury Selivanov75445082015-05-11 22:57:16 -04002768 return p;
2769}
2770
2771expr_ty
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00002772Yield(expr_ty value, int lineno, int col_offset, int end_lineno, int
2773 end_col_offset, PyArena *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002774{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002775 expr_ty p;
2776 p = (expr_ty)PyArena_Malloc(arena, sizeof(*p));
2777 if (!p)
2778 return NULL;
2779 p->kind = Yield_kind;
2780 p->v.Yield.value = value;
2781 p->lineno = lineno;
2782 p->col_offset = col_offset;
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00002783 p->end_lineno = end_lineno;
2784 p->end_col_offset = end_col_offset;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002785 return p;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002786}
2787
2788expr_ty
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00002789YieldFrom(expr_ty value, int lineno, int col_offset, int end_lineno, int
2790 end_col_offset, PyArena *arena)
Benjamin Peterson527c6222012-01-14 08:58:23 -05002791{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002792 expr_ty p;
2793 if (!value) {
2794 PyErr_SetString(PyExc_ValueError,
Batuhan Taskaya091951a2020-05-06 17:29:32 +03002795 "field 'value' is required for YieldFrom");
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002796 return NULL;
2797 }
2798 p = (expr_ty)PyArena_Malloc(arena, sizeof(*p));
2799 if (!p)
2800 return NULL;
2801 p->kind = YieldFrom_kind;
2802 p->v.YieldFrom.value = value;
2803 p->lineno = lineno;
2804 p->col_offset = col_offset;
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00002805 p->end_lineno = end_lineno;
2806 p->end_col_offset = end_col_offset;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002807 return p;
Benjamin Peterson527c6222012-01-14 08:58:23 -05002808}
2809
2810expr_ty
Pablo Galindoa5634c42020-09-16 19:42:00 +01002811Compare(expr_ty left, asdl_int_seq * ops, asdl_expr_seq * comparators, int
2812 lineno, int col_offset, int end_lineno, int end_col_offset, PyArena
2813 *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002814{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002815 expr_ty p;
2816 if (!left) {
2817 PyErr_SetString(PyExc_ValueError,
Batuhan Taskaya091951a2020-05-06 17:29:32 +03002818 "field 'left' is required for Compare");
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002819 return NULL;
2820 }
2821 p = (expr_ty)PyArena_Malloc(arena, sizeof(*p));
2822 if (!p)
2823 return NULL;
2824 p->kind = Compare_kind;
2825 p->v.Compare.left = left;
2826 p->v.Compare.ops = ops;
2827 p->v.Compare.comparators = comparators;
2828 p->lineno = lineno;
2829 p->col_offset = col_offset;
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00002830 p->end_lineno = end_lineno;
2831 p->end_col_offset = end_col_offset;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002832 return p;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002833}
2834
2835expr_ty
Pablo Galindoa5634c42020-09-16 19:42:00 +01002836Call(expr_ty func, asdl_expr_seq * args, asdl_keyword_seq * keywords, int
2837 lineno, int col_offset, int end_lineno, int end_col_offset, PyArena *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002838{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002839 expr_ty p;
2840 if (!func) {
2841 PyErr_SetString(PyExc_ValueError,
Batuhan Taskaya091951a2020-05-06 17:29:32 +03002842 "field 'func' is required for Call");
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002843 return NULL;
2844 }
2845 p = (expr_ty)PyArena_Malloc(arena, sizeof(*p));
2846 if (!p)
2847 return NULL;
2848 p->kind = Call_kind;
2849 p->v.Call.func = func;
2850 p->v.Call.args = args;
2851 p->v.Call.keywords = keywords;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002852 p->lineno = lineno;
2853 p->col_offset = col_offset;
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00002854 p->end_lineno = end_lineno;
2855 p->end_col_offset = end_col_offset;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002856 return p;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002857}
2858
2859expr_ty
Eric V. Smith6f6ff8a2019-05-27 15:31:52 -04002860FormattedValue(expr_ty value, int conversion, expr_ty format_spec, int lineno,
2861 int col_offset, int end_lineno, int end_col_offset, PyArena
2862 *arena)
Eric V. Smith235a6f02015-09-19 14:51:32 -04002863{
2864 expr_ty p;
2865 if (!value) {
2866 PyErr_SetString(PyExc_ValueError,
Batuhan Taskaya091951a2020-05-06 17:29:32 +03002867 "field 'value' is required for FormattedValue");
Eric V. Smith235a6f02015-09-19 14:51:32 -04002868 return NULL;
2869 }
2870 p = (expr_ty)PyArena_Malloc(arena, sizeof(*p));
2871 if (!p)
2872 return NULL;
2873 p->kind = FormattedValue_kind;
2874 p->v.FormattedValue.value = value;
2875 p->v.FormattedValue.conversion = conversion;
2876 p->v.FormattedValue.format_spec = format_spec;
2877 p->lineno = lineno;
2878 p->col_offset = col_offset;
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00002879 p->end_lineno = end_lineno;
2880 p->end_col_offset = end_col_offset;
Eric V. Smith235a6f02015-09-19 14:51:32 -04002881 return p;
2882}
2883
2884expr_ty
Pablo Galindoa5634c42020-09-16 19:42:00 +01002885JoinedStr(asdl_expr_seq * values, int lineno, int col_offset, int end_lineno,
2886 int end_col_offset, PyArena *arena)
Eric V. Smith235a6f02015-09-19 14:51:32 -04002887{
2888 expr_ty p;
2889 p = (expr_ty)PyArena_Malloc(arena, sizeof(*p));
2890 if (!p)
2891 return NULL;
2892 p->kind = JoinedStr_kind;
2893 p->v.JoinedStr.values = values;
2894 p->lineno = lineno;
2895 p->col_offset = col_offset;
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00002896 p->end_lineno = end_lineno;
2897 p->end_col_offset = end_col_offset;
Eric V. Smith235a6f02015-09-19 14:51:32 -04002898 return p;
2899}
2900
2901expr_ty
Guido van Rossum10f8ce62019-03-13 13:00:46 -07002902Constant(constant value, string kind, int lineno, int col_offset, int
2903 end_lineno, int end_col_offset, PyArena *arena)
Victor Stinnerf2c1aa12016-01-26 00:40:57 +01002904{
2905 expr_ty p;
2906 if (!value) {
2907 PyErr_SetString(PyExc_ValueError,
Batuhan Taskaya091951a2020-05-06 17:29:32 +03002908 "field 'value' is required for Constant");
Victor Stinnerf2c1aa12016-01-26 00:40:57 +01002909 return NULL;
2910 }
2911 p = (expr_ty)PyArena_Malloc(arena, sizeof(*p));
2912 if (!p)
2913 return NULL;
2914 p->kind = Constant_kind;
2915 p->v.Constant.value = value;
Guido van Rossum10f8ce62019-03-13 13:00:46 -07002916 p->v.Constant.kind = kind;
Victor Stinnerf2c1aa12016-01-26 00:40:57 +01002917 p->lineno = lineno;
2918 p->col_offset = col_offset;
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00002919 p->end_lineno = end_lineno;
2920 p->end_col_offset = end_col_offset;
Victor Stinnerf2c1aa12016-01-26 00:40:57 +01002921 return p;
2922}
2923
2924expr_ty
Martin v. Löwis49c5da12006-03-01 22:49:05 +00002925Attribute(expr_ty value, identifier attr, expr_context_ty ctx, int lineno, int
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00002926 col_offset, int end_lineno, int end_col_offset, PyArena *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002927{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002928 expr_ty p;
2929 if (!value) {
2930 PyErr_SetString(PyExc_ValueError,
Batuhan Taskaya091951a2020-05-06 17:29:32 +03002931 "field 'value' is required for Attribute");
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002932 return NULL;
2933 }
2934 if (!attr) {
2935 PyErr_SetString(PyExc_ValueError,
Batuhan Taskaya091951a2020-05-06 17:29:32 +03002936 "field 'attr' is required for Attribute");
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002937 return NULL;
2938 }
2939 if (!ctx) {
2940 PyErr_SetString(PyExc_ValueError,
Batuhan Taskaya091951a2020-05-06 17:29:32 +03002941 "field 'ctx' is required for Attribute");
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002942 return NULL;
2943 }
2944 p = (expr_ty)PyArena_Malloc(arena, sizeof(*p));
2945 if (!p)
2946 return NULL;
2947 p->kind = Attribute_kind;
2948 p->v.Attribute.value = value;
2949 p->v.Attribute.attr = attr;
2950 p->v.Attribute.ctx = ctx;
2951 p->lineno = lineno;
2952 p->col_offset = col_offset;
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00002953 p->end_lineno = end_lineno;
2954 p->end_col_offset = end_col_offset;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002955 return p;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002956}
2957
2958expr_ty
Serhiy Storchaka13d52c22020-03-10 18:52:34 +02002959Subscript(expr_ty value, expr_ty slice, expr_context_ty ctx, int lineno, int
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00002960 col_offset, int end_lineno, int end_col_offset, PyArena *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002961{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002962 expr_ty p;
2963 if (!value) {
2964 PyErr_SetString(PyExc_ValueError,
Batuhan Taskaya091951a2020-05-06 17:29:32 +03002965 "field 'value' is required for Subscript");
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002966 return NULL;
2967 }
2968 if (!slice) {
2969 PyErr_SetString(PyExc_ValueError,
Batuhan Taskaya091951a2020-05-06 17:29:32 +03002970 "field 'slice' is required for Subscript");
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002971 return NULL;
2972 }
2973 if (!ctx) {
2974 PyErr_SetString(PyExc_ValueError,
Batuhan Taskaya091951a2020-05-06 17:29:32 +03002975 "field 'ctx' is required for Subscript");
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002976 return NULL;
2977 }
2978 p = (expr_ty)PyArena_Malloc(arena, sizeof(*p));
2979 if (!p)
2980 return NULL;
2981 p->kind = Subscript_kind;
2982 p->v.Subscript.value = value;
2983 p->v.Subscript.slice = slice;
2984 p->v.Subscript.ctx = ctx;
2985 p->lineno = lineno;
2986 p->col_offset = col_offset;
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00002987 p->end_lineno = end_lineno;
2988 p->end_col_offset = end_col_offset;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002989 return p;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002990}
2991
2992expr_ty
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00002993Starred(expr_ty value, expr_context_ty ctx, int lineno, int col_offset, int
2994 end_lineno, int end_col_offset, PyArena *arena)
Guido van Rossum0368b722007-05-11 16:50:42 +00002995{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02002996 expr_ty p;
2997 if (!value) {
2998 PyErr_SetString(PyExc_ValueError,
Batuhan Taskaya091951a2020-05-06 17:29:32 +03002999 "field 'value' is required for Starred");
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003000 return NULL;
3001 }
3002 if (!ctx) {
3003 PyErr_SetString(PyExc_ValueError,
Batuhan Taskaya091951a2020-05-06 17:29:32 +03003004 "field 'ctx' is required for Starred");
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003005 return NULL;
3006 }
3007 p = (expr_ty)PyArena_Malloc(arena, sizeof(*p));
3008 if (!p)
3009 return NULL;
3010 p->kind = Starred_kind;
3011 p->v.Starred.value = value;
3012 p->v.Starred.ctx = ctx;
3013 p->lineno = lineno;
3014 p->col_offset = col_offset;
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00003015 p->end_lineno = end_lineno;
3016 p->end_col_offset = end_col_offset;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003017 return p;
Guido van Rossum0368b722007-05-11 16:50:42 +00003018}
3019
3020expr_ty
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00003021Name(identifier id, expr_context_ty ctx, int lineno, int col_offset, int
3022 end_lineno, int end_col_offset, PyArena *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00003023{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003024 expr_ty p;
3025 if (!id) {
3026 PyErr_SetString(PyExc_ValueError,
Batuhan Taskaya091951a2020-05-06 17:29:32 +03003027 "field 'id' is required for Name");
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003028 return NULL;
3029 }
3030 if (!ctx) {
3031 PyErr_SetString(PyExc_ValueError,
Batuhan Taskaya091951a2020-05-06 17:29:32 +03003032 "field 'ctx' is required for Name");
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003033 return NULL;
3034 }
3035 p = (expr_ty)PyArena_Malloc(arena, sizeof(*p));
3036 if (!p)
3037 return NULL;
3038 p->kind = Name_kind;
3039 p->v.Name.id = id;
3040 p->v.Name.ctx = ctx;
3041 p->lineno = lineno;
3042 p->col_offset = col_offset;
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00003043 p->end_lineno = end_lineno;
3044 p->end_col_offset = end_col_offset;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003045 return p;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00003046}
3047
3048expr_ty
Pablo Galindoa5634c42020-09-16 19:42:00 +01003049List(asdl_expr_seq * elts, expr_context_ty ctx, int lineno, int col_offset, int
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00003050 end_lineno, int end_col_offset, PyArena *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00003051{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003052 expr_ty p;
3053 if (!ctx) {
3054 PyErr_SetString(PyExc_ValueError,
Batuhan Taskaya091951a2020-05-06 17:29:32 +03003055 "field 'ctx' is required for List");
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003056 return NULL;
3057 }
3058 p = (expr_ty)PyArena_Malloc(arena, sizeof(*p));
3059 if (!p)
3060 return NULL;
3061 p->kind = List_kind;
3062 p->v.List.elts = elts;
3063 p->v.List.ctx = ctx;
3064 p->lineno = lineno;
3065 p->col_offset = col_offset;
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00003066 p->end_lineno = end_lineno;
3067 p->end_col_offset = end_col_offset;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003068 return p;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00003069}
3070
3071expr_ty
Pablo Galindoa5634c42020-09-16 19:42:00 +01003072Tuple(asdl_expr_seq * elts, expr_context_ty ctx, int lineno, int col_offset,
3073 int end_lineno, int end_col_offset, PyArena *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00003074{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003075 expr_ty p;
3076 if (!ctx) {
3077 PyErr_SetString(PyExc_ValueError,
Batuhan Taskaya091951a2020-05-06 17:29:32 +03003078 "field 'ctx' is required for Tuple");
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003079 return NULL;
3080 }
3081 p = (expr_ty)PyArena_Malloc(arena, sizeof(*p));
3082 if (!p)
3083 return NULL;
3084 p->kind = Tuple_kind;
3085 p->v.Tuple.elts = elts;
3086 p->v.Tuple.ctx = ctx;
3087 p->lineno = lineno;
3088 p->col_offset = col_offset;
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00003089 p->end_lineno = end_lineno;
3090 p->end_col_offset = end_col_offset;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003091 return p;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00003092}
3093
Serhiy Storchaka13d52c22020-03-10 18:52:34 +02003094expr_ty
3095Slice(expr_ty lower, expr_ty upper, expr_ty step, int lineno, int col_offset,
3096 int end_lineno, int end_col_offset, PyArena *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00003097{
Serhiy Storchaka13d52c22020-03-10 18:52:34 +02003098 expr_ty p;
3099 p = (expr_ty)PyArena_Malloc(arena, sizeof(*p));
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003100 if (!p)
3101 return NULL;
3102 p->kind = Slice_kind;
3103 p->v.Slice.lower = lower;
3104 p->v.Slice.upper = upper;
3105 p->v.Slice.step = step;
Serhiy Storchaka13d52c22020-03-10 18:52:34 +02003106 p->lineno = lineno;
3107 p->col_offset = col_offset;
3108 p->end_lineno = end_lineno;
3109 p->end_col_offset = end_col_offset;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003110 return p;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00003111}
3112
Brandt Bucher145bf262021-02-26 14:51:55 -08003113expr_ty
3114MatchAs(expr_ty pattern, identifier name, int lineno, int col_offset, int
3115 end_lineno, int end_col_offset, PyArena *arena)
3116{
3117 expr_ty p;
3118 if (!pattern) {
3119 PyErr_SetString(PyExc_ValueError,
3120 "field 'pattern' is required for MatchAs");
3121 return NULL;
3122 }
3123 if (!name) {
3124 PyErr_SetString(PyExc_ValueError,
3125 "field 'name' is required for MatchAs");
3126 return NULL;
3127 }
3128 p = (expr_ty)PyArena_Malloc(arena, sizeof(*p));
3129 if (!p)
3130 return NULL;
3131 p->kind = MatchAs_kind;
3132 p->v.MatchAs.pattern = pattern;
3133 p->v.MatchAs.name = name;
3134 p->lineno = lineno;
3135 p->col_offset = col_offset;
3136 p->end_lineno = end_lineno;
3137 p->end_col_offset = end_col_offset;
3138 return p;
3139}
3140
3141expr_ty
3142MatchOr(asdl_expr_seq * patterns, int lineno, int col_offset, int end_lineno,
3143 int end_col_offset, PyArena *arena)
3144{
3145 expr_ty p;
3146 p = (expr_ty)PyArena_Malloc(arena, sizeof(*p));
3147 if (!p)
3148 return NULL;
3149 p->kind = MatchOr_kind;
3150 p->v.MatchOr.patterns = patterns;
3151 p->lineno = lineno;
3152 p->col_offset = col_offset;
3153 p->end_lineno = end_lineno;
3154 p->end_col_offset = end_col_offset;
3155 return p;
3156}
3157
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00003158comprehension_ty
Pablo Galindoa5634c42020-09-16 19:42:00 +01003159comprehension(expr_ty target, expr_ty iter, asdl_expr_seq * ifs, int is_async,
Yury Selivanov52c4e7c2016-09-09 10:36:01 -07003160 PyArena *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00003161{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003162 comprehension_ty p;
3163 if (!target) {
3164 PyErr_SetString(PyExc_ValueError,
Batuhan Taskaya091951a2020-05-06 17:29:32 +03003165 "field 'target' is required for comprehension");
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003166 return NULL;
3167 }
3168 if (!iter) {
3169 PyErr_SetString(PyExc_ValueError,
Batuhan Taskaya091951a2020-05-06 17:29:32 +03003170 "field 'iter' is required for comprehension");
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003171 return NULL;
3172 }
3173 p = (comprehension_ty)PyArena_Malloc(arena, sizeof(*p));
3174 if (!p)
3175 return NULL;
3176 p->target = target;
3177 p->iter = iter;
3178 p->ifs = ifs;
Yury Selivanov52c4e7c2016-09-09 10:36:01 -07003179 p->is_async = is_async;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003180 return p;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00003181}
3182
3183excepthandler_ty
Pablo Galindoa5634c42020-09-16 19:42:00 +01003184ExceptHandler(expr_ty type, identifier name, asdl_stmt_seq * body, int lineno,
3185 int col_offset, int end_lineno, int end_col_offset, PyArena
3186 *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00003187{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003188 excepthandler_ty p;
3189 p = (excepthandler_ty)PyArena_Malloc(arena, sizeof(*p));
3190 if (!p)
3191 return NULL;
3192 p->kind = ExceptHandler_kind;
3193 p->v.ExceptHandler.type = type;
3194 p->v.ExceptHandler.name = name;
3195 p->v.ExceptHandler.body = body;
3196 p->lineno = lineno;
3197 p->col_offset = col_offset;
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00003198 p->end_lineno = end_lineno;
3199 p->end_col_offset = end_col_offset;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003200 return p;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00003201}
3202
3203arguments_ty
Pablo Galindoa5634c42020-09-16 19:42:00 +01003204arguments(asdl_arg_seq * posonlyargs, asdl_arg_seq * args, arg_ty vararg,
3205 asdl_arg_seq * kwonlyargs, asdl_expr_seq * kw_defaults, arg_ty kwarg,
3206 asdl_expr_seq * defaults, PyArena *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00003207{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003208 arguments_ty p;
3209 p = (arguments_ty)PyArena_Malloc(arena, sizeof(*p));
3210 if (!p)
3211 return NULL;
Pablo Galindo8c77b8c2019-04-29 13:36:57 +01003212 p->posonlyargs = posonlyargs;
Pablo Galindocd6e83b2019-07-15 01:32:18 +02003213 p->args = args;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003214 p->vararg = vararg;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003215 p->kwonlyargs = kwonlyargs;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003216 p->kw_defaults = kw_defaults;
Victor Stinneree4b59c2013-07-27 00:01:35 +02003217 p->kwarg = kwarg;
3218 p->defaults = defaults;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003219 return p;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00003220}
3221
Neal Norwitzc1505362006-12-28 06:47:50 +00003222arg_ty
Guido van Rossumdcfcd142019-01-31 03:40:27 -08003223arg(identifier arg, expr_ty annotation, string type_comment, int lineno, int
3224 col_offset, int end_lineno, int end_col_offset, PyArena *arena)
Neal Norwitzc1505362006-12-28 06:47:50 +00003225{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003226 arg_ty p;
3227 if (!arg) {
3228 PyErr_SetString(PyExc_ValueError,
Batuhan Taskaya091951a2020-05-06 17:29:32 +03003229 "field 'arg' is required for arg");
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003230 return NULL;
3231 }
3232 p = (arg_ty)PyArena_Malloc(arena, sizeof(*p));
3233 if (!p)
3234 return NULL;
3235 p->arg = arg;
3236 p->annotation = annotation;
Guido van Rossumdcfcd142019-01-31 03:40:27 -08003237 p->type_comment = type_comment;
Victor Stinnerc106c682015-11-06 17:01:48 +01003238 p->lineno = lineno;
3239 p->col_offset = col_offset;
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00003240 p->end_lineno = end_lineno;
3241 p->end_col_offset = end_col_offset;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003242 return p;
Neal Norwitzc1505362006-12-28 06:47:50 +00003243}
3244
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00003245keyword_ty
Pablo Galindo168660b2020-04-02 00:47:39 +01003246keyword(identifier arg, expr_ty value, int lineno, int col_offset, int
3247 end_lineno, int end_col_offset, PyArena *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00003248{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003249 keyword_ty p;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003250 if (!value) {
3251 PyErr_SetString(PyExc_ValueError,
Batuhan Taskaya091951a2020-05-06 17:29:32 +03003252 "field 'value' is required for keyword");
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003253 return NULL;
3254 }
3255 p = (keyword_ty)PyArena_Malloc(arena, sizeof(*p));
3256 if (!p)
3257 return NULL;
3258 p->arg = arg;
3259 p->value = value;
Pablo Galindo168660b2020-04-02 00:47:39 +01003260 p->lineno = lineno;
3261 p->col_offset = col_offset;
3262 p->end_lineno = end_lineno;
3263 p->end_col_offset = end_col_offset;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003264 return p;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00003265}
3266
3267alias_ty
Neal Norwitzadb69fc2005-12-17 20:54:49 +00003268alias(identifier name, identifier asname, PyArena *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00003269{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003270 alias_ty p;
3271 if (!name) {
3272 PyErr_SetString(PyExc_ValueError,
Batuhan Taskaya091951a2020-05-06 17:29:32 +03003273 "field 'name' is required for alias");
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003274 return NULL;
3275 }
3276 p = (alias_ty)PyArena_Malloc(arena, sizeof(*p));
3277 if (!p)
3278 return NULL;
3279 p->name = name;
3280 p->asname = asname;
3281 return p;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00003282}
3283
Benjamin Petersonbf1bbc12011-05-27 13:58:08 -05003284withitem_ty
3285withitem(expr_ty context_expr, expr_ty optional_vars, PyArena *arena)
3286{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003287 withitem_ty p;
3288 if (!context_expr) {
3289 PyErr_SetString(PyExc_ValueError,
Batuhan Taskaya091951a2020-05-06 17:29:32 +03003290 "field 'context_expr' is required for withitem");
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003291 return NULL;
3292 }
3293 p = (withitem_ty)PyArena_Malloc(arena, sizeof(*p));
3294 if (!p)
3295 return NULL;
3296 p->context_expr = context_expr;
3297 p->optional_vars = optional_vars;
3298 return p;
Benjamin Petersonbf1bbc12011-05-27 13:58:08 -05003299}
3300
Brandt Bucher145bf262021-02-26 14:51:55 -08003301match_case_ty
3302match_case(expr_ty pattern, expr_ty guard, asdl_stmt_seq * body, PyArena *arena)
3303{
3304 match_case_ty p;
3305 if (!pattern) {
3306 PyErr_SetString(PyExc_ValueError,
3307 "field 'pattern' is required for match_case");
3308 return NULL;
3309 }
3310 p = (match_case_ty)PyArena_Malloc(arena, sizeof(*p));
3311 if (!p)
3312 return NULL;
3313 p->pattern = pattern;
3314 p->guard = guard;
3315 p->body = body;
3316 return p;
3317}
3318
Guido van Rossumdcfcd142019-01-31 03:40:27 -08003319type_ignore_ty
Michael J. Sullivan933e1502019-05-22 07:54:20 -07003320TypeIgnore(int lineno, string tag, PyArena *arena)
Guido van Rossumdcfcd142019-01-31 03:40:27 -08003321{
3322 type_ignore_ty p;
Michael J. Sullivan933e1502019-05-22 07:54:20 -07003323 if (!tag) {
3324 PyErr_SetString(PyExc_ValueError,
Batuhan Taskaya091951a2020-05-06 17:29:32 +03003325 "field 'tag' is required for TypeIgnore");
Michael J. Sullivan933e1502019-05-22 07:54:20 -07003326 return NULL;
3327 }
Guido van Rossumdcfcd142019-01-31 03:40:27 -08003328 p = (type_ignore_ty)PyArena_Malloc(arena, sizeof(*p));
3329 if (!p)
3330 return NULL;
3331 p->kind = TypeIgnore_kind;
3332 p->v.TypeIgnore.lineno = lineno;
Michael J. Sullivan933e1502019-05-22 07:54:20 -07003333 p->v.TypeIgnore.tag = tag;
Guido van Rossumdcfcd142019-01-31 03:40:27 -08003334 return p;
3335}
3336
Neal Norwitz7b5a6042005-11-13 19:14:20 +00003337
Martin v. Löwisbd260da2006-02-26 19:42:26 +00003338PyObject*
Victor Stinner5cf47822020-11-02 22:03:28 +01003339ast2obj_mod(struct ast_state *state, void* _o)
Neal Norwitz7b5a6042005-11-13 19:14:20 +00003340{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003341 mod_ty o = (mod_ty)_o;
3342 PyObject *result = NULL, *value = NULL;
Dino Viehlandac46eb42019-09-11 10:16:34 -07003343 PyTypeObject *tp;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003344 if (!o) {
Serhiy Storchaka228b12e2017-01-23 09:47:21 +02003345 Py_RETURN_NONE;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003346 }
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003347 switch (o->kind) {
3348 case Module_kind:
Victor Stinner74419f02020-07-03 11:35:37 +02003349 tp = (PyTypeObject *)state->Module_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07003350 result = PyType_GenericNew(tp, NULL, NULL);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003351 if (!result) goto failed;
Pablo Galindoa5634c42020-09-16 19:42:00 +01003352 value = ast2obj_list(state, (asdl_seq*)o->v.Module.body, ast2obj_stmt);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003353 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02003354 if (PyObject_SetAttr(result, state->body, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003355 goto failed;
3356 Py_DECREF(value);
Pablo Galindoa5634c42020-09-16 19:42:00 +01003357 value = ast2obj_list(state, (asdl_seq*)o->v.Module.type_ignores,
Victor Stinner74419f02020-07-03 11:35:37 +02003358 ast2obj_type_ignore);
Guido van Rossumdcfcd142019-01-31 03:40:27 -08003359 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02003360 if (PyObject_SetAttr(result, state->type_ignores, value) == -1)
Guido van Rossumdcfcd142019-01-31 03:40:27 -08003361 goto failed;
3362 Py_DECREF(value);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003363 break;
3364 case Interactive_kind:
Victor Stinner74419f02020-07-03 11:35:37 +02003365 tp = (PyTypeObject *)state->Interactive_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07003366 result = PyType_GenericNew(tp, NULL, NULL);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003367 if (!result) goto failed;
Pablo Galindoa5634c42020-09-16 19:42:00 +01003368 value = ast2obj_list(state, (asdl_seq*)o->v.Interactive.body,
3369 ast2obj_stmt);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003370 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02003371 if (PyObject_SetAttr(result, state->body, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003372 goto failed;
3373 Py_DECREF(value);
3374 break;
3375 case Expression_kind:
Victor Stinner74419f02020-07-03 11:35:37 +02003376 tp = (PyTypeObject *)state->Expression_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07003377 result = PyType_GenericNew(tp, NULL, NULL);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003378 if (!result) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02003379 value = ast2obj_expr(state, o->v.Expression.body);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003380 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02003381 if (PyObject_SetAttr(result, state->body, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003382 goto failed;
3383 Py_DECREF(value);
3384 break;
Guido van Rossumdcfcd142019-01-31 03:40:27 -08003385 case FunctionType_kind:
Victor Stinner74419f02020-07-03 11:35:37 +02003386 tp = (PyTypeObject *)state->FunctionType_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07003387 result = PyType_GenericNew(tp, NULL, NULL);
Guido van Rossumdcfcd142019-01-31 03:40:27 -08003388 if (!result) goto failed;
Pablo Galindoa5634c42020-09-16 19:42:00 +01003389 value = ast2obj_list(state, (asdl_seq*)o->v.FunctionType.argtypes,
3390 ast2obj_expr);
Guido van Rossumdcfcd142019-01-31 03:40:27 -08003391 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02003392 if (PyObject_SetAttr(result, state->argtypes, value) == -1)
Guido van Rossumdcfcd142019-01-31 03:40:27 -08003393 goto failed;
3394 Py_DECREF(value);
Victor Stinner74419f02020-07-03 11:35:37 +02003395 value = ast2obj_expr(state, o->v.FunctionType.returns);
Guido van Rossumdcfcd142019-01-31 03:40:27 -08003396 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02003397 if (PyObject_SetAttr(result, state->returns, value) == -1)
Guido van Rossumdcfcd142019-01-31 03:40:27 -08003398 goto failed;
3399 Py_DECREF(value);
3400 break;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003401 }
3402 return result;
Martin v. Löwisbd260da2006-02-26 19:42:26 +00003403failed:
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003404 Py_XDECREF(value);
3405 Py_XDECREF(result);
3406 return NULL;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00003407}
3408
Martin v. Löwisbd260da2006-02-26 19:42:26 +00003409PyObject*
Victor Stinner5cf47822020-11-02 22:03:28 +01003410ast2obj_stmt(struct ast_state *state, void* _o)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00003411{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003412 stmt_ty o = (stmt_ty)_o;
3413 PyObject *result = NULL, *value = NULL;
Dino Viehlandac46eb42019-09-11 10:16:34 -07003414 PyTypeObject *tp;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003415 if (!o) {
Serhiy Storchaka228b12e2017-01-23 09:47:21 +02003416 Py_RETURN_NONE;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003417 }
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003418 switch (o->kind) {
3419 case FunctionDef_kind:
Victor Stinner74419f02020-07-03 11:35:37 +02003420 tp = (PyTypeObject *)state->FunctionDef_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07003421 result = PyType_GenericNew(tp, NULL, NULL);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003422 if (!result) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02003423 value = ast2obj_identifier(state, o->v.FunctionDef.name);
Martin v. Löwis577b5b92006-02-27 15:23:19 +00003424 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02003425 if (PyObject_SetAttr(result, state->name, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003426 goto failed;
Martin v. Löwis03e5bc02006-03-02 00:31:27 +00003427 Py_DECREF(value);
Victor Stinner74419f02020-07-03 11:35:37 +02003428 value = ast2obj_arguments(state, o->v.FunctionDef.args);
Martin v. Löwis49c5da12006-03-01 22:49:05 +00003429 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02003430 if (PyObject_SetAttr(result, state->args, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003431 goto failed;
Martin v. Löwis03e5bc02006-03-02 00:31:27 +00003432 Py_DECREF(value);
Pablo Galindoa5634c42020-09-16 19:42:00 +01003433 value = ast2obj_list(state, (asdl_seq*)o->v.FunctionDef.body,
3434 ast2obj_stmt);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003435 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02003436 if (PyObject_SetAttr(result, state->body, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003437 goto failed;
3438 Py_DECREF(value);
Pablo Galindoa5634c42020-09-16 19:42:00 +01003439 value = ast2obj_list(state, (asdl_seq*)o->v.FunctionDef.decorator_list,
Victor Stinner74419f02020-07-03 11:35:37 +02003440 ast2obj_expr);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003441 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02003442 if (PyObject_SetAttr(result, state->decorator_list, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003443 goto failed;
3444 Py_DECREF(value);
Victor Stinner74419f02020-07-03 11:35:37 +02003445 value = ast2obj_expr(state, o->v.FunctionDef.returns);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003446 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02003447 if (PyObject_SetAttr(result, state->returns, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003448 goto failed;
3449 Py_DECREF(value);
Victor Stinner74419f02020-07-03 11:35:37 +02003450 value = ast2obj_string(state, o->v.FunctionDef.type_comment);
Guido van Rossumdcfcd142019-01-31 03:40:27 -08003451 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02003452 if (PyObject_SetAttr(result, state->type_comment, value) == -1)
Guido van Rossumdcfcd142019-01-31 03:40:27 -08003453 goto failed;
3454 Py_DECREF(value);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003455 break;
Yury Selivanov75445082015-05-11 22:57:16 -04003456 case AsyncFunctionDef_kind:
Victor Stinner74419f02020-07-03 11:35:37 +02003457 tp = (PyTypeObject *)state->AsyncFunctionDef_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07003458 result = PyType_GenericNew(tp, NULL, NULL);
Yury Selivanov75445082015-05-11 22:57:16 -04003459 if (!result) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02003460 value = ast2obj_identifier(state, o->v.AsyncFunctionDef.name);
Yury Selivanov75445082015-05-11 22:57:16 -04003461 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02003462 if (PyObject_SetAttr(result, state->name, value) == -1)
Yury Selivanov75445082015-05-11 22:57:16 -04003463 goto failed;
3464 Py_DECREF(value);
Victor Stinner74419f02020-07-03 11:35:37 +02003465 value = ast2obj_arguments(state, o->v.AsyncFunctionDef.args);
Yury Selivanov75445082015-05-11 22:57:16 -04003466 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02003467 if (PyObject_SetAttr(result, state->args, value) == -1)
Yury Selivanov75445082015-05-11 22:57:16 -04003468 goto failed;
3469 Py_DECREF(value);
Pablo Galindoa5634c42020-09-16 19:42:00 +01003470 value = ast2obj_list(state, (asdl_seq*)o->v.AsyncFunctionDef.body,
3471 ast2obj_stmt);
Yury Selivanov75445082015-05-11 22:57:16 -04003472 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02003473 if (PyObject_SetAttr(result, state->body, value) == -1)
Yury Selivanov75445082015-05-11 22:57:16 -04003474 goto failed;
3475 Py_DECREF(value);
Pablo Galindoa5634c42020-09-16 19:42:00 +01003476 value = ast2obj_list(state,
3477 (asdl_seq*)o->v.AsyncFunctionDef.decorator_list,
Yury Selivanov75445082015-05-11 22:57:16 -04003478 ast2obj_expr);
3479 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02003480 if (PyObject_SetAttr(result, state->decorator_list, value) == -1)
Yury Selivanov75445082015-05-11 22:57:16 -04003481 goto failed;
3482 Py_DECREF(value);
Victor Stinner74419f02020-07-03 11:35:37 +02003483 value = ast2obj_expr(state, o->v.AsyncFunctionDef.returns);
Yury Selivanov75445082015-05-11 22:57:16 -04003484 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02003485 if (PyObject_SetAttr(result, state->returns, value) == -1)
Yury Selivanov75445082015-05-11 22:57:16 -04003486 goto failed;
3487 Py_DECREF(value);
Victor Stinner74419f02020-07-03 11:35:37 +02003488 value = ast2obj_string(state, o->v.AsyncFunctionDef.type_comment);
Guido van Rossumdcfcd142019-01-31 03:40:27 -08003489 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02003490 if (PyObject_SetAttr(result, state->type_comment, value) == -1)
Guido van Rossumdcfcd142019-01-31 03:40:27 -08003491 goto failed;
3492 Py_DECREF(value);
Yury Selivanov75445082015-05-11 22:57:16 -04003493 break;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003494 case ClassDef_kind:
Victor Stinner74419f02020-07-03 11:35:37 +02003495 tp = (PyTypeObject *)state->ClassDef_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07003496 result = PyType_GenericNew(tp, NULL, NULL);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003497 if (!result) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02003498 value = ast2obj_identifier(state, o->v.ClassDef.name);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003499 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02003500 if (PyObject_SetAttr(result, state->name, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003501 goto failed;
3502 Py_DECREF(value);
Pablo Galindoa5634c42020-09-16 19:42:00 +01003503 value = ast2obj_list(state, (asdl_seq*)o->v.ClassDef.bases,
3504 ast2obj_expr);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003505 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02003506 if (PyObject_SetAttr(result, state->bases, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003507 goto failed;
3508 Py_DECREF(value);
Pablo Galindoa5634c42020-09-16 19:42:00 +01003509 value = ast2obj_list(state, (asdl_seq*)o->v.ClassDef.keywords,
3510 ast2obj_keyword);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003511 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02003512 if (PyObject_SetAttr(result, state->keywords, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003513 goto failed;
3514 Py_DECREF(value);
Pablo Galindoa5634c42020-09-16 19:42:00 +01003515 value = ast2obj_list(state, (asdl_seq*)o->v.ClassDef.body,
3516 ast2obj_stmt);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003517 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02003518 if (PyObject_SetAttr(result, state->body, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003519 goto failed;
3520 Py_DECREF(value);
Pablo Galindoa5634c42020-09-16 19:42:00 +01003521 value = ast2obj_list(state, (asdl_seq*)o->v.ClassDef.decorator_list,
3522 ast2obj_expr);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003523 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02003524 if (PyObject_SetAttr(result, state->decorator_list, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003525 goto failed;
3526 Py_DECREF(value);
3527 break;
3528 case Return_kind:
Victor Stinner74419f02020-07-03 11:35:37 +02003529 tp = (PyTypeObject *)state->Return_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07003530 result = PyType_GenericNew(tp, NULL, NULL);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003531 if (!result) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02003532 value = ast2obj_expr(state, o->v.Return.value);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003533 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02003534 if (PyObject_SetAttr(result, state->value, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003535 goto failed;
3536 Py_DECREF(value);
3537 break;
3538 case Delete_kind:
Victor Stinner74419f02020-07-03 11:35:37 +02003539 tp = (PyTypeObject *)state->Delete_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07003540 result = PyType_GenericNew(tp, NULL, NULL);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003541 if (!result) goto failed;
Pablo Galindoa5634c42020-09-16 19:42:00 +01003542 value = ast2obj_list(state, (asdl_seq*)o->v.Delete.targets,
3543 ast2obj_expr);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003544 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02003545 if (PyObject_SetAttr(result, state->targets, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003546 goto failed;
3547 Py_DECREF(value);
3548 break;
3549 case Assign_kind:
Victor Stinner74419f02020-07-03 11:35:37 +02003550 tp = (PyTypeObject *)state->Assign_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07003551 result = PyType_GenericNew(tp, NULL, NULL);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003552 if (!result) goto failed;
Pablo Galindoa5634c42020-09-16 19:42:00 +01003553 value = ast2obj_list(state, (asdl_seq*)o->v.Assign.targets,
3554 ast2obj_expr);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003555 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02003556 if (PyObject_SetAttr(result, state->targets, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003557 goto failed;
3558 Py_DECREF(value);
Victor Stinner74419f02020-07-03 11:35:37 +02003559 value = ast2obj_expr(state, o->v.Assign.value);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003560 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02003561 if (PyObject_SetAttr(result, state->value, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003562 goto failed;
3563 Py_DECREF(value);
Victor Stinner74419f02020-07-03 11:35:37 +02003564 value = ast2obj_string(state, o->v.Assign.type_comment);
Guido van Rossumdcfcd142019-01-31 03:40:27 -08003565 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02003566 if (PyObject_SetAttr(result, state->type_comment, value) == -1)
Guido van Rossumdcfcd142019-01-31 03:40:27 -08003567 goto failed;
3568 Py_DECREF(value);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003569 break;
3570 case AugAssign_kind:
Victor Stinner74419f02020-07-03 11:35:37 +02003571 tp = (PyTypeObject *)state->AugAssign_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07003572 result = PyType_GenericNew(tp, NULL, NULL);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003573 if (!result) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02003574 value = ast2obj_expr(state, o->v.AugAssign.target);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003575 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02003576 if (PyObject_SetAttr(result, state->target, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003577 goto failed;
3578 Py_DECREF(value);
Victor Stinner74419f02020-07-03 11:35:37 +02003579 value = ast2obj_operator(state, o->v.AugAssign.op);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003580 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02003581 if (PyObject_SetAttr(result, state->op, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003582 goto failed;
3583 Py_DECREF(value);
Victor Stinner74419f02020-07-03 11:35:37 +02003584 value = ast2obj_expr(state, o->v.AugAssign.value);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003585 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02003586 if (PyObject_SetAttr(result, state->value, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003587 goto failed;
3588 Py_DECREF(value);
3589 break;
Yury Selivanovf8cb8a12016-09-08 20:50:03 -07003590 case AnnAssign_kind:
Victor Stinner74419f02020-07-03 11:35:37 +02003591 tp = (PyTypeObject *)state->AnnAssign_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07003592 result = PyType_GenericNew(tp, NULL, NULL);
Yury Selivanovf8cb8a12016-09-08 20:50:03 -07003593 if (!result) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02003594 value = ast2obj_expr(state, o->v.AnnAssign.target);
Yury Selivanovf8cb8a12016-09-08 20:50:03 -07003595 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02003596 if (PyObject_SetAttr(result, state->target, value) == -1)
Yury Selivanovf8cb8a12016-09-08 20:50:03 -07003597 goto failed;
3598 Py_DECREF(value);
Victor Stinner74419f02020-07-03 11:35:37 +02003599 value = ast2obj_expr(state, o->v.AnnAssign.annotation);
Yury Selivanovf8cb8a12016-09-08 20:50:03 -07003600 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02003601 if (PyObject_SetAttr(result, state->annotation, value) == -1)
Yury Selivanovf8cb8a12016-09-08 20:50:03 -07003602 goto failed;
3603 Py_DECREF(value);
Victor Stinner74419f02020-07-03 11:35:37 +02003604 value = ast2obj_expr(state, o->v.AnnAssign.value);
Yury Selivanovf8cb8a12016-09-08 20:50:03 -07003605 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02003606 if (PyObject_SetAttr(result, state->value, value) == -1)
Yury Selivanovf8cb8a12016-09-08 20:50:03 -07003607 goto failed;
3608 Py_DECREF(value);
Victor Stinner74419f02020-07-03 11:35:37 +02003609 value = ast2obj_int(state, o->v.AnnAssign.simple);
Yury Selivanovf8cb8a12016-09-08 20:50:03 -07003610 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02003611 if (PyObject_SetAttr(result, state->simple, value) == -1)
Yury Selivanovf8cb8a12016-09-08 20:50:03 -07003612 goto failed;
3613 Py_DECREF(value);
3614 break;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003615 case For_kind:
Victor Stinner74419f02020-07-03 11:35:37 +02003616 tp = (PyTypeObject *)state->For_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07003617 result = PyType_GenericNew(tp, NULL, NULL);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003618 if (!result) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02003619 value = ast2obj_expr(state, o->v.For.target);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003620 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02003621 if (PyObject_SetAttr(result, state->target, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003622 goto failed;
3623 Py_DECREF(value);
Victor Stinner74419f02020-07-03 11:35:37 +02003624 value = ast2obj_expr(state, o->v.For.iter);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003625 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02003626 if (PyObject_SetAttr(result, state->iter, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003627 goto failed;
3628 Py_DECREF(value);
Pablo Galindoa5634c42020-09-16 19:42:00 +01003629 value = ast2obj_list(state, (asdl_seq*)o->v.For.body, ast2obj_stmt);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003630 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02003631 if (PyObject_SetAttr(result, state->body, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003632 goto failed;
3633 Py_DECREF(value);
Pablo Galindoa5634c42020-09-16 19:42:00 +01003634 value = ast2obj_list(state, (asdl_seq*)o->v.For.orelse, ast2obj_stmt);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003635 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02003636 if (PyObject_SetAttr(result, state->orelse, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003637 goto failed;
3638 Py_DECREF(value);
Victor Stinner74419f02020-07-03 11:35:37 +02003639 value = ast2obj_string(state, o->v.For.type_comment);
Guido van Rossumdcfcd142019-01-31 03:40:27 -08003640 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02003641 if (PyObject_SetAttr(result, state->type_comment, value) == -1)
Guido van Rossumdcfcd142019-01-31 03:40:27 -08003642 goto failed;
3643 Py_DECREF(value);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003644 break;
Yury Selivanov75445082015-05-11 22:57:16 -04003645 case AsyncFor_kind:
Victor Stinner74419f02020-07-03 11:35:37 +02003646 tp = (PyTypeObject *)state->AsyncFor_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07003647 result = PyType_GenericNew(tp, NULL, NULL);
Yury Selivanov75445082015-05-11 22:57:16 -04003648 if (!result) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02003649 value = ast2obj_expr(state, o->v.AsyncFor.target);
Yury Selivanov75445082015-05-11 22:57:16 -04003650 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02003651 if (PyObject_SetAttr(result, state->target, value) == -1)
Yury Selivanov75445082015-05-11 22:57:16 -04003652 goto failed;
3653 Py_DECREF(value);
Victor Stinner74419f02020-07-03 11:35:37 +02003654 value = ast2obj_expr(state, o->v.AsyncFor.iter);
Yury Selivanov75445082015-05-11 22:57:16 -04003655 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02003656 if (PyObject_SetAttr(result, state->iter, value) == -1)
Yury Selivanov75445082015-05-11 22:57:16 -04003657 goto failed;
3658 Py_DECREF(value);
Pablo Galindoa5634c42020-09-16 19:42:00 +01003659 value = ast2obj_list(state, (asdl_seq*)o->v.AsyncFor.body,
3660 ast2obj_stmt);
Yury Selivanov75445082015-05-11 22:57:16 -04003661 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02003662 if (PyObject_SetAttr(result, state->body, value) == -1)
Yury Selivanov75445082015-05-11 22:57:16 -04003663 goto failed;
3664 Py_DECREF(value);
Pablo Galindoa5634c42020-09-16 19:42:00 +01003665 value = ast2obj_list(state, (asdl_seq*)o->v.AsyncFor.orelse,
3666 ast2obj_stmt);
Yury Selivanov75445082015-05-11 22:57:16 -04003667 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02003668 if (PyObject_SetAttr(result, state->orelse, value) == -1)
Yury Selivanov75445082015-05-11 22:57:16 -04003669 goto failed;
3670 Py_DECREF(value);
Victor Stinner74419f02020-07-03 11:35:37 +02003671 value = ast2obj_string(state, o->v.AsyncFor.type_comment);
Guido van Rossumdcfcd142019-01-31 03:40:27 -08003672 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02003673 if (PyObject_SetAttr(result, state->type_comment, value) == -1)
Guido van Rossumdcfcd142019-01-31 03:40:27 -08003674 goto failed;
3675 Py_DECREF(value);
Yury Selivanov75445082015-05-11 22:57:16 -04003676 break;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003677 case While_kind:
Victor Stinner74419f02020-07-03 11:35:37 +02003678 tp = (PyTypeObject *)state->While_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07003679 result = PyType_GenericNew(tp, NULL, NULL);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003680 if (!result) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02003681 value = ast2obj_expr(state, o->v.While.test);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003682 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02003683 if (PyObject_SetAttr(result, state->test, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003684 goto failed;
3685 Py_DECREF(value);
Pablo Galindoa5634c42020-09-16 19:42:00 +01003686 value = ast2obj_list(state, (asdl_seq*)o->v.While.body, ast2obj_stmt);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003687 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02003688 if (PyObject_SetAttr(result, state->body, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003689 goto failed;
3690 Py_DECREF(value);
Pablo Galindoa5634c42020-09-16 19:42:00 +01003691 value = ast2obj_list(state, (asdl_seq*)o->v.While.orelse, ast2obj_stmt);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003692 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02003693 if (PyObject_SetAttr(result, state->orelse, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003694 goto failed;
3695 Py_DECREF(value);
3696 break;
3697 case If_kind:
Victor Stinner74419f02020-07-03 11:35:37 +02003698 tp = (PyTypeObject *)state->If_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07003699 result = PyType_GenericNew(tp, NULL, NULL);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003700 if (!result) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02003701 value = ast2obj_expr(state, o->v.If.test);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003702 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02003703 if (PyObject_SetAttr(result, state->test, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003704 goto failed;
3705 Py_DECREF(value);
Pablo Galindoa5634c42020-09-16 19:42:00 +01003706 value = ast2obj_list(state, (asdl_seq*)o->v.If.body, ast2obj_stmt);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003707 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02003708 if (PyObject_SetAttr(result, state->body, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003709 goto failed;
3710 Py_DECREF(value);
Pablo Galindoa5634c42020-09-16 19:42:00 +01003711 value = ast2obj_list(state, (asdl_seq*)o->v.If.orelse, ast2obj_stmt);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003712 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02003713 if (PyObject_SetAttr(result, state->orelse, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003714 goto failed;
3715 Py_DECREF(value);
3716 break;
3717 case With_kind:
Victor Stinner74419f02020-07-03 11:35:37 +02003718 tp = (PyTypeObject *)state->With_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07003719 result = PyType_GenericNew(tp, NULL, NULL);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003720 if (!result) goto failed;
Pablo Galindoa5634c42020-09-16 19:42:00 +01003721 value = ast2obj_list(state, (asdl_seq*)o->v.With.items,
3722 ast2obj_withitem);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003723 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02003724 if (PyObject_SetAttr(result, state->items, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003725 goto failed;
3726 Py_DECREF(value);
Pablo Galindoa5634c42020-09-16 19:42:00 +01003727 value = ast2obj_list(state, (asdl_seq*)o->v.With.body, ast2obj_stmt);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003728 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02003729 if (PyObject_SetAttr(result, state->body, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003730 goto failed;
3731 Py_DECREF(value);
Victor Stinner74419f02020-07-03 11:35:37 +02003732 value = ast2obj_string(state, o->v.With.type_comment);
Guido van Rossumdcfcd142019-01-31 03:40:27 -08003733 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02003734 if (PyObject_SetAttr(result, state->type_comment, value) == -1)
Guido van Rossumdcfcd142019-01-31 03:40:27 -08003735 goto failed;
3736 Py_DECREF(value);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003737 break;
Yury Selivanov75445082015-05-11 22:57:16 -04003738 case AsyncWith_kind:
Victor Stinner74419f02020-07-03 11:35:37 +02003739 tp = (PyTypeObject *)state->AsyncWith_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07003740 result = PyType_GenericNew(tp, NULL, NULL);
Yury Selivanov75445082015-05-11 22:57:16 -04003741 if (!result) goto failed;
Pablo Galindoa5634c42020-09-16 19:42:00 +01003742 value = ast2obj_list(state, (asdl_seq*)o->v.AsyncWith.items,
3743 ast2obj_withitem);
Yury Selivanov75445082015-05-11 22:57:16 -04003744 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02003745 if (PyObject_SetAttr(result, state->items, value) == -1)
Yury Selivanov75445082015-05-11 22:57:16 -04003746 goto failed;
3747 Py_DECREF(value);
Pablo Galindoa5634c42020-09-16 19:42:00 +01003748 value = ast2obj_list(state, (asdl_seq*)o->v.AsyncWith.body,
3749 ast2obj_stmt);
Yury Selivanov75445082015-05-11 22:57:16 -04003750 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02003751 if (PyObject_SetAttr(result, state->body, value) == -1)
Yury Selivanov75445082015-05-11 22:57:16 -04003752 goto failed;
3753 Py_DECREF(value);
Victor Stinner74419f02020-07-03 11:35:37 +02003754 value = ast2obj_string(state, o->v.AsyncWith.type_comment);
Guido van Rossumdcfcd142019-01-31 03:40:27 -08003755 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02003756 if (PyObject_SetAttr(result, state->type_comment, value) == -1)
Guido van Rossumdcfcd142019-01-31 03:40:27 -08003757 goto failed;
3758 Py_DECREF(value);
Yury Selivanov75445082015-05-11 22:57:16 -04003759 break;
Brandt Bucher145bf262021-02-26 14:51:55 -08003760 case Match_kind:
3761 tp = (PyTypeObject *)state->Match_type;
3762 result = PyType_GenericNew(tp, NULL, NULL);
3763 if (!result) goto failed;
3764 value = ast2obj_expr(state, o->v.Match.subject);
3765 if (!value) goto failed;
3766 if (PyObject_SetAttr(result, state->subject, value) == -1)
3767 goto failed;
3768 Py_DECREF(value);
3769 value = ast2obj_list(state, (asdl_seq*)o->v.Match.cases,
3770 ast2obj_match_case);
3771 if (!value) goto failed;
3772 if (PyObject_SetAttr(result, state->cases, value) == -1)
3773 goto failed;
3774 Py_DECREF(value);
3775 break;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003776 case Raise_kind:
Victor Stinner74419f02020-07-03 11:35:37 +02003777 tp = (PyTypeObject *)state->Raise_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07003778 result = PyType_GenericNew(tp, NULL, NULL);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003779 if (!result) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02003780 value = ast2obj_expr(state, o->v.Raise.exc);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003781 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02003782 if (PyObject_SetAttr(result, state->exc, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003783 goto failed;
3784 Py_DECREF(value);
Victor Stinner74419f02020-07-03 11:35:37 +02003785 value = ast2obj_expr(state, o->v.Raise.cause);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003786 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02003787 if (PyObject_SetAttr(result, state->cause, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003788 goto failed;
3789 Py_DECREF(value);
3790 break;
3791 case Try_kind:
Victor Stinner74419f02020-07-03 11:35:37 +02003792 tp = (PyTypeObject *)state->Try_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07003793 result = PyType_GenericNew(tp, NULL, NULL);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003794 if (!result) goto failed;
Pablo Galindoa5634c42020-09-16 19:42:00 +01003795 value = ast2obj_list(state, (asdl_seq*)o->v.Try.body, ast2obj_stmt);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003796 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02003797 if (PyObject_SetAttr(result, state->body, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003798 goto failed;
3799 Py_DECREF(value);
Pablo Galindoa5634c42020-09-16 19:42:00 +01003800 value = ast2obj_list(state, (asdl_seq*)o->v.Try.handlers,
3801 ast2obj_excepthandler);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003802 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02003803 if (PyObject_SetAttr(result, state->handlers, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003804 goto failed;
3805 Py_DECREF(value);
Pablo Galindoa5634c42020-09-16 19:42:00 +01003806 value = ast2obj_list(state, (asdl_seq*)o->v.Try.orelse, ast2obj_stmt);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003807 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02003808 if (PyObject_SetAttr(result, state->orelse, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003809 goto failed;
3810 Py_DECREF(value);
Pablo Galindoa5634c42020-09-16 19:42:00 +01003811 value = ast2obj_list(state, (asdl_seq*)o->v.Try.finalbody,
3812 ast2obj_stmt);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003813 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02003814 if (PyObject_SetAttr(result, state->finalbody, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003815 goto failed;
3816 Py_DECREF(value);
3817 break;
3818 case Assert_kind:
Victor Stinner74419f02020-07-03 11:35:37 +02003819 tp = (PyTypeObject *)state->Assert_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07003820 result = PyType_GenericNew(tp, NULL, NULL);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003821 if (!result) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02003822 value = ast2obj_expr(state, o->v.Assert.test);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003823 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02003824 if (PyObject_SetAttr(result, state->test, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003825 goto failed;
3826 Py_DECREF(value);
Victor Stinner74419f02020-07-03 11:35:37 +02003827 value = ast2obj_expr(state, o->v.Assert.msg);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003828 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02003829 if (PyObject_SetAttr(result, state->msg, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003830 goto failed;
3831 Py_DECREF(value);
3832 break;
3833 case Import_kind:
Victor Stinner74419f02020-07-03 11:35:37 +02003834 tp = (PyTypeObject *)state->Import_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07003835 result = PyType_GenericNew(tp, NULL, NULL);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003836 if (!result) goto failed;
Pablo Galindoa5634c42020-09-16 19:42:00 +01003837 value = ast2obj_list(state, (asdl_seq*)o->v.Import.names,
3838 ast2obj_alias);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003839 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02003840 if (PyObject_SetAttr(result, state->names, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003841 goto failed;
3842 Py_DECREF(value);
3843 break;
3844 case ImportFrom_kind:
Victor Stinner74419f02020-07-03 11:35:37 +02003845 tp = (PyTypeObject *)state->ImportFrom_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07003846 result = PyType_GenericNew(tp, NULL, NULL);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003847 if (!result) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02003848 value = ast2obj_identifier(state, o->v.ImportFrom.module);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003849 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02003850 if (PyObject_SetAttr(result, state->module, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003851 goto failed;
3852 Py_DECREF(value);
Pablo Galindoa5634c42020-09-16 19:42:00 +01003853 value = ast2obj_list(state, (asdl_seq*)o->v.ImportFrom.names,
3854 ast2obj_alias);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003855 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02003856 if (PyObject_SetAttr(result, state->names, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003857 goto failed;
3858 Py_DECREF(value);
Victor Stinner74419f02020-07-03 11:35:37 +02003859 value = ast2obj_int(state, o->v.ImportFrom.level);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003860 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02003861 if (PyObject_SetAttr(result, state->level, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003862 goto failed;
3863 Py_DECREF(value);
3864 break;
3865 case Global_kind:
Victor Stinner74419f02020-07-03 11:35:37 +02003866 tp = (PyTypeObject *)state->Global_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07003867 result = PyType_GenericNew(tp, NULL, NULL);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003868 if (!result) goto failed;
Pablo Galindoa5634c42020-09-16 19:42:00 +01003869 value = ast2obj_list(state, (asdl_seq*)o->v.Global.names,
3870 ast2obj_identifier);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003871 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +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 Stinner74419f02020-07-03 11:35:37 +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;
Pablo Galindoa5634c42020-09-16 19:42:00 +01003880 value = ast2obj_list(state, (asdl_seq*)o->v.Nonlocal.names,
3881 ast2obj_identifier);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003882 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02003883 if (PyObject_SetAttr(result, state->names, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003884 goto failed;
3885 Py_DECREF(value);
3886 break;
3887 case Expr_kind:
Victor Stinner74419f02020-07-03 11:35:37 +02003888 tp = (PyTypeObject *)state->Expr_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07003889 result = PyType_GenericNew(tp, NULL, NULL);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003890 if (!result) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02003891 value = ast2obj_expr(state, o->v.Expr.value);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003892 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02003893 if (PyObject_SetAttr(result, state->value, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003894 goto failed;
3895 Py_DECREF(value);
3896 break;
3897 case Pass_kind:
Victor Stinner74419f02020-07-03 11:35:37 +02003898 tp = (PyTypeObject *)state->Pass_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07003899 result = PyType_GenericNew(tp, NULL, NULL);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003900 if (!result) goto failed;
3901 break;
3902 case Break_kind:
Victor Stinner74419f02020-07-03 11:35:37 +02003903 tp = (PyTypeObject *)state->Break_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07003904 result = PyType_GenericNew(tp, NULL, NULL);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003905 if (!result) goto failed;
3906 break;
3907 case Continue_kind:
Victor Stinner74419f02020-07-03 11:35:37 +02003908 tp = (PyTypeObject *)state->Continue_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07003909 result = PyType_GenericNew(tp, NULL, NULL);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003910 if (!result) goto failed;
3911 break;
3912 }
Victor Stinner74419f02020-07-03 11:35:37 +02003913 value = ast2obj_int(state, o->lineno);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003914 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02003915 if (PyObject_SetAttr(result, state->lineno, value) < 0)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003916 goto failed;
3917 Py_DECREF(value);
Victor Stinner74419f02020-07-03 11:35:37 +02003918 value = ast2obj_int(state, o->col_offset);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003919 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02003920 if (PyObject_SetAttr(result, state->col_offset, value) < 0)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003921 goto failed;
3922 Py_DECREF(value);
Victor Stinner74419f02020-07-03 11:35:37 +02003923 value = ast2obj_int(state, o->end_lineno);
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00003924 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02003925 if (PyObject_SetAttr(result, state->end_lineno, value) < 0)
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00003926 goto failed;
3927 Py_DECREF(value);
Victor Stinner74419f02020-07-03 11:35:37 +02003928 value = ast2obj_int(state, o->end_col_offset);
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00003929 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02003930 if (PyObject_SetAttr(result, state->end_col_offset, value) < 0)
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00003931 goto failed;
3932 Py_DECREF(value);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003933 return result;
Martin v. Löwisbd260da2006-02-26 19:42:26 +00003934failed:
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003935 Py_XDECREF(value);
3936 Py_XDECREF(result);
3937 return NULL;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00003938}
3939
Martin v. Löwisbd260da2006-02-26 19:42:26 +00003940PyObject*
Victor Stinner5cf47822020-11-02 22:03:28 +01003941ast2obj_expr(struct ast_state *state, void* _o)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00003942{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003943 expr_ty o = (expr_ty)_o;
3944 PyObject *result = NULL, *value = NULL;
Dino Viehlandac46eb42019-09-11 10:16:34 -07003945 PyTypeObject *tp;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003946 if (!o) {
Serhiy Storchaka228b12e2017-01-23 09:47:21 +02003947 Py_RETURN_NONE;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003948 }
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003949 switch (o->kind) {
3950 case BoolOp_kind:
Victor Stinner74419f02020-07-03 11:35:37 +02003951 tp = (PyTypeObject *)state->BoolOp_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07003952 result = PyType_GenericNew(tp, NULL, NULL);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003953 if (!result) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02003954 value = ast2obj_boolop(state, o->v.BoolOp.op);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003955 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02003956 if (PyObject_SetAttr(result, state->op, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003957 goto failed;
3958 Py_DECREF(value);
Pablo Galindoa5634c42020-09-16 19:42:00 +01003959 value = ast2obj_list(state, (asdl_seq*)o->v.BoolOp.values,
3960 ast2obj_expr);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003961 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02003962 if (PyObject_SetAttr(result, state->values, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003963 goto failed;
3964 Py_DECREF(value);
3965 break;
Emily Morehouse8f59ee02019-01-24 16:49:56 -07003966 case NamedExpr_kind:
Victor Stinner74419f02020-07-03 11:35:37 +02003967 tp = (PyTypeObject *)state->NamedExpr_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07003968 result = PyType_GenericNew(tp, NULL, NULL);
Emily Morehouse8f59ee02019-01-24 16:49:56 -07003969 if (!result) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02003970 value = ast2obj_expr(state, o->v.NamedExpr.target);
Emily Morehouse8f59ee02019-01-24 16:49:56 -07003971 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02003972 if (PyObject_SetAttr(result, state->target, value) == -1)
Emily Morehouse8f59ee02019-01-24 16:49:56 -07003973 goto failed;
3974 Py_DECREF(value);
Victor Stinner74419f02020-07-03 11:35:37 +02003975 value = ast2obj_expr(state, o->v.NamedExpr.value);
Emily Morehouse8f59ee02019-01-24 16:49:56 -07003976 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02003977 if (PyObject_SetAttr(result, state->value, value) == -1)
Emily Morehouse8f59ee02019-01-24 16:49:56 -07003978 goto failed;
3979 Py_DECREF(value);
3980 break;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003981 case BinOp_kind:
Victor Stinner74419f02020-07-03 11:35:37 +02003982 tp = (PyTypeObject *)state->BinOp_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07003983 result = PyType_GenericNew(tp, NULL, NULL);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003984 if (!result) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02003985 value = ast2obj_expr(state, o->v.BinOp.left);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003986 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02003987 if (PyObject_SetAttr(result, state->left, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003988 goto failed;
3989 Py_DECREF(value);
Victor Stinner74419f02020-07-03 11:35:37 +02003990 value = ast2obj_operator(state, o->v.BinOp.op);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003991 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02003992 if (PyObject_SetAttr(result, state->op, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003993 goto failed;
3994 Py_DECREF(value);
Victor Stinner74419f02020-07-03 11:35:37 +02003995 value = ast2obj_expr(state, o->v.BinOp.right);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003996 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02003997 if (PyObject_SetAttr(result, state->right, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02003998 goto failed;
3999 Py_DECREF(value);
4000 break;
4001 case UnaryOp_kind:
Victor Stinner74419f02020-07-03 11:35:37 +02004002 tp = (PyTypeObject *)state->UnaryOp_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07004003 result = PyType_GenericNew(tp, NULL, NULL);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004004 if (!result) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004005 value = ast2obj_unaryop(state, o->v.UnaryOp.op);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004006 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004007 if (PyObject_SetAttr(result, state->op, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004008 goto failed;
4009 Py_DECREF(value);
Victor Stinner74419f02020-07-03 11:35:37 +02004010 value = ast2obj_expr(state, o->v.UnaryOp.operand);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004011 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004012 if (PyObject_SetAttr(result, state->operand, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004013 goto failed;
4014 Py_DECREF(value);
4015 break;
4016 case Lambda_kind:
Victor Stinner74419f02020-07-03 11:35:37 +02004017 tp = (PyTypeObject *)state->Lambda_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07004018 result = PyType_GenericNew(tp, NULL, NULL);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004019 if (!result) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004020 value = ast2obj_arguments(state, o->v.Lambda.args);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004021 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004022 if (PyObject_SetAttr(result, state->args, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004023 goto failed;
4024 Py_DECREF(value);
Victor Stinner74419f02020-07-03 11:35:37 +02004025 value = ast2obj_expr(state, o->v.Lambda.body);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004026 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004027 if (PyObject_SetAttr(result, state->body, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004028 goto failed;
4029 Py_DECREF(value);
4030 break;
4031 case IfExp_kind:
Victor Stinner74419f02020-07-03 11:35:37 +02004032 tp = (PyTypeObject *)state->IfExp_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07004033 result = PyType_GenericNew(tp, NULL, NULL);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004034 if (!result) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004035 value = ast2obj_expr(state, o->v.IfExp.test);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004036 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004037 if (PyObject_SetAttr(result, state->test, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004038 goto failed;
4039 Py_DECREF(value);
Victor Stinner74419f02020-07-03 11:35:37 +02004040 value = ast2obj_expr(state, o->v.IfExp.body);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004041 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004042 if (PyObject_SetAttr(result, state->body, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004043 goto failed;
4044 Py_DECREF(value);
Victor Stinner74419f02020-07-03 11:35:37 +02004045 value = ast2obj_expr(state, o->v.IfExp.orelse);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004046 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004047 if (PyObject_SetAttr(result, state->orelse, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004048 goto failed;
4049 Py_DECREF(value);
4050 break;
4051 case Dict_kind:
Victor Stinner74419f02020-07-03 11:35:37 +02004052 tp = (PyTypeObject *)state->Dict_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07004053 result = PyType_GenericNew(tp, NULL, NULL);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004054 if (!result) goto failed;
Pablo Galindoa5634c42020-09-16 19:42:00 +01004055 value = ast2obj_list(state, (asdl_seq*)o->v.Dict.keys, ast2obj_expr);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004056 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004057 if (PyObject_SetAttr(result, state->keys, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004058 goto failed;
4059 Py_DECREF(value);
Pablo Galindoa5634c42020-09-16 19:42:00 +01004060 value = ast2obj_list(state, (asdl_seq*)o->v.Dict.values, ast2obj_expr);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004061 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004062 if (PyObject_SetAttr(result, state->values, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004063 goto failed;
4064 Py_DECREF(value);
4065 break;
4066 case Set_kind:
Victor Stinner74419f02020-07-03 11:35:37 +02004067 tp = (PyTypeObject *)state->Set_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07004068 result = PyType_GenericNew(tp, NULL, NULL);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004069 if (!result) goto failed;
Pablo Galindoa5634c42020-09-16 19:42:00 +01004070 value = ast2obj_list(state, (asdl_seq*)o->v.Set.elts, ast2obj_expr);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004071 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004072 if (PyObject_SetAttr(result, state->elts, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004073 goto failed;
4074 Py_DECREF(value);
4075 break;
4076 case ListComp_kind:
Victor Stinner74419f02020-07-03 11:35:37 +02004077 tp = (PyTypeObject *)state->ListComp_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07004078 result = PyType_GenericNew(tp, NULL, NULL);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004079 if (!result) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004080 value = ast2obj_expr(state, o->v.ListComp.elt);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004081 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004082 if (PyObject_SetAttr(result, state->elt, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004083 goto failed;
4084 Py_DECREF(value);
Pablo Galindoa5634c42020-09-16 19:42:00 +01004085 value = ast2obj_list(state, (asdl_seq*)o->v.ListComp.generators,
Victor Stinner74419f02020-07-03 11:35:37 +02004086 ast2obj_comprehension);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004087 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004088 if (PyObject_SetAttr(result, state->generators, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004089 goto failed;
4090 Py_DECREF(value);
4091 break;
4092 case SetComp_kind:
Victor Stinner74419f02020-07-03 11:35:37 +02004093 tp = (PyTypeObject *)state->SetComp_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07004094 result = PyType_GenericNew(tp, NULL, NULL);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004095 if (!result) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004096 value = ast2obj_expr(state, o->v.SetComp.elt);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004097 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004098 if (PyObject_SetAttr(result, state->elt, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004099 goto failed;
4100 Py_DECREF(value);
Pablo Galindoa5634c42020-09-16 19:42:00 +01004101 value = ast2obj_list(state, (asdl_seq*)o->v.SetComp.generators,
Victor Stinner74419f02020-07-03 11:35:37 +02004102 ast2obj_comprehension);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004103 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004104 if (PyObject_SetAttr(result, state->generators, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004105 goto failed;
4106 Py_DECREF(value);
4107 break;
4108 case DictComp_kind:
Victor Stinner74419f02020-07-03 11:35:37 +02004109 tp = (PyTypeObject *)state->DictComp_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07004110 result = PyType_GenericNew(tp, NULL, NULL);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004111 if (!result) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004112 value = ast2obj_expr(state, o->v.DictComp.key);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004113 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004114 if (PyObject_SetAttr(result, state->key, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004115 goto failed;
4116 Py_DECREF(value);
Victor Stinner74419f02020-07-03 11:35:37 +02004117 value = ast2obj_expr(state, o->v.DictComp.value);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004118 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004119 if (PyObject_SetAttr(result, state->value, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004120 goto failed;
4121 Py_DECREF(value);
Pablo Galindoa5634c42020-09-16 19:42:00 +01004122 value = ast2obj_list(state, (asdl_seq*)o->v.DictComp.generators,
Victor Stinner74419f02020-07-03 11:35:37 +02004123 ast2obj_comprehension);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004124 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004125 if (PyObject_SetAttr(result, state->generators, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004126 goto failed;
4127 Py_DECREF(value);
4128 break;
4129 case GeneratorExp_kind:
Victor Stinner74419f02020-07-03 11:35:37 +02004130 tp = (PyTypeObject *)state->GeneratorExp_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07004131 result = PyType_GenericNew(tp, NULL, NULL);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004132 if (!result) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004133 value = ast2obj_expr(state, o->v.GeneratorExp.elt);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004134 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004135 if (PyObject_SetAttr(result, state->elt, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004136 goto failed;
4137 Py_DECREF(value);
Pablo Galindoa5634c42020-09-16 19:42:00 +01004138 value = ast2obj_list(state, (asdl_seq*)o->v.GeneratorExp.generators,
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004139 ast2obj_comprehension);
4140 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004141 if (PyObject_SetAttr(result, state->generators, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004142 goto failed;
4143 Py_DECREF(value);
4144 break;
Yury Selivanov75445082015-05-11 22:57:16 -04004145 case Await_kind:
Victor Stinner74419f02020-07-03 11:35:37 +02004146 tp = (PyTypeObject *)state->Await_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07004147 result = PyType_GenericNew(tp, NULL, NULL);
Yury Selivanov75445082015-05-11 22:57:16 -04004148 if (!result) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004149 value = ast2obj_expr(state, o->v.Await.value);
Yury Selivanov75445082015-05-11 22:57:16 -04004150 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004151 if (PyObject_SetAttr(result, state->value, value) == -1)
Yury Selivanov75445082015-05-11 22:57:16 -04004152 goto failed;
4153 Py_DECREF(value);
4154 break;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004155 case Yield_kind:
Victor Stinner74419f02020-07-03 11:35:37 +02004156 tp = (PyTypeObject *)state->Yield_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07004157 result = PyType_GenericNew(tp, NULL, NULL);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004158 if (!result) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004159 value = ast2obj_expr(state, o->v.Yield.value);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004160 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004161 if (PyObject_SetAttr(result, state->value, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004162 goto failed;
4163 Py_DECREF(value);
4164 break;
4165 case YieldFrom_kind:
Victor Stinner74419f02020-07-03 11:35:37 +02004166 tp = (PyTypeObject *)state->YieldFrom_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07004167 result = PyType_GenericNew(tp, NULL, NULL);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004168 if (!result) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004169 value = ast2obj_expr(state, o->v.YieldFrom.value);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004170 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004171 if (PyObject_SetAttr(result, state->value, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004172 goto failed;
4173 Py_DECREF(value);
4174 break;
4175 case Compare_kind:
Victor Stinner74419f02020-07-03 11:35:37 +02004176 tp = (PyTypeObject *)state->Compare_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07004177 result = PyType_GenericNew(tp, NULL, NULL);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004178 if (!result) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004179 value = ast2obj_expr(state, o->v.Compare.left);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004180 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004181 if (PyObject_SetAttr(result, state->left, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004182 goto failed;
4183 Py_DECREF(value);
4184 {
4185 Py_ssize_t i, n = asdl_seq_LEN(o->v.Compare.ops);
4186 value = PyList_New(n);
4187 if (!value) goto failed;
4188 for(i = 0; i < n; i++)
Victor Stinner74419f02020-07-03 11:35:37 +02004189 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 +00004190 }
Martin v. Löwis577b5b92006-02-27 15:23:19 +00004191 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004192 if (PyObject_SetAttr(result, state->ops, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004193 goto failed;
Martin v. Löwis03e5bc02006-03-02 00:31:27 +00004194 Py_DECREF(value);
Pablo Galindoa5634c42020-09-16 19:42:00 +01004195 value = ast2obj_list(state, (asdl_seq*)o->v.Compare.comparators,
4196 ast2obj_expr);
Martin v. Löwis49c5da12006-03-01 22:49:05 +00004197 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004198 if (PyObject_SetAttr(result, state->comparators, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004199 goto failed;
Martin v. Löwis03e5bc02006-03-02 00:31:27 +00004200 Py_DECREF(value);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004201 break;
4202 case Call_kind:
Victor Stinner74419f02020-07-03 11:35:37 +02004203 tp = (PyTypeObject *)state->Call_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07004204 result = PyType_GenericNew(tp, NULL, NULL);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004205 if (!result) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004206 value = ast2obj_expr(state, o->v.Call.func);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004207 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004208 if (PyObject_SetAttr(result, state->func, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004209 goto failed;
4210 Py_DECREF(value);
Pablo Galindoa5634c42020-09-16 19:42:00 +01004211 value = ast2obj_list(state, (asdl_seq*)o->v.Call.args, ast2obj_expr);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004212 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004213 if (PyObject_SetAttr(result, state->args, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004214 goto failed;
4215 Py_DECREF(value);
Pablo Galindoa5634c42020-09-16 19:42:00 +01004216 value = ast2obj_list(state, (asdl_seq*)o->v.Call.keywords,
4217 ast2obj_keyword);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004218 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004219 if (PyObject_SetAttr(result, state->keywords, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004220 goto failed;
4221 Py_DECREF(value);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004222 break;
Eric V. Smith235a6f02015-09-19 14:51:32 -04004223 case FormattedValue_kind:
Victor Stinner74419f02020-07-03 11:35:37 +02004224 tp = (PyTypeObject *)state->FormattedValue_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07004225 result = PyType_GenericNew(tp, NULL, NULL);
Eric V. Smith235a6f02015-09-19 14:51:32 -04004226 if (!result) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004227 value = ast2obj_expr(state, o->v.FormattedValue.value);
Eric V. Smith235a6f02015-09-19 14:51:32 -04004228 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004229 if (PyObject_SetAttr(result, state->value, value) == -1)
Eric V. Smith235a6f02015-09-19 14:51:32 -04004230 goto failed;
4231 Py_DECREF(value);
Victor Stinner74419f02020-07-03 11:35:37 +02004232 value = ast2obj_int(state, o->v.FormattedValue.conversion);
Eric V. Smith235a6f02015-09-19 14:51:32 -04004233 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004234 if (PyObject_SetAttr(result, state->conversion, value) == -1)
Eric V. Smith235a6f02015-09-19 14:51:32 -04004235 goto failed;
4236 Py_DECREF(value);
Victor Stinner74419f02020-07-03 11:35:37 +02004237 value = ast2obj_expr(state, o->v.FormattedValue.format_spec);
Eric V. Smith235a6f02015-09-19 14:51:32 -04004238 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004239 if (PyObject_SetAttr(result, state->format_spec, value) == -1)
Eric V. Smith235a6f02015-09-19 14:51:32 -04004240 goto failed;
4241 Py_DECREF(value);
4242 break;
4243 case JoinedStr_kind:
Victor Stinner74419f02020-07-03 11:35:37 +02004244 tp = (PyTypeObject *)state->JoinedStr_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07004245 result = PyType_GenericNew(tp, NULL, NULL);
Eric V. Smith235a6f02015-09-19 14:51:32 -04004246 if (!result) goto failed;
Pablo Galindoa5634c42020-09-16 19:42:00 +01004247 value = ast2obj_list(state, (asdl_seq*)o->v.JoinedStr.values,
4248 ast2obj_expr);
Eric V. Smith235a6f02015-09-19 14:51:32 -04004249 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004250 if (PyObject_SetAttr(result, state->values, value) == -1)
Eric V. Smith235a6f02015-09-19 14:51:32 -04004251 goto failed;
4252 Py_DECREF(value);
4253 break;
Victor Stinnerf2c1aa12016-01-26 00:40:57 +01004254 case Constant_kind:
Victor Stinner74419f02020-07-03 11:35:37 +02004255 tp = (PyTypeObject *)state->Constant_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07004256 result = PyType_GenericNew(tp, NULL, NULL);
Victor Stinnerf2c1aa12016-01-26 00:40:57 +01004257 if (!result) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004258 value = ast2obj_constant(state, o->v.Constant.value);
Victor Stinnerf2c1aa12016-01-26 00:40:57 +01004259 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004260 if (PyObject_SetAttr(result, state->value, value) == -1)
Victor Stinnerf2c1aa12016-01-26 00:40:57 +01004261 goto failed;
4262 Py_DECREF(value);
Victor Stinner74419f02020-07-03 11:35:37 +02004263 value = ast2obj_string(state, o->v.Constant.kind);
Guido van Rossum10f8ce62019-03-13 13:00:46 -07004264 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004265 if (PyObject_SetAttr(result, state->kind, value) == -1)
Guido van Rossum10f8ce62019-03-13 13:00:46 -07004266 goto failed;
4267 Py_DECREF(value);
Victor Stinnerf2c1aa12016-01-26 00:40:57 +01004268 break;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004269 case Attribute_kind:
Victor Stinner74419f02020-07-03 11:35:37 +02004270 tp = (PyTypeObject *)state->Attribute_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07004271 result = PyType_GenericNew(tp, NULL, NULL);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004272 if (!result) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004273 value = ast2obj_expr(state, o->v.Attribute.value);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004274 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004275 if (PyObject_SetAttr(result, state->value, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004276 goto failed;
4277 Py_DECREF(value);
Victor Stinner74419f02020-07-03 11:35:37 +02004278 value = ast2obj_identifier(state, o->v.Attribute.attr);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004279 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004280 if (PyObject_SetAttr(result, state->attr, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004281 goto failed;
4282 Py_DECREF(value);
Victor Stinner74419f02020-07-03 11:35:37 +02004283 value = ast2obj_expr_context(state, o->v.Attribute.ctx);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004284 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004285 if (PyObject_SetAttr(result, state->ctx, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004286 goto failed;
4287 Py_DECREF(value);
4288 break;
4289 case Subscript_kind:
Victor Stinner74419f02020-07-03 11:35:37 +02004290 tp = (PyTypeObject *)state->Subscript_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07004291 result = PyType_GenericNew(tp, NULL, NULL);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004292 if (!result) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004293 value = ast2obj_expr(state, o->v.Subscript.value);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004294 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004295 if (PyObject_SetAttr(result, state->value, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004296 goto failed;
4297 Py_DECREF(value);
Victor Stinner74419f02020-07-03 11:35:37 +02004298 value = ast2obj_expr(state, o->v.Subscript.slice);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004299 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004300 if (PyObject_SetAttr(result, state->slice, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004301 goto failed;
4302 Py_DECREF(value);
Victor Stinner74419f02020-07-03 11:35:37 +02004303 value = ast2obj_expr_context(state, o->v.Subscript.ctx);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004304 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004305 if (PyObject_SetAttr(result, state->ctx, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004306 goto failed;
4307 Py_DECREF(value);
4308 break;
4309 case Starred_kind:
Victor Stinner74419f02020-07-03 11:35:37 +02004310 tp = (PyTypeObject *)state->Starred_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07004311 result = PyType_GenericNew(tp, NULL, NULL);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004312 if (!result) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004313 value = ast2obj_expr(state, o->v.Starred.value);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004314 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004315 if (PyObject_SetAttr(result, state->value, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004316 goto failed;
4317 Py_DECREF(value);
Victor Stinner74419f02020-07-03 11:35:37 +02004318 value = ast2obj_expr_context(state, o->v.Starred.ctx);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004319 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004320 if (PyObject_SetAttr(result, state->ctx, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004321 goto failed;
4322 Py_DECREF(value);
4323 break;
4324 case Name_kind:
Victor Stinner74419f02020-07-03 11:35:37 +02004325 tp = (PyTypeObject *)state->Name_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07004326 result = PyType_GenericNew(tp, NULL, NULL);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004327 if (!result) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004328 value = ast2obj_identifier(state, o->v.Name.id);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004329 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004330 if (PyObject_SetAttr(result, state->id, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004331 goto failed;
4332 Py_DECREF(value);
Victor Stinner74419f02020-07-03 11:35:37 +02004333 value = ast2obj_expr_context(state, o->v.Name.ctx);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004334 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004335 if (PyObject_SetAttr(result, state->ctx, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004336 goto failed;
4337 Py_DECREF(value);
4338 break;
4339 case List_kind:
Victor Stinner74419f02020-07-03 11:35:37 +02004340 tp = (PyTypeObject *)state->List_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07004341 result = PyType_GenericNew(tp, NULL, NULL);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004342 if (!result) goto failed;
Pablo Galindoa5634c42020-09-16 19:42:00 +01004343 value = ast2obj_list(state, (asdl_seq*)o->v.List.elts, ast2obj_expr);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004344 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004345 if (PyObject_SetAttr(result, state->elts, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004346 goto failed;
4347 Py_DECREF(value);
Victor Stinner74419f02020-07-03 11:35:37 +02004348 value = ast2obj_expr_context(state, o->v.List.ctx);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004349 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004350 if (PyObject_SetAttr(result, state->ctx, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004351 goto failed;
4352 Py_DECREF(value);
4353 break;
4354 case Tuple_kind:
Victor Stinner74419f02020-07-03 11:35:37 +02004355 tp = (PyTypeObject *)state->Tuple_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07004356 result = PyType_GenericNew(tp, NULL, NULL);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004357 if (!result) goto failed;
Pablo Galindoa5634c42020-09-16 19:42:00 +01004358 value = ast2obj_list(state, (asdl_seq*)o->v.Tuple.elts, ast2obj_expr);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004359 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004360 if (PyObject_SetAttr(result, state->elts, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004361 goto failed;
4362 Py_DECREF(value);
Victor Stinner74419f02020-07-03 11:35:37 +02004363 value = ast2obj_expr_context(state, o->v.Tuple.ctx);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004364 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004365 if (PyObject_SetAttr(result, state->ctx, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004366 goto failed;
4367 Py_DECREF(value);
4368 break;
Serhiy Storchaka13d52c22020-03-10 18:52:34 +02004369 case Slice_kind:
Victor Stinner74419f02020-07-03 11:35:37 +02004370 tp = (PyTypeObject *)state->Slice_type;
Serhiy Storchaka13d52c22020-03-10 18:52:34 +02004371 result = PyType_GenericNew(tp, NULL, NULL);
4372 if (!result) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004373 value = ast2obj_expr(state, o->v.Slice.lower);
Serhiy Storchaka13d52c22020-03-10 18:52:34 +02004374 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004375 if (PyObject_SetAttr(result, state->lower, value) == -1)
Serhiy Storchaka13d52c22020-03-10 18:52:34 +02004376 goto failed;
4377 Py_DECREF(value);
Victor Stinner74419f02020-07-03 11:35:37 +02004378 value = ast2obj_expr(state, o->v.Slice.upper);
Serhiy Storchaka13d52c22020-03-10 18:52:34 +02004379 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004380 if (PyObject_SetAttr(result, state->upper, value) == -1)
Serhiy Storchaka13d52c22020-03-10 18:52:34 +02004381 goto failed;
4382 Py_DECREF(value);
Victor Stinner74419f02020-07-03 11:35:37 +02004383 value = ast2obj_expr(state, o->v.Slice.step);
Serhiy Storchaka13d52c22020-03-10 18:52:34 +02004384 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004385 if (PyObject_SetAttr(result, state->step, value) == -1)
Serhiy Storchaka13d52c22020-03-10 18:52:34 +02004386 goto failed;
4387 Py_DECREF(value);
4388 break;
Brandt Bucher145bf262021-02-26 14:51:55 -08004389 case MatchAs_kind:
4390 tp = (PyTypeObject *)state->MatchAs_type;
4391 result = PyType_GenericNew(tp, NULL, NULL);
4392 if (!result) goto failed;
4393 value = ast2obj_expr(state, o->v.MatchAs.pattern);
4394 if (!value) goto failed;
4395 if (PyObject_SetAttr(result, state->pattern, value) == -1)
4396 goto failed;
4397 Py_DECREF(value);
4398 value = ast2obj_identifier(state, o->v.MatchAs.name);
4399 if (!value) goto failed;
4400 if (PyObject_SetAttr(result, state->name, value) == -1)
4401 goto failed;
4402 Py_DECREF(value);
4403 break;
4404 case MatchOr_kind:
4405 tp = (PyTypeObject *)state->MatchOr_type;
4406 result = PyType_GenericNew(tp, NULL, NULL);
4407 if (!result) goto failed;
4408 value = ast2obj_list(state, (asdl_seq*)o->v.MatchOr.patterns,
4409 ast2obj_expr);
4410 if (!value) goto failed;
4411 if (PyObject_SetAttr(result, state->patterns, value) == -1)
4412 goto failed;
4413 Py_DECREF(value);
4414 break;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004415 }
Victor Stinner74419f02020-07-03 11:35:37 +02004416 value = ast2obj_int(state, o->lineno);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004417 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004418 if (PyObject_SetAttr(result, state->lineno, value) < 0)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004419 goto failed;
4420 Py_DECREF(value);
Victor Stinner74419f02020-07-03 11:35:37 +02004421 value = ast2obj_int(state, o->col_offset);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004422 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004423 if (PyObject_SetAttr(result, state->col_offset, value) < 0)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004424 goto failed;
4425 Py_DECREF(value);
Victor Stinner74419f02020-07-03 11:35:37 +02004426 value = ast2obj_int(state, o->end_lineno);
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00004427 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004428 if (PyObject_SetAttr(result, state->end_lineno, value) < 0)
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00004429 goto failed;
4430 Py_DECREF(value);
Victor Stinner74419f02020-07-03 11:35:37 +02004431 value = ast2obj_int(state, o->end_col_offset);
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00004432 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004433 if (PyObject_SetAttr(result, state->end_col_offset, value) < 0)
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00004434 goto failed;
4435 Py_DECREF(value);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004436 return result;
Martin v. Löwisbd260da2006-02-26 19:42:26 +00004437failed:
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004438 Py_XDECREF(value);
4439 Py_XDECREF(result);
4440 return NULL;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00004441}
4442
Victor Stinner5cf47822020-11-02 22:03:28 +01004443PyObject* ast2obj_expr_context(struct ast_state *state, expr_context_ty o)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00004444{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004445 switch(o) {
4446 case Load:
Victor Stinner74419f02020-07-03 11:35:37 +02004447 Py_INCREF(state->Load_singleton);
4448 return state->Load_singleton;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004449 case Store:
Victor Stinner74419f02020-07-03 11:35:37 +02004450 Py_INCREF(state->Store_singleton);
4451 return state->Store_singleton;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004452 case Del:
Victor Stinner74419f02020-07-03 11:35:37 +02004453 Py_INCREF(state->Del_singleton);
4454 return state->Del_singleton;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004455 }
Batuhan Taskaya091951a2020-05-06 17:29:32 +03004456 Py_UNREACHABLE();
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00004457}
Victor Stinner5cf47822020-11-02 22:03:28 +01004458PyObject* ast2obj_boolop(struct ast_state *state, boolop_ty o)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00004459{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004460 switch(o) {
4461 case And:
Victor Stinner74419f02020-07-03 11:35:37 +02004462 Py_INCREF(state->And_singleton);
4463 return state->And_singleton;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004464 case Or:
Victor Stinner74419f02020-07-03 11:35:37 +02004465 Py_INCREF(state->Or_singleton);
4466 return state->Or_singleton;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004467 }
Batuhan Taskaya091951a2020-05-06 17:29:32 +03004468 Py_UNREACHABLE();
Martin v. Löwisbd260da2006-02-26 19:42:26 +00004469}
Victor Stinner5cf47822020-11-02 22:03:28 +01004470PyObject* ast2obj_operator(struct ast_state *state, operator_ty o)
Martin v. Löwisbd260da2006-02-26 19:42:26 +00004471{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004472 switch(o) {
4473 case Add:
Victor Stinner74419f02020-07-03 11:35:37 +02004474 Py_INCREF(state->Add_singleton);
4475 return state->Add_singleton;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004476 case Sub:
Victor Stinner74419f02020-07-03 11:35:37 +02004477 Py_INCREF(state->Sub_singleton);
4478 return state->Sub_singleton;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004479 case Mult:
Victor Stinner74419f02020-07-03 11:35:37 +02004480 Py_INCREF(state->Mult_singleton);
4481 return state->Mult_singleton;
Benjamin Petersond51374e2014-04-09 23:55:56 -04004482 case MatMult:
Victor Stinner74419f02020-07-03 11:35:37 +02004483 Py_INCREF(state->MatMult_singleton);
4484 return state->MatMult_singleton;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004485 case Div:
Victor Stinner74419f02020-07-03 11:35:37 +02004486 Py_INCREF(state->Div_singleton);
4487 return state->Div_singleton;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004488 case Mod:
Victor Stinner74419f02020-07-03 11:35:37 +02004489 Py_INCREF(state->Mod_singleton);
4490 return state->Mod_singleton;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004491 case Pow:
Victor Stinner74419f02020-07-03 11:35:37 +02004492 Py_INCREF(state->Pow_singleton);
4493 return state->Pow_singleton;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004494 case LShift:
Victor Stinner74419f02020-07-03 11:35:37 +02004495 Py_INCREF(state->LShift_singleton);
4496 return state->LShift_singleton;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004497 case RShift:
Victor Stinner74419f02020-07-03 11:35:37 +02004498 Py_INCREF(state->RShift_singleton);
4499 return state->RShift_singleton;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004500 case BitOr:
Victor Stinner74419f02020-07-03 11:35:37 +02004501 Py_INCREF(state->BitOr_singleton);
4502 return state->BitOr_singleton;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004503 case BitXor:
Victor Stinner74419f02020-07-03 11:35:37 +02004504 Py_INCREF(state->BitXor_singleton);
4505 return state->BitXor_singleton;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004506 case BitAnd:
Victor Stinner74419f02020-07-03 11:35:37 +02004507 Py_INCREF(state->BitAnd_singleton);
4508 return state->BitAnd_singleton;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004509 case FloorDiv:
Victor Stinner74419f02020-07-03 11:35:37 +02004510 Py_INCREF(state->FloorDiv_singleton);
4511 return state->FloorDiv_singleton;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004512 }
Batuhan Taskaya091951a2020-05-06 17:29:32 +03004513 Py_UNREACHABLE();
Martin v. Löwisbd260da2006-02-26 19:42:26 +00004514}
Victor Stinner5cf47822020-11-02 22:03:28 +01004515PyObject* ast2obj_unaryop(struct ast_state *state, unaryop_ty o)
Martin v. Löwisbd260da2006-02-26 19:42:26 +00004516{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004517 switch(o) {
4518 case Invert:
Victor Stinner74419f02020-07-03 11:35:37 +02004519 Py_INCREF(state->Invert_singleton);
4520 return state->Invert_singleton;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004521 case Not:
Victor Stinner74419f02020-07-03 11:35:37 +02004522 Py_INCREF(state->Not_singleton);
4523 return state->Not_singleton;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004524 case UAdd:
Victor Stinner74419f02020-07-03 11:35:37 +02004525 Py_INCREF(state->UAdd_singleton);
4526 return state->UAdd_singleton;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004527 case USub:
Victor Stinner74419f02020-07-03 11:35:37 +02004528 Py_INCREF(state->USub_singleton);
4529 return state->USub_singleton;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004530 }
Batuhan Taskaya091951a2020-05-06 17:29:32 +03004531 Py_UNREACHABLE();
Martin v. Löwisbd260da2006-02-26 19:42:26 +00004532}
Victor Stinner5cf47822020-11-02 22:03:28 +01004533PyObject* ast2obj_cmpop(struct ast_state *state, cmpop_ty o)
Martin v. Löwisbd260da2006-02-26 19:42:26 +00004534{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004535 switch(o) {
4536 case Eq:
Victor Stinner74419f02020-07-03 11:35:37 +02004537 Py_INCREF(state->Eq_singleton);
4538 return state->Eq_singleton;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004539 case NotEq:
Victor Stinner74419f02020-07-03 11:35:37 +02004540 Py_INCREF(state->NotEq_singleton);
4541 return state->NotEq_singleton;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004542 case Lt:
Victor Stinner74419f02020-07-03 11:35:37 +02004543 Py_INCREF(state->Lt_singleton);
4544 return state->Lt_singleton;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004545 case LtE:
Victor Stinner74419f02020-07-03 11:35:37 +02004546 Py_INCREF(state->LtE_singleton);
4547 return state->LtE_singleton;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004548 case Gt:
Victor Stinner74419f02020-07-03 11:35:37 +02004549 Py_INCREF(state->Gt_singleton);
4550 return state->Gt_singleton;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004551 case GtE:
Victor Stinner74419f02020-07-03 11:35:37 +02004552 Py_INCREF(state->GtE_singleton);
4553 return state->GtE_singleton;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004554 case Is:
Victor Stinner74419f02020-07-03 11:35:37 +02004555 Py_INCREF(state->Is_singleton);
4556 return state->Is_singleton;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004557 case IsNot:
Victor Stinner74419f02020-07-03 11:35:37 +02004558 Py_INCREF(state->IsNot_singleton);
4559 return state->IsNot_singleton;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004560 case In:
Victor Stinner74419f02020-07-03 11:35:37 +02004561 Py_INCREF(state->In_singleton);
4562 return state->In_singleton;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004563 case NotIn:
Victor Stinner74419f02020-07-03 11:35:37 +02004564 Py_INCREF(state->NotIn_singleton);
4565 return state->NotIn_singleton;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004566 }
Batuhan Taskaya091951a2020-05-06 17:29:32 +03004567 Py_UNREACHABLE();
Martin v. Löwisbd260da2006-02-26 19:42:26 +00004568}
4569PyObject*
Victor Stinner5cf47822020-11-02 22:03:28 +01004570ast2obj_comprehension(struct ast_state *state, void* _o)
Martin v. Löwisbd260da2006-02-26 19:42:26 +00004571{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004572 comprehension_ty o = (comprehension_ty)_o;
4573 PyObject *result = NULL, *value = NULL;
Dino Viehlandac46eb42019-09-11 10:16:34 -07004574 PyTypeObject *tp;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004575 if (!o) {
Serhiy Storchaka228b12e2017-01-23 09:47:21 +02004576 Py_RETURN_NONE;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004577 }
Victor Stinner74419f02020-07-03 11:35:37 +02004578 tp = (PyTypeObject *)state->comprehension_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07004579 result = PyType_GenericNew(tp, NULL, NULL);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004580 if (!result) return NULL;
Victor Stinner74419f02020-07-03 11:35:37 +02004581 value = ast2obj_expr(state, o->target);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004582 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004583 if (PyObject_SetAttr(result, state->target, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004584 goto failed;
4585 Py_DECREF(value);
Victor Stinner74419f02020-07-03 11:35:37 +02004586 value = ast2obj_expr(state, o->iter);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004587 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004588 if (PyObject_SetAttr(result, state->iter, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004589 goto failed;
4590 Py_DECREF(value);
Pablo Galindoa5634c42020-09-16 19:42:00 +01004591 value = ast2obj_list(state, (asdl_seq*)o->ifs, ast2obj_expr);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004592 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004593 if (PyObject_SetAttr(result, state->ifs, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004594 goto failed;
4595 Py_DECREF(value);
Victor Stinner74419f02020-07-03 11:35:37 +02004596 value = ast2obj_int(state, o->is_async);
Yury Selivanov52c4e7c2016-09-09 10:36:01 -07004597 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004598 if (PyObject_SetAttr(result, state->is_async, value) == -1)
Yury Selivanov52c4e7c2016-09-09 10:36:01 -07004599 goto failed;
4600 Py_DECREF(value);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004601 return result;
Martin v. Löwisbd260da2006-02-26 19:42:26 +00004602failed:
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004603 Py_XDECREF(value);
4604 Py_XDECREF(result);
4605 return NULL;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00004606}
4607
Martin v. Löwisbd260da2006-02-26 19:42:26 +00004608PyObject*
Victor Stinner5cf47822020-11-02 22:03:28 +01004609ast2obj_excepthandler(struct ast_state *state, void* _o)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00004610{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004611 excepthandler_ty o = (excepthandler_ty)_o;
4612 PyObject *result = NULL, *value = NULL;
Dino Viehlandac46eb42019-09-11 10:16:34 -07004613 PyTypeObject *tp;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004614 if (!o) {
Serhiy Storchaka228b12e2017-01-23 09:47:21 +02004615 Py_RETURN_NONE;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004616 }
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004617 switch (o->kind) {
4618 case ExceptHandler_kind:
Victor Stinner74419f02020-07-03 11:35:37 +02004619 tp = (PyTypeObject *)state->ExceptHandler_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07004620 result = PyType_GenericNew(tp, NULL, NULL);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004621 if (!result) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004622 value = ast2obj_expr(state, o->v.ExceptHandler.type);
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00004623 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004624 if (PyObject_SetAttr(result, state->type, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004625 goto failed;
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00004626 Py_DECREF(value);
Victor Stinner74419f02020-07-03 11:35:37 +02004627 value = ast2obj_identifier(state, o->v.ExceptHandler.name);
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00004628 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004629 if (PyObject_SetAttr(result, state->name, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004630 goto failed;
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00004631 Py_DECREF(value);
Pablo Galindoa5634c42020-09-16 19:42:00 +01004632 value = ast2obj_list(state, (asdl_seq*)o->v.ExceptHandler.body,
4633 ast2obj_stmt);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004634 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004635 if (PyObject_SetAttr(result, state->body, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004636 goto failed;
4637 Py_DECREF(value);
4638 break;
4639 }
Victor Stinner74419f02020-07-03 11:35:37 +02004640 value = ast2obj_int(state, o->lineno);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004641 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004642 if (PyObject_SetAttr(result, state->lineno, value) < 0)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004643 goto failed;
4644 Py_DECREF(value);
Victor Stinner74419f02020-07-03 11:35:37 +02004645 value = ast2obj_int(state, o->col_offset);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004646 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004647 if (PyObject_SetAttr(result, state->col_offset, value) < 0)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004648 goto failed;
4649 Py_DECREF(value);
Victor Stinner74419f02020-07-03 11:35:37 +02004650 value = ast2obj_int(state, o->end_lineno);
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00004651 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004652 if (PyObject_SetAttr(result, state->end_lineno, value) < 0)
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00004653 goto failed;
4654 Py_DECREF(value);
Victor Stinner74419f02020-07-03 11:35:37 +02004655 value = ast2obj_int(state, o->end_col_offset);
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00004656 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004657 if (PyObject_SetAttr(result, state->end_col_offset, value) < 0)
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00004658 goto failed;
4659 Py_DECREF(value);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004660 return result;
Martin v. Löwisbd260da2006-02-26 19:42:26 +00004661failed:
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004662 Py_XDECREF(value);
4663 Py_XDECREF(result);
4664 return NULL;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00004665}
4666
Martin v. Löwisbd260da2006-02-26 19:42:26 +00004667PyObject*
Victor Stinner5cf47822020-11-02 22:03:28 +01004668ast2obj_arguments(struct ast_state *state, void* _o)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00004669{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004670 arguments_ty o = (arguments_ty)_o;
4671 PyObject *result = NULL, *value = NULL;
Dino Viehlandac46eb42019-09-11 10:16:34 -07004672 PyTypeObject *tp;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004673 if (!o) {
Serhiy Storchaka228b12e2017-01-23 09:47:21 +02004674 Py_RETURN_NONE;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004675 }
Victor Stinner74419f02020-07-03 11:35:37 +02004676 tp = (PyTypeObject *)state->arguments_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07004677 result = PyType_GenericNew(tp, NULL, NULL);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004678 if (!result) return NULL;
Pablo Galindoa5634c42020-09-16 19:42:00 +01004679 value = ast2obj_list(state, (asdl_seq*)o->posonlyargs, ast2obj_arg);
Pablo Galindo8c77b8c2019-04-29 13:36:57 +01004680 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004681 if (PyObject_SetAttr(result, state->posonlyargs, value) == -1)
Pablo Galindo8c77b8c2019-04-29 13:36:57 +01004682 goto failed;
4683 Py_DECREF(value);
Pablo Galindoa5634c42020-09-16 19:42:00 +01004684 value = ast2obj_list(state, (asdl_seq*)o->args, ast2obj_arg);
Pablo Galindocd6e83b2019-07-15 01:32:18 +02004685 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004686 if (PyObject_SetAttr(result, state->args, value) == -1)
Pablo Galindocd6e83b2019-07-15 01:32:18 +02004687 goto failed;
4688 Py_DECREF(value);
Victor Stinner74419f02020-07-03 11:35:37 +02004689 value = ast2obj_arg(state, o->vararg);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004690 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004691 if (PyObject_SetAttr(result, state->vararg, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004692 goto failed;
4693 Py_DECREF(value);
Pablo Galindoa5634c42020-09-16 19:42:00 +01004694 value = ast2obj_list(state, (asdl_seq*)o->kwonlyargs, ast2obj_arg);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004695 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004696 if (PyObject_SetAttr(result, state->kwonlyargs, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004697 goto failed;
4698 Py_DECREF(value);
Pablo Galindoa5634c42020-09-16 19:42:00 +01004699 value = ast2obj_list(state, (asdl_seq*)o->kw_defaults, ast2obj_expr);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004700 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004701 if (PyObject_SetAttr(result, state->kw_defaults, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004702 goto failed;
4703 Py_DECREF(value);
Victor Stinner74419f02020-07-03 11:35:37 +02004704 value = ast2obj_arg(state, o->kwarg);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004705 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004706 if (PyObject_SetAttr(result, state->kwarg, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004707 goto failed;
4708 Py_DECREF(value);
Pablo Galindoa5634c42020-09-16 19:42:00 +01004709 value = ast2obj_list(state, (asdl_seq*)o->defaults, ast2obj_expr);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004710 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004711 if (PyObject_SetAttr(result, state->defaults, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004712 goto failed;
4713 Py_DECREF(value);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004714 return result;
Martin v. Löwisbd260da2006-02-26 19:42:26 +00004715failed:
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004716 Py_XDECREF(value);
4717 Py_XDECREF(result);
4718 return NULL;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00004719}
4720
Martin v. Löwisbd260da2006-02-26 19:42:26 +00004721PyObject*
Victor Stinner5cf47822020-11-02 22:03:28 +01004722ast2obj_arg(struct ast_state *state, void* _o)
Neal Norwitzc1505362006-12-28 06:47:50 +00004723{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004724 arg_ty o = (arg_ty)_o;
4725 PyObject *result = NULL, *value = NULL;
Dino Viehlandac46eb42019-09-11 10:16:34 -07004726 PyTypeObject *tp;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004727 if (!o) {
Serhiy Storchaka228b12e2017-01-23 09:47:21 +02004728 Py_RETURN_NONE;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004729 }
Victor Stinner74419f02020-07-03 11:35:37 +02004730 tp = (PyTypeObject *)state->arg_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07004731 result = PyType_GenericNew(tp, NULL, NULL);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004732 if (!result) return NULL;
Victor Stinner74419f02020-07-03 11:35:37 +02004733 value = ast2obj_identifier(state, o->arg);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004734 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004735 if (PyObject_SetAttr(result, state->arg, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004736 goto failed;
4737 Py_DECREF(value);
Victor Stinner74419f02020-07-03 11:35:37 +02004738 value = ast2obj_expr(state, o->annotation);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004739 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004740 if (PyObject_SetAttr(result, state->annotation, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004741 goto failed;
4742 Py_DECREF(value);
Victor Stinner74419f02020-07-03 11:35:37 +02004743 value = ast2obj_string(state, o->type_comment);
Guido van Rossumdcfcd142019-01-31 03:40:27 -08004744 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004745 if (PyObject_SetAttr(result, state->type_comment, value) == -1)
Guido van Rossumdcfcd142019-01-31 03:40:27 -08004746 goto failed;
4747 Py_DECREF(value);
Victor Stinner74419f02020-07-03 11:35:37 +02004748 value = ast2obj_int(state, o->lineno);
Victor Stinneree4b59c2013-07-27 00:01:35 +02004749 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004750 if (PyObject_SetAttr(result, state->lineno, value) < 0)
Victor Stinneree4b59c2013-07-27 00:01:35 +02004751 goto failed;
4752 Py_DECREF(value);
Victor Stinner74419f02020-07-03 11:35:37 +02004753 value = ast2obj_int(state, o->col_offset);
Victor Stinneree4b59c2013-07-27 00:01:35 +02004754 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004755 if (PyObject_SetAttr(result, state->col_offset, value) < 0)
Victor Stinneree4b59c2013-07-27 00:01:35 +02004756 goto failed;
4757 Py_DECREF(value);
Victor Stinner74419f02020-07-03 11:35:37 +02004758 value = ast2obj_int(state, o->end_lineno);
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00004759 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004760 if (PyObject_SetAttr(result, state->end_lineno, value) < 0)
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00004761 goto failed;
4762 Py_DECREF(value);
Victor Stinner74419f02020-07-03 11:35:37 +02004763 value = ast2obj_int(state, o->end_col_offset);
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00004764 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004765 if (PyObject_SetAttr(result, state->end_col_offset, value) < 0)
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00004766 goto failed;
4767 Py_DECREF(value);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004768 return result;
Neal Norwitzc1505362006-12-28 06:47:50 +00004769failed:
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004770 Py_XDECREF(value);
4771 Py_XDECREF(result);
4772 return NULL;
Neal Norwitzc1505362006-12-28 06:47:50 +00004773}
4774
4775PyObject*
Victor Stinner5cf47822020-11-02 22:03:28 +01004776ast2obj_keyword(struct ast_state *state, void* _o)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00004777{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004778 keyword_ty o = (keyword_ty)_o;
4779 PyObject *result = NULL, *value = NULL;
Dino Viehlandac46eb42019-09-11 10:16:34 -07004780 PyTypeObject *tp;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004781 if (!o) {
Serhiy Storchaka228b12e2017-01-23 09:47:21 +02004782 Py_RETURN_NONE;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004783 }
Victor Stinner74419f02020-07-03 11:35:37 +02004784 tp = (PyTypeObject *)state->keyword_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07004785 result = PyType_GenericNew(tp, NULL, NULL);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004786 if (!result) return NULL;
Victor Stinner74419f02020-07-03 11:35:37 +02004787 value = ast2obj_identifier(state, o->arg);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004788 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004789 if (PyObject_SetAttr(result, state->arg, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004790 goto failed;
4791 Py_DECREF(value);
Victor Stinner74419f02020-07-03 11:35:37 +02004792 value = ast2obj_expr(state, o->value);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004793 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004794 if (PyObject_SetAttr(result, state->value, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004795 goto failed;
4796 Py_DECREF(value);
Victor Stinner74419f02020-07-03 11:35:37 +02004797 value = ast2obj_int(state, o->lineno);
Pablo Galindo168660b2020-04-02 00:47:39 +01004798 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004799 if (PyObject_SetAttr(result, state->lineno, value) < 0)
Pablo Galindo168660b2020-04-02 00:47:39 +01004800 goto failed;
4801 Py_DECREF(value);
Victor Stinner74419f02020-07-03 11:35:37 +02004802 value = ast2obj_int(state, o->col_offset);
Pablo Galindo168660b2020-04-02 00:47:39 +01004803 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004804 if (PyObject_SetAttr(result, state->col_offset, value) < 0)
Pablo Galindo168660b2020-04-02 00:47:39 +01004805 goto failed;
4806 Py_DECREF(value);
Victor Stinner74419f02020-07-03 11:35:37 +02004807 value = ast2obj_int(state, o->end_lineno);
Pablo Galindo168660b2020-04-02 00:47:39 +01004808 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004809 if (PyObject_SetAttr(result, state->end_lineno, value) < 0)
Pablo Galindo168660b2020-04-02 00:47:39 +01004810 goto failed;
4811 Py_DECREF(value);
Victor Stinner74419f02020-07-03 11:35:37 +02004812 value = ast2obj_int(state, o->end_col_offset);
Pablo Galindo168660b2020-04-02 00:47:39 +01004813 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004814 if (PyObject_SetAttr(result, state->end_col_offset, value) < 0)
Pablo Galindo168660b2020-04-02 00:47:39 +01004815 goto failed;
4816 Py_DECREF(value);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004817 return result;
Martin v. Löwisbd260da2006-02-26 19:42:26 +00004818failed:
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004819 Py_XDECREF(value);
4820 Py_XDECREF(result);
4821 return NULL;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00004822}
4823
Martin v. Löwisbd260da2006-02-26 19:42:26 +00004824PyObject*
Victor Stinner5cf47822020-11-02 22:03:28 +01004825ast2obj_alias(struct ast_state *state, void* _o)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00004826{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004827 alias_ty o = (alias_ty)_o;
4828 PyObject *result = NULL, *value = NULL;
Dino Viehlandac46eb42019-09-11 10:16:34 -07004829 PyTypeObject *tp;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004830 if (!o) {
Serhiy Storchaka228b12e2017-01-23 09:47:21 +02004831 Py_RETURN_NONE;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004832 }
Victor Stinner74419f02020-07-03 11:35:37 +02004833 tp = (PyTypeObject *)state->alias_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07004834 result = PyType_GenericNew(tp, NULL, NULL);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004835 if (!result) return NULL;
Victor Stinner74419f02020-07-03 11:35:37 +02004836 value = ast2obj_identifier(state, o->name);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004837 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004838 if (PyObject_SetAttr(result, state->name, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004839 goto failed;
4840 Py_DECREF(value);
Victor Stinner74419f02020-07-03 11:35:37 +02004841 value = ast2obj_identifier(state, o->asname);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004842 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004843 if (PyObject_SetAttr(result, state->asname, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004844 goto failed;
4845 Py_DECREF(value);
4846 return result;
Martin v. Löwisbd260da2006-02-26 19:42:26 +00004847failed:
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004848 Py_XDECREF(value);
4849 Py_XDECREF(result);
4850 return NULL;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00004851}
4852
Benjamin Petersonbf1bbc12011-05-27 13:58:08 -05004853PyObject*
Victor Stinner5cf47822020-11-02 22:03:28 +01004854ast2obj_withitem(struct ast_state *state, void* _o)
Benjamin Petersonbf1bbc12011-05-27 13:58:08 -05004855{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004856 withitem_ty o = (withitem_ty)_o;
4857 PyObject *result = NULL, *value = NULL;
Dino Viehlandac46eb42019-09-11 10:16:34 -07004858 PyTypeObject *tp;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004859 if (!o) {
Serhiy Storchaka228b12e2017-01-23 09:47:21 +02004860 Py_RETURN_NONE;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004861 }
Victor Stinner74419f02020-07-03 11:35:37 +02004862 tp = (PyTypeObject *)state->withitem_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07004863 result = PyType_GenericNew(tp, NULL, NULL);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004864 if (!result) return NULL;
Victor Stinner74419f02020-07-03 11:35:37 +02004865 value = ast2obj_expr(state, o->context_expr);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004866 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004867 if (PyObject_SetAttr(result, state->context_expr, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004868 goto failed;
4869 Py_DECREF(value);
Victor Stinner74419f02020-07-03 11:35:37 +02004870 value = ast2obj_expr(state, o->optional_vars);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004871 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004872 if (PyObject_SetAttr(result, state->optional_vars, value) == -1)
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004873 goto failed;
4874 Py_DECREF(value);
4875 return result;
Benjamin Petersonbf1bbc12011-05-27 13:58:08 -05004876failed:
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004877 Py_XDECREF(value);
4878 Py_XDECREF(result);
4879 return NULL;
Benjamin Petersonbf1bbc12011-05-27 13:58:08 -05004880}
4881
Guido van Rossumdcfcd142019-01-31 03:40:27 -08004882PyObject*
Brandt Bucher145bf262021-02-26 14:51:55 -08004883ast2obj_match_case(struct ast_state *state, void* _o)
4884{
4885 match_case_ty o = (match_case_ty)_o;
4886 PyObject *result = NULL, *value = NULL;
4887 PyTypeObject *tp;
4888 if (!o) {
4889 Py_RETURN_NONE;
4890 }
4891 tp = (PyTypeObject *)state->match_case_type;
4892 result = PyType_GenericNew(tp, NULL, NULL);
4893 if (!result) return NULL;
4894 value = ast2obj_expr(state, o->pattern);
4895 if (!value) goto failed;
4896 if (PyObject_SetAttr(result, state->pattern, value) == -1)
4897 goto failed;
4898 Py_DECREF(value);
4899 value = ast2obj_expr(state, o->guard);
4900 if (!value) goto failed;
4901 if (PyObject_SetAttr(result, state->guard, value) == -1)
4902 goto failed;
4903 Py_DECREF(value);
4904 value = ast2obj_list(state, (asdl_seq*)o->body, ast2obj_stmt);
4905 if (!value) goto failed;
4906 if (PyObject_SetAttr(result, state->body, value) == -1)
4907 goto failed;
4908 Py_DECREF(value);
4909 return result;
4910failed:
4911 Py_XDECREF(value);
4912 Py_XDECREF(result);
4913 return NULL;
4914}
4915
4916PyObject*
Victor Stinner5cf47822020-11-02 22:03:28 +01004917ast2obj_type_ignore(struct ast_state *state, void* _o)
Guido van Rossumdcfcd142019-01-31 03:40:27 -08004918{
4919 type_ignore_ty o = (type_ignore_ty)_o;
4920 PyObject *result = NULL, *value = NULL;
Dino Viehlandac46eb42019-09-11 10:16:34 -07004921 PyTypeObject *tp;
Guido van Rossumdcfcd142019-01-31 03:40:27 -08004922 if (!o) {
4923 Py_RETURN_NONE;
4924 }
Guido van Rossumdcfcd142019-01-31 03:40:27 -08004925 switch (o->kind) {
4926 case TypeIgnore_kind:
Victor Stinner74419f02020-07-03 11:35:37 +02004927 tp = (PyTypeObject *)state->TypeIgnore_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07004928 result = PyType_GenericNew(tp, NULL, NULL);
Guido van Rossumdcfcd142019-01-31 03:40:27 -08004929 if (!result) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004930 value = ast2obj_int(state, o->v.TypeIgnore.lineno);
Guido van Rossumdcfcd142019-01-31 03:40:27 -08004931 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004932 if (PyObject_SetAttr(result, state->lineno, value) == -1)
Guido van Rossumdcfcd142019-01-31 03:40:27 -08004933 goto failed;
4934 Py_DECREF(value);
Victor Stinner74419f02020-07-03 11:35:37 +02004935 value = ast2obj_string(state, o->v.TypeIgnore.tag);
Michael J. Sullivan933e1502019-05-22 07:54:20 -07004936 if (!value) goto failed;
Victor Stinner74419f02020-07-03 11:35:37 +02004937 if (PyObject_SetAttr(result, state->tag, value) == -1)
Michael J. Sullivan933e1502019-05-22 07:54:20 -07004938 goto failed;
4939 Py_DECREF(value);
Guido van Rossumdcfcd142019-01-31 03:40:27 -08004940 break;
4941 }
4942 return result;
4943failed:
4944 Py_XDECREF(value);
4945 Py_XDECREF(result);
4946 return NULL;
4947}
4948
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00004949
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00004950int
Victor Stinner5cf47822020-11-02 22:03:28 +01004951obj2ast_mod(struct ast_state *state, PyObject* obj, mod_ty* out, PyArena* arena)
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00004952{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004953 int isinstance;
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00004954
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004955 PyObject *tmp = NULL;
Dino Viehlandac46eb42019-09-11 10:16:34 -07004956 PyObject *tp;
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00004957
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004958 if (obj == Py_None) {
4959 *out = NULL;
4960 return 0;
4961 }
Victor Stinner74419f02020-07-03 11:35:37 +02004962 tp = state->Module_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07004963 isinstance = PyObject_IsInstance(obj, tp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004964 if (isinstance == -1) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00004965 return 1;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004966 }
4967 if (isinstance) {
Pablo Galindoa5634c42020-09-16 19:42:00 +01004968 asdl_stmt_seq* body;
4969 asdl_type_ignore_seq* type_ignores;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004970
Victor Stinner74419f02020-07-03 11:35:37 +02004971 if (_PyObject_LookupAttr(obj, state->body, &tmp) < 0) {
Serhiy Storchakaf320be72018-01-25 10:49:40 +02004972 return 1;
4973 }
4974 if (tmp == NULL) {
4975 PyErr_SetString(PyExc_TypeError, "required field \"body\" missing from Module");
4976 return 1;
4977 }
4978 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004979 int res;
4980 Py_ssize_t len;
4981 Py_ssize_t i;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004982 if (!PyList_Check(tmp)) {
Dino Viehlandac46eb42019-09-11 10:16:34 -07004983 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 +02004984 goto failed;
4985 }
4986 len = PyList_GET_SIZE(tmp);
Pablo Galindoa5634c42020-09-16 19:42:00 +01004987 body = _Py_asdl_stmt_seq_new(len, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004988 if (body == NULL) goto failed;
4989 for (i = 0; i < len; i++) {
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07004990 stmt_ty val;
Serhiy Storchaka43c97312019-09-10 13:02:30 +03004991 PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
4992 Py_INCREF(tmp2);
Victor Stinner74419f02020-07-03 11:35:37 +02004993 res = obj2ast_stmt(state, tmp2, &val, arena);
Serhiy Storchaka43c97312019-09-10 13:02:30 +03004994 Py_DECREF(tmp2);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02004995 if (res != 0) goto failed;
Serhiy Storchakacf380602016-10-07 21:51:28 +03004996 if (len != PyList_GET_SIZE(tmp)) {
4997 PyErr_SetString(PyExc_RuntimeError, "Module field \"body\" changed size during iteration");
4998 goto failed;
4999 }
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07005000 asdl_seq_SET(body, i, val);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005001 }
Victor Stinner1acc1292013-07-27 00:03:47 +02005002 Py_CLEAR(tmp);
Serhiy Storchakaf320be72018-01-25 10:49:40 +02005003 }
Victor Stinner74419f02020-07-03 11:35:37 +02005004 if (_PyObject_LookupAttr(obj, state->type_ignores, &tmp) < 0) {
Guido van Rossumdcfcd142019-01-31 03:40:27 -08005005 return 1;
5006 }
5007 if (tmp == NULL) {
5008 PyErr_SetString(PyExc_TypeError, "required field \"type_ignores\" missing from Module");
5009 return 1;
5010 }
5011 else {
5012 int res;
5013 Py_ssize_t len;
5014 Py_ssize_t i;
5015 if (!PyList_Check(tmp)) {
Dino Viehlandac46eb42019-09-11 10:16:34 -07005016 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 -08005017 goto failed;
5018 }
5019 len = PyList_GET_SIZE(tmp);
Pablo Galindoa5634c42020-09-16 19:42:00 +01005020 type_ignores = _Py_asdl_type_ignore_seq_new(len, arena);
Guido van Rossumdcfcd142019-01-31 03:40:27 -08005021 if (type_ignores == NULL) goto failed;
5022 for (i = 0; i < len; i++) {
5023 type_ignore_ty val;
Serhiy Storchaka43c97312019-09-10 13:02:30 +03005024 PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
5025 Py_INCREF(tmp2);
Victor Stinner74419f02020-07-03 11:35:37 +02005026 res = obj2ast_type_ignore(state, tmp2, &val, arena);
Serhiy Storchaka43c97312019-09-10 13:02:30 +03005027 Py_DECREF(tmp2);
Guido van Rossumdcfcd142019-01-31 03:40:27 -08005028 if (res != 0) goto failed;
5029 if (len != PyList_GET_SIZE(tmp)) {
5030 PyErr_SetString(PyExc_RuntimeError, "Module field \"type_ignores\" changed size during iteration");
5031 goto failed;
5032 }
5033 asdl_seq_SET(type_ignores, i, val);
5034 }
5035 Py_CLEAR(tmp);
5036 }
5037 *out = Module(body, type_ignores, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005038 if (*out == NULL) goto failed;
5039 return 0;
5040 }
Victor Stinner74419f02020-07-03 11:35:37 +02005041 tp = state->Interactive_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07005042 isinstance = PyObject_IsInstance(obj, tp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005043 if (isinstance == -1) {
5044 return 1;
5045 }
5046 if (isinstance) {
Pablo Galindoa5634c42020-09-16 19:42:00 +01005047 asdl_stmt_seq* body;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005048
Victor Stinner74419f02020-07-03 11:35:37 +02005049 if (_PyObject_LookupAttr(obj, state->body, &tmp) < 0) {
Serhiy Storchakaf320be72018-01-25 10:49:40 +02005050 return 1;
5051 }
5052 if (tmp == NULL) {
5053 PyErr_SetString(PyExc_TypeError, "required field \"body\" missing from Interactive");
5054 return 1;
5055 }
5056 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005057 int res;
5058 Py_ssize_t len;
5059 Py_ssize_t i;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005060 if (!PyList_Check(tmp)) {
Dino Viehlandac46eb42019-09-11 10:16:34 -07005061 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 +02005062 goto failed;
5063 }
5064 len = PyList_GET_SIZE(tmp);
Pablo Galindoa5634c42020-09-16 19:42:00 +01005065 body = _Py_asdl_stmt_seq_new(len, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005066 if (body == NULL) goto failed;
5067 for (i = 0; i < len; i++) {
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07005068 stmt_ty val;
Serhiy Storchaka43c97312019-09-10 13:02:30 +03005069 PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
5070 Py_INCREF(tmp2);
Victor Stinner74419f02020-07-03 11:35:37 +02005071 res = obj2ast_stmt(state, tmp2, &val, arena);
Serhiy Storchaka43c97312019-09-10 13:02:30 +03005072 Py_DECREF(tmp2);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005073 if (res != 0) goto failed;
Serhiy Storchakacf380602016-10-07 21:51:28 +03005074 if (len != PyList_GET_SIZE(tmp)) {
5075 PyErr_SetString(PyExc_RuntimeError, "Interactive field \"body\" changed size during iteration");
5076 goto failed;
5077 }
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07005078 asdl_seq_SET(body, i, val);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005079 }
Victor Stinner1acc1292013-07-27 00:03:47 +02005080 Py_CLEAR(tmp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005081 }
5082 *out = Interactive(body, arena);
5083 if (*out == NULL) goto failed;
5084 return 0;
5085 }
Victor Stinner74419f02020-07-03 11:35:37 +02005086 tp = state->Expression_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07005087 isinstance = PyObject_IsInstance(obj, tp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005088 if (isinstance == -1) {
5089 return 1;
5090 }
5091 if (isinstance) {
5092 expr_ty body;
5093
Victor Stinner74419f02020-07-03 11:35:37 +02005094 if (_PyObject_LookupAttr(obj, state->body, &tmp) < 0) {
Serhiy Storchakaf320be72018-01-25 10:49:40 +02005095 return 1;
5096 }
5097 if (tmp == NULL) {
5098 PyErr_SetString(PyExc_TypeError, "required field \"body\" missing from Expression");
5099 return 1;
5100 }
5101 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005102 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02005103 res = obj2ast_expr(state, tmp, &body, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005104 if (res != 0) goto failed;
Victor Stinner1acc1292013-07-27 00:03:47 +02005105 Py_CLEAR(tmp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005106 }
5107 *out = Expression(body, arena);
5108 if (*out == NULL) goto failed;
5109 return 0;
5110 }
Victor Stinner74419f02020-07-03 11:35:37 +02005111 tp = state->FunctionType_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07005112 isinstance = PyObject_IsInstance(obj, tp);
Guido van Rossumdcfcd142019-01-31 03:40:27 -08005113 if (isinstance == -1) {
5114 return 1;
5115 }
5116 if (isinstance) {
Pablo Galindoa5634c42020-09-16 19:42:00 +01005117 asdl_expr_seq* argtypes;
Guido van Rossumdcfcd142019-01-31 03:40:27 -08005118 expr_ty returns;
5119
Victor Stinner74419f02020-07-03 11:35:37 +02005120 if (_PyObject_LookupAttr(obj, state->argtypes, &tmp) < 0) {
Guido van Rossumdcfcd142019-01-31 03:40:27 -08005121 return 1;
5122 }
5123 if (tmp == NULL) {
5124 PyErr_SetString(PyExc_TypeError, "required field \"argtypes\" missing from FunctionType");
5125 return 1;
5126 }
5127 else {
5128 int res;
5129 Py_ssize_t len;
5130 Py_ssize_t i;
5131 if (!PyList_Check(tmp)) {
Dino Viehlandac46eb42019-09-11 10:16:34 -07005132 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 -08005133 goto failed;
5134 }
5135 len = PyList_GET_SIZE(tmp);
Pablo Galindoa5634c42020-09-16 19:42:00 +01005136 argtypes = _Py_asdl_expr_seq_new(len, arena);
Guido van Rossumdcfcd142019-01-31 03:40:27 -08005137 if (argtypes == NULL) goto failed;
5138 for (i = 0; i < len; i++) {
5139 expr_ty val;
Serhiy Storchaka43c97312019-09-10 13:02:30 +03005140 PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
5141 Py_INCREF(tmp2);
Victor Stinner74419f02020-07-03 11:35:37 +02005142 res = obj2ast_expr(state, tmp2, &val, arena);
Serhiy Storchaka43c97312019-09-10 13:02:30 +03005143 Py_DECREF(tmp2);
Guido van Rossumdcfcd142019-01-31 03:40:27 -08005144 if (res != 0) goto failed;
5145 if (len != PyList_GET_SIZE(tmp)) {
5146 PyErr_SetString(PyExc_RuntimeError, "FunctionType field \"argtypes\" changed size during iteration");
5147 goto failed;
5148 }
5149 asdl_seq_SET(argtypes, i, val);
5150 }
5151 Py_CLEAR(tmp);
5152 }
Victor Stinner74419f02020-07-03 11:35:37 +02005153 if (_PyObject_LookupAttr(obj, state->returns, &tmp) < 0) {
Guido van Rossumdcfcd142019-01-31 03:40:27 -08005154 return 1;
5155 }
5156 if (tmp == NULL) {
5157 PyErr_SetString(PyExc_TypeError, "required field \"returns\" missing from FunctionType");
5158 return 1;
5159 }
5160 else {
5161 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02005162 res = obj2ast_expr(state, tmp, &returns, arena);
Guido van Rossumdcfcd142019-01-31 03:40:27 -08005163 if (res != 0) goto failed;
5164 Py_CLEAR(tmp);
5165 }
5166 *out = FunctionType(argtypes, returns, arena);
5167 if (*out == NULL) goto failed;
5168 return 0;
5169 }
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005170
5171 PyErr_Format(PyExc_TypeError, "expected some sort of mod, but got %R", obj);
5172 failed:
5173 Py_XDECREF(tmp);
5174 return 1;
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00005175}
5176
5177int
Victor Stinner5cf47822020-11-02 22:03:28 +01005178obj2ast_stmt(struct ast_state *state, PyObject* obj, stmt_ty* out, PyArena*
5179 arena)
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00005180{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005181 int isinstance;
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00005182
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005183 PyObject *tmp = NULL;
Dino Viehlandac46eb42019-09-11 10:16:34 -07005184 PyObject *tp;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005185 int lineno;
5186 int col_offset;
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00005187 int end_lineno;
5188 int end_col_offset;
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00005189
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005190 if (obj == Py_None) {
5191 *out = NULL;
5192 return 0;
5193 }
Victor Stinner74419f02020-07-03 11:35:37 +02005194 if (_PyObject_LookupAttr(obj, state->lineno, &tmp) < 0) {
Serhiy Storchakaf320be72018-01-25 10:49:40 +02005195 return 1;
5196 }
5197 if (tmp == NULL) {
5198 PyErr_SetString(PyExc_TypeError, "required field \"lineno\" missing from stmt");
5199 return 1;
5200 }
5201 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005202 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02005203 res = obj2ast_int(state, tmp, &lineno, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005204 if (res != 0) goto failed;
Victor Stinner1acc1292013-07-27 00:03:47 +02005205 Py_CLEAR(tmp);
Serhiy Storchakaf320be72018-01-25 10:49:40 +02005206 }
Victor Stinner74419f02020-07-03 11:35:37 +02005207 if (_PyObject_LookupAttr(obj, state->col_offset, &tmp) < 0) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00005208 return 1;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005209 }
Serhiy Storchakaf320be72018-01-25 10:49:40 +02005210 if (tmp == NULL) {
5211 PyErr_SetString(PyExc_TypeError, "required field \"col_offset\" missing from stmt");
5212 return 1;
5213 }
5214 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005215 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02005216 res = obj2ast_int(state, tmp, &col_offset, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005217 if (res != 0) goto failed;
Victor Stinner1acc1292013-07-27 00:03:47 +02005218 Py_CLEAR(tmp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005219 }
Victor Stinner74419f02020-07-03 11:35:37 +02005220 if (_PyObject_LookupAttr(obj, state->end_lineno, &tmp) < 0) {
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00005221 return 1;
5222 }
5223 if (tmp == NULL || tmp == Py_None) {
5224 Py_CLEAR(tmp);
5225 end_lineno = 0;
5226 }
5227 else {
5228 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02005229 res = obj2ast_int(state, tmp, &end_lineno, arena);
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00005230 if (res != 0) goto failed;
5231 Py_CLEAR(tmp);
5232 }
Victor Stinner74419f02020-07-03 11:35:37 +02005233 if (_PyObject_LookupAttr(obj, state->end_col_offset, &tmp) < 0) {
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00005234 return 1;
5235 }
5236 if (tmp == NULL || tmp == Py_None) {
5237 Py_CLEAR(tmp);
5238 end_col_offset = 0;
5239 }
5240 else {
5241 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02005242 res = obj2ast_int(state, tmp, &end_col_offset, arena);
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00005243 if (res != 0) goto failed;
5244 Py_CLEAR(tmp);
5245 }
Victor Stinner74419f02020-07-03 11:35:37 +02005246 tp = state->FunctionDef_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07005247 isinstance = PyObject_IsInstance(obj, tp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005248 if (isinstance == -1) {
5249 return 1;
5250 }
5251 if (isinstance) {
5252 identifier name;
5253 arguments_ty args;
Pablo Galindoa5634c42020-09-16 19:42:00 +01005254 asdl_stmt_seq* body;
5255 asdl_expr_seq* decorator_list;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005256 expr_ty returns;
Guido van Rossumdcfcd142019-01-31 03:40:27 -08005257 string type_comment;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005258
Victor Stinner74419f02020-07-03 11:35:37 +02005259 if (_PyObject_LookupAttr(obj, state->name, &tmp) < 0) {
Serhiy Storchakaf320be72018-01-25 10:49:40 +02005260 return 1;
5261 }
5262 if (tmp == NULL) {
5263 PyErr_SetString(PyExc_TypeError, "required field \"name\" missing from FunctionDef");
5264 return 1;
5265 }
5266 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005267 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02005268 res = obj2ast_identifier(state, tmp, &name, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005269 if (res != 0) goto failed;
Victor Stinner1acc1292013-07-27 00:03:47 +02005270 Py_CLEAR(tmp);
Serhiy Storchakaf320be72018-01-25 10:49:40 +02005271 }
Victor Stinner74419f02020-07-03 11:35:37 +02005272 if (_PyObject_LookupAttr(obj, state->args, &tmp) < 0) {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005273 return 1;
5274 }
Serhiy Storchakaf320be72018-01-25 10:49:40 +02005275 if (tmp == NULL) {
5276 PyErr_SetString(PyExc_TypeError, "required field \"args\" missing from FunctionDef");
5277 return 1;
5278 }
5279 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005280 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02005281 res = obj2ast_arguments(state, tmp, &args, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005282 if (res != 0) goto failed;
Victor Stinner1acc1292013-07-27 00:03:47 +02005283 Py_CLEAR(tmp);
Serhiy Storchakaf320be72018-01-25 10:49:40 +02005284 }
Victor Stinner74419f02020-07-03 11:35:37 +02005285 if (_PyObject_LookupAttr(obj, state->body, &tmp) < 0) {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005286 return 1;
5287 }
Serhiy Storchakaf320be72018-01-25 10:49:40 +02005288 if (tmp == NULL) {
5289 PyErr_SetString(PyExc_TypeError, "required field \"body\" missing from FunctionDef");
5290 return 1;
5291 }
5292 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005293 int res;
5294 Py_ssize_t len;
5295 Py_ssize_t i;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005296 if (!PyList_Check(tmp)) {
Dino Viehlandac46eb42019-09-11 10:16:34 -07005297 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 +02005298 goto failed;
5299 }
5300 len = PyList_GET_SIZE(tmp);
Pablo Galindoa5634c42020-09-16 19:42:00 +01005301 body = _Py_asdl_stmt_seq_new(len, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005302 if (body == NULL) goto failed;
5303 for (i = 0; i < len; i++) {
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07005304 stmt_ty val;
Serhiy Storchaka43c97312019-09-10 13:02:30 +03005305 PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
5306 Py_INCREF(tmp2);
Victor Stinner74419f02020-07-03 11:35:37 +02005307 res = obj2ast_stmt(state, tmp2, &val, arena);
Serhiy Storchaka43c97312019-09-10 13:02:30 +03005308 Py_DECREF(tmp2);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005309 if (res != 0) goto failed;
Serhiy Storchakacf380602016-10-07 21:51:28 +03005310 if (len != PyList_GET_SIZE(tmp)) {
5311 PyErr_SetString(PyExc_RuntimeError, "FunctionDef field \"body\" changed size during iteration");
5312 goto failed;
5313 }
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07005314 asdl_seq_SET(body, i, val);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005315 }
Victor Stinner1acc1292013-07-27 00:03:47 +02005316 Py_CLEAR(tmp);
Serhiy Storchakaf320be72018-01-25 10:49:40 +02005317 }
Victor Stinner74419f02020-07-03 11:35:37 +02005318 if (_PyObject_LookupAttr(obj, state->decorator_list, &tmp) < 0) {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005319 return 1;
5320 }
Serhiy Storchakaf320be72018-01-25 10:49:40 +02005321 if (tmp == NULL) {
5322 PyErr_SetString(PyExc_TypeError, "required field \"decorator_list\" missing from FunctionDef");
5323 return 1;
5324 }
5325 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005326 int res;
5327 Py_ssize_t len;
5328 Py_ssize_t i;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005329 if (!PyList_Check(tmp)) {
Dino Viehlandac46eb42019-09-11 10:16:34 -07005330 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 +02005331 goto failed;
5332 }
5333 len = PyList_GET_SIZE(tmp);
Pablo Galindoa5634c42020-09-16 19:42:00 +01005334 decorator_list = _Py_asdl_expr_seq_new(len, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005335 if (decorator_list == NULL) goto failed;
5336 for (i = 0; i < len; i++) {
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07005337 expr_ty val;
Serhiy Storchaka43c97312019-09-10 13:02:30 +03005338 PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
5339 Py_INCREF(tmp2);
Victor Stinner74419f02020-07-03 11:35:37 +02005340 res = obj2ast_expr(state, tmp2, &val, arena);
Serhiy Storchaka43c97312019-09-10 13:02:30 +03005341 Py_DECREF(tmp2);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005342 if (res != 0) goto failed;
Serhiy Storchakacf380602016-10-07 21:51:28 +03005343 if (len != PyList_GET_SIZE(tmp)) {
5344 PyErr_SetString(PyExc_RuntimeError, "FunctionDef field \"decorator_list\" changed size during iteration");
5345 goto failed;
5346 }
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07005347 asdl_seq_SET(decorator_list, i, val);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005348 }
Victor Stinner1acc1292013-07-27 00:03:47 +02005349 Py_CLEAR(tmp);
Serhiy Storchakaf320be72018-01-25 10:49:40 +02005350 }
Victor Stinner74419f02020-07-03 11:35:37 +02005351 if (_PyObject_LookupAttr(obj, state->returns, &tmp) < 0) {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005352 return 1;
5353 }
Serhiy Storchakaf320be72018-01-25 10:49:40 +02005354 if (tmp == NULL || tmp == Py_None) {
5355 Py_CLEAR(tmp);
5356 returns = NULL;
5357 }
5358 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005359 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02005360 res = obj2ast_expr(state, tmp, &returns, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005361 if (res != 0) goto failed;
Victor Stinner1acc1292013-07-27 00:03:47 +02005362 Py_CLEAR(tmp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005363 }
Victor Stinner74419f02020-07-03 11:35:37 +02005364 if (_PyObject_LookupAttr(obj, state->type_comment, &tmp) < 0) {
Guido van Rossumdcfcd142019-01-31 03:40:27 -08005365 return 1;
5366 }
5367 if (tmp == NULL || tmp == Py_None) {
5368 Py_CLEAR(tmp);
5369 type_comment = NULL;
5370 }
5371 else {
5372 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02005373 res = obj2ast_string(state, tmp, &type_comment, arena);
Guido van Rossumdcfcd142019-01-31 03:40:27 -08005374 if (res != 0) goto failed;
5375 Py_CLEAR(tmp);
5376 }
5377 *out = FunctionDef(name, args, body, decorator_list, returns,
5378 type_comment, lineno, col_offset, end_lineno,
5379 end_col_offset, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005380 if (*out == NULL) goto failed;
5381 return 0;
5382 }
Victor Stinner74419f02020-07-03 11:35:37 +02005383 tp = state->AsyncFunctionDef_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07005384 isinstance = PyObject_IsInstance(obj, tp);
Yury Selivanov75445082015-05-11 22:57:16 -04005385 if (isinstance == -1) {
5386 return 1;
5387 }
5388 if (isinstance) {
5389 identifier name;
5390 arguments_ty args;
Pablo Galindoa5634c42020-09-16 19:42:00 +01005391 asdl_stmt_seq* body;
5392 asdl_expr_seq* decorator_list;
Yury Selivanov75445082015-05-11 22:57:16 -04005393 expr_ty returns;
Guido van Rossumdcfcd142019-01-31 03:40:27 -08005394 string type_comment;
Yury Selivanov75445082015-05-11 22:57:16 -04005395
Victor Stinner74419f02020-07-03 11:35:37 +02005396 if (_PyObject_LookupAttr(obj, state->name, &tmp) < 0) {
Serhiy Storchakaf320be72018-01-25 10:49:40 +02005397 return 1;
5398 }
5399 if (tmp == NULL) {
5400 PyErr_SetString(PyExc_TypeError, "required field \"name\" missing from AsyncFunctionDef");
5401 return 1;
5402 }
5403 else {
Yury Selivanov75445082015-05-11 22:57:16 -04005404 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02005405 res = obj2ast_identifier(state, tmp, &name, arena);
Yury Selivanov75445082015-05-11 22:57:16 -04005406 if (res != 0) goto failed;
5407 Py_CLEAR(tmp);
Serhiy Storchakaf320be72018-01-25 10:49:40 +02005408 }
Victor Stinner74419f02020-07-03 11:35:37 +02005409 if (_PyObject_LookupAttr(obj, state->args, &tmp) < 0) {
Yury Selivanov75445082015-05-11 22:57:16 -04005410 return 1;
5411 }
Serhiy Storchakaf320be72018-01-25 10:49:40 +02005412 if (tmp == NULL) {
5413 PyErr_SetString(PyExc_TypeError, "required field \"args\" missing from AsyncFunctionDef");
5414 return 1;
5415 }
5416 else {
Yury Selivanov75445082015-05-11 22:57:16 -04005417 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02005418 res = obj2ast_arguments(state, tmp, &args, arena);
Yury Selivanov75445082015-05-11 22:57:16 -04005419 if (res != 0) goto failed;
5420 Py_CLEAR(tmp);
Serhiy Storchakaf320be72018-01-25 10:49:40 +02005421 }
Victor Stinner74419f02020-07-03 11:35:37 +02005422 if (_PyObject_LookupAttr(obj, state->body, &tmp) < 0) {
Yury Selivanov75445082015-05-11 22:57:16 -04005423 return 1;
5424 }
Serhiy Storchakaf320be72018-01-25 10:49:40 +02005425 if (tmp == NULL) {
5426 PyErr_SetString(PyExc_TypeError, "required field \"body\" missing from AsyncFunctionDef");
5427 return 1;
5428 }
5429 else {
Yury Selivanov75445082015-05-11 22:57:16 -04005430 int res;
5431 Py_ssize_t len;
5432 Py_ssize_t i;
Yury Selivanov75445082015-05-11 22:57:16 -04005433 if (!PyList_Check(tmp)) {
Dino Viehlandac46eb42019-09-11 10:16:34 -07005434 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 -04005435 goto failed;
5436 }
5437 len = PyList_GET_SIZE(tmp);
Pablo Galindoa5634c42020-09-16 19:42:00 +01005438 body = _Py_asdl_stmt_seq_new(len, arena);
Yury Selivanov75445082015-05-11 22:57:16 -04005439 if (body == NULL) goto failed;
5440 for (i = 0; i < len; i++) {
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07005441 stmt_ty val;
Serhiy Storchaka43c97312019-09-10 13:02:30 +03005442 PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
5443 Py_INCREF(tmp2);
Victor Stinner74419f02020-07-03 11:35:37 +02005444 res = obj2ast_stmt(state, tmp2, &val, arena);
Serhiy Storchaka43c97312019-09-10 13:02:30 +03005445 Py_DECREF(tmp2);
Yury Selivanov75445082015-05-11 22:57:16 -04005446 if (res != 0) goto failed;
Serhiy Storchakacf380602016-10-07 21:51:28 +03005447 if (len != PyList_GET_SIZE(tmp)) {
5448 PyErr_SetString(PyExc_RuntimeError, "AsyncFunctionDef field \"body\" changed size during iteration");
5449 goto failed;
5450 }
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07005451 asdl_seq_SET(body, i, val);
Yury Selivanov75445082015-05-11 22:57:16 -04005452 }
5453 Py_CLEAR(tmp);
Serhiy Storchakaf320be72018-01-25 10:49:40 +02005454 }
Victor Stinner74419f02020-07-03 11:35:37 +02005455 if (_PyObject_LookupAttr(obj, state->decorator_list, &tmp) < 0) {
Yury Selivanov75445082015-05-11 22:57:16 -04005456 return 1;
5457 }
Serhiy Storchakaf320be72018-01-25 10:49:40 +02005458 if (tmp == NULL) {
5459 PyErr_SetString(PyExc_TypeError, "required field \"decorator_list\" missing from AsyncFunctionDef");
5460 return 1;
5461 }
5462 else {
Yury Selivanov75445082015-05-11 22:57:16 -04005463 int res;
5464 Py_ssize_t len;
5465 Py_ssize_t i;
Yury Selivanov75445082015-05-11 22:57:16 -04005466 if (!PyList_Check(tmp)) {
Dino Viehlandac46eb42019-09-11 10:16:34 -07005467 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 -04005468 goto failed;
5469 }
5470 len = PyList_GET_SIZE(tmp);
Pablo Galindoa5634c42020-09-16 19:42:00 +01005471 decorator_list = _Py_asdl_expr_seq_new(len, arena);
Yury Selivanov75445082015-05-11 22:57:16 -04005472 if (decorator_list == NULL) goto failed;
5473 for (i = 0; i < len; i++) {
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07005474 expr_ty val;
Serhiy Storchaka43c97312019-09-10 13:02:30 +03005475 PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
5476 Py_INCREF(tmp2);
Victor Stinner74419f02020-07-03 11:35:37 +02005477 res = obj2ast_expr(state, tmp2, &val, arena);
Serhiy Storchaka43c97312019-09-10 13:02:30 +03005478 Py_DECREF(tmp2);
Yury Selivanov75445082015-05-11 22:57:16 -04005479 if (res != 0) goto failed;
Serhiy Storchakacf380602016-10-07 21:51:28 +03005480 if (len != PyList_GET_SIZE(tmp)) {
5481 PyErr_SetString(PyExc_RuntimeError, "AsyncFunctionDef field \"decorator_list\" changed size during iteration");
5482 goto failed;
5483 }
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07005484 asdl_seq_SET(decorator_list, i, val);
Yury Selivanov75445082015-05-11 22:57:16 -04005485 }
5486 Py_CLEAR(tmp);
Serhiy Storchakaf320be72018-01-25 10:49:40 +02005487 }
Victor Stinner74419f02020-07-03 11:35:37 +02005488 if (_PyObject_LookupAttr(obj, state->returns, &tmp) < 0) {
Yury Selivanov75445082015-05-11 22:57:16 -04005489 return 1;
5490 }
Serhiy Storchakaf320be72018-01-25 10:49:40 +02005491 if (tmp == NULL || tmp == Py_None) {
5492 Py_CLEAR(tmp);
5493 returns = NULL;
5494 }
5495 else {
Yury Selivanov75445082015-05-11 22:57:16 -04005496 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02005497 res = obj2ast_expr(state, tmp, &returns, arena);
Yury Selivanov75445082015-05-11 22:57:16 -04005498 if (res != 0) goto failed;
5499 Py_CLEAR(tmp);
Yury Selivanov75445082015-05-11 22:57:16 -04005500 }
Victor Stinner74419f02020-07-03 11:35:37 +02005501 if (_PyObject_LookupAttr(obj, state->type_comment, &tmp) < 0) {
Guido van Rossumdcfcd142019-01-31 03:40:27 -08005502 return 1;
5503 }
5504 if (tmp == NULL || tmp == Py_None) {
5505 Py_CLEAR(tmp);
5506 type_comment = NULL;
5507 }
5508 else {
5509 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02005510 res = obj2ast_string(state, tmp, &type_comment, arena);
Guido van Rossumdcfcd142019-01-31 03:40:27 -08005511 if (res != 0) goto failed;
5512 Py_CLEAR(tmp);
5513 }
Yury Selivanov75445082015-05-11 22:57:16 -04005514 *out = AsyncFunctionDef(name, args, body, decorator_list, returns,
Guido van Rossumdcfcd142019-01-31 03:40:27 -08005515 type_comment, lineno, col_offset, end_lineno,
5516 end_col_offset, arena);
Yury Selivanov75445082015-05-11 22:57:16 -04005517 if (*out == NULL) goto failed;
5518 return 0;
5519 }
Victor Stinner74419f02020-07-03 11:35:37 +02005520 tp = state->ClassDef_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07005521 isinstance = PyObject_IsInstance(obj, tp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005522 if (isinstance == -1) {
5523 return 1;
5524 }
5525 if (isinstance) {
5526 identifier name;
Pablo Galindoa5634c42020-09-16 19:42:00 +01005527 asdl_expr_seq* bases;
5528 asdl_keyword_seq* keywords;
5529 asdl_stmt_seq* body;
5530 asdl_expr_seq* decorator_list;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005531
Victor Stinner74419f02020-07-03 11:35:37 +02005532 if (_PyObject_LookupAttr(obj, state->name, &tmp) < 0) {
Serhiy Storchakaf320be72018-01-25 10:49:40 +02005533 return 1;
5534 }
5535 if (tmp == NULL) {
5536 PyErr_SetString(PyExc_TypeError, "required field \"name\" missing from ClassDef");
5537 return 1;
5538 }
5539 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005540 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02005541 res = obj2ast_identifier(state, tmp, &name, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005542 if (res != 0) goto failed;
Victor Stinner1acc1292013-07-27 00:03:47 +02005543 Py_CLEAR(tmp);
Serhiy Storchakaf320be72018-01-25 10:49:40 +02005544 }
Victor Stinner74419f02020-07-03 11:35:37 +02005545 if (_PyObject_LookupAttr(obj, state->bases, &tmp) < 0) {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005546 return 1;
5547 }
Serhiy Storchakaf320be72018-01-25 10:49:40 +02005548 if (tmp == NULL) {
5549 PyErr_SetString(PyExc_TypeError, "required field \"bases\" missing from ClassDef");
5550 return 1;
5551 }
5552 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005553 int res;
5554 Py_ssize_t len;
5555 Py_ssize_t i;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005556 if (!PyList_Check(tmp)) {
Dino Viehlandac46eb42019-09-11 10:16:34 -07005557 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 +02005558 goto failed;
5559 }
5560 len = PyList_GET_SIZE(tmp);
Pablo Galindoa5634c42020-09-16 19:42:00 +01005561 bases = _Py_asdl_expr_seq_new(len, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005562 if (bases == NULL) goto failed;
5563 for (i = 0; i < len; i++) {
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07005564 expr_ty val;
Serhiy Storchaka43c97312019-09-10 13:02:30 +03005565 PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
5566 Py_INCREF(tmp2);
Victor Stinner74419f02020-07-03 11:35:37 +02005567 res = obj2ast_expr(state, tmp2, &val, arena);
Serhiy Storchaka43c97312019-09-10 13:02:30 +03005568 Py_DECREF(tmp2);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005569 if (res != 0) goto failed;
Serhiy Storchakacf380602016-10-07 21:51:28 +03005570 if (len != PyList_GET_SIZE(tmp)) {
5571 PyErr_SetString(PyExc_RuntimeError, "ClassDef field \"bases\" changed size during iteration");
5572 goto failed;
5573 }
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07005574 asdl_seq_SET(bases, i, val);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005575 }
Victor Stinner1acc1292013-07-27 00:03:47 +02005576 Py_CLEAR(tmp);
Serhiy Storchakaf320be72018-01-25 10:49:40 +02005577 }
Victor Stinner74419f02020-07-03 11:35:37 +02005578 if (_PyObject_LookupAttr(obj, state->keywords, &tmp) < 0) {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005579 return 1;
5580 }
Serhiy Storchakaf320be72018-01-25 10:49:40 +02005581 if (tmp == NULL) {
5582 PyErr_SetString(PyExc_TypeError, "required field \"keywords\" missing from ClassDef");
5583 return 1;
5584 }
5585 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005586 int res;
5587 Py_ssize_t len;
5588 Py_ssize_t i;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005589 if (!PyList_Check(tmp)) {
Dino Viehlandac46eb42019-09-11 10:16:34 -07005590 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 +02005591 goto failed;
5592 }
5593 len = PyList_GET_SIZE(tmp);
Pablo Galindoa5634c42020-09-16 19:42:00 +01005594 keywords = _Py_asdl_keyword_seq_new(len, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005595 if (keywords == NULL) goto failed;
5596 for (i = 0; i < len; i++) {
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07005597 keyword_ty val;
Serhiy Storchaka43c97312019-09-10 13:02:30 +03005598 PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
5599 Py_INCREF(tmp2);
Victor Stinner74419f02020-07-03 11:35:37 +02005600 res = obj2ast_keyword(state, tmp2, &val, arena);
Serhiy Storchaka43c97312019-09-10 13:02:30 +03005601 Py_DECREF(tmp2);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005602 if (res != 0) goto failed;
Serhiy Storchakacf380602016-10-07 21:51:28 +03005603 if (len != PyList_GET_SIZE(tmp)) {
5604 PyErr_SetString(PyExc_RuntimeError, "ClassDef field \"keywords\" changed size during iteration");
5605 goto failed;
5606 }
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07005607 asdl_seq_SET(keywords, i, val);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005608 }
Victor Stinner1acc1292013-07-27 00:03:47 +02005609 Py_CLEAR(tmp);
Serhiy Storchakaf320be72018-01-25 10:49:40 +02005610 }
Victor Stinner74419f02020-07-03 11:35:37 +02005611 if (_PyObject_LookupAttr(obj, state->body, &tmp) < 0) {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005612 return 1;
5613 }
Serhiy Storchakaf320be72018-01-25 10:49:40 +02005614 if (tmp == NULL) {
5615 PyErr_SetString(PyExc_TypeError, "required field \"body\" missing from ClassDef");
5616 return 1;
5617 }
5618 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005619 int res;
5620 Py_ssize_t len;
5621 Py_ssize_t i;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005622 if (!PyList_Check(tmp)) {
Dino Viehlandac46eb42019-09-11 10:16:34 -07005623 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 +02005624 goto failed;
5625 }
5626 len = PyList_GET_SIZE(tmp);
Pablo Galindoa5634c42020-09-16 19:42:00 +01005627 body = _Py_asdl_stmt_seq_new(len, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005628 if (body == NULL) goto failed;
5629 for (i = 0; i < len; i++) {
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07005630 stmt_ty val;
Serhiy Storchaka43c97312019-09-10 13:02:30 +03005631 PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
5632 Py_INCREF(tmp2);
Victor Stinner74419f02020-07-03 11:35:37 +02005633 res = obj2ast_stmt(state, tmp2, &val, arena);
Serhiy Storchaka43c97312019-09-10 13:02:30 +03005634 Py_DECREF(tmp2);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005635 if (res != 0) goto failed;
Serhiy Storchakacf380602016-10-07 21:51:28 +03005636 if (len != PyList_GET_SIZE(tmp)) {
5637 PyErr_SetString(PyExc_RuntimeError, "ClassDef field \"body\" changed size during iteration");
5638 goto failed;
5639 }
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07005640 asdl_seq_SET(body, i, val);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005641 }
Victor Stinner1acc1292013-07-27 00:03:47 +02005642 Py_CLEAR(tmp);
Serhiy Storchakaf320be72018-01-25 10:49:40 +02005643 }
Victor Stinner74419f02020-07-03 11:35:37 +02005644 if (_PyObject_LookupAttr(obj, state->decorator_list, &tmp) < 0) {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005645 return 1;
5646 }
Serhiy Storchakaf320be72018-01-25 10:49:40 +02005647 if (tmp == NULL) {
5648 PyErr_SetString(PyExc_TypeError, "required field \"decorator_list\" missing from ClassDef");
5649 return 1;
5650 }
5651 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005652 int res;
5653 Py_ssize_t len;
5654 Py_ssize_t i;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005655 if (!PyList_Check(tmp)) {
Dino Viehlandac46eb42019-09-11 10:16:34 -07005656 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 +02005657 goto failed;
5658 }
5659 len = PyList_GET_SIZE(tmp);
Pablo Galindoa5634c42020-09-16 19:42:00 +01005660 decorator_list = _Py_asdl_expr_seq_new(len, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005661 if (decorator_list == NULL) goto failed;
5662 for (i = 0; i < len; i++) {
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07005663 expr_ty val;
Serhiy Storchaka43c97312019-09-10 13:02:30 +03005664 PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
5665 Py_INCREF(tmp2);
Victor Stinner74419f02020-07-03 11:35:37 +02005666 res = obj2ast_expr(state, tmp2, &val, arena);
Serhiy Storchaka43c97312019-09-10 13:02:30 +03005667 Py_DECREF(tmp2);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005668 if (res != 0) goto failed;
Serhiy Storchakacf380602016-10-07 21:51:28 +03005669 if (len != PyList_GET_SIZE(tmp)) {
5670 PyErr_SetString(PyExc_RuntimeError, "ClassDef field \"decorator_list\" changed size during iteration");
5671 goto failed;
5672 }
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07005673 asdl_seq_SET(decorator_list, i, val);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005674 }
Victor Stinner1acc1292013-07-27 00:03:47 +02005675 Py_CLEAR(tmp);
Serhiy Storchakaf320be72018-01-25 10:49:40 +02005676 }
Serhiy Storchaka73cbe7a2018-05-29 12:04:55 +03005677 *out = ClassDef(name, bases, keywords, body, decorator_list, lineno,
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00005678 col_offset, end_lineno, end_col_offset, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005679 if (*out == NULL) goto failed;
5680 return 0;
5681 }
Victor Stinner74419f02020-07-03 11:35:37 +02005682 tp = state->Return_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07005683 isinstance = PyObject_IsInstance(obj, tp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005684 if (isinstance == -1) {
5685 return 1;
5686 }
5687 if (isinstance) {
5688 expr_ty value;
5689
Victor Stinner74419f02020-07-03 11:35:37 +02005690 if (_PyObject_LookupAttr(obj, state->value, &tmp) < 0) {
Serhiy Storchakaf320be72018-01-25 10:49:40 +02005691 return 1;
5692 }
5693 if (tmp == NULL || tmp == Py_None) {
5694 Py_CLEAR(tmp);
5695 value = NULL;
5696 }
5697 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005698 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02005699 res = obj2ast_expr(state, tmp, &value, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005700 if (res != 0) goto failed;
Victor Stinner1acc1292013-07-27 00:03:47 +02005701 Py_CLEAR(tmp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005702 }
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00005703 *out = Return(value, lineno, col_offset, end_lineno, end_col_offset,
5704 arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005705 if (*out == NULL) goto failed;
5706 return 0;
5707 }
Victor Stinner74419f02020-07-03 11:35:37 +02005708 tp = state->Delete_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07005709 isinstance = PyObject_IsInstance(obj, tp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005710 if (isinstance == -1) {
5711 return 1;
5712 }
5713 if (isinstance) {
Pablo Galindoa5634c42020-09-16 19:42:00 +01005714 asdl_expr_seq* targets;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005715
Victor Stinner74419f02020-07-03 11:35:37 +02005716 if (_PyObject_LookupAttr(obj, state->targets, &tmp) < 0) {
Serhiy Storchakaf320be72018-01-25 10:49:40 +02005717 return 1;
5718 }
5719 if (tmp == NULL) {
5720 PyErr_SetString(PyExc_TypeError, "required field \"targets\" missing from Delete");
5721 return 1;
5722 }
5723 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005724 int res;
5725 Py_ssize_t len;
5726 Py_ssize_t i;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005727 if (!PyList_Check(tmp)) {
Dino Viehlandac46eb42019-09-11 10:16:34 -07005728 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 +02005729 goto failed;
5730 }
5731 len = PyList_GET_SIZE(tmp);
Pablo Galindoa5634c42020-09-16 19:42:00 +01005732 targets = _Py_asdl_expr_seq_new(len, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005733 if (targets == NULL) goto failed;
5734 for (i = 0; i < len; i++) {
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07005735 expr_ty val;
Serhiy Storchaka43c97312019-09-10 13:02:30 +03005736 PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
5737 Py_INCREF(tmp2);
Victor Stinner74419f02020-07-03 11:35:37 +02005738 res = obj2ast_expr(state, tmp2, &val, arena);
Serhiy Storchaka43c97312019-09-10 13:02:30 +03005739 Py_DECREF(tmp2);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005740 if (res != 0) goto failed;
Serhiy Storchakacf380602016-10-07 21:51:28 +03005741 if (len != PyList_GET_SIZE(tmp)) {
5742 PyErr_SetString(PyExc_RuntimeError, "Delete field \"targets\" changed size during iteration");
5743 goto failed;
5744 }
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07005745 asdl_seq_SET(targets, i, val);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005746 }
Victor Stinner1acc1292013-07-27 00:03:47 +02005747 Py_CLEAR(tmp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005748 }
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00005749 *out = Delete(targets, lineno, col_offset, end_lineno, end_col_offset,
5750 arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005751 if (*out == NULL) goto failed;
5752 return 0;
5753 }
Victor Stinner74419f02020-07-03 11:35:37 +02005754 tp = state->Assign_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07005755 isinstance = PyObject_IsInstance(obj, tp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005756 if (isinstance == -1) {
5757 return 1;
5758 }
5759 if (isinstance) {
Pablo Galindoa5634c42020-09-16 19:42:00 +01005760 asdl_expr_seq* targets;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005761 expr_ty value;
Guido van Rossumdcfcd142019-01-31 03:40:27 -08005762 string type_comment;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005763
Victor Stinner74419f02020-07-03 11:35:37 +02005764 if (_PyObject_LookupAttr(obj, state->targets, &tmp) < 0) {
Serhiy Storchakaf320be72018-01-25 10:49:40 +02005765 return 1;
5766 }
5767 if (tmp == NULL) {
5768 PyErr_SetString(PyExc_TypeError, "required field \"targets\" missing from Assign");
5769 return 1;
5770 }
5771 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005772 int res;
5773 Py_ssize_t len;
5774 Py_ssize_t i;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005775 if (!PyList_Check(tmp)) {
Dino Viehlandac46eb42019-09-11 10:16:34 -07005776 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 +02005777 goto failed;
5778 }
5779 len = PyList_GET_SIZE(tmp);
Pablo Galindoa5634c42020-09-16 19:42:00 +01005780 targets = _Py_asdl_expr_seq_new(len, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005781 if (targets == NULL) goto failed;
5782 for (i = 0; i < len; i++) {
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07005783 expr_ty val;
Serhiy Storchaka43c97312019-09-10 13:02:30 +03005784 PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
5785 Py_INCREF(tmp2);
Victor Stinner74419f02020-07-03 11:35:37 +02005786 res = obj2ast_expr(state, tmp2, &val, arena);
Serhiy Storchaka43c97312019-09-10 13:02:30 +03005787 Py_DECREF(tmp2);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005788 if (res != 0) goto failed;
Serhiy Storchakacf380602016-10-07 21:51:28 +03005789 if (len != PyList_GET_SIZE(tmp)) {
5790 PyErr_SetString(PyExc_RuntimeError, "Assign field \"targets\" changed size during iteration");
5791 goto failed;
5792 }
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07005793 asdl_seq_SET(targets, i, val);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005794 }
Victor Stinner1acc1292013-07-27 00:03:47 +02005795 Py_CLEAR(tmp);
Serhiy Storchakaf320be72018-01-25 10:49:40 +02005796 }
Victor Stinner74419f02020-07-03 11:35:37 +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 Assign");
5802 return 1;
5803 }
5804 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005805 int res;
Victor Stinner74419f02020-07-03 11:35:37 +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 }
Victor Stinner74419f02020-07-03 11:35:37 +02005810 if (_PyObject_LookupAttr(obj, state->type_comment, &tmp) < 0) {
Guido van Rossumdcfcd142019-01-31 03:40:27 -08005811 return 1;
5812 }
5813 if (tmp == NULL || tmp == Py_None) {
5814 Py_CLEAR(tmp);
5815 type_comment = NULL;
5816 }
5817 else {
5818 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02005819 res = obj2ast_string(state, tmp, &type_comment, arena);
Guido van Rossumdcfcd142019-01-31 03:40:27 -08005820 if (res != 0) goto failed;
5821 Py_CLEAR(tmp);
5822 }
5823 *out = Assign(targets, value, type_comment, lineno, col_offset,
5824 end_lineno, end_col_offset, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005825 if (*out == NULL) goto failed;
5826 return 0;
5827 }
Victor Stinner74419f02020-07-03 11:35:37 +02005828 tp = state->AugAssign_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07005829 isinstance = PyObject_IsInstance(obj, tp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005830 if (isinstance == -1) {
5831 return 1;
5832 }
5833 if (isinstance) {
5834 expr_ty target;
5835 operator_ty op;
5836 expr_ty value;
5837
Victor Stinner74419f02020-07-03 11:35:37 +02005838 if (_PyObject_LookupAttr(obj, state->target, &tmp) < 0) {
Serhiy Storchakaf320be72018-01-25 10:49:40 +02005839 return 1;
5840 }
5841 if (tmp == NULL) {
5842 PyErr_SetString(PyExc_TypeError, "required field \"target\" missing from AugAssign");
5843 return 1;
5844 }
5845 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005846 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02005847 res = obj2ast_expr(state, tmp, &target, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005848 if (res != 0) goto failed;
Victor Stinner1acc1292013-07-27 00:03:47 +02005849 Py_CLEAR(tmp);
Serhiy Storchakaf320be72018-01-25 10:49:40 +02005850 }
Victor Stinner74419f02020-07-03 11:35:37 +02005851 if (_PyObject_LookupAttr(obj, state->op, &tmp) < 0) {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005852 return 1;
5853 }
Serhiy Storchakaf320be72018-01-25 10:49:40 +02005854 if (tmp == NULL) {
5855 PyErr_SetString(PyExc_TypeError, "required field \"op\" missing from AugAssign");
5856 return 1;
5857 }
5858 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005859 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02005860 res = obj2ast_operator(state, tmp, &op, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005861 if (res != 0) goto failed;
Victor Stinner1acc1292013-07-27 00:03:47 +02005862 Py_CLEAR(tmp);
Serhiy Storchakaf320be72018-01-25 10:49:40 +02005863 }
Victor Stinner74419f02020-07-03 11:35:37 +02005864 if (_PyObject_LookupAttr(obj, state->value, &tmp) < 0) {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005865 return 1;
5866 }
Serhiy Storchakaf320be72018-01-25 10:49:40 +02005867 if (tmp == NULL) {
5868 PyErr_SetString(PyExc_TypeError, "required field \"value\" missing from AugAssign");
5869 return 1;
5870 }
5871 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005872 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02005873 res = obj2ast_expr(state, tmp, &value, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005874 if (res != 0) goto failed;
Victor Stinner1acc1292013-07-27 00:03:47 +02005875 Py_CLEAR(tmp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005876 }
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00005877 *out = AugAssign(target, op, value, lineno, col_offset, end_lineno,
5878 end_col_offset, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005879 if (*out == NULL) goto failed;
5880 return 0;
5881 }
Victor Stinner74419f02020-07-03 11:35:37 +02005882 tp = state->AnnAssign_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07005883 isinstance = PyObject_IsInstance(obj, tp);
Yury Selivanovf8cb8a12016-09-08 20:50:03 -07005884 if (isinstance == -1) {
5885 return 1;
5886 }
5887 if (isinstance) {
5888 expr_ty target;
5889 expr_ty annotation;
5890 expr_ty value;
5891 int simple;
5892
Victor Stinner74419f02020-07-03 11:35:37 +02005893 if (_PyObject_LookupAttr(obj, state->target, &tmp) < 0) {
Serhiy Storchakaf320be72018-01-25 10:49:40 +02005894 return 1;
5895 }
5896 if (tmp == NULL) {
5897 PyErr_SetString(PyExc_TypeError, "required field \"target\" missing from AnnAssign");
5898 return 1;
5899 }
5900 else {
Yury Selivanovf8cb8a12016-09-08 20:50:03 -07005901 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02005902 res = obj2ast_expr(state, tmp, &target, arena);
Yury Selivanovf8cb8a12016-09-08 20:50:03 -07005903 if (res != 0) goto failed;
5904 Py_CLEAR(tmp);
Serhiy Storchakaf320be72018-01-25 10:49:40 +02005905 }
Victor Stinner74419f02020-07-03 11:35:37 +02005906 if (_PyObject_LookupAttr(obj, state->annotation, &tmp) < 0) {
Yury Selivanovf8cb8a12016-09-08 20:50:03 -07005907 return 1;
5908 }
Serhiy Storchakaf320be72018-01-25 10:49:40 +02005909 if (tmp == NULL) {
5910 PyErr_SetString(PyExc_TypeError, "required field \"annotation\" missing from AnnAssign");
5911 return 1;
5912 }
5913 else {
Yury Selivanovf8cb8a12016-09-08 20:50:03 -07005914 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02005915 res = obj2ast_expr(state, tmp, &annotation, arena);
Yury Selivanovf8cb8a12016-09-08 20:50:03 -07005916 if (res != 0) goto failed;
5917 Py_CLEAR(tmp);
Serhiy Storchakaf320be72018-01-25 10:49:40 +02005918 }
Victor Stinner74419f02020-07-03 11:35:37 +02005919 if (_PyObject_LookupAttr(obj, state->value, &tmp) < 0) {
Yury Selivanovf8cb8a12016-09-08 20:50:03 -07005920 return 1;
5921 }
Serhiy Storchakaf320be72018-01-25 10:49:40 +02005922 if (tmp == NULL || tmp == Py_None) {
5923 Py_CLEAR(tmp);
5924 value = NULL;
5925 }
5926 else {
Yury Selivanovf8cb8a12016-09-08 20:50:03 -07005927 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02005928 res = obj2ast_expr(state, tmp, &value, arena);
Yury Selivanovf8cb8a12016-09-08 20:50:03 -07005929 if (res != 0) goto failed;
5930 Py_CLEAR(tmp);
Yury Selivanovf8cb8a12016-09-08 20:50:03 -07005931 }
Victor Stinner74419f02020-07-03 11:35:37 +02005932 if (_PyObject_LookupAttr(obj, state->simple, &tmp) < 0) {
Serhiy Storchakaf320be72018-01-25 10:49:40 +02005933 return 1;
5934 }
5935 if (tmp == NULL) {
5936 PyErr_SetString(PyExc_TypeError, "required field \"simple\" missing from AnnAssign");
5937 return 1;
5938 }
5939 else {
Yury Selivanovf8cb8a12016-09-08 20:50:03 -07005940 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02005941 res = obj2ast_int(state, tmp, &simple, arena);
Yury Selivanovf8cb8a12016-09-08 20:50:03 -07005942 if (res != 0) goto failed;
5943 Py_CLEAR(tmp);
Yury Selivanovf8cb8a12016-09-08 20:50:03 -07005944 }
5945 *out = AnnAssign(target, annotation, value, simple, lineno, col_offset,
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00005946 end_lineno, end_col_offset, arena);
Yury Selivanovf8cb8a12016-09-08 20:50:03 -07005947 if (*out == NULL) goto failed;
5948 return 0;
5949 }
Victor Stinner74419f02020-07-03 11:35:37 +02005950 tp = state->For_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07005951 isinstance = PyObject_IsInstance(obj, tp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005952 if (isinstance == -1) {
5953 return 1;
5954 }
5955 if (isinstance) {
5956 expr_ty target;
5957 expr_ty iter;
Pablo Galindoa5634c42020-09-16 19:42:00 +01005958 asdl_stmt_seq* body;
5959 asdl_stmt_seq* orelse;
Guido van Rossumdcfcd142019-01-31 03:40:27 -08005960 string type_comment;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005961
Victor Stinner74419f02020-07-03 11:35:37 +02005962 if (_PyObject_LookupAttr(obj, state->target, &tmp) < 0) {
Serhiy Storchakaf320be72018-01-25 10:49:40 +02005963 return 1;
5964 }
5965 if (tmp == NULL) {
5966 PyErr_SetString(PyExc_TypeError, "required field \"target\" missing from For");
5967 return 1;
5968 }
5969 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005970 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02005971 res = obj2ast_expr(state, tmp, &target, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005972 if (res != 0) goto failed;
Victor Stinner1acc1292013-07-27 00:03:47 +02005973 Py_CLEAR(tmp);
Serhiy Storchakaf320be72018-01-25 10:49:40 +02005974 }
Victor Stinner74419f02020-07-03 11:35:37 +02005975 if (_PyObject_LookupAttr(obj, state->iter, &tmp) < 0) {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005976 return 1;
5977 }
Serhiy Storchakaf320be72018-01-25 10:49:40 +02005978 if (tmp == NULL) {
5979 PyErr_SetString(PyExc_TypeError, "required field \"iter\" missing from For");
5980 return 1;
5981 }
5982 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005983 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02005984 res = obj2ast_expr(state, tmp, &iter, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005985 if (res != 0) goto failed;
Victor Stinner1acc1292013-07-27 00:03:47 +02005986 Py_CLEAR(tmp);
Serhiy Storchakaf320be72018-01-25 10:49:40 +02005987 }
Victor Stinner74419f02020-07-03 11:35:37 +02005988 if (_PyObject_LookupAttr(obj, state->body, &tmp) < 0) {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005989 return 1;
5990 }
Serhiy Storchakaf320be72018-01-25 10:49:40 +02005991 if (tmp == NULL) {
5992 PyErr_SetString(PyExc_TypeError, "required field \"body\" missing from For");
5993 return 1;
5994 }
5995 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005996 int res;
5997 Py_ssize_t len;
5998 Py_ssize_t i;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02005999 if (!PyList_Check(tmp)) {
Dino Viehlandac46eb42019-09-11 10:16:34 -07006000 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 +02006001 goto failed;
6002 }
6003 len = PyList_GET_SIZE(tmp);
Pablo Galindoa5634c42020-09-16 19:42:00 +01006004 body = _Py_asdl_stmt_seq_new(len, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006005 if (body == NULL) goto failed;
6006 for (i = 0; i < len; i++) {
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07006007 stmt_ty val;
Serhiy Storchaka43c97312019-09-10 13:02:30 +03006008 PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
6009 Py_INCREF(tmp2);
Victor Stinner74419f02020-07-03 11:35:37 +02006010 res = obj2ast_stmt(state, tmp2, &val, arena);
Serhiy Storchaka43c97312019-09-10 13:02:30 +03006011 Py_DECREF(tmp2);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006012 if (res != 0) goto failed;
Serhiy Storchakacf380602016-10-07 21:51:28 +03006013 if (len != PyList_GET_SIZE(tmp)) {
6014 PyErr_SetString(PyExc_RuntimeError, "For field \"body\" changed size during iteration");
6015 goto failed;
6016 }
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07006017 asdl_seq_SET(body, i, val);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006018 }
Victor Stinner1acc1292013-07-27 00:03:47 +02006019 Py_CLEAR(tmp);
Serhiy Storchakaf320be72018-01-25 10:49:40 +02006020 }
Victor Stinner74419f02020-07-03 11:35:37 +02006021 if (_PyObject_LookupAttr(obj, state->orelse, &tmp) < 0) {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006022 return 1;
6023 }
Serhiy Storchakaf320be72018-01-25 10:49:40 +02006024 if (tmp == NULL) {
6025 PyErr_SetString(PyExc_TypeError, "required field \"orelse\" missing from For");
6026 return 1;
6027 }
6028 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006029 int res;
6030 Py_ssize_t len;
6031 Py_ssize_t i;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006032 if (!PyList_Check(tmp)) {
Dino Viehlandac46eb42019-09-11 10:16:34 -07006033 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 +02006034 goto failed;
6035 }
6036 len = PyList_GET_SIZE(tmp);
Pablo Galindoa5634c42020-09-16 19:42:00 +01006037 orelse = _Py_asdl_stmt_seq_new(len, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006038 if (orelse == NULL) goto failed;
6039 for (i = 0; i < len; i++) {
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07006040 stmt_ty val;
Serhiy Storchaka43c97312019-09-10 13:02:30 +03006041 PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
6042 Py_INCREF(tmp2);
Victor Stinner74419f02020-07-03 11:35:37 +02006043 res = obj2ast_stmt(state, tmp2, &val, arena);
Serhiy Storchaka43c97312019-09-10 13:02:30 +03006044 Py_DECREF(tmp2);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006045 if (res != 0) goto failed;
Serhiy Storchakacf380602016-10-07 21:51:28 +03006046 if (len != PyList_GET_SIZE(tmp)) {
6047 PyErr_SetString(PyExc_RuntimeError, "For field \"orelse\" changed size during iteration");
6048 goto failed;
6049 }
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07006050 asdl_seq_SET(orelse, i, val);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006051 }
Victor Stinner1acc1292013-07-27 00:03:47 +02006052 Py_CLEAR(tmp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006053 }
Victor Stinner74419f02020-07-03 11:35:37 +02006054 if (_PyObject_LookupAttr(obj, state->type_comment, &tmp) < 0) {
Guido van Rossumdcfcd142019-01-31 03:40:27 -08006055 return 1;
6056 }
6057 if (tmp == NULL || tmp == Py_None) {
6058 Py_CLEAR(tmp);
6059 type_comment = NULL;
6060 }
6061 else {
6062 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02006063 res = obj2ast_string(state, tmp, &type_comment, arena);
Guido van Rossumdcfcd142019-01-31 03:40:27 -08006064 if (res != 0) goto failed;
6065 Py_CLEAR(tmp);
6066 }
6067 *out = For(target, iter, body, orelse, type_comment, lineno,
6068 col_offset, end_lineno, end_col_offset, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006069 if (*out == NULL) goto failed;
6070 return 0;
6071 }
Victor Stinner74419f02020-07-03 11:35:37 +02006072 tp = state->AsyncFor_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07006073 isinstance = PyObject_IsInstance(obj, tp);
Yury Selivanov75445082015-05-11 22:57:16 -04006074 if (isinstance == -1) {
6075 return 1;
6076 }
6077 if (isinstance) {
6078 expr_ty target;
6079 expr_ty iter;
Pablo Galindoa5634c42020-09-16 19:42:00 +01006080 asdl_stmt_seq* body;
6081 asdl_stmt_seq* orelse;
Guido van Rossumdcfcd142019-01-31 03:40:27 -08006082 string type_comment;
Yury Selivanov75445082015-05-11 22:57:16 -04006083
Victor Stinner74419f02020-07-03 11:35:37 +02006084 if (_PyObject_LookupAttr(obj, state->target, &tmp) < 0) {
Serhiy Storchakaf320be72018-01-25 10:49:40 +02006085 return 1;
6086 }
6087 if (tmp == NULL) {
6088 PyErr_SetString(PyExc_TypeError, "required field \"target\" missing from AsyncFor");
6089 return 1;
6090 }
6091 else {
Yury Selivanov75445082015-05-11 22:57:16 -04006092 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02006093 res = obj2ast_expr(state, tmp, &target, arena);
Yury Selivanov75445082015-05-11 22:57:16 -04006094 if (res != 0) goto failed;
6095 Py_CLEAR(tmp);
Serhiy Storchakaf320be72018-01-25 10:49:40 +02006096 }
Victor Stinner74419f02020-07-03 11:35:37 +02006097 if (_PyObject_LookupAttr(obj, state->iter, &tmp) < 0) {
Yury Selivanov75445082015-05-11 22:57:16 -04006098 return 1;
6099 }
Serhiy Storchakaf320be72018-01-25 10:49:40 +02006100 if (tmp == NULL) {
6101 PyErr_SetString(PyExc_TypeError, "required field \"iter\" missing from AsyncFor");
6102 return 1;
6103 }
6104 else {
Yury Selivanov75445082015-05-11 22:57:16 -04006105 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02006106 res = obj2ast_expr(state, tmp, &iter, arena);
Yury Selivanov75445082015-05-11 22:57:16 -04006107 if (res != 0) goto failed;
6108 Py_CLEAR(tmp);
Serhiy Storchakaf320be72018-01-25 10:49:40 +02006109 }
Victor Stinner74419f02020-07-03 11:35:37 +02006110 if (_PyObject_LookupAttr(obj, state->body, &tmp) < 0) {
Yury Selivanov75445082015-05-11 22:57:16 -04006111 return 1;
6112 }
Serhiy Storchakaf320be72018-01-25 10:49:40 +02006113 if (tmp == NULL) {
6114 PyErr_SetString(PyExc_TypeError, "required field \"body\" missing from AsyncFor");
6115 return 1;
6116 }
6117 else {
Yury Selivanov75445082015-05-11 22:57:16 -04006118 int res;
6119 Py_ssize_t len;
6120 Py_ssize_t i;
Yury Selivanov75445082015-05-11 22:57:16 -04006121 if (!PyList_Check(tmp)) {
Dino Viehlandac46eb42019-09-11 10:16:34 -07006122 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 -04006123 goto failed;
6124 }
6125 len = PyList_GET_SIZE(tmp);
Pablo Galindoa5634c42020-09-16 19:42:00 +01006126 body = _Py_asdl_stmt_seq_new(len, arena);
Yury Selivanov75445082015-05-11 22:57:16 -04006127 if (body == NULL) goto failed;
6128 for (i = 0; i < len; i++) {
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07006129 stmt_ty val;
Serhiy Storchaka43c97312019-09-10 13:02:30 +03006130 PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
6131 Py_INCREF(tmp2);
Victor Stinner74419f02020-07-03 11:35:37 +02006132 res = obj2ast_stmt(state, tmp2, &val, arena);
Serhiy Storchaka43c97312019-09-10 13:02:30 +03006133 Py_DECREF(tmp2);
Yury Selivanov75445082015-05-11 22:57:16 -04006134 if (res != 0) goto failed;
Serhiy Storchakacf380602016-10-07 21:51:28 +03006135 if (len != PyList_GET_SIZE(tmp)) {
6136 PyErr_SetString(PyExc_RuntimeError, "AsyncFor field \"body\" changed size during iteration");
6137 goto failed;
6138 }
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07006139 asdl_seq_SET(body, i, val);
Yury Selivanov75445082015-05-11 22:57:16 -04006140 }
6141 Py_CLEAR(tmp);
Serhiy Storchakaf320be72018-01-25 10:49:40 +02006142 }
Victor Stinner74419f02020-07-03 11:35:37 +02006143 if (_PyObject_LookupAttr(obj, state->orelse, &tmp) < 0) {
Yury Selivanov75445082015-05-11 22:57:16 -04006144 return 1;
6145 }
Serhiy Storchakaf320be72018-01-25 10:49:40 +02006146 if (tmp == NULL) {
6147 PyErr_SetString(PyExc_TypeError, "required field \"orelse\" missing from AsyncFor");
6148 return 1;
6149 }
6150 else {
Yury Selivanov75445082015-05-11 22:57:16 -04006151 int res;
6152 Py_ssize_t len;
6153 Py_ssize_t i;
Yury Selivanov75445082015-05-11 22:57:16 -04006154 if (!PyList_Check(tmp)) {
Dino Viehlandac46eb42019-09-11 10:16:34 -07006155 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 -04006156 goto failed;
6157 }
6158 len = PyList_GET_SIZE(tmp);
Pablo Galindoa5634c42020-09-16 19:42:00 +01006159 orelse = _Py_asdl_stmt_seq_new(len, arena);
Yury Selivanov75445082015-05-11 22:57:16 -04006160 if (orelse == NULL) goto failed;
6161 for (i = 0; i < len; i++) {
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07006162 stmt_ty val;
Serhiy Storchaka43c97312019-09-10 13:02:30 +03006163 PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
6164 Py_INCREF(tmp2);
Victor Stinner74419f02020-07-03 11:35:37 +02006165 res = obj2ast_stmt(state, tmp2, &val, arena);
Serhiy Storchaka43c97312019-09-10 13:02:30 +03006166 Py_DECREF(tmp2);
Yury Selivanov75445082015-05-11 22:57:16 -04006167 if (res != 0) goto failed;
Serhiy Storchakacf380602016-10-07 21:51:28 +03006168 if (len != PyList_GET_SIZE(tmp)) {
6169 PyErr_SetString(PyExc_RuntimeError, "AsyncFor field \"orelse\" changed size during iteration");
6170 goto failed;
6171 }
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07006172 asdl_seq_SET(orelse, i, val);
Yury Selivanov75445082015-05-11 22:57:16 -04006173 }
6174 Py_CLEAR(tmp);
Yury Selivanov75445082015-05-11 22:57:16 -04006175 }
Victor Stinner74419f02020-07-03 11:35:37 +02006176 if (_PyObject_LookupAttr(obj, state->type_comment, &tmp) < 0) {
Guido van Rossumdcfcd142019-01-31 03:40:27 -08006177 return 1;
6178 }
6179 if (tmp == NULL || tmp == Py_None) {
6180 Py_CLEAR(tmp);
6181 type_comment = NULL;
6182 }
6183 else {
6184 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02006185 res = obj2ast_string(state, tmp, &type_comment, arena);
Guido van Rossumdcfcd142019-01-31 03:40:27 -08006186 if (res != 0) goto failed;
6187 Py_CLEAR(tmp);
6188 }
6189 *out = AsyncFor(target, iter, body, orelse, type_comment, lineno,
6190 col_offset, end_lineno, end_col_offset, arena);
Yury Selivanov75445082015-05-11 22:57:16 -04006191 if (*out == NULL) goto failed;
6192 return 0;
6193 }
Victor Stinner74419f02020-07-03 11:35:37 +02006194 tp = state->While_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07006195 isinstance = PyObject_IsInstance(obj, tp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006196 if (isinstance == -1) {
6197 return 1;
6198 }
6199 if (isinstance) {
6200 expr_ty test;
Pablo Galindoa5634c42020-09-16 19:42:00 +01006201 asdl_stmt_seq* body;
6202 asdl_stmt_seq* orelse;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006203
Victor Stinner74419f02020-07-03 11:35:37 +02006204 if (_PyObject_LookupAttr(obj, state->test, &tmp) < 0) {
Serhiy Storchakaf320be72018-01-25 10:49:40 +02006205 return 1;
6206 }
6207 if (tmp == NULL) {
6208 PyErr_SetString(PyExc_TypeError, "required field \"test\" missing from While");
6209 return 1;
6210 }
6211 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006212 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02006213 res = obj2ast_expr(state, tmp, &test, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006214 if (res != 0) goto failed;
Victor Stinner1acc1292013-07-27 00:03:47 +02006215 Py_CLEAR(tmp);
Serhiy Storchakaf320be72018-01-25 10:49:40 +02006216 }
Victor Stinner74419f02020-07-03 11:35:37 +02006217 if (_PyObject_LookupAttr(obj, state->body, &tmp) < 0) {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006218 return 1;
6219 }
Serhiy Storchakaf320be72018-01-25 10:49:40 +02006220 if (tmp == NULL) {
6221 PyErr_SetString(PyExc_TypeError, "required field \"body\" missing from While");
6222 return 1;
6223 }
6224 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006225 int res;
6226 Py_ssize_t len;
6227 Py_ssize_t i;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006228 if (!PyList_Check(tmp)) {
Dino Viehlandac46eb42019-09-11 10:16:34 -07006229 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 +02006230 goto failed;
6231 }
6232 len = PyList_GET_SIZE(tmp);
Pablo Galindoa5634c42020-09-16 19:42:00 +01006233 body = _Py_asdl_stmt_seq_new(len, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006234 if (body == NULL) goto failed;
6235 for (i = 0; i < len; i++) {
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07006236 stmt_ty val;
Serhiy Storchaka43c97312019-09-10 13:02:30 +03006237 PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
6238 Py_INCREF(tmp2);
Victor Stinner74419f02020-07-03 11:35:37 +02006239 res = obj2ast_stmt(state, tmp2, &val, arena);
Serhiy Storchaka43c97312019-09-10 13:02:30 +03006240 Py_DECREF(tmp2);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006241 if (res != 0) goto failed;
Serhiy Storchakacf380602016-10-07 21:51:28 +03006242 if (len != PyList_GET_SIZE(tmp)) {
6243 PyErr_SetString(PyExc_RuntimeError, "While field \"body\" changed size during iteration");
6244 goto failed;
6245 }
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07006246 asdl_seq_SET(body, i, val);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006247 }
Victor Stinner1acc1292013-07-27 00:03:47 +02006248 Py_CLEAR(tmp);
Serhiy Storchakaf320be72018-01-25 10:49:40 +02006249 }
Victor Stinner74419f02020-07-03 11:35:37 +02006250 if (_PyObject_LookupAttr(obj, state->orelse, &tmp) < 0) {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006251 return 1;
6252 }
Serhiy Storchakaf320be72018-01-25 10:49:40 +02006253 if (tmp == NULL) {
6254 PyErr_SetString(PyExc_TypeError, "required field \"orelse\" missing from While");
6255 return 1;
6256 }
6257 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006258 int res;
6259 Py_ssize_t len;
6260 Py_ssize_t i;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006261 if (!PyList_Check(tmp)) {
Dino Viehlandac46eb42019-09-11 10:16:34 -07006262 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 +02006263 goto failed;
6264 }
6265 len = PyList_GET_SIZE(tmp);
Pablo Galindoa5634c42020-09-16 19:42:00 +01006266 orelse = _Py_asdl_stmt_seq_new(len, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006267 if (orelse == NULL) goto failed;
6268 for (i = 0; i < len; i++) {
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07006269 stmt_ty val;
Serhiy Storchaka43c97312019-09-10 13:02:30 +03006270 PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
6271 Py_INCREF(tmp2);
Victor Stinner74419f02020-07-03 11:35:37 +02006272 res = obj2ast_stmt(state, tmp2, &val, arena);
Serhiy Storchaka43c97312019-09-10 13:02:30 +03006273 Py_DECREF(tmp2);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006274 if (res != 0) goto failed;
Serhiy Storchakacf380602016-10-07 21:51:28 +03006275 if (len != PyList_GET_SIZE(tmp)) {
6276 PyErr_SetString(PyExc_RuntimeError, "While field \"orelse\" changed size during iteration");
6277 goto failed;
6278 }
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07006279 asdl_seq_SET(orelse, i, val);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006280 }
Victor Stinner1acc1292013-07-27 00:03:47 +02006281 Py_CLEAR(tmp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006282 }
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00006283 *out = While(test, body, orelse, lineno, col_offset, end_lineno,
6284 end_col_offset, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006285 if (*out == NULL) goto failed;
6286 return 0;
6287 }
Victor Stinner74419f02020-07-03 11:35:37 +02006288 tp = state->If_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07006289 isinstance = PyObject_IsInstance(obj, tp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006290 if (isinstance == -1) {
6291 return 1;
6292 }
6293 if (isinstance) {
6294 expr_ty test;
Pablo Galindoa5634c42020-09-16 19:42:00 +01006295 asdl_stmt_seq* body;
6296 asdl_stmt_seq* orelse;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006297
Victor Stinner74419f02020-07-03 11:35:37 +02006298 if (_PyObject_LookupAttr(obj, state->test, &tmp) < 0) {
Serhiy Storchakaf320be72018-01-25 10:49:40 +02006299 return 1;
6300 }
6301 if (tmp == NULL) {
6302 PyErr_SetString(PyExc_TypeError, "required field \"test\" missing from If");
6303 return 1;
6304 }
6305 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006306 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02006307 res = obj2ast_expr(state, tmp, &test, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006308 if (res != 0) goto failed;
Victor Stinner1acc1292013-07-27 00:03:47 +02006309 Py_CLEAR(tmp);
Serhiy Storchakaf320be72018-01-25 10:49:40 +02006310 }
Victor Stinner74419f02020-07-03 11:35:37 +02006311 if (_PyObject_LookupAttr(obj, state->body, &tmp) < 0) {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006312 return 1;
6313 }
Serhiy Storchakaf320be72018-01-25 10:49:40 +02006314 if (tmp == NULL) {
6315 PyErr_SetString(PyExc_TypeError, "required field \"body\" missing from If");
6316 return 1;
6317 }
6318 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006319 int res;
6320 Py_ssize_t len;
6321 Py_ssize_t i;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006322 if (!PyList_Check(tmp)) {
Dino Viehlandac46eb42019-09-11 10:16:34 -07006323 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 +02006324 goto failed;
6325 }
6326 len = PyList_GET_SIZE(tmp);
Pablo Galindoa5634c42020-09-16 19:42:00 +01006327 body = _Py_asdl_stmt_seq_new(len, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006328 if (body == NULL) goto failed;
6329 for (i = 0; i < len; i++) {
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07006330 stmt_ty val;
Serhiy Storchaka43c97312019-09-10 13:02:30 +03006331 PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
6332 Py_INCREF(tmp2);
Victor Stinner74419f02020-07-03 11:35:37 +02006333 res = obj2ast_stmt(state, tmp2, &val, arena);
Serhiy Storchaka43c97312019-09-10 13:02:30 +03006334 Py_DECREF(tmp2);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006335 if (res != 0) goto failed;
Serhiy Storchakacf380602016-10-07 21:51:28 +03006336 if (len != PyList_GET_SIZE(tmp)) {
6337 PyErr_SetString(PyExc_RuntimeError, "If field \"body\" changed size during iteration");
6338 goto failed;
6339 }
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07006340 asdl_seq_SET(body, i, val);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006341 }
Victor Stinner1acc1292013-07-27 00:03:47 +02006342 Py_CLEAR(tmp);
Serhiy Storchakaf320be72018-01-25 10:49:40 +02006343 }
Victor Stinner74419f02020-07-03 11:35:37 +02006344 if (_PyObject_LookupAttr(obj, state->orelse, &tmp) < 0) {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006345 return 1;
6346 }
Serhiy Storchakaf320be72018-01-25 10:49:40 +02006347 if (tmp == NULL) {
6348 PyErr_SetString(PyExc_TypeError, "required field \"orelse\" missing from If");
6349 return 1;
6350 }
6351 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006352 int res;
6353 Py_ssize_t len;
6354 Py_ssize_t i;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006355 if (!PyList_Check(tmp)) {
Dino Viehlandac46eb42019-09-11 10:16:34 -07006356 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 +02006357 goto failed;
6358 }
6359 len = PyList_GET_SIZE(tmp);
Pablo Galindoa5634c42020-09-16 19:42:00 +01006360 orelse = _Py_asdl_stmt_seq_new(len, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006361 if (orelse == NULL) goto failed;
6362 for (i = 0; i < len; i++) {
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07006363 stmt_ty val;
Serhiy Storchaka43c97312019-09-10 13:02:30 +03006364 PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
6365 Py_INCREF(tmp2);
Victor Stinner74419f02020-07-03 11:35:37 +02006366 res = obj2ast_stmt(state, tmp2, &val, arena);
Serhiy Storchaka43c97312019-09-10 13:02:30 +03006367 Py_DECREF(tmp2);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006368 if (res != 0) goto failed;
Serhiy Storchakacf380602016-10-07 21:51:28 +03006369 if (len != PyList_GET_SIZE(tmp)) {
6370 PyErr_SetString(PyExc_RuntimeError, "If field \"orelse\" changed size during iteration");
6371 goto failed;
6372 }
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07006373 asdl_seq_SET(orelse, i, val);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006374 }
Victor Stinner1acc1292013-07-27 00:03:47 +02006375 Py_CLEAR(tmp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006376 }
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00006377 *out = If(test, body, orelse, lineno, col_offset, end_lineno,
6378 end_col_offset, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006379 if (*out == NULL) goto failed;
6380 return 0;
6381 }
Victor Stinner74419f02020-07-03 11:35:37 +02006382 tp = state->With_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07006383 isinstance = PyObject_IsInstance(obj, tp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006384 if (isinstance == -1) {
6385 return 1;
6386 }
6387 if (isinstance) {
Pablo Galindoa5634c42020-09-16 19:42:00 +01006388 asdl_withitem_seq* items;
6389 asdl_stmt_seq* body;
Guido van Rossumdcfcd142019-01-31 03:40:27 -08006390 string type_comment;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006391
Victor Stinner74419f02020-07-03 11:35:37 +02006392 if (_PyObject_LookupAttr(obj, state->items, &tmp) < 0) {
Serhiy Storchakaf320be72018-01-25 10:49:40 +02006393 return 1;
6394 }
6395 if (tmp == NULL) {
6396 PyErr_SetString(PyExc_TypeError, "required field \"items\" missing from With");
6397 return 1;
6398 }
6399 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006400 int res;
6401 Py_ssize_t len;
6402 Py_ssize_t i;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006403 if (!PyList_Check(tmp)) {
Dino Viehlandac46eb42019-09-11 10:16:34 -07006404 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 +02006405 goto failed;
6406 }
6407 len = PyList_GET_SIZE(tmp);
Pablo Galindoa5634c42020-09-16 19:42:00 +01006408 items = _Py_asdl_withitem_seq_new(len, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006409 if (items == NULL) goto failed;
6410 for (i = 0; i < len; i++) {
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07006411 withitem_ty val;
Serhiy Storchaka43c97312019-09-10 13:02:30 +03006412 PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
6413 Py_INCREF(tmp2);
Victor Stinner74419f02020-07-03 11:35:37 +02006414 res = obj2ast_withitem(state, tmp2, &val, arena);
Serhiy Storchaka43c97312019-09-10 13:02:30 +03006415 Py_DECREF(tmp2);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006416 if (res != 0) goto failed;
Serhiy Storchakacf380602016-10-07 21:51:28 +03006417 if (len != PyList_GET_SIZE(tmp)) {
6418 PyErr_SetString(PyExc_RuntimeError, "With field \"items\" changed size during iteration");
6419 goto failed;
6420 }
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07006421 asdl_seq_SET(items, i, val);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006422 }
Victor Stinner1acc1292013-07-27 00:03:47 +02006423 Py_CLEAR(tmp);
Serhiy Storchakaf320be72018-01-25 10:49:40 +02006424 }
Victor Stinner74419f02020-07-03 11:35:37 +02006425 if (_PyObject_LookupAttr(obj, state->body, &tmp) < 0) {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006426 return 1;
6427 }
Serhiy Storchakaf320be72018-01-25 10:49:40 +02006428 if (tmp == NULL) {
6429 PyErr_SetString(PyExc_TypeError, "required field \"body\" missing from With");
6430 return 1;
6431 }
6432 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006433 int res;
6434 Py_ssize_t len;
6435 Py_ssize_t i;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006436 if (!PyList_Check(tmp)) {
Dino Viehlandac46eb42019-09-11 10:16:34 -07006437 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 +02006438 goto failed;
6439 }
6440 len = PyList_GET_SIZE(tmp);
Pablo Galindoa5634c42020-09-16 19:42:00 +01006441 body = _Py_asdl_stmt_seq_new(len, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006442 if (body == NULL) goto failed;
6443 for (i = 0; i < len; i++) {
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07006444 stmt_ty val;
Serhiy Storchaka43c97312019-09-10 13:02:30 +03006445 PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
6446 Py_INCREF(tmp2);
Victor Stinner74419f02020-07-03 11:35:37 +02006447 res = obj2ast_stmt(state, tmp2, &val, arena);
Serhiy Storchaka43c97312019-09-10 13:02:30 +03006448 Py_DECREF(tmp2);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006449 if (res != 0) goto failed;
Serhiy Storchakacf380602016-10-07 21:51:28 +03006450 if (len != PyList_GET_SIZE(tmp)) {
6451 PyErr_SetString(PyExc_RuntimeError, "With field \"body\" changed size during iteration");
6452 goto failed;
6453 }
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07006454 asdl_seq_SET(body, i, val);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006455 }
Victor Stinner1acc1292013-07-27 00:03:47 +02006456 Py_CLEAR(tmp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006457 }
Victor Stinner74419f02020-07-03 11:35:37 +02006458 if (_PyObject_LookupAttr(obj, state->type_comment, &tmp) < 0) {
Guido van Rossumdcfcd142019-01-31 03:40:27 -08006459 return 1;
6460 }
6461 if (tmp == NULL || tmp == Py_None) {
6462 Py_CLEAR(tmp);
6463 type_comment = NULL;
6464 }
6465 else {
6466 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02006467 res = obj2ast_string(state, tmp, &type_comment, arena);
Guido van Rossumdcfcd142019-01-31 03:40:27 -08006468 if (res != 0) goto failed;
6469 Py_CLEAR(tmp);
6470 }
6471 *out = With(items, body, type_comment, lineno, col_offset, end_lineno,
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00006472 end_col_offset, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006473 if (*out == NULL) goto failed;
6474 return 0;
6475 }
Victor Stinner74419f02020-07-03 11:35:37 +02006476 tp = state->AsyncWith_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07006477 isinstance = PyObject_IsInstance(obj, tp);
Yury Selivanov75445082015-05-11 22:57:16 -04006478 if (isinstance == -1) {
6479 return 1;
6480 }
6481 if (isinstance) {
Pablo Galindoa5634c42020-09-16 19:42:00 +01006482 asdl_withitem_seq* items;
6483 asdl_stmt_seq* body;
Guido van Rossumdcfcd142019-01-31 03:40:27 -08006484 string type_comment;
Yury Selivanov75445082015-05-11 22:57:16 -04006485
Victor Stinner74419f02020-07-03 11:35:37 +02006486 if (_PyObject_LookupAttr(obj, state->items, &tmp) < 0) {
Serhiy Storchakaf320be72018-01-25 10:49:40 +02006487 return 1;
6488 }
6489 if (tmp == NULL) {
6490 PyErr_SetString(PyExc_TypeError, "required field \"items\" missing from AsyncWith");
6491 return 1;
6492 }
6493 else {
Yury Selivanov75445082015-05-11 22:57:16 -04006494 int res;
6495 Py_ssize_t len;
6496 Py_ssize_t i;
Yury Selivanov75445082015-05-11 22:57:16 -04006497 if (!PyList_Check(tmp)) {
Dino Viehlandac46eb42019-09-11 10:16:34 -07006498 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 -04006499 goto failed;
6500 }
6501 len = PyList_GET_SIZE(tmp);
Pablo Galindoa5634c42020-09-16 19:42:00 +01006502 items = _Py_asdl_withitem_seq_new(len, arena);
Yury Selivanov75445082015-05-11 22:57:16 -04006503 if (items == NULL) goto failed;
6504 for (i = 0; i < len; i++) {
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07006505 withitem_ty val;
Serhiy Storchaka43c97312019-09-10 13:02:30 +03006506 PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
6507 Py_INCREF(tmp2);
Victor Stinner74419f02020-07-03 11:35:37 +02006508 res = obj2ast_withitem(state, tmp2, &val, arena);
Serhiy Storchaka43c97312019-09-10 13:02:30 +03006509 Py_DECREF(tmp2);
Yury Selivanov75445082015-05-11 22:57:16 -04006510 if (res != 0) goto failed;
Serhiy Storchakacf380602016-10-07 21:51:28 +03006511 if (len != PyList_GET_SIZE(tmp)) {
6512 PyErr_SetString(PyExc_RuntimeError, "AsyncWith field \"items\" changed size during iteration");
6513 goto failed;
6514 }
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07006515 asdl_seq_SET(items, i, val);
Yury Selivanov75445082015-05-11 22:57:16 -04006516 }
6517 Py_CLEAR(tmp);
Serhiy Storchakaf320be72018-01-25 10:49:40 +02006518 }
Victor Stinner74419f02020-07-03 11:35:37 +02006519 if (_PyObject_LookupAttr(obj, state->body, &tmp) < 0) {
Yury Selivanov75445082015-05-11 22:57:16 -04006520 return 1;
6521 }
Serhiy Storchakaf320be72018-01-25 10:49:40 +02006522 if (tmp == NULL) {
6523 PyErr_SetString(PyExc_TypeError, "required field \"body\" missing from AsyncWith");
6524 return 1;
6525 }
6526 else {
Yury Selivanov75445082015-05-11 22:57:16 -04006527 int res;
6528 Py_ssize_t len;
6529 Py_ssize_t i;
Yury Selivanov75445082015-05-11 22:57:16 -04006530 if (!PyList_Check(tmp)) {
Dino Viehlandac46eb42019-09-11 10:16:34 -07006531 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 -04006532 goto failed;
6533 }
6534 len = PyList_GET_SIZE(tmp);
Pablo Galindoa5634c42020-09-16 19:42:00 +01006535 body = _Py_asdl_stmt_seq_new(len, arena);
Yury Selivanov75445082015-05-11 22:57:16 -04006536 if (body == NULL) goto failed;
6537 for (i = 0; i < len; i++) {
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07006538 stmt_ty val;
Serhiy Storchaka43c97312019-09-10 13:02:30 +03006539 PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
6540 Py_INCREF(tmp2);
Victor Stinner74419f02020-07-03 11:35:37 +02006541 res = obj2ast_stmt(state, tmp2, &val, arena);
Serhiy Storchaka43c97312019-09-10 13:02:30 +03006542 Py_DECREF(tmp2);
Yury Selivanov75445082015-05-11 22:57:16 -04006543 if (res != 0) goto failed;
Serhiy Storchakacf380602016-10-07 21:51:28 +03006544 if (len != PyList_GET_SIZE(tmp)) {
6545 PyErr_SetString(PyExc_RuntimeError, "AsyncWith field \"body\" changed size during iteration");
6546 goto failed;
6547 }
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07006548 asdl_seq_SET(body, i, val);
Yury Selivanov75445082015-05-11 22:57:16 -04006549 }
6550 Py_CLEAR(tmp);
Yury Selivanov75445082015-05-11 22:57:16 -04006551 }
Victor Stinner74419f02020-07-03 11:35:37 +02006552 if (_PyObject_LookupAttr(obj, state->type_comment, &tmp) < 0) {
Guido van Rossumdcfcd142019-01-31 03:40:27 -08006553 return 1;
6554 }
6555 if (tmp == NULL || tmp == Py_None) {
6556 Py_CLEAR(tmp);
6557 type_comment = NULL;
6558 }
6559 else {
6560 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02006561 res = obj2ast_string(state, tmp, &type_comment, arena);
Guido van Rossumdcfcd142019-01-31 03:40:27 -08006562 if (res != 0) goto failed;
6563 Py_CLEAR(tmp);
6564 }
6565 *out = AsyncWith(items, body, type_comment, lineno, col_offset,
6566 end_lineno, end_col_offset, arena);
Yury Selivanov75445082015-05-11 22:57:16 -04006567 if (*out == NULL) goto failed;
6568 return 0;
6569 }
Brandt Bucher145bf262021-02-26 14:51:55 -08006570 tp = state->Match_type;
6571 isinstance = PyObject_IsInstance(obj, tp);
6572 if (isinstance == -1) {
6573 return 1;
6574 }
6575 if (isinstance) {
6576 expr_ty subject;
6577 asdl_match_case_seq* cases;
6578
6579 if (_PyObject_LookupAttr(obj, state->subject, &tmp) < 0) {
6580 return 1;
6581 }
6582 if (tmp == NULL) {
6583 PyErr_SetString(PyExc_TypeError, "required field \"subject\" missing from Match");
6584 return 1;
6585 }
6586 else {
6587 int res;
6588 res = obj2ast_expr(state, tmp, &subject, arena);
6589 if (res != 0) goto failed;
6590 Py_CLEAR(tmp);
6591 }
6592 if (_PyObject_LookupAttr(obj, state->cases, &tmp) < 0) {
6593 return 1;
6594 }
6595 if (tmp == NULL) {
6596 PyErr_SetString(PyExc_TypeError, "required field \"cases\" missing from Match");
6597 return 1;
6598 }
6599 else {
6600 int res;
6601 Py_ssize_t len;
6602 Py_ssize_t i;
6603 if (!PyList_Check(tmp)) {
6604 PyErr_Format(PyExc_TypeError, "Match field \"cases\" must be a list, not a %.200s", _PyType_Name(Py_TYPE(tmp)));
6605 goto failed;
6606 }
6607 len = PyList_GET_SIZE(tmp);
6608 cases = _Py_asdl_match_case_seq_new(len, arena);
6609 if (cases == NULL) goto failed;
6610 for (i = 0; i < len; i++) {
6611 match_case_ty val;
6612 PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
6613 Py_INCREF(tmp2);
6614 res = obj2ast_match_case(state, tmp2, &val, arena);
6615 Py_DECREF(tmp2);
6616 if (res != 0) goto failed;
6617 if (len != PyList_GET_SIZE(tmp)) {
6618 PyErr_SetString(PyExc_RuntimeError, "Match field \"cases\" changed size during iteration");
6619 goto failed;
6620 }
6621 asdl_seq_SET(cases, i, val);
6622 }
6623 Py_CLEAR(tmp);
6624 }
6625 *out = Match(subject, cases, lineno, col_offset, end_lineno,
6626 end_col_offset, arena);
6627 if (*out == NULL) goto failed;
6628 return 0;
6629 }
Victor Stinner74419f02020-07-03 11:35:37 +02006630 tp = state->Raise_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07006631 isinstance = PyObject_IsInstance(obj, tp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006632 if (isinstance == -1) {
6633 return 1;
6634 }
6635 if (isinstance) {
6636 expr_ty exc;
6637 expr_ty cause;
6638
Victor Stinner74419f02020-07-03 11:35:37 +02006639 if (_PyObject_LookupAttr(obj, state->exc, &tmp) < 0) {
Serhiy Storchakaf320be72018-01-25 10:49:40 +02006640 return 1;
6641 }
6642 if (tmp == NULL || tmp == Py_None) {
6643 Py_CLEAR(tmp);
6644 exc = NULL;
6645 }
6646 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006647 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02006648 res = obj2ast_expr(state, tmp, &exc, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006649 if (res != 0) goto failed;
Victor Stinner1acc1292013-07-27 00:03:47 +02006650 Py_CLEAR(tmp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006651 }
Victor Stinner74419f02020-07-03 11:35:37 +02006652 if (_PyObject_LookupAttr(obj, state->cause, &tmp) < 0) {
Serhiy Storchakaf320be72018-01-25 10:49:40 +02006653 return 1;
6654 }
6655 if (tmp == NULL || tmp == Py_None) {
6656 Py_CLEAR(tmp);
6657 cause = NULL;
6658 }
6659 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006660 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02006661 res = obj2ast_expr(state, tmp, &cause, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006662 if (res != 0) goto failed;
Victor Stinner1acc1292013-07-27 00:03:47 +02006663 Py_CLEAR(tmp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006664 }
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00006665 *out = Raise(exc, cause, lineno, col_offset, end_lineno,
6666 end_col_offset, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006667 if (*out == NULL) goto failed;
6668 return 0;
6669 }
Victor Stinner74419f02020-07-03 11:35:37 +02006670 tp = state->Try_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07006671 isinstance = PyObject_IsInstance(obj, tp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006672 if (isinstance == -1) {
6673 return 1;
6674 }
6675 if (isinstance) {
Pablo Galindoa5634c42020-09-16 19:42:00 +01006676 asdl_stmt_seq* body;
6677 asdl_excepthandler_seq* handlers;
6678 asdl_stmt_seq* orelse;
6679 asdl_stmt_seq* finalbody;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006680
Victor Stinner74419f02020-07-03 11:35:37 +02006681 if (_PyObject_LookupAttr(obj, state->body, &tmp) < 0) {
Serhiy Storchakaf320be72018-01-25 10:49:40 +02006682 return 1;
6683 }
6684 if (tmp == NULL) {
6685 PyErr_SetString(PyExc_TypeError, "required field \"body\" missing from Try");
6686 return 1;
6687 }
6688 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006689 int res;
6690 Py_ssize_t len;
6691 Py_ssize_t i;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006692 if (!PyList_Check(tmp)) {
Dino Viehlandac46eb42019-09-11 10:16:34 -07006693 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 +02006694 goto failed;
6695 }
6696 len = PyList_GET_SIZE(tmp);
Pablo Galindoa5634c42020-09-16 19:42:00 +01006697 body = _Py_asdl_stmt_seq_new(len, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006698 if (body == NULL) goto failed;
6699 for (i = 0; i < len; i++) {
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07006700 stmt_ty val;
Serhiy Storchaka43c97312019-09-10 13:02:30 +03006701 PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
6702 Py_INCREF(tmp2);
Victor Stinner74419f02020-07-03 11:35:37 +02006703 res = obj2ast_stmt(state, tmp2, &val, arena);
Serhiy Storchaka43c97312019-09-10 13:02:30 +03006704 Py_DECREF(tmp2);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006705 if (res != 0) goto failed;
Serhiy Storchakacf380602016-10-07 21:51:28 +03006706 if (len != PyList_GET_SIZE(tmp)) {
6707 PyErr_SetString(PyExc_RuntimeError, "Try field \"body\" changed size during iteration");
6708 goto failed;
6709 }
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07006710 asdl_seq_SET(body, i, val);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006711 }
Victor Stinner1acc1292013-07-27 00:03:47 +02006712 Py_CLEAR(tmp);
Serhiy Storchakaf320be72018-01-25 10:49:40 +02006713 }
Victor Stinner74419f02020-07-03 11:35:37 +02006714 if (_PyObject_LookupAttr(obj, state->handlers, &tmp) < 0) {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006715 return 1;
6716 }
Serhiy Storchakaf320be72018-01-25 10:49:40 +02006717 if (tmp == NULL) {
6718 PyErr_SetString(PyExc_TypeError, "required field \"handlers\" missing from Try");
6719 return 1;
6720 }
6721 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006722 int res;
6723 Py_ssize_t len;
6724 Py_ssize_t i;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006725 if (!PyList_Check(tmp)) {
Dino Viehlandac46eb42019-09-11 10:16:34 -07006726 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 +02006727 goto failed;
6728 }
6729 len = PyList_GET_SIZE(tmp);
Pablo Galindoa5634c42020-09-16 19:42:00 +01006730 handlers = _Py_asdl_excepthandler_seq_new(len, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006731 if (handlers == NULL) goto failed;
6732 for (i = 0; i < len; i++) {
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07006733 excepthandler_ty val;
Serhiy Storchaka43c97312019-09-10 13:02:30 +03006734 PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
6735 Py_INCREF(tmp2);
Victor Stinner74419f02020-07-03 11:35:37 +02006736 res = obj2ast_excepthandler(state, tmp2, &val, arena);
Serhiy Storchaka43c97312019-09-10 13:02:30 +03006737 Py_DECREF(tmp2);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006738 if (res != 0) goto failed;
Serhiy Storchakacf380602016-10-07 21:51:28 +03006739 if (len != PyList_GET_SIZE(tmp)) {
6740 PyErr_SetString(PyExc_RuntimeError, "Try field \"handlers\" changed size during iteration");
6741 goto failed;
6742 }
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07006743 asdl_seq_SET(handlers, i, val);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006744 }
Victor Stinner1acc1292013-07-27 00:03:47 +02006745 Py_CLEAR(tmp);
Serhiy Storchakaf320be72018-01-25 10:49:40 +02006746 }
Victor Stinner74419f02020-07-03 11:35:37 +02006747 if (_PyObject_LookupAttr(obj, state->orelse, &tmp) < 0) {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006748 return 1;
6749 }
Serhiy Storchakaf320be72018-01-25 10:49:40 +02006750 if (tmp == NULL) {
6751 PyErr_SetString(PyExc_TypeError, "required field \"orelse\" missing from Try");
6752 return 1;
6753 }
6754 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006755 int res;
6756 Py_ssize_t len;
6757 Py_ssize_t i;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006758 if (!PyList_Check(tmp)) {
Dino Viehlandac46eb42019-09-11 10:16:34 -07006759 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 +02006760 goto failed;
6761 }
6762 len = PyList_GET_SIZE(tmp);
Pablo Galindoa5634c42020-09-16 19:42:00 +01006763 orelse = _Py_asdl_stmt_seq_new(len, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006764 if (orelse == NULL) goto failed;
6765 for (i = 0; i < len; i++) {
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07006766 stmt_ty val;
Serhiy Storchaka43c97312019-09-10 13:02:30 +03006767 PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
6768 Py_INCREF(tmp2);
Victor Stinner74419f02020-07-03 11:35:37 +02006769 res = obj2ast_stmt(state, tmp2, &val, arena);
Serhiy Storchaka43c97312019-09-10 13:02:30 +03006770 Py_DECREF(tmp2);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006771 if (res != 0) goto failed;
Serhiy Storchakacf380602016-10-07 21:51:28 +03006772 if (len != PyList_GET_SIZE(tmp)) {
6773 PyErr_SetString(PyExc_RuntimeError, "Try field \"orelse\" changed size during iteration");
6774 goto failed;
6775 }
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07006776 asdl_seq_SET(orelse, i, val);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006777 }
Victor Stinner1acc1292013-07-27 00:03:47 +02006778 Py_CLEAR(tmp);
Serhiy Storchakaf320be72018-01-25 10:49:40 +02006779 }
Victor Stinner74419f02020-07-03 11:35:37 +02006780 if (_PyObject_LookupAttr(obj, state->finalbody, &tmp) < 0) {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006781 return 1;
6782 }
Serhiy Storchakaf320be72018-01-25 10:49:40 +02006783 if (tmp == NULL) {
6784 PyErr_SetString(PyExc_TypeError, "required field \"finalbody\" missing from Try");
6785 return 1;
6786 }
6787 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006788 int res;
6789 Py_ssize_t len;
6790 Py_ssize_t i;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006791 if (!PyList_Check(tmp)) {
Dino Viehlandac46eb42019-09-11 10:16:34 -07006792 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 +02006793 goto failed;
6794 }
6795 len = PyList_GET_SIZE(tmp);
Pablo Galindoa5634c42020-09-16 19:42:00 +01006796 finalbody = _Py_asdl_stmt_seq_new(len, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006797 if (finalbody == NULL) goto failed;
6798 for (i = 0; i < len; i++) {
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07006799 stmt_ty val;
Serhiy Storchaka43c97312019-09-10 13:02:30 +03006800 PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
6801 Py_INCREF(tmp2);
Victor Stinner74419f02020-07-03 11:35:37 +02006802 res = obj2ast_stmt(state, tmp2, &val, arena);
Serhiy Storchaka43c97312019-09-10 13:02:30 +03006803 Py_DECREF(tmp2);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006804 if (res != 0) goto failed;
Serhiy Storchakacf380602016-10-07 21:51:28 +03006805 if (len != PyList_GET_SIZE(tmp)) {
6806 PyErr_SetString(PyExc_RuntimeError, "Try field \"finalbody\" changed size during iteration");
6807 goto failed;
6808 }
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07006809 asdl_seq_SET(finalbody, i, val);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006810 }
Victor Stinner1acc1292013-07-27 00:03:47 +02006811 Py_CLEAR(tmp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006812 }
6813 *out = Try(body, handlers, orelse, finalbody, lineno, col_offset,
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00006814 end_lineno, end_col_offset, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006815 if (*out == NULL) goto failed;
6816 return 0;
6817 }
Victor Stinner74419f02020-07-03 11:35:37 +02006818 tp = state->Assert_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07006819 isinstance = PyObject_IsInstance(obj, tp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006820 if (isinstance == -1) {
6821 return 1;
6822 }
6823 if (isinstance) {
6824 expr_ty test;
6825 expr_ty msg;
6826
Victor Stinner74419f02020-07-03 11:35:37 +02006827 if (_PyObject_LookupAttr(obj, state->test, &tmp) < 0) {
Serhiy Storchakaf320be72018-01-25 10:49:40 +02006828 return 1;
6829 }
6830 if (tmp == NULL) {
6831 PyErr_SetString(PyExc_TypeError, "required field \"test\" missing from Assert");
6832 return 1;
6833 }
6834 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006835 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02006836 res = obj2ast_expr(state, tmp, &test, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006837 if (res != 0) goto failed;
Victor Stinner1acc1292013-07-27 00:03:47 +02006838 Py_CLEAR(tmp);
Serhiy Storchakaf320be72018-01-25 10:49:40 +02006839 }
Victor Stinner74419f02020-07-03 11:35:37 +02006840 if (_PyObject_LookupAttr(obj, state->msg, &tmp) < 0) {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006841 return 1;
6842 }
Serhiy Storchakaf320be72018-01-25 10:49:40 +02006843 if (tmp == NULL || tmp == Py_None) {
6844 Py_CLEAR(tmp);
6845 msg = NULL;
6846 }
6847 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006848 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02006849 res = obj2ast_expr(state, tmp, &msg, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006850 if (res != 0) goto failed;
Victor Stinner1acc1292013-07-27 00:03:47 +02006851 Py_CLEAR(tmp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006852 }
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00006853 *out = Assert(test, msg, lineno, col_offset, end_lineno,
6854 end_col_offset, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006855 if (*out == NULL) goto failed;
6856 return 0;
6857 }
Victor Stinner74419f02020-07-03 11:35:37 +02006858 tp = state->Import_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07006859 isinstance = PyObject_IsInstance(obj, tp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006860 if (isinstance == -1) {
6861 return 1;
6862 }
6863 if (isinstance) {
Pablo Galindoa5634c42020-09-16 19:42:00 +01006864 asdl_alias_seq* names;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006865
Victor Stinner74419f02020-07-03 11:35:37 +02006866 if (_PyObject_LookupAttr(obj, state->names, &tmp) < 0) {
Serhiy Storchakaf320be72018-01-25 10:49:40 +02006867 return 1;
6868 }
6869 if (tmp == NULL) {
6870 PyErr_SetString(PyExc_TypeError, "required field \"names\" missing from Import");
6871 return 1;
6872 }
6873 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006874 int res;
6875 Py_ssize_t len;
6876 Py_ssize_t i;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006877 if (!PyList_Check(tmp)) {
Dino Viehlandac46eb42019-09-11 10:16:34 -07006878 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 +02006879 goto failed;
6880 }
6881 len = PyList_GET_SIZE(tmp);
Pablo Galindoa5634c42020-09-16 19:42:00 +01006882 names = _Py_asdl_alias_seq_new(len, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006883 if (names == NULL) goto failed;
6884 for (i = 0; i < len; i++) {
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07006885 alias_ty val;
Serhiy Storchaka43c97312019-09-10 13:02:30 +03006886 PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
6887 Py_INCREF(tmp2);
Victor Stinner74419f02020-07-03 11:35:37 +02006888 res = obj2ast_alias(state, tmp2, &val, arena);
Serhiy Storchaka43c97312019-09-10 13:02:30 +03006889 Py_DECREF(tmp2);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006890 if (res != 0) goto failed;
Serhiy Storchakacf380602016-10-07 21:51:28 +03006891 if (len != PyList_GET_SIZE(tmp)) {
6892 PyErr_SetString(PyExc_RuntimeError, "Import field \"names\" changed size during iteration");
6893 goto failed;
6894 }
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07006895 asdl_seq_SET(names, i, val);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006896 }
Victor Stinner1acc1292013-07-27 00:03:47 +02006897 Py_CLEAR(tmp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006898 }
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00006899 *out = Import(names, lineno, col_offset, end_lineno, end_col_offset,
6900 arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006901 if (*out == NULL) goto failed;
6902 return 0;
6903 }
Victor Stinner74419f02020-07-03 11:35:37 +02006904 tp = state->ImportFrom_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07006905 isinstance = PyObject_IsInstance(obj, tp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006906 if (isinstance == -1) {
6907 return 1;
6908 }
6909 if (isinstance) {
6910 identifier module;
Pablo Galindoa5634c42020-09-16 19:42:00 +01006911 asdl_alias_seq* names;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006912 int level;
6913
Victor Stinner74419f02020-07-03 11:35:37 +02006914 if (_PyObject_LookupAttr(obj, state->module, &tmp) < 0) {
Serhiy Storchakaf320be72018-01-25 10:49:40 +02006915 return 1;
6916 }
6917 if (tmp == NULL || tmp == Py_None) {
6918 Py_CLEAR(tmp);
6919 module = NULL;
6920 }
6921 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006922 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02006923 res = obj2ast_identifier(state, tmp, &module, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006924 if (res != 0) goto failed;
Victor Stinner1acc1292013-07-27 00:03:47 +02006925 Py_CLEAR(tmp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006926 }
Victor Stinner74419f02020-07-03 11:35:37 +02006927 if (_PyObject_LookupAttr(obj, state->names, &tmp) < 0) {
Serhiy Storchakaf320be72018-01-25 10:49:40 +02006928 return 1;
6929 }
6930 if (tmp == NULL) {
6931 PyErr_SetString(PyExc_TypeError, "required field \"names\" missing from ImportFrom");
6932 return 1;
6933 }
6934 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006935 int res;
6936 Py_ssize_t len;
6937 Py_ssize_t i;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006938 if (!PyList_Check(tmp)) {
Dino Viehlandac46eb42019-09-11 10:16:34 -07006939 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 +02006940 goto failed;
6941 }
6942 len = PyList_GET_SIZE(tmp);
Pablo Galindoa5634c42020-09-16 19:42:00 +01006943 names = _Py_asdl_alias_seq_new(len, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006944 if (names == NULL) goto failed;
6945 for (i = 0; i < len; i++) {
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07006946 alias_ty val;
Serhiy Storchaka43c97312019-09-10 13:02:30 +03006947 PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
6948 Py_INCREF(tmp2);
Victor Stinner74419f02020-07-03 11:35:37 +02006949 res = obj2ast_alias(state, tmp2, &val, arena);
Serhiy Storchaka43c97312019-09-10 13:02:30 +03006950 Py_DECREF(tmp2);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006951 if (res != 0) goto failed;
Serhiy Storchakacf380602016-10-07 21:51:28 +03006952 if (len != PyList_GET_SIZE(tmp)) {
6953 PyErr_SetString(PyExc_RuntimeError, "ImportFrom field \"names\" changed size during iteration");
6954 goto failed;
6955 }
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07006956 asdl_seq_SET(names, i, val);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006957 }
Victor Stinner1acc1292013-07-27 00:03:47 +02006958 Py_CLEAR(tmp);
Serhiy Storchakaf320be72018-01-25 10:49:40 +02006959 }
Victor Stinner74419f02020-07-03 11:35:37 +02006960 if (_PyObject_LookupAttr(obj, state->level, &tmp) < 0) {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006961 return 1;
6962 }
Serhiy Storchakaf320be72018-01-25 10:49:40 +02006963 if (tmp == NULL || tmp == Py_None) {
6964 Py_CLEAR(tmp);
6965 level = 0;
6966 }
6967 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006968 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02006969 res = obj2ast_int(state, tmp, &level, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006970 if (res != 0) goto failed;
Victor Stinner1acc1292013-07-27 00:03:47 +02006971 Py_CLEAR(tmp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006972 }
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00006973 *out = ImportFrom(module, names, level, lineno, col_offset, end_lineno,
6974 end_col_offset, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006975 if (*out == NULL) goto failed;
6976 return 0;
6977 }
Victor Stinner74419f02020-07-03 11:35:37 +02006978 tp = state->Global_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07006979 isinstance = PyObject_IsInstance(obj, tp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006980 if (isinstance == -1) {
6981 return 1;
6982 }
6983 if (isinstance) {
Pablo Galindoa5634c42020-09-16 19:42:00 +01006984 asdl_identifier_seq* names;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006985
Victor Stinner74419f02020-07-03 11:35:37 +02006986 if (_PyObject_LookupAttr(obj, state->names, &tmp) < 0) {
Serhiy Storchakaf320be72018-01-25 10:49:40 +02006987 return 1;
6988 }
6989 if (tmp == NULL) {
6990 PyErr_SetString(PyExc_TypeError, "required field \"names\" missing from Global");
6991 return 1;
6992 }
6993 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006994 int res;
6995 Py_ssize_t len;
6996 Py_ssize_t i;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02006997 if (!PyList_Check(tmp)) {
Dino Viehlandac46eb42019-09-11 10:16:34 -07006998 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 +02006999 goto failed;
7000 }
7001 len = PyList_GET_SIZE(tmp);
Pablo Galindoa5634c42020-09-16 19:42:00 +01007002 names = _Py_asdl_identifier_seq_new(len, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007003 if (names == NULL) goto failed;
7004 for (i = 0; i < len; i++) {
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07007005 identifier val;
Serhiy Storchaka43c97312019-09-10 13:02:30 +03007006 PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
7007 Py_INCREF(tmp2);
Victor Stinner74419f02020-07-03 11:35:37 +02007008 res = obj2ast_identifier(state, tmp2, &val, arena);
Serhiy Storchaka43c97312019-09-10 13:02:30 +03007009 Py_DECREF(tmp2);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007010 if (res != 0) goto failed;
Serhiy Storchakacf380602016-10-07 21:51:28 +03007011 if (len != PyList_GET_SIZE(tmp)) {
7012 PyErr_SetString(PyExc_RuntimeError, "Global field \"names\" changed size during iteration");
7013 goto failed;
7014 }
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07007015 asdl_seq_SET(names, i, val);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007016 }
Victor Stinner1acc1292013-07-27 00:03:47 +02007017 Py_CLEAR(tmp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007018 }
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00007019 *out = Global(names, lineno, col_offset, end_lineno, end_col_offset,
7020 arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007021 if (*out == NULL) goto failed;
7022 return 0;
7023 }
Victor Stinner74419f02020-07-03 11:35:37 +02007024 tp = state->Nonlocal_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07007025 isinstance = PyObject_IsInstance(obj, tp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007026 if (isinstance == -1) {
7027 return 1;
7028 }
7029 if (isinstance) {
Pablo Galindoa5634c42020-09-16 19:42:00 +01007030 asdl_identifier_seq* names;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007031
Victor Stinner74419f02020-07-03 11:35:37 +02007032 if (_PyObject_LookupAttr(obj, state->names, &tmp) < 0) {
Serhiy Storchakaf320be72018-01-25 10:49:40 +02007033 return 1;
7034 }
7035 if (tmp == NULL) {
7036 PyErr_SetString(PyExc_TypeError, "required field \"names\" missing from Nonlocal");
7037 return 1;
7038 }
7039 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007040 int res;
7041 Py_ssize_t len;
7042 Py_ssize_t i;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007043 if (!PyList_Check(tmp)) {
Dino Viehlandac46eb42019-09-11 10:16:34 -07007044 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 +02007045 goto failed;
7046 }
7047 len = PyList_GET_SIZE(tmp);
Pablo Galindoa5634c42020-09-16 19:42:00 +01007048 names = _Py_asdl_identifier_seq_new(len, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007049 if (names == NULL) goto failed;
7050 for (i = 0; i < len; i++) {
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07007051 identifier val;
Serhiy Storchaka43c97312019-09-10 13:02:30 +03007052 PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
7053 Py_INCREF(tmp2);
Victor Stinner74419f02020-07-03 11:35:37 +02007054 res = obj2ast_identifier(state, tmp2, &val, arena);
Serhiy Storchaka43c97312019-09-10 13:02:30 +03007055 Py_DECREF(tmp2);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007056 if (res != 0) goto failed;
Serhiy Storchakacf380602016-10-07 21:51:28 +03007057 if (len != PyList_GET_SIZE(tmp)) {
7058 PyErr_SetString(PyExc_RuntimeError, "Nonlocal field \"names\" changed size during iteration");
7059 goto failed;
7060 }
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07007061 asdl_seq_SET(names, i, val);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007062 }
Victor Stinner1acc1292013-07-27 00:03:47 +02007063 Py_CLEAR(tmp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007064 }
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00007065 *out = Nonlocal(names, lineno, col_offset, end_lineno, end_col_offset,
7066 arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007067 if (*out == NULL) goto failed;
7068 return 0;
7069 }
Victor Stinner74419f02020-07-03 11:35:37 +02007070 tp = state->Expr_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07007071 isinstance = PyObject_IsInstance(obj, tp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007072 if (isinstance == -1) {
7073 return 1;
7074 }
7075 if (isinstance) {
7076 expr_ty value;
7077
Victor Stinner74419f02020-07-03 11:35:37 +02007078 if (_PyObject_LookupAttr(obj, state->value, &tmp) < 0) {
Serhiy Storchakaf320be72018-01-25 10:49:40 +02007079 return 1;
7080 }
7081 if (tmp == NULL) {
7082 PyErr_SetString(PyExc_TypeError, "required field \"value\" missing from Expr");
7083 return 1;
7084 }
7085 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007086 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02007087 res = obj2ast_expr(state, tmp, &value, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007088 if (res != 0) goto failed;
Victor Stinner1acc1292013-07-27 00:03:47 +02007089 Py_CLEAR(tmp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007090 }
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00007091 *out = Expr(value, lineno, col_offset, end_lineno, end_col_offset,
7092 arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007093 if (*out == NULL) goto failed;
7094 return 0;
7095 }
Victor Stinner74419f02020-07-03 11:35:37 +02007096 tp = state->Pass_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07007097 isinstance = PyObject_IsInstance(obj, tp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007098 if (isinstance == -1) {
7099 return 1;
7100 }
7101 if (isinstance) {
7102
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00007103 *out = Pass(lineno, col_offset, end_lineno, end_col_offset, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007104 if (*out == NULL) goto failed;
7105 return 0;
7106 }
Victor Stinner74419f02020-07-03 11:35:37 +02007107 tp = state->Break_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07007108 isinstance = PyObject_IsInstance(obj, tp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007109 if (isinstance == -1) {
7110 return 1;
7111 }
7112 if (isinstance) {
7113
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00007114 *out = Break(lineno, col_offset, end_lineno, end_col_offset, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007115 if (*out == NULL) goto failed;
7116 return 0;
7117 }
Victor Stinner74419f02020-07-03 11:35:37 +02007118 tp = state->Continue_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07007119 isinstance = PyObject_IsInstance(obj, tp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007120 if (isinstance == -1) {
7121 return 1;
7122 }
7123 if (isinstance) {
7124
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00007125 *out = Continue(lineno, col_offset, end_lineno, end_col_offset, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007126 if (*out == NULL) goto failed;
7127 return 0;
7128 }
7129
7130 PyErr_Format(PyExc_TypeError, "expected some sort of stmt, but got %R", obj);
7131 failed:
7132 Py_XDECREF(tmp);
7133 return 1;
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00007134}
7135
7136int
Victor Stinner5cf47822020-11-02 22:03:28 +01007137obj2ast_expr(struct ast_state *state, PyObject* obj, expr_ty* out, PyArena*
7138 arena)
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00007139{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007140 int isinstance;
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00007141
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007142 PyObject *tmp = NULL;
Dino Viehlandac46eb42019-09-11 10:16:34 -07007143 PyObject *tp;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007144 int lineno;
7145 int col_offset;
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00007146 int end_lineno;
7147 int end_col_offset;
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00007148
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007149 if (obj == Py_None) {
7150 *out = NULL;
7151 return 0;
7152 }
Victor Stinner74419f02020-07-03 11:35:37 +02007153 if (_PyObject_LookupAttr(obj, state->lineno, &tmp) < 0) {
Serhiy Storchakaf320be72018-01-25 10:49:40 +02007154 return 1;
7155 }
7156 if (tmp == NULL) {
7157 PyErr_SetString(PyExc_TypeError, "required field \"lineno\" missing from expr");
7158 return 1;
7159 }
7160 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007161 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02007162 res = obj2ast_int(state, tmp, &lineno, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007163 if (res != 0) goto failed;
Victor Stinner1acc1292013-07-27 00:03:47 +02007164 Py_CLEAR(tmp);
Serhiy Storchakaf320be72018-01-25 10:49:40 +02007165 }
Victor Stinner74419f02020-07-03 11:35:37 +02007166 if (_PyObject_LookupAttr(obj, state->col_offset, &tmp) < 0) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00007167 return 1;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007168 }
Serhiy Storchakaf320be72018-01-25 10:49:40 +02007169 if (tmp == NULL) {
7170 PyErr_SetString(PyExc_TypeError, "required field \"col_offset\" missing from expr");
7171 return 1;
7172 }
7173 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007174 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02007175 res = obj2ast_int(state, tmp, &col_offset, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007176 if (res != 0) goto failed;
Victor Stinner1acc1292013-07-27 00:03:47 +02007177 Py_CLEAR(tmp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007178 }
Victor Stinner74419f02020-07-03 11:35:37 +02007179 if (_PyObject_LookupAttr(obj, state->end_lineno, &tmp) < 0) {
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00007180 return 1;
7181 }
7182 if (tmp == NULL || tmp == Py_None) {
7183 Py_CLEAR(tmp);
7184 end_lineno = 0;
7185 }
7186 else {
7187 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02007188 res = obj2ast_int(state, tmp, &end_lineno, arena);
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00007189 if (res != 0) goto failed;
7190 Py_CLEAR(tmp);
7191 }
Victor Stinner74419f02020-07-03 11:35:37 +02007192 if (_PyObject_LookupAttr(obj, state->end_col_offset, &tmp) < 0) {
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00007193 return 1;
7194 }
7195 if (tmp == NULL || tmp == Py_None) {
7196 Py_CLEAR(tmp);
7197 end_col_offset = 0;
7198 }
7199 else {
7200 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02007201 res = obj2ast_int(state, tmp, &end_col_offset, arena);
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00007202 if (res != 0) goto failed;
7203 Py_CLEAR(tmp);
7204 }
Victor Stinner74419f02020-07-03 11:35:37 +02007205 tp = state->BoolOp_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07007206 isinstance = PyObject_IsInstance(obj, tp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007207 if (isinstance == -1) {
7208 return 1;
7209 }
7210 if (isinstance) {
7211 boolop_ty op;
Pablo Galindoa5634c42020-09-16 19:42:00 +01007212 asdl_expr_seq* values;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007213
Victor Stinner74419f02020-07-03 11:35:37 +02007214 if (_PyObject_LookupAttr(obj, state->op, &tmp) < 0) {
Serhiy Storchakaf320be72018-01-25 10:49:40 +02007215 return 1;
7216 }
7217 if (tmp == NULL) {
7218 PyErr_SetString(PyExc_TypeError, "required field \"op\" missing from BoolOp");
7219 return 1;
7220 }
7221 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007222 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02007223 res = obj2ast_boolop(state, tmp, &op, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007224 if (res != 0) goto failed;
Victor Stinner1acc1292013-07-27 00:03:47 +02007225 Py_CLEAR(tmp);
Serhiy Storchakaf320be72018-01-25 10:49:40 +02007226 }
Victor Stinner74419f02020-07-03 11:35:37 +02007227 if (_PyObject_LookupAttr(obj, state->values, &tmp) < 0) {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007228 return 1;
7229 }
Serhiy Storchakaf320be72018-01-25 10:49:40 +02007230 if (tmp == NULL) {
7231 PyErr_SetString(PyExc_TypeError, "required field \"values\" missing from BoolOp");
7232 return 1;
7233 }
7234 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007235 int res;
7236 Py_ssize_t len;
7237 Py_ssize_t i;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007238 if (!PyList_Check(tmp)) {
Dino Viehlandac46eb42019-09-11 10:16:34 -07007239 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 +02007240 goto failed;
7241 }
7242 len = PyList_GET_SIZE(tmp);
Pablo Galindoa5634c42020-09-16 19:42:00 +01007243 values = _Py_asdl_expr_seq_new(len, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007244 if (values == NULL) goto failed;
7245 for (i = 0; i < len; i++) {
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07007246 expr_ty val;
Serhiy Storchaka43c97312019-09-10 13:02:30 +03007247 PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
7248 Py_INCREF(tmp2);
Victor Stinner74419f02020-07-03 11:35:37 +02007249 res = obj2ast_expr(state, tmp2, &val, arena);
Serhiy Storchaka43c97312019-09-10 13:02:30 +03007250 Py_DECREF(tmp2);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007251 if (res != 0) goto failed;
Serhiy Storchakacf380602016-10-07 21:51:28 +03007252 if (len != PyList_GET_SIZE(tmp)) {
7253 PyErr_SetString(PyExc_RuntimeError, "BoolOp field \"values\" changed size during iteration");
7254 goto failed;
7255 }
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07007256 asdl_seq_SET(values, i, val);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007257 }
Victor Stinner1acc1292013-07-27 00:03:47 +02007258 Py_CLEAR(tmp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007259 }
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00007260 *out = BoolOp(op, values, lineno, col_offset, end_lineno,
7261 end_col_offset, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007262 if (*out == NULL) goto failed;
7263 return 0;
7264 }
Victor Stinner74419f02020-07-03 11:35:37 +02007265 tp = state->NamedExpr_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07007266 isinstance = PyObject_IsInstance(obj, tp);
Emily Morehouse8f59ee02019-01-24 16:49:56 -07007267 if (isinstance == -1) {
7268 return 1;
7269 }
7270 if (isinstance) {
7271 expr_ty target;
7272 expr_ty value;
7273
Victor Stinner74419f02020-07-03 11:35:37 +02007274 if (_PyObject_LookupAttr(obj, state->target, &tmp) < 0) {
Emily Morehouse8f59ee02019-01-24 16:49:56 -07007275 return 1;
7276 }
7277 if (tmp == NULL) {
7278 PyErr_SetString(PyExc_TypeError, "required field \"target\" missing from NamedExpr");
7279 return 1;
7280 }
7281 else {
7282 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02007283 res = obj2ast_expr(state, tmp, &target, arena);
Emily Morehouse8f59ee02019-01-24 16:49:56 -07007284 if (res != 0) goto failed;
7285 Py_CLEAR(tmp);
7286 }
Victor Stinner74419f02020-07-03 11:35:37 +02007287 if (_PyObject_LookupAttr(obj, state->value, &tmp) < 0) {
Emily Morehouse8f59ee02019-01-24 16:49:56 -07007288 return 1;
7289 }
7290 if (tmp == NULL) {
7291 PyErr_SetString(PyExc_TypeError, "required field \"value\" missing from NamedExpr");
7292 return 1;
7293 }
7294 else {
7295 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02007296 res = obj2ast_expr(state, tmp, &value, arena);
Emily Morehouse8f59ee02019-01-24 16:49:56 -07007297 if (res != 0) goto failed;
7298 Py_CLEAR(tmp);
7299 }
7300 *out = NamedExpr(target, value, lineno, col_offset, end_lineno,
7301 end_col_offset, arena);
7302 if (*out == NULL) goto failed;
7303 return 0;
7304 }
Victor Stinner74419f02020-07-03 11:35:37 +02007305 tp = state->BinOp_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07007306 isinstance = PyObject_IsInstance(obj, tp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007307 if (isinstance == -1) {
7308 return 1;
7309 }
7310 if (isinstance) {
7311 expr_ty left;
7312 operator_ty op;
7313 expr_ty right;
7314
Victor Stinner74419f02020-07-03 11:35:37 +02007315 if (_PyObject_LookupAttr(obj, state->left, &tmp) < 0) {
Serhiy Storchakaf320be72018-01-25 10:49:40 +02007316 return 1;
7317 }
7318 if (tmp == NULL) {
7319 PyErr_SetString(PyExc_TypeError, "required field \"left\" missing from BinOp");
7320 return 1;
7321 }
7322 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007323 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02007324 res = obj2ast_expr(state, tmp, &left, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007325 if (res != 0) goto failed;
Victor Stinner1acc1292013-07-27 00:03:47 +02007326 Py_CLEAR(tmp);
Serhiy Storchakaf320be72018-01-25 10:49:40 +02007327 }
Victor Stinner74419f02020-07-03 11:35:37 +02007328 if (_PyObject_LookupAttr(obj, state->op, &tmp) < 0) {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007329 return 1;
7330 }
Serhiy Storchakaf320be72018-01-25 10:49:40 +02007331 if (tmp == NULL) {
7332 PyErr_SetString(PyExc_TypeError, "required field \"op\" missing from BinOp");
7333 return 1;
7334 }
7335 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007336 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02007337 res = obj2ast_operator(state, tmp, &op, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007338 if (res != 0) goto failed;
Victor Stinner1acc1292013-07-27 00:03:47 +02007339 Py_CLEAR(tmp);
Serhiy Storchakaf320be72018-01-25 10:49:40 +02007340 }
Victor Stinner74419f02020-07-03 11:35:37 +02007341 if (_PyObject_LookupAttr(obj, state->right, &tmp) < 0) {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007342 return 1;
7343 }
Serhiy Storchakaf320be72018-01-25 10:49:40 +02007344 if (tmp == NULL) {
7345 PyErr_SetString(PyExc_TypeError, "required field \"right\" missing from BinOp");
7346 return 1;
7347 }
7348 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007349 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02007350 res = obj2ast_expr(state, tmp, &right, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007351 if (res != 0) goto failed;
Victor Stinner1acc1292013-07-27 00:03:47 +02007352 Py_CLEAR(tmp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007353 }
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00007354 *out = BinOp(left, op, right, lineno, col_offset, end_lineno,
7355 end_col_offset, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007356 if (*out == NULL) goto failed;
7357 return 0;
7358 }
Victor Stinner74419f02020-07-03 11:35:37 +02007359 tp = state->UnaryOp_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07007360 isinstance = PyObject_IsInstance(obj, tp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007361 if (isinstance == -1) {
7362 return 1;
7363 }
7364 if (isinstance) {
7365 unaryop_ty op;
7366 expr_ty operand;
7367
Victor Stinner74419f02020-07-03 11:35:37 +02007368 if (_PyObject_LookupAttr(obj, state->op, &tmp) < 0) {
Serhiy Storchakaf320be72018-01-25 10:49:40 +02007369 return 1;
7370 }
7371 if (tmp == NULL) {
7372 PyErr_SetString(PyExc_TypeError, "required field \"op\" missing from UnaryOp");
7373 return 1;
7374 }
7375 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007376 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02007377 res = obj2ast_unaryop(state, tmp, &op, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007378 if (res != 0) goto failed;
Victor Stinner1acc1292013-07-27 00:03:47 +02007379 Py_CLEAR(tmp);
Serhiy Storchakaf320be72018-01-25 10:49:40 +02007380 }
Victor Stinner74419f02020-07-03 11:35:37 +02007381 if (_PyObject_LookupAttr(obj, state->operand, &tmp) < 0) {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007382 return 1;
7383 }
Serhiy Storchakaf320be72018-01-25 10:49:40 +02007384 if (tmp == NULL) {
7385 PyErr_SetString(PyExc_TypeError, "required field \"operand\" missing from UnaryOp");
7386 return 1;
7387 }
7388 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007389 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02007390 res = obj2ast_expr(state, tmp, &operand, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007391 if (res != 0) goto failed;
Victor Stinner1acc1292013-07-27 00:03:47 +02007392 Py_CLEAR(tmp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007393 }
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00007394 *out = UnaryOp(op, operand, lineno, col_offset, end_lineno,
7395 end_col_offset, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007396 if (*out == NULL) goto failed;
7397 return 0;
7398 }
Victor Stinner74419f02020-07-03 11:35:37 +02007399 tp = state->Lambda_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07007400 isinstance = PyObject_IsInstance(obj, tp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007401 if (isinstance == -1) {
7402 return 1;
7403 }
7404 if (isinstance) {
7405 arguments_ty args;
7406 expr_ty body;
7407
Victor Stinner74419f02020-07-03 11:35:37 +02007408 if (_PyObject_LookupAttr(obj, state->args, &tmp) < 0) {
Serhiy Storchakaf320be72018-01-25 10:49:40 +02007409 return 1;
7410 }
7411 if (tmp == NULL) {
7412 PyErr_SetString(PyExc_TypeError, "required field \"args\" missing from Lambda");
7413 return 1;
7414 }
7415 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007416 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02007417 res = obj2ast_arguments(state, tmp, &args, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007418 if (res != 0) goto failed;
Victor Stinner1acc1292013-07-27 00:03:47 +02007419 Py_CLEAR(tmp);
Serhiy Storchakaf320be72018-01-25 10:49:40 +02007420 }
Victor Stinner74419f02020-07-03 11:35:37 +02007421 if (_PyObject_LookupAttr(obj, state->body, &tmp) < 0) {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007422 return 1;
7423 }
Serhiy Storchakaf320be72018-01-25 10:49:40 +02007424 if (tmp == NULL) {
7425 PyErr_SetString(PyExc_TypeError, "required field \"body\" missing from Lambda");
7426 return 1;
7427 }
7428 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007429 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02007430 res = obj2ast_expr(state, tmp, &body, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007431 if (res != 0) goto failed;
Victor Stinner1acc1292013-07-27 00:03:47 +02007432 Py_CLEAR(tmp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007433 }
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00007434 *out = Lambda(args, body, lineno, col_offset, end_lineno,
7435 end_col_offset, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007436 if (*out == NULL) goto failed;
7437 return 0;
7438 }
Victor Stinner74419f02020-07-03 11:35:37 +02007439 tp = state->IfExp_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07007440 isinstance = PyObject_IsInstance(obj, tp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007441 if (isinstance == -1) {
7442 return 1;
7443 }
7444 if (isinstance) {
7445 expr_ty test;
7446 expr_ty body;
7447 expr_ty orelse;
7448
Victor Stinner74419f02020-07-03 11:35:37 +02007449 if (_PyObject_LookupAttr(obj, state->test, &tmp) < 0) {
Serhiy Storchakaf320be72018-01-25 10:49:40 +02007450 return 1;
7451 }
7452 if (tmp == NULL) {
7453 PyErr_SetString(PyExc_TypeError, "required field \"test\" missing from IfExp");
7454 return 1;
7455 }
7456 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007457 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02007458 res = obj2ast_expr(state, tmp, &test, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007459 if (res != 0) goto failed;
Victor Stinner1acc1292013-07-27 00:03:47 +02007460 Py_CLEAR(tmp);
Serhiy Storchakaf320be72018-01-25 10:49:40 +02007461 }
Victor Stinner74419f02020-07-03 11:35:37 +02007462 if (_PyObject_LookupAttr(obj, state->body, &tmp) < 0) {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007463 return 1;
7464 }
Serhiy Storchakaf320be72018-01-25 10:49:40 +02007465 if (tmp == NULL) {
7466 PyErr_SetString(PyExc_TypeError, "required field \"body\" missing from IfExp");
7467 return 1;
7468 }
7469 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007470 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02007471 res = obj2ast_expr(state, tmp, &body, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007472 if (res != 0) goto failed;
Victor Stinner1acc1292013-07-27 00:03:47 +02007473 Py_CLEAR(tmp);
Serhiy Storchakaf320be72018-01-25 10:49:40 +02007474 }
Victor Stinner74419f02020-07-03 11:35:37 +02007475 if (_PyObject_LookupAttr(obj, state->orelse, &tmp) < 0) {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007476 return 1;
7477 }
Serhiy Storchakaf320be72018-01-25 10:49:40 +02007478 if (tmp == NULL) {
7479 PyErr_SetString(PyExc_TypeError, "required field \"orelse\" missing from IfExp");
7480 return 1;
7481 }
7482 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007483 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02007484 res = obj2ast_expr(state, tmp, &orelse, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007485 if (res != 0) goto failed;
Victor Stinner1acc1292013-07-27 00:03:47 +02007486 Py_CLEAR(tmp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007487 }
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00007488 *out = IfExp(test, body, orelse, lineno, col_offset, end_lineno,
7489 end_col_offset, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007490 if (*out == NULL) goto failed;
7491 return 0;
7492 }
Victor Stinner74419f02020-07-03 11:35:37 +02007493 tp = state->Dict_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07007494 isinstance = PyObject_IsInstance(obj, tp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007495 if (isinstance == -1) {
7496 return 1;
7497 }
7498 if (isinstance) {
Pablo Galindoa5634c42020-09-16 19:42:00 +01007499 asdl_expr_seq* keys;
7500 asdl_expr_seq* values;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007501
Victor Stinner74419f02020-07-03 11:35:37 +02007502 if (_PyObject_LookupAttr(obj, state->keys, &tmp) < 0) {
Serhiy Storchakaf320be72018-01-25 10:49:40 +02007503 return 1;
7504 }
7505 if (tmp == NULL) {
7506 PyErr_SetString(PyExc_TypeError, "required field \"keys\" missing from Dict");
7507 return 1;
7508 }
7509 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007510 int res;
7511 Py_ssize_t len;
7512 Py_ssize_t i;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007513 if (!PyList_Check(tmp)) {
Dino Viehlandac46eb42019-09-11 10:16:34 -07007514 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 +02007515 goto failed;
7516 }
7517 len = PyList_GET_SIZE(tmp);
Pablo Galindoa5634c42020-09-16 19:42:00 +01007518 keys = _Py_asdl_expr_seq_new(len, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007519 if (keys == NULL) goto failed;
7520 for (i = 0; i < len; i++) {
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07007521 expr_ty val;
Serhiy Storchaka43c97312019-09-10 13:02:30 +03007522 PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
7523 Py_INCREF(tmp2);
Victor Stinner74419f02020-07-03 11:35:37 +02007524 res = obj2ast_expr(state, tmp2, &val, arena);
Serhiy Storchaka43c97312019-09-10 13:02:30 +03007525 Py_DECREF(tmp2);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007526 if (res != 0) goto failed;
Serhiy Storchakacf380602016-10-07 21:51:28 +03007527 if (len != PyList_GET_SIZE(tmp)) {
7528 PyErr_SetString(PyExc_RuntimeError, "Dict field \"keys\" changed size during iteration");
7529 goto failed;
7530 }
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07007531 asdl_seq_SET(keys, i, val);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007532 }
Victor Stinner1acc1292013-07-27 00:03:47 +02007533 Py_CLEAR(tmp);
Serhiy Storchakaf320be72018-01-25 10:49:40 +02007534 }
Victor Stinner74419f02020-07-03 11:35:37 +02007535 if (_PyObject_LookupAttr(obj, state->values, &tmp) < 0) {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007536 return 1;
7537 }
Serhiy Storchakaf320be72018-01-25 10:49:40 +02007538 if (tmp == NULL) {
7539 PyErr_SetString(PyExc_TypeError, "required field \"values\" missing from Dict");
7540 return 1;
7541 }
7542 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007543 int res;
7544 Py_ssize_t len;
7545 Py_ssize_t i;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007546 if (!PyList_Check(tmp)) {
Dino Viehlandac46eb42019-09-11 10:16:34 -07007547 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 +02007548 goto failed;
7549 }
7550 len = PyList_GET_SIZE(tmp);
Pablo Galindoa5634c42020-09-16 19:42:00 +01007551 values = _Py_asdl_expr_seq_new(len, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007552 if (values == NULL) goto failed;
7553 for (i = 0; i < len; i++) {
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07007554 expr_ty val;
Serhiy Storchaka43c97312019-09-10 13:02:30 +03007555 PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
7556 Py_INCREF(tmp2);
Victor Stinner74419f02020-07-03 11:35:37 +02007557 res = obj2ast_expr(state, tmp2, &val, arena);
Serhiy Storchaka43c97312019-09-10 13:02:30 +03007558 Py_DECREF(tmp2);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007559 if (res != 0) goto failed;
Serhiy Storchakacf380602016-10-07 21:51:28 +03007560 if (len != PyList_GET_SIZE(tmp)) {
7561 PyErr_SetString(PyExc_RuntimeError, "Dict field \"values\" changed size during iteration");
7562 goto failed;
7563 }
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07007564 asdl_seq_SET(values, i, val);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007565 }
Victor Stinner1acc1292013-07-27 00:03:47 +02007566 Py_CLEAR(tmp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007567 }
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00007568 *out = Dict(keys, values, lineno, col_offset, end_lineno,
7569 end_col_offset, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007570 if (*out == NULL) goto failed;
7571 return 0;
7572 }
Victor Stinner74419f02020-07-03 11:35:37 +02007573 tp = state->Set_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07007574 isinstance = PyObject_IsInstance(obj, tp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007575 if (isinstance == -1) {
7576 return 1;
7577 }
7578 if (isinstance) {
Pablo Galindoa5634c42020-09-16 19:42:00 +01007579 asdl_expr_seq* elts;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007580
Victor Stinner74419f02020-07-03 11:35:37 +02007581 if (_PyObject_LookupAttr(obj, state->elts, &tmp) < 0) {
Serhiy Storchakaf320be72018-01-25 10:49:40 +02007582 return 1;
7583 }
7584 if (tmp == NULL) {
7585 PyErr_SetString(PyExc_TypeError, "required field \"elts\" missing from Set");
7586 return 1;
7587 }
7588 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007589 int res;
7590 Py_ssize_t len;
7591 Py_ssize_t i;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007592 if (!PyList_Check(tmp)) {
Dino Viehlandac46eb42019-09-11 10:16:34 -07007593 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 +02007594 goto failed;
7595 }
7596 len = PyList_GET_SIZE(tmp);
Pablo Galindoa5634c42020-09-16 19:42:00 +01007597 elts = _Py_asdl_expr_seq_new(len, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007598 if (elts == NULL) goto failed;
7599 for (i = 0; i < len; i++) {
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07007600 expr_ty val;
Serhiy Storchaka43c97312019-09-10 13:02:30 +03007601 PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
7602 Py_INCREF(tmp2);
Victor Stinner74419f02020-07-03 11:35:37 +02007603 res = obj2ast_expr(state, tmp2, &val, arena);
Serhiy Storchaka43c97312019-09-10 13:02:30 +03007604 Py_DECREF(tmp2);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007605 if (res != 0) goto failed;
Serhiy Storchakacf380602016-10-07 21:51:28 +03007606 if (len != PyList_GET_SIZE(tmp)) {
7607 PyErr_SetString(PyExc_RuntimeError, "Set field \"elts\" changed size during iteration");
7608 goto failed;
7609 }
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07007610 asdl_seq_SET(elts, i, val);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007611 }
Victor Stinner1acc1292013-07-27 00:03:47 +02007612 Py_CLEAR(tmp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007613 }
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00007614 *out = Set(elts, lineno, col_offset, end_lineno, end_col_offset, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007615 if (*out == NULL) goto failed;
7616 return 0;
7617 }
Victor Stinner74419f02020-07-03 11:35:37 +02007618 tp = state->ListComp_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07007619 isinstance = PyObject_IsInstance(obj, tp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007620 if (isinstance == -1) {
7621 return 1;
7622 }
7623 if (isinstance) {
7624 expr_ty elt;
Pablo Galindoa5634c42020-09-16 19:42:00 +01007625 asdl_comprehension_seq* generators;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007626
Victor Stinner74419f02020-07-03 11:35:37 +02007627 if (_PyObject_LookupAttr(obj, state->elt, &tmp) < 0) {
Serhiy Storchakaf320be72018-01-25 10:49:40 +02007628 return 1;
7629 }
7630 if (tmp == NULL) {
7631 PyErr_SetString(PyExc_TypeError, "required field \"elt\" missing from ListComp");
7632 return 1;
7633 }
7634 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007635 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02007636 res = obj2ast_expr(state, tmp, &elt, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007637 if (res != 0) goto failed;
Victor Stinner1acc1292013-07-27 00:03:47 +02007638 Py_CLEAR(tmp);
Serhiy Storchakaf320be72018-01-25 10:49:40 +02007639 }
Victor Stinner74419f02020-07-03 11:35:37 +02007640 if (_PyObject_LookupAttr(obj, state->generators, &tmp) < 0) {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007641 return 1;
7642 }
Serhiy Storchakaf320be72018-01-25 10:49:40 +02007643 if (tmp == NULL) {
7644 PyErr_SetString(PyExc_TypeError, "required field \"generators\" missing from ListComp");
7645 return 1;
7646 }
7647 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007648 int res;
7649 Py_ssize_t len;
7650 Py_ssize_t i;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007651 if (!PyList_Check(tmp)) {
Dino Viehlandac46eb42019-09-11 10:16:34 -07007652 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 +02007653 goto failed;
7654 }
7655 len = PyList_GET_SIZE(tmp);
Pablo Galindoa5634c42020-09-16 19:42:00 +01007656 generators = _Py_asdl_comprehension_seq_new(len, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007657 if (generators == NULL) goto failed;
7658 for (i = 0; i < len; i++) {
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07007659 comprehension_ty val;
Serhiy Storchaka43c97312019-09-10 13:02:30 +03007660 PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
7661 Py_INCREF(tmp2);
Victor Stinner74419f02020-07-03 11:35:37 +02007662 res = obj2ast_comprehension(state, tmp2, &val, arena);
Serhiy Storchaka43c97312019-09-10 13:02:30 +03007663 Py_DECREF(tmp2);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007664 if (res != 0) goto failed;
Serhiy Storchakacf380602016-10-07 21:51:28 +03007665 if (len != PyList_GET_SIZE(tmp)) {
7666 PyErr_SetString(PyExc_RuntimeError, "ListComp field \"generators\" changed size during iteration");
7667 goto failed;
7668 }
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07007669 asdl_seq_SET(generators, i, val);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007670 }
Victor Stinner1acc1292013-07-27 00:03:47 +02007671 Py_CLEAR(tmp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007672 }
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00007673 *out = ListComp(elt, generators, lineno, col_offset, end_lineno,
7674 end_col_offset, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007675 if (*out == NULL) goto failed;
7676 return 0;
7677 }
Victor Stinner74419f02020-07-03 11:35:37 +02007678 tp = state->SetComp_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07007679 isinstance = PyObject_IsInstance(obj, tp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007680 if (isinstance == -1) {
7681 return 1;
7682 }
7683 if (isinstance) {
7684 expr_ty elt;
Pablo Galindoa5634c42020-09-16 19:42:00 +01007685 asdl_comprehension_seq* generators;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007686
Victor Stinner74419f02020-07-03 11:35:37 +02007687 if (_PyObject_LookupAttr(obj, state->elt, &tmp) < 0) {
Serhiy Storchakaf320be72018-01-25 10:49:40 +02007688 return 1;
7689 }
7690 if (tmp == NULL) {
7691 PyErr_SetString(PyExc_TypeError, "required field \"elt\" missing from SetComp");
7692 return 1;
7693 }
7694 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007695 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02007696 res = obj2ast_expr(state, tmp, &elt, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007697 if (res != 0) goto failed;
Victor Stinner1acc1292013-07-27 00:03:47 +02007698 Py_CLEAR(tmp);
Serhiy Storchakaf320be72018-01-25 10:49:40 +02007699 }
Victor Stinner74419f02020-07-03 11:35:37 +02007700 if (_PyObject_LookupAttr(obj, state->generators, &tmp) < 0) {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007701 return 1;
7702 }
Serhiy Storchakaf320be72018-01-25 10:49:40 +02007703 if (tmp == NULL) {
7704 PyErr_SetString(PyExc_TypeError, "required field \"generators\" missing from SetComp");
7705 return 1;
7706 }
7707 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007708 int res;
7709 Py_ssize_t len;
7710 Py_ssize_t i;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007711 if (!PyList_Check(tmp)) {
Dino Viehlandac46eb42019-09-11 10:16:34 -07007712 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 +02007713 goto failed;
7714 }
7715 len = PyList_GET_SIZE(tmp);
Pablo Galindoa5634c42020-09-16 19:42:00 +01007716 generators = _Py_asdl_comprehension_seq_new(len, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007717 if (generators == NULL) goto failed;
7718 for (i = 0; i < len; i++) {
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07007719 comprehension_ty val;
Serhiy Storchaka43c97312019-09-10 13:02:30 +03007720 PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
7721 Py_INCREF(tmp2);
Victor Stinner74419f02020-07-03 11:35:37 +02007722 res = obj2ast_comprehension(state, tmp2, &val, arena);
Serhiy Storchaka43c97312019-09-10 13:02:30 +03007723 Py_DECREF(tmp2);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007724 if (res != 0) goto failed;
Serhiy Storchakacf380602016-10-07 21:51:28 +03007725 if (len != PyList_GET_SIZE(tmp)) {
7726 PyErr_SetString(PyExc_RuntimeError, "SetComp field \"generators\" changed size during iteration");
7727 goto failed;
7728 }
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07007729 asdl_seq_SET(generators, i, val);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007730 }
Victor Stinner1acc1292013-07-27 00:03:47 +02007731 Py_CLEAR(tmp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007732 }
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00007733 *out = SetComp(elt, generators, lineno, col_offset, end_lineno,
7734 end_col_offset, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007735 if (*out == NULL) goto failed;
7736 return 0;
7737 }
Victor Stinner74419f02020-07-03 11:35:37 +02007738 tp = state->DictComp_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07007739 isinstance = PyObject_IsInstance(obj, tp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007740 if (isinstance == -1) {
7741 return 1;
7742 }
7743 if (isinstance) {
7744 expr_ty key;
7745 expr_ty value;
Pablo Galindoa5634c42020-09-16 19:42:00 +01007746 asdl_comprehension_seq* generators;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007747
Victor Stinner74419f02020-07-03 11:35:37 +02007748 if (_PyObject_LookupAttr(obj, state->key, &tmp) < 0) {
Serhiy Storchakaf320be72018-01-25 10:49:40 +02007749 return 1;
7750 }
7751 if (tmp == NULL) {
7752 PyErr_SetString(PyExc_TypeError, "required field \"key\" missing from DictComp");
7753 return 1;
7754 }
7755 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007756 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02007757 res = obj2ast_expr(state, tmp, &key, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007758 if (res != 0) goto failed;
Victor Stinner1acc1292013-07-27 00:03:47 +02007759 Py_CLEAR(tmp);
Serhiy Storchakaf320be72018-01-25 10:49:40 +02007760 }
Victor Stinner74419f02020-07-03 11:35:37 +02007761 if (_PyObject_LookupAttr(obj, state->value, &tmp) < 0) {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007762 return 1;
7763 }
Serhiy Storchakaf320be72018-01-25 10:49:40 +02007764 if (tmp == NULL) {
7765 PyErr_SetString(PyExc_TypeError, "required field \"value\" missing from DictComp");
7766 return 1;
7767 }
7768 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007769 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02007770 res = obj2ast_expr(state, tmp, &value, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007771 if (res != 0) goto failed;
Victor Stinner1acc1292013-07-27 00:03:47 +02007772 Py_CLEAR(tmp);
Serhiy Storchakaf320be72018-01-25 10:49:40 +02007773 }
Victor Stinner74419f02020-07-03 11:35:37 +02007774 if (_PyObject_LookupAttr(obj, state->generators, &tmp) < 0) {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007775 return 1;
7776 }
Serhiy Storchakaf320be72018-01-25 10:49:40 +02007777 if (tmp == NULL) {
7778 PyErr_SetString(PyExc_TypeError, "required field \"generators\" missing from DictComp");
7779 return 1;
7780 }
7781 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007782 int res;
7783 Py_ssize_t len;
7784 Py_ssize_t i;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007785 if (!PyList_Check(tmp)) {
Dino Viehlandac46eb42019-09-11 10:16:34 -07007786 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 +02007787 goto failed;
7788 }
7789 len = PyList_GET_SIZE(tmp);
Pablo Galindoa5634c42020-09-16 19:42:00 +01007790 generators = _Py_asdl_comprehension_seq_new(len, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007791 if (generators == NULL) goto failed;
7792 for (i = 0; i < len; i++) {
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07007793 comprehension_ty val;
Serhiy Storchaka43c97312019-09-10 13:02:30 +03007794 PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
7795 Py_INCREF(tmp2);
Victor Stinner74419f02020-07-03 11:35:37 +02007796 res = obj2ast_comprehension(state, tmp2, &val, arena);
Serhiy Storchaka43c97312019-09-10 13:02:30 +03007797 Py_DECREF(tmp2);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007798 if (res != 0) goto failed;
Serhiy Storchakacf380602016-10-07 21:51:28 +03007799 if (len != PyList_GET_SIZE(tmp)) {
7800 PyErr_SetString(PyExc_RuntimeError, "DictComp field \"generators\" changed size during iteration");
7801 goto failed;
7802 }
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07007803 asdl_seq_SET(generators, i, val);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007804 }
Victor Stinner1acc1292013-07-27 00:03:47 +02007805 Py_CLEAR(tmp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007806 }
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00007807 *out = DictComp(key, value, generators, lineno, col_offset, end_lineno,
7808 end_col_offset, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007809 if (*out == NULL) goto failed;
7810 return 0;
7811 }
Victor Stinner74419f02020-07-03 11:35:37 +02007812 tp = state->GeneratorExp_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07007813 isinstance = PyObject_IsInstance(obj, tp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007814 if (isinstance == -1) {
7815 return 1;
7816 }
7817 if (isinstance) {
7818 expr_ty elt;
Pablo Galindoa5634c42020-09-16 19:42:00 +01007819 asdl_comprehension_seq* generators;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007820
Victor Stinner74419f02020-07-03 11:35:37 +02007821 if (_PyObject_LookupAttr(obj, state->elt, &tmp) < 0) {
Serhiy Storchakaf320be72018-01-25 10:49:40 +02007822 return 1;
7823 }
7824 if (tmp == NULL) {
7825 PyErr_SetString(PyExc_TypeError, "required field \"elt\" missing from GeneratorExp");
7826 return 1;
7827 }
7828 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007829 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02007830 res = obj2ast_expr(state, tmp, &elt, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007831 if (res != 0) goto failed;
Victor Stinner1acc1292013-07-27 00:03:47 +02007832 Py_CLEAR(tmp);
Serhiy Storchakaf320be72018-01-25 10:49:40 +02007833 }
Victor Stinner74419f02020-07-03 11:35:37 +02007834 if (_PyObject_LookupAttr(obj, state->generators, &tmp) < 0) {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007835 return 1;
7836 }
Serhiy Storchakaf320be72018-01-25 10:49:40 +02007837 if (tmp == NULL) {
7838 PyErr_SetString(PyExc_TypeError, "required field \"generators\" missing from GeneratorExp");
7839 return 1;
7840 }
7841 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007842 int res;
7843 Py_ssize_t len;
7844 Py_ssize_t i;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007845 if (!PyList_Check(tmp)) {
Dino Viehlandac46eb42019-09-11 10:16:34 -07007846 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 +02007847 goto failed;
7848 }
7849 len = PyList_GET_SIZE(tmp);
Pablo Galindoa5634c42020-09-16 19:42:00 +01007850 generators = _Py_asdl_comprehension_seq_new(len, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007851 if (generators == NULL) goto failed;
7852 for (i = 0; i < len; i++) {
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07007853 comprehension_ty val;
Serhiy Storchaka43c97312019-09-10 13:02:30 +03007854 PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
7855 Py_INCREF(tmp2);
Victor Stinner74419f02020-07-03 11:35:37 +02007856 res = obj2ast_comprehension(state, tmp2, &val, arena);
Serhiy Storchaka43c97312019-09-10 13:02:30 +03007857 Py_DECREF(tmp2);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007858 if (res != 0) goto failed;
Serhiy Storchakacf380602016-10-07 21:51:28 +03007859 if (len != PyList_GET_SIZE(tmp)) {
7860 PyErr_SetString(PyExc_RuntimeError, "GeneratorExp field \"generators\" changed size during iteration");
7861 goto failed;
7862 }
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07007863 asdl_seq_SET(generators, i, val);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007864 }
Victor Stinner1acc1292013-07-27 00:03:47 +02007865 Py_CLEAR(tmp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007866 }
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00007867 *out = GeneratorExp(elt, generators, lineno, col_offset, end_lineno,
7868 end_col_offset, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007869 if (*out == NULL) goto failed;
7870 return 0;
7871 }
Victor Stinner74419f02020-07-03 11:35:37 +02007872 tp = state->Await_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07007873 isinstance = PyObject_IsInstance(obj, tp);
Yury Selivanov75445082015-05-11 22:57:16 -04007874 if (isinstance == -1) {
7875 return 1;
7876 }
7877 if (isinstance) {
7878 expr_ty value;
7879
Victor Stinner74419f02020-07-03 11:35:37 +02007880 if (_PyObject_LookupAttr(obj, state->value, &tmp) < 0) {
Serhiy Storchakaf320be72018-01-25 10:49:40 +02007881 return 1;
7882 }
7883 if (tmp == NULL) {
7884 PyErr_SetString(PyExc_TypeError, "required field \"value\" missing from Await");
7885 return 1;
7886 }
7887 else {
Yury Selivanov75445082015-05-11 22:57:16 -04007888 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02007889 res = obj2ast_expr(state, tmp, &value, arena);
Yury Selivanov75445082015-05-11 22:57:16 -04007890 if (res != 0) goto failed;
7891 Py_CLEAR(tmp);
Yury Selivanov75445082015-05-11 22:57:16 -04007892 }
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00007893 *out = Await(value, lineno, col_offset, end_lineno, end_col_offset,
7894 arena);
Yury Selivanov75445082015-05-11 22:57:16 -04007895 if (*out == NULL) goto failed;
7896 return 0;
7897 }
Victor Stinner74419f02020-07-03 11:35:37 +02007898 tp = state->Yield_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07007899 isinstance = PyObject_IsInstance(obj, tp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007900 if (isinstance == -1) {
7901 return 1;
7902 }
7903 if (isinstance) {
7904 expr_ty value;
7905
Victor Stinner74419f02020-07-03 11:35:37 +02007906 if (_PyObject_LookupAttr(obj, state->value, &tmp) < 0) {
Serhiy Storchakaf320be72018-01-25 10:49:40 +02007907 return 1;
7908 }
7909 if (tmp == NULL || tmp == Py_None) {
7910 Py_CLEAR(tmp);
7911 value = NULL;
7912 }
7913 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007914 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02007915 res = obj2ast_expr(state, tmp, &value, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007916 if (res != 0) goto failed;
Victor Stinner1acc1292013-07-27 00:03:47 +02007917 Py_CLEAR(tmp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007918 }
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00007919 *out = Yield(value, lineno, col_offset, end_lineno, end_col_offset,
7920 arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007921 if (*out == NULL) goto failed;
7922 return 0;
7923 }
Victor Stinner74419f02020-07-03 11:35:37 +02007924 tp = state->YieldFrom_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07007925 isinstance = PyObject_IsInstance(obj, tp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007926 if (isinstance == -1) {
7927 return 1;
7928 }
7929 if (isinstance) {
7930 expr_ty value;
7931
Victor Stinner74419f02020-07-03 11:35:37 +02007932 if (_PyObject_LookupAttr(obj, state->value, &tmp) < 0) {
Serhiy Storchakaf320be72018-01-25 10:49:40 +02007933 return 1;
7934 }
7935 if (tmp == NULL) {
7936 PyErr_SetString(PyExc_TypeError, "required field \"value\" missing from YieldFrom");
7937 return 1;
7938 }
7939 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007940 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02007941 res = obj2ast_expr(state, tmp, &value, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007942 if (res != 0) goto failed;
Victor Stinner1acc1292013-07-27 00:03:47 +02007943 Py_CLEAR(tmp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007944 }
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00007945 *out = YieldFrom(value, lineno, col_offset, end_lineno, end_col_offset,
7946 arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007947 if (*out == NULL) goto failed;
7948 return 0;
7949 }
Victor Stinner74419f02020-07-03 11:35:37 +02007950 tp = state->Compare_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07007951 isinstance = PyObject_IsInstance(obj, tp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007952 if (isinstance == -1) {
7953 return 1;
7954 }
7955 if (isinstance) {
7956 expr_ty left;
7957 asdl_int_seq* ops;
Pablo Galindoa5634c42020-09-16 19:42:00 +01007958 asdl_expr_seq* comparators;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007959
Victor Stinner74419f02020-07-03 11:35:37 +02007960 if (_PyObject_LookupAttr(obj, state->left, &tmp) < 0) {
Serhiy Storchakaf320be72018-01-25 10:49:40 +02007961 return 1;
7962 }
7963 if (tmp == NULL) {
7964 PyErr_SetString(PyExc_TypeError, "required field \"left\" missing from Compare");
7965 return 1;
7966 }
7967 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007968 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02007969 res = obj2ast_expr(state, tmp, &left, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007970 if (res != 0) goto failed;
Victor Stinner1acc1292013-07-27 00:03:47 +02007971 Py_CLEAR(tmp);
Serhiy Storchakaf320be72018-01-25 10:49:40 +02007972 }
Victor Stinner74419f02020-07-03 11:35:37 +02007973 if (_PyObject_LookupAttr(obj, state->ops, &tmp) < 0) {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007974 return 1;
7975 }
Serhiy Storchakaf320be72018-01-25 10:49:40 +02007976 if (tmp == NULL) {
7977 PyErr_SetString(PyExc_TypeError, "required field \"ops\" missing from Compare");
7978 return 1;
7979 }
7980 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007981 int res;
7982 Py_ssize_t len;
7983 Py_ssize_t i;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007984 if (!PyList_Check(tmp)) {
Dino Viehlandac46eb42019-09-11 10:16:34 -07007985 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 +02007986 goto failed;
7987 }
7988 len = PyList_GET_SIZE(tmp);
Antoine Pitroud01d396e2013-10-12 22:52:43 +02007989 ops = _Py_asdl_int_seq_new(len, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007990 if (ops == NULL) goto failed;
7991 for (i = 0; i < len; i++) {
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07007992 cmpop_ty val;
Serhiy Storchaka43c97312019-09-10 13:02:30 +03007993 PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
7994 Py_INCREF(tmp2);
Victor Stinner74419f02020-07-03 11:35:37 +02007995 res = obj2ast_cmpop(state, tmp2, &val, arena);
Serhiy Storchaka43c97312019-09-10 13:02:30 +03007996 Py_DECREF(tmp2);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02007997 if (res != 0) goto failed;
Serhiy Storchakacf380602016-10-07 21:51:28 +03007998 if (len != PyList_GET_SIZE(tmp)) {
7999 PyErr_SetString(PyExc_RuntimeError, "Compare field \"ops\" changed size during iteration");
8000 goto failed;
8001 }
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07008002 asdl_seq_SET(ops, i, val);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008003 }
Victor Stinner1acc1292013-07-27 00:03:47 +02008004 Py_CLEAR(tmp);
Serhiy Storchakaf320be72018-01-25 10:49:40 +02008005 }
Victor Stinner74419f02020-07-03 11:35:37 +02008006 if (_PyObject_LookupAttr(obj, state->comparators, &tmp) < 0) {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008007 return 1;
8008 }
Serhiy Storchakaf320be72018-01-25 10:49:40 +02008009 if (tmp == NULL) {
8010 PyErr_SetString(PyExc_TypeError, "required field \"comparators\" missing from Compare");
8011 return 1;
8012 }
8013 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008014 int res;
8015 Py_ssize_t len;
8016 Py_ssize_t i;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008017 if (!PyList_Check(tmp)) {
Dino Viehlandac46eb42019-09-11 10:16:34 -07008018 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 +02008019 goto failed;
8020 }
8021 len = PyList_GET_SIZE(tmp);
Pablo Galindoa5634c42020-09-16 19:42:00 +01008022 comparators = _Py_asdl_expr_seq_new(len, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008023 if (comparators == NULL) goto failed;
8024 for (i = 0; i < len; i++) {
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07008025 expr_ty val;
Serhiy Storchaka43c97312019-09-10 13:02:30 +03008026 PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
8027 Py_INCREF(tmp2);
Victor Stinner74419f02020-07-03 11:35:37 +02008028 res = obj2ast_expr(state, tmp2, &val, arena);
Serhiy Storchaka43c97312019-09-10 13:02:30 +03008029 Py_DECREF(tmp2);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008030 if (res != 0) goto failed;
Serhiy Storchakacf380602016-10-07 21:51:28 +03008031 if (len != PyList_GET_SIZE(tmp)) {
8032 PyErr_SetString(PyExc_RuntimeError, "Compare field \"comparators\" changed size during iteration");
8033 goto failed;
8034 }
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07008035 asdl_seq_SET(comparators, i, val);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008036 }
Victor Stinner1acc1292013-07-27 00:03:47 +02008037 Py_CLEAR(tmp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008038 }
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00008039 *out = Compare(left, ops, comparators, lineno, col_offset, end_lineno,
8040 end_col_offset, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008041 if (*out == NULL) goto failed;
8042 return 0;
8043 }
Victor Stinner74419f02020-07-03 11:35:37 +02008044 tp = state->Call_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07008045 isinstance = PyObject_IsInstance(obj, tp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008046 if (isinstance == -1) {
8047 return 1;
8048 }
8049 if (isinstance) {
8050 expr_ty func;
Pablo Galindoa5634c42020-09-16 19:42:00 +01008051 asdl_expr_seq* args;
8052 asdl_keyword_seq* keywords;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008053
Victor Stinner74419f02020-07-03 11:35:37 +02008054 if (_PyObject_LookupAttr(obj, state->func, &tmp) < 0) {
Serhiy Storchakaf320be72018-01-25 10:49:40 +02008055 return 1;
8056 }
8057 if (tmp == NULL) {
8058 PyErr_SetString(PyExc_TypeError, "required field \"func\" missing from Call");
8059 return 1;
8060 }
8061 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008062 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02008063 res = obj2ast_expr(state, tmp, &func, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008064 if (res != 0) goto failed;
Victor Stinner1acc1292013-07-27 00:03:47 +02008065 Py_CLEAR(tmp);
Serhiy Storchakaf320be72018-01-25 10:49:40 +02008066 }
Victor Stinner74419f02020-07-03 11:35:37 +02008067 if (_PyObject_LookupAttr(obj, state->args, &tmp) < 0) {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008068 return 1;
8069 }
Serhiy Storchakaf320be72018-01-25 10:49:40 +02008070 if (tmp == NULL) {
8071 PyErr_SetString(PyExc_TypeError, "required field \"args\" missing from Call");
8072 return 1;
8073 }
8074 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008075 int res;
8076 Py_ssize_t len;
8077 Py_ssize_t i;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008078 if (!PyList_Check(tmp)) {
Dino Viehlandac46eb42019-09-11 10:16:34 -07008079 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 +02008080 goto failed;
8081 }
8082 len = PyList_GET_SIZE(tmp);
Pablo Galindoa5634c42020-09-16 19:42:00 +01008083 args = _Py_asdl_expr_seq_new(len, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008084 if (args == NULL) goto failed;
8085 for (i = 0; i < len; i++) {
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07008086 expr_ty val;
Serhiy Storchaka43c97312019-09-10 13:02:30 +03008087 PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
8088 Py_INCREF(tmp2);
Victor Stinner74419f02020-07-03 11:35:37 +02008089 res = obj2ast_expr(state, tmp2, &val, arena);
Serhiy Storchaka43c97312019-09-10 13:02:30 +03008090 Py_DECREF(tmp2);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008091 if (res != 0) goto failed;
Serhiy Storchakacf380602016-10-07 21:51:28 +03008092 if (len != PyList_GET_SIZE(tmp)) {
8093 PyErr_SetString(PyExc_RuntimeError, "Call field \"args\" changed size during iteration");
8094 goto failed;
8095 }
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07008096 asdl_seq_SET(args, i, val);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008097 }
Victor Stinner1acc1292013-07-27 00:03:47 +02008098 Py_CLEAR(tmp);
Serhiy Storchakaf320be72018-01-25 10:49:40 +02008099 }
Victor Stinner74419f02020-07-03 11:35:37 +02008100 if (_PyObject_LookupAttr(obj, state->keywords, &tmp) < 0) {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008101 return 1;
8102 }
Serhiy Storchakaf320be72018-01-25 10:49:40 +02008103 if (tmp == NULL) {
8104 PyErr_SetString(PyExc_TypeError, "required field \"keywords\" missing from Call");
8105 return 1;
8106 }
8107 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008108 int res;
8109 Py_ssize_t len;
8110 Py_ssize_t i;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008111 if (!PyList_Check(tmp)) {
Dino Viehlandac46eb42019-09-11 10:16:34 -07008112 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 +02008113 goto failed;
8114 }
8115 len = PyList_GET_SIZE(tmp);
Pablo Galindoa5634c42020-09-16 19:42:00 +01008116 keywords = _Py_asdl_keyword_seq_new(len, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008117 if (keywords == NULL) goto failed;
8118 for (i = 0; i < len; i++) {
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07008119 keyword_ty val;
Serhiy Storchaka43c97312019-09-10 13:02:30 +03008120 PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
8121 Py_INCREF(tmp2);
Victor Stinner74419f02020-07-03 11:35:37 +02008122 res = obj2ast_keyword(state, tmp2, &val, arena);
Serhiy Storchaka43c97312019-09-10 13:02:30 +03008123 Py_DECREF(tmp2);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008124 if (res != 0) goto failed;
Serhiy Storchakacf380602016-10-07 21:51:28 +03008125 if (len != PyList_GET_SIZE(tmp)) {
8126 PyErr_SetString(PyExc_RuntimeError, "Call field \"keywords\" changed size during iteration");
8127 goto failed;
8128 }
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07008129 asdl_seq_SET(keywords, i, val);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008130 }
Victor Stinner1acc1292013-07-27 00:03:47 +02008131 Py_CLEAR(tmp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008132 }
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00008133 *out = Call(func, args, keywords, lineno, col_offset, end_lineno,
8134 end_col_offset, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008135 if (*out == NULL) goto failed;
8136 return 0;
8137 }
Victor Stinner74419f02020-07-03 11:35:37 +02008138 tp = state->FormattedValue_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07008139 isinstance = PyObject_IsInstance(obj, tp);
Eric V. Smith235a6f02015-09-19 14:51:32 -04008140 if (isinstance == -1) {
8141 return 1;
8142 }
8143 if (isinstance) {
8144 expr_ty value;
8145 int conversion;
8146 expr_ty format_spec;
8147
Victor Stinner74419f02020-07-03 11:35:37 +02008148 if (_PyObject_LookupAttr(obj, state->value, &tmp) < 0) {
Serhiy Storchakaf320be72018-01-25 10:49:40 +02008149 return 1;
8150 }
8151 if (tmp == NULL) {
8152 PyErr_SetString(PyExc_TypeError, "required field \"value\" missing from FormattedValue");
8153 return 1;
8154 }
8155 else {
Eric V. Smith235a6f02015-09-19 14:51:32 -04008156 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02008157 res = obj2ast_expr(state, tmp, &value, arena);
Eric V. Smith235a6f02015-09-19 14:51:32 -04008158 if (res != 0) goto failed;
8159 Py_CLEAR(tmp);
Serhiy Storchakaf320be72018-01-25 10:49:40 +02008160 }
Victor Stinner74419f02020-07-03 11:35:37 +02008161 if (_PyObject_LookupAttr(obj, state->conversion, &tmp) < 0) {
Eric V. Smith235a6f02015-09-19 14:51:32 -04008162 return 1;
8163 }
Serhiy Storchakaf320be72018-01-25 10:49:40 +02008164 if (tmp == NULL || tmp == Py_None) {
8165 Py_CLEAR(tmp);
8166 conversion = 0;
8167 }
8168 else {
Eric V. Smith235a6f02015-09-19 14:51:32 -04008169 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02008170 res = obj2ast_int(state, tmp, &conversion, arena);
Eric V. Smith235a6f02015-09-19 14:51:32 -04008171 if (res != 0) goto failed;
8172 Py_CLEAR(tmp);
Eric V. Smith235a6f02015-09-19 14:51:32 -04008173 }
Victor Stinner74419f02020-07-03 11:35:37 +02008174 if (_PyObject_LookupAttr(obj, state->format_spec, &tmp) < 0) {
Serhiy Storchakaf320be72018-01-25 10:49:40 +02008175 return 1;
8176 }
8177 if (tmp == NULL || tmp == Py_None) {
8178 Py_CLEAR(tmp);
8179 format_spec = NULL;
8180 }
8181 else {
Eric V. Smith235a6f02015-09-19 14:51:32 -04008182 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02008183 res = obj2ast_expr(state, tmp, &format_spec, arena);
Eric V. Smith235a6f02015-09-19 14:51:32 -04008184 if (res != 0) goto failed;
8185 Py_CLEAR(tmp);
Eric V. Smith235a6f02015-09-19 14:51:32 -04008186 }
Eric V. Smith6f6ff8a2019-05-27 15:31:52 -04008187 *out = FormattedValue(value, conversion, format_spec, lineno,
8188 col_offset, end_lineno, end_col_offset, arena);
Eric V. Smith235a6f02015-09-19 14:51:32 -04008189 if (*out == NULL) goto failed;
8190 return 0;
8191 }
Victor Stinner74419f02020-07-03 11:35:37 +02008192 tp = state->JoinedStr_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07008193 isinstance = PyObject_IsInstance(obj, tp);
Eric V. Smith235a6f02015-09-19 14:51:32 -04008194 if (isinstance == -1) {
8195 return 1;
8196 }
8197 if (isinstance) {
Pablo Galindoa5634c42020-09-16 19:42:00 +01008198 asdl_expr_seq* values;
Eric V. Smith235a6f02015-09-19 14:51:32 -04008199
Victor Stinner74419f02020-07-03 11:35:37 +02008200 if (_PyObject_LookupAttr(obj, state->values, &tmp) < 0) {
Serhiy Storchakaf320be72018-01-25 10:49:40 +02008201 return 1;
8202 }
8203 if (tmp == NULL) {
8204 PyErr_SetString(PyExc_TypeError, "required field \"values\" missing from JoinedStr");
8205 return 1;
8206 }
8207 else {
Eric V. Smith235a6f02015-09-19 14:51:32 -04008208 int res;
8209 Py_ssize_t len;
8210 Py_ssize_t i;
Eric V. Smith235a6f02015-09-19 14:51:32 -04008211 if (!PyList_Check(tmp)) {
Dino Viehlandac46eb42019-09-11 10:16:34 -07008212 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 -04008213 goto failed;
8214 }
8215 len = PyList_GET_SIZE(tmp);
Pablo Galindoa5634c42020-09-16 19:42:00 +01008216 values = _Py_asdl_expr_seq_new(len, arena);
Eric V. Smith235a6f02015-09-19 14:51:32 -04008217 if (values == NULL) goto failed;
8218 for (i = 0; i < len; i++) {
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07008219 expr_ty val;
Serhiy Storchaka43c97312019-09-10 13:02:30 +03008220 PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
8221 Py_INCREF(tmp2);
Victor Stinner74419f02020-07-03 11:35:37 +02008222 res = obj2ast_expr(state, tmp2, &val, arena);
Serhiy Storchaka43c97312019-09-10 13:02:30 +03008223 Py_DECREF(tmp2);
Eric V. Smith235a6f02015-09-19 14:51:32 -04008224 if (res != 0) goto failed;
Serhiy Storchaka5e808552016-10-07 21:55:49 +03008225 if (len != PyList_GET_SIZE(tmp)) {
8226 PyErr_SetString(PyExc_RuntimeError, "JoinedStr field \"values\" changed size during iteration");
8227 goto failed;
8228 }
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07008229 asdl_seq_SET(values, i, val);
Eric V. Smith235a6f02015-09-19 14:51:32 -04008230 }
8231 Py_CLEAR(tmp);
Eric V. Smith235a6f02015-09-19 14:51:32 -04008232 }
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00008233 *out = JoinedStr(values, lineno, col_offset, end_lineno,
8234 end_col_offset, arena);
Eric V. Smith235a6f02015-09-19 14:51:32 -04008235 if (*out == NULL) goto failed;
8236 return 0;
8237 }
Victor Stinner74419f02020-07-03 11:35:37 +02008238 tp = state->Constant_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07008239 isinstance = PyObject_IsInstance(obj, tp);
Victor Stinnerf2c1aa12016-01-26 00:40:57 +01008240 if (isinstance == -1) {
8241 return 1;
8242 }
8243 if (isinstance) {
8244 constant value;
Guido van Rossum10f8ce62019-03-13 13:00:46 -07008245 string kind;
Victor Stinnerf2c1aa12016-01-26 00:40:57 +01008246
Victor Stinner74419f02020-07-03 11:35:37 +02008247 if (_PyObject_LookupAttr(obj, state->value, &tmp) < 0) {
Serhiy Storchakaf320be72018-01-25 10:49:40 +02008248 return 1;
8249 }
8250 if (tmp == NULL) {
8251 PyErr_SetString(PyExc_TypeError, "required field \"value\" missing from Constant");
8252 return 1;
8253 }
8254 else {
Victor Stinnerf2c1aa12016-01-26 00:40:57 +01008255 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02008256 res = obj2ast_constant(state, tmp, &value, arena);
Victor Stinnerf2c1aa12016-01-26 00:40:57 +01008257 if (res != 0) goto failed;
8258 Py_CLEAR(tmp);
Victor Stinnerf2c1aa12016-01-26 00:40:57 +01008259 }
Victor Stinner74419f02020-07-03 11:35:37 +02008260 if (_PyObject_LookupAttr(obj, state->kind, &tmp) < 0) {
Guido van Rossum10f8ce62019-03-13 13:00:46 -07008261 return 1;
8262 }
8263 if (tmp == NULL || tmp == Py_None) {
8264 Py_CLEAR(tmp);
8265 kind = NULL;
8266 }
8267 else {
8268 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02008269 res = obj2ast_string(state, tmp, &kind, arena);
Guido van Rossum10f8ce62019-03-13 13:00:46 -07008270 if (res != 0) goto failed;
8271 Py_CLEAR(tmp);
8272 }
8273 *out = Constant(value, kind, lineno, col_offset, end_lineno,
8274 end_col_offset, arena);
Victor Stinnerf2c1aa12016-01-26 00:40:57 +01008275 if (*out == NULL) goto failed;
8276 return 0;
8277 }
Victor Stinner74419f02020-07-03 11:35:37 +02008278 tp = state->Attribute_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07008279 isinstance = PyObject_IsInstance(obj, tp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008280 if (isinstance == -1) {
8281 return 1;
8282 }
8283 if (isinstance) {
8284 expr_ty value;
8285 identifier attr;
8286 expr_context_ty ctx;
8287
Victor Stinner74419f02020-07-03 11:35:37 +02008288 if (_PyObject_LookupAttr(obj, state->value, &tmp) < 0) {
Serhiy Storchakaf320be72018-01-25 10:49:40 +02008289 return 1;
8290 }
8291 if (tmp == NULL) {
8292 PyErr_SetString(PyExc_TypeError, "required field \"value\" missing from Attribute");
8293 return 1;
8294 }
8295 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008296 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02008297 res = obj2ast_expr(state, tmp, &value, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008298 if (res != 0) goto failed;
Victor Stinner1acc1292013-07-27 00:03:47 +02008299 Py_CLEAR(tmp);
Serhiy Storchakaf320be72018-01-25 10:49:40 +02008300 }
Victor Stinner74419f02020-07-03 11:35:37 +02008301 if (_PyObject_LookupAttr(obj, state->attr, &tmp) < 0) {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008302 return 1;
8303 }
Serhiy Storchakaf320be72018-01-25 10:49:40 +02008304 if (tmp == NULL) {
8305 PyErr_SetString(PyExc_TypeError, "required field \"attr\" missing from Attribute");
8306 return 1;
8307 }
8308 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008309 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02008310 res = obj2ast_identifier(state, tmp, &attr, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008311 if (res != 0) goto failed;
Victor Stinner1acc1292013-07-27 00:03:47 +02008312 Py_CLEAR(tmp);
Serhiy Storchakaf320be72018-01-25 10:49:40 +02008313 }
Victor Stinner74419f02020-07-03 11:35:37 +02008314 if (_PyObject_LookupAttr(obj, state->ctx, &tmp) < 0) {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008315 return 1;
8316 }
Serhiy Storchakaf320be72018-01-25 10:49:40 +02008317 if (tmp == NULL) {
8318 PyErr_SetString(PyExc_TypeError, "required field \"ctx\" missing from Attribute");
8319 return 1;
8320 }
8321 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008322 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02008323 res = obj2ast_expr_context(state, tmp, &ctx, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008324 if (res != 0) goto failed;
Victor Stinner1acc1292013-07-27 00:03:47 +02008325 Py_CLEAR(tmp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008326 }
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00008327 *out = Attribute(value, attr, ctx, lineno, col_offset, end_lineno,
8328 end_col_offset, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008329 if (*out == NULL) goto failed;
8330 return 0;
8331 }
Victor Stinner74419f02020-07-03 11:35:37 +02008332 tp = state->Subscript_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07008333 isinstance = PyObject_IsInstance(obj, tp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008334 if (isinstance == -1) {
8335 return 1;
8336 }
8337 if (isinstance) {
8338 expr_ty value;
Serhiy Storchaka13d52c22020-03-10 18:52:34 +02008339 expr_ty slice;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008340 expr_context_ty ctx;
8341
Victor Stinner74419f02020-07-03 11:35:37 +02008342 if (_PyObject_LookupAttr(obj, state->value, &tmp) < 0) {
Serhiy Storchakaf320be72018-01-25 10:49:40 +02008343 return 1;
8344 }
8345 if (tmp == NULL) {
8346 PyErr_SetString(PyExc_TypeError, "required field \"value\" missing from Subscript");
8347 return 1;
8348 }
8349 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008350 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02008351 res = obj2ast_expr(state, tmp, &value, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008352 if (res != 0) goto failed;
Victor Stinner1acc1292013-07-27 00:03:47 +02008353 Py_CLEAR(tmp);
Serhiy Storchakaf320be72018-01-25 10:49:40 +02008354 }
Victor Stinner74419f02020-07-03 11:35:37 +02008355 if (_PyObject_LookupAttr(obj, state->slice, &tmp) < 0) {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008356 return 1;
8357 }
Serhiy Storchakaf320be72018-01-25 10:49:40 +02008358 if (tmp == NULL) {
8359 PyErr_SetString(PyExc_TypeError, "required field \"slice\" missing from Subscript");
8360 return 1;
8361 }
8362 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008363 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02008364 res = obj2ast_expr(state, tmp, &slice, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008365 if (res != 0) goto failed;
Victor Stinner1acc1292013-07-27 00:03:47 +02008366 Py_CLEAR(tmp);
Serhiy Storchakaf320be72018-01-25 10:49:40 +02008367 }
Victor Stinner74419f02020-07-03 11:35:37 +02008368 if (_PyObject_LookupAttr(obj, state->ctx, &tmp) < 0) {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008369 return 1;
8370 }
Serhiy Storchakaf320be72018-01-25 10:49:40 +02008371 if (tmp == NULL) {
8372 PyErr_SetString(PyExc_TypeError, "required field \"ctx\" missing from Subscript");
8373 return 1;
8374 }
8375 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008376 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02008377 res = obj2ast_expr_context(state, tmp, &ctx, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008378 if (res != 0) goto failed;
Victor Stinner1acc1292013-07-27 00:03:47 +02008379 Py_CLEAR(tmp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008380 }
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00008381 *out = Subscript(value, slice, ctx, lineno, col_offset, end_lineno,
8382 end_col_offset, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008383 if (*out == NULL) goto failed;
8384 return 0;
8385 }
Victor Stinner74419f02020-07-03 11:35:37 +02008386 tp = state->Starred_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07008387 isinstance = PyObject_IsInstance(obj, tp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008388 if (isinstance == -1) {
8389 return 1;
8390 }
8391 if (isinstance) {
8392 expr_ty value;
8393 expr_context_ty ctx;
8394
Victor Stinner74419f02020-07-03 11:35:37 +02008395 if (_PyObject_LookupAttr(obj, state->value, &tmp) < 0) {
Serhiy Storchakaf320be72018-01-25 10:49:40 +02008396 return 1;
8397 }
8398 if (tmp == NULL) {
8399 PyErr_SetString(PyExc_TypeError, "required field \"value\" missing from Starred");
8400 return 1;
8401 }
8402 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008403 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02008404 res = obj2ast_expr(state, tmp, &value, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008405 if (res != 0) goto failed;
Victor Stinner1acc1292013-07-27 00:03:47 +02008406 Py_CLEAR(tmp);
Serhiy Storchakaf320be72018-01-25 10:49:40 +02008407 }
Victor Stinner74419f02020-07-03 11:35:37 +02008408 if (_PyObject_LookupAttr(obj, state->ctx, &tmp) < 0) {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008409 return 1;
8410 }
Serhiy Storchakaf320be72018-01-25 10:49:40 +02008411 if (tmp == NULL) {
8412 PyErr_SetString(PyExc_TypeError, "required field \"ctx\" missing from Starred");
8413 return 1;
8414 }
8415 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008416 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02008417 res = obj2ast_expr_context(state, tmp, &ctx, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008418 if (res != 0) goto failed;
Victor Stinner1acc1292013-07-27 00:03:47 +02008419 Py_CLEAR(tmp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008420 }
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00008421 *out = Starred(value, ctx, lineno, col_offset, end_lineno,
8422 end_col_offset, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008423 if (*out == NULL) goto failed;
8424 return 0;
8425 }
Victor Stinner74419f02020-07-03 11:35:37 +02008426 tp = state->Name_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07008427 isinstance = PyObject_IsInstance(obj, tp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008428 if (isinstance == -1) {
8429 return 1;
8430 }
8431 if (isinstance) {
8432 identifier id;
8433 expr_context_ty ctx;
8434
Victor Stinner74419f02020-07-03 11:35:37 +02008435 if (_PyObject_LookupAttr(obj, state->id, &tmp) < 0) {
Serhiy Storchakaf320be72018-01-25 10:49:40 +02008436 return 1;
8437 }
8438 if (tmp == NULL) {
8439 PyErr_SetString(PyExc_TypeError, "required field \"id\" missing from Name");
8440 return 1;
8441 }
8442 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008443 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02008444 res = obj2ast_identifier(state, tmp, &id, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008445 if (res != 0) goto failed;
Victor Stinner1acc1292013-07-27 00:03:47 +02008446 Py_CLEAR(tmp);
Serhiy Storchakaf320be72018-01-25 10:49:40 +02008447 }
Victor Stinner74419f02020-07-03 11:35:37 +02008448 if (_PyObject_LookupAttr(obj, state->ctx, &tmp) < 0) {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008449 return 1;
8450 }
Serhiy Storchakaf320be72018-01-25 10:49:40 +02008451 if (tmp == NULL) {
8452 PyErr_SetString(PyExc_TypeError, "required field \"ctx\" missing from Name");
8453 return 1;
8454 }
8455 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008456 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02008457 res = obj2ast_expr_context(state, tmp, &ctx, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008458 if (res != 0) goto failed;
Victor Stinner1acc1292013-07-27 00:03:47 +02008459 Py_CLEAR(tmp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008460 }
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00008461 *out = Name(id, ctx, lineno, col_offset, end_lineno, end_col_offset,
8462 arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008463 if (*out == NULL) goto failed;
8464 return 0;
8465 }
Victor Stinner74419f02020-07-03 11:35:37 +02008466 tp = state->List_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07008467 isinstance = PyObject_IsInstance(obj, tp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008468 if (isinstance == -1) {
8469 return 1;
8470 }
8471 if (isinstance) {
Pablo Galindoa5634c42020-09-16 19:42:00 +01008472 asdl_expr_seq* elts;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008473 expr_context_ty ctx;
8474
Victor Stinner74419f02020-07-03 11:35:37 +02008475 if (_PyObject_LookupAttr(obj, state->elts, &tmp) < 0) {
Serhiy Storchakaf320be72018-01-25 10:49:40 +02008476 return 1;
8477 }
8478 if (tmp == NULL) {
8479 PyErr_SetString(PyExc_TypeError, "required field \"elts\" missing from List");
8480 return 1;
8481 }
8482 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008483 int res;
8484 Py_ssize_t len;
8485 Py_ssize_t i;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008486 if (!PyList_Check(tmp)) {
Dino Viehlandac46eb42019-09-11 10:16:34 -07008487 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 +02008488 goto failed;
8489 }
8490 len = PyList_GET_SIZE(tmp);
Pablo Galindoa5634c42020-09-16 19:42:00 +01008491 elts = _Py_asdl_expr_seq_new(len, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008492 if (elts == NULL) goto failed;
8493 for (i = 0; i < len; i++) {
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07008494 expr_ty val;
Serhiy Storchaka43c97312019-09-10 13:02:30 +03008495 PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
8496 Py_INCREF(tmp2);
Victor Stinner74419f02020-07-03 11:35:37 +02008497 res = obj2ast_expr(state, tmp2, &val, arena);
Serhiy Storchaka43c97312019-09-10 13:02:30 +03008498 Py_DECREF(tmp2);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008499 if (res != 0) goto failed;
Serhiy Storchakacf380602016-10-07 21:51:28 +03008500 if (len != PyList_GET_SIZE(tmp)) {
8501 PyErr_SetString(PyExc_RuntimeError, "List field \"elts\" changed size during iteration");
8502 goto failed;
8503 }
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07008504 asdl_seq_SET(elts, i, val);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008505 }
Victor Stinner1acc1292013-07-27 00:03:47 +02008506 Py_CLEAR(tmp);
Serhiy Storchakaf320be72018-01-25 10:49:40 +02008507 }
Victor Stinner74419f02020-07-03 11:35:37 +02008508 if (_PyObject_LookupAttr(obj, state->ctx, &tmp) < 0) {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008509 return 1;
8510 }
Serhiy Storchakaf320be72018-01-25 10:49:40 +02008511 if (tmp == NULL) {
8512 PyErr_SetString(PyExc_TypeError, "required field \"ctx\" missing from List");
8513 return 1;
8514 }
8515 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008516 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02008517 res = obj2ast_expr_context(state, tmp, &ctx, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008518 if (res != 0) goto failed;
Victor Stinner1acc1292013-07-27 00:03:47 +02008519 Py_CLEAR(tmp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008520 }
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00008521 *out = List(elts, ctx, lineno, col_offset, end_lineno, end_col_offset,
8522 arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008523 if (*out == NULL) goto failed;
8524 return 0;
8525 }
Victor Stinner74419f02020-07-03 11:35:37 +02008526 tp = state->Tuple_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07008527 isinstance = PyObject_IsInstance(obj, tp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008528 if (isinstance == -1) {
8529 return 1;
8530 }
8531 if (isinstance) {
Pablo Galindoa5634c42020-09-16 19:42:00 +01008532 asdl_expr_seq* elts;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008533 expr_context_ty ctx;
8534
Victor Stinner74419f02020-07-03 11:35:37 +02008535 if (_PyObject_LookupAttr(obj, state->elts, &tmp) < 0) {
Serhiy Storchakaf320be72018-01-25 10:49:40 +02008536 return 1;
8537 }
8538 if (tmp == NULL) {
8539 PyErr_SetString(PyExc_TypeError, "required field \"elts\" missing from Tuple");
8540 return 1;
8541 }
8542 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008543 int res;
8544 Py_ssize_t len;
8545 Py_ssize_t i;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008546 if (!PyList_Check(tmp)) {
Dino Viehlandac46eb42019-09-11 10:16:34 -07008547 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 +02008548 goto failed;
8549 }
8550 len = PyList_GET_SIZE(tmp);
Pablo Galindoa5634c42020-09-16 19:42:00 +01008551 elts = _Py_asdl_expr_seq_new(len, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008552 if (elts == NULL) goto failed;
8553 for (i = 0; i < len; i++) {
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07008554 expr_ty val;
Serhiy Storchaka43c97312019-09-10 13:02:30 +03008555 PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
8556 Py_INCREF(tmp2);
Victor Stinner74419f02020-07-03 11:35:37 +02008557 res = obj2ast_expr(state, tmp2, &val, arena);
Serhiy Storchaka43c97312019-09-10 13:02:30 +03008558 Py_DECREF(tmp2);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008559 if (res != 0) goto failed;
Serhiy Storchakacf380602016-10-07 21:51:28 +03008560 if (len != PyList_GET_SIZE(tmp)) {
8561 PyErr_SetString(PyExc_RuntimeError, "Tuple field \"elts\" changed size during iteration");
8562 goto failed;
8563 }
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07008564 asdl_seq_SET(elts, i, val);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008565 }
Victor Stinner1acc1292013-07-27 00:03:47 +02008566 Py_CLEAR(tmp);
Serhiy Storchakaf320be72018-01-25 10:49:40 +02008567 }
Victor Stinner74419f02020-07-03 11:35:37 +02008568 if (_PyObject_LookupAttr(obj, state->ctx, &tmp) < 0) {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008569 return 1;
8570 }
Serhiy Storchakaf320be72018-01-25 10:49:40 +02008571 if (tmp == NULL) {
8572 PyErr_SetString(PyExc_TypeError, "required field \"ctx\" missing from Tuple");
8573 return 1;
8574 }
8575 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008576 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02008577 res = obj2ast_expr_context(state, tmp, &ctx, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008578 if (res != 0) goto failed;
Victor Stinner1acc1292013-07-27 00:03:47 +02008579 Py_CLEAR(tmp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008580 }
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00008581 *out = Tuple(elts, ctx, lineno, col_offset, end_lineno, end_col_offset,
8582 arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008583 if (*out == NULL) goto failed;
8584 return 0;
8585 }
Victor Stinner74419f02020-07-03 11:35:37 +02008586 tp = state->Slice_type;
Serhiy Storchaka13d52c22020-03-10 18:52:34 +02008587 isinstance = PyObject_IsInstance(obj, tp);
8588 if (isinstance == -1) {
8589 return 1;
8590 }
8591 if (isinstance) {
8592 expr_ty lower;
8593 expr_ty upper;
8594 expr_ty step;
8595
Victor Stinner74419f02020-07-03 11:35:37 +02008596 if (_PyObject_LookupAttr(obj, state->lower, &tmp) < 0) {
Serhiy Storchaka13d52c22020-03-10 18:52:34 +02008597 return 1;
8598 }
8599 if (tmp == NULL || tmp == Py_None) {
8600 Py_CLEAR(tmp);
8601 lower = NULL;
8602 }
8603 else {
8604 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02008605 res = obj2ast_expr(state, tmp, &lower, arena);
Serhiy Storchaka13d52c22020-03-10 18:52:34 +02008606 if (res != 0) goto failed;
8607 Py_CLEAR(tmp);
8608 }
Victor Stinner74419f02020-07-03 11:35:37 +02008609 if (_PyObject_LookupAttr(obj, state->upper, &tmp) < 0) {
Serhiy Storchaka13d52c22020-03-10 18:52:34 +02008610 return 1;
8611 }
8612 if (tmp == NULL || tmp == Py_None) {
8613 Py_CLEAR(tmp);
8614 upper = NULL;
8615 }
8616 else {
8617 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02008618 res = obj2ast_expr(state, tmp, &upper, arena);
Serhiy Storchaka13d52c22020-03-10 18:52:34 +02008619 if (res != 0) goto failed;
8620 Py_CLEAR(tmp);
8621 }
Victor Stinner74419f02020-07-03 11:35:37 +02008622 if (_PyObject_LookupAttr(obj, state->step, &tmp) < 0) {
Serhiy Storchaka13d52c22020-03-10 18:52:34 +02008623 return 1;
8624 }
8625 if (tmp == NULL || tmp == Py_None) {
8626 Py_CLEAR(tmp);
8627 step = NULL;
8628 }
8629 else {
8630 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02008631 res = obj2ast_expr(state, tmp, &step, arena);
Serhiy Storchaka13d52c22020-03-10 18:52:34 +02008632 if (res != 0) goto failed;
8633 Py_CLEAR(tmp);
8634 }
8635 *out = Slice(lower, upper, step, lineno, col_offset, end_lineno,
8636 end_col_offset, arena);
8637 if (*out == NULL) goto failed;
8638 return 0;
8639 }
Brandt Bucher145bf262021-02-26 14:51:55 -08008640 tp = state->MatchAs_type;
8641 isinstance = PyObject_IsInstance(obj, tp);
8642 if (isinstance == -1) {
8643 return 1;
8644 }
8645 if (isinstance) {
8646 expr_ty pattern;
8647 identifier name;
8648
8649 if (_PyObject_LookupAttr(obj, state->pattern, &tmp) < 0) {
8650 return 1;
8651 }
8652 if (tmp == NULL) {
8653 PyErr_SetString(PyExc_TypeError, "required field \"pattern\" missing from MatchAs");
8654 return 1;
8655 }
8656 else {
8657 int res;
8658 res = obj2ast_expr(state, tmp, &pattern, arena);
8659 if (res != 0) goto failed;
8660 Py_CLEAR(tmp);
8661 }
8662 if (_PyObject_LookupAttr(obj, state->name, &tmp) < 0) {
8663 return 1;
8664 }
8665 if (tmp == NULL) {
8666 PyErr_SetString(PyExc_TypeError, "required field \"name\" missing from MatchAs");
8667 return 1;
8668 }
8669 else {
8670 int res;
8671 res = obj2ast_identifier(state, tmp, &name, arena);
8672 if (res != 0) goto failed;
8673 Py_CLEAR(tmp);
8674 }
8675 *out = MatchAs(pattern, name, lineno, col_offset, end_lineno,
8676 end_col_offset, arena);
8677 if (*out == NULL) goto failed;
8678 return 0;
8679 }
8680 tp = state->MatchOr_type;
8681 isinstance = PyObject_IsInstance(obj, tp);
8682 if (isinstance == -1) {
8683 return 1;
8684 }
8685 if (isinstance) {
8686 asdl_expr_seq* patterns;
8687
8688 if (_PyObject_LookupAttr(obj, state->patterns, &tmp) < 0) {
8689 return 1;
8690 }
8691 if (tmp == NULL) {
8692 PyErr_SetString(PyExc_TypeError, "required field \"patterns\" missing from MatchOr");
8693 return 1;
8694 }
8695 else {
8696 int res;
8697 Py_ssize_t len;
8698 Py_ssize_t i;
8699 if (!PyList_Check(tmp)) {
8700 PyErr_Format(PyExc_TypeError, "MatchOr field \"patterns\" must be a list, not a %.200s", _PyType_Name(Py_TYPE(tmp)));
8701 goto failed;
8702 }
8703 len = PyList_GET_SIZE(tmp);
8704 patterns = _Py_asdl_expr_seq_new(len, arena);
8705 if (patterns == NULL) goto failed;
8706 for (i = 0; i < len; i++) {
8707 expr_ty val;
8708 PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
8709 Py_INCREF(tmp2);
8710 res = obj2ast_expr(state, tmp2, &val, arena);
8711 Py_DECREF(tmp2);
8712 if (res != 0) goto failed;
8713 if (len != PyList_GET_SIZE(tmp)) {
8714 PyErr_SetString(PyExc_RuntimeError, "MatchOr field \"patterns\" changed size during iteration");
8715 goto failed;
8716 }
8717 asdl_seq_SET(patterns, i, val);
8718 }
8719 Py_CLEAR(tmp);
8720 }
8721 *out = MatchOr(patterns, lineno, col_offset, end_lineno,
8722 end_col_offset, arena);
8723 if (*out == NULL) goto failed;
8724 return 0;
8725 }
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008726
8727 PyErr_Format(PyExc_TypeError, "expected some sort of expr, but got %R", obj);
8728 failed:
8729 Py_XDECREF(tmp);
8730 return 1;
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00008731}
8732
8733int
Victor Stinner5cf47822020-11-02 22:03:28 +01008734obj2ast_expr_context(struct ast_state *state, PyObject* obj, expr_context_ty*
Victor Stinner74419f02020-07-03 11:35:37 +02008735 out, PyArena* arena)
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00008736{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008737 int isinstance;
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00008738
Victor Stinner74419f02020-07-03 11:35:37 +02008739 isinstance = PyObject_IsInstance(obj, state->Load_type);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008740 if (isinstance == -1) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00008741 return 1;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008742 }
8743 if (isinstance) {
8744 *out = Load;
8745 return 0;
8746 }
Victor Stinner74419f02020-07-03 11:35:37 +02008747 isinstance = PyObject_IsInstance(obj, state->Store_type);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008748 if (isinstance == -1) {
8749 return 1;
8750 }
8751 if (isinstance) {
8752 *out = Store;
8753 return 0;
8754 }
Victor Stinner74419f02020-07-03 11:35:37 +02008755 isinstance = PyObject_IsInstance(obj, state->Del_type);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008756 if (isinstance == -1) {
8757 return 1;
8758 }
8759 if (isinstance) {
8760 *out = Del;
8761 return 0;
8762 }
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008763
8764 PyErr_Format(PyExc_TypeError, "expected some sort of expr_context, but got %R", obj);
8765 return 1;
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00008766}
8767
8768int
Victor Stinner5cf47822020-11-02 22:03:28 +01008769obj2ast_boolop(struct ast_state *state, PyObject* obj, boolop_ty* out, PyArena*
Victor Stinner74419f02020-07-03 11:35:37 +02008770 arena)
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00008771{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008772 int isinstance;
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00008773
Victor Stinner74419f02020-07-03 11:35:37 +02008774 isinstance = PyObject_IsInstance(obj, state->And_type);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008775 if (isinstance == -1) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00008776 return 1;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008777 }
8778 if (isinstance) {
8779 *out = And;
8780 return 0;
8781 }
Victor Stinner74419f02020-07-03 11:35:37 +02008782 isinstance = PyObject_IsInstance(obj, state->Or_type);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008783 if (isinstance == -1) {
8784 return 1;
8785 }
8786 if (isinstance) {
8787 *out = Or;
8788 return 0;
8789 }
8790
8791 PyErr_Format(PyExc_TypeError, "expected some sort of boolop, but got %R", obj);
8792 return 1;
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00008793}
8794
8795int
Victor Stinner5cf47822020-11-02 22:03:28 +01008796obj2ast_operator(struct ast_state *state, PyObject* obj, operator_ty* out,
Victor Stinner74419f02020-07-03 11:35:37 +02008797 PyArena* arena)
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00008798{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008799 int isinstance;
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00008800
Victor Stinner74419f02020-07-03 11:35:37 +02008801 isinstance = PyObject_IsInstance(obj, state->Add_type);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008802 if (isinstance == -1) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00008803 return 1;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008804 }
8805 if (isinstance) {
8806 *out = Add;
8807 return 0;
8808 }
Victor Stinner74419f02020-07-03 11:35:37 +02008809 isinstance = PyObject_IsInstance(obj, state->Sub_type);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008810 if (isinstance == -1) {
8811 return 1;
8812 }
8813 if (isinstance) {
8814 *out = Sub;
8815 return 0;
8816 }
Victor Stinner74419f02020-07-03 11:35:37 +02008817 isinstance = PyObject_IsInstance(obj, state->Mult_type);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008818 if (isinstance == -1) {
8819 return 1;
8820 }
8821 if (isinstance) {
8822 *out = Mult;
8823 return 0;
8824 }
Victor Stinner74419f02020-07-03 11:35:37 +02008825 isinstance = PyObject_IsInstance(obj, state->MatMult_type);
Benjamin Petersond51374e2014-04-09 23:55:56 -04008826 if (isinstance == -1) {
8827 return 1;
8828 }
8829 if (isinstance) {
8830 *out = MatMult;
8831 return 0;
8832 }
Victor Stinner74419f02020-07-03 11:35:37 +02008833 isinstance = PyObject_IsInstance(obj, state->Div_type);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008834 if (isinstance == -1) {
8835 return 1;
8836 }
8837 if (isinstance) {
8838 *out = Div;
8839 return 0;
8840 }
Victor Stinner74419f02020-07-03 11:35:37 +02008841 isinstance = PyObject_IsInstance(obj, state->Mod_type);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008842 if (isinstance == -1) {
8843 return 1;
8844 }
8845 if (isinstance) {
8846 *out = Mod;
8847 return 0;
8848 }
Victor Stinner74419f02020-07-03 11:35:37 +02008849 isinstance = PyObject_IsInstance(obj, state->Pow_type);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008850 if (isinstance == -1) {
8851 return 1;
8852 }
8853 if (isinstance) {
8854 *out = Pow;
8855 return 0;
8856 }
Victor Stinner74419f02020-07-03 11:35:37 +02008857 isinstance = PyObject_IsInstance(obj, state->LShift_type);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008858 if (isinstance == -1) {
8859 return 1;
8860 }
8861 if (isinstance) {
8862 *out = LShift;
8863 return 0;
8864 }
Victor Stinner74419f02020-07-03 11:35:37 +02008865 isinstance = PyObject_IsInstance(obj, state->RShift_type);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008866 if (isinstance == -1) {
8867 return 1;
8868 }
8869 if (isinstance) {
8870 *out = RShift;
8871 return 0;
8872 }
Victor Stinner74419f02020-07-03 11:35:37 +02008873 isinstance = PyObject_IsInstance(obj, state->BitOr_type);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008874 if (isinstance == -1) {
8875 return 1;
8876 }
8877 if (isinstance) {
8878 *out = BitOr;
8879 return 0;
8880 }
Victor Stinner74419f02020-07-03 11:35:37 +02008881 isinstance = PyObject_IsInstance(obj, state->BitXor_type);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008882 if (isinstance == -1) {
8883 return 1;
8884 }
8885 if (isinstance) {
8886 *out = BitXor;
8887 return 0;
8888 }
Victor Stinner74419f02020-07-03 11:35:37 +02008889 isinstance = PyObject_IsInstance(obj, state->BitAnd_type);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008890 if (isinstance == -1) {
8891 return 1;
8892 }
8893 if (isinstance) {
8894 *out = BitAnd;
8895 return 0;
8896 }
Victor Stinner74419f02020-07-03 11:35:37 +02008897 isinstance = PyObject_IsInstance(obj, state->FloorDiv_type);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008898 if (isinstance == -1) {
8899 return 1;
8900 }
8901 if (isinstance) {
8902 *out = FloorDiv;
8903 return 0;
8904 }
8905
8906 PyErr_Format(PyExc_TypeError, "expected some sort of operator, but got %R", obj);
8907 return 1;
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00008908}
8909
8910int
Victor Stinner5cf47822020-11-02 22:03:28 +01008911obj2ast_unaryop(struct ast_state *state, PyObject* obj, unaryop_ty* out,
8912 PyArena* arena)
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00008913{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008914 int isinstance;
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00008915
Victor Stinner74419f02020-07-03 11:35:37 +02008916 isinstance = PyObject_IsInstance(obj, state->Invert_type);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008917 if (isinstance == -1) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00008918 return 1;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008919 }
8920 if (isinstance) {
8921 *out = Invert;
8922 return 0;
8923 }
Victor Stinner74419f02020-07-03 11:35:37 +02008924 isinstance = PyObject_IsInstance(obj, state->Not_type);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008925 if (isinstance == -1) {
8926 return 1;
8927 }
8928 if (isinstance) {
8929 *out = Not;
8930 return 0;
8931 }
Victor Stinner74419f02020-07-03 11:35:37 +02008932 isinstance = PyObject_IsInstance(obj, state->UAdd_type);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008933 if (isinstance == -1) {
8934 return 1;
8935 }
8936 if (isinstance) {
8937 *out = UAdd;
8938 return 0;
8939 }
Victor Stinner74419f02020-07-03 11:35:37 +02008940 isinstance = PyObject_IsInstance(obj, state->USub_type);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008941 if (isinstance == -1) {
8942 return 1;
8943 }
8944 if (isinstance) {
8945 *out = USub;
8946 return 0;
8947 }
8948
8949 PyErr_Format(PyExc_TypeError, "expected some sort of unaryop, but got %R", obj);
8950 return 1;
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00008951}
8952
8953int
Victor Stinner5cf47822020-11-02 22:03:28 +01008954obj2ast_cmpop(struct ast_state *state, PyObject* obj, cmpop_ty* out, PyArena*
Victor Stinner74419f02020-07-03 11:35:37 +02008955 arena)
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00008956{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008957 int isinstance;
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00008958
Victor Stinner74419f02020-07-03 11:35:37 +02008959 isinstance = PyObject_IsInstance(obj, state->Eq_type);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008960 if (isinstance == -1) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00008961 return 1;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008962 }
8963 if (isinstance) {
8964 *out = Eq;
8965 return 0;
8966 }
Victor Stinner74419f02020-07-03 11:35:37 +02008967 isinstance = PyObject_IsInstance(obj, state->NotEq_type);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008968 if (isinstance == -1) {
8969 return 1;
8970 }
8971 if (isinstance) {
8972 *out = NotEq;
8973 return 0;
8974 }
Victor Stinner74419f02020-07-03 11:35:37 +02008975 isinstance = PyObject_IsInstance(obj, state->Lt_type);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008976 if (isinstance == -1) {
8977 return 1;
8978 }
8979 if (isinstance) {
8980 *out = Lt;
8981 return 0;
8982 }
Victor Stinner74419f02020-07-03 11:35:37 +02008983 isinstance = PyObject_IsInstance(obj, state->LtE_type);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008984 if (isinstance == -1) {
8985 return 1;
8986 }
8987 if (isinstance) {
8988 *out = LtE;
8989 return 0;
8990 }
Victor Stinner74419f02020-07-03 11:35:37 +02008991 isinstance = PyObject_IsInstance(obj, state->Gt_type);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02008992 if (isinstance == -1) {
8993 return 1;
8994 }
8995 if (isinstance) {
8996 *out = Gt;
8997 return 0;
8998 }
Victor Stinner74419f02020-07-03 11:35:37 +02008999 isinstance = PyObject_IsInstance(obj, state->GtE_type);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009000 if (isinstance == -1) {
9001 return 1;
9002 }
9003 if (isinstance) {
9004 *out = GtE;
9005 return 0;
9006 }
Victor Stinner74419f02020-07-03 11:35:37 +02009007 isinstance = PyObject_IsInstance(obj, state->Is_type);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009008 if (isinstance == -1) {
9009 return 1;
9010 }
9011 if (isinstance) {
9012 *out = Is;
9013 return 0;
9014 }
Victor Stinner74419f02020-07-03 11:35:37 +02009015 isinstance = PyObject_IsInstance(obj, state->IsNot_type);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009016 if (isinstance == -1) {
9017 return 1;
9018 }
9019 if (isinstance) {
9020 *out = IsNot;
9021 return 0;
9022 }
Victor Stinner74419f02020-07-03 11:35:37 +02009023 isinstance = PyObject_IsInstance(obj, state->In_type);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009024 if (isinstance == -1) {
9025 return 1;
9026 }
9027 if (isinstance) {
9028 *out = In;
9029 return 0;
9030 }
Victor Stinner74419f02020-07-03 11:35:37 +02009031 isinstance = PyObject_IsInstance(obj, state->NotIn_type);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009032 if (isinstance == -1) {
9033 return 1;
9034 }
9035 if (isinstance) {
9036 *out = NotIn;
9037 return 0;
9038 }
9039
9040 PyErr_Format(PyExc_TypeError, "expected some sort of cmpop, but got %R", obj);
9041 return 1;
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00009042}
9043
9044int
Victor Stinner5cf47822020-11-02 22:03:28 +01009045obj2ast_comprehension(struct ast_state *state, PyObject* obj, comprehension_ty*
Victor Stinner74419f02020-07-03 11:35:37 +02009046 out, PyArena* arena)
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00009047{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009048 PyObject* tmp = NULL;
9049 expr_ty target;
9050 expr_ty iter;
Pablo Galindoa5634c42020-09-16 19:42:00 +01009051 asdl_expr_seq* ifs;
Yury Selivanov52c4e7c2016-09-09 10:36:01 -07009052 int is_async;
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00009053
Victor Stinner74419f02020-07-03 11:35:37 +02009054 if (_PyObject_LookupAttr(obj, state->target, &tmp) < 0) {
Serhiy Storchakaf320be72018-01-25 10:49:40 +02009055 return 1;
9056 }
9057 if (tmp == NULL) {
9058 PyErr_SetString(PyExc_TypeError, "required field \"target\" missing from comprehension");
9059 return 1;
9060 }
9061 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009062 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02009063 res = obj2ast_expr(state, tmp, &target, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009064 if (res != 0) goto failed;
Victor Stinner1acc1292013-07-27 00:03:47 +02009065 Py_CLEAR(tmp);
Serhiy Storchakaf320be72018-01-25 10:49:40 +02009066 }
Victor Stinner74419f02020-07-03 11:35:37 +02009067 if (_PyObject_LookupAttr(obj, state->iter, &tmp) < 0) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00009068 return 1;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009069 }
Serhiy Storchakaf320be72018-01-25 10:49:40 +02009070 if (tmp == NULL) {
9071 PyErr_SetString(PyExc_TypeError, "required field \"iter\" missing from comprehension");
9072 return 1;
9073 }
9074 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009075 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02009076 res = obj2ast_expr(state, tmp, &iter, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009077 if (res != 0) goto failed;
Victor Stinner1acc1292013-07-27 00:03:47 +02009078 Py_CLEAR(tmp);
Serhiy Storchakaf320be72018-01-25 10:49:40 +02009079 }
Victor Stinner74419f02020-07-03 11:35:37 +02009080 if (_PyObject_LookupAttr(obj, state->ifs, &tmp) < 0) {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009081 return 1;
9082 }
Serhiy Storchakaf320be72018-01-25 10:49:40 +02009083 if (tmp == NULL) {
9084 PyErr_SetString(PyExc_TypeError, "required field \"ifs\" missing from comprehension");
9085 return 1;
9086 }
9087 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009088 int res;
9089 Py_ssize_t len;
9090 Py_ssize_t i;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009091 if (!PyList_Check(tmp)) {
Dino Viehlandac46eb42019-09-11 10:16:34 -07009092 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 +02009093 goto failed;
9094 }
9095 len = PyList_GET_SIZE(tmp);
Pablo Galindoa5634c42020-09-16 19:42:00 +01009096 ifs = _Py_asdl_expr_seq_new(len, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009097 if (ifs == NULL) goto failed;
9098 for (i = 0; i < len; i++) {
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07009099 expr_ty val;
Serhiy Storchaka43c97312019-09-10 13:02:30 +03009100 PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
9101 Py_INCREF(tmp2);
Victor Stinner74419f02020-07-03 11:35:37 +02009102 res = obj2ast_expr(state, tmp2, &val, arena);
Serhiy Storchaka43c97312019-09-10 13:02:30 +03009103 Py_DECREF(tmp2);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009104 if (res != 0) goto failed;
Serhiy Storchakacf380602016-10-07 21:51:28 +03009105 if (len != PyList_GET_SIZE(tmp)) {
9106 PyErr_SetString(PyExc_RuntimeError, "comprehension field \"ifs\" changed size during iteration");
9107 goto failed;
9108 }
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07009109 asdl_seq_SET(ifs, i, val);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009110 }
Victor Stinner1acc1292013-07-27 00:03:47 +02009111 Py_CLEAR(tmp);
Serhiy Storchakaf320be72018-01-25 10:49:40 +02009112 }
Victor Stinner74419f02020-07-03 11:35:37 +02009113 if (_PyObject_LookupAttr(obj, state->is_async, &tmp) < 0) {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009114 return 1;
9115 }
Serhiy Storchakaf320be72018-01-25 10:49:40 +02009116 if (tmp == NULL) {
9117 PyErr_SetString(PyExc_TypeError, "required field \"is_async\" missing from comprehension");
9118 return 1;
9119 }
9120 else {
Yury Selivanov52c4e7c2016-09-09 10:36:01 -07009121 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02009122 res = obj2ast_int(state, tmp, &is_async, arena);
Yury Selivanov52c4e7c2016-09-09 10:36:01 -07009123 if (res != 0) goto failed;
9124 Py_CLEAR(tmp);
Yury Selivanov52c4e7c2016-09-09 10:36:01 -07009125 }
9126 *out = comprehension(target, iter, ifs, is_async, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009127 return 0;
9128failed:
9129 Py_XDECREF(tmp);
9130 return 1;
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00009131}
9132
9133int
Victor Stinner5cf47822020-11-02 22:03:28 +01009134obj2ast_excepthandler(struct ast_state *state, PyObject* obj, excepthandler_ty*
Victor Stinner74419f02020-07-03 11:35:37 +02009135 out, PyArena* arena)
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00009136{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009137 int isinstance;
Neal Norwitzad74aa82008-03-31 05:14:30 +00009138
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009139 PyObject *tmp = NULL;
Dino Viehlandac46eb42019-09-11 10:16:34 -07009140 PyObject *tp;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009141 int lineno;
9142 int col_offset;
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00009143 int end_lineno;
9144 int end_col_offset;
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00009145
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009146 if (obj == Py_None) {
9147 *out = NULL;
9148 return 0;
9149 }
Victor Stinner74419f02020-07-03 11:35:37 +02009150 if (_PyObject_LookupAttr(obj, state->lineno, &tmp) < 0) {
Serhiy Storchakaf320be72018-01-25 10:49:40 +02009151 return 1;
9152 }
9153 if (tmp == NULL) {
9154 PyErr_SetString(PyExc_TypeError, "required field \"lineno\" missing from excepthandler");
9155 return 1;
9156 }
9157 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009158 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02009159 res = obj2ast_int(state, tmp, &lineno, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009160 if (res != 0) goto failed;
Victor Stinner1acc1292013-07-27 00:03:47 +02009161 Py_CLEAR(tmp);
Serhiy Storchakaf320be72018-01-25 10:49:40 +02009162 }
Victor Stinner74419f02020-07-03 11:35:37 +02009163 if (_PyObject_LookupAttr(obj, state->col_offset, &tmp) < 0) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00009164 return 1;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009165 }
Serhiy Storchakaf320be72018-01-25 10:49:40 +02009166 if (tmp == NULL) {
9167 PyErr_SetString(PyExc_TypeError, "required field \"col_offset\" missing from excepthandler");
9168 return 1;
9169 }
9170 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009171 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02009172 res = obj2ast_int(state, tmp, &col_offset, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009173 if (res != 0) goto failed;
Victor Stinner1acc1292013-07-27 00:03:47 +02009174 Py_CLEAR(tmp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009175 }
Victor Stinner74419f02020-07-03 11:35:37 +02009176 if (_PyObject_LookupAttr(obj, state->end_lineno, &tmp) < 0) {
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00009177 return 1;
9178 }
9179 if (tmp == NULL || tmp == Py_None) {
9180 Py_CLEAR(tmp);
9181 end_lineno = 0;
9182 }
9183 else {
9184 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02009185 res = obj2ast_int(state, tmp, &end_lineno, arena);
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00009186 if (res != 0) goto failed;
9187 Py_CLEAR(tmp);
9188 }
Victor Stinner74419f02020-07-03 11:35:37 +02009189 if (_PyObject_LookupAttr(obj, state->end_col_offset, &tmp) < 0) {
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00009190 return 1;
9191 }
9192 if (tmp == NULL || tmp == Py_None) {
9193 Py_CLEAR(tmp);
9194 end_col_offset = 0;
9195 }
9196 else {
9197 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02009198 res = obj2ast_int(state, tmp, &end_col_offset, arena);
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00009199 if (res != 0) goto failed;
9200 Py_CLEAR(tmp);
9201 }
Victor Stinner74419f02020-07-03 11:35:37 +02009202 tp = state->ExceptHandler_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07009203 isinstance = PyObject_IsInstance(obj, tp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009204 if (isinstance == -1) {
9205 return 1;
9206 }
9207 if (isinstance) {
9208 expr_ty type;
9209 identifier name;
Pablo Galindoa5634c42020-09-16 19:42:00 +01009210 asdl_stmt_seq* body;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009211
Victor Stinner74419f02020-07-03 11:35:37 +02009212 if (_PyObject_LookupAttr(obj, state->type, &tmp) < 0) {
Serhiy Storchakaf320be72018-01-25 10:49:40 +02009213 return 1;
9214 }
9215 if (tmp == NULL || tmp == Py_None) {
9216 Py_CLEAR(tmp);
9217 type = NULL;
9218 }
9219 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009220 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02009221 res = obj2ast_expr(state, tmp, &type, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009222 if (res != 0) goto failed;
Victor Stinner1acc1292013-07-27 00:03:47 +02009223 Py_CLEAR(tmp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009224 }
Victor Stinner74419f02020-07-03 11:35:37 +02009225 if (_PyObject_LookupAttr(obj, state->name, &tmp) < 0) {
Serhiy Storchakaf320be72018-01-25 10:49:40 +02009226 return 1;
9227 }
9228 if (tmp == NULL || tmp == Py_None) {
9229 Py_CLEAR(tmp);
9230 name = NULL;
9231 }
9232 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009233 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02009234 res = obj2ast_identifier(state, tmp, &name, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009235 if (res != 0) goto failed;
Victor Stinner1acc1292013-07-27 00:03:47 +02009236 Py_CLEAR(tmp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009237 }
Victor Stinner74419f02020-07-03 11:35:37 +02009238 if (_PyObject_LookupAttr(obj, state->body, &tmp) < 0) {
Serhiy Storchakaf320be72018-01-25 10:49:40 +02009239 return 1;
9240 }
9241 if (tmp == NULL) {
9242 PyErr_SetString(PyExc_TypeError, "required field \"body\" missing from ExceptHandler");
9243 return 1;
9244 }
9245 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009246 int res;
9247 Py_ssize_t len;
9248 Py_ssize_t i;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009249 if (!PyList_Check(tmp)) {
Dino Viehlandac46eb42019-09-11 10:16:34 -07009250 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 +02009251 goto failed;
9252 }
9253 len = PyList_GET_SIZE(tmp);
Pablo Galindoa5634c42020-09-16 19:42:00 +01009254 body = _Py_asdl_stmt_seq_new(len, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009255 if (body == NULL) goto failed;
9256 for (i = 0; i < len; i++) {
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07009257 stmt_ty val;
Serhiy Storchaka43c97312019-09-10 13:02:30 +03009258 PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
9259 Py_INCREF(tmp2);
Victor Stinner74419f02020-07-03 11:35:37 +02009260 res = obj2ast_stmt(state, tmp2, &val, arena);
Serhiy Storchaka43c97312019-09-10 13:02:30 +03009261 Py_DECREF(tmp2);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009262 if (res != 0) goto failed;
Serhiy Storchakacf380602016-10-07 21:51:28 +03009263 if (len != PyList_GET_SIZE(tmp)) {
9264 PyErr_SetString(PyExc_RuntimeError, "ExceptHandler field \"body\" changed size during iteration");
9265 goto failed;
9266 }
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07009267 asdl_seq_SET(body, i, val);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009268 }
Victor Stinner1acc1292013-07-27 00:03:47 +02009269 Py_CLEAR(tmp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009270 }
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00009271 *out = ExceptHandler(type, name, body, lineno, col_offset, end_lineno,
9272 end_col_offset, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009273 if (*out == NULL) goto failed;
9274 return 0;
9275 }
9276
9277 PyErr_Format(PyExc_TypeError, "expected some sort of excepthandler, but got %R", obj);
9278 failed:
9279 Py_XDECREF(tmp);
9280 return 1;
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00009281}
9282
9283int
Victor Stinner5cf47822020-11-02 22:03:28 +01009284obj2ast_arguments(struct ast_state *state, PyObject* obj, arguments_ty* out,
Victor Stinner74419f02020-07-03 11:35:37 +02009285 PyArena* arena)
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00009286{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009287 PyObject* tmp = NULL;
Pablo Galindoa5634c42020-09-16 19:42:00 +01009288 asdl_arg_seq* posonlyargs;
9289 asdl_arg_seq* args;
Victor Stinneree4b59c2013-07-27 00:01:35 +02009290 arg_ty vararg;
Pablo Galindoa5634c42020-09-16 19:42:00 +01009291 asdl_arg_seq* kwonlyargs;
9292 asdl_expr_seq* kw_defaults;
Victor Stinneree4b59c2013-07-27 00:01:35 +02009293 arg_ty kwarg;
Pablo Galindoa5634c42020-09-16 19:42:00 +01009294 asdl_expr_seq* defaults;
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00009295
Victor Stinner74419f02020-07-03 11:35:37 +02009296 if (_PyObject_LookupAttr(obj, state->posonlyargs, &tmp) < 0) {
Pablo Galindo8c77b8c2019-04-29 13:36:57 +01009297 return 1;
9298 }
9299 if (tmp == NULL) {
9300 PyErr_SetString(PyExc_TypeError, "required field \"posonlyargs\" missing from arguments");
9301 return 1;
9302 }
9303 else {
9304 int res;
9305 Py_ssize_t len;
9306 Py_ssize_t i;
9307 if (!PyList_Check(tmp)) {
Dino Viehlandac46eb42019-09-11 10:16:34 -07009308 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 +01009309 goto failed;
9310 }
9311 len = PyList_GET_SIZE(tmp);
Pablo Galindoa5634c42020-09-16 19:42:00 +01009312 posonlyargs = _Py_asdl_arg_seq_new(len, arena);
Pablo Galindo8c77b8c2019-04-29 13:36:57 +01009313 if (posonlyargs == NULL) goto failed;
9314 for (i = 0; i < len; i++) {
9315 arg_ty val;
Serhiy Storchaka43c97312019-09-10 13:02:30 +03009316 PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
9317 Py_INCREF(tmp2);
Victor Stinner74419f02020-07-03 11:35:37 +02009318 res = obj2ast_arg(state, tmp2, &val, arena);
Serhiy Storchaka43c97312019-09-10 13:02:30 +03009319 Py_DECREF(tmp2);
Pablo Galindo8c77b8c2019-04-29 13:36:57 +01009320 if (res != 0) goto failed;
9321 if (len != PyList_GET_SIZE(tmp)) {
9322 PyErr_SetString(PyExc_RuntimeError, "arguments field \"posonlyargs\" changed size during iteration");
9323 goto failed;
9324 }
9325 asdl_seq_SET(posonlyargs, i, val);
9326 }
9327 Py_CLEAR(tmp);
9328 }
Victor Stinner74419f02020-07-03 11:35:37 +02009329 if (_PyObject_LookupAttr(obj, state->args, &tmp) < 0) {
Pablo Galindocd6e83b2019-07-15 01:32:18 +02009330 return 1;
9331 }
9332 if (tmp == NULL) {
9333 PyErr_SetString(PyExc_TypeError, "required field \"args\" missing from arguments");
9334 return 1;
9335 }
9336 else {
9337 int res;
9338 Py_ssize_t len;
9339 Py_ssize_t i;
9340 if (!PyList_Check(tmp)) {
Dino Viehlandac46eb42019-09-11 10:16:34 -07009341 PyErr_Format(PyExc_TypeError, "arguments field \"args\" must be a list, not a %.200s", _PyType_Name(Py_TYPE(tmp)));
Pablo Galindocd6e83b2019-07-15 01:32:18 +02009342 goto failed;
9343 }
9344 len = PyList_GET_SIZE(tmp);
Pablo Galindoa5634c42020-09-16 19:42:00 +01009345 args = _Py_asdl_arg_seq_new(len, arena);
Pablo Galindocd6e83b2019-07-15 01:32:18 +02009346 if (args == NULL) goto failed;
9347 for (i = 0; i < len; i++) {
9348 arg_ty val;
Serhiy Storchaka43c97312019-09-10 13:02:30 +03009349 PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
9350 Py_INCREF(tmp2);
Victor Stinner74419f02020-07-03 11:35:37 +02009351 res = obj2ast_arg(state, tmp2, &val, arena);
Serhiy Storchaka43c97312019-09-10 13:02:30 +03009352 Py_DECREF(tmp2);
Pablo Galindocd6e83b2019-07-15 01:32:18 +02009353 if (res != 0) goto failed;
9354 if (len != PyList_GET_SIZE(tmp)) {
9355 PyErr_SetString(PyExc_RuntimeError, "arguments field \"args\" changed size during iteration");
9356 goto failed;
9357 }
9358 asdl_seq_SET(args, i, val);
9359 }
9360 Py_CLEAR(tmp);
9361 }
Victor Stinner74419f02020-07-03 11:35:37 +02009362 if (_PyObject_LookupAttr(obj, state->vararg, &tmp) < 0) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00009363 return 1;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009364 }
Serhiy Storchakaf320be72018-01-25 10:49:40 +02009365 if (tmp == NULL || tmp == Py_None) {
9366 Py_CLEAR(tmp);
9367 vararg = NULL;
9368 }
9369 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009370 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02009371 res = obj2ast_arg(state, tmp, &vararg, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009372 if (res != 0) goto failed;
Victor Stinner1acc1292013-07-27 00:03:47 +02009373 Py_CLEAR(tmp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009374 }
Victor Stinner74419f02020-07-03 11:35:37 +02009375 if (_PyObject_LookupAttr(obj, state->kwonlyargs, &tmp) < 0) {
Serhiy Storchakaf320be72018-01-25 10:49:40 +02009376 return 1;
9377 }
9378 if (tmp == NULL) {
9379 PyErr_SetString(PyExc_TypeError, "required field \"kwonlyargs\" missing from arguments");
9380 return 1;
9381 }
9382 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009383 int res;
9384 Py_ssize_t len;
9385 Py_ssize_t i;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009386 if (!PyList_Check(tmp)) {
Dino Viehlandac46eb42019-09-11 10:16:34 -07009387 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 +02009388 goto failed;
9389 }
9390 len = PyList_GET_SIZE(tmp);
Pablo Galindoa5634c42020-09-16 19:42:00 +01009391 kwonlyargs = _Py_asdl_arg_seq_new(len, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009392 if (kwonlyargs == NULL) goto failed;
9393 for (i = 0; i < len; i++) {
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07009394 arg_ty val;
Serhiy Storchaka43c97312019-09-10 13:02:30 +03009395 PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
9396 Py_INCREF(tmp2);
Victor Stinner74419f02020-07-03 11:35:37 +02009397 res = obj2ast_arg(state, tmp2, &val, arena);
Serhiy Storchaka43c97312019-09-10 13:02:30 +03009398 Py_DECREF(tmp2);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009399 if (res != 0) goto failed;
Serhiy Storchakacf380602016-10-07 21:51:28 +03009400 if (len != PyList_GET_SIZE(tmp)) {
9401 PyErr_SetString(PyExc_RuntimeError, "arguments field \"kwonlyargs\" changed size during iteration");
9402 goto failed;
9403 }
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07009404 asdl_seq_SET(kwonlyargs, i, val);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009405 }
Victor Stinner1acc1292013-07-27 00:03:47 +02009406 Py_CLEAR(tmp);
Serhiy Storchakaf320be72018-01-25 10:49:40 +02009407 }
Victor Stinner74419f02020-07-03 11:35:37 +02009408 if (_PyObject_LookupAttr(obj, state->kw_defaults, &tmp) < 0) {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009409 return 1;
9410 }
Serhiy Storchakaf320be72018-01-25 10:49:40 +02009411 if (tmp == NULL) {
9412 PyErr_SetString(PyExc_TypeError, "required field \"kw_defaults\" missing from arguments");
9413 return 1;
9414 }
9415 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009416 int res;
9417 Py_ssize_t len;
9418 Py_ssize_t i;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009419 if (!PyList_Check(tmp)) {
Dino Viehlandac46eb42019-09-11 10:16:34 -07009420 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 +02009421 goto failed;
9422 }
9423 len = PyList_GET_SIZE(tmp);
Pablo Galindoa5634c42020-09-16 19:42:00 +01009424 kw_defaults = _Py_asdl_expr_seq_new(len, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009425 if (kw_defaults == NULL) goto failed;
9426 for (i = 0; i < len; i++) {
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07009427 expr_ty val;
Serhiy Storchaka43c97312019-09-10 13:02:30 +03009428 PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
9429 Py_INCREF(tmp2);
Victor Stinner74419f02020-07-03 11:35:37 +02009430 res = obj2ast_expr(state, tmp2, &val, arena);
Serhiy Storchaka43c97312019-09-10 13:02:30 +03009431 Py_DECREF(tmp2);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009432 if (res != 0) goto failed;
Serhiy Storchakacf380602016-10-07 21:51:28 +03009433 if (len != PyList_GET_SIZE(tmp)) {
9434 PyErr_SetString(PyExc_RuntimeError, "arguments field \"kw_defaults\" changed size during iteration");
9435 goto failed;
9436 }
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07009437 asdl_seq_SET(kw_defaults, i, val);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009438 }
Victor Stinner1acc1292013-07-27 00:03:47 +02009439 Py_CLEAR(tmp);
Serhiy Storchakaf320be72018-01-25 10:49:40 +02009440 }
Victor Stinner74419f02020-07-03 11:35:37 +02009441 if (_PyObject_LookupAttr(obj, state->kwarg, &tmp) < 0) {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009442 return 1;
9443 }
Serhiy Storchakaf320be72018-01-25 10:49:40 +02009444 if (tmp == NULL || tmp == Py_None) {
9445 Py_CLEAR(tmp);
9446 kwarg = NULL;
9447 }
9448 else {
Victor Stinneree4b59c2013-07-27 00:01:35 +02009449 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02009450 res = obj2ast_arg(state, tmp, &kwarg, arena);
Victor Stinneree4b59c2013-07-27 00:01:35 +02009451 if (res != 0) goto failed;
Victor Stinnerb3189902013-07-27 00:04:42 +02009452 Py_CLEAR(tmp);
Victor Stinneree4b59c2013-07-27 00:01:35 +02009453 }
Victor Stinner74419f02020-07-03 11:35:37 +02009454 if (_PyObject_LookupAttr(obj, state->defaults, &tmp) < 0) {
Serhiy Storchakaf320be72018-01-25 10:49:40 +02009455 return 1;
9456 }
9457 if (tmp == NULL) {
9458 PyErr_SetString(PyExc_TypeError, "required field \"defaults\" missing from arguments");
9459 return 1;
9460 }
9461 else {
Victor Stinneree4b59c2013-07-27 00:01:35 +02009462 int res;
9463 Py_ssize_t len;
9464 Py_ssize_t i;
Victor Stinneree4b59c2013-07-27 00:01:35 +02009465 if (!PyList_Check(tmp)) {
Dino Viehlandac46eb42019-09-11 10:16:34 -07009466 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 +02009467 goto failed;
9468 }
9469 len = PyList_GET_SIZE(tmp);
Pablo Galindoa5634c42020-09-16 19:42:00 +01009470 defaults = _Py_asdl_expr_seq_new(len, arena);
Victor Stinneree4b59c2013-07-27 00:01:35 +02009471 if (defaults == NULL) goto failed;
9472 for (i = 0; i < len; i++) {
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07009473 expr_ty val;
Serhiy Storchaka43c97312019-09-10 13:02:30 +03009474 PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
9475 Py_INCREF(tmp2);
Victor Stinner74419f02020-07-03 11:35:37 +02009476 res = obj2ast_expr(state, tmp2, &val, arena);
Serhiy Storchaka43c97312019-09-10 13:02:30 +03009477 Py_DECREF(tmp2);
Victor Stinneree4b59c2013-07-27 00:01:35 +02009478 if (res != 0) goto failed;
Serhiy Storchakacf380602016-10-07 21:51:28 +03009479 if (len != PyList_GET_SIZE(tmp)) {
9480 PyErr_SetString(PyExc_RuntimeError, "arguments field \"defaults\" changed size during iteration");
9481 goto failed;
9482 }
Yuan Chao Chou2af565b2017-08-04 10:53:12 -07009483 asdl_seq_SET(defaults, i, val);
Victor Stinneree4b59c2013-07-27 00:01:35 +02009484 }
Victor Stinnerb3189902013-07-27 00:04:42 +02009485 Py_CLEAR(tmp);
Victor Stinneree4b59c2013-07-27 00:01:35 +02009486 }
Pablo Galindocd6e83b2019-07-15 01:32:18 +02009487 *out = arguments(posonlyargs, args, vararg, kwonlyargs, kw_defaults, kwarg,
Pablo Galindo8c77b8c2019-04-29 13:36:57 +01009488 defaults, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009489 return 0;
9490failed:
9491 Py_XDECREF(tmp);
9492 return 1;
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00009493}
9494
9495int
Victor Stinner5cf47822020-11-02 22:03:28 +01009496obj2ast_arg(struct ast_state *state, PyObject* obj, arg_ty* out, PyArena* arena)
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00009497{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009498 PyObject* tmp = NULL;
9499 identifier arg;
9500 expr_ty annotation;
Guido van Rossumdcfcd142019-01-31 03:40:27 -08009501 string type_comment;
Victor Stinnerc106c682015-11-06 17:01:48 +01009502 int lineno;
9503 int col_offset;
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00009504 int end_lineno;
9505 int end_col_offset;
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00009506
Victor Stinner74419f02020-07-03 11:35:37 +02009507 if (_PyObject_LookupAttr(obj, state->arg, &tmp) < 0) {
Serhiy Storchakaf320be72018-01-25 10:49:40 +02009508 return 1;
9509 }
9510 if (tmp == NULL) {
9511 PyErr_SetString(PyExc_TypeError, "required field \"arg\" missing from arg");
9512 return 1;
9513 }
9514 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009515 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02009516 res = obj2ast_identifier(state, tmp, &arg, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009517 if (res != 0) goto failed;
Victor Stinner1acc1292013-07-27 00:03:47 +02009518 Py_CLEAR(tmp);
Serhiy Storchakaf320be72018-01-25 10:49:40 +02009519 }
Victor Stinner74419f02020-07-03 11:35:37 +02009520 if (_PyObject_LookupAttr(obj, state->annotation, &tmp) < 0) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00009521 return 1;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009522 }
Serhiy Storchakaf320be72018-01-25 10:49:40 +02009523 if (tmp == NULL || tmp == Py_None) {
9524 Py_CLEAR(tmp);
9525 annotation = NULL;
9526 }
9527 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009528 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02009529 res = obj2ast_expr(state, tmp, &annotation, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009530 if (res != 0) goto failed;
Victor Stinner1acc1292013-07-27 00:03:47 +02009531 Py_CLEAR(tmp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009532 }
Victor Stinner74419f02020-07-03 11:35:37 +02009533 if (_PyObject_LookupAttr(obj, state->type_comment, &tmp) < 0) {
Guido van Rossumdcfcd142019-01-31 03:40:27 -08009534 return 1;
9535 }
9536 if (tmp == NULL || tmp == Py_None) {
9537 Py_CLEAR(tmp);
9538 type_comment = NULL;
9539 }
9540 else {
9541 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02009542 res = obj2ast_string(state, tmp, &type_comment, arena);
Guido van Rossumdcfcd142019-01-31 03:40:27 -08009543 if (res != 0) goto failed;
9544 Py_CLEAR(tmp);
9545 }
Victor Stinner74419f02020-07-03 11:35:37 +02009546 if (_PyObject_LookupAttr(obj, state->lineno, &tmp) < 0) {
Serhiy Storchakaf320be72018-01-25 10:49:40 +02009547 return 1;
9548 }
9549 if (tmp == NULL) {
9550 PyErr_SetString(PyExc_TypeError, "required field \"lineno\" missing from arg");
9551 return 1;
9552 }
9553 else {
Victor Stinnerc106c682015-11-06 17:01:48 +01009554 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02009555 res = obj2ast_int(state, tmp, &lineno, arena);
Victor Stinnerc106c682015-11-06 17:01:48 +01009556 if (res != 0) goto failed;
9557 Py_CLEAR(tmp);
Serhiy Storchakaf320be72018-01-25 10:49:40 +02009558 }
Victor Stinner74419f02020-07-03 11:35:37 +02009559 if (_PyObject_LookupAttr(obj, state->col_offset, &tmp) < 0) {
Victor Stinnerc106c682015-11-06 17:01:48 +01009560 return 1;
9561 }
Serhiy Storchakaf320be72018-01-25 10:49:40 +02009562 if (tmp == NULL) {
9563 PyErr_SetString(PyExc_TypeError, "required field \"col_offset\" missing from arg");
9564 return 1;
9565 }
9566 else {
Victor Stinnerc106c682015-11-06 17:01:48 +01009567 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02009568 res = obj2ast_int(state, tmp, &col_offset, arena);
Victor Stinnerc106c682015-11-06 17:01:48 +01009569 if (res != 0) goto failed;
9570 Py_CLEAR(tmp);
Victor Stinnerc106c682015-11-06 17:01:48 +01009571 }
Victor Stinner74419f02020-07-03 11:35:37 +02009572 if (_PyObject_LookupAttr(obj, state->end_lineno, &tmp) < 0) {
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00009573 return 1;
9574 }
9575 if (tmp == NULL || tmp == Py_None) {
9576 Py_CLEAR(tmp);
9577 end_lineno = 0;
9578 }
9579 else {
9580 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02009581 res = obj2ast_int(state, tmp, &end_lineno, arena);
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00009582 if (res != 0) goto failed;
9583 Py_CLEAR(tmp);
9584 }
Victor Stinner74419f02020-07-03 11:35:37 +02009585 if (_PyObject_LookupAttr(obj, state->end_col_offset, &tmp) < 0) {
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00009586 return 1;
9587 }
9588 if (tmp == NULL || tmp == Py_None) {
9589 Py_CLEAR(tmp);
9590 end_col_offset = 0;
9591 }
9592 else {
9593 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02009594 res = obj2ast_int(state, tmp, &end_col_offset, arena);
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00009595 if (res != 0) goto failed;
9596 Py_CLEAR(tmp);
9597 }
Guido van Rossumdcfcd142019-01-31 03:40:27 -08009598 *out = arg(arg, annotation, type_comment, lineno, col_offset, end_lineno,
9599 end_col_offset, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009600 return 0;
9601failed:
9602 Py_XDECREF(tmp);
9603 return 1;
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00009604}
9605
9606int
Victor Stinner5cf47822020-11-02 22:03:28 +01009607obj2ast_keyword(struct ast_state *state, PyObject* obj, keyword_ty* out,
9608 PyArena* arena)
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00009609{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009610 PyObject* tmp = NULL;
9611 identifier arg;
9612 expr_ty value;
Pablo Galindo168660b2020-04-02 00:47:39 +01009613 int lineno;
9614 int col_offset;
9615 int end_lineno;
9616 int end_col_offset;
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00009617
Victor Stinner74419f02020-07-03 11:35:37 +02009618 if (_PyObject_LookupAttr(obj, state->arg, &tmp) < 0) {
Serhiy Storchakaf320be72018-01-25 10:49:40 +02009619 return 1;
9620 }
9621 if (tmp == NULL || tmp == Py_None) {
9622 Py_CLEAR(tmp);
9623 arg = NULL;
9624 }
9625 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009626 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02009627 res = obj2ast_identifier(state, tmp, &arg, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009628 if (res != 0) goto failed;
Victor Stinner1acc1292013-07-27 00:03:47 +02009629 Py_CLEAR(tmp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009630 }
Victor Stinner74419f02020-07-03 11:35:37 +02009631 if (_PyObject_LookupAttr(obj, state->value, &tmp) < 0) {
Serhiy Storchakaf320be72018-01-25 10:49:40 +02009632 return 1;
9633 }
9634 if (tmp == NULL) {
9635 PyErr_SetString(PyExc_TypeError, "required field \"value\" missing from keyword");
9636 return 1;
9637 }
9638 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009639 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02009640 res = obj2ast_expr(state, tmp, &value, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009641 if (res != 0) goto failed;
Victor Stinner1acc1292013-07-27 00:03:47 +02009642 Py_CLEAR(tmp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009643 }
Victor Stinner74419f02020-07-03 11:35:37 +02009644 if (_PyObject_LookupAttr(obj, state->lineno, &tmp) < 0) {
Pablo Galindo168660b2020-04-02 00:47:39 +01009645 return 1;
9646 }
9647 if (tmp == NULL) {
9648 PyErr_SetString(PyExc_TypeError, "required field \"lineno\" missing from keyword");
9649 return 1;
9650 }
9651 else {
9652 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02009653 res = obj2ast_int(state, tmp, &lineno, arena);
Pablo Galindo168660b2020-04-02 00:47:39 +01009654 if (res != 0) goto failed;
9655 Py_CLEAR(tmp);
9656 }
Victor Stinner74419f02020-07-03 11:35:37 +02009657 if (_PyObject_LookupAttr(obj, state->col_offset, &tmp) < 0) {
Pablo Galindo168660b2020-04-02 00:47:39 +01009658 return 1;
9659 }
9660 if (tmp == NULL) {
9661 PyErr_SetString(PyExc_TypeError, "required field \"col_offset\" missing from keyword");
9662 return 1;
9663 }
9664 else {
9665 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02009666 res = obj2ast_int(state, tmp, &col_offset, arena);
Pablo Galindo168660b2020-04-02 00:47:39 +01009667 if (res != 0) goto failed;
9668 Py_CLEAR(tmp);
9669 }
Victor Stinner74419f02020-07-03 11:35:37 +02009670 if (_PyObject_LookupAttr(obj, state->end_lineno, &tmp) < 0) {
Pablo Galindo168660b2020-04-02 00:47:39 +01009671 return 1;
9672 }
9673 if (tmp == NULL || tmp == Py_None) {
9674 Py_CLEAR(tmp);
9675 end_lineno = 0;
9676 }
9677 else {
9678 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02009679 res = obj2ast_int(state, tmp, &end_lineno, arena);
Pablo Galindo168660b2020-04-02 00:47:39 +01009680 if (res != 0) goto failed;
9681 Py_CLEAR(tmp);
9682 }
Victor Stinner74419f02020-07-03 11:35:37 +02009683 if (_PyObject_LookupAttr(obj, state->end_col_offset, &tmp) < 0) {
Pablo Galindo168660b2020-04-02 00:47:39 +01009684 return 1;
9685 }
9686 if (tmp == NULL || tmp == Py_None) {
9687 Py_CLEAR(tmp);
9688 end_col_offset = 0;
9689 }
9690 else {
9691 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02009692 res = obj2ast_int(state, tmp, &end_col_offset, arena);
Pablo Galindo168660b2020-04-02 00:47:39 +01009693 if (res != 0) goto failed;
9694 Py_CLEAR(tmp);
9695 }
9696 *out = keyword(arg, value, lineno, col_offset, end_lineno, end_col_offset,
9697 arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009698 return 0;
9699failed:
9700 Py_XDECREF(tmp);
9701 return 1;
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00009702}
9703
9704int
Victor Stinner5cf47822020-11-02 22:03:28 +01009705obj2ast_alias(struct ast_state *state, PyObject* obj, alias_ty* out, PyArena*
Victor Stinner74419f02020-07-03 11:35:37 +02009706 arena)
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00009707{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009708 PyObject* tmp = NULL;
9709 identifier name;
9710 identifier asname;
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00009711
Victor Stinner74419f02020-07-03 11:35:37 +02009712 if (_PyObject_LookupAttr(obj, state->name, &tmp) < 0) {
Serhiy Storchakaf320be72018-01-25 10:49:40 +02009713 return 1;
9714 }
9715 if (tmp == NULL) {
9716 PyErr_SetString(PyExc_TypeError, "required field \"name\" missing from alias");
9717 return 1;
9718 }
9719 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009720 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02009721 res = obj2ast_identifier(state, tmp, &name, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009722 if (res != 0) goto failed;
Victor Stinner1acc1292013-07-27 00:03:47 +02009723 Py_CLEAR(tmp);
Serhiy Storchakaf320be72018-01-25 10:49:40 +02009724 }
Victor Stinner74419f02020-07-03 11:35:37 +02009725 if (_PyObject_LookupAttr(obj, state->asname, &tmp) < 0) {
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00009726 return 1;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009727 }
Serhiy Storchakaf320be72018-01-25 10:49:40 +02009728 if (tmp == NULL || tmp == Py_None) {
9729 Py_CLEAR(tmp);
9730 asname = NULL;
9731 }
9732 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009733 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02009734 res = obj2ast_identifier(state, tmp, &asname, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009735 if (res != 0) goto failed;
Victor Stinner1acc1292013-07-27 00:03:47 +02009736 Py_CLEAR(tmp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009737 }
9738 *out = alias(name, asname, arena);
9739 return 0;
9740failed:
9741 Py_XDECREF(tmp);
9742 return 1;
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00009743}
9744
Benjamin Petersonbf1bbc12011-05-27 13:58:08 -05009745int
Victor Stinner5cf47822020-11-02 22:03:28 +01009746obj2ast_withitem(struct ast_state *state, PyObject* obj, withitem_ty* out,
Victor Stinner74419f02020-07-03 11:35:37 +02009747 PyArena* arena)
Benjamin Petersonbf1bbc12011-05-27 13:58:08 -05009748{
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009749 PyObject* tmp = NULL;
9750 expr_ty context_expr;
9751 expr_ty optional_vars;
Benjamin Petersonbf1bbc12011-05-27 13:58:08 -05009752
Victor Stinner74419f02020-07-03 11:35:37 +02009753 if (_PyObject_LookupAttr(obj, state->context_expr, &tmp) < 0) {
Serhiy Storchakaf320be72018-01-25 10:49:40 +02009754 return 1;
9755 }
9756 if (tmp == NULL) {
9757 PyErr_SetString(PyExc_TypeError, "required field \"context_expr\" missing from withitem");
9758 return 1;
9759 }
9760 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009761 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02009762 res = obj2ast_expr(state, tmp, &context_expr, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009763 if (res != 0) goto failed;
Victor Stinner1acc1292013-07-27 00:03:47 +02009764 Py_CLEAR(tmp);
Serhiy Storchakaf320be72018-01-25 10:49:40 +02009765 }
Victor Stinner74419f02020-07-03 11:35:37 +02009766 if (_PyObject_LookupAttr(obj, state->optional_vars, &tmp) < 0) {
Benjamin Petersonbf1bbc12011-05-27 13:58:08 -05009767 return 1;
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009768 }
Serhiy Storchakaf320be72018-01-25 10:49:40 +02009769 if (tmp == NULL || tmp == Py_None) {
9770 Py_CLEAR(tmp);
9771 optional_vars = NULL;
9772 }
9773 else {
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009774 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02009775 res = obj2ast_expr(state, tmp, &optional_vars, arena);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009776 if (res != 0) goto failed;
Victor Stinner1acc1292013-07-27 00:03:47 +02009777 Py_CLEAR(tmp);
Victor Stinnerce72e1c2013-07-27 00:00:36 +02009778 }
9779 *out = withitem(context_expr, optional_vars, arena);
9780 return 0;
9781failed:
9782 Py_XDECREF(tmp);
9783 return 1;
Benjamin Petersonbf1bbc12011-05-27 13:58:08 -05009784}
9785
Guido van Rossumdcfcd142019-01-31 03:40:27 -08009786int
Brandt Bucher145bf262021-02-26 14:51:55 -08009787obj2ast_match_case(struct ast_state *state, PyObject* obj, match_case_ty* out,
9788 PyArena* arena)
9789{
9790 PyObject* tmp = NULL;
9791 expr_ty pattern;
9792 expr_ty guard;
9793 asdl_stmt_seq* body;
9794
9795 if (_PyObject_LookupAttr(obj, state->pattern, &tmp) < 0) {
9796 return 1;
9797 }
9798 if (tmp == NULL) {
9799 PyErr_SetString(PyExc_TypeError, "required field \"pattern\" missing from match_case");
9800 return 1;
9801 }
9802 else {
9803 int res;
9804 res = obj2ast_expr(state, tmp, &pattern, arena);
9805 if (res != 0) goto failed;
9806 Py_CLEAR(tmp);
9807 }
9808 if (_PyObject_LookupAttr(obj, state->guard, &tmp) < 0) {
9809 return 1;
9810 }
9811 if (tmp == NULL || tmp == Py_None) {
9812 Py_CLEAR(tmp);
9813 guard = NULL;
9814 }
9815 else {
9816 int res;
9817 res = obj2ast_expr(state, tmp, &guard, arena);
9818 if (res != 0) goto failed;
9819 Py_CLEAR(tmp);
9820 }
9821 if (_PyObject_LookupAttr(obj, state->body, &tmp) < 0) {
9822 return 1;
9823 }
9824 if (tmp == NULL) {
9825 PyErr_SetString(PyExc_TypeError, "required field \"body\" missing from match_case");
9826 return 1;
9827 }
9828 else {
9829 int res;
9830 Py_ssize_t len;
9831 Py_ssize_t i;
9832 if (!PyList_Check(tmp)) {
9833 PyErr_Format(PyExc_TypeError, "match_case field \"body\" must be a list, not a %.200s", _PyType_Name(Py_TYPE(tmp)));
9834 goto failed;
9835 }
9836 len = PyList_GET_SIZE(tmp);
9837 body = _Py_asdl_stmt_seq_new(len, arena);
9838 if (body == NULL) goto failed;
9839 for (i = 0; i < len; i++) {
9840 stmt_ty val;
9841 PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
9842 Py_INCREF(tmp2);
9843 res = obj2ast_stmt(state, tmp2, &val, arena);
9844 Py_DECREF(tmp2);
9845 if (res != 0) goto failed;
9846 if (len != PyList_GET_SIZE(tmp)) {
9847 PyErr_SetString(PyExc_RuntimeError, "match_case field \"body\" changed size during iteration");
9848 goto failed;
9849 }
9850 asdl_seq_SET(body, i, val);
9851 }
9852 Py_CLEAR(tmp);
9853 }
9854 *out = match_case(pattern, guard, body, arena);
9855 return 0;
9856failed:
9857 Py_XDECREF(tmp);
9858 return 1;
9859}
9860
9861int
Victor Stinner5cf47822020-11-02 22:03:28 +01009862obj2ast_type_ignore(struct ast_state *state, PyObject* obj, type_ignore_ty*
9863 out, PyArena* arena)
Guido van Rossumdcfcd142019-01-31 03:40:27 -08009864{
9865 int isinstance;
9866
9867 PyObject *tmp = NULL;
Dino Viehlandac46eb42019-09-11 10:16:34 -07009868 PyObject *tp;
Guido van Rossumdcfcd142019-01-31 03:40:27 -08009869
9870 if (obj == Py_None) {
9871 *out = NULL;
9872 return 0;
9873 }
Victor Stinner74419f02020-07-03 11:35:37 +02009874 tp = state->TypeIgnore_type;
Dino Viehlandac46eb42019-09-11 10:16:34 -07009875 isinstance = PyObject_IsInstance(obj, tp);
Guido van Rossumdcfcd142019-01-31 03:40:27 -08009876 if (isinstance == -1) {
9877 return 1;
9878 }
9879 if (isinstance) {
9880 int lineno;
Michael J. Sullivan933e1502019-05-22 07:54:20 -07009881 string tag;
Guido van Rossumdcfcd142019-01-31 03:40:27 -08009882
Victor Stinner74419f02020-07-03 11:35:37 +02009883 if (_PyObject_LookupAttr(obj, state->lineno, &tmp) < 0) {
Guido van Rossumdcfcd142019-01-31 03:40:27 -08009884 return 1;
9885 }
9886 if (tmp == NULL) {
9887 PyErr_SetString(PyExc_TypeError, "required field \"lineno\" missing from TypeIgnore");
9888 return 1;
9889 }
9890 else {
9891 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02009892 res = obj2ast_int(state, tmp, &lineno, arena);
Guido van Rossumdcfcd142019-01-31 03:40:27 -08009893 if (res != 0) goto failed;
9894 Py_CLEAR(tmp);
9895 }
Victor Stinner74419f02020-07-03 11:35:37 +02009896 if (_PyObject_LookupAttr(obj, state->tag, &tmp) < 0) {
Michael J. Sullivan933e1502019-05-22 07:54:20 -07009897 return 1;
9898 }
9899 if (tmp == NULL) {
9900 PyErr_SetString(PyExc_TypeError, "required field \"tag\" missing from TypeIgnore");
9901 return 1;
9902 }
9903 else {
9904 int res;
Victor Stinner74419f02020-07-03 11:35:37 +02009905 res = obj2ast_string(state, tmp, &tag, arena);
Michael J. Sullivan933e1502019-05-22 07:54:20 -07009906 if (res != 0) goto failed;
9907 Py_CLEAR(tmp);
9908 }
9909 *out = TypeIgnore(lineno, tag, arena);
Guido van Rossumdcfcd142019-01-31 03:40:27 -08009910 if (*out == NULL) goto failed;
9911 return 0;
9912 }
9913
9914 PyErr_Format(PyExc_TypeError, "expected some sort of type_ignore, but got %R", obj);
9915 failed:
9916 Py_XDECREF(tmp);
9917 return 1;
9918}
9919
Martin v. Löwis618dc5e2008-03-30 20:03:44 +00009920
Victor Stinnerb1cc6ba2020-07-03 20:01:46 +02009921static int
9922astmodule_exec(PyObject *m)
Martin v. Löwis577b5b92006-02-27 15:23:19 +00009923{
Victor Stinner5cf47822020-11-02 22:03:28 +01009924 struct ast_state *state = get_ast_state();
9925 if (state == NULL) {
Victor Stinnerb1cc6ba2020-07-03 20:01:46 +02009926 return -1;
Victor Stinner91e1bc12020-07-03 14:15:53 +02009927 }
Victor Stinner18ce7f12020-11-04 16:37:07 +01009928 if (PyModule_AddObjectRef(m, "AST", state->AST_type) < 0) {
Victor Stinnerb1cc6ba2020-07-03 20:01:46 +02009929 return -1;
Brandt Bucherd2f96672020-02-06 06:45:46 -08009930 }
Brandt Bucherd2f96672020-02-06 06:45:46 -08009931 if (PyModule_AddIntMacro(m, PyCF_ALLOW_TOP_LEVEL_AWAIT) < 0) {
Victor Stinnerb1cc6ba2020-07-03 20:01:46 +02009932 return -1;
Brandt Bucherd2f96672020-02-06 06:45:46 -08009933 }
9934 if (PyModule_AddIntMacro(m, PyCF_ONLY_AST) < 0) {
Victor Stinnerb1cc6ba2020-07-03 20:01:46 +02009935 return -1;
Brandt Bucherd2f96672020-02-06 06:45:46 -08009936 }
9937 if (PyModule_AddIntMacro(m, PyCF_TYPE_COMMENTS) < 0) {
Victor Stinnerb1cc6ba2020-07-03 20:01:46 +02009938 return -1;
Brandt Bucherd2f96672020-02-06 06:45:46 -08009939 }
Victor Stinner18ce7f12020-11-04 16:37:07 +01009940 if (PyModule_AddObjectRef(m, "mod", state->mod_type) < 0) {
Victor Stinnerb1cc6ba2020-07-03 20:01:46 +02009941 return -1;
Brandt Bucherd2f96672020-02-06 06:45:46 -08009942 }
Victor Stinner18ce7f12020-11-04 16:37:07 +01009943 if (PyModule_AddObjectRef(m, "Module", state->Module_type) < 0) {
Victor Stinnerb1cc6ba2020-07-03 20:01:46 +02009944 return -1;
Brandt Bucherd2f96672020-02-06 06:45:46 -08009945 }
Victor Stinner18ce7f12020-11-04 16:37:07 +01009946 if (PyModule_AddObjectRef(m, "Interactive", state->Interactive_type) < 0) {
Victor Stinnerb1cc6ba2020-07-03 20:01:46 +02009947 return -1;
Brandt Bucherd2f96672020-02-06 06:45:46 -08009948 }
Victor Stinner18ce7f12020-11-04 16:37:07 +01009949 if (PyModule_AddObjectRef(m, "Expression", state->Expression_type) < 0) {
Victor Stinnerb1cc6ba2020-07-03 20:01:46 +02009950 return -1;
Brandt Bucherd2f96672020-02-06 06:45:46 -08009951 }
Victor Stinner18ce7f12020-11-04 16:37:07 +01009952 if (PyModule_AddObjectRef(m, "FunctionType", state->FunctionType_type) < 0)
9953 {
Victor Stinnerb1cc6ba2020-07-03 20:01:46 +02009954 return -1;
Brandt Bucherd2f96672020-02-06 06:45:46 -08009955 }
Victor Stinner18ce7f12020-11-04 16:37:07 +01009956 if (PyModule_AddObjectRef(m, "stmt", state->stmt_type) < 0) {
Victor Stinnerb1cc6ba2020-07-03 20:01:46 +02009957 return -1;
Brandt Bucherd2f96672020-02-06 06:45:46 -08009958 }
Victor Stinner18ce7f12020-11-04 16:37:07 +01009959 if (PyModule_AddObjectRef(m, "FunctionDef", state->FunctionDef_type) < 0) {
Victor Stinnerb1cc6ba2020-07-03 20:01:46 +02009960 return -1;
Brandt Bucherd2f96672020-02-06 06:45:46 -08009961 }
Victor Stinner18ce7f12020-11-04 16:37:07 +01009962 if (PyModule_AddObjectRef(m, "AsyncFunctionDef",
9963 state->AsyncFunctionDef_type) < 0) {
9964 return -1;
9965 }
9966 if (PyModule_AddObjectRef(m, "ClassDef", state->ClassDef_type) < 0) {
9967 return -1;
9968 }
9969 if (PyModule_AddObjectRef(m, "Return", state->Return_type) < 0) {
9970 return -1;
9971 }
9972 if (PyModule_AddObjectRef(m, "Delete", state->Delete_type) < 0) {
9973 return -1;
9974 }
9975 if (PyModule_AddObjectRef(m, "Assign", state->Assign_type) < 0) {
9976 return -1;
9977 }
9978 if (PyModule_AddObjectRef(m, "AugAssign", state->AugAssign_type) < 0) {
9979 return -1;
9980 }
9981 if (PyModule_AddObjectRef(m, "AnnAssign", state->AnnAssign_type) < 0) {
9982 return -1;
9983 }
9984 if (PyModule_AddObjectRef(m, "For", state->For_type) < 0) {
9985 return -1;
9986 }
9987 if (PyModule_AddObjectRef(m, "AsyncFor", state->AsyncFor_type) < 0) {
9988 return -1;
9989 }
9990 if (PyModule_AddObjectRef(m, "While", state->While_type) < 0) {
9991 return -1;
9992 }
9993 if (PyModule_AddObjectRef(m, "If", state->If_type) < 0) {
9994 return -1;
9995 }
9996 if (PyModule_AddObjectRef(m, "With", state->With_type) < 0) {
9997 return -1;
9998 }
9999 if (PyModule_AddObjectRef(m, "AsyncWith", state->AsyncWith_type) < 0) {
10000 return -1;
10001 }
Brandt Bucher145bf262021-02-26 14:51:55 -080010002 if (PyModule_AddObjectRef(m, "Match", state->Match_type) < 0) {
10003 return -1;
10004 }
Victor Stinner18ce7f12020-11-04 16:37:07 +010010005 if (PyModule_AddObjectRef(m, "Raise", state->Raise_type) < 0) {
10006 return -1;
10007 }
10008 if (PyModule_AddObjectRef(m, "Try", state->Try_type) < 0) {
10009 return -1;
10010 }
10011 if (PyModule_AddObjectRef(m, "Assert", state->Assert_type) < 0) {
10012 return -1;
10013 }
10014 if (PyModule_AddObjectRef(m, "Import", state->Import_type) < 0) {
10015 return -1;
10016 }
10017 if (PyModule_AddObjectRef(m, "ImportFrom", state->ImportFrom_type) < 0) {
10018 return -1;
10019 }
10020 if (PyModule_AddObjectRef(m, "Global", state->Global_type) < 0) {
10021 return -1;
10022 }
10023 if (PyModule_AddObjectRef(m, "Nonlocal", state->Nonlocal_type) < 0) {
10024 return -1;
10025 }
10026 if (PyModule_AddObjectRef(m, "Expr", state->Expr_type) < 0) {
10027 return -1;
10028 }
10029 if (PyModule_AddObjectRef(m, "Pass", state->Pass_type) < 0) {
10030 return -1;
10031 }
10032 if (PyModule_AddObjectRef(m, "Break", state->Break_type) < 0) {
10033 return -1;
10034 }
10035 if (PyModule_AddObjectRef(m, "Continue", state->Continue_type) < 0) {
10036 return -1;
10037 }
10038 if (PyModule_AddObjectRef(m, "expr", state->expr_type) < 0) {
10039 return -1;
10040 }
10041 if (PyModule_AddObjectRef(m, "BoolOp", state->BoolOp_type) < 0) {
10042 return -1;
10043 }
10044 if (PyModule_AddObjectRef(m, "NamedExpr", state->NamedExpr_type) < 0) {
10045 return -1;
10046 }
10047 if (PyModule_AddObjectRef(m, "BinOp", state->BinOp_type) < 0) {
10048 return -1;
10049 }
10050 if (PyModule_AddObjectRef(m, "UnaryOp", state->UnaryOp_type) < 0) {
10051 return -1;
10052 }
10053 if (PyModule_AddObjectRef(m, "Lambda", state->Lambda_type) < 0) {
10054 return -1;
10055 }
10056 if (PyModule_AddObjectRef(m, "IfExp", state->IfExp_type) < 0) {
10057 return -1;
10058 }
10059 if (PyModule_AddObjectRef(m, "Dict", state->Dict_type) < 0) {
10060 return -1;
10061 }
10062 if (PyModule_AddObjectRef(m, "Set", state->Set_type) < 0) {
10063 return -1;
10064 }
10065 if (PyModule_AddObjectRef(m, "ListComp", state->ListComp_type) < 0) {
10066 return -1;
10067 }
10068 if (PyModule_AddObjectRef(m, "SetComp", state->SetComp_type) < 0) {
10069 return -1;
10070 }
10071 if (PyModule_AddObjectRef(m, "DictComp", state->DictComp_type) < 0) {
10072 return -1;
10073 }
10074 if (PyModule_AddObjectRef(m, "GeneratorExp", state->GeneratorExp_type) < 0)
10075 {
10076 return -1;
10077 }
10078 if (PyModule_AddObjectRef(m, "Await", state->Await_type) < 0) {
10079 return -1;
10080 }
10081 if (PyModule_AddObjectRef(m, "Yield", state->Yield_type) < 0) {
10082 return -1;
10083 }
10084 if (PyModule_AddObjectRef(m, "YieldFrom", state->YieldFrom_type) < 0) {
10085 return -1;
10086 }
10087 if (PyModule_AddObjectRef(m, "Compare", state->Compare_type) < 0) {
10088 return -1;
10089 }
10090 if (PyModule_AddObjectRef(m, "Call", state->Call_type) < 0) {
10091 return -1;
10092 }
10093 if (PyModule_AddObjectRef(m, "FormattedValue", state->FormattedValue_type)
Brandt Bucherd2f96672020-02-06 06:45:46 -080010094 < 0) {
Victor Stinnerb1cc6ba2020-07-03 20:01:46 +020010095 return -1;
Brandt Bucherd2f96672020-02-06 06:45:46 -080010096 }
Victor Stinner18ce7f12020-11-04 16:37:07 +010010097 if (PyModule_AddObjectRef(m, "JoinedStr", state->JoinedStr_type) < 0) {
Victor Stinnerb1cc6ba2020-07-03 20:01:46 +020010098 return -1;
Victor Stinner74419f02020-07-03 11:35:37 +020010099 }
Victor Stinner18ce7f12020-11-04 16:37:07 +010010100 if (PyModule_AddObjectRef(m, "Constant", state->Constant_type) < 0) {
Victor Stinnerb1cc6ba2020-07-03 20:01:46 +020010101 return -1;
Victor Stinner74419f02020-07-03 11:35:37 +020010102 }
Victor Stinner18ce7f12020-11-04 16:37:07 +010010103 if (PyModule_AddObjectRef(m, "Attribute", state->Attribute_type) < 0) {
Victor Stinnerb1cc6ba2020-07-03 20:01:46 +020010104 return -1;
Victor Stinner74419f02020-07-03 11:35:37 +020010105 }
Victor Stinner18ce7f12020-11-04 16:37:07 +010010106 if (PyModule_AddObjectRef(m, "Subscript", state->Subscript_type) < 0) {
Victor Stinnerb1cc6ba2020-07-03 20:01:46 +020010107 return -1;
Victor Stinner74419f02020-07-03 11:35:37 +020010108 }
Victor Stinner18ce7f12020-11-04 16:37:07 +010010109 if (PyModule_AddObjectRef(m, "Starred", state->Starred_type) < 0) {
Victor Stinnerb1cc6ba2020-07-03 20:01:46 +020010110 return -1;
Victor Stinner74419f02020-07-03 11:35:37 +020010111 }
Victor Stinner18ce7f12020-11-04 16:37:07 +010010112 if (PyModule_AddObjectRef(m, "Name", state->Name_type) < 0) {
Victor Stinnerb1cc6ba2020-07-03 20:01:46 +020010113 return -1;
Victor Stinner74419f02020-07-03 11:35:37 +020010114 }
Victor Stinner18ce7f12020-11-04 16:37:07 +010010115 if (PyModule_AddObjectRef(m, "List", state->List_type) < 0) {
Victor Stinnerb1cc6ba2020-07-03 20:01:46 +020010116 return -1;
Victor Stinner74419f02020-07-03 11:35:37 +020010117 }
Victor Stinner18ce7f12020-11-04 16:37:07 +010010118 if (PyModule_AddObjectRef(m, "Tuple", state->Tuple_type) < 0) {
Victor Stinnerb1cc6ba2020-07-03 20:01:46 +020010119 return -1;
Victor Stinner74419f02020-07-03 11:35:37 +020010120 }
Victor Stinner18ce7f12020-11-04 16:37:07 +010010121 if (PyModule_AddObjectRef(m, "Slice", state->Slice_type) < 0) {
Victor Stinnerb1cc6ba2020-07-03 20:01:46 +020010122 return -1;
Victor Stinner74419f02020-07-03 11:35:37 +020010123 }
Brandt Bucher145bf262021-02-26 14:51:55 -080010124 if (PyModule_AddObjectRef(m, "MatchAs", state->MatchAs_type) < 0) {
10125 return -1;
10126 }
10127 if (PyModule_AddObjectRef(m, "MatchOr", state->MatchOr_type) < 0) {
10128 return -1;
10129 }
Victor Stinner18ce7f12020-11-04 16:37:07 +010010130 if (PyModule_AddObjectRef(m, "expr_context", state->expr_context_type) < 0)
10131 {
Victor Stinnerb1cc6ba2020-07-03 20:01:46 +020010132 return -1;
Victor Stinner74419f02020-07-03 11:35:37 +020010133 }
Victor Stinner18ce7f12020-11-04 16:37:07 +010010134 if (PyModule_AddObjectRef(m, "Load", state->Load_type) < 0) {
Victor Stinnerb1cc6ba2020-07-03 20:01:46 +020010135 return -1;
Victor Stinner74419f02020-07-03 11:35:37 +020010136 }
Victor Stinner18ce7f12020-11-04 16:37:07 +010010137 if (PyModule_AddObjectRef(m, "Store", state->Store_type) < 0) {
Victor Stinnerb1cc6ba2020-07-03 20:01:46 +020010138 return -1;
Victor Stinner74419f02020-07-03 11:35:37 +020010139 }
Victor Stinner18ce7f12020-11-04 16:37:07 +010010140 if (PyModule_AddObjectRef(m, "Del", state->Del_type) < 0) {
Victor Stinnerb1cc6ba2020-07-03 20:01:46 +020010141 return -1;
Victor Stinner74419f02020-07-03 11:35:37 +020010142 }
Victor Stinner18ce7f12020-11-04 16:37:07 +010010143 if (PyModule_AddObjectRef(m, "boolop", state->boolop_type) < 0) {
Victor Stinnerb1cc6ba2020-07-03 20:01:46 +020010144 return -1;
Victor Stinner74419f02020-07-03 11:35:37 +020010145 }
Victor Stinner18ce7f12020-11-04 16:37:07 +010010146 if (PyModule_AddObjectRef(m, "And", state->And_type) < 0) {
Victor Stinnerb1cc6ba2020-07-03 20:01:46 +020010147 return -1;
Victor Stinner74419f02020-07-03 11:35:37 +020010148 }
Victor Stinner18ce7f12020-11-04 16:37:07 +010010149 if (PyModule_AddObjectRef(m, "Or", state->Or_type) < 0) {
Victor Stinnerb1cc6ba2020-07-03 20:01:46 +020010150 return -1;
Victor Stinner74419f02020-07-03 11:35:37 +020010151 }
Victor Stinner18ce7f12020-11-04 16:37:07 +010010152 if (PyModule_AddObjectRef(m, "operator", state->operator_type) < 0) {
Victor Stinnerb1cc6ba2020-07-03 20:01:46 +020010153 return -1;
Victor Stinner74419f02020-07-03 11:35:37 +020010154 }
Victor Stinner18ce7f12020-11-04 16:37:07 +010010155 if (PyModule_AddObjectRef(m, "Add", state->Add_type) < 0) {
Victor Stinnerb1cc6ba2020-07-03 20:01:46 +020010156 return -1;
Victor Stinner74419f02020-07-03 11:35:37 +020010157 }
Victor Stinner18ce7f12020-11-04 16:37:07 +010010158 if (PyModule_AddObjectRef(m, "Sub", state->Sub_type) < 0) {
Victor Stinnerb1cc6ba2020-07-03 20:01:46 +020010159 return -1;
Victor Stinner74419f02020-07-03 11:35:37 +020010160 }
Victor Stinner18ce7f12020-11-04 16:37:07 +010010161 if (PyModule_AddObjectRef(m, "Mult", state->Mult_type) < 0) {
Victor Stinnerb1cc6ba2020-07-03 20:01:46 +020010162 return -1;
Victor Stinner74419f02020-07-03 11:35:37 +020010163 }
Victor Stinner18ce7f12020-11-04 16:37:07 +010010164 if (PyModule_AddObjectRef(m, "MatMult", state->MatMult_type) < 0) {
Victor Stinnerb1cc6ba2020-07-03 20:01:46 +020010165 return -1;
Victor Stinner74419f02020-07-03 11:35:37 +020010166 }
Victor Stinner18ce7f12020-11-04 16:37:07 +010010167 if (PyModule_AddObjectRef(m, "Div", state->Div_type) < 0) {
Victor Stinnerb1cc6ba2020-07-03 20:01:46 +020010168 return -1;
Victor Stinner74419f02020-07-03 11:35:37 +020010169 }
Victor Stinner18ce7f12020-11-04 16:37:07 +010010170 if (PyModule_AddObjectRef(m, "Mod", state->Mod_type) < 0) {
Victor Stinnerb1cc6ba2020-07-03 20:01:46 +020010171 return -1;
Victor Stinner74419f02020-07-03 11:35:37 +020010172 }
Victor Stinner18ce7f12020-11-04 16:37:07 +010010173 if (PyModule_AddObjectRef(m, "Pow", state->Pow_type) < 0) {
Victor Stinnerb1cc6ba2020-07-03 20:01:46 +020010174 return -1;
Victor Stinner74419f02020-07-03 11:35:37 +020010175 }
Victor Stinner18ce7f12020-11-04 16:37:07 +010010176 if (PyModule_AddObjectRef(m, "LShift", state->LShift_type) < 0) {
Victor Stinnerb1cc6ba2020-07-03 20:01:46 +020010177 return -1;
Victor Stinner74419f02020-07-03 11:35:37 +020010178 }
Victor Stinner18ce7f12020-11-04 16:37:07 +010010179 if (PyModule_AddObjectRef(m, "RShift", state->RShift_type) < 0) {
Victor Stinnerb1cc6ba2020-07-03 20:01:46 +020010180 return -1;
Victor Stinner74419f02020-07-03 11:35:37 +020010181 }
Victor Stinner18ce7f12020-11-04 16:37:07 +010010182 if (PyModule_AddObjectRef(m, "BitOr", state->BitOr_type) < 0) {
Victor Stinnerb1cc6ba2020-07-03 20:01:46 +020010183 return -1;
Victor Stinner74419f02020-07-03 11:35:37 +020010184 }
Victor Stinner18ce7f12020-11-04 16:37:07 +010010185 if (PyModule_AddObjectRef(m, "BitXor", state->BitXor_type) < 0) {
Victor Stinnerb1cc6ba2020-07-03 20:01:46 +020010186 return -1;
Victor Stinner74419f02020-07-03 11:35:37 +020010187 }
Victor Stinner18ce7f12020-11-04 16:37:07 +010010188 if (PyModule_AddObjectRef(m, "BitAnd", state->BitAnd_type) < 0) {
Victor Stinnerb1cc6ba2020-07-03 20:01:46 +020010189 return -1;
Victor Stinner74419f02020-07-03 11:35:37 +020010190 }
Victor Stinner18ce7f12020-11-04 16:37:07 +010010191 if (PyModule_AddObjectRef(m, "FloorDiv", state->FloorDiv_type) < 0) {
Victor Stinnerb1cc6ba2020-07-03 20:01:46 +020010192 return -1;
Victor Stinner74419f02020-07-03 11:35:37 +020010193 }
Victor Stinner18ce7f12020-11-04 16:37:07 +010010194 if (PyModule_AddObjectRef(m, "unaryop", state->unaryop_type) < 0) {
Victor Stinnerb1cc6ba2020-07-03 20:01:46 +020010195 return -1;
Victor Stinner74419f02020-07-03 11:35:37 +020010196 }
Victor Stinner18ce7f12020-11-04 16:37:07 +010010197 if (PyModule_AddObjectRef(m, "Invert", state->Invert_type) < 0) {
Victor Stinnerb1cc6ba2020-07-03 20:01:46 +020010198 return -1;
Victor Stinner74419f02020-07-03 11:35:37 +020010199 }
Victor Stinner18ce7f12020-11-04 16:37:07 +010010200 if (PyModule_AddObjectRef(m, "Not", state->Not_type) < 0) {
Victor Stinnerb1cc6ba2020-07-03 20:01:46 +020010201 return -1;
Victor Stinner74419f02020-07-03 11:35:37 +020010202 }
Victor Stinner18ce7f12020-11-04 16:37:07 +010010203 if (PyModule_AddObjectRef(m, "UAdd", state->UAdd_type) < 0) {
Victor Stinnerb1cc6ba2020-07-03 20:01:46 +020010204 return -1;
Victor Stinner74419f02020-07-03 11:35:37 +020010205 }
Victor Stinner18ce7f12020-11-04 16:37:07 +010010206 if (PyModule_AddObjectRef(m, "USub", state->USub_type) < 0) {
Victor Stinnerb1cc6ba2020-07-03 20:01:46 +020010207 return -1;
Victor Stinner74419f02020-07-03 11:35:37 +020010208 }
Victor Stinner18ce7f12020-11-04 16:37:07 +010010209 if (PyModule_AddObjectRef(m, "cmpop", state->cmpop_type) < 0) {
Victor Stinnerb1cc6ba2020-07-03 20:01:46 +020010210 return -1;
Victor Stinner74419f02020-07-03 11:35:37 +020010211 }
Victor Stinner18ce7f12020-11-04 16:37:07 +010010212 if (PyModule_AddObjectRef(m, "Eq", state->Eq_type) < 0) {
Victor Stinnerb1cc6ba2020-07-03 20:01:46 +020010213 return -1;
Victor Stinner74419f02020-07-03 11:35:37 +020010214 }
Victor Stinner18ce7f12020-11-04 16:37:07 +010010215 if (PyModule_AddObjectRef(m, "NotEq", state->NotEq_type) < 0) {
Victor Stinnerb1cc6ba2020-07-03 20:01:46 +020010216 return -1;
Victor Stinner74419f02020-07-03 11:35:37 +020010217 }
Victor Stinner18ce7f12020-11-04 16:37:07 +010010218 if (PyModule_AddObjectRef(m, "Lt", state->Lt_type) < 0) {
Victor Stinnerb1cc6ba2020-07-03 20:01:46 +020010219 return -1;
Victor Stinner74419f02020-07-03 11:35:37 +020010220 }
Victor Stinner18ce7f12020-11-04 16:37:07 +010010221 if (PyModule_AddObjectRef(m, "LtE", state->LtE_type) < 0) {
Victor Stinnerb1cc6ba2020-07-03 20:01:46 +020010222 return -1;
Victor Stinner74419f02020-07-03 11:35:37 +020010223 }
Victor Stinner18ce7f12020-11-04 16:37:07 +010010224 if (PyModule_AddObjectRef(m, "Gt", state->Gt_type) < 0) {
Victor Stinnerb1cc6ba2020-07-03 20:01:46 +020010225 return -1;
Victor Stinner74419f02020-07-03 11:35:37 +020010226 }
Victor Stinner18ce7f12020-11-04 16:37:07 +010010227 if (PyModule_AddObjectRef(m, "GtE", state->GtE_type) < 0) {
10228 return -1;
10229 }
10230 if (PyModule_AddObjectRef(m, "Is", state->Is_type) < 0) {
10231 return -1;
10232 }
10233 if (PyModule_AddObjectRef(m, "IsNot", state->IsNot_type) < 0) {
10234 return -1;
10235 }
10236 if (PyModule_AddObjectRef(m, "In", state->In_type) < 0) {
10237 return -1;
10238 }
10239 if (PyModule_AddObjectRef(m, "NotIn", state->NotIn_type) < 0) {
10240 return -1;
10241 }
10242 if (PyModule_AddObjectRef(m, "comprehension", state->comprehension_type) <
Brandt Bucherd2f96672020-02-06 06:45:46 -080010243 0) {
Victor Stinnerb1cc6ba2020-07-03 20:01:46 +020010244 return -1;
Brandt Bucherd2f96672020-02-06 06:45:46 -080010245 }
Victor Stinner18ce7f12020-11-04 16:37:07 +010010246 if (PyModule_AddObjectRef(m, "excepthandler", state->excepthandler_type) <
10247 0) {
Victor Stinnerb1cc6ba2020-07-03 20:01:46 +020010248 return -1;
Brandt Bucherd2f96672020-02-06 06:45:46 -080010249 }
Victor Stinner18ce7f12020-11-04 16:37:07 +010010250 if (PyModule_AddObjectRef(m, "ExceptHandler", state->ExceptHandler_type) <
10251 0) {
Victor Stinnerb1cc6ba2020-07-03 20:01:46 +020010252 return -1;
Brandt Bucherd2f96672020-02-06 06:45:46 -080010253 }
Victor Stinner18ce7f12020-11-04 16:37:07 +010010254 if (PyModule_AddObjectRef(m, "arguments", state->arguments_type) < 0) {
Victor Stinnerb1cc6ba2020-07-03 20:01:46 +020010255 return -1;
Brandt Bucherd2f96672020-02-06 06:45:46 -080010256 }
Victor Stinner18ce7f12020-11-04 16:37:07 +010010257 if (PyModule_AddObjectRef(m, "arg", state->arg_type) < 0) {
Victor Stinnerb1cc6ba2020-07-03 20:01:46 +020010258 return -1;
Brandt Bucherd2f96672020-02-06 06:45:46 -080010259 }
Victor Stinner18ce7f12020-11-04 16:37:07 +010010260 if (PyModule_AddObjectRef(m, "keyword", state->keyword_type) < 0) {
Victor Stinnerb1cc6ba2020-07-03 20:01:46 +020010261 return -1;
Brandt Bucherd2f96672020-02-06 06:45:46 -080010262 }
Victor Stinner18ce7f12020-11-04 16:37:07 +010010263 if (PyModule_AddObjectRef(m, "alias", state->alias_type) < 0) {
Victor Stinnerb1cc6ba2020-07-03 20:01:46 +020010264 return -1;
Brandt Bucherd2f96672020-02-06 06:45:46 -080010265 }
Victor Stinner18ce7f12020-11-04 16:37:07 +010010266 if (PyModule_AddObjectRef(m, "withitem", state->withitem_type) < 0) {
Victor Stinnerb1cc6ba2020-07-03 20:01:46 +020010267 return -1;
Brandt Bucherd2f96672020-02-06 06:45:46 -080010268 }
Brandt Bucher145bf262021-02-26 14:51:55 -080010269 if (PyModule_AddObjectRef(m, "match_case", state->match_case_type) < 0) {
10270 return -1;
10271 }
Victor Stinner18ce7f12020-11-04 16:37:07 +010010272 if (PyModule_AddObjectRef(m, "type_ignore", state->type_ignore_type) < 0) {
Victor Stinnerb1cc6ba2020-07-03 20:01:46 +020010273 return -1;
Brandt Bucherd2f96672020-02-06 06:45:46 -080010274 }
Victor Stinner18ce7f12020-11-04 16:37:07 +010010275 if (PyModule_AddObjectRef(m, "TypeIgnore", state->TypeIgnore_type) < 0) {
Victor Stinnerb1cc6ba2020-07-03 20:01:46 +020010276 return -1;
Brandt Bucherd2f96672020-02-06 06:45:46 -080010277 }
Victor Stinnerb1cc6ba2020-07-03 20:01:46 +020010278 return 0;
10279}
Victor Stinner91e1bc12020-07-03 14:15:53 +020010280
Victor Stinnerb1cc6ba2020-07-03 20:01:46 +020010281static PyModuleDef_Slot astmodule_slots[] = {
10282 {Py_mod_exec, astmodule_exec},
10283 {0, NULL}
10284};
10285
10286static struct PyModuleDef _astmodule = {
10287 PyModuleDef_HEAD_INIT,
10288 .m_name = "_ast",
Victor Stinner5cf47822020-11-02 22:03:28 +010010289 // The _ast module uses a per-interpreter state (PyInterpreterState.ast)
Victor Stinnere5fbe0c2020-09-15 18:03:34 +020010290 .m_size = 0,
Victor Stinnerb1cc6ba2020-07-03 20:01:46 +020010291 .m_slots = astmodule_slots,
Victor Stinnerb1cc6ba2020-07-03 20:01:46 +020010292};
10293
10294PyMODINIT_FUNC
10295PyInit__ast(void)
10296{
10297 return PyModuleDef_Init(&_astmodule);
Martin v. Löwis577b5b92006-02-27 15:23:19 +000010298}
10299
Jeremy Hylton3e0055f2005-10-20 19:59:25 +000010300
Martin v. Löwisbd260da2006-02-26 19:42:26 +000010301PyObject* PyAST_mod2obj(mod_ty t)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +000010302{
Victor Stinner5cf47822020-11-02 22:03:28 +010010303 struct ast_state *state = get_ast_state();
Victor Stinnerb1cc6ba2020-07-03 20:01:46 +020010304 if (state == NULL) {
Victor Stinnerbdf630c2013-07-17 00:17:15 +020010305 return NULL;
Victor Stinner91e1bc12020-07-03 14:15:53 +020010306 }
Victor Stinner74419f02020-07-03 11:35:37 +020010307 return ast2obj_mod(state, t);
Jeremy Hylton3e0055f2005-10-20 19:59:25 +000010308}
Martin v. Löwis5b222132007-06-10 09:51:05 +000010309
Neal Norwitzdb4115f2008-03-31 04:20:05 +000010310/* mode is 0 for "exec", 1 for "eval" and 2 for "single" input */
10311mod_ty PyAST_obj2mod(PyObject* ast, PyArena* arena, int mode)
Martin v. Löwis618dc5e2008-03-30 20:03:44 +000010312{
Serhiy Storchaka43c97312019-09-10 13:02:30 +030010313 const char * const req_name[] = {"Module", "Expression", "Interactive"};
Benjamin Peterson0496c9e2009-12-13 01:24:58 +000010314 int isinstance;
Benjamin Peterson42ec0312014-02-10 22:41:40 -050010315
Steve Dowerb82e17e2019-05-23 08:45:22 -070010316 if (PySys_Audit("compile", "OO", ast, Py_None) < 0) {
10317 return NULL;
10318 }
10319
Victor Stinner5cf47822020-11-02 22:03:28 +010010320 struct ast_state *state = get_ast_state();
10321 if (state == NULL) {
10322 return NULL;
10323 }
10324
Victor Stinner74419f02020-07-03 11:35:37 +020010325 PyObject *req_type[3];
10326 req_type[0] = state->Module_type;
10327 req_type[1] = state->Expression_type;
10328 req_type[2] = state->Interactive_type;
Benjamin Peterson42ec0312014-02-10 22:41:40 -050010329
Guido van Rossum3a32e3b2019-02-01 11:37:34 -080010330 assert(0 <= mode && mode <= 2);
Neal Norwitzdb4115f2008-03-31 04:20:05 +000010331
Benjamin Peterson0496c9e2009-12-13 01:24:58 +000010332 isinstance = PyObject_IsInstance(ast, req_type[mode]);
10333 if (isinstance == -1)
10334 return NULL;
10335 if (!isinstance) {
Neal Norwitzdb4115f2008-03-31 04:20:05 +000010336 PyErr_Format(PyExc_TypeError, "expected %s node, got %.400s",
Dino Viehlandac46eb42019-09-11 10:16:34 -070010337 req_name[mode], _PyType_Name(Py_TYPE(ast)));
Martin v. Löwis618dc5e2008-03-30 20:03:44 +000010338 return NULL;
10339 }
Dong-hee Naa05fcd32019-10-10 16:41:26 +090010340
10341 mod_ty res = NULL;
Victor Stinner74419f02020-07-03 11:35:37 +020010342 if (obj2ast_mod(state, ast, &res, arena) != 0)
Martin v. Löwis618dc5e2008-03-30 20:03:44 +000010343 return NULL;
10344 else
10345 return res;
10346}
10347
10348int PyAST_Check(PyObject* obj)
10349{
Victor Stinner5cf47822020-11-02 22:03:28 +010010350 struct ast_state *state = get_ast_state();
Victor Stinnerb1cc6ba2020-07-03 20:01:46 +020010351 if (state == NULL) {
Victor Stinnerbdf630c2013-07-17 00:17:15 +020010352 return -1;
Victor Stinner91e1bc12020-07-03 14:15:53 +020010353 }
Victor Stinner74419f02020-07-03 11:35:37 +020010354 return PyObject_IsInstance(obj, state->AST_type);
Martin v. Löwis618dc5e2008-03-30 20:03:44 +000010355}
10356
Martin v. Löwis5b222132007-06-10 09:51:05 +000010357